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