diff --git a/src/main/java/net/floodlightcontroller/virtualnetwork/forwarding/VirtualNetworkFilter.java b/src/main/java/net/floodlightcontroller/virtualnetwork/forwarding/VirtualNetworkFilter.java index 144780df5d94d22609170e93b782fd71d4df2416..395eea602f769ead6faf6e45034a08816830a60e 100644 --- a/src/main/java/net/floodlightcontroller/virtualnetwork/forwarding/VirtualNetworkFilter.java +++ b/src/main/java/net/floodlightcontroller/virtualnetwork/forwarding/VirtualNetworkFilter.java @@ -237,6 +237,7 @@ public class VirtualNetworkFilter gatewayToGuid = new ConcurrentHashMap<Integer, Set<String>>(); macToGuid = new ConcurrentHashMap<MACAddress, String>(); portToMac = new ConcurrentHashMap<String, MACAddress>(); + macToGateway = new ConcurrentHashMap<MACAddress, Integer>(); } @Override @@ -292,7 +293,7 @@ public class VirtualNetworkFilter IFloodlightProviderService.CONTEXT_PI_PAYLOAD); Command ret = Command.STOP; String srcNetwork = macToGuid.get(eth.getSourceMAC()); - if (srcNetwork == null) { + if (srcNetwork == null && !(eth.getPayload() instanceof ARP)) { log.debug("Blocking traffic from host {} because it is not attached to any network.", HexString.toHexString(eth.getSourceMACAddress())); ret = Command.STOP; @@ -318,6 +319,11 @@ public class VirtualNetworkFilter for (Integer i : gatewayToGuid.keySet()) { if (i.intValue() == ip) { // Learn the default gateway MAC + if (log.isDebugEnabled()) { + log.debug("Adding {} with IP {} as a gateway", + HexString.toHexString(arp.getSenderHardwareAddress()), + IPv4.fromIPv4Address(ip)); + } macToGateway.put(new MACAddress(arp.getSenderHardwareAddress()), ip); // Now we see if it's allowed for this packet String hostNet = macToGuid.get(new MACAddress(eth.getDestinationMACAddress()));