Integrate port up/down events with discovery
Change-Id: I7826f0a8fc285485fe62187319a3b33d6adf492b
diff --git a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/LinkImpl.java b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/LinkImpl.java
index 31461a5..c8954a9 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/LinkImpl.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/LinkImpl.java
@@ -32,12 +32,12 @@
protected void setToPorts() {
((PortImpl)srcPort).setOutgoingLink(this);
- ((PortImpl)srcPort).setIncomingLink(this);
+ ((PortImpl)dstPort).setIncomingLink(this);
}
protected void unsetFromPorts() {
((PortImpl)srcPort).setOutgoingLink(null);
- ((PortImpl)srcPort).setIncomingLink(null);
+ ((PortImpl)dstPort).setIncomingLink(null);
}
@Override
diff --git a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraphDatastore.java b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraphDatastore.java
index c8f4d8d..9fd7f86 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraphDatastore.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraphDatastore.java
@@ -119,47 +119,47 @@
public void addPort(PortEvent port) {
log.debug("Adding port {}", port);
-// RCSwitch rcSwitch = new RCSwitch(sw.getDpid());
-//
-// try {
-// rcSwitch.read();
-// } catch (ObjectDoesntExistException e) {
-// log.warn("Add port failed because switch {} doesn't exist", sw.getDpid(), e);
-// return;
-// }
-//
-// RCPort rcPort = new RCPort(port.getSwitch().getDpid(), (long)port.getNumber());
-// rcPort.setStatus(RCPort.STATUS.ACTIVE);
-// // TODO add description into RCPort
-// //rcPort.setDescription(port.getDescription());
-// rcSwitch.addPortId(rcPort.getId());
-//
-// writeObject(rcPort);
-// writeObject(rcSwitch);
+ //RCSwitch rcSwitch = new RCSwitch(sw.getDpid());
+
+ //try {
+ //rcSwitch.read();
+ //} catch (ObjectDoesntExistException e) {
+ //log.warn("Add port failed because switch {} doesn't exist", sw.getDpid(), e);
+ //return;
+ //}
+
+ RCPort rcPort = new RCPort(port.getDpid(), port.getNumber());
+ rcPort.setStatus(RCPort.STATUS.ACTIVE);
+ // TODO add description into RCPort
+ //rcPort.setDescription(port.getDescription());
+ //rcSwitch.addPortId(rcPort.getId());
+
+ writeObject(rcPort);
+ //writeObject(rcSwitch);
}
public void deactivatePort(PortEvent port) {
log.debug("Deactivating port {}", port);
-// RCPort rcPort = new RCPort(port.getSwitch().getDpid(), (long)port.getNumber());
-//
-// for (int i = 0; i < NUM_RETRIES; i++) {
-// try {
-// rcPort.read();
-// } catch (ObjectDoesntExistException e) {
-// // oh well, we were deactivating anyway
-// log.warn("Trying to deactivate a port that doesn't exist: {}", port);
-// return;
-// }
-//
-// rcPort.setStatus(RCPort.STATUS.INACTIVE);
-//
-// try {
-// rcPort.update();
-// break;
-// } catch (ObjectDoesntExistException | WrongVersionException e) {
-// // retry
-// }
-// }
+ RCPort rcPort = new RCPort(port.getDpid(), port.getNumber());
+
+ for (int i = 0; i < NUM_RETRIES; i++) {
+ try {
+ rcPort.read();
+ } catch (ObjectDoesntExistException e) {
+ // oh well, we were deactivating anyway
+ log.warn("Trying to deactivate a port that doesn't exist: {}", port);
+ return;
+ }
+
+ rcPort.setStatus(RCPort.STATUS.INACTIVE);
+
+ try {
+ rcPort.update();
+ break;
+ } catch (ObjectDoesntExistException | WrongVersionException e) {
+ // retry
+ }
+ }
}
public void addLink(LinkEvent linkEvent) {
diff --git a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraphImpl.java b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraphImpl.java
index b821050..1c342e0 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraphImpl.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraphImpl.java
@@ -85,14 +85,20 @@
@Override
public void putPortEvent(PortEvent portEvent) {
- // TODO Auto-generated method stub
-
+ if (prepareForAddPortEvent(portEvent)) {
+ datastore.addPort(portEvent);
+ putPort(portEvent);
+ // TODO send out notification
+ }
}
@Override
public void removePortEvent(PortEvent portEvent) {
- // TODO Auto-generated method stub
-
+ if (prepareForRemovePortEvent(portEvent)) {
+ datastore.deactivatePort(portEvent);
+ removePort(portEvent);
+ // TODO send out notification
+ }
}
@Override
@@ -223,7 +229,7 @@
}
// Src/Dst Port must exist
Port srcPort = srcSw.getPort(linkEvt.getSrc().number);
- Port dstPort = srcSw.getPort(linkEvt.getDst().number);
+ Port dstPort = dstSw.getPort(linkEvt.getDst().number);
if ( srcPort == null || dstPort == null ) {
return false;
}
@@ -250,14 +256,25 @@
Switch srcSw = getSwitch(linkEvt.getSrc().dpid);
Switch dstSw = getSwitch(linkEvt.getDst().dpid);
if ( srcSw == null || dstSw == null ) {
+ log.warn("Rejecting addLink {} because switch doesn't exist", linkEvt);
return false;
}
// Src/Dst Port must exist
Port srcPort = srcSw.getPort(linkEvt.getSrc().number);
Port dstPort = srcSw.getPort(linkEvt.getDst().number);
if ( srcPort == null || dstPort == null ) {
+ log.warn("Rejecting addLink {} because port doesn't exist", linkEvt);
return false;
}
+
+ Link link = srcPort.getOutgoingLink();
+
+ if (link == null ||
+ !link.getDestinationPortNumber().equals(linkEvt.getDst().number)
+ || !link.getDestinationSwitchDpid().equals(linkEvt.getDst().dpid)) {
+ log.warn("Rejecting removeLink {} because link doesn't exist", linkEvt);
+ return false;
+ }
// Prep: None
return true;