Merge "Host Tracker generated source code imports into Eclipse"
authorEvan Zeller <evanrzeller@gmail.com>
Thu, 7 Aug 2014 20:36:33 +0000 (20:36 +0000)
committerGerrit Code Review <gerrit@opendaylight.org>
Thu, 7 Aug 2014 20:36:33 +0000 (20:36 +0000)
addresstracker/model/src/main/yang/address-tracker.yang
distribution/base/src/assemble/bin.xml
l2switch-main/src/main/java/org/opendaylight/l2switch/addressobserver/AddressObservationWriter.java
l2switch-main/src/main/java/org/opendaylight/l2switch/addressobserver/AddressObserver.java
l2switch-main/src/main/java/org/opendaylight/l2switch/inventory/InventoryReader.java

index 30f893f5767374f67f86350751a0aae58f8933f4..11dce8602da412b5322d690cccdb0c24b052c21a 100644 (file)
@@ -34,7 +34,11 @@ module address-tracker {
 
   grouping address-node-connector {
     list addresses {
-      key "first-seen";
+      key id;
+      leaf id {
+        description "A 64-bit key for this observation. This is opaque and should not be interpreted.";
+        type uint64;
+      }
       leaf mac {
         type yang:mac-address;
         description "MAC address";
index 2e85ba1301b91779daec9e233d918b6a40865954..8cefac876c9793af46feccdf847c8ebe4ee1b594 100644 (file)
@@ -48,7 +48,7 @@
         <exclude>opendaylight/plugins/org.opendaylight.controller.sal.implementation*.jar</exclude>
         <exclude>opendaylight/plugins/org.opendaylight.controller.sal.connection.implementation*.jar</exclude>
         <exclude>opendaylight/plugins/org.opendaylight.controller.sal.networkconfiguration.implementation*.jar</exclude>
-        <exclude>opendaylight/plugins/org.opendaylight.controller.sal-remote*.jar</exclude>
+        <!-- <exclude>opendaylight/plugins/org.opendaylight.controller.sal-remote*.jar</exclude> -->
         <exclude>opendaylight/plugins/org.opendaylight.controller.sal-restconf-broker*.jar</exclude>
         <exclude>opendaylight/plugins/org.opendaylight.controller.statisticsmanager*.jar</exclude>
         <exclude>opendaylight/plugins/org.opendaylight.controller.statistics.northbound*.jar</exclude>
index a4568ee90cf5c1c8681bae98dd531cd234eedfa0..91da9e7d61f06524ac9f3da78c8508caa04822c4 100644 (file)
@@ -26,6 +26,7 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.math.BigInteger;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
@@ -86,7 +87,8 @@ public class AddressObservationWriter {
           .setMac(macAddress)
           .setFirstSeen(now)
           .setLastSeen(now)
-          .setKey(new AddressesKey(now));
+          //FIXME: fix to use an internally generated key that is guaranteed to be unique
+          .setKey(new AddressesKey(bigIntFromMacAddr(macAddress)));
       List<Addresses> addresses = null;
 
       // Read existing address observations from data tree
@@ -139,5 +141,8 @@ public class AddressObservationWriter {
       readWriteTransaction.commit();
     }
   }
-}
 
+  private BigInteger bigIntFromMacAddr(MacAddress addr) {
+    return new BigInteger(addr.getValue().replace(":", ""), 16);
+  }
+}
index ef3a13459fb363085b64c85ced4dd876a96061be..1470b9150acb8ec92bd30a8022a7a1285d92ed6d 100644 (file)
@@ -29,7 +29,7 @@ import org.slf4j.LoggerFactory;
  * store these address observations for each node-connector.
  * These packets are returned to the network after the addresses are learned.
  */
-public class AddressObserver implements ArpPacketListener, Ipv4PacketListener, Ipv6PacketListener {
+public class AddressObserver implements ArpPacketListener {//, Ipv4PacketListener, Ipv6PacketListener {
 
   private final static Logger _logger = LoggerFactory.getLogger(AddressObserver.class);
   private AddressObservationWriter addressObservationWriter;
@@ -80,7 +80,7 @@ public class AddressObserver implements ArpPacketListener, Ipv4PacketListener, I
    * The handler function for IPv4 packets.
    * @param packetReceived  The incoming packet.
    */
-  @Override
/* @Override
   public void onIpv4PacketReceived(Ipv4PacketReceived packetReceived) {
     if(packetReceived==null || packetReceived.getPacketChain()==null) {
       return;
@@ -111,12 +111,12 @@ public class AddressObserver implements ArpPacketListener, Ipv4PacketListener, I
       packetDispatcher.dispatchPacket(packetReceived.getPayload(), rawPacket.getIngress(), ethernetPacket.getSourceMac(), ethernetPacket.getDestinationMac());
     }
   }
-
+*/
   /**
    * The handler function for IPv6 packets.
    * @param packetReceived  The incoming packet.
    */
-  @Override
+  /*@Override
   public void onIpv6PacketReceived(Ipv6PacketReceived packetReceived) {
     if(packetReceived==null || packetReceived.getPacketChain()==null) {
       return;
@@ -147,4 +147,5 @@ public class AddressObserver implements ArpPacketListener, Ipv4PacketListener, I
       packetDispatcher.dispatchPacket(packetReceived.getPayload(), rawPacket.getIngress(), ethernetPacket.getSourceMac(), ethernetPacket.getDestinationMac());
     }
   }
+  */
 }
index 16aba1e897f42bf0460aee02f24bcea4252eb356..505aa8ee497588dfa3eb799d71ba9f4adf525fef 100644 (file)
@@ -14,6 +14,7 @@ import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.address.tracker.rev140617.AddressCapableNodeConnector;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.address.tracker.rev140617.address.node.connector.Addresses;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorRef;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector;
@@ -116,31 +117,23 @@ public class InventoryReader {
               NodeConnectorRef ncRef = new NodeConnectorRef(
                   InstanceIdentifier.<Nodes>builder(Nodes.class).<Node, NodeKey>child(Node.class, node.getKey())
                       .<NodeConnector, NodeConnectorKey>child(NodeConnector.class, nodeConnector.getKey()).toInstance());
-              if(nodeConnector.getKey().toString().contains("LOCAL")) {
-                controllerSwitchConnectors.put(node.getId().getValue(), ncRef);
-              } else {
+              if(!nodeConnector.getKey().toString().contains("LOCAL")) {
                 nodeConnectorRefs.add(ncRef);
               }
-
               // Read STP status for this NodeConnector
-              try {
-                readOnlyTransaction = dataService.newReadOnlyTransaction();
-                Optional<NodeConnector> dataObjectOptional =
-                    readOnlyTransaction.read(LogicalDatastoreType.OPERATIONAL, (InstanceIdentifier<NodeConnector>) ncRef.getValue()).get();
-                if(dataObjectOptional.isPresent()) {
-                  NodeConnector configNodeConnector = (NodeConnector) dataObjectOptional.get();
-                  StpStatusAwareNodeConnector saNodeConnector = configNodeConnector.getAugmentation(StpStatusAwareNodeConnector.class);
-                  if(saNodeConnector != null && StpStatus.Discarding.equals(saNodeConnector.getStatus())) {
-                    discardingNodeConnectors.add(nodeConnector.getId().getValue());
-                  }
-                }
-              } catch(InterruptedException | ExecutionException e) {
-                _logger.error("Failed to read nodes from Operational data store.");
-                throw new RuntimeException("Failed to read nodes from Operational data store.", e);
+              StpStatusAwareNodeConnector saNodeConnector = nodeConnector.getAugmentation(StpStatusAwareNodeConnector.class);
+              if(saNodeConnector != null && StpStatus.Discarding.equals(saNodeConnector.getStatus())) {
+                discardingNodeConnectors.add(nodeConnector.getId().getValue());
               }
             }
           }
+
           switchNodeConnectors.put(node.getId().getValue(), nodeConnectorRefs);
+          NodeConnectorRef ncRef = new NodeConnectorRef(
+              InstanceIdentifier.<Nodes>builder(Nodes.class).<Node, NodeKey>child(Node.class, node.getKey())
+                  .<NodeConnector, NodeConnectorKey>child(NodeConnector.class, new NodeConnectorKey(new NodeConnectorId(node.getId()+":LOCAL"))).toInstance());
+          _logger.info("Local port for node {} is {}",node.getKey(),ncRef);
+          controllerSwitchConnectors.put(node.getId().getValue(), ncRef);
         }
       }
       refreshData = false;