Implement some of the missing Selector and Match Conditions
Work toward ONOS-509
The following match conditions are added/implemented:
- IPV6_EXTHDR
Also, fixed the match criteria for the optical signal type
to represent unsigned 8 bits integer (per spec).
Change-Id: I925db19cb43c5d9f589c1f090b6a75faabe0a19b
diff --git a/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowEntryBuilder.java b/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowEntryBuilder.java
index 95e37d0..04ff897 100644
--- a/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowEntryBuilder.java
+++ b/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowEntryBuilder.java
@@ -410,7 +410,6 @@
case IPV4_SRC:
if (match.isPartiallyMasked(MatchField.IPV4_SRC)) {
Masked<IPv4Address> maskedIp = match.getMasked(MatchField.IPV4_SRC);
-
ip4Prefix = Ip4Prefix.valueOf(
maskedIp.getValue().getInt(),
maskedIp.getMask().asCidrMaskLength());
@@ -419,13 +418,11 @@
match.get(MatchField.IPV4_SRC).getInt(),
Ip4Prefix.MAX_MASK_LENGTH);
}
-
builder.matchIPSrc(ip4Prefix);
break;
case IPV4_DST:
if (match.isPartiallyMasked(MatchField.IPV4_DST)) {
Masked<IPv4Address> maskedIp = match.getMasked(MatchField.IPV4_DST);
-
ip4Prefix = Ip4Prefix.valueOf(
maskedIp.getValue().getInt(),
maskedIp.getMask().asCidrMaskLength());
@@ -434,7 +431,6 @@
match.get(MatchField.IPV4_DST).getInt(),
Ip4Prefix.MAX_MASK_LENGTH);
}
-
builder.matchIPDst(ip4Prefix);
break;
case TCP_SRC:
@@ -519,6 +515,10 @@
builder.matchMplsLabel((int) match.get(MatchField.MPLS_LABEL)
.getValue());
break;
+ case IPV6_EXTHDR:
+ builder.matchIPv6ExthdrFlags((int) match.get(MatchField.IPV6_EXTHDR)
+ .getValue());
+ break;
case OCH_SIGID:
builder.matchLambda(match.get(MatchField.OCH_SIGID).getChannelNumber());
break;
@@ -539,5 +539,4 @@
}
return builder.build();
}
-
}
diff --git a/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilder.java b/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilder.java
index 15aa511..b21ea0b 100644
--- a/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilder.java
+++ b/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilder.java
@@ -67,6 +67,7 @@
import org.projectfloodlight.openflow.types.OFPort;
import org.projectfloodlight.openflow.types.OFVlanVidMatch;
import org.projectfloodlight.openflow.types.TransportPort;
+import org.projectfloodlight.openflow.types.U16;
import org.projectfloodlight.openflow.types.U32;
import org.projectfloodlight.openflow.types.U8;
import org.projectfloodlight.openflow.types.VlanPcp;
@@ -363,6 +364,12 @@
Criteria.MplsCriterion mp = (Criteria.MplsCriterion) c;
mBuilder.setExact(MatchField.MPLS_LABEL, U32.of(mp.label()));
break;
+ case IPV6_EXTHDR:
+ Criteria.IPv6ExthdrFlagsCriterion exthdrFlagsCriterion =
+ (Criteria.IPv6ExthdrFlagsCriterion) c;
+ mBuilder.setExact(MatchField.IPV6_EXTHDR,
+ U16.of(exthdrFlagsCriterion.exthdrFlags()));
+ break;
case OCH_SIGID:
LambdaCriterion lc = (LambdaCriterion) c;
mBuilder.setExact(MatchField.OCH_SIGID,
@@ -373,14 +380,13 @@
Criteria.OpticalSignalTypeCriterion sc =
(Criteria.OpticalSignalTypeCriterion) c;
mBuilder.setExact(MatchField.OCH_SIGTYPE,
- U8.of((short) sc.signalType()));
+ U8.of(sc.signalType()));
break;
case ARP_OP:
case ARP_SHA:
case ARP_SPA:
case ARP_THA:
case ARP_TPA:
- case IPV6_EXTHDR:
case MPLS_BOS:
case MPLS_TC:
case PBB_ISID: