@Override public void updateControllerConnections(OFBsnControllerConnectionsReply controllerCxnsReply) { // Instantiate clean map, can't use a builder here since we need to call temp.get() Map<URI,Map<OFAuxId, OFBsnControllerConnection>> temp = new ConcurrentHashMap<URI,Map<OFAuxId, OFBsnControllerConnection>>(); List<OFBsnControllerConnection> controllerCxnUpdates = controllerCxnsReply.getConnections(); for(OFBsnControllerConnection update : controllerCxnUpdates) { URI uri = URI.create(update.getUri()); Map<OFAuxId, OFBsnControllerConnection> cxns = temp.get(uri); // Add to nested map if(cxns != null){ cxns.put(update.getAuxiliaryId(), update); } else{ cxns = new ConcurrentHashMap<OFAuxId, OFBsnControllerConnection>(); cxns.put(update.getAuxiliaryId(), update); temp.put(uri, cxns); } } this.controllerConnections = ImmutableMap.<URI,Map<OFAuxId, OFBsnControllerConnection>>copyOf(temp); }
/** * Helper to load controller connection messages into a switch for testing. * @param sw the switch to insert the message on * @param role the role for the controller connection message * @param state the state for the controller connection message * @param uri the URI for the controller connection message */ public void updateControllerConnections(IOFSwitchBackend sw, OFControllerRole role1, OFBsnControllerConnectionState state1, String uri1 , OFControllerRole role2, OFBsnControllerConnectionState state2, String uri2) { OFBsnControllerConnection connection1 = factory.buildBsnControllerConnection() .setAuxiliaryId(OFAuxId.MAIN) .setRole(role1) .setState(state1) .setUri(uri1) .build(); OFBsnControllerConnection connection2 = factory.buildBsnControllerConnection() .setAuxiliaryId(OFAuxId.MAIN) .setRole(role2) .setState(state2) .setUri(uri2) .build(); List<OFBsnControllerConnection> connections = new ArrayList<OFBsnControllerConnection>(); connections.add(connection1); connections.add(connection2); OFBsnControllerConnectionsReply reply = factory.buildBsnControllerConnectionsReply() .setConnections(connections) .build(); sw.updateControllerConnections(reply); }
/** * Updates the switch's mapping of controller connections * @param controllerCxnsReply the controller connections message sent from the switch */ void updateControllerConnections(OFBsnControllerConnectionsReply controllerCxnsReply);
/** * Updates the switch's mapping of controller connections * 更新交换机和控制器连接映射 * @param controllerCxnsReply the controller connections message sent from the switch */ void updateControllerConnections(OFBsnControllerConnectionsReply controllerCxnsReply);