[ONOS-3373] Add arp_tha operation to provider of openflow
Change-Id: I04449a15d8e34fea4faba3729b9b6998ec9b0a5c
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 c591f47..f4ab017 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
@@ -707,10 +707,13 @@
                 long tunnelId = match.get(MatchField.TUNNEL_ID).getValue();
                 builder.matchTunnelId(tunnelId);
                 break;
+            case ARP_THA:
+                mac = MacAddress.valueOf(match.get(MatchField.ARP_THA).getLong());
+                builder.matchArpTha(mac);
+                break;
             case ARP_OP:
             case ARP_SHA:
             case ARP_SPA:
-            case ARP_THA:
             case ARP_TPA:
             case MPLS_TC:
             default:
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 010d7e7..2e5be65 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
@@ -24,6 +24,7 @@
 import org.onosproject.net.driver.DriverService;
 import org.onosproject.net.flow.FlowRule;
 import org.onosproject.net.flow.TrafficSelector;
+import org.onosproject.net.flow.criteria.ArpHaCriterion;
 import org.onosproject.net.flow.criteria.Criterion;
 import org.onosproject.net.flow.criteria.EthCriterion;
 import org.onosproject.net.flow.criteria.EthTypeCriterion;
@@ -178,6 +179,7 @@
         UdpPortCriterion udpPortCriterion;
         SctpPortCriterion sctpPortCriterion;
         IPv6NDLinkLayerAddressCriterion llAddressCriterion;
+        ArpHaCriterion arpHaCriterion;
 
         for (Criterion c : selector.criteria()) {
             switch (c.type()) {
@@ -415,10 +417,14 @@
                                   mplsBos.mplsBos() ? OFBooleanValue.TRUE
                                                     : OFBooleanValue.FALSE);
                 break;
+            case ARP_THA:
+                arpHaCriterion = (ArpHaCriterion) c;
+                mBuilder.setExact(MatchField.ARP_THA,
+                                  MacAddress.of(arpHaCriterion.mac().toLong()));
+                break;
             case ARP_OP:
             case ARP_SHA:
             case ARP_SPA:
-            case ARP_THA:
             case ARP_TPA:
             case MPLS_TC:
             case PBB_ISID: