Implement some of the missing Selector and Match Conditions
Work toward ONOS-509
The following match conditions are added/implemented:
- UDP_SRC, UDP_DST
- SCTP_SRC, SCTP_DST
- ICMPV4_TYPE, ICMPV4_CODE
- IPV6_FLABEL
- IPV6_ND_TARGET
- IPV6_ND_SLL
- IPV6_ND_TLL
Also:
* Renamed method
TrafficSelector.Builder.matchInport(PortNumber port)
to
TrafficSelector.Builder.matchInPort(PortNumber port)
(for consistency with the corresponding method(s) elsewhere)
* Reordered the code for some of the existing matching conditions
to follow the order in the OpenFlow spec, so it is easier to
cross-reference such code.
* Added missing Javadoc
* Added few more Criterion.Type values as per OpenFlow spec 1.5.0
Change-Id: I7fc1656f32d8a7280c67d7827e4aa84528b0eafc
diff --git a/core/api/src/test/java/org/onosproject/net/flow/DefaultTrafficSelectorTest.java b/core/api/src/test/java/org/onosproject/net/flow/DefaultTrafficSelectorTest.java
index 651773f..e232647 100644
--- a/core/api/src/test/java/org/onosproject/net/flow/DefaultTrafficSelectorTest.java
+++ b/core/api/src/test/java/org/onosproject/net/flow/DefaultTrafficSelectorTest.java
@@ -25,6 +25,7 @@
import org.onosproject.net.PortNumber;
import org.onosproject.net.flow.criteria.Criteria;
import org.onosproject.net.flow.criteria.Criterion;
+import org.onlab.packet.Ip6Address;
import org.onlab.packet.IpPrefix;
import org.onlab.packet.MacAddress;
import org.onlab.packet.VlanId;
@@ -126,22 +127,25 @@
public void testCriteriaCreation() {
TrafficSelector selector;
+ final int intValue = 22;
final short shortValue = 33;
final byte byteValue = 44;
+ final MacAddress macValue = MacAddress.valueOf("11:22:33:44:55:66");
final IpPrefix ipPrefixValue = IpPrefix.valueOf("192.168.1.0/24");
final IpPrefix ipv6PrefixValue = IpPrefix.valueOf("fe80::1/64");
+ final Ip6Address ipv6AddressValue = Ip6Address.valueOf("fe80::1");
selector = DefaultTrafficSelector.builder()
- .matchInport(PortNumber.portNumber(11)).build();
+ .matchInPort(PortNumber.portNumber(11)).build();
assertThat(selector, hasCriterionWithType(Type.IN_PORT));
selector = DefaultTrafficSelector.builder()
- .matchEthSrc(MacAddress.BROADCAST).build();
- assertThat(selector, hasCriterionWithType(Type.ETH_SRC));
+ .matchEthDst(macValue).build();
+ assertThat(selector, hasCriterionWithType(Type.ETH_DST));
selector = DefaultTrafficSelector.builder()
- .matchEthDst(MacAddress.BROADCAST).build();
- assertThat(selector, hasCriterionWithType(Type.ETH_DST));
+ .matchEthSrc(macValue).build();
+ assertThat(selector, hasCriterionWithType(Type.ETH_SRC));
selector = DefaultTrafficSelector.builder()
.matchEthType(shortValue).build();
@@ -176,6 +180,30 @@
assertThat(selector, hasCriterionWithType(Type.TCP_DST));
selector = DefaultTrafficSelector.builder()
+ .matchUdpSrc(shortValue).build();
+ assertThat(selector, hasCriterionWithType(Type.UDP_SRC));
+
+ selector = DefaultTrafficSelector.builder()
+ .matchUdpDst(shortValue).build();
+ assertThat(selector, hasCriterionWithType(Type.UDP_DST));
+
+ selector = DefaultTrafficSelector.builder()
+ .matchSctpSrc(shortValue).build();
+ assertThat(selector, hasCriterionWithType(Type.SCTP_SRC));
+
+ selector = DefaultTrafficSelector.builder()
+ .matchSctpDst(shortValue).build();
+ assertThat(selector, hasCriterionWithType(Type.SCTP_DST));
+
+ selector = DefaultTrafficSelector.builder()
+ .matchIcmpType(byteValue).build();
+ assertThat(selector, hasCriterionWithType(Type.ICMPV4_TYPE));
+
+ selector = DefaultTrafficSelector.builder()
+ .matchIcmpCode(byteValue).build();
+ assertThat(selector, hasCriterionWithType(Type.ICMPV4_CODE));
+
+ selector = DefaultTrafficSelector.builder()
.matchIPv6Src(ipv6PrefixValue).build();
assertThat(selector, hasCriterionWithType(Type.IPV6_SRC));
@@ -184,6 +212,26 @@
assertThat(selector, hasCriterionWithType(Type.IPV6_DST));
selector = DefaultTrafficSelector.builder()
+ .matchIPv6FlowLabel(intValue).build();
+ assertThat(selector, hasCriterionWithType(Type.IPV6_FLABEL));
+
+ selector = DefaultTrafficSelector.builder()
+ .matchIcmpv6Type(byteValue).build();
+ assertThat(selector, hasCriterionWithType(Type.ICMPV6_TYPE));
+
+ selector = DefaultTrafficSelector.builder()
+ .matchIPv6NDTargetAddress(ipv6AddressValue).build();
+ assertThat(selector, hasCriterionWithType(Type.IPV6_ND_TARGET));
+
+ selector = DefaultTrafficSelector.builder()
+ .matchIPv6NDSourceLinkLayerAddress(macValue).build();
+ assertThat(selector, hasCriterionWithType(Type.IPV6_ND_SLL));
+
+ selector = DefaultTrafficSelector.builder()
+ .matchIPv6NDTargetLinkLayerAddress(macValue).build();
+ assertThat(selector, hasCriterionWithType(Type.IPV6_ND_TLL));
+
+ selector = DefaultTrafficSelector.builder()
.matchMplsLabel(3).build();
assertThat(selector, hasCriterionWithType(Type.MPLS_LABEL));
@@ -194,12 +242,21 @@
selector = DefaultTrafficSelector.builder()
.matchOpticalSignalType(shortValue).build();
assertThat(selector, hasCriterionWithType(Type.OCH_SIGTYPE));
+ }
+
+ /**
+ * Tests the traffic selector builder.
+ */
+ @Test
+ public void testTrafficSelectorBuilder() {
+ TrafficSelector selector;
+ final short shortValue = 33;
final TrafficSelector baseSelector = DefaultTrafficSelector.builder()
- .matchOpticalSignalType(shortValue).build();
+ .matchLambda(shortValue).build();
selector = DefaultTrafficSelector.builder(baseSelector)
.build();
- assertThat(selector, hasCriterionWithType(Type.OCH_SIGTYPE));
+ assertThat(selector, hasCriterionWithType(Type.OCH_SIGID));
final Criterion criterion = Criteria.matchLambda(shortValue);
selector = DefaultTrafficSelector.builder()