Skip to content
Snippets Groups Projects
Commit f2d3fdd4 authored by Srinivasan Ramasubramanian's avatar Srinivasan Ramasubramanian
Browse files

Send port status update from link discovery manager whenever a port status...

Send port status update from link discovery manager whenever a port status MODIFY message is received. Minor changes to printing of link discovery updates and addition of some trace logs.
parent 1504bd20
No related branches found
No related tags found
No related merge requests found
......@@ -58,6 +58,7 @@ import net.floodlightcontroller.devicemanager.web.DeviceRoutable;
import net.floodlightcontroller.flowcache.IFlowReconcileListener;
import net.floodlightcontroller.flowcache.IFlowReconcileService;
import net.floodlightcontroller.flowcache.OFMatchReconcile;
import net.floodlightcontroller.linkdiscovery.ILinkDiscovery.LDUpdate;
import net.floodlightcontroller.packet.ARP;
import net.floodlightcontroller.packet.DHCP;
import net.floodlightcontroller.packet.Ethernet;
......@@ -1510,9 +1511,21 @@ IFlowReconcileListener, IInfoProvider, IHAListener {
@Override
public void topologyChanged() {
Iterator<Device> diter = deviceMap.values().iterator();
List<LDUpdate> updateList = topology.getLastLinkUpdates();
if (updateList != null) {
if (logger.isTraceEnabled()) {
for(LDUpdate update: updateList) {
logger.trace("Topo update: {}", update);
}
}
}
while (diter.hasNext()) {
Device d = diter.next();
if (d.updateAttachmentPoint()) {
if (logger.isTraceEnabled()) {
logger.trace("Attachment point changed for device: {}", d);
}
sendDeviceMovedNotification(d);
}
}
......
......@@ -83,10 +83,38 @@ public interface ILinkDiscovery {
@Override
public String toString() {
return "LDUpdate [src=" + src + ", srcPort=" + srcPort
+ ", dst=" + dst + ", dstPort=" + dstPort
+ ", srcType=" + srcType + ", type=" + type + ", operation="
+ operation + "]";
String operationString = null;
if (operation == UpdateOperation.LINK_REMOVED) {
operationString = "Link Removed";
return "LDUpdate [operation=" + operationString +
"src=" + src + ", srcPort=" + srcPort
+ ", dst=" + dst + ", dstPort=" + dstPort
+ ", type=" + type + "]";
} else if (operation == UpdateOperation.LINK_UPDATED) {
operationString = "Link Updated";
return "LDUpdate [operation=" + operationString +
"src=" + src + ", srcPort=" + srcPort
+ ", dst=" + dst + ", dstPort=" + dstPort
+ ", type=" + type + "]";
} else if (operation == UpdateOperation.PORT_DOWN) {
operationString = "Port Down";
return "LDUpdate [operation=" + operationString +
"src=" + src + ", srcPort=" + srcPort + "]";
} else if (operation == UpdateOperation.PORT_UP) {
operationString = "Port Up";
return "LDUpdate [operation=" + operationString +
"src=" + src + ", srcPort=" + srcPort + "]";
} else if (operation == UpdateOperation.SWITCH_REMOVED) {
operationString = "Switch Removed";
return "LDUpdate [operation=" + operationString +
"src=" + src + "]";
} else if (operation == UpdateOperation.SWITCH_UPDATED) {
operationString = "Switch Updated";
return "LDUpdate [operation=" + operationString +
"src=" + src + "]";
} else {
return "LDUpdate: Unknown update.";
}
}
}
......
......@@ -732,6 +732,15 @@ IFloodlightModule, IInfoProvider, IHAListener {
return UpdateOperation.LINK_REMOVED;
}
protected UpdateOperation getUpdateOperation(int srcPortState) {
boolean portUp = ((srcPortState &
OFPortState.OFPPS_STP_MASK.getValue()) !=
OFPortState.OFPPS_STP_BLOCK.getValue());
if (portUp) return UpdateOperation.PORT_UP;
else return UpdateOperation.PORT_DOWN;
}
@Override
public LinkType getLinkType(LinkInfo info) {
......@@ -988,6 +997,7 @@ IFloodlightModule, IInfoProvider, IHAListener {
(byte)OFPortReason.OFPPR_MODIFY.ordinal()) {
// If ps is a port modification and the port state has changed
// that affects links in the topology
if (this.portLinks.containsKey(npt)) {
for (Link lt: this.portLinks.get(npt)) {
LinkInfo linkInfo = links.get(lt);
......@@ -1025,6 +1035,10 @@ IFloodlightModule, IInfoProvider, IHAListener {
}
}
}
UpdateOperation operation =
getUpdateOperation(ps.getDesc().getState());
updates.add(new LDUpdate(sw, port, operation));
}
if (!linkDeleted && !linkInfoChanged){
......@@ -1359,50 +1373,6 @@ IFloodlightModule, IInfoProvider, IHAListener {
return validTime;
}
public void writeLinkInfo(Link lt, LinkInfo linkInfo) {
if (linkInfo.getUnicastValidTime() != null) {
Map<String, Object> rowValues = new HashMap<String, Object>();
String id = getLinkId(lt);
rowValues.put(LINK_ID, id);
//LinkInfo linkInfo = links.get(lt);
if (linkInfo.getUnicastValidTime() != null)
rowValues.put(LINK_VALID_TIME, linkInfo.getUnicastValidTime());
if (linkInfo.getSrcPortState() != null) {
if (linkInfo != null && linkInfo.linkStpBlocked()) {
if (log.isTraceEnabled()) {
log.trace("writeLinkInfo, link {}, info {}, srcPortState Blocked",
lt, linkInfo);
}
rowValues.put(LINK_SRC_PORT_STATE,
OFPhysicalPort.OFPortState.OFPPS_STP_BLOCK.getValue());
} else {
if (log.isTraceEnabled()) {
log.trace("writeLinkInfo, link {}, info {}",
new Object[]{ lt, linkInfo});
}
rowValues.put(LINK_SRC_PORT_STATE, linkInfo.getSrcPortState());
}
}
if (linkInfo.getDstPortState() != null) {
if (linkInfo != null && linkInfo.linkStpBlocked()) {
if (log.isTraceEnabled()) {
log.trace("writeLinkInfo, link {}, info {}, dstPortState Blocked",
lt, linkInfo);
}
rowValues.put(LINK_DST_PORT_STATE,
OFPhysicalPort.OFPortState.OFPPS_STP_BLOCK.getValue());
} else {
if (log.isTraceEnabled()) {
log.trace("writeLinkInfo, link {}, info {}",
new Object[]{ lt, linkInfo});
}
rowValues.put(LINK_DST_PORT_STATE, linkInfo.getDstPortState());
}
}
storageSource.updateRowAsync(LINK_TABLE_NAME, id, rowValues);
}
}
/**
* Removes a link from storage using an asynchronous call.
* @param lt The LinkTuple to delete.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment