Adding eth masking in match
Change-Id: I95e0ee66b1c6c139de7672f9bc04871fd0ead6d7
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 1fa4717..8ead323 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
@@ -615,12 +615,26 @@
builder.matchMetadata(metadata);
break;
case ETH_DST:
- mac = MacAddress.valueOf(match.get(MatchField.ETH_DST).getLong());
- builder.matchEthDst(mac);
+ if (match.isPartiallyMasked(MatchField.ETH_DST)) {
+ Masked<org.projectfloodlight.openflow.types.MacAddress> maskedMac =
+ match.getMasked(MatchField.ETH_DST);
+ builder.matchEthDstMasked(MacAddress.valueOf(maskedMac.getValue().getLong()),
+ MacAddress.valueOf(maskedMac.getMask().getLong()));
+ } else {
+ mac = MacAddress.valueOf(match.get(MatchField.ETH_DST).getLong());
+ builder.matchEthDst(mac);
+ }
break;
case ETH_SRC:
- mac = MacAddress.valueOf(match.get(MatchField.ETH_SRC).getLong());
- builder.matchEthSrc(mac);
+ if (match.isPartiallyMasked(MatchField.ETH_SRC)) {
+ Masked<org.projectfloodlight.openflow.types.MacAddress> maskedMac =
+ match.getMasked(MatchField.ETH_SRC);
+ builder.matchEthSrcMasked(MacAddress.valueOf(maskedMac.getValue().getLong()),
+ MacAddress.valueOf(maskedMac.getMask().getLong()));
+ } else {
+ mac = MacAddress.valueOf(match.get(MatchField.ETH_SRC).getLong());
+ builder.matchEthSrc(mac);
+ }
break;
case ETH_TYPE:
int ethType = match.get(MatchField.ETH_TYPE).getValue();
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 792e369..4cdbb83 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
@@ -219,11 +219,23 @@
mBuilder.setExact(MatchField.ETH_DST,
MacAddress.of(ethCriterion.mac().toLong()));
break;
+ case ETH_DST_MASKED:
+ ethCriterion = (EthCriterion) c;
+ mBuilder.setMasked(MatchField.ETH_DST,
+ MacAddress.of(ethCriterion.mac().toLong()),
+ MacAddress.of(ethCriterion.mask().toLong()));
+ break;
case ETH_SRC:
ethCriterion = (EthCriterion) c;
mBuilder.setExact(MatchField.ETH_SRC,
MacAddress.of(ethCriterion.mac().toLong()));
break;
+ case ETH_SRC_MASKED:
+ ethCriterion = (EthCriterion) c;
+ mBuilder.setMasked(MatchField.ETH_SRC,
+ MacAddress.of(ethCriterion.mac().toLong()),
+ MacAddress.of(ethCriterion.mask().toLong()));
+ break;
case ETH_TYPE:
EthTypeCriterion ethType = (EthTypeCriterion) c;
mBuilder.setExact(MatchField.ETH_TYPE, EthType.of(ethType.ethType().toShort()));