ONOS-6769 Support for PacketMetadata in demo P4 programs

Change-Id: I9b3de719f9eb1c87d1df16a5ad0d08a83cebc8f6
diff --git a/tools/test/p4src/p4-16/ecmp.p4 b/tools/test/p4src/p4-16/ecmp.p4
index 6b3e73e..3c06c20 100644
--- a/tools/test/p4src/p4-16/ecmp.p4
+++ b/tools/test/p4src/p4-16/ecmp.p4
@@ -6,15 +6,20 @@
 #include "include/port_counters.p4"
 #include "include/checksums.p4"
 #include "include/actions.p4"
+#include "include/packet_io.p4"
 
 
-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) ecmp_group_table_counter;
     direct_counter(CounterType.packets) table0_counter;
 
-    action ecmp_group(GroupId groupId, GroupSize groupSize) {
-        meta.ecmp_metadata.groupId = groupId;
-        hash(meta.ecmp_metadata.selector, HashAlgorithm.crc16, (bit<64>)0, { hdr.ipv4.srcAddr, hdr.ipv4.dstAddr, hdr.ipv4.protocol, hdr.tcp.srcPort, hdr.tcp.dstPort, hdr.udp.srcPort, hdr.udp.dstPort }, (bit<128>)groupSize);
+    action ecmp_group(group_id_t group_id, group_size_t groupSize) {
+        meta.ecmp_metadata.group_id = group_id;
+        hash(meta.ecmp_metadata.selector, HashAlgorithm.crc16, (bit<64>)0,
+        { hdr.ipv4.srcAddr, hdr.ipv4.dstAddr, hdr.ipv4.protocol, hdr.tcp.srcPort, hdr.tcp.dstPort, hdr.udp.srcPort,
+            hdr.udp.dstPort },
+        (bit<128>)groupSize);
     }
 
     table ecmp_group_table {
@@ -22,7 +27,7 @@
             set_egress_port(standard_metadata);
         }
         key = {
-            meta.ecmp_metadata.groupId : exact;
+            meta.ecmp_metadata.group_id : exact;
             meta.ecmp_metadata.selector: exact;
         }
         counters = ecmp_group_table_counter;
@@ -44,21 +49,28 @@
         }
         counters = table0_counter;
     }
+
     PortCountersControl() port_counters_control;
+    PacketIoIngressControl() packet_io_ingress_control;
+
     apply {
-        switch (table0.apply().action_run) {
-            ecmp_group: {
-                ecmp_group_table.apply();
+        packet_io_ingress_control.apply(hdr, standard_metadata);
+        if (!hdr.packet_out.isValid()) {
+            switch (table0.apply().action_run) {
+                ecmp_group: {
+                    ecmp_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);
     }
 }