Support compiling fabric.p4 with arbitrary table sizes
By using preprocessor macros. Also, change expected location of tofino
compiler outputs when building the pipeconf.
Change-Id: I98ea95b61d57e725c88e52a3bfd95618f3c407cb
diff --git a/pipelines/fabric/src/main/resources/include/control/acl.p4 b/pipelines/fabric/src/main/resources/include/control/acl.p4
index 9eece9a..5b8718b 100644
--- a/pipelines/fabric/src/main/resources/include/control/acl.p4
+++ b/pipelines/fabric/src/main/resources/include/control/acl.p4
@@ -82,7 +82,7 @@
}
const default_action = nop_acl();
- size = 128;
+ size = ACL_TABLE_SIZE;
counters = acl_counter;
}
diff --git a/pipelines/fabric/src/main/resources/include/control/filtering.p4 b/pipelines/fabric/src/main/resources/include/control/filtering.p4
index 638d9a1..cc8e313 100644
--- a/pipelines/fabric/src/main/resources/include/control/filtering.p4
+++ b/pipelines/fabric/src/main/resources/include/control/filtering.p4
@@ -61,6 +61,7 @@
}
const default_action = deny();
counters = ingress_port_vlan_counter;
+ size = PORT_VLAN_TABLE_SIZE;
}
/*
@@ -94,6 +95,7 @@
}
const default_action = set_forwarding_type(FWD_BRIDGING);
counters = fwd_classifier_counter;
+ size = FWD_CLASSIFIER_TABLE_SIZE;
}
apply {
diff --git a/pipelines/fabric/src/main/resources/include/control/forwarding.p4 b/pipelines/fabric/src/main/resources/include/control/forwarding.p4
index e5f89cb..89544ea 100644
--- a/pipelines/fabric/src/main/resources/include/control/forwarding.p4
+++ b/pipelines/fabric/src/main/resources/include/control/forwarding.p4
@@ -40,6 +40,9 @@
bridging_counter.count();
}
+ // FIXME: using ternary for eth_dst prevents our ability to scale in
+ // bridging heavy environments. Do we really need ternary? Can we come up
+ // with a multi-table/algorithmic approach?
table bridging {
key = {
fabric_metadata.vlan_id: exact @name("vlan_id");
@@ -51,6 +54,7 @@
}
const default_action = nop();
counters = bridging_counter;
+ size = BRIDGING_TABLE_SIZE;
}
/*
@@ -74,6 +78,7 @@
}
const default_action = nop();
counters = mpls_counter;
+ size = MPLS_TABLE_SIZE;
}
/*
@@ -90,6 +95,9 @@
routing_v4_counter.count();
}
+ #ifdef _ROUTING_V4_TABLE_ANNOT
+ _ROUTING_V4_TABLE_ANNOT
+ #endif
table routing_v4 {
key = {
hdr.ipv4.dst_addr: lpm @name("ipv4_dst");
@@ -101,6 +109,7 @@
}
const default_action = nop();
counters = routing_v4_counter;
+ size = ROUTING_V4_TABLE_SIZE;
}
#ifdef WITH_IPV6
@@ -124,6 +133,7 @@
}
const default_action = nop();
counters = routing_v6_counter;
+ size = ROUTING_V6_TABLE_SIZE;
}
#endif // WITH_IPV6
diff --git a/pipelines/fabric/src/main/resources/include/control/next.p4 b/pipelines/fabric/src/main/resources/include/control/next.p4
index 98b3812..88e870c 100644
--- a/pipelines/fabric/src/main/resources/include/control/next.p4
+++ b/pipelines/fabric/src/main/resources/include/control/next.p4
@@ -81,6 +81,7 @@
}
const default_action = nop();
counters = next_vlan_counter;
+ size = NEXT_VLAN_TABLE_SIZE;
}
#ifdef WITH_XCONNECT
@@ -112,6 +113,7 @@
}
counters = xconnect_counter;
const default_action = nop();
+ size = XCONNECT_NEXT_TABLE_SIZE;
}
#endif // WITH_XCONNECT
@@ -150,6 +152,7 @@
}
const default_action = nop();
counters = simple_counter;
+ size = SIMPLE_NEXT_TABLE_SIZE;
}
#endif // WITH_SIMPLE_NEXT
@@ -158,7 +161,8 @@
* Hashed table.
* Execute an action profile selector based on next id.
*/
- action_selector(HashAlgorithm.crc16, 32w64, 32w16) hashed_selector;
+ @max_group_size(HASHED_SELECTOR_MAX_GROUP_SIZE)
+ action_selector(HashAlgorithm.crc16, HASHED_ACT_PROFILE_SIZE, 32w16) hashed_selector;
direct_counter(CounterType.packets_and_bytes) hashed_counter;
action output_hashed(port_num_t port_num) {
@@ -195,6 +199,7 @@
implementation = hashed_selector;
counters = hashed_counter;
const default_action = nop();
+ size = HASHED_NEXT_TABLE_SIZE;
}
#endif // WITH_HASHED_NEXT
@@ -220,6 +225,7 @@
}
counters = multicast_counter;
const default_action = nop();
+ size = MULTICAST_NEXT_TABLE_SIZE;
}
apply {
@@ -293,6 +299,7 @@
}
const default_action = nop();
counters = egress_vlan_counter;
+ size = EGRESS_VLAN_TABLE_SIZE;
}
apply {