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()));