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