patchpanel: implement traffic tagging for ConnectNamespace

This patch adds fwmark tagging to traffic from network namespaces
configured with the patchpanel ConnectNamespace DBus API. Both the
source tag and the routing tag are added.

The ConnectNamespace implementation has now 3 distinct routing mode:
 - tracking default physical network (previously only available mode),
 - tracking default logical network, physical or VPN,
 - tracking a specific physical network, a-la ARC.

BUG=b:174811524
BUG=b:161508179
BUG=chromium:1156894
TEST=unit tests. $ tast run <DUT_ip> network.TestProxyServer, checked
rules set in iptables -t mangle -L PREROUTING and -L POSTROUTING.

Change-Id: I10d9ea2da6e206f8f2d5270df8680d4351818a97
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform2/+/2574147
Tested-by: Hugo Benichi <hugobenichi@google.com>
Commit-Queue: Hugo Benichi <hugobenichi@google.com>
Reviewed-by: Garrick Evans <garrick@chromium.org>
diff --git a/patchpanel/routing_service.h b/patchpanel/routing_service.h
index b09d981..5442efc 100644
--- a/patchpanel/routing_service.h
+++ b/patchpanel/routing_service.h
@@ -66,6 +66,8 @@
   ARC_VPN = 0x24,
 };
 
+const std::string& TrafficSourceName(TrafficSource source);
+
 // A representation of how fwmark bits are split and used for tagging and
 // routing traffic. The 32 bits of the fwmark are currently organized as such:
 //    0                   1                   2                   3