Exemplo n.º 1
0
  @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);
  }
Exemplo n.º 2
0
  @Override
  public boolean hasAnotherMaster() {

    // TODO: refactor get connection to not throw illegal arg exceptions
    IOFConnection mainCxn = this.getConnection(OFAuxId.MAIN);

    if (mainCxn != null) {

      // Determine the local URI
      InetSocketAddress address = (InetSocketAddress) mainCxn.getLocalInetAddress();
      URI localURI = URIUtil.createURI(address.getHostName(), address.getPort());

      for (Entry<URI, Map<OFAuxId, OFBsnControllerConnection>> entry :
          this.controllerConnections.entrySet()) {

        // Don't check our own controller connections
        URI uri = entry.getKey();
        if (!localURI.equals(uri)) {

          // We only care for the MAIN connection
          Map<OFAuxId, OFBsnControllerConnection> cxns = this.controllerConnections.get(uri);
          OFBsnControllerConnection controllerCxn = cxns.get(OFAuxId.MAIN);

          if (controllerCxn != null) {
            // If the controller id disconnected or not master we know it is not connected
            if (controllerCxn.getState()
                    == OFBsnControllerConnectionState.BSN_CONTROLLER_CONNECTION_STATE_CONNECTED
                && controllerCxn.getRole() == OFControllerRole.ROLE_MASTER) {
              return true;
            }
          } else {
            log.warn(
                "Unable to find controller connection with aux id "
                    + "MAIN for switch {} on controller with URI {}.",
                this,
                uri);
          }
        }
      }
    }
    return false;
  }