From: Giovanni Meo Date: Tue, 12 Nov 2013 13:03:54 +0000 (+0000) Subject: Merge "Add java-client pom project for merged java clients and docs" X-Git-Tag: jenkins-controller-bulk-release-prepare-only-2-1~427 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=commitdiff_plain;h=2c6f5bca32d9ef4020228390143b4c2262a416d7;hp=cfec8b07b55ad14887c5d5e0e9658290f5eaeccc Merge "Add java-client pom project for merged java clients and docs" --- diff --git a/opendaylight/arphandler/pom.xml b/opendaylight/arphandler/pom.xml index 4c22b4a74b..8f1f4d5d2e 100644 --- a/opendaylight/arphandler/pom.xml +++ b/opendaylight/arphandler/pom.xml @@ -32,6 +32,7 @@ org.opendaylight.controller.sal.core, org.opendaylight.controller.sal.utils, org.opendaylight.controller.sal.packet, + org.opendaylight.controller.sal.routing, org.opendaylight.controller.switchmanager, org.opendaylight.controller.topologymanager, org.opendaylight.controller.clustering.services, diff --git a/opendaylight/arphandler/src/main/java/org/opendaylight/controller/arphandler/internal/Activator.java b/opendaylight/arphandler/src/main/java/org/opendaylight/controller/arphandler/internal/Activator.java index f4edf6c74e..b253179c87 100644 --- a/opendaylight/arphandler/src/main/java/org/opendaylight/controller/arphandler/internal/Activator.java +++ b/opendaylight/arphandler/src/main/java/org/opendaylight/controller/arphandler/internal/Activator.java @@ -24,6 +24,7 @@ import org.opendaylight.controller.hosttracker.hostAware.IHostFinder; import org.opendaylight.controller.sal.core.ComponentActivatorAbstractBase; import org.opendaylight.controller.sal.packet.IDataPacketService; import org.opendaylight.controller.sal.packet.IListenDataPacket; +import org.opendaylight.controller.sal.routing.IRouting; import org.opendaylight.controller.switchmanager.ISwitchManager; import org.opendaylight.controller.topologymanager.ITopologyManager; import org.slf4j.Logger; @@ -99,6 +100,10 @@ public class Activator extends ComponentActivatorAbstractBase { "setClusterContainerService", "unsetClusterContainerService") .setRequired(true)); + c.add(createContainerServiceDependency(containerName).setService( + IRouting.class).setCallbacks("setRouting","unsetRouting") + .setRequired(false)); + // the Host Listener is optional c.add(createContainerServiceDependency(containerName).setService( IfHostListener.class).setCallbacks("setHostListener", diff --git a/opendaylight/arphandler/src/main/java/org/opendaylight/controller/arphandler/internal/ArpHandler.java b/opendaylight/arphandler/src/main/java/org/opendaylight/controller/arphandler/internal/ArpHandler.java index 7925c05f59..abe104a406 100644 --- a/opendaylight/arphandler/src/main/java/org/opendaylight/controller/arphandler/internal/ArpHandler.java +++ b/opendaylight/arphandler/src/main/java/org/opendaylight/controller/arphandler/internal/ArpHandler.java @@ -53,6 +53,7 @@ import org.opendaylight.controller.sal.packet.IPv4; import org.opendaylight.controller.sal.packet.Packet; import org.opendaylight.controller.sal.packet.PacketResult; import org.opendaylight.controller.sal.packet.RawPacket; +import org.opendaylight.controller.sal.routing.IRouting; import org.opendaylight.controller.sal.utils.EtherTypes; import org.opendaylight.controller.sal.utils.HexEncode; import org.opendaylight.controller.sal.utils.NetUtils; @@ -69,6 +70,7 @@ public class ArpHandler implements IHostFinder, IListenDataPacket, ICacheUpdateA private ISwitchManager switchManager; private ITopologyManager topologyManager; private IDataPacketService dataPacketService; + private IRouting routing; private IClusterContainerServices clusterContainerService; private IConnectionManager connectionManager; private Set hostListeners = new CopyOnWriteArraySet(); @@ -108,6 +110,16 @@ public class ArpHandler implements IHostFinder, IListenDataPacket, ICacheUpdateA } } + void setRouting(IRouting r) { + this.routing = r; + } + + void unsetRouting(IRouting r) { + if (this.routing == r) { + this.routing = null; + } + } + void setHostListener(IfHostListener s) { if (this.hostListeners != null) { this.hostListeners.add(s); @@ -460,21 +472,36 @@ public class ArpHandler implements IHostFinder, IListenDataPacket, ICacheUpdateA if (host == null) { // if we don't, know about the host, try to find it - log.trace("Punted IP pkt from {}, sending bcast ARP event...", + log.trace("Punted IP pkt to {}, sending bcast ARP event...", dIP); /* * unknown destination host, initiate bcast ARP request */ arpRequestReplyEvent.put(new ARPRequest(dIP, subnet), false); - }else{ - // we know about the host, send the packet the right place + } else if (routing == null || + routing.getRoute(p.getNode(), host.getnodeconnectorNode()) != null) { + /* if IRouting is available, make sure that this packet can get it's + * destination normally before teleporting it there. If it's not + * available, then assume it's reachable. + * + * TODO: come up with a way to do this in the absence of IRouting + */ + + log.trace("forwarding punted IP pkt to {} received at {}", dIP, p); + + /* if we know where the host is and there's a path from where this + * packet was punted to where the host is, then deliver it to the + * host for now */ NodeConnector nc = host.getnodeConnector(); // re-encode the Ethernet packet (the parent of the IPv4 packet) RawPacket rp = this.dataPacketService.encodeDataPacket(pkt.getParent()); rp.setOutgoingNodeConnector(nc); this.dataPacketService.transmitDataPacket(rp); + } else { + log.trace("ignoring punted IP pkt to {} because there is no route from {}", + dIP, p); } }