ONOS-2145 Added ability to withdraw packet intercepts via PacketService::cancelPackets.
Change-Id: Ie41271fa02740560bd67b0faf49f633ee749773c
diff --git a/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LLDPLinkProvider.java b/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LLDPLinkProvider.java
index 6a69af8..ec4a3ff 100644
--- a/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LLDPLinkProvider.java
+++ b/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LLDPLinkProvider.java
@@ -178,18 +178,20 @@
executor = newSingleThreadScheduledExecutor(groupedThreads("onos/device", "sync-%d"));
executor.scheduleAtFixedRate(new SyncDeviceInfoTask(), INIT_DELAY, DELAY, SECONDS);
- requestPackets();
+ requestIntercepts();
log.info("Started");
}
@Deactivate
public void deactivate() {
- // TODO revoke all packet requests when deactivate
cfgService.unregisterProperties(getClass(), false);
if (disableLinkDiscovery) {
return;
}
+
+ withdrawIntercepts();
+
providerRegistry.unregister(this);
deviceService.removeListener(listener);
packetService.removeProcessor(listener);
@@ -205,7 +207,6 @@
@Modified
public void modified(ComponentContext context) {
- // TODO revoke unnecessary packet requests when config being modified
if (context == null) {
loadSuppressionRules();
return;
@@ -225,7 +226,7 @@
if (!Strings.isNullOrEmpty(s)) {
lldpSuppression = s;
}
-
+ requestIntercepts();
loadSuppressionRules();
}
@@ -246,22 +247,33 @@
}
/**
- * Request packet in via PacketService.
+ * Request packet intercepts.
*/
- private void requestPackets() {
- TrafficSelector.Builder lldpSelector = DefaultTrafficSelector.builder();
- lldpSelector.matchEthType(Ethernet.TYPE_LLDP);
- packetService.requestPackets(lldpSelector.build(),
- PacketPriority.CONTROL, appId);
+ private void requestIntercepts() {
+ TrafficSelector.Builder selector = DefaultTrafficSelector.builder();
+ selector.matchEthType(Ethernet.TYPE_LLDP);
+ packetService.requestPackets(selector.build(), PacketPriority.CONTROL, appId);
+ selector.matchEthType(Ethernet.TYPE_BSN);
if (useBDDP) {
- TrafficSelector.Builder bddpSelector = DefaultTrafficSelector.builder();
- bddpSelector.matchEthType(Ethernet.TYPE_BSN);
- packetService.requestPackets(bddpSelector.build(),
- PacketPriority.CONTROL, appId);
+ packetService.requestPackets(selector.build(), PacketPriority.CONTROL, appId);
+ } else {
+ packetService.cancelPackets(selector.build(), PacketPriority.CONTROL, appId);
}
}
+ /**
+ * Withdraw packet intercepts.
+ */
+ private void withdrawIntercepts() {
+ TrafficSelector.Builder selector = DefaultTrafficSelector.builder();
+ selector.matchEthType(Ethernet.TYPE_LLDP);
+ packetService.cancelPackets(selector.build(), PacketPriority.CONTROL, appId);
+ selector.matchEthType(Ethernet.TYPE_BSN);
+ packetService.cancelPackets(selector.build(), PacketPriority.CONTROL, appId);
+ }
+
+
private class InternalRoleListener implements MastershipListener {
@Override