* wasn't created for this host in the controller. This would cause
* arphandler not to know where to send the ARP 2. The host facing port is
* down 3. The IP host doesn't exist or is not responding to ARP requests
- *
+ *
* Conditions 1 and 2 above can be recovered if ARP is sent when the
* relevant L3 interface is added or the port facing host comes up. Whenever
* L3 interface is added or host facing port comes up, ARP will be sent to
* hosts in this list.
- *
+ *
* We can't recover from condition 3 above
*/
private ArrayList<ARPPending> failedARPReqList = new ArrayList<HostTracker.ARPPending>();
arphost.setHostIP(networkAddr);
arphost.setSent_count((short) 1);
ARPPendingList.add(arphost);
- logger.debug("Host Added to ARPPending List, IP: {}",
- networkAddr.toString());
+ logger.debug("Host Added to ARPPending List, IP: {}", networkAddr);
}
private void removePendingARPFromList(int index) {
*/
removePendingARPFromList(i);
logger.debug("Host Removed from ARPPending List, IP: {}",
- networkAddr.toString());
+ networkAddr);
return;
}
}
*/
failedARPReqList.remove(i);
logger.debug("Host Removed from FailedARPReqList List, IP: {}",
- networkAddr.toString());
+ networkAddr);
return;
}
}
Tier tier = new Tier(1);
switchManager.setNodeProp(node, tier);
topologyManager.updateHostLink(p, h, UpdateType.ADDED, null);
- /*
- * This is a temporary fix for Cisco Live's Hadoop
- * Demonstration. The concept of Tiering must be revisited based
- * on other application requirements and the design might
- * warrant a separate module (as it involves tracking the
- * topology/ host changes & updating the Tiering numbers in an
- * effective manner).
- */
- updateSwitchTiers(node, 1);
-
- /*
- * The following 2 lines are added for testing purposes. We can
- * remove it once the North-Bound APIs are available for
- * testing.
- *
- * ArrayList<ArrayList<String>> hierarchies =
- * getHostNetworkHierarchy(host.getNetworkAddress());
- * logHierarchies(hierarchies);
- */
} else {
// No need to reset the tiering if no other hosts are currently
// connected
* When a new Host is learnt by the hosttracker module, it places the
* directly connected Node in Tier-1 & using this function, updates the Tier
* value for all other Nodes in the network hierarchy.
- *
+ *
* This is a recursive function and it takes care of updating the Tier value
* for all the connected and eligible Nodes.
- *
+ *
* @param n
* Node that represents one of the Vertex in the Topology Graph.
* @param currentTier
* Internal convenience routine to check the eligibility of a Switch for a
* Tier update. Any Node with Tier=0 or a Tier value that is greater than
* the new Tier Value is eligible for the update.
- *
+ *
* @param n
* Node for which the Tier update eligibility is checked
* @param tier
for (String switchName : hierarchy) {
buf.append(switchName + "/");
}
- logger.debug("{} -> {}", getContainerName(), buf.toString());
+ logger.debug("{} -> {}", getContainerName(), buf);
num++;
}
}
* that returns the Network Hierarchy for a given Host. This API is
* typically used by applications like Hadoop for Rack Awareness
* functionality.
- *
+ *
* @param hostAddress
* IP-Address of the host/node.
* @return Network Hierarchies represented by an Array of Array (of
* is used as the network for Hadoop Demos & in order to give a meaningful
* rack-awareness switch names, the DPID is organized in ASCII Characters
* and retrieved as string.
- *
+ *
* @param dpid
* Switch DataPath Id
* @return Ascii String represented by the DPID.
/**
* A convenient recursive routine to obtain the Hierarchy of Switches.
- *
+ *
* @param node
* Current Node in the Recursive routine.
* @param currHierarchy
logger.debug(
"HostTracker Topology linkUpdate handling src:{}[port {}] dst:{}[port {}] added: {}",
new Object[] { srcNid, srcPort, dstNid, dstPort, added });
- clearTiers();
- for (Entry<InetAddress, HostNodeConnector> entry : hostsDB.entrySet()) {
- HostNodeConnector host = entry.getValue();
- Node node = host.getnodeconnectorNode();
- if (node != null) {
- Tier t = new Tier(1);
- switchManager.setNodeProp(node, t);
- updateSwitchTiers(node, 1);
- }
- }
}
@Override
* Use the services of arphandler to check if host is still
* there
*/
- logger.trace(
- "ARP Probing ({}) for {}({})",
- new Object[] {
- arp_cntdown,
- host.getNetworkAddress().getHostAddress(),
- HexEncode.bytesToHexString(host
- .getDataLayerAddressBytes()) });
+ if (logger.isTraceEnabled()) {
+ logger.trace(
+ "ARP Probing ({}) for {}({})",
+ new Object[] {
+ arp_cntdown,
+ host.getNetworkAddress().getHostAddress(),
+ HexEncode.bytesToHexString(host
+ .getDataLayerAddressBytes()) });
+ }
host.setArpSendCountDown(arp_cntdown);
hostFinder.probe(host);
}
/**
* Inform the controller IP to MAC binding of a host and its connectivity to
* an openflow switch in terms of Node, port, and VLAN.
- *
+ *
* @param networkAddr
* IP address of the host
* @param dataLayer
* Port of the switch to which host is connected
* @param vlan
* Vlan of which this host is member of
- *
+ *
* @return Status The status object as described in {@code Status}
* indicating the result of this action.
*/
/**
* Update the controller IP to MAC binding of a host and its connectivity to
* an openflow switch in terms of switch id, switch port, and VLAN.
- *
+ *
* @param networkAddr
* IP address of the host
* @param dataLayer
* Port of the switch to which host is connected
* @param vlan
* Vlan of which this host is member of
- *
+ *
* @return boolean true if the host was added successfully, false otherwise
*/
public boolean updateHostReq(InetAddress networkAddr,
/**
* Remove from the controller IP to MAC binding of a host and its
* connectivity to an openflow switch
- *
+ *
* @param networkAddr
* IP address of the host
- *
+ *
* @return boolean true if the host was removed successfully, false
* otherwise
*/
switch (type) {
case REMOVED:
- long sid = (Long) node.getID();
- logger.debug("Received removedSwitch for sw id {}",
- HexEncode.longToHexString(sid));
+ logger.debug("Received removed node {}", node);
for (Entry<InetAddress, HostNodeConnector> entry : hostsDB
.entrySet()) {
HostNodeConnector host = entry.getValue();
- if (host.getnodeconnectornodeId() == sid) {
- logger.debug("Switch: {} is down, remove from Hosts_DB",
- sid);
+ if (host.getnodeconnectorNode().equals(node)) {
+ logger.debug("Node: {} is down, remove from Hosts_DB", node);
removeKnownHost(entry.getKey());
notifyHostLearnedOrRemoved(host, false);
}
}
private void handleNodeConnectorStatusDown(NodeConnector nodeConnector) {
- long sid = (Long) nodeConnector.getNode().getID();
- short port = (Short) nodeConnector.getID();
-
logger.debug("handleNodeConnectorStatusDown {}", nodeConnector);
for (Entry<InetAddress, HostNodeConnector> entry : hostsDB.entrySet()) {
HostNodeConnector host = entry.getValue();
- if ((host.getnodeconnectornodeId() == sid)
- && (host.getnodeconnectorportId() == port)) {
- logger.debug(
- "Switch: {}, Port: {} is down, remove from Hosts_DB",
- sid, port);
+ if (host.getnodeConnector().equals(nodeConnector)) {
+ logger.debug(" NodeConnector: {} is down, remove from Hosts_DB", nodeConnector);
removeKnownHost(entry.getKey());
notifyHostLearnedOrRemoved(host, false);
}
/**
* Function called by the dependency manager when all the required
* dependencies are satisfied
- *
+ *
*/
void init(Component c) {
Dictionary<?, ?> props = c.getServiceProperties();
* Function called by the dependency manager when at least one dependency
* become unsatisfied or when the component is shutting down because for
* example bundle is being stopped.
- *
+ *
*/
void destroy() {
destroyCache();
/**
* Function called by dependency manager after "init ()" is called and after
* the services provided by the class are registered in the service registry
- *
+ *
*/
void start() {
}
* Function called by the dependency manager before the services exported by
* the component are unregistered, this will be followed by a "destroy ()"
* calls
- *
+ *
*/
void stop() {
}