From: Tony Tkacik Date: Tue, 25 Mar 2014 05:11:38 +0000 (+0000) Subject: Merge "Do not catch Throwables, but rather Exceptions" X-Git-Tag: autorelease-tag-v20140601202136_82eb3f9~320 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=commitdiff_plain;h=7e696f1ff645d647e75bb34723b32d6c4b665f95;hp=bfa2b4e3f1a93b97a7f4575116e67a2d20b53c75 Merge "Do not catch Throwables, but rather Exceptions" --- 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 b253179c87..b7639bed2b 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,7 +24,6 @@ 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; @@ -44,6 +43,7 @@ public class Activator extends ComponentActivatorAbstractBase { * instantiated in order to get an fully working implementation * Object */ + @Override public Object[] getImplementations() { Object[] res = { ArpHandler.class }; return res; @@ -62,6 +62,7 @@ public class Activator extends ComponentActivatorAbstractBase { * also optional per-container different behavior if needed, usually * should not be the case though. */ + @Override public void configureInstance(Component c, Object imp, String containerName) { if (imp.equals(ArpHandler.class)) { // export the service @@ -100,10 +101,6 @@ 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 fa883829cc..083e2ed0e9 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 @@ -113,16 +113,6 @@ 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); @@ -507,41 +497,18 @@ public class ArpHandler implements IHostFinder, IListenDataPacket, ICacheUpdateA // see if we know about the host // Hosttracker hosts db key implementation - IHostId id = HostIdFactory.create(dIP, null); - HostNodeConnector host = hostTracker.hostFind(id); + HostNodeConnector host = hostTracker.hostFind(dIP); if (host == null) { - // if we don't, know about the host, try to find it + // if we don't know about the host, try to find it 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 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); + log.trace("Ignoring punted IP pkt to known host: {} (received on: {})", dIP, p); } } diff --git a/opendaylight/commons/opendaylight/pom.xml b/opendaylight/commons/opendaylight/pom.xml index 9f51fbac87..e05059b4ae 100644 --- a/opendaylight/commons/opendaylight/pom.xml +++ b/opendaylight/commons/opendaylight/pom.xml @@ -1318,6 +1318,11 @@ concepts ${concepts.version} + + org.opendaylight.controller + sal-remoterpc-connector + ${mdsal.version} + diff --git a/opendaylight/distribution/opendaylight/pom.xml b/opendaylight/distribution/opendaylight/pom.xml index c993435614..a38a9b4f93 100644 --- a/opendaylight/distribution/opendaylight/pom.xml +++ b/opendaylight/distribution/opendaylight/pom.xml @@ -1,1277 +1,1278 @@ - - 4.0.0 - - 3.0 - - - scm:git:ssh://git.opendaylight.org:29418/controller.git - scm:git:ssh://git.opendaylight.org:29418/controller.git - https://wiki.opendaylight.org/view/OpenDaylight_Controller:Main - HEAD - - - org.opendaylight.controller - commons.opendaylight - 1.4.2-SNAPSHOT - ../../commons/opendaylight - + + 4.0.0 + + 3.0 + + + scm:git:ssh://git.opendaylight.org:29418/controller.git + scm:git:ssh://git.opendaylight.org:29418/controller.git + https://wiki.opendaylight.org/view/OpenDaylight_Controller:Main + HEAD + + + org.opendaylight.controller + commons.opendaylight + 1.4.2-SNAPSHOT + ../../commons/opendaylight + + distribution.opendaylight + 0.1.2-SNAPSHOT + pom - - - notduringrelease - - - !DOINGRELEASE - - - - + + + + notduringrelease + + + !DOINGRELEASE + + + + + + org.opendaylight.controller + sal-common + + + org.opendaylight.controller + sal-common-util + + + org.opendaylight.controller + sal-netconf-connector + + + org.opendaylight.controller + sal-core-api + + + org.opendaylight.controller + sal-broker-impl + + + org.opendaylight.controller + sal-remote + + + org.opendaylight.controller + sal-restconf-broker + + + org.opendaylight.controller + sal-core-spi + + + org.opendaylight.controller + sal-common-api + + + org.opendaylight.controller + sal-common-impl + + + org.opendaylight.controller + sal-binding-api + + + org.opendaylight.controller + sal-binding-config + + + org.opendaylight.controller + sal-binding-broker-impl + + + org.opendaylight.controller + sal-compatibility + + + org.opendaylight.controller + sal-connector-api + + + org.opendaylight.controller + sal-rest-connector + + + org.opendaylight.controller.model + model-inventory + + + org.opendaylight.controller.model + model-flow-base + + + org.opendaylight.controller.model + model-flow-service + + + org.opendaylight.controller.model + model-flow-statistics + + + org.opendaylight.controller.model + model-flow-management + + + org.opendaylight.controller.md + inventory-manager + + + org.opendaylight.controller.md + forwardingrules-manager + + + org.opendaylight.controller.md + topology-lldp-discovery + + + org.opendaylight.controller.md + topology-manager + + + org.opendaylight.controller.model + model-topology + 1.1-SNAPSHOT + + + org.opendaylight.yangtools.model + ietf-topology + + + org.opendaylight.controller + sal-binding-util + + + org.opendaylight.controller.md + statistics-manager + + + org.opendaylight.controller + concepts + + + org.opendaylight.controller + protocol-framework + + + org.opendaylight.yangtools + concepts + + + org.opendaylight.yangtools + restconf-client-api + + + org.opendaylight.yangtools + restconf-client-impl + + + + + org.opendaylight.controller + remoterpc-routingtable.implementation + ${mdsal.version} + + + org.opendaylight.controller + sal-remoterpc-connector + + + + + org.opendaylight.controller + config-api + + + org.opendaylight.controller + config-manager + + + org.opendaylight.controller + yang-jmx-generator + + + org.opendaylight.controller + logback-config + + + org.opendaylight.controller + config-persister-api + + + org.opendaylight.controller + config-persister-file-adapter + + + org.opendaylight.controller + config-persister-file-xml-adapter + + + org.opendaylight.controller + config-persister-directory-adapter + + + org.opendaylight.controller + config-persister-directory-xml-adapter + + + org.opendaylight.controller + config-persister-directory-autodetect-adapter + + + + org.opendaylight.controller + shutdown-api + + + org.opendaylight.controller + shutdown-impl + + + + + org.opendaylight.controller + netconf-api + + + org.opendaylight.controller + netconf-impl + + + org.opendaylight.controller + netconf-util + + + org.opendaylight.controller + netconf-client + + + org.opendaylight.controller + netconf-mapping-api + + + org.opendaylight.controller + netconf-ssh + + + org.opendaylight.controller + config-netconf-connector + + + org.opendaylight.controller + netconf-monitoring + + + ${project.groupId} + ietf-netconf-monitoring + + + ${project.groupId} + ietf-netconf-monitoring-extension + + + org.opendaylight.controller + config-persister-impl + + + org.apache.servicemix.bundles + org.apache.servicemix.bundles.xerces + 2.11.0_1 + + + org.eclipse.birt.runtime.3_7_1 + org.apache.xml.resolver + 1.2.0 + + + + + org.opendaylight.controller + threadpool-config-api + + + org.opendaylight.controller + netty-config-api + + + org.opendaylight.controller + threadpool-config-impl + + + org.opendaylight.controller + netty-threadgroup-config + + + org.opendaylight.controller + netty-event-executor-config + + + org.opendaylight.controller + netty-timer-config + + + + + org.opendaylight.controller.samples + sample-toaster + ${mdsal.version} + + + org.opendaylight.controller.samples + sample-toaster-consumer + ${mdsal.version} + + + org.opendaylight.controller.samples + sample-toaster-provider + ${mdsal.version} + + + + org.opendaylight.yangtools + yang-binding + + + org.opendaylight.yangtools + binding-type-provider + ${yangtools.version} + + + org.opendaylight.yangtools + binding-generator-spi + ${yangtools.version} + + + org.opendaylight.yangtools + binding-generator-api + ${yangtools.version} + + + org.opendaylight.yangtools + binding-generator-impl + ${yangtools.version} + + + org.opendaylight.yangtools + binding-generator-util + ${yangtools.version} + + + org.opendaylight.yangtools + binding-model-api + ${yangtools.version} + + + commons-lang + commons-lang + 2.4 + + + + org.opendaylight.yangtools.thirdparty + antlr4-runtime-osgi-nohead + 4.0 + + + org.opendaylight.yangtools.thirdparty + xtend-lib-osgi + 2.4.3 + + + org.opendaylight.yangtools + yang-parser-api + ${yangtools.version} + + + org.opendaylight.yangtools + yang-model-util + + + org.opendaylight.yangtools + yang-parser-impl + ${yangtools.version} + + + org.opendaylight.yangtools + yang-common + + + org.opendaylight.yangtools + yang-data-api + + + org.opendaylight.yangtools + yang-data-impl + + + org.opendaylight.yangtools + yang-data-util + + + org.opendaylight.yangtools + yang-model-api + + + org.opendaylight.yangtools.model + yang-ext + + + org.opendaylight.controller.thirdparty + ganymed + + + org.zeromq + jeromq + 0.3.1 + + + + org.opendaylight.yangtools.model + ietf-inet-types + + + org.opendaylight.yangtools.model + ietf-yang-types + + + org.opendaylight.yangtools.model + opendaylight-l2-types + + + + + integrationtests + + false + + + + + org.apache.maven.plugins + maven-dependency-plugin + 2.8 + + + org.opendaylight.controller + sanitytest + ${controller.version} + + + + + copy + package + + copy + + + + + + + org.opendaylight.controller + sanitytest + jar + + + + + + org.codehaus.mojo + exec-maven-plugin + 1.2.1 + + + sanity-test + package + + exec + + + + + ${java.home}/bin/java + + -cp + ./target/dependency/* + org.opendaylight.controller.distribution.Sanity + + + + ${java.home} + + + + + + + + + org.opendaylight.controller + sanitytest + + + + + + + - org.opendaylight.controller - sal-common + org.opendaylight.controller + forwarding.staticrouting - org.opendaylight.controller - sal-common-util + org.opendaylight.controller + clustering.services - org.opendaylight.controller - sal-netconf-connector + org.opendaylight.controller + clustering.services-implementation - org.opendaylight.controller - sal-core-api + org.opendaylight.controller + configuration - org.opendaylight.controller - sal-broker-impl + org.opendaylight.controller + configuration.implementation - org.opendaylight.controller - sal-remote + org.opendaylight.controller + routing.dijkstra_implementation - org.opendaylight.controller - sal-restconf-broker + org.opendaylight.controller + arphandler - org.opendaylight.controller - sal-core-spi + org.opendaylight.controller + hosttracker - org.opendaylight.controller - sal-common-api + org.opendaylight.controller + hosttracker.implementation - org.opendaylight.controller - sal-common-impl + org.opendaylight.controller + containermanager - org.opendaylight.controller - sal-binding-api + org.opendaylight.controller + containermanager.implementation - org.opendaylight.controller - sal-binding-config + org.opendaylight.controller + appauth - org.opendaylight.controller - sal-binding-broker-impl + org.opendaylight.controller + switchmanager - org.opendaylight.controller - sal-compatibility + org.opendaylight.controller + switchmanager.implementation - org.opendaylight.controller - sal-connector-api + org.opendaylight.controller + statisticsmanager - org.opendaylight.controller - sal-rest-connector + org.opendaylight.controller + statisticsmanager.implementation - org.opendaylight.controller.model - model-inventory + org.opendaylight.controller + topologymanager - org.opendaylight.controller.model - model-flow-base + org.opendaylight.controller + usermanager - org.opendaylight.controller.model - model-flow-service + org.opendaylight.controller + usermanager.implementation - org.opendaylight.controller.model - model-flow-statistics + org.opendaylight.controller + connectionmanager - org.opendaylight.controller.model - model-flow-management + org.opendaylight.controller + connectionmanager.implementation - org.opendaylight.controller.md - inventory-manager + org.opendaylight.controller + security - org.opendaylight.controller.md - forwardingrules-manager + org.opendaylight.controller + forwardingrulesmanager - org.opendaylight.controller.md - topology-lldp-discovery + org.opendaylight.controller + forwardingrulesmanager.implementation + + - org.opendaylight.controller.md - topology-manager + org.opendaylight.controller + sal - org.opendaylight.controller.model - model-topology - 1.1-SNAPSHOT + org.opendaylight.controller + sal.implementation + + + - org.opendaylight.yangtools.model - ietf-topology + org.opendaylight.controller + sal.connection - org.opendaylight.controller - sal-binding-util + org.opendaylight.controller + sal.connection.implementation - org.opendaylight.controller.md - statistics-manager + org.opendaylight.controller + sal.networkconfiguration - org.opendaylight.controller - concepts + org.opendaylight.controller + sal.networkconfiguration.implementation + + + - org.opendaylight.controller - protocol-framework + org.opendaylight.controller + web - org.opendaylight.yangtools - concepts + org.opendaylight.controller + flows.web - org.opendaylight.yangtools - restconf-client-api + org.opendaylight.controller + devices.web - org.opendaylight.yangtools - restconf-client-impl + org.opendaylight.controller + troubleshoot.web - - - org.opendaylight.controller - remoterpc-routingtable.implementation - ${mdsal.version} + org.opendaylight.controller + topology.web - org.opendaylight.controller - sal-remoterpc-connector - ${mdsal.version} + org.opendaylight.controller + osgi-brandfragment.web - + - org.opendaylight.controller - config-api + org.opendaylight.controller + networkconfig.neutron - org.opendaylight.controller - config-manager + org.opendaylight.controller + networkconfig.neutron.implementation - org.opendaylight.controller - yang-jmx-generator + org.opendaylight.controller + networkconfig.neutron.northbound + + - org.opendaylight.controller - logback-config + org.opendaylight.controller + commons.northbound - org.opendaylight.controller - config-persister-api + org.opendaylight.controller + bundlescanner - org.opendaylight.controller - config-persister-file-adapter + org.opendaylight.controller + bundlescanner.implementation - org.opendaylight.controller - config-persister-file-xml-adapter + org.opendaylight.controller + topology.northbound - org.opendaylight.controller - config-persister-directory-adapter + org.opendaylight.controller + forwarding.staticrouting.northbound - org.opendaylight.controller - config-persister-directory-xml-adapter + org.opendaylight.controller + statistics.northbound - org.opendaylight.controller - config-persister-directory-autodetect-adapter + org.opendaylight.controller + flowprogrammer.northbound - - org.opendaylight.controller - shutdown-api + org.opendaylight.controller + hosttracker.northbound - org.opendaylight.controller - shutdown-impl + org.opendaylight.controller + subnets.northbound - - - org.opendaylight.controller - netconf-api + org.opendaylight.controller + switchmanager.northbound - org.opendaylight.controller - netconf-impl + org.opendaylight.controller + containermanager.northbound - org.opendaylight.controller - netconf-util + org.opendaylight.controller + networkconfig.bridgedomain.northbound - org.opendaylight.controller - netconf-client + org.opendaylight.controller + httpservice-bridge - org.opendaylight.controller - netconf-mapping-api + org.jolokia + jolokia-osgi - org.opendaylight.controller - netconf-ssh + org.opendaylight.controller + jolokia-bridge - org.opendaylight.controller - config-netconf-connector + org.opendaylight.controller + connectionmanager.northbound - org.opendaylight.controller - netconf-monitoring + org.opendaylight.controller + usermanager.northbound - ${project.groupId} - ietf-netconf-monitoring + org.opendaylight.controller + controllermanager.northbound + + - ${project.groupId} - ietf-netconf-monitoring-extension + org.opendaylight.controller + logging.bridge + + - org.opendaylight.controller - config-persister-impl + org.opendaylight.controller + protocol_plugins.openflow + + - org.apache.servicemix.bundles - org.apache.servicemix.bundles.xerces - 2.11.0_1 + org.opendaylight.controller + samples.loadbalancer - org.eclipse.birt.runtime.3_7_1 - org.apache.xml.resolver - 1.2.0 + org.opendaylight.controller + samples.loadbalancer.northbound - - - - org.opendaylight.controller - threadpool-config-api - - - org.opendaylight.controller - netty-config-api - - - org.opendaylight.controller - threadpool-config-impl - - - org.opendaylight.controller - netty-threadgroup-config - - - org.opendaylight.controller - netty-event-executor-config - - - org.opendaylight.controller - netty-timer-config - - - - - org.opendaylight.controller.samples - sample-toaster - ${mdsal.version} - - - org.opendaylight.controller.samples - sample-toaster-consumer - ${mdsal.version} - - - org.opendaylight.controller.samples - sample-toaster-provider - ${mdsal.version} - - - - org.opendaylight.yangtools - yang-binding - - - org.opendaylight.yangtools - binding-type-provider - ${yangtools.version} - - - org.opendaylight.yangtools - binding-generator-spi - ${yangtools.version} - - - org.opendaylight.yangtools - binding-generator-api - ${yangtools.version} - - - org.opendaylight.yangtools - binding-generator-impl - ${yangtools.version} - - - org.opendaylight.yangtools - binding-generator-util - ${yangtools.version} - - - org.opendaylight.yangtools - binding-model-api - ${yangtools.version} - - - commons-lang - commons-lang - 2.4 - - - - org.opendaylight.yangtools.thirdparty - antlr4-runtime-osgi-nohead - 4.0 - - - org.opendaylight.yangtools.thirdparty - xtend-lib-osgi - 2.4.3 - - - org.opendaylight.yangtools - yang-parser-api - ${yangtools.version} - - - org.opendaylight.yangtools - yang-model-util - - - org.opendaylight.yangtools - yang-parser-impl - ${yangtools.version} - - - org.opendaylight.yangtools - yang-common - - - org.opendaylight.yangtools - yang-data-api - - - org.opendaylight.yangtools - yang-data-impl - - - org.opendaylight.yangtools - yang-data-util - - - org.opendaylight.yangtools - yang-model-api - - - org.opendaylight.yangtools.model - yang-ext - - - org.opendaylight.controller.thirdparty - ganymed - - - org.zeromq - jeromq - 0.3.1 - - - - org.opendaylight.yangtools.model - ietf-inet-types - - - org.opendaylight.yangtools.model - ietf-yang-types - - - org.opendaylight.yangtools.model - opendaylight-l2-types - - - - - integrationtests - - false - - - - - org.apache.maven.plugins - maven-dependency-plugin - 2.8 - - - org.opendaylight.controller - sanitytest - ${controller.version} - - - - - copy - package - - copy - - - - - - - org.opendaylight.controller - sanitytest - jar - - - - - - org.codehaus.mojo - exec-maven-plugin - 1.2.1 - - - sanity-test - package - - exec - - - - - ${java.home}/bin/java - - -cp - ./target/dependency/* - org.opendaylight.controller.distribution.Sanity - - - - ${java.home} - - - - - - - - org.opendaylight.controller - sanitytest + org.opendaylight.controller + samples.simpleforwarding - - - - - distribution.opendaylight - 0.1.2-SNAPSHOT - pom - - - - org.opendaylight.controller - forwarding.staticrouting - - - org.opendaylight.controller - clustering.services - - - org.opendaylight.controller - clustering.services-implementation - - - org.opendaylight.controller - configuration - - - org.opendaylight.controller - configuration.implementation - - - org.opendaylight.controller - routing.dijkstra_implementation - - - org.opendaylight.controller - arphandler - - - org.opendaylight.controller - hosttracker - - - org.opendaylight.controller - hosttracker.implementation - - - org.opendaylight.controller - containermanager - - - org.opendaylight.controller - containermanager.implementation - - - org.opendaylight.controller - appauth - - - org.opendaylight.controller - switchmanager - - - org.opendaylight.controller - switchmanager.implementation - - - org.opendaylight.controller - statisticsmanager - - - org.opendaylight.controller - statisticsmanager.implementation - - - org.opendaylight.controller - topologymanager - - - org.opendaylight.controller - usermanager - - - org.opendaylight.controller - usermanager.implementation - - - org.opendaylight.controller - connectionmanager - - - org.opendaylight.controller - connectionmanager.implementation - - - org.opendaylight.controller - security - - - org.opendaylight.controller - forwardingrulesmanager - - - org.opendaylight.controller - forwardingrulesmanager.implementation - - - - - org.opendaylight.controller - sal - - - org.opendaylight.controller - sal.implementation - - - - - - org.opendaylight.controller - sal.connection - - - org.opendaylight.controller - sal.connection.implementation - - - org.opendaylight.controller - sal.networkconfiguration - - - org.opendaylight.controller - sal.networkconfiguration.implementation - - - - - - org.opendaylight.controller - web - - - org.opendaylight.controller - flows.web - - - org.opendaylight.controller - devices.web - - - org.opendaylight.controller - troubleshoot.web - - - org.opendaylight.controller - topology.web - - - org.opendaylight.controller - osgi-brandfragment.web - - - - org.opendaylight.controller - networkconfig.neutron - - - org.opendaylight.controller - networkconfig.neutron.implementation - - - org.opendaylight.controller - networkconfig.neutron.northbound - - - - - org.opendaylight.controller - commons.northbound - - - org.opendaylight.controller - bundlescanner - - - org.opendaylight.controller - bundlescanner.implementation - - - org.opendaylight.controller - topology.northbound - - - org.opendaylight.controller - forwarding.staticrouting.northbound - - - org.opendaylight.controller - statistics.northbound - - - org.opendaylight.controller - flowprogrammer.northbound - - - org.opendaylight.controller - hosttracker.northbound - - - org.opendaylight.controller - subnets.northbound - - - org.opendaylight.controller - switchmanager.northbound - - - org.opendaylight.controller - containermanager.northbound - - - org.opendaylight.controller - networkconfig.bridgedomain.northbound - - - org.opendaylight.controller - httpservice-bridge - - - org.jolokia - jolokia-osgi - - - org.opendaylight.controller - jolokia-bridge - - - org.opendaylight.controller - connectionmanager.northbound - - - org.opendaylight.controller - usermanager.northbound - - - org.opendaylight.controller - controllermanager.northbound - - - - - org.opendaylight.controller - logging.bridge - - - - - org.opendaylight.controller - protocol_plugins.openflow - - - - - org.opendaylight.controller - samples.loadbalancer - - - org.opendaylight.controller - samples.loadbalancer.northbound - - - org.opendaylight.controller - samples.simpleforwarding - - - - - org.slf4j - jcl-over-slf4j - - - org.slf4j - slf4j-api - - - org.slf4j - log4j-over-slf4j - - - ch.qos.logback - logback-core - - - ch.qos.logback - logback-classic - + + + org.slf4j + jcl-over-slf4j + + + org.slf4j + slf4j-api + + + org.slf4j + log4j-over-slf4j + + + ch.qos.logback + logback-core + + + ch.qos.logback + logback-classic + - - com.fasterxml.jackson.core - jackson-databind - + + com.fasterxml.jackson.core + jackson-databind + - - com.fasterxml.jackson.core - jackson-annotations - + + com.fasterxml.jackson.core + jackson-annotations + - - com.fasterxml.jackson.core - jackson-core - + + com.fasterxml.jackson.core + jackson-core + - - com.fasterxml.jackson.jaxrs - jackson-jaxrs-json-provider - + + com.fasterxml.jackson.jaxrs + jackson-jaxrs-json-provider + - - com.fasterxml.jackson.jaxrs - jackson-jaxrs-base - + + com.fasterxml.jackson.jaxrs + jackson-jaxrs-base + - - com.fasterxml.jackson.module - jackson-module-jaxb-annotations - + + com.fasterxml.jackson.module + jackson-module-jaxb-annotations + - - org.codehaus.jettison - jettison - - - com.google.guava - guava - - - org.javassist - javassist - - - commons-io - commons-io - - - commons-codec - commons-codec - - - commons-fileupload - commons-fileupload - - - commons-net - commons-net - - - equinoxSDK381 - javax.servlet - - - equinoxSDK381 - javax.servlet.jsp - - - equinoxSDK381 - org.eclipse.equinox.ds - - - equinoxSDK381 - org.eclipse.equinox.util - - - equinoxSDK381 - org.eclipse.osgi.services - - - equinoxSDK381 - org.eclipse.osgi - - - equinoxSDK381 - org.apache.felix.gogo.command - - - equinoxSDK381 - org.apache.felix.gogo.runtime - - - equinoxSDK381 - org.apache.felix.gogo.shell - - - equinoxSDK381 - org.eclipse.equinox.cm - - - equinoxSDK381 - org.eclipse.equinox.console - - - equinoxSDK381 - org.eclipse.equinox.launcher - - - - geminiweb - org.eclipse.gemini.web.core - - - geminiweb - org.eclipse.gemini.web.extender - - - geminiweb - org.eclipse.gemini.web.tomcat - - - geminiweb - org.eclipse.virgo.kernel.equinox.extensions - - - geminiweb - org.eclipse.virgo.util.common - - - geminiweb - org.eclipse.virgo.util.io - - - geminiweb - org.eclipse.virgo.util.math - - - geminiweb - org.eclipse.virgo.util.osgi - - - geminiweb - org.eclipse.virgo.util.osgi.manifest - - - geminiweb - org.eclipse.virgo.util.parser.manifest - - - org.apache.felix - org.apache.felix.dependencymanager - - - org.apache.felix - org.apache.felix.dependencymanager.shell - - - com.google.code.gson - gson - - - org.jboss.spec.javax.transaction - jboss-transaction-api_1.1_spec - - - org.apache.felix - org.apache.felix.fileinstall - - - org.apache.commons - commons-lang3 - - - virgomirror - org.eclipse.jdt.core.compiler.batch - - - eclipselink - javax.persistence - - - orbit - javax.activation - - - orbit - javax.annotation - - - orbit - javax.ejb - - - orbit - javax.el - - - orbit - javax.mail.glassfish - - - orbit - javax.xml.rpc - - - orbit - org.apache.catalina - - - orbit - org.apache.catalina.ha - - - orbit - org.apache.catalina.tribes - - - orbit - org.apache.coyote - - - orbit - org.apache.el - - - orbit - org.apache.jasper - - - orbit - org.apache.juli.extras - - - orbit - org.apache.tomcat.api - - - orbit - org.apache.tomcat.util - - - orbit - javax.servlet.jsp.jstl - - - orbit - javax.servlet.jsp.jstl.impl - - - eclipselink - javax.resource - - - - org.springframework - org.springframework.asm - - - org.springframework - org.springframework.aop - - - org.springframework - org.springframework.context - - - org.springframework - org.springframework.context.support - - - org.springframework - org.springframework.core - - - org.springframework - org.springframework.beans - - - org.springframework - org.springframework.expression - - - org.springframework - org.springframework.web - - - org.aopalliance - com.springsource.org.aopalliance - - - org.springframework - org.springframework.web.servlet - - - - org.springframework.security - spring-security-config - - - org.springframework.security - spring-security-core - - - org.springframework.security - spring-security-web - - - org.springframework.security - spring-security-taglibs - - - org.springframework - org.springframework.transaction - - - - org.ow2.chameleon.management - chameleon-mbeans - - - - com.sun.jersey - jersey-core - - - com.sun.jersey - jersey-server - - - com.sun.jersey - jersey-client - + + org.codehaus.jettison + jettison + + + com.google.guava + guava + + + org.javassist + javassist + + + commons-io + commons-io + + + commons-codec + commons-codec + + + commons-fileupload + commons-fileupload + + + commons-net + commons-net + + + equinoxSDK381 + javax.servlet + + + equinoxSDK381 + javax.servlet.jsp + + + equinoxSDK381 + org.eclipse.equinox.ds + + + equinoxSDK381 + org.eclipse.equinox.util + + + equinoxSDK381 + org.eclipse.osgi.services + + + equinoxSDK381 + org.eclipse.osgi + + + equinoxSDK381 + org.apache.felix.gogo.command + + + equinoxSDK381 + org.apache.felix.gogo.runtime + + + equinoxSDK381 + org.apache.felix.gogo.shell + + + equinoxSDK381 + org.eclipse.equinox.cm + + + equinoxSDK381 + org.eclipse.equinox.console + + + equinoxSDK381 + org.eclipse.equinox.launcher + + + + geminiweb + org.eclipse.gemini.web.core + + + geminiweb + org.eclipse.gemini.web.extender + + + geminiweb + org.eclipse.gemini.web.tomcat + + + geminiweb + org.eclipse.virgo.kernel.equinox.extensions + + + geminiweb + org.eclipse.virgo.util.common + + + geminiweb + org.eclipse.virgo.util.io + + + geminiweb + org.eclipse.virgo.util.math + + + geminiweb + org.eclipse.virgo.util.osgi + + + geminiweb + org.eclipse.virgo.util.osgi.manifest + + + geminiweb + org.eclipse.virgo.util.parser.manifest + + + org.apache.felix + org.apache.felix.dependencymanager + + + org.apache.felix + org.apache.felix.dependencymanager.shell + + + com.google.code.gson + gson + + + org.jboss.spec.javax.transaction + jboss-transaction-api_1.1_spec + + + org.apache.felix + org.apache.felix.fileinstall + + + org.apache.commons + commons-lang3 + + + virgomirror + org.eclipse.jdt.core.compiler.batch + + + eclipselink + javax.persistence + + + orbit + javax.activation + + + orbit + javax.annotation + + + orbit + javax.ejb + + + orbit + javax.el + + + orbit + javax.mail.glassfish + + + orbit + javax.xml.rpc + + + orbit + org.apache.catalina + + + orbit + org.apache.catalina.ha + + + orbit + org.apache.catalina.tribes + + + orbit + org.apache.coyote + + + orbit + org.apache.el + + + orbit + org.apache.jasper + + + orbit + org.apache.juli.extras + + + orbit + org.apache.tomcat.api + + + orbit + org.apache.tomcat.util + + + orbit + javax.servlet.jsp.jstl + + + orbit + javax.servlet.jsp.jstl.impl + + + eclipselink + javax.resource + + + + org.springframework + org.springframework.asm + + + org.springframework + org.springframework.aop + + + org.springframework + org.springframework.context + + + org.springframework + org.springframework.context.support + + + org.springframework + org.springframework.core + + + org.springframework + org.springframework.beans + + + org.springframework + org.springframework.expression + + + org.springframework + org.springframework.web + + + org.aopalliance + com.springsource.org.aopalliance + + + org.springframework + org.springframework.web.servlet + + + + org.springframework.security + spring-security-config + + + org.springframework.security + spring-security-core + + + org.springframework.security + spring-security-web + + + org.springframework.security + spring-security-taglibs + + + org.springframework + org.springframework.transaction + + + + org.ow2.chameleon.management + chameleon-mbeans + + + + com.sun.jersey + jersey-core + + + com.sun.jersey + jersey-server + + + com.sun.jersey + jersey-client + - - org.ow2.asm - asm-all - - - org.eclipse.persistence - org.eclipse.persistence.moxy - - - org.eclipse.persistence - org.eclipse.persistence.core - - - org.eclipse.persistence - org.eclipse.persistence.antlr - + + org.ow2.asm + asm-all + + + org.eclipse.persistence + org.eclipse.persistence.moxy + + + org.eclipse.persistence + org.eclipse.persistence.core + + + org.eclipse.persistence + org.eclipse.persistence.antlr + - - org.eclipse.equinox.http - servlet - - - - org.apache.felix - org.apache.felix.webconsole - all - + + org.eclipse.equinox.http + servlet + + + + org.apache.felix + org.apache.felix.webconsole + all + - - - org.opendaylight.controller.thirdparty - net.sf.jung2 - - - org.opendaylight.controller.thirdparty - org.openflow.openflowj - - - org.opendaylight.controller.thirdparty - com.sun.jersey.jersey-servlet - - - org.opendaylight.controller.thirdparty - org.apache.catalina.filters.CorsFilter - + + + org.opendaylight.controller.thirdparty + net.sf.jung2 + + + org.opendaylight.controller.thirdparty + org.openflow.openflowj + + + org.opendaylight.controller.thirdparty + com.sun.jersey.jersey-servlet + + + org.opendaylight.controller.thirdparty + org.apache.catalina.filters.CorsFilter + - - - io.netty - netty-handler - - - io.netty - netty-codec - - - io.netty - netty-buffer - - - io.netty - netty-transport - - - io.netty - netty-common - - - io.netty - netty-codec-http - + + + io.netty + netty-handler + + + io.netty + netty-codec + + + io.netty + netty-buffer + + + io.netty + netty-transport + + + io.netty + netty-common + + + io.netty + netty-codec-http + - - - org.opendaylight.controller - clustering.test - - - org.opendaylight.controller - commons.httpclient - - + + + org.opendaylight.controller + clustering.test + + + org.opendaylight.controller + commons.httpclient + + - - - - org.codehaus.mojo - buildnumber-maven-plugin - 1.2 - - - validate - - create - - - - - false - false - VersionUnknown - - - - maven-assembly-plugin - 2.3 - - - distro-assembly - package - - single - - - - src/assemble/bin.xml - - ${project.artifactId} - - - - + + + + org.codehaus.mojo + buildnumber-maven-plugin + 1.2 + + + validate + + create + + + + + false + false + VersionUnknown + + + + maven-assembly-plugin + 2.3 + + + distro-assembly + package + + single + + + + src/assemble/bin.xml + + ${project.artifactId} + + + + - - - org.apache.maven.plugins - maven-checkstyle-plugin - ${checkstyle.version} - - **\/target\/,**\/bin\/,**\/target-ide\/,**\/configuration\/initial\/ - - - - + + + org.apache.maven.plugins + maven-checkstyle-plugin + ${checkstyle.version} + + **\/target\/,**\/bin\/,**\/target-ide\/,**\/configuration\/initial\/ + + + + diff --git a/opendaylight/forwardingrulesmanager/api/src/main/java/org/opendaylight/controller/forwardingrulesmanager/FlowConfig.java b/opendaylight/forwardingrulesmanager/api/src/main/java/org/opendaylight/controller/forwardingrulesmanager/FlowConfig.java index 3ad08ca207..0841485cb1 100644 --- a/opendaylight/forwardingrulesmanager/api/src/main/java/org/opendaylight/controller/forwardingrulesmanager/FlowConfig.java +++ b/opendaylight/forwardingrulesmanager/api/src/main/java/org/opendaylight/controller/forwardingrulesmanager/FlowConfig.java @@ -28,6 +28,7 @@ import org.opendaylight.controller.sal.action.Controller; import org.opendaylight.controller.sal.action.Drop; import org.opendaylight.controller.sal.action.Enqueue; import org.opendaylight.controller.sal.action.Flood; +import org.opendaylight.controller.sal.action.FloodAll; import org.opendaylight.controller.sal.action.HwPath; import org.opendaylight.controller.sal.action.Loopback; import org.opendaylight.controller.sal.action.Output; @@ -1019,6 +1020,12 @@ public class FlowConfig extends ConfigurationObject implements Serializable { continue; } + sstr = Pattern.compile(ActionType.FLOOD_ALL.toString()).matcher(actiongrp); + if (sstr.matches()) { + actionList.add(new FloodAll()); + continue; + } + sstr = Pattern.compile(ActionType.SW_PATH.toString()).matcher(actiongrp); if (sstr.matches()) { actionList.add(new SwPath()); diff --git a/opendaylight/hosttracker/implementation/src/main/java/org/opendaylight/controller/hosttracker/internal/HostTracker.java b/opendaylight/hosttracker/implementation/src/main/java/org/opendaylight/controller/hosttracker/internal/HostTracker.java index 734a392bc1..ce49b599e1 100644 --- a/opendaylight/hosttracker/implementation/src/main/java/org/opendaylight/controller/hosttracker/internal/HostTracker.java +++ b/opendaylight/hosttracker/implementation/src/main/java/org/opendaylight/controller/hosttracker/internal/HostTracker.java @@ -105,7 +105,7 @@ public class HostTracker implements IfIptoHost, IfHostListener, ISwitchManagerAw static final String ACTIVE_HOST_CACHE = "hosttracker.ActiveHosts"; static final String INACTIVE_HOST_CACHE = "hosttracker.InactiveHosts"; private static final Logger logger = LoggerFactory.getLogger(HostTracker.class); - protected final Set hostFinder = new CopyOnWriteArraySet();; + protected final Set hostFinders = new CopyOnWriteArraySet(); protected ConcurrentMap hostsDB; /* * Following is a list of hosts which have been requested by NB APIs to be @@ -256,16 +256,12 @@ public class HostTracker implements IfIptoHost, IfHostListener, ISwitchManagerAw } public void setArpHandler(IHostFinder hostFinder) { - if (this.hostFinder != null) { - this.hostFinder.add(hostFinder); - } + this.hostFinders.add(hostFinder); } public void unsetArpHandler(IHostFinder hostFinder) { - if (this.hostFinder != null) { - logger.debug("Arp Handler Service removed!"); - this.hostFinder.remove(hostFinder); - } + logger.debug("Arp Handler Service removed!"); + this.hostFinders.remove(hostFinder); } public void setTopologyManager(ITopologyManager s) { @@ -352,8 +348,8 @@ public class HostTracker implements IfIptoHost, IfHostListener, ISwitchManagerAw * already handles the null return */ - if (hostFinder == null) { - logger.debug("Exiting hostFind, null hostFinder"); + if (hostFinders.isEmpty()) { + logger.debug("No available host finders, exiting hostFind()"); return null; } @@ -369,7 +365,7 @@ public class HostTracker implements IfIptoHost, IfHostListener, ISwitchManagerAw logger.debug("hostFind(): Host Not Found for IP: {}, Inititated Host Discovery ...", id); /* host is not found, initiate a discovery */ - for (IHostFinder hf : hostFinder) { + for (IHostFinder hf : hostFinders) { InetAddress addr = decodeIPFromId(id); hf.find(addr); } @@ -936,12 +932,12 @@ public class HostTracker implements IfIptoHost, IfHostListener, ISwitchManagerAw for (Entry entry : failedARPReqList.entrySet()) { ARPPending arphost; arphost = entry.getValue(); - if (hostFinder == null) { - logger.warn("ARPHandler Services are not available on subnet addition"); + if (hostFinders.isEmpty()) { + logger.debug("ARPHandler Services are not available on subnet addition"); continue; } logger.debug("Sending the ARP from FailedARPReqList fors IP: {}", decodeIPFromId(arphost.getHostId())); - for (IHostFinder hf : hostFinder) { + for (IHostFinder hf : hostFinders) { hf.find(decodeIPFromId(arphost.getHostId())); } } @@ -977,11 +973,11 @@ public class HostTracker implements IfIptoHost, IfHostListener, ISwitchManagerAw * next one. Before sending the ARP, check if ARPHandler * is available or not */ - if (hostFinder == null) { + if (hostFinders.isEmpty()) { logger.warn("ARPHandler Services are not available for Outstanding ARPs"); continue; } - for (IHostFinder hf : hostFinder) { + for (IHostFinder hf : hostFinders) { hf.find(decodeIPFromId(arphost.getHostId())); } arphost.sent_count++; @@ -1063,7 +1059,7 @@ public class HostTracker implements IfIptoHost, IfHostListener, ISwitchManagerAw HexEncode.bytesToHexString(host.getDataLayerAddressBytes()) }); } host.setArpSendCountDown(arp_cntdown); - if (hostFinder == null) { + if (hostFinders.isEmpty()) { /* * If hostfinder is not available, then can't send * the probe. However, continue the age out the @@ -1073,7 +1069,7 @@ public class HostTracker implements IfIptoHost, IfHostListener, ISwitchManagerAw logger.trace("ARPHandler is not avaialable, can't send the probe"); continue; } - for (IHostFinder hf : hostFinder) { + for (IHostFinder hf : hostFinders) { hf.probe(host); } } @@ -1417,7 +1413,7 @@ public class HostTracker implements IfIptoHost, IfHostListener, ISwitchManagerAw for (Entry entry : failedARPReqList.entrySet()) { arphost = entry.getValue(); logger.trace("Sending the ARP from FailedARPReqList fors IP: {}", arphost.getHostId()); - if (hostFinder == null) { + if (hostFinders.isEmpty()) { logger.warn("ARPHandler is not available at interface up"); logger.warn("Since this event is missed, host(s) connected to interface {} may not be discovered", nodeConnector); @@ -1430,7 +1426,7 @@ public class HostTracker implements IfIptoHost, IfHostListener, ISwitchManagerAw byte[] dataLayerAddress = NetUtils.getBroadcastMACAddr(); host = new HostNodeConnector(dataLayerAddress, decodeIPFromId(arphost.getHostId()), nodeConnector, (short) 0); - for (IHostFinder hf : hostFinder) { + for (IHostFinder hf : hostFinders) { hf.probe(host); } } catch (ConstructionException e) { diff --git a/opendaylight/md-sal/sal-netconf-connector/pom.xml b/opendaylight/md-sal/sal-netconf-connector/pom.xml index 2105e2e71d..777709b06a 100644 --- a/opendaylight/md-sal/sal-netconf-connector/pom.xml +++ b/opendaylight/md-sal/sal-netconf-connector/pom.xml @@ -177,6 +177,7 @@ + org.opendaylight.yangtools yang-maven-plugin @@ -187,6 +188,14 @@ + + + org.opendaylight.yangtools.maven.sal.api.gen.plugin.CodeGeneratorImpl + + + ${salGeneratorPath} + + org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator @@ -221,6 +230,7 @@ + org.codehaus.mojo build-helper-maven-plugin diff --git a/opendaylight/md-sal/sal-remoterpc-connector/implementation/pom.xml b/opendaylight/md-sal/sal-remoterpc-connector/implementation/pom.xml index 4515357476..415ae5aa05 100644 --- a/opendaylight/md-sal/sal-remoterpc-connector/implementation/pom.xml +++ b/opendaylight/md-sal/sal-remoterpc-connector/implementation/pom.xml @@ -127,7 +127,6 @@ *, - com.google.common.collect, !org.codehaus.enunciate.jaxrs diff --git a/opendaylight/networkconfiguration/neutron/src/main/java/org/opendaylight/controller/networkconfig/neutron/NeutronSubnet_IPAllocationPool.java b/opendaylight/networkconfiguration/neutron/src/main/java/org/opendaylight/controller/networkconfig/neutron/NeutronSubnet_IPAllocationPool.java index dab69917d1..75da310b2b 100644 --- a/opendaylight/networkconfiguration/neutron/src/main/java/org/opendaylight/controller/networkconfig/neutron/NeutronSubnet_IPAllocationPool.java +++ b/opendaylight/networkconfiguration/neutron/src/main/java/org/opendaylight/controller/networkconfig/neutron/NeutronSubnet_IPAllocationPool.java @@ -152,6 +152,9 @@ public class NeutronSubnet_IPAllocationPool implements Serializable { if (i != gIP) { p.setPoolStart(poolStart); poolStarted = true; + } else { + //FIX for bug 533 + p.setPoolStart(NeutronSubnet_IPAllocationPool.longtoIP(i+1)); } } if (i == eIP) { diff --git a/opendaylight/samples/simpleforwarding/src/main/java/org/opendaylight/controller/samples/simpleforwarding/internal/Activator.java b/opendaylight/samples/simpleforwarding/src/main/java/org/opendaylight/controller/samples/simpleforwarding/internal/Activator.java index 1a71511ef5..ed9374b6fa 100644 --- a/opendaylight/samples/simpleforwarding/src/main/java/org/opendaylight/controller/samples/simpleforwarding/internal/Activator.java +++ b/opendaylight/samples/simpleforwarding/src/main/java/org/opendaylight/controller/samples/simpleforwarding/internal/Activator.java @@ -13,9 +13,6 @@ import java.util.Dictionary; import java.util.Hashtable; import org.apache.felix.dm.Component; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import org.opendaylight.controller.clustering.services.IClusterContainerServices; import org.opendaylight.controller.forwardingrulesmanager.IForwardingRulesManager; import org.opendaylight.controller.hosttracker.IfIptoHost; @@ -30,6 +27,8 @@ import org.opendaylight.controller.samples.simpleforwarding.IBroadcastPortSelect import org.opendaylight.controller.switchmanager.IInventoryListener; import org.opendaylight.controller.switchmanager.ISwitchManager; import org.opendaylight.controller.topologymanager.ITopologyManager; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class Activator extends ComponentActivatorAbstractBase { protected static final Logger logger = LoggerFactory @@ -45,6 +44,7 @@ public class Activator extends ComponentActivatorAbstractBase { * instantiated in order to get an fully working implementation * Object */ + @Override public Object[] getImplementations() { Object[] res = { SimpleForwardingImpl.class, SimpleBroadcastHandlerImpl.class }; @@ -64,12 +64,17 @@ public class Activator extends ComponentActivatorAbstractBase { * also optional per-container different behavior if needed, usually * should not be the case though. */ + @Override public void configureInstance(Component c, Object imp, String containerName) { if (imp.equals(SimpleForwardingImpl.class)) { + Dictionary props = new Hashtable(); + props.put("salListenerName", "simpleforwarding"); + // export the service c.setInterface(new String[] { IInventoryListener.class.getName(), IfNewHostNotify.class.getName(), - IListenRoutingUpdates.class.getName() }, null); + IListenRoutingUpdates.class.getName(), + IListenDataPacket.class.getName() }, props); c.add(createContainerServiceDependency(containerName).setService( IClusterContainerServices.class).setCallbacks( @@ -96,7 +101,11 @@ public class Activator extends ComponentActivatorAbstractBase { c.add(createContainerServiceDependency(containerName).setService( IRouting.class).setCallbacks("setRouting", "unsetRouting") .setRequired(false)); - }else if (imp.equals(SimpleBroadcastHandlerImpl.class)) { + c.add(createContainerServiceDependency(containerName).setService( + IDataPacketService.class).setCallbacks("setDataPacketService", + "unsetDataPacketService").setRequired(false)); + + } else if (imp.equals(SimpleBroadcastHandlerImpl.class)) { Dictionary props = new Hashtable(); props.put("salListenerName", "simplebroadcasthandler"); diff --git a/opendaylight/samples/simpleforwarding/src/main/java/org/opendaylight/controller/samples/simpleforwarding/internal/SimpleBroadcastHandlerImpl.java b/opendaylight/samples/simpleforwarding/src/main/java/org/opendaylight/controller/samples/simpleforwarding/internal/SimpleBroadcastHandlerImpl.java index d2016b1f63..e39ae65693 100644 --- a/opendaylight/samples/simpleforwarding/src/main/java/org/opendaylight/controller/samples/simpleforwarding/internal/SimpleBroadcastHandlerImpl.java +++ b/opendaylight/samples/simpleforwarding/src/main/java/org/opendaylight/controller/samples/simpleforwarding/internal/SimpleBroadcastHandlerImpl.java @@ -12,12 +12,12 @@ import java.util.HashSet; import java.util.Set; import java.util.concurrent.locks.ReentrantReadWriteLock; -import org.opendaylight.controller.sal.packet.Ethernet; -import org.opendaylight.controller.sal.packet.IDataPacketService; -import org.opendaylight.controller.sal.packet.IListenDataPacket; import org.opendaylight.controller.sal.core.ConstructionException; import org.opendaylight.controller.sal.core.Node; import org.opendaylight.controller.sal.core.NodeConnector; +import org.opendaylight.controller.sal.packet.Ethernet; +import org.opendaylight.controller.sal.packet.IDataPacketService; +import org.opendaylight.controller.sal.packet.IListenDataPacket; import org.opendaylight.controller.sal.packet.Packet; import org.opendaylight.controller.sal.packet.PacketResult; import org.opendaylight.controller.sal.packet.RawPacket; @@ -54,7 +54,7 @@ public class SimpleBroadcastHandlerImpl implements IBroadcastHandler, IListenDat public PacketResult receiveDataPacket(RawPacket inPkt) { /* * note that this assumes that the protocol plugin will do appropriate - * filtering to ensure that this only receives packets for it's + * filtering to ensure that this only receives packets for its * container. */ @@ -216,6 +216,7 @@ public class SimpleBroadcastHandlerImpl implements IBroadcastHandler, IListenDat lock.writeLock().unlock(); } + @Override public void setMode(BroadcastMode m) { lock.writeLock().lock(); mode = m; diff --git a/opendaylight/samples/simpleforwarding/src/main/java/org/opendaylight/controller/samples/simpleforwarding/internal/SimpleForwardingImpl.java b/opendaylight/samples/simpleforwarding/src/main/java/org/opendaylight/controller/samples/simpleforwarding/internal/SimpleForwardingImpl.java index 4b3363b832..b9d8fee986 100644 --- a/opendaylight/samples/simpleforwarding/src/main/java/org/opendaylight/controller/samples/simpleforwarding/internal/SimpleForwardingImpl.java +++ b/opendaylight/samples/simpleforwarding/src/main/java/org/opendaylight/controller/samples/simpleforwarding/internal/SimpleForwardingImpl.java @@ -9,6 +9,7 @@ package org.opendaylight.controller.samples.simpleforwarding.internal; +import java.net.InetAddress; import java.util.ArrayList; import java.util.EnumSet; import java.util.HashMap; @@ -45,9 +46,17 @@ import org.opendaylight.controller.sal.core.UpdateType; import org.opendaylight.controller.sal.flowprogrammer.Flow; import org.opendaylight.controller.sal.match.Match; import org.opendaylight.controller.sal.match.MatchType; +import org.opendaylight.controller.sal.packet.Ethernet; +import org.opendaylight.controller.sal.packet.IDataPacketService; +import org.opendaylight.controller.sal.packet.IListenDataPacket; +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.IListenRoutingUpdates; import org.opendaylight.controller.sal.routing.IRouting; import org.opendaylight.controller.sal.utils.EtherTypes; +import org.opendaylight.controller.sal.utils.NetUtils; import org.opendaylight.controller.sal.utils.NodeConnectorCreator; import org.opendaylight.controller.sal.utils.Status; import org.opendaylight.controller.samples.simpleforwarding.HostNodePair; @@ -70,11 +79,10 @@ import org.slf4j.LoggerFactory; * installs those rules using installPerHostRules(). */ public class SimpleForwardingImpl implements IfNewHostNotify, - IListenRoutingUpdates, IInventoryListener { - private static Logger log = LoggerFactory - .getLogger(SimpleForwardingImpl.class); + IListenRoutingUpdates, IInventoryListener, IListenDataPacket { + private static Logger log = LoggerFactory.getLogger(SimpleForwardingImpl.class); private static short DEFAULT_IPSWITCH_PRIORITY = 1; - private static String FORWARDING_RULES_CACHE_NAME = "forwarding.ipswitch.rules"; + static final String FORWARDING_RULES_CACHE_NAME = "forwarding.ipswitch.rules"; private IfIptoHost hostTracker; private IForwardingRulesManager frm; private ITopologyManager topologyManager; @@ -90,6 +98,7 @@ public class SimpleForwardingImpl implements IfNewHostNotify, private Map> tobePrunedPos = new HashMap>(); private IClusterContainerServices clusterContainerService = null; private ISwitchManager switchManager; + private IDataPacketService dataPacketService; /** * Return codes from the programming of the perHost rules in HW @@ -97,8 +106,19 @@ public class SimpleForwardingImpl implements IfNewHostNotify, public enum RulesProgrammingReturnCode { SUCCESS, FAILED_FEW_SWITCHES, FAILED_ALL_SWITCHES, FAILED_WRONG_PARAMS } + public void setDataPacketService(IDataPacketService s) { + log.debug("Setting dataPacketService"); + this.dataPacketService = s; + } + + public void unsetDataPacketService(IDataPacketService s) { + if (this.dataPacketService == s) { + this.dataPacketService = null; + } + } public void setRouting(IRouting routing) { + log.debug("Setting routing"); this.routing = routing; } @@ -108,10 +128,6 @@ public class SimpleForwardingImpl implements IfNewHostNotify, } } - public ITopologyManager getTopologyManager() { - return topologyManager; - } - public void setTopologyManager(ITopologyManager topologyManager) { log.debug("Setting topologyManager"); this.topologyManager = topologyManager; @@ -670,8 +686,7 @@ public class SimpleForwardingImpl implements IfNewHostNotify, * * @return a return code that convey the programming status of the HW */ - private RulesProgrammingReturnCode uninstallPerHostRules( - HostNodeConnector host) { + private RulesProgrammingReturnCode uninstallPerHostRules(HostNodeConnector host) { RulesProgrammingReturnCode retCode = RulesProgrammingReturnCode.SUCCESS; Map pos; FlowEntry po; @@ -768,16 +783,12 @@ public class SimpleForwardingImpl implements IfNewHostNotify, for (Node swId : switches) { List pl = tobePrunedPos.get(swId); if (pl != null) { - log - .debug( - "Policies for Switch: {} in the list to be deleted: {}", - swId, pl); + log.debug("Policies for Switch: {} in the list to be deleted: {}", swId, pl); Iterator plIter = pl.iterator(); //for (Policy po: pl) { while (plIter.hasNext()) { FlowEntry po = plIter.next(); - log.error("Removing Policy, Switch: {} Policy: {}", swId, - po); + log.error("Removing Policy, Switch: {} Policy: {}", swId, po); this.frm.uninstallFlowEntry(po); plIter.remove(); } @@ -962,4 +973,56 @@ public class SimpleForwardingImpl implements IfNewHostNotify, this.switchManager = null; } } + + @Override + public PacketResult receiveDataPacket(RawPacket inPkt) { + if (inPkt == null) { + return PacketResult.IGNORED; + } + log.trace("Received a frame of size: {}", inPkt.getPacketData().length); + Packet formattedPak = this.dataPacketService.decodeDataPacket(inPkt); + if (formattedPak instanceof Ethernet) { + Object nextPak = formattedPak.getPayload(); + if (nextPak instanceof IPv4) { + log.trace("Handle punted IP packet: {}", formattedPak); + handlePuntedIPPacket((IPv4) nextPak, inPkt.getIncomingNodeConnector()); + } + } + return PacketResult.IGNORED; + + } + + private void handlePuntedIPPacket(IPv4 pkt, NodeConnector incomingNodeConnector) { + InetAddress dIP = NetUtils.getInetAddress(pkt.getDestinationAddress()); + if (dIP == null || hostTracker == null) { + log.debug("Invalid param(s) in handlePuntedIPPacket.. DestIP: {}. hostTracker: {}", dIP, hostTracker); + return; + } + HostNodeConnector destHost = hostTracker.hostFind(dIP); + if (destHost != null + && (routing == null || + routing.getRoute(incomingNodeConnector.getNode(), destHost.getnodeconnectorNode()) != null)) { + + log.trace("Host {} is at {}", dIP, destHost.getnodeConnector()); + HostNodePair key = new HostNodePair(destHost, incomingNodeConnector.getNode()); + + // If SimpleForwarding is aware of this host, it will try to install + // a path. Forward packet until it's done. + if (dataPacketService != null && this.rulesDB.containsKey(key)) { + + + /* + * if we know where the host is and there's a path from where this + * packet was punted to where the host is, then attempt best effort delivery to the host + */ + NodeConnector nc = destHost.getnodeConnector(); + log.trace("Forwarding punted IP received at {} to {}", incomingNodeConnector, nc); + // 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); + } + + } + } } diff --git a/opendaylight/switchmanager/implementation/src/main/java/org/opendaylight/controller/switchmanager/internal/Activator.java b/opendaylight/switchmanager/implementation/src/main/java/org/opendaylight/controller/switchmanager/internal/Activator.java index 002e06c0bf..0f11284e53 100644 --- a/opendaylight/switchmanager/implementation/src/main/java/org/opendaylight/controller/switchmanager/internal/Activator.java +++ b/opendaylight/switchmanager/implementation/src/main/java/org/opendaylight/controller/switchmanager/internal/Activator.java @@ -11,6 +11,7 @@ package org.opendaylight.controller.switchmanager.internal; import org.apache.felix.dm.Component; import org.opendaylight.controller.clustering.services.IClusterContainerServices; +import org.opendaylight.controller.clustering.services.IClusterGlobalServices; import org.opendaylight.controller.configuration.IConfigurationContainerAware; import org.opendaylight.controller.configuration.IConfigurationContainerService; import org.opendaylight.controller.sal.core.ComponentActivatorAbstractBase; @@ -100,12 +101,34 @@ public class Activator extends ComponentActivatorAbstractBase { IConfigurationContainerService.class).setCallbacks( "setConfigurationContainerService", "unsetConfigurationContainerService").setRequired(true)); + c.add(createServiceDependency() + .setService(IControllerProperties.class) + .setCallbacks("setControllerProperties", "unsetControllerProperties") + .setRequired(true)); } } + /** + * {@inheritDoc} + */ @Override protected Object[] getGlobalImplementations() { - final Object[] res = { SwitchManagerCLI.class }; + final Object[] res = { ControllerProperties.class, SwitchManagerCLI.class }; return res; } + + /** + * {@inheritDoc} + */ + @Override + public void configureGlobalInstance(Component c, Object imp) { + if (imp.equals(ControllerProperties.class)) { + c.setInterface(new String[] { IControllerProperties.class.getName() }, null); + + c.add(createServiceDependency() + .setService(IClusterGlobalServices.class) + .setCallbacks("setClusterService", "unsetClusterService") + .setRequired(true)); + } + } } diff --git a/opendaylight/switchmanager/implementation/src/main/java/org/opendaylight/controller/switchmanager/internal/ControllerProperties.java b/opendaylight/switchmanager/implementation/src/main/java/org/opendaylight/controller/switchmanager/internal/ControllerProperties.java new file mode 100644 index 0000000000..4b319b87cb --- /dev/null +++ b/opendaylight/switchmanager/implementation/src/main/java/org/opendaylight/controller/switchmanager/internal/ControllerProperties.java @@ -0,0 +1,241 @@ +/* + * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.controller.switchmanager.internal; + +import java.net.NetworkInterface; +import java.net.SocketException; +import java.util.EnumSet; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; + +import org.apache.felix.dm.Component; +import org.opendaylight.controller.clustering.services.CacheConfigException; +import org.opendaylight.controller.clustering.services.CacheExistException; +import org.opendaylight.controller.clustering.services.IClusterGlobalServices; +import org.opendaylight.controller.clustering.services.IClusterServices; +import org.opendaylight.controller.sal.core.MacAddress; +import org.opendaylight.controller.sal.core.Property; +import org.opendaylight.controller.sal.utils.HexEncode; +import org.opendaylight.controller.sal.utils.Status; +import org.opendaylight.controller.sal.utils.StatusCode; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * The class ControllerProperties + * provides implementation for the ControllerProperties API + */ +public class ControllerProperties implements IControllerProperties { + + private IClusterGlobalServices clusterService = null; + private final Logger log = LoggerFactory + .getLogger(ControllerProperties.class); + private static final String controllerGlobalPropertiesCacheName = "switchmanager.controllerGlobalProperties"; + + private ConcurrentMap controllerGlobalProperties; + + private void allocateCaches() { + if (this.clusterService == null) { + this.nonClusterObjectCreate(); + log.warn("un-initialized clusterService, can't create cache"); + return; + } + try { + this.clusterService.createCache(controllerGlobalPropertiesCacheName, + EnumSet.of(IClusterServices.cacheMode.TRANSACTIONAL)); + } catch (CacheConfigException cce) { + log.error("\nCache configuration invalid - check cache mode"); + } catch (CacheExistException ce) { + log.error("\nCache already exits - destroy and recreate if needed"); + } + } + + private void nonClusterObjectCreate() { + controllerGlobalProperties = new ConcurrentHashMap(); + } + + @SuppressWarnings({ "unchecked" }) + private void retrieveCaches() { + if (this.clusterService == null) { + log.warn("un-initialized clusterService, can't create cache"); + return; + } + controllerGlobalProperties = (ConcurrentMap) this.clusterService + .getCache(controllerGlobalPropertiesCacheName); + if (controllerGlobalProperties == null) { + log.error("\nFailed to get cache for controllerGlobalProperties"); + } + } + + /** + * Function called by the dependency manager when all the required + * dependencies are satisfied + * + * @param c Component + */ + void init(Component c) { + // Instantiate cluster synced variables + allocateCaches(); + retrieveCaches(); + } + + private void initializeProperties() { + byte controllerMac[] = getHardwareMAC(); + if (controllerMac != null) { + Property existing = controllerGlobalProperties.putIfAbsent(MacAddress.name, new MacAddress(controllerMac)); + if (existing == null && log.isTraceEnabled()) { + log.trace("Setting controller MAC address in the cluster: {}", HexEncode.bytesToHexStringFormat(controllerMac)); + } + } + } + + private byte[] getHardwareMAC() { + Enumeration nis; + byte[] macAddress = null; + + try { + nis = NetworkInterface.getNetworkInterfaces(); + } catch (SocketException e) { + log.error("Failed to acquire controller MAC: ", e); + return macAddress; + } + + while (nis.hasMoreElements()) { + NetworkInterface ni = nis.nextElement(); + try { + macAddress = ni.getHardwareAddress(); + } catch (SocketException e) { + log.error("Failed to acquire controller MAC: ", e); + } + if (macAddress != null && macAddress.length != 0) { + break; + } + } + if (macAddress == null) { + log.warn("Failed to acquire controller MAC: No physical interface found"); + // This happens when running controller on windows VM, for example + // TODO: Try parsing the OS command output + // For now provide a quick fix for the release + macAddress = new byte[] { (byte) 0x00, (byte) 0x00, (byte) 0x0c, (byte) 0x60, (byte) 0x0D, (byte) 0x10 }; + log.debug("Assigning custom MAC address to controller"); + } + return macAddress; + } + + /** + * 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() { + // initialize required properties if first node in the cluster + if(this.clusterService.amICoordinator()) { + initializeProperties(); + } + } + + /** + * Function called after registered the service in OSGi service registry. + */ + void started() { + // nothing to do + } + + /** + * Function called before services of the component are removed + * from OSGi service registry. + */ + void stopping() { + // nothing to do + } + + /** + * 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() { + // nothing to do + } + + /** + * 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() { + // nothing to do + } + + /** + * {@inheritDoc} + */ + @Override + public Map getControllerProperties() { + return new HashMap(this.controllerGlobalProperties); + } + + /** + * {@inheritDoc} + */ + @Override + public Property getControllerProperty(String propertyName) { + if (propertyName != null) { + return this.controllerGlobalProperties.get(propertyName); + } + return null; + } + + /** + * {@inheritDoc} + */ + @Override + public Status setControllerProperty(Property property) { + if (property != null) { + this.controllerGlobalProperties.put(property.getName(), property); + return new Status(StatusCode.SUCCESS); + } + return new Status(StatusCode.BADREQUEST, "Invalid property provided when setting property"); + } + + /** + * {@inheritDoc} + */ + @Override + public Status removeControllerProperty(String propertyName) { + if (propertyName != null) { + this.controllerGlobalProperties.remove(propertyName); + return new Status(StatusCode.SUCCESS); + } + return new Status(StatusCode.BADREQUEST, "Invalid property provided when removing property"); + } + + /** + * setClusterService + * @param s + */ + public void setClusterService(IClusterGlobalServices s) { + this.clusterService = s; + } + + /** + * unsetClusterServices + * @param s + */ + public void unsetClusterServices(IClusterGlobalServices s) { + if (this.clusterService == s) { + this.clusterService = null; + } + } + +} diff --git a/opendaylight/switchmanager/implementation/src/main/java/org/opendaylight/controller/switchmanager/internal/IControllerProperties.java b/opendaylight/switchmanager/implementation/src/main/java/org/opendaylight/controller/switchmanager/internal/IControllerProperties.java new file mode 100644 index 0000000000..f9301e26c8 --- /dev/null +++ b/opendaylight/switchmanager/implementation/src/main/java/org/opendaylight/controller/switchmanager/internal/IControllerProperties.java @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.controller.switchmanager.internal; + +import java.util.Map; + +import org.opendaylight.controller.sal.core.Property; +import org.opendaylight.controller.sal.utils.Status; + +/** + * The class ControllerProperties is a global store + * for controller properties. Use this api to store/retrieve properties + * that are container independent. + * + * This is visible only to switch manager. Hence its a part of + * switch manager internal bundle. + */ +public interface IControllerProperties { + + /** + * Return all the global properties of the controller + * + * @return map of {@link org.opendaylight.controller.sal.core.Property} such + * as {@link org.opendaylight.controller.sal.core.Description} + * and/or {@link org.opendaylight.controller.sal.core.Tier} etc. + */ + public Map getControllerProperties(); + + /** + * Return a specific property of the controller given the property name + * + * @param propertyName + * the property name specified by + * {@link org.opendaylight.controller.sal.core.Property} and its + * extended classes + * @return {@link org.opendaylight.controller.sal.core.Property} + */ + public Property getControllerProperty(String propertyName); + + /** + * Set a specific property of the controller + * + * @param property + * {@link org.opendaylight.controller.sal.core.Property} + * @return Status + */ + public Status setControllerProperty(Property property); + + /** + * Remove a property of a node + * + * @param propertyName + * the property name specified by + * {@link org.opendaylight.controller.sal.core.Property} and its + * extended classes + * @return success or failed reason + */ + public Status removeControllerProperty(String propertyName); + +} diff --git a/opendaylight/switchmanager/implementation/src/main/java/org/opendaylight/controller/switchmanager/internal/SwitchManager.java b/opendaylight/switchmanager/implementation/src/main/java/org/opendaylight/controller/switchmanager/internal/SwitchManager.java index e457fecfed..07252b06f7 100644 --- a/opendaylight/switchmanager/implementation/src/main/java/org/opendaylight/controller/switchmanager/internal/SwitchManager.java +++ b/opendaylight/switchmanager/implementation/src/main/java/org/opendaylight/controller/switchmanager/internal/SwitchManager.java @@ -12,13 +12,10 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.io.ObjectInputStream; import java.net.InetAddress; -import java.net.NetworkInterface; -import java.net.SocketException; import java.util.ArrayList; import java.util.Collections; import java.util.Dictionary; import java.util.EnumSet; -import java.util.Enumeration; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -56,7 +53,6 @@ import org.opendaylight.controller.sal.inventory.IInventoryService; import org.opendaylight.controller.sal.inventory.IListenInventoryUpdates; import org.opendaylight.controller.sal.reader.NodeDescription; import org.opendaylight.controller.sal.utils.GlobalConstants; -import org.opendaylight.controller.sal.utils.HexEncode; import org.opendaylight.controller.sal.utils.IObjectReader; import org.opendaylight.controller.sal.utils.Status; import org.opendaylight.controller.sal.utils.StatusCode; @@ -102,6 +98,7 @@ public class SwitchManager implements ISwitchManager, IConfigurationContainerAwa private ConcurrentMap controllerProps; private IInventoryService inventoryService; private IStatisticsManager statisticsManager; + private IControllerProperties controllerProperties; private IConfigurationContainerService configurationService; private final Set switchManagerAware = Collections .synchronizedSet(new HashSet()); @@ -171,13 +168,13 @@ public class SwitchManager implements ISwitchManager, IConfigurationContainerAwa retrieveCaches(); // Add controller MAC, if first node in the cluster - if (!controllerProps.containsKey(MacAddress.name)) { - byte controllerMac[] = getHardwareMAC(); + if ((!controllerProps.containsKey(MacAddress.name)) && (controllerProperties != null)) { + Property controllerMac = controllerProperties.getControllerProperty(MacAddress.name); if (controllerMac != null) { - Property existing = controllerProps.putIfAbsent(MacAddress.name, new MacAddress(controllerMac)); + Property existing = controllerProps.putIfAbsent(MacAddress.name, controllerMac); if (existing == null && log.isTraceEnabled()) { log.trace("Container {}: Setting controller MAC address in the cluster: {}", getContainerName(), - HexEncode.bytesToHexStringFormat(controllerMac)); + controllerMac); } } } @@ -1405,36 +1402,6 @@ public class SwitchManager implements ISwitchManager, IConfigurationContainerAwa return (propMap != null) ? propMap.get(propName) : null; } - private byte[] getHardwareMAC() { - Enumeration nis; - byte[] macAddress = null; - - try { - nis = NetworkInterface.getNetworkInterfaces(); - } catch (SocketException e) { - log.error("Failed to acquire controller MAC: ", e); - return macAddress; - } - - while (nis.hasMoreElements()) { - NetworkInterface ni = nis.nextElement(); - try { - macAddress = ni.getHardwareAddress(); - } catch (SocketException e) { - log.error("Failed to acquire controller MAC: ", e); - } - if (macAddress != null && macAddress.length != 0) { - break; - } - } - if (macAddress == null) { - log.warn("Failed to acquire controller MAC: No physical interface found"); - // This happens when running controller on windows VM, for example - // Try parsing the OS command output - } - return macAddress; - } - @Override public byte[] getControllerMAC() { MacAddress macProperty = (MacAddress)controllerProps.get(MacAddress.name); @@ -1793,6 +1760,16 @@ public class SwitchManager implements ISwitchManager, IConfigurationContainerAwa } } + public void setControllerProperties(IControllerProperties controllerProperties) { + log.trace("Got controller properties set request {}", controllerProperties); + this.controllerProperties = controllerProperties; + } + + public void unsetControllerProperties(IControllerProperties controllerProperties) { + log.trace("Got controller properties UNset request"); + this.controllerProperties = null; + } + private void getInventories() { if (inventoryService == null) { log.trace("inventory service not avaiable");