fix ARP (single onos instance & multiple onos instances)
1. make sure that ARP requests coming from host in a LAN
are not broadcasted to all other edge ports (other ASes)
2. make sure the ARP requests from BGPd host can be singlecast
to other ASes
3. add a 'get external network switch ports' function
4. make the arp work for both single onos instance & multiple
onos instances
5. add a switch ports blacklist. Arp requests are not to be sent
to those switch ports on this list.
Change-Id: I4ffdd73e2ad202517c54690a86109cfa1fbe400f
diff --git a/src/main/java/net/onrc/onos/apps/sdnip/SdnIp.java b/src/main/java/net/onrc/onos/apps/sdnip/SdnIp.java
index cd1c2de..ed7a8ee 100644
--- a/src/main/java/net/onrc/onos/apps/sdnip/SdnIp.java
+++ b/src/main/java/net/onrc/onos/apps/sdnip/SdnIp.java
@@ -5,6 +5,7 @@
import java.net.InetAddress;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
@@ -108,6 +109,7 @@
private SwitchPort bgpdAttachmentPoint;
private MACAddress bgpdMacAddress;
private short vlan;
+ private Set<SwitchPort> externalNetworkSwitchPorts;
private SetMultimap<InetAddress, RibUpdate> prefixesWaitingOnArp;
@@ -132,6 +134,8 @@
interfaces = new HashMap<>();
for (Interface intf : config.getInterfaces()) {
interfaces.put(intf.getName(), intf);
+ externalNetworkSwitchPorts.add(new SwitchPort(intf.getDpid(),
+ intf.getPort()));
}
bgpPeers = new HashMap<>();
for (BgpPeer peer : config.getPeers()) {
@@ -193,6 +197,7 @@
new DefaultByteArrayNodeFactory());
interfaceRoutes = new ConcurrentInvertedRadixTree<>(
new DefaultByteArrayNodeFactory());
+ externalNetworkSwitchPorts = new HashSet<SwitchPort>();
ribUpdates = new LinkedBlockingQueue<>();
@@ -906,4 +911,9 @@
return vlan;
}
+ @Override
+ public Set<SwitchPort> getExternalSwitchPorts() {
+ return Collections.unmodifiableSet(externalNetworkSwitchPorts);
+ }
+
}