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;
*/
@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);
}
/**
* 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;
* 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;
}
it.commit();
}
}
+
--- /dev/null
+/*
+ * 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
+
+}
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;
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;
}
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.