Преглед на файлове

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 години
родител
ревизия
3f2b21ce71
променени са 2 файла, в които са добавени 5 реда и са изтрити 3 реда
  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)