Refactor the AddressTracker & PacketHandler classes -- separation of functionality... 88/8588/1
authorAlex Fan <railor33@gmail.com>
Thu, 3 Jul 2014 03:00:47 +0000 (20:00 -0700)
committerAlex Fan <railor33@gmail.com>
Thu, 3 Jul 2014 03:00:47 +0000 (20:00 -0700)
Change-Id: I9a303d4caa851b64c86b176187849d1d125b84d8
Signed-off-by: Alex Fan <railor33@gmail.com>
l2switch-main/src/main/java/org/opendaylight/l2switch/L2SwitchProvider.java
l2switch-main/src/main/java/org/opendaylight/l2switch/addressobserver/AddressObservationWriter.java [moved from l2switch-main/src/main/java/org/opendaylight/l2switch/addresstracker/AddressTracker.java with 83% similarity]
l2switch-main/src/main/java/org/opendaylight/l2switch/addressobserver/AddressObserver.java [new file with mode: 0644]
l2switch-main/src/main/java/org/opendaylight/l2switch/packet/PacketDispatcher.java [moved from l2switch-main/src/main/java/org/opendaylight/l2switch/packet/PacketHandler.java with 62% similarity]

index 5dd09735e21b858396ff5bceccf517641b968c15..4c18f3b46ca921c51bb2f790894d4ed8baa90001 100644 (file)
@@ -11,10 +11,11 @@ import org.opendaylight.controller.sal.binding.api.AbstractBindingAwareConsumer;
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
 import org.opendaylight.controller.sal.binding.api.NotificationService;
 import org.opendaylight.controller.sal.binding.api.data.DataBrokerService;
-import org.opendaylight.l2switch.addresstracker.AddressTracker;
+import org.opendaylight.l2switch.addressobserver.AddressObservationWriter;
+import org.opendaylight.l2switch.addressobserver.AddressObserver;
 import org.opendaylight.l2switch.flow.FlowWriterService;
 import org.opendaylight.l2switch.flow.FlowWriterServiceImpl;
-import org.opendaylight.l2switch.packet.PacketHandler;
+import org.opendaylight.l2switch.packet.PacketDispatcher;
 import org.opendaylight.l2switch.topology.NetworkGraphDijkstra;
 import org.opendaylight.l2switch.topology.NetworkGraphService;
 import org.opendaylight.l2switch.topology.TopologyLinkDataChangeHandler;
