ONOS-6769 Support for PacketMetadata in demo P4 programs

Change-Id: I9b3de719f9eb1c87d1df16a5ad0d08a83cebc8f6
diff --git a/tools/test/p4src/p4-16/wcmp.p4 b/tools/test/p4src/p4-16/wcmp.p4
index 6dff6f1..3b7f6eb 100644
--- a/tools/test/p4src/p4-16/wcmp.p4
+++ b/tools/test/p4src/p4-16/wcmp.p4
@@ -6,17 +6,22 @@
 #include "include/port_counters.p4"
 #include "include/checksums.p4"
 #include "include/actions.p4"
+#include "include/packet_io.p4"
 
 #define SELECTOR_WIDTH 64
 const bit<SELECTOR_WIDTH> ONE = 64w1;
 
-control ingress(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) {
+control ingress(inout headers_t hdr, inout metadata_t meta, inout standard_metadata_t standard_metadata) {
+
     direct_counter(CounterType.packets) table0_counter;
     direct_counter(CounterType.packets) wcmp_group_table_counter;
 
-    action wcmp_group(GroupId groupId) {
-        meta.wcmp_meta.groupId = groupId;
-        hash(meta.wcmp_meta.numBits, HashAlgorithm.crc16, (bit<64>)2, { hdr.ipv4.srcAddr, hdr.ipv4.dstAddr, hdr.ipv4.protocol, hdr.tcp.srcPort, hdr.tcp.dstPort, hdr.udp.srcPort, hdr.udp.dstPort }, (bit<128>)62);
+    action wcmp_group(group_id_t group_id) {
+        meta.wcmp_meta.group_id = group_id;
+        hash(meta.wcmp_meta.numBits, HashAlgorithm.crc16, (bit<64>)2,
+        { hdr.ipv4.srcAddr, hdr.ipv4.dstAddr, hdr.ipv4.protocol, hdr.tcp.srcPort, hdr.tcp.dstPort, hdr.udp.srcPort,
+            hdr.udp.dstPort },
+        (bit<128>)62);
     }
 
     action wcmp_set_selector() {
@@ -45,27 +50,34 @@
             set_egress_port(standard_metadata);
         }
         key = {
-            meta.wcmp_meta.groupId : exact;
+            meta.wcmp_meta.group_id : exact;
             meta.wcmp_meta.selector: lpm;
         }
         counters = wcmp_group_table_counter;
     }
 
     PortCountersControl() port_counters_control;
+    PacketIoIngressControl() packet_io_ingress_control;
+
     apply {
-        switch (table0.apply().action_run) {
-            wcmp_group: {
-                wcmp_set_selector();
-                wcmp_group_table.apply();
+        packet_io_ingress_control.apply(hdr, standard_metadata);
+        if (!hdr.packet_out.isValid()) {
+            switch (table0.apply().action_run) {
+                wcmp_group: {
+                    wcmp_set_selector();
+                    wcmp_group_table.apply();
+                }
             }
         }
         port_counters_control.apply(hdr, meta, standard_metadata);
     }
 }
 
-control egress(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) {
+control egress(inout headers_t hdr, inout metadata_t meta, inout standard_metadata_t standard_metadata) {
+
+    PacketIoEgressControl() packet_io_egress_control;
     apply {
-        // Nothing to do
+        packet_io_egress_control.apply(hdr, standard_metadata);
     }
 }