Added an L3 mode to ProxyArpModule which limits the ports ARPs are sent out based on IP address. This should prevent leaking ARPs from one network into another
diff --git a/src/main/java/net/onrc/onos/ofcontroller/bgproute/BgpRoute.java b/src/main/java/net/onrc/onos/ofcontroller/bgproute/BgpRoute.java
index 278fb86..d72c52c 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/bgproute/BgpRoute.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/bgproute/BgpRoute.java
@@ -24,7 +24,6 @@
import net.floodlightcontroller.core.module.IFloodlightModule;
import net.floodlightcontroller.core.module.IFloodlightService;
import net.floodlightcontroller.core.util.SingletonTask;
-import net.floodlightcontroller.devicemanager.IDeviceService;
import net.floodlightcontroller.packet.Ethernet;
import net.floodlightcontroller.packet.IPv4;
import net.floodlightcontroller.restserver.IRestApiService;
@@ -81,7 +80,6 @@
protected IFloodlightProviderService floodlightProvider;
protected ITopologyService topology;
protected ITopoRouteService topoRouteService;
- protected IDeviceService devices;
protected IRestApiService restApi;
protected ProxyArpManager proxyArp;
@@ -116,6 +114,7 @@
protected Map<String, Interface> interfaces;
protected Map<InetAddress, BgpPeer> bgpPeers;
protected SwitchPort bgpdAttachmentPoint;
+ protected MACAddress bgpdMacAddress;
//True when all switches have connected
protected volatile boolean switchesConnected = false;
@@ -193,6 +192,7 @@
new Dpid(config.getBgpdAttachmentDpid()),
new Port(config.getBgpdAttachmentPort()));
+ bgpdMacAddress = config.getBgpdMacAddress();
} catch (JsonParseException e) {
log.error("Error in JSON file", e);
System.exit(1);
@@ -233,7 +233,6 @@
= new ArrayList<Class<? extends IFloodlightService>>();
l.add(IFloodlightProviderService.class);
l.add(ITopologyService.class);
- l.add(IDeviceService.class);
l.add(IRestApiService.class);
return l;
}
@@ -250,12 +249,11 @@
// Register floodlight provider and REST handler.
floodlightProvider = context.getServiceImpl(IFloodlightProviderService.class);
topology = context.getServiceImpl(ITopologyService.class);
- devices = context.getServiceImpl(IDeviceService.class);
restApi = context.getServiceImpl(IRestApiService.class);
//TODO We'll initialise this here for now, but it should really be done as
//part of the controller core
- proxyArp = new ProxyArpManager(floodlightProvider, topology, devices);
+ proxyArp = new ProxyArpManager(floodlightProvider, topology);
linkUpdates = new ArrayList<LDUpdate>();
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
@@ -300,6 +298,8 @@
log.debug("Config file set to {}", configFilename);
readGatewaysConfiguration(configFilename);
+
+ proxyArp.setL3Mode(interfacePtrie, bgpdMacAddress);
}
@Override
@@ -307,6 +307,8 @@
restApi.addRestletRoutable(new BgpRouteWebRoutable());
topology.addListener(this);
+ proxyArp.startUp();
+
floodlightProvider.addOFMessageListener(OFType.PACKET_IN, proxyArp);
//Retrieve the RIB from BGPd during startup
diff --git a/src/main/java/net/onrc/onos/ofcontroller/bgproute/Configuration.java b/src/main/java/net/onrc/onos/ofcontroller/bgproute/Configuration.java
index 4b623e4..1d90edc 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/bgproute/Configuration.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/bgproute/Configuration.java
@@ -3,12 +3,15 @@
import java.util.Collections;
import java.util.List;
+import net.floodlightcontroller.util.MACAddress;
+
import org.codehaus.jackson.annotate.JsonProperty;
import org.openflow.util.HexString;
public class Configuration {
private long bgpdAttachmentDpid;
private short bgpdAttachmentPort;
+ private MACAddress bgpdMacAddress;
private List<String> switches;
private List<Interface> interfaces;
private List<BgpPeer> peers;
@@ -34,6 +37,15 @@
public void setBgpdAttachmentPort(short bgpdAttachmentPort) {
this.bgpdAttachmentPort = bgpdAttachmentPort;
}
+
+ public MACAddress getBgpdMacAddress() {
+ return bgpdMacAddress;
+ }
+
+ @JsonProperty("bgpdMacAddress")
+ public void setBgpdMacAddress(String strMacAddress) {
+ this.bgpdMacAddress = MACAddress.valueOf(strMacAddress);
+ }
public List<String> getSwitches() {
return Collections.unmodifiableList(switches);