Use new PacketService to request ARP with duplication
Change-Id: Id005772b0a69629ad3fb532d16a398d170234d88
diff --git a/src/main/java/org/onosproject/segmentrouting/RoutingRulePopulator.java b/src/main/java/org/onosproject/segmentrouting/RoutingRulePopulator.java
index 2f07c05..28fd5ec 100644
--- a/src/main/java/org/onosproject/segmentrouting/RoutingRulePopulator.java
+++ b/src/main/java/org/onosproject/segmentrouting/RoutingRulePopulator.java
@@ -26,6 +26,7 @@
import org.onosproject.net.ConnectPoint;
import org.onosproject.net.flowobjective.DefaultObjectiveContext;
import org.onosproject.net.flowobjective.ObjectiveContext;
+import org.onosproject.net.packet.PacketPriority;
import org.onosproject.segmentrouting.DefaultRoutingHandler.PortFilterInfo;
import org.onosproject.segmentrouting.config.DeviceConfigNotFoundException;
import org.onosproject.segmentrouting.config.DeviceConfiguration;
@@ -51,6 +52,7 @@
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
+import java.util.Optional;
import java.util.Set;
import java.util.concurrent.atomic.AtomicLong;
@@ -623,27 +625,16 @@
deviceId);
return;
}
- ForwardingObjective.Builder puntIp = DefaultForwardingObjective.builder();
Set<Ip4Address> allIps = new HashSet<>(config.getPortIPs(deviceId));
allIps.add(routerIp);
for (Ip4Address ipaddr : allIps) {
- TrafficSelector.Builder sbuilder = DefaultTrafficSelector.builder();
- TrafficTreatment.Builder tbuilder = DefaultTrafficTreatment.builder();
- sbuilder.matchEthType(Ethernet.TYPE_IPV4);
- sbuilder.matchIPDst(IpPrefix.valueOf(ipaddr,
- IpPrefix.MAX_INET_MASK_LENGTH));
- tbuilder.setOutput(PortNumber.CONTROLLER);
- puntIp.withSelector(sbuilder.build());
- puntIp.withTreatment(tbuilder.build());
- puntIp.withFlag(Flag.VERSATILE)
- .withPriority(SegmentRoutingService.HIGHEST_PRIORITY)
- .makePermanent()
- .fromApp(srManager.appId);
- ObjectiveContext context = new DefaultObjectiveContext(
- (objective) -> log.debug("IP punt rule for {} populated", ipaddr),
- (objective, error) ->
- log.warn("Failed to populate IP punt rule for {}: {}", ipaddr, error));
- srManager.flowObjectiveService.forward(deviceId, puntIp.add(context));
+ TrafficSelector.Builder sbuilder = DefaultTrafficSelector.builder()
+ .matchEthType(Ethernet.TYPE_IPV4)
+ .matchIPDst(IpPrefix.valueOf(ipaddr, IpPrefix.MAX_INET_MASK_LENGTH));
+ Optional<DeviceId> optDeviceId = Optional.of(deviceId);
+
+ srManager.packetService.requestPackets(sbuilder.build(),
+ PacketPriority.CONTROL, srManager.appId, optDeviceId);
}
}
diff --git a/src/main/java/org/onosproject/segmentrouting/SegmentRoutingManager.java b/src/main/java/org/onosproject/segmentrouting/SegmentRoutingManager.java
index dd2f5e8..84c5190 100644
--- a/src/main/java/org/onosproject/segmentrouting/SegmentRoutingManager.java
+++ b/src/main/java/org/onosproject/segmentrouting/SegmentRoutingManager.java
@@ -351,10 +351,13 @@
multicastRouteService.addListener(mcastListener);
cordConfigService.addListener(cordConfigListener);
- // Request ARP packet-in
+ /* Request ARP packet-in.
+ * Copy flag set to true since in cross-connect case we still want to
+ * forward ARP packet to the flood group.
+ */
TrafficSelector.Builder selector = DefaultTrafficSelector.builder();
selector.matchEthType(Ethernet.TYPE_ARP);
- packetService.requestPackets(selector.build(), PacketPriority.CONTROL, appId, Optional.empty());
+ packetService.requestPackets(selector.build(), PacketPriority.CONTROL, appId, true);
cfgListener.configureNetwork();
diff --git a/src/main/java/org/onosproject/segmentrouting/SegmentRoutingService.java b/src/main/java/org/onosproject/segmentrouting/SegmentRoutingService.java
index d8d155e..7375b98 100644
--- a/src/main/java/org/onosproject/segmentrouting/SegmentRoutingService.java
+++ b/src/main/java/org/onosproject/segmentrouting/SegmentRoutingService.java
@@ -27,11 +27,6 @@
*/
public interface SegmentRoutingService {
/**
- * Highest flow priority.
- */
- int HIGHEST_PRIORITY = 0xffff;
-
- /**
* VLAN cross-connect priority.
*/
int XCONNECT_PRIORITY = 1000;