Skip to content
Snippets Groups Projects
Commit c6ac712b authored by Rob Adams's avatar Rob Adams
Browse files

Read port data from storage when switching to master state

parent 9149ffa5
No related branches found
No related tags found
No related merge requests found
......@@ -826,14 +826,17 @@ public class Controller implements IFloodlightProviderService,
" list", HexString.toHexString(sw.getId()));
}
} else if (!isActive) {
// Some switches don't seem to update us with port
// status messages while in slave role.
readSwitchPortStateFromStorage(sw);
addSwitch(sw);
log.debug("Added master switch {} to active switch list",
HexString.toHexString(sw.getId()));
HexString.toHexString(sw.getId()));
}
}
}
protected boolean handleVendorMessage(OFVendor vendorMessage) {
protected boolean handleVendorMessage(OFVendor vendorMessage) {
boolean shouldHandleMessage = false;
int vendor = vendorMessage.getVendor();
switch (vendor) {
......@@ -1695,6 +1698,51 @@ public class Controller implements IFloodlightProviderService,
storageSource.updateRowAsync(PORT_TABLE_NAME, portInfo);
}
/**
* Read switch port data from storage and write it into a switch object
* @param sw the switch to update
*/
protected void readSwitchPortStateFromStorage(OFSwitchImpl sw) {
OperatorPredicate op =
new OperatorPredicate(PORT_SWITCH,
OperatorPredicate.Operator.EQ,
sw.getStringId());
IResultSet portResultSet =
storageSource.executeQuery(PORT_TABLE_NAME,
null, op, null);
Map<Short, OFPhysicalPort> oldports =
new HashMap<Short, OFPhysicalPort>();
oldports.putAll(sw.getPorts());
while (portResultSet.next()) {
try {
OFPhysicalPort p = new OFPhysicalPort();
p.setPortNumber((short)portResultSet.getInt(PORT_NUMBER));
p.setName(portResultSet.getString(PORT_NAME));
p.setConfig((int)portResultSet.getLong(PORT_CONFIG));
p.setState((int)portResultSet.getLong(PORT_STATE));
String portMac = portResultSet.getString(PORT_HARDWARE_ADDRESS);
p.setHardwareAddress(HexString.fromHexString(portMac));
p.setCurrentFeatures((int)portResultSet.
getLong(PORT_CURRENT_FEATURES));
p.setAdvertisedFeatures((int)portResultSet.
getLong(PORT_ADVERTISED_FEATURES));
p.setSupportedFeatures((int)portResultSet.
getLong(PORT_SUPPORTED_FEATURES));
p.setPeerFeatures((int)portResultSet.
getLong(PORT_PEER_FEATURES));
oldports.remove(Short.valueOf(p.getPortNumber()));
sw.setPort(p);
} catch (NullPointerException e) {
// ignore
}
}
for (Short portNum : oldports.keySet()) {
sw.deletePort(portNum);
}
}
protected void removePortInfo(IOFSwitch sw, short portNumber) {
String datapathIdString = sw.getStringId();
String id = datapathIdString + "|" + portNumber;
......
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