From 82635ce60641fbd37a082929766cfd13e42aaeff Mon Sep 17 00:00:00 2001
From: Adam Ierymenko <adam.ierymenko@gmail.com>
Date: Thu, 9 Jun 2016 09:43:09 -0700
Subject: [PATCH] Add flags and metric to ZT-managed routes.

---
 include/ZeroTierOne.h  | 10 ++++++++++
 node/NetworkConfig.hpp |  4 ++++
 2 files changed, 14 insertions(+)

diff --git a/include/ZeroTierOne.h b/include/ZeroTierOne.h
index 207edce7a..dbd62fad4 100644
--- a/include/ZeroTierOne.h
+++ b/include/ZeroTierOne.h
@@ -633,6 +633,16 @@ typedef struct
 	 * Gateway IP address (port ignored) or NULL (family == 0) for LAN-local (no gateway)
 	 */
 	struct sockaddr_storage via;
+
+	/**
+	 * Route flags
+	 */
+	uint16_t flags;
+
+	/**
+	 * Route metric (not currently used)
+	 */
+	uint16_t metric;
 } ZT_VirtualNetworkRoute;
 
 /**
diff --git a/node/NetworkConfig.hpp b/node/NetworkConfig.hpp
index 06b6b6115..998d859f7 100644
--- a/node/NetworkConfig.hpp
+++ b/node/NetworkConfig.hpp
@@ -376,6 +376,8 @@ public:
 		for(unsigned int i=0;i<routeCount;++i) {
 			reinterpret_cast<const InetAddress *>(&(routes[i].target))->serialize(b);
 			reinterpret_cast<const InetAddress *>(&(routes[i].via))->serialize(b);
+			b.append((uint16_t)routes[i].flags);
+			b.append((uint16_t)routes[i].metric);
 		}
 
 		b.append((uint16_t)staticIpCount);
@@ -510,6 +512,8 @@ public:
 		for(unsigned int i=0;i<routeCount;++i) {
 			p += reinterpret_cast<InetAddress *>(&(routes[i].target))->deserialize(b,p);
 			p += reinterpret_cast<InetAddress *>(&(routes[i].via))->deserialize(b,p);
+			routes[i].flags = b.template at<uint16_t>(p); p += 2;
+			routes[i].metric = b.template at<uint16_t>(p); p += 2;
 		}
 
 		staticIpCount = (unsigned int)b.template at<uint16_t>(p); p += 2;