@@ -40,30 +41,29 @@ public class L2SwitchProvider extends AbstractBindingAwareConsumer
    */
   @Override
   public void onSessionInitialized(BindingAwareBroker.ConsumerContext consumerContext) {
-    // Setup AddressTracker
-    DataBrokerService dataService = consumerContext.<DataBrokerService>getSALService(DataBrokerService.class);
-    AddressTracker addressTracker = new AddressTracker(dataService);
-
     // Setup FlowWriterService
+    DataBrokerService dataService = consumerContext.<DataBrokerService>getSALService(DataBrokerService.class);
     NetworkGraphService networkGraphService = new NetworkGraphDijkstra();
     FlowWriterService flowWriterService = new FlowWriterServiceImpl(dataService, networkGraphService);
 
-    // Setup PacketHandler
+    // Register Topology DataChangeListener
+    this.topologyLinkDataChangeHandler = new TopologyLinkDataChangeHandler(dataService, networkGraphService);
+    topologyLinkDataChangeHandler.registerAsDataChangeListener();
+
+    // Setup PacketDispatcher
     PacketProcessingService packetProcessingService =
       consumerContext.<PacketProcessingService>getRpcService(PacketProcessingService.class);
-    PacketHandler packetHandler = new PacketHandler();
-    packetHandler.setAddressTracker(addressTracker);
-    packetHandler.setPacketProcessingService(packetProcessingService);
-    packetHandler.setFlowWriterService(flowWriterService);
+    PacketDispatcher packetDispatcher = new PacketDispatcher();
+    packetDispatcher.setPacketProcessingService(packetProcessingService);
+    packetDispatcher.setFlowWriterService(flowWriterService);
 
-    // Register PacketHandler for notifications
-    NotificationService notificationService =
-      consumerContext.<NotificationService>getSALService(NotificationService.class);
-    this.listenerRegistration = notificationService.registerNotificationListener(packetHandler);
+    // Setup AddressObserver & AddressObservationWriter
+    AddressObservationWriter addressObservationWriter = new AddressObservationWriter(dataService);
+    AddressObserver addressObserver = new AddressObserver(addressObservationWriter, packetDispatcher);
 
-    // Register Topology DataChangeListener
-    this.topologyLinkDataChangeHandler = new TopologyLinkDataChangeHandler(dataService, networkGraphService);
-    topologyLinkDataChangeHandler.registerAsDataChangeListener();
+    // Register AddressObserver for notifications
+    NotificationService notificationService = consumerContext.<NotificationService>getSALService(NotificationService.class);
+    this.listenerRegistration = notificationService.registerNotificationListener(addressObserver);
   }
 
   /**
similarity index 83%
rename from l2switch-main/src/main/java/org/opendaylight/l2switch/addresstracker/AddressTracker.java
rename to l2switch-main/src/main/java/org/opendaylight/l2switch/addressobserver/AddressObservationWriter.java
index 7428b0c5e1c620476fd6d873561c15daf138d9c7..6a78077c66767463cb2e8428a010117016f0a961 100644 (file)
@@ -5,37 +5,29 @@
  * 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.l2switch.addresstracker;
+package org.opendaylight.l2switch.addressobserver;
 
 import org.opendaylight.controller.sal.binding.api.data.DataBrokerService;
 import org.opendaylight.controller.sal.binding.api.data.DataModificationTransaction;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.Timestamp;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.address.tracker.rev140617.AddressCapableNodeConnector;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.address.tracker.rev140617.AddressCapableNodeConnectorBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.address.tracker.rev140617.address.node.connector.Addresses;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.address.tracker.rev140617.address.node.connector.AddressesBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.address.tracker.rev140617.address.node.connector.AddressesKey;
-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.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
 /**
- * AddressTracker manages the MD-SAL data tree for address observations (mac, ip) on each node-connector.
+ * AddressObservationWriter manages the MD-SAL data tree for address observations (mac, ip) on each node-connector.
  */
