Pass a socket mark to clatd so it can bind to its network.

Bug: 15340961
Change-Id: If15e90cbd5526f6c8fd839d4d009846d64d9e77a
diff --git a/server/ClatdController.cpp b/server/ClatdController.cpp
index 46834c6..b91b69a 100644
--- a/server/ClatdController.cpp
+++ b/server/ClatdController.cpp
@@ -22,6 +22,7 @@
 #include <cutils/log.h>
 
 #include "ClatdController.h"
+#include "Fwmark.h"
 #include "NetdConstants.h"
 #include "NetworkController.h"
 
@@ -49,14 +50,23 @@
     }
 
     if (!pid) {
-        char netId[UINT32_STRLEN];
-        snprintf(netId, sizeof(netId), "%u", mNetCtrl->getNetworkId(interface));
+        // Pass in the interface, a netid to use for DNS lookups, and a fwmark for outgoing packets.
+        unsigned netId = mNetCtrl->getNetworkId(interface);
+        char netIdString[UINT32_STRLEN];
+        snprintf(netIdString, sizeof(netIdString), "%u", netId);
+
+        Fwmark fwmark = { netId, true, true, PERMISSION_CONNECTIVITY_INTERNAL };
+        char fwmarkString[UINT32_HEX_STRLEN];
+        snprintf(fwmarkString, sizeof(fwmarkString), "0x%x", fwmark.intValue);
+
         char *args[] = {
-            (char*)"/system/bin/clatd",
-            (char*)"-i",
+            (char *) "/system/bin/clatd",
+            (char *) "-i",
             interface,
-            (char*)"-n",
-            netId,
+            (char *) "-n",
+            netIdString,
+            (char *) "-m",
+            fwmarkString,
             NULL
         };