Support IPv4 multicast in P4 fabric pipeline

- Multicast can use the same table as unicast. Merge into one.
- Allow masked destination MAC in classifier table

Note:
- Pipeliner now translates all exact MAC match to masked match with FF:FF:FF:FF:FF:FF mask.
- Interpreter now only uses masked src/dst MAC

Change-Id: Ibd27ebfb2d72ba929031f07a29927eb6f1844f11
(cherry picked from commit 0865779b66a59a623856b1353615e462af5575c5)
diff --git a/pipelines/fabric/src/main/resources/p4c-out/fabric-full/bmv2/default/p4info.txt b/pipelines/fabric/src/main/resources/p4c-out/fabric-full/bmv2/default/p4info.txt
index c3f101c..a5dd8cf 100644
--- a/pipelines/fabric/src/main/resources/p4c-out/fabric-full/bmv2/default/p4info.txt
+++ b/pipelines/fabric/src/main/resources/p4c-out/fabric-full/bmv2/default/p4info.txt
@@ -142,7 +142,7 @@
     id: 2
     name: "hdr.ethernet.dst_addr"
     bitwidth: 48
-    match_type: EXACT
+    match_type: TERNARY
   }
   match_fields {
     id: 3
@@ -212,9 +212,9 @@
 }
 tables {
   preamble {
-    id: 33586372
-    name: "FabricIngress.forwarding.unicast_v4"
-    alias: "unicast_v4"
+    id: 33562650
+    name: "FabricIngress.forwarding.routing_v4"
+    alias: "routing_v4"
   }
   match_fields {
     id: 1
@@ -223,13 +223,13 @@
     match_type: LPM
   }
   action_refs {
-    id: 16828976
+    id: 16777434
   }
   action_refs {
     id: 16800567
     annotations: "@defaultonly()"
   }
-  direct_resource_ids: 318768492
+  direct_resource_ids: 318811107
   size: 1024
   idle_timeout_behavior: NO_TIMEOUT
 }
@@ -333,38 +333,9 @@
 }
 tables {
   preamble {
-    id: 33578363
-    name: "FabricIngress.forwarding.multicast_v4"
-    alias: "multicast_v4"
-  }
-  match_fields {
-    id: 1
-    name: "hdr.vlan_tag.vlan_id"
-    bitwidth: 12
-    match_type: EXACT
-  }
-  match_fields {
-    id: 2
-    name: "hdr.ipv4.dst_addr"
-    bitwidth: 32
-    match_type: LPM
-  }
-  action_refs {
-    id: 16809157
-  }
-  action_refs {
-    id: 16800567
-    annotations: "@defaultonly()"
-  }
-  direct_resource_ids: 318797896
-  size: 1024
-  idle_timeout_behavior: NO_TIMEOUT
-}
-tables {
-  preamble {
-    id: 33568751
-    name: "FabricIngress.forwarding.unicast_v6"
-    alias: "unicast_v6"
+    id: 33614081
+    name: "FabricIngress.forwarding.routing_v6"
+    alias: "routing_v6"
   }
   match_fields {
     id: 1
@@ -373,42 +344,13 @@
     match_type: LPM
   }
   action_refs {
-    id: 16823773
+    id: 16809751
   }
   action_refs {
     id: 16800567
     annotations: "@defaultonly()"
   }
-  direct_resource_ids: 318820865
-  size: 1024
-  idle_timeout_behavior: NO_TIMEOUT
-}
-tables {
-  preamble {
-    id: 33581295
-    name: "FabricIngress.forwarding.multicast_v6"
-    alias: "multicast_v6"
-  }
-  match_fields {
-    id: 1
-    name: "hdr.vlan_tag.vlan_id"
-    bitwidth: 12
-    match_type: EXACT
-  }
-  match_fields {
-    id: 2
-    name: "hdr.ipv6.dst_addr"
-    bitwidth: 128
-    match_type: LPM
-  }
-  action_refs {
-    id: 16819612
-  }
-  action_refs {
-    id: 16800567
-    annotations: "@defaultonly()"
-  }
-  direct_resource_ids: 318815310
+  direct_resource_ids: 318799210
   size: 1024
   idle_timeout_behavior: NO_TIMEOUT
 }
@@ -905,9 +847,9 @@
 }
 actions {
   preamble {
-    id: 16828976
-    name: "FabricIngress.forwarding.set_next_id_unicast_v4"
-    alias: "set_next_id_unicast_v4"
+    id: 16777434
+    name: "FabricIngress.forwarding.set_next_id_routing_v4"
+    alias: "set_next_id_routing_v4"
   }
   params {
     id: 1
@@ -957,33 +899,9 @@
 }
 actions {
   preamble {
-    id: 16809157
-    name: "FabricIngress.forwarding.set_next_id_multicast_v4"
-    alias: "set_next_id_multicast_v4"
-  }
-  params {
-    id: 1
-    name: "next_id"
-    bitwidth: 32
-  }
-}
-actions {
-  preamble {
-    id: 16823773
-    name: "FabricIngress.forwarding.set_next_id_unicast_v6"
-    alias: "set_next_id_unicast_v6"
-  }
-  params {
-    id: 1
-    name: "next_id"
-    bitwidth: 32
-  }
-}
-actions {
-  preamble {
-    id: 16819612
-    name: "FabricIngress.forwarding.set_next_id_multicast_v6"
-    alias: "set_next_id_multicast_v6"
+    id: 16809751
+    name: "FabricIngress.forwarding.set_next_id_routing_v6"
+    alias: "set_next_id_routing_v6"
   }
   params {
     id: 1
@@ -1692,14 +1610,14 @@
 }
 direct_counters {
   preamble {
-    id: 318768492
-    name: "FabricIngress.forwarding.unicast_v4_counter"
-    alias: "unicast_v4_counter"
+    id: 318811107
+    name: "FabricIngress.forwarding.routing_v4_counter"
+    alias: "routing_v4_counter"
   }
   spec {
     unit: BOTH
   }
-  direct_table_id: 33586372
+  direct_table_id: 33562650
 }
 direct_counters {
   preamble {
@@ -1714,36 +1632,14 @@
 }
 direct_counters {
   preamble {
-    id: 318797896
-    name: "FabricIngress.forwarding.multicast_v4_counter"
-    alias: "multicast_v4_counter"
+    id: 318799210
+    name: "FabricIngress.forwarding.routing_v6_counter"
+    alias: "routing_v6_counter"
   }
   spec {
     unit: BOTH
   }
-  direct_table_id: 33578363
-}
-direct_counters {
-  preamble {
-    id: 318820865
-    name: "FabricIngress.forwarding.unicast_v6_counter"
-    alias: "unicast_v6_counter"
-  }
-  spec {
-    unit: BOTH
-  }
-  direct_table_id: 33568751
-}
-direct_counters {
-  preamble {
-    id: 318815310
-    name: "FabricIngress.forwarding.multicast_v6_counter"
-    alias: "multicast_v6_counter"
-  }
-  spec {
-    unit: BOTH
-  }
-  direct_table_id: 33581295
+  direct_table_id: 33614081
 }
 direct_counters {
   preamble {