-public class AddressTracker {
+public class AddressObservationWriter {
 
   private DataBrokerService dataService;
 
@@ -43,7 +35,7 @@ public class AddressTracker {
    * Construct an AddressTracker with the specified inputs
    * @param dataService  The DataBrokerService for the AddressTracker
    */
-  public AddressTracker(DataBrokerService dataService) {
+  public AddressObservationWriter(DataBrokerService dataService) {
     this.dataService = dataService;
   }
 
@@ -115,3 +107,4 @@ public class AddressTracker {
     it.commit();
   }
 }
+
diff --git a/l2switch-main/src/main/java/org/opendaylight/l2switch/addressobserver/AddressObserver.java b/l2switch-main/src/main/java/org/opendaylight/l2switch/addressobserver/AddressObserver.java
new file mode 100644 (file)
index 0000000..56cf045
--- /dev/null
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2014 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.l2switch.addressobserver;
+
+import org.opendaylight.l2switch.packet.PacketDispatcher;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.arp.rev140528.ArpPacketListener;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.arp.rev140528.ArpPacketOverEthernetReceived;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.ipv4.rev140528.Ipv4PacketListener;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.ipv4.rev140528.Ipv4PacketOverEthernetReceived;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * AddressObserver listens to ARP, IPv4, and IPv6 packets to find addresses (mac, ip) and
+ * 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 {
+
+  private final static Logger _logger = LoggerFactory.getLogger(AddressObserver.class);
+  private AddressObservationWriter addressObservationWriter;
+  private PacketDispatcher packetDispatcher;
+
+  public AddressObserver(AddressObservationWriter addressObservationWriter, PacketDispatcher packetDispatcher) {
+    this.addressObservationWriter = addressObservationWriter;
+    this.packetDispatcher = packetDispatcher;
+  }
+
+  /**
+   * The handler function for ARP packets.
+   * @param packetReceived  The incoming packet.
+   */
+  @Override
+  public void onArpPacketOverEthernetReceived(ArpPacketOverEthernetReceived packetReceived) {
+    addressObservationWriter.addAddress(packetReceived.getEthernetOverRawPacket().getEthernetPacket().getSourceMac(),
+      new IpAddress(packetReceived.getArpPacket().getSourceProtocolAddress().toCharArray()),
+      packetReceived.getEthernetOverRawPacket().getRawPacket().getIngress());
+    //SendPacketOut
+  }
+
+  /**
+   * The handler function for IPv4 packets.
+   * @param packetReceived  The incoming packet.
+   */
+  @Override
+  public void onIpv4PacketOverEthernetReceived(Ipv4PacketOverEthernetReceived packetReceived) {
+    addressObservationWriter.addAddress(packetReceived.getEthernetOverRawPacket().getEthernetPacket().getSourceMac(),
+      new IpAddress(packetReceived.getIpv4Packet().getSourceIpv4()),
+      packetReceived.getEthernetOverRawPacket().getRawPacket().getIngress());
+    // sendPacketOut
+  }
+
+  // ToDo Ipv6 handler
+
+}
similarity index 62%
rename from l2switch-main/src/main/java/org/opendaylight/l2switch/packet/PacketHandler.java
rename to l2switch-main/src/main/java/org/opendaylight/l2switch/packet/PacketDispatcher.java
index 47304f2b0803dd43874747944b7a308bd0536148..13d0836d6287cb660f97301f289fe133e817cd12 100644 (file)
@@ -8,7 +8,6 @@
 
 package org.opendaylight.l2switch.packet;
 
-import org.opendaylight.l2switch.addresstracker.AddressTracker;
 import org.opendaylight.l2switch.flow.FlowWriterService;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorRef;
@@ -24,21 +23,14 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
- * PacketListener listens to ARP, IPv4, and IPv6 packets to find addresses (mac, ip) and
- * store these address observations for each node-connector.
- * These packets are returned to the network after the addresses are learned.
+ * PacketDispatcher sends packets out to the network.
  */
-public class PacketHandler implements ArpPacketListener, Ipv4PacketListener {
+public class PacketDispatcher  {
 
-  private final static Logger _logger = LoggerFactory.getLogger(PacketHandler.class);
-  private AddressTracker addressTracker;
+  private final static Logger _logger = LoggerFactory.getLogger(PacketDispatcher.class);
   private PacketProcessingService packetProcessingService;
   private FlowWriterService flowWriterService;
 
-  public void setAddressTracker(AddressTracker addressTracker) {
-    this.addressTracker = addressTracker;
-  }
-
   public void setPacketProcessingService(PacketProcessingService packetProcessingService) {
     this.packetProcessingService = packetProcessingService;
   }
@@ -47,32 +39,6 @@ public class PacketHandler implements ArpPacketListener, Ipv4PacketListener {
     this.flowWriterService = flowWriterService;
   }
 
-  /**
-   * The handler function for ARP packets.
-   * @param packetReceived  The incoming packet.
-   */
-  @Override
-  public void onArpPacketOverEthernetReceived(ArpPacketOverEthernetReceived packetReceived) {
-    addressTracker.addAddress(packetReceived.getEthernetOverRawPacket().getEthernetPacket().getSourceMac(),
-      new IpAddress(packetReceived.getArpPacket().getSourceProtocolAddress().toCharArray()),
-      packetReceived.getEthernetOverRawPacket().getRawPacket().getIngress());
-    //SendPacketOut
-  }
-
-  /**
-   * The handler function for IPv4 packets.
-   * @param packetReceived  The incoming packet.
-   */
-  @Override
-  public void onIpv4PacketOverEthernetReceived(Ipv4PacketOverEthernetReceived packetReceived) {
-    addressTracker.addAddress(packetReceived.getEthernetOverRawPacket().getEthernetPacket().getSourceMac(),
-      new IpAddress(packetReceived.getIpv4Packet().getSourceIpv4()),
-      packetReceived.getEthernetOverRawPacket().getRawPacket().getIngress());
-    // sendPacketOut
-  }
-
-  // ToDo Ipv6 handler
-
   /**
    * Sends the specified packet on the specified port.
    * @param payload  The payload to be sent.