Bumped supported commit of P4Runtime and BMv2
Includes fixes for:
- ONOS-7593: Support for indirect resource Index type
- ONOS-7595: Removed ID from direct resources
- P4Runtime requires unset bits to be 0 in ternary field matches
- Incorrect parsing of flow rule byte counters
- Full entity names in P4Info with top-level control block (fixed only
for basic.p4, other programs need to be re-compiled and PI IDs in
respective pipeconf changed)
Change-Id: Ia19aa949c02e363a550e692915c6d6516a2d13d7
diff --git a/pipelines/basic/src/main/java/org/onosproject/pipelines/basic/BasicConstants.java b/pipelines/basic/src/main/java/org/onosproject/pipelines/basic/BasicConstants.java
index b6ee3c2..0ef19bf 100644
--- a/pipelines/basic/src/main/java/org/onosproject/pipelines/basic/BasicConstants.java
+++ b/pipelines/basic/src/main/java/org/onosproject/pipelines/basic/BasicConstants.java
@@ -31,48 +31,75 @@
// TODO: constants could be auto-generated starting from the P4info.
- private static final String TABLE0_CONTROL = "table0_control";
- private static final String WCMP_CONTROL = "wcmp_control";
-
- // Header field IDs
- public static final String DOT = ".";
+ public static final String DOT = ".";
+ private static final String INGRESS = "ingress";
+ private static final String EGRESS = "egress";
+ private static final String TABLE0_CTRL = INGRESS + DOT + "table0_control";
+ private static final String WCMP_CTRL = INGRESS + DOT + "wcmp_control";
+ private static final String PORT_COUNT_INGRESS_CTRL = INGRESS + DOT + "port_counters_ingress";
+ private static final String PORT_COUNT_EGRESS_CTRL = EGRESS + DOT + "port_counters_egress";
public static final String HDR = "hdr";
public static final String ETHERNET = "ethernet";
public static final String IPV4 = "ipv4";
public static final String LOCAL_METADATA = "local_metadata";
public static final String STANDARD_METADATA = "standard_metadata";
- public static final PiMatchFieldId HDR_IN_PORT_ID = PiMatchFieldId.of(STANDARD_METADATA + DOT + "ingress_port");
- public static final PiMatchFieldId HDR_ETH_DST_ID = PiMatchFieldId.of(HDR + DOT + ETHERNET + DOT + "dst_addr");
- public static final PiMatchFieldId HDR_ETH_SRC_ID = PiMatchFieldId.of(HDR + DOT + ETHERNET + DOT + "src_addr");
- public static final PiMatchFieldId HDR_ETH_TYPE_ID = PiMatchFieldId.of(HDR + DOT + ETHERNET + DOT + "ether_type");
- public static final PiMatchFieldId HDR_IPV4_DST_ID = PiMatchFieldId.of(HDR + DOT + IPV4 + DOT + "dst_addr");
- public static final PiMatchFieldId HDR_IPV4_SRC_ID = PiMatchFieldId.of(HDR + DOT + IPV4 + DOT + "src_addr");
- public static final PiMatchFieldId HDR_NEXT_HOP_ID = PiMatchFieldId.of(LOCAL_METADATA + DOT + "next_hop_id");
- public static final PiMatchFieldId HDR_SELECTOR_ID = PiMatchFieldId.of(LOCAL_METADATA + DOT + "selector");
+
+ // Header field IDs
+
+ public static final PiMatchFieldId HDR_IN_PORT_ID =
+ PiMatchFieldId.of(STANDARD_METADATA + DOT + "ingress_port");
+ public static final PiMatchFieldId HDR_ETH_DST_ID =
+ PiMatchFieldId.of(HDR + DOT + ETHERNET + DOT + "dst_addr");
+ public static final PiMatchFieldId HDR_ETH_SRC_ID =
+ PiMatchFieldId.of(HDR + DOT + ETHERNET + DOT + "src_addr");
+ public static final PiMatchFieldId HDR_ETH_TYPE_ID =
+ PiMatchFieldId.of(HDR + DOT + ETHERNET + DOT + "ether_type");
+ public static final PiMatchFieldId HDR_IPV4_DST_ID =
+ PiMatchFieldId.of(HDR + DOT + IPV4 + DOT + "dst_addr");
+ public static final PiMatchFieldId HDR_IPV4_SRC_ID =
+ PiMatchFieldId.of(HDR + DOT + IPV4 + DOT + "src_addr");
+ public static final PiMatchFieldId HDR_NEXT_HOP_ID =
+ PiMatchFieldId.of(LOCAL_METADATA + DOT + "next_hop_id");
+ public static final PiMatchFieldId HDR_SELECTOR_ID =
+ PiMatchFieldId.of(LOCAL_METADATA + DOT + "selector");
// Table IDs
- public static final PiTableId TBL_TABLE0_ID = PiTableId.of(TABLE0_CONTROL + DOT + "table0");
- public static final PiTableId TBL_WCMP_TABLE_ID = PiTableId.of(WCMP_CONTROL + DOT + "wcmp_table");
+ public static final PiTableId TBL_TABLE0_ID =
+ PiTableId.of(TABLE0_CTRL + DOT + "table0");
+ public static final PiTableId TBL_WCMP_TABLE_ID =
+ PiTableId.of(WCMP_CTRL + DOT + "wcmp_table");
// Counter IDs
public static final PiCounterId CNT_EGRESS_PORT_COUNTER_ID =
- PiCounterId.of("port_counters_egress.egress_port_counter");
+ PiCounterId.of(PORT_COUNT_EGRESS_CTRL + DOT + "egress_port_counter");
public static final PiCounterId CNT_INGRESS_PORT_COUNTER_ID =
- PiCounterId.of("port_counters_ingress.ingress_port_counter");
- public static final PiCounterId CNT_TABLE0_ID = PiCounterId.of(TABLE0_CONTROL + DOT + "table0_counter");
- public static final PiCounterId CNT_WCMP_TABLE_ID = PiCounterId.of(WCMP_CONTROL + DOT + "wcmp_table_counter");
+ PiCounterId.of(PORT_COUNT_INGRESS_CTRL + DOT + "ingress_port_counter");
+ public static final PiCounterId CNT_TABLE0_ID =
+ PiCounterId.of(TABLE0_CTRL + DOT + "table0_counter");
+ public static final PiCounterId CNT_WCMP_TABLE_ID =
+ PiCounterId.of(WCMP_CTRL + DOT + "wcmp_table_counter");
// Action IDs
- public static final PiActionId ACT_NOACTION_ID = PiActionId.of("NoAction");
- public static final PiActionId ACT_DROP_ID = PiActionId.of("_drop");
- public static final PiActionId ACT_SET_EGRESS_PORT_ID = PiActionId.of("set_egress_port");
- public static final PiActionId ACT_SET_NEXT_HOP_ID = PiActionId.of(TABLE0_CONTROL + DOT + "set_next_hop_id");
- public static final PiActionId ACT_SEND_TO_CPU_ID = PiActionId.of("send_to_cpu");
+ public static final PiActionId ACT_NOACTION_ID =
+ PiActionId.of("NoAction");
+ public static final PiActionId ACT_DROP_ID =
+ PiActionId.of("_drop");
+ public static final PiActionId ACT_SET_EGRESS_PORT_ID =
+ PiActionId.of("set_egress_port");
+ public static final PiActionId ACT_SET_NEXT_HOP_ID =
+ PiActionId.of(TABLE0_CTRL + DOT + "set_next_hop_id");
+ public static final PiActionId ACT_SEND_TO_CPU_ID =
+ PiActionId.of("send_to_cpu");
// Action Param IDs
- public static final PiActionParamId ACT_PRM_PORT_ID = PiActionParamId.of("port");
- public static final PiActionParamId ACT_PRM_NEXT_HOP_ID = PiActionParamId.of("next_hop_id");
+ public static final PiActionParamId ACT_PRM_PORT_ID =
+ PiActionParamId.of("port");
+ public static final PiActionParamId ACT_PRM_NEXT_HOP_ID =
+ PiActionParamId.of("next_hop_id");
// Action Profile IDs
- public static final PiActionProfileId ACT_PRF_WCMP_SELECTOR_ID = PiActionProfileId.of("wcmp_control.wcmp_selector");
+ public static final PiActionProfileId ACT_PRF_WCMP_SELECTOR_ID =
+ PiActionProfileId.of(WCMP_CTRL + DOT + "wcmp_selector");
// Packet Metadata IDs
- public static final PiControlMetadataId PKT_META_EGRESS_PORT_ID = PiControlMetadataId.of("egress_port");
- public static final PiControlMetadataId PKT_META_INGRESS_PORT_ID = PiControlMetadataId.of("ingress_port");
+ public static final PiControlMetadataId PKT_META_EGRESS_PORT_ID =
+ PiControlMetadataId.of("egress_port");
+ public static final PiControlMetadataId PKT_META_INGRESS_PORT_ID =
+ PiControlMetadataId.of("ingress_port");
// Bitwidths
public static final int PORT_BITWIDTH = 9;
diff --git a/pipelines/basic/src/main/resources/p4c-out/bmv2/basic.json b/pipelines/basic/src/main/resources/p4c-out/bmv2/basic.json
index b90e0d6..e9378ef 100644
--- a/pipelines/basic/src/main/resources/p4c-out/bmv2/basic.json
+++ b/pipelines/basic/src/main/resources/p4c-out/bmv2/basic.json
@@ -112,12 +112,14 @@
["deq_timedelta", 32, false],
["deq_qdepth", 19, false],
["ingress_global_timestamp", 48, false],
+ ["egress_global_timestamp", 48, false],
["lf_field_list", 32, false],
["mcast_grp", 16, false],
- ["resubmit_flag", 1, false],
+ ["resubmit_flag", 32, false],
["egress_rid", 16, false],
["checksum_error", 1, false],
- ["_padding_1", 4, false]
+ ["recirculate_flag", 32, false],
+ ["_padding_1", 5, false]
]
}
],
@@ -214,6 +216,7 @@
"parser_ops" : [],
"transitions" : [
{
+ "type" : "hexstr",
"value" : "0x00ff",
"mask" : null,
"next_state" : "parse_packet_out"
@@ -270,6 +273,7 @@
],
"transitions" : [
{
+ "type" : "hexstr",
"value" : "0x0800",
"mask" : null,
"next_state" : "parse_ipv4"
@@ -303,11 +307,13 @@
],
"transitions" : [
{
+ "type" : "hexstr",
"value" : "0x06",
"mask" : null,
"next_state" : "parse_tcp"
},
{
+ "type" : "hexstr",
"value" : "0x11",
"mask" : null,
"next_state" : "parse_udp"
@@ -426,6 +432,7 @@
]
}
],
+ "parse_vsets" : [],
"deparsers" : [
{
"name" : "deparser",
@@ -441,7 +448,7 @@
],
"meter_arrays" : [
{
- "name" : "port_meters_ingress.ingress_port_meter",
+ "name" : "ingress.port_meters_ingress.ingress_port_meter",
"id" : 0,
"source_info" : {
"filename" : "include/port_meters.p4",
@@ -455,7 +462,7 @@
"type" : "bytes"
},
{
- "name" : "host_meter_control.host_meter",
+ "name" : "ingress.host_meter_control.host_meter",
"id" : 1,
"source_info" : {
"filename" : "include/host_meter_table.p4",
@@ -467,11 +474,11 @@
"rate_count" : 2,
"type" : "bytes",
"size" : 1024,
- "binding" : "host_meter_control.host_meter_table",
+ "binding" : "ingress.host_meter_control.host_meter_table",
"result_target" : ["scalars", "local_metadata_t.meter_tag"]
},
{
- "name" : "port_meters_egress.egress_port_meter",
+ "name" : "egress.port_meters_egress.egress_port_meter",
"id" : 2,
"source_info" : {
"filename" : "include/port_meters.p4",
@@ -487,7 +494,7 @@
],
"counter_arrays" : [
{
- "name" : "port_counters_ingress.ingress_port_counter",
+ "name" : "ingress.port_counters_ingress.ingress_port_counter",
"id" : 0,
"source_info" : {
"filename" : "include/port_counters.p4",
@@ -499,19 +506,19 @@
"is_direct" : false
},
{
- "name" : "table0_control.table0_counter",
+ "name" : "ingress.table0_control.table0_counter",
"id" : 1,
"is_direct" : true,
- "binding" : "table0_control.table0"
+ "binding" : "ingress.table0_control.table0"
},
{
- "name" : "wcmp_control.wcmp_table_counter",
+ "name" : "ingress.wcmp_control.wcmp_table_counter",
"id" : 2,
"is_direct" : true,
- "binding" : "wcmp_control.wcmp_table"
+ "binding" : "ingress.wcmp_control.wcmp_table"
},
{
- "name" : "port_counters_egress.egress_port_counter",
+ "name" : "egress.port_counters_egress.egress_port_counter",
"id" : 3,
"source_info" : {
"filename" : "include/port_counters.p4",
@@ -645,7 +652,7 @@
"primitives" : []
},
{
- "name" : "table0_control.set_next_hop_id",
+ "name" : "ingress.table0_control.set_next_hop_id",
"id" : 6,
"runtime_data" : [
{
@@ -676,7 +683,7 @@
]
},
{
- "name" : "host_meter_control.read_meter",
+ "name" : "ingress.host_meter_control.read_meter",
"id" : 7,
"runtime_data" : [],
"primitives" : []
@@ -734,7 +741,7 @@
"parameters" : [
{
"type" : "counter_array",
- "value" : "port_counters_ingress.ingress_port_counter"
+ "value" : "ingress.port_counters_ingress.ingress_port_counter"
},
{
"type" : "field",
@@ -779,7 +786,7 @@
"parameters" : [
{
"type" : "meter_array",
- "value" : "port_meters_ingress.ingress_port_meter"
+ "value" : "ingress.port_meters_ingress.ingress_port_meter"
},
{
"type" : "field",
@@ -1052,7 +1059,7 @@
"parameters" : [
{
"type" : "counter_array",
- "value" : "port_counters_egress.egress_port_counter"
+ "value" : "egress.port_counters_egress.egress_port_counter"
},
{
"type" : "field",
@@ -1097,7 +1104,7 @@
"parameters" : [
{
"type" : "meter_array",
- "value" : "port_meters_egress.egress_port_meter"
+ "value" : "egress.port_meters_egress.egress_port_meter"
},
{
"type" : "field",
@@ -1241,7 +1248,7 @@
}
},
{
- "name" : "table0_control.table0",
+ "name" : "ingress.table0_control.table0",
"id" : 3,
"source_info" : {
"filename" : "include/table0.p4",
@@ -1252,46 +1259,55 @@
"key" : [
{
"match_type" : "ternary",
+ "name" : "standard_metadata.ingress_port",
"target" : ["standard_metadata", "ingress_port"],
"mask" : null
},
{
"match_type" : "ternary",
+ "name" : "hdr.ethernet.src_addr",
"target" : ["ethernet", "src_addr"],
"mask" : null
},
{
"match_type" : "ternary",
+ "name" : "hdr.ethernet.dst_addr",
"target" : ["ethernet", "dst_addr"],
"mask" : null
},
{
"match_type" : "ternary",
+ "name" : "hdr.ethernet.ether_type",
"target" : ["ethernet", "ether_type"],
"mask" : null
},
{
"match_type" : "ternary",
+ "name" : "hdr.ipv4.src_addr",
"target" : ["ipv4", "src_addr"],
"mask" : null
},
{
"match_type" : "ternary",
+ "name" : "hdr.ipv4.dst_addr",
"target" : ["ipv4", "dst_addr"],
"mask" : null
},
{
"match_type" : "ternary",
+ "name" : "hdr.ipv4.protocol",
"target" : ["ipv4", "protocol"],
"mask" : null
},
{
"match_type" : "ternary",
+ "name" : "local_metadata.l4_src_port",
"target" : ["scalars", "local_metadata_t.l4_src_port"],
"mask" : null
},
{
"match_type" : "ternary",
+ "name" : "local_metadata.l4_dst_port",
"target" : ["scalars", "local_metadata_t.l4_dst_port"],
"mask" : null
}
@@ -1303,13 +1319,13 @@
"support_timeout" : false,
"direct_meters" : null,
"action_ids" : [0, 2, 6, 3],
- "actions" : ["set_egress_port", "send_to_cpu", "table0_control.set_next_hop_id", "_drop"],
- "base_default_next" : "host_meter_control.host_meter_table",
+ "actions" : ["set_egress_port", "send_to_cpu", "ingress.table0_control.set_next_hop_id", "_drop"],
+ "base_default_next" : "ingress.host_meter_control.host_meter_table",
"next_tables" : {
- "set_egress_port" : "host_meter_control.host_meter_table",
- "send_to_cpu" : "host_meter_control.host_meter_table",
- "table0_control.set_next_hop_id" : "host_meter_control.host_meter_table",
- "_drop" : "host_meter_control.host_meter_table"
+ "set_egress_port" : "ingress.host_meter_control.host_meter_table",
+ "send_to_cpu" : "ingress.host_meter_control.host_meter_table",
+ "ingress.table0_control.set_next_hop_id" : "ingress.host_meter_control.host_meter_table",
+ "_drop" : "ingress.host_meter_control.host_meter_table"
},
"default_entry" : {
"action_id" : 3,
@@ -1319,7 +1335,7 @@
}
},
{
- "name" : "host_meter_control.host_meter_table",
+ "name" : "ingress.host_meter_control.host_meter_table",
"id" : 4,
"source_info" : {
"filename" : "include/host_meter_table.p4",
@@ -1330,6 +1346,7 @@
"key" : [
{
"match_type" : "lpm",
+ "name" : "hdr.ethernet.src_addr",
"target" : ["ethernet", "src_addr"],
"mask" : null
}
@@ -1339,9 +1356,9 @@
"max_size" : 1024,
"with_counters" : false,
"support_timeout" : false,
- "direct_meters" : "host_meter_control.host_meter",
+ "direct_meters" : "ingress.host_meter_control.host_meter",
"action_ids" : [7, 4],
- "actions" : ["host_meter_control.read_meter", "NoAction"],
+ "actions" : ["ingress.host_meter_control.read_meter", "NoAction"],
"base_default_next" : null,
"next_tables" : {
"__HIT__" : "tbl_act_2",
@@ -1470,7 +1487,7 @@
}
},
{
- "name" : "wcmp_control.wcmp_table",
+ "name" : "ingress.wcmp_control.wcmp_table",
"id" : 10,
"source_info" : {
"filename" : "include/wcmp.p4",
@@ -1481,13 +1498,14 @@
"key" : [
{
"match_type" : "exact",
+ "name" : "local_metadata.next_hop_id",
"target" : ["scalars", "local_metadata_t.next_hop_id"],
"mask" : null
}
],
"match_type" : "exact",
"type" : "indirect_ws",
- "action_profile" : "wcmp_control.wcmp_selector",
+ "action_profile" : "ingress.wcmp_control.wcmp_selector",
"max_size" : 1024,
"with_counters" : true,
"support_timeout" : false,
@@ -1503,7 +1521,7 @@
],
"action_profiles" : [
{
- "name" : "wcmp_control.wcmp_selector",
+ "name" : "ingress.wcmp_control.wcmp_selector",
"id" : 0,
"max_size" : 64,
"selector" : {
@@ -1584,7 +1602,7 @@
}
},
"true_next" : "tbl_act_1",
- "false_next" : "table0_control.table0"
+ "false_next" : "ingress.table0_control.table0"
},
{
"name" : "node_11",
@@ -1651,7 +1669,7 @@
}
},
"false_next" : null,
- "true_next" : "wcmp_control.wcmp_table"
+ "true_next" : "ingress.wcmp_control.wcmp_table"
}
]
},
@@ -1818,6 +1836,10 @@
["standard_metadata", "ingress_global_timestamp"]
],
[
+ "intrinsic_metadata.egress_global_timestamp",
+ ["standard_metadata", "egress_global_timestamp"]
+ ],
+ [
"intrinsic_metadata.lf_field_list",
["standard_metadata", "lf_field_list"]
],
@@ -1832,6 +1854,10 @@
[
"intrinsic_metadata.egress_rid",
["standard_metadata", "egress_rid"]
+ ],
+ [
+ "intrinsic_metadata.recirculate_flag",
+ ["standard_metadata", "recirculate_flag"]
]
]
}
\ No newline at end of file
diff --git a/pipelines/basic/src/main/resources/p4c-out/bmv2/basic.p4info b/pipelines/basic/src/main/resources/p4c-out/bmv2/basic.p4info
index 9ec66ba..8d39c13 100644
--- a/pipelines/basic/src/main/resources/p4c-out/bmv2/basic.p4info
+++ b/pipelines/basic/src/main/resources/p4c-out/bmv2/basic.p4info
@@ -1,7 +1,7 @@
tables {
preamble {
- id: 33571508
- name: "table0_control.table0"
+ id: 33561568
+ name: "ingress.table0_control.table0"
alias: "table0"
}
match_fields {
@@ -65,19 +65,19 @@
id: 16829080
}
action_refs {
- id: 16802895
+ id: 16777316
}
action_refs {
id: 16784184
}
const_default_action_id: 16784184
- direct_resource_ids: 302046050
+ direct_resource_ids: 302038973
size: 1024
}
tables {
preamble {
- id: 33597882
- name: "host_meter_control.host_meter_table"
+ id: 33571781
+ name: "ingress.host_meter_control.host_meter_table"
alias: "host_meter_table"
}
match_fields {
@@ -87,18 +87,18 @@
match_type: LPM
}
action_refs {
- id: 16832719
+ id: 16823832
}
action_refs {
id: 16800567
}
- direct_resource_ids: 318776014
+ direct_resource_ids: 318783457
size: 1024
}
tables {
preamble {
- id: 33592597
- name: "wcmp_control.wcmp_table"
+ id: 33594717
+ name: "ingress.wcmp_control.wcmp_table"
alias: "wcmp_table"
}
match_fields {
@@ -114,8 +114,8 @@
id: 16800567
annotations: "@defaultonly()"
}
- implementation_id: 285259294
- direct_resource_ids: 302001091
+ implementation_id: 285253634
+ direct_resource_ids: 302034578
size: 1024
}
actions {
@@ -153,8 +153,8 @@
}
actions {
preamble {
- id: 16802895
- name: "table0_control.set_next_hop_id"
+ id: 16777316
+ name: "ingress.table0_control.set_next_hop_id"
alias: "set_next_hop_id"
}
params {
@@ -165,25 +165,25 @@
}
actions {
preamble {
- id: 16832719
- name: "host_meter_control.read_meter"
+ id: 16823832
+ name: "ingress.host_meter_control.read_meter"
alias: "read_meter"
}
}
action_profiles {
preamble {
- id: 285259294
- name: "wcmp_control.wcmp_selector"
+ id: 285253634
+ name: "ingress.wcmp_control.wcmp_selector"
alias: "wcmp_selector"
}
- table_ids: 33592597
+ table_ids: 33594717
with_selector: true
size: 64
}
counters {
preamble {
- id: 302012579
- name: "port_counters_ingress.ingress_port_counter"
+ id: 302004684
+ name: "ingress.port_counters_ingress.ingress_port_counter"
alias: "ingress_port_counter"
}
spec {
@@ -193,8 +193,8 @@
}
counters {
preamble {
- id: 302012501
- name: "port_counters_egress.egress_port_counter"
+ id: 302040487
+ name: "egress.port_counters_egress.egress_port_counter"
alias: "egress_port_counter"
}
spec {
@@ -204,30 +204,30 @@
}
direct_counters {
preamble {
- id: 302046050
- name: "table0_control.table0_counter"
+ id: 302038973
+ name: "ingress.table0_control.table0_counter"
alias: "table0_counter"
}
spec {
unit: BOTH
}
- direct_table_id: 33571508
+ direct_table_id: 33561568
}
direct_counters {
preamble {
- id: 302001091
- name: "wcmp_control.wcmp_table_counter"
+ id: 302034578
+ name: "ingress.wcmp_control.wcmp_table_counter"
alias: "wcmp_table_counter"
}
spec {
unit: BOTH
}
- direct_table_id: 33592597
+ direct_table_id: 33594717
}
meters {
preamble {
- id: 318770010
- name: "port_meters_ingress.ingress_port_meter"
+ id: 318803935
+ name: "ingress.port_meters_ingress.ingress_port_meter"
alias: "ingress_port_meter"
}
spec {
@@ -237,8 +237,8 @@
}
meters {
preamble {
- id: 318779497
- name: "port_meters_egress.egress_port_meter"
+ id: 318792425
+ name: "egress.port_meters_egress.egress_port_meter"
alias: "egress_port_meter"
}
spec {
@@ -248,14 +248,14 @@
}
direct_meters {
preamble {
- id: 318776014
- name: "host_meter_control.host_meter"
+ id: 318783457
+ name: "ingress.host_meter_control.host_meter"
alias: "host_meter"
}
spec {
unit: BYTES
}
- direct_table_id: 33597882
+ direct_table_id: 33571781
}
controller_packet_metadata {
preamble {