Fix bugs from fabric.p4
- Incorrect selector for hashed table
- Incorrect counter type for port counter
Change-Id: I04af95bfbb17b9ca407313b3b3bfdfa9efbf1fa4
diff --git a/pipelines/fabric/src/main/resources/include/control/next.p4 b/pipelines/fabric/src/main/resources/include/control/next.p4
index e0ebbe8..c76fc65 100644
--- a/pipelines/fabric/src/main/resources/include/control/next.p4
+++ b/pipelines/fabric/src/main/resources/include/control/next.p4
@@ -103,8 +103,8 @@
table hashed {
key = {
fabric_metadata.next_id: exact;
- hdr.ethernet.dst_addr: selector;
- hdr.ethernet.src_addr: selector;
+ hdr.ipv4.dst_addr: selector;
+ hdr.ipv4.src_addr: selector;
fabric_metadata.ip_proto: selector;
fabric_metadata.l4_src_port: selector;
fabric_metadata.l4_dst_port: selector;
diff --git a/pipelines/fabric/src/main/resources/include/control/port_counter.p4 b/pipelines/fabric/src/main/resources/include/control/port_counter.p4
index 80ec64f..3e9ea00 100644
--- a/pipelines/fabric/src/main/resources/include/control/port_counter.p4
+++ b/pipelines/fabric/src/main/resources/include/control/port_counter.p4
@@ -20,8 +20,8 @@
#include "../header.p4"
control PortCountersControl(inout parsed_headers_t hdr, inout fabric_metadata_t fabric_metadata, inout standard_metadata_t standard_metadata) {
- counter(MAX_PORTS, CounterType.packets) egress_port_counter;
- counter(MAX_PORTS, CounterType.packets) ingress_port_counter;
+ counter(MAX_PORTS, CounterType.packets_and_bytes) egress_port_counter;
+ counter(MAX_PORTS, CounterType.packets_and_bytes) ingress_port_counter;
apply {
if (standard_metadata.egress_spec < MAX_PORTS) {
diff --git a/pipelines/fabric/src/main/resources/include/define.p4 b/pipelines/fabric/src/main/resources/include/define.p4
index 163c2ab..eb61f91 100644
--- a/pipelines/fabric/src/main/resources/include/define.p4
+++ b/pipelines/fabric/src/main/resources/include/define.p4
@@ -36,8 +36,15 @@
const bit<16> ETHERTYPE_IPV6 = 0x86dd;
const bit<16> ETHERTYPE_ARP = 0x0806;
-const bit<4> IP_VERSION_4 = 4;
-const bit<4> IP_VERSION_6 = 6;
+#ifndef IP_VER_LENGTH
+#define IP_VER_LENGTH 4
+#endif
+#ifndef IP_VERSION_4
+#define IP_VERSION_4 4
+#endif
+#ifndef IP_VERSION_6
+#define IP_VERSION_6 6
+#endif
const bit<8> PROTO_ICMP = 1;
const bit<8> PROTO_TCP = 6;
diff --git a/pipelines/fabric/src/main/resources/include/parser.p4 b/pipelines/fabric/src/main/resources/include/parser.p4
index f4b3252..8b03da1 100644
--- a/pipelines/fabric/src/main/resources/include/parser.p4
+++ b/pipelines/fabric/src/main/resources/include/parser.p4
@@ -70,7 +70,7 @@
// There is only one MPLS label for this fabric.
// Assume header after MPLS header is IP/IPv6
// Lookup first 4 bits for version
- transition select(packet.lookahead<bit<4>>()) {
+ transition select(packet.lookahead<bit<IP_VER_LENGTH>>()) {
//The packet should be either IPv4 or IPv6.
IP_VERSION_4: parse_ipv4;
#ifdef WITH_IPV6
@@ -162,7 +162,7 @@
}
control FabricDeparser(packet_out packet, in parsed_headers_t hdr) {
- apply{
+ apply {
packet.emit(hdr.packet_in);
packet.emit(hdr.ethernet);
packet.emit(hdr.vlan_tag);