Browse Source

Do not shadow our own route twice on Mac if there is no default route. (Fix for issue found during IPv6 default route override testing.)

Adam Ierymenko 9 years ago
parent
commit
3f2b21ce71
2 changed files with 5 additions and 3 deletions
  1. 3 1
      osdep/ManagedRoute.cpp
  2. 2 2
      osdep/ManagedRoute.hpp

+ 3 - 1
osdep/ManagedRoute.cpp

@@ -57,6 +57,8 @@
 #define ZT_LINUX_IP_COMMAND "/sbin/ip"
 #define ZT_LINUX_IP_COMMAND_2 "/usr/sbin/ip"
 
+// NOTE: BSD is mostly tested on Apple/Mac but is likely to work on other BSD too
+
 namespace ZeroTier {
 
 namespace {
@@ -413,7 +415,7 @@ bool ManagedRoute::sync()
 		// Shadow system route if it exists, also delete any obsolete shadows
 		// and replace them with the new state. sync() is called periodically to
 		// allow us to do that if underlying connectivity changes.
-		if ((_systemVia != newSystemVia)||(!strcmp(_systemDevice,newSystemDevice))) {
+		if ( ((_systemVia != newSystemVia)||(!strcmp(_systemDevice,newSystemDevice))) && (strcmp(_device,newSystemDevice)) ) {
 			if ((_systemVia)&&(_systemDevice[0])) {
 				_routeCmd("delete",leftt,_systemVia,_systemDevice,(const char *)0);
 				_routeCmd("delete",rightt,_systemVia,_systemDevice,(const char *)0);

+ 2 - 2
osdep/ManagedRoute.hpp

@@ -54,8 +54,8 @@ public:
 	 * "device name."
 	 *
 	 * @param target Route target (e.g. 0.0.0.0/0 for default)
-	 * @param via Route next L3 hop or NULL InetAddress if local
-	 * @param device Device name/ID if 'via' is null and route is local, otherwise ignored
+	 * @param via Route next L3 hop or NULL InetAddress if local in which case it will be routed via device
+	 * @param device Name or hex LUID of ZeroTier device (e.g. zt#)
 	 * @return True if route was successfully set
 	 */
 	inline bool set(const InetAddress &target,const InetAddress &via,const char *device)