Browse Source

Check multicast limit on send after NDP emulation code.

Adam Ierymenko 8 năm trước cách đây
mục cha
commit
e1fbf7b34c
1 tập tin đã thay đổi với 6 bổ sung5 xóa
  1. 6 5
      node/Switch.cpp

+ 6 - 5
node/Switch.cpp

@@ -349,11 +349,6 @@ void Switch::onLocalEthernet(const SharedPtr<Network> &network,const MAC &from,c
 	}
 
 	if (to.isMulticast()) {
-		if (network->config().multicastLimit == 0) {
-			TRACE("%.16llx: dropped multicast: not allowed on network",network->id());
-			return;
-		}
-
 		MulticastGroup multicastGroup(to,0);
 
 		if (to.isBroadcast()) {
@@ -457,6 +452,12 @@ void Switch::onLocalEthernet(const SharedPtr<Network> &network,const MAC &from,c
 			} // else no NDP emulation
 		}
 
+		// Check this after NDP emulation, since that has to be allowed in exactly this case
+		if (network->config().multicastLimit == 0) {
+			TRACE("%.16llx: dropped multicast: not allowed on network",network->id());
+			return;
+		}
+
 		/* Learn multicast groups for bridged-in hosts.
 		 * Note that some OSes, most notably Linux, do this for you by learning
 		 * multicast addresses on bridge interfaces and subscribing each slave.