From e8617e075391701e56f0e0ff5906c00eabc269ae Mon Sep 17 00:00:00 2001 From: "Velayutham, Arunkumar" Date: Mon, 13 Oct 2025 19:14:53 -0400 Subject: [PATCH 1/2] FXP pkg update to support dual port configuration Signed-off-by: Velayutham, Arunkumar --- .../fxp-net_linux-networking.context.json | 4226 ++++++++--------- .../fxp-net_linux-networking.p4info.txt | 409 +- .../fxp-net_linux-networking.pkg | Bin 1532240 -> 1532240 bytes .../fxp-net_linux-networking.tdi.json | 804 +--- 4 files changed, 2253 insertions(+), 3186 deletions(-) diff --git a/cmd/intelvsp/fxp-net_linux-networking/fxp-net_linux-networking.context.json b/cmd/intelvsp/fxp-net_linux-networking/fxp-net_linux-networking.context.json index cccfcd126..b836d1fd4 100644 --- a/cmd/intelvsp/fxp-net_linux-networking/fxp-net_linux-networking.context.json +++ b/cmd/intelvsp/fxp-net_linux-networking/fxp-net_linux-networking.context.json @@ -1,10 +1,10 @@ { "program_name": "fxp-net_linux-networking", - "build_date": "Fri Mar 28 18:29:15 2025", - "compile_command": "/opt/p4-tools/p4c/bin/p4c-pna-xxp -I /opt/p4-tools/p4c/share/p4c/p4c_src/../idpf-lib --Wdisable --lem-obj0-constraint off --no-pedantic --context ./artifacts/fxp-net_linux-networking/context.json --tdi ./artifacts/fxp-net_linux-networking/tdi.json --p4runtime-entries-files ./artifacts/fxp-net_linux-networking/entries.json --lem-obj0-constraint on -I /opt/p4-tools/p4c/share/p4c/p4include -I /../lib -I /../share/p4c/p4include/idpf -I /../share/p4c/p4include -I /../share/p4c/idpf-lib --p4v=16 --p4runtime-files ./artifacts/fxp-net_linux-networking/p4Info.txt --pkg-name Sample P4 Program pkg --pkg-version 1.0.73.35 -o artifacts/fxp-net_linux-networking/fxp-net_linux-networking_b7d817976ac249c199add187f57e0114.s /artifact/fxp-net-scenarios/fxp-net_linux-networking/fxp-net_linux-networking.p4", - "compiler_version": "3.0.70.134", + "build_date": "Mon Jan 6 21:05:26 2025", + "compile_command": "/opt/p4-tools/p4c/bin/p4c-pna-xxp -I /opt/p4-tools/p4c/share/p4c/p4c_src/../idpf-lib --Wdisable --no-pedantic --context ./artifacts/fxp-net_linux-networking/context.json --tdi ./artifacts/fxp-net_linux-networking/tdi.json --p4runtime-entries-files ./artifacts/fxp-net_linux-networking/entries.json -I /opt/p4-tools/p4c/share/p4c/p4include -I /opt/p4-tools/p4c/bin/../lib -I /opt/p4-tools/p4c/bin/../share/p4c/p4include/idpf -I /opt/p4-tools/p4c/bin/../share/p4c/p4include -I /opt/p4-tools/p4c/bin/../share/p4c/idpf-lib --p4v=16 --p4runtime-files ./artifacts/fxp-net_linux-networking/p4Info.txt --pkg-name Sample P4 Program pkg --pkg-version 1.0.73.35 -o artifacts/fxp-net_linux-networking/fxp-net_linux-networking_6d71633f35b94c0c952ccb075030d17d.s /artifacts/fxp-net-scenarios/fxp-net_linux-networking/fxp-net_linux-networking.p4", + "compiler_version": "3.0.70.124", "schema_version": "1.0.0", - "run_id": "125328182611", + "run_id": "1251621157", "target": "MEV", "global_configs": { "hardware_blocks": [ @@ -69,8 +69,7 @@ ] } ], - "count_mode": 60, - "mirror_mode": 0 + "count_mode": 60 }, "tables": [ { @@ -104,7 +103,6 @@ "profile": [ 0 ], - "obj_id": 0, "hash_size": 12, "action_format": [ { @@ -149,7 +147,6 @@ "profile": [ 1 ], - "obj_id": 0, "hash_size": 12, "action_format": [ { @@ -259,7 +256,6 @@ "profile": [ 10 ], - "obj_id": 0, "hash_size": 325632, "action_format": [ { @@ -775,6 +771,13 @@ "action_handle": 19361592, "immediate_fields": [], "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 64, + "mask": 112 + }, { "prec": 7, "action_code": "SET1B_24b", @@ -784,13 +787,6 @@ "mask": 1, "type_id": 4, "offset": 0 - }, - { - "prec": 7, - "action_code": "SET10_1b", - "index": 0, - "value": 64, - "mask": 112 } ] } @@ -800,6 +796,13 @@ "action_name": "linux_networking_control.do_trap_enable", "action_handle": 19361592, "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 64, + "mask": 112 + }, { "prec": 7, "action_code": "SET1B_24b", @@ -809,13 +812,6 @@ "mask": 1, "type_id": 4, "offset": 0 - }, - { - "prec": 7, - "action_code": "SET10_1b", - "index": 0, - "value": 64, - "mask": 112 } ] } @@ -5577,7 +5573,7 @@ "bit_width": 32 } ], - "default_action_handle": 21790705, + "default_action_handle": 21257015, "max_default_actions": 2, "actions": [ { @@ -5639,6 +5635,15 @@ { "name": "linux_networking_control.trap_enable", "handle": 21790705, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [] + }, + { + "name": "NoAction", + "handle": 21257015, "constant_default_action": true, "is_compiler_added_action": false, "allowed_as_hit_action": false, @@ -5820,31 +5825,13 @@ "action_handle": 21790705, "immediate_fields": [], "hw_actions_list": [ - { - "prec": 7, - "action_code": "SET1B_24b", - "index": 0, - "setmd_action_code": "SET_8b", - "value": 1, - "mask": 1, - "type_id": 4, - "offset": 0 - }, { "prec": 7, "action_code": "SET10_1b", "index": 0, "value": 64, "mask": 112 - } - ] - } - ], - "default_action_format": [ - { - "action_name": "linux_networking_control.trap_enable", - "action_handle": 21790705, - "hw_actions_list": [ + }, { "prec": 7, "action_code": "SET1B_24b", @@ -5854,15 +5841,14 @@ "mask": 1, "type_id": 4, "offset": 0 - }, - { - "prec": 7, - "action_code": "SET10_1b", - "index": 0, - "value": 64, - "mask": 112 } ] + }, + { + "action_name": "NoAction", + "action_handle": 21257015, + "immediate_fields": [], + "hw_actions_list": [] } ] } @@ -6255,7 +6241,6 @@ "profile": [ 1 ], - "obj_id": 0, "hash_size": 325632, "action_format": [ { @@ -6367,6 +6352,13 @@ } ], "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 64, + "mask": 112 + }, { "prec": 7, "action_code": "SET1B_24b", @@ -6395,13 +6387,6 @@ "mask": 16, "type_id": 4, "offset": 0 - }, - { - "prec": 7, - "action_code": "SET10_1b", - "index": 0, - "value": 64, - "mask": 112 } ] }, @@ -6410,16 +6395,6 @@ "action_handle": 21283156, "immediate_fields": [], "hw_actions_list": [ - { - "prec": 7, - "action_code": "SET1B_24b", - "index": 0, - "setmd_action_code": "SET_8b", - "value": 1, - "mask": 1, - "type_id": 4, - "offset": 0 - }, { "prec": 1, "action_code": "SET1A_24b", @@ -6433,6 +6408,16 @@ "index": 0, "value": 64, "mask": 112 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 2, + "setmd_action_code": "SET_8b", + "value": 1, + "mask": 1, + "type_id": 4, + "offset": 0 } ] } @@ -6442,16 +6427,6 @@ "action_name": "linux_networking_control.fwd_to_cp", "action_handle": 21283156, "hw_actions_list": [ - { - "prec": 7, - "action_code": "SET1B_24b", - "index": 0, - "setmd_action_code": "SET_8b", - "value": 1, - "mask": 1, - "type_id": 4, - "offset": 0 - }, { "prec": 1, "action_code": "SET1A_24b", @@ -6465,6 +6440,16 @@ "index": 0, "value": 64, "mask": 112 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 2, + "setmd_action_code": "SET_8b", + "value": 1, + "mask": 1, + "type_id": 4, + "offset": 0 } ] } @@ -6714,7 +6699,6 @@ "profile": [ 4 ], - "obj_id": 0, "hash_size": 325632, "action_format": [ { @@ -7460,16 +7444,6 @@ "action_handle": 20441854, "immediate_fields": [], "hw_actions_list": [ - { - "prec": 7, - "action_code": "SET1B_24b", - "index": 0, - "setmd_action_code": "SET_8b", - "value": 1, - "mask": 1, - "type_id": 4, - "offset": 0 - }, { "prec": 1, "action_code": "SET1A_24b", @@ -7494,6 +7468,16 @@ "action_code": "SET1A_24b", "index": 4, "pool_id": 0 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 2, + "setmd_action_code": "SET_8b", + "value": 1, + "mask": 1, + "type_id": 4, + "offset": 0 } ] } @@ -7503,16 +7487,6 @@ "action_name": "linux_networking_control.fwd_to_cp_tx", "action_handle": 20441854, "hw_actions_list": [ - { - "prec": 7, - "action_code": "SET1B_24b", - "index": 0, - "setmd_action_code": "SET_8b", - "value": 1, - "mask": 1, - "type_id": 4, - "offset": 0 - }, { "prec": 1, "action_code": "SET1A_24b", @@ -7537,6 +7511,16 @@ "action_code": "SET1A_24b", "index": 4, "pool_id": 0 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 2, + "setmd_action_code": "SET_8b", + "value": 1, + "mask": 1, + "type_id": 4, + "offset": 0 } ] } @@ -7706,6 +7690,39 @@ } ], "hw_actions_list": [ + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 9, + "mod_profile": 3, + "prefetch": 0 + }, + { + "prec": 7, + "action_code": "SET1_16b", + "index": 2, + "parameters": [ + { + "param_name": "egress_port", + "param_handle": 1, + "param_start_bit": 0, + "param_value_length": 32, + "value_start_bit": 0, + "byte_order": "HOST" + } + ] + }, + { + "prec": 3, + "action_code": "SET2_8b", + "index": 11 + }, + { + "prec": 3, + "action_code": "SET1A_24b", + "index": 5, + "pool_id": 1 + }, { "prec": 7, "action_code": "SET1B_24b", @@ -7725,9 +7742,11 @@ "offset": 7 }, { - "prec": 3, - "action_code": "SET2_8b", - "index": 11 + "prec": 0, + "action_code": "NOP", + "index": 0, + "value": 0, + "mask": 0 }, { "prec": 7, @@ -7776,34 +7795,6 @@ "mask": 7, "type_id": 5, "offset": 5 - }, - { - "prec": 1, - "action_code": "SET1A_24b", - "index": 9, - "mod_profile": 3, - "prefetch": 0 - }, - { - "prec": 7, - "action_code": "SET1_16b", - "index": 2, - "parameters": [ - { - "param_name": "egress_port", - "param_handle": 1, - "param_start_bit": 0, - "param_value_length": 32, - "value_start_bit": 0, - "byte_order": "HOST" - } - ] - }, - { - "prec": 3, - "action_code": "SET1A_24b", - "index": 5, - "pool_id": 1 } ] }, @@ -7834,6 +7825,13 @@ } ], "hw_actions_list": [ + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 9, + "mod_profile": 3, + "prefetch": 0 + }, { "prec": 7, "action_code": "SET1B_24b", @@ -7852,13 +7850,6 @@ "type_id": 4, "offset": 7 }, - { - "prec": 0, - "action_code": "NOP", - "index": 0, - "value": 0, - "mask": 0 - }, { "prec": 7, "action_code": "SET1B_24b", @@ -7900,13 +7891,6 @@ "mask": 255, "type_id": 4, "offset": 1 - }, - { - "prec": 1, - "action_code": "SET1A_24b", - "index": 9, - "mod_profile": 3, - "prefetch": 0 } ] }, @@ -8059,40 +8043,61 @@ } ], "hw_actions_list": [ + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 9, + "mod_profile": 3, + "prefetch": 0 + }, { "prec": 7, - "action_code": "SET1B_24b", + "action_code": "SET1_16b", + "encoding_grp": 8, + "encoding_port": "VSI", "index": 2, - "setmd_action_code": "SET_16b", "parameters": [ { - "param_name": "dmac_high", - "param_handle": 2, + "param_name": "egress_port", + "param_handle": 1, "param_start_bit": 0, - "param_value_length": 16, + "param_value_length": 32, "value_start_bit": 0, "byte_order": "HOST" } - ], - "type_id": 4, - "offset": 7 + ] }, { - "prec": 0, - "action_code": "NOP", + "prec": 7, + "action_code": "SET10_1b", + "encoding_grp": 8, + "encoding_port": "VSI", "index": 0, - "value": 0, - "mask": 0 + "value": 4, + "mask": 4 }, { "prec": 7, "action_code": "SET1B_24b", - "index": 3, - "setmd_action_code": "SET_32b_AUX", + "encoding_grp": 8, + "encoding_port": "VSI", + "index": 0, + "setmd_action_code": "SET_8b", + "value": 2, + "mask": 2, + "type_id": 0, + "offset": 0 + }, + { + "prec": 7, + "action_code": "SET1_16b", + "encoding_grp": 9, + "encoding_port": "PORT", + "index": 2, "parameters": [ { - "param_name": "dmac_low", - "param_handle": 3, + "param_name": "egress_port", + "param_handle": 1, "param_start_bit": 0, "param_value_length": 32, "value_start_bit": 0, @@ -8100,55 +8105,33 @@ } ] }, - { - "prec": 7, - "action_code": "AUX_DATA", - "index": 3, - "type_id": 4, - "offset": 10 - }, { "prec": 7, "action_code": "SET1B_24b", - "index": 0, - "setmd_action_code": "SET_16b_AUX", + "index": 1, + "setmd_action_code": "SET_16b", "parameters": [ { - "param_name": "router_interface_id", - "param_handle": 0, + "param_name": "dmac_high", + "param_handle": 2, "param_start_bit": 0, "param_value_length": 16, "value_start_bit": 0, "byte_order": "HOST" } ], - "mask": 255 - }, - { - "prec": 7, - "action_code": "AUX_DATA", - "index": 0, - "mask": 7, - "type_id": 5, - "offset": 5 - }, - { - "prec": 1, - "action_code": "SET1A_24b", - "index": 9, - "mod_profile": 3, - "prefetch": 0 + "type_id": 4, + "offset": 7 }, { "prec": 7, - "action_code": "SET1_16b", - "encoding_grp": 8, - "encoding_port": "VSI", + "action_code": "SET1B_24b", "index": 2, + "setmd_action_code": "SET_32b_AUX", "parameters": [ { - "param_name": "egress_port", - "param_handle": 1, + "param_name": "dmac_low", + "param_handle": 3, "param_start_bit": 0, "param_value_length": 32, "value_start_bit": 0, @@ -8158,41 +8141,35 @@ }, { "prec": 7, - "action_code": "SET10_1b", - "encoding_grp": 8, - "encoding_port": "VSI", - "index": 0, - "value": 4, - "mask": 4 + "action_code": "AUX_DATA", + "index": 2, + "type_id": 4, + "offset": 10 }, { "prec": 7, "action_code": "SET1B_24b", - "encoding_grp": 8, - "encoding_port": "VSI", - "index": 1, - "setmd_action_code": "SET_8b", - "value": 2, - "mask": 2, - "type_id": 0, - "offset": 0 - }, - { - "prec": 7, - "action_code": "SET1_16b", - "encoding_grp": 9, - "encoding_port": "PORT", - "index": 2, + "index": 3, + "setmd_action_code": "SET_16b_AUX", "parameters": [ { - "param_name": "egress_port", - "param_handle": 1, + "param_name": "router_interface_id", + "param_handle": 0, "param_start_bit": 0, - "param_value_length": 32, + "param_value_length": 16, "value_start_bit": 0, "byte_order": "HOST" } - ] + ], + "mask": 255 + }, + { + "prec": 7, + "action_code": "AUX_DATA", + "index": 3, + "mask": 7, + "type_id": 5, + "offset": 5 } ] }, @@ -8356,46 +8333,6 @@ } ], "hw_actions_list": [ - { - "prec": 7, - "action_code": "SET1B_24b", - "index": 0, - "setmd_action_code": "SET_16b_AUX", - "parameters": [ - { - "param_name": "router_interface_id", - "param_handle": 0, - "param_start_bit": 0, - "param_value_length": 16, - "value_start_bit": 0, - "byte_order": "HOST" - } - ], - "mask": 255 - }, - { - "prec": 7, - "action_code": "AUX_DATA", - "index": 0, - "mask": 7, - "type_id": 5, - "offset": 5 - }, - { - "prec": 7, - "action_code": "SET1B_24b", - "index": 2, - "setmd_action_code": "SET_8b_AUX", - "value": 192, - "mask": 192 - }, - { - "prec": 7, - "action_code": "AUX_DATA", - "index": 2, - "type_id": 0, - "offset": 27 - }, { "prec": 7, "action_code": "SET1_16b", @@ -8427,7 +8364,7 @@ "action_code": "SET1B_24b", "encoding_grp": 10, "encoding_port": "VSI", - "index": 1, + "index": 0, "setmd_action_code": "SET_8b", "value": 2, "mask": 2, @@ -8450,6 +8387,46 @@ "byte_order": "HOST" } ] + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 1, + "setmd_action_code": "SET_16b_AUX", + "parameters": [ + { + "param_name": "router_interface_id", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 16, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "mask": 255 + }, + { + "prec": 7, + "action_code": "AUX_DATA", + "index": 1, + "mask": 7, + "type_id": 5, + "offset": 5 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 2, + "setmd_action_code": "SET_8b_AUX", + "value": 192, + "mask": 192 + }, + { + "prec": 7, + "action_code": "AUX_DATA", + "index": 2, + "type_id": 0, + "offset": 27 } ] }, @@ -8461,7 +8438,7 @@ { "prec": 7, "action_code": "SET1B_24b", - "index": 2, + "index": 0, "setmd_action_code": "SET_8b_AUX", "value": 192, "mask": 192 @@ -8469,7 +8446,7 @@ { "prec": 7, "action_code": "AUX_DATA", - "index": 2, + "index": 0, "type_id": 0, "offset": 27 } @@ -8771,7 +8748,7 @@ { "prec": 7, "action_code": "SET1B_24b", - "index": 1, + "index": 0, "setmd_action_code": "SET_16b", "parameters": [ { @@ -8789,7 +8766,7 @@ { "prec": 7, "action_code": "SET1B_24b", - "index": 2, + "index": 1, "setmd_action_code": "SET_8b", "value": 32, "mask": 32, @@ -8814,7 +8791,7 @@ { "prec": 7, "action_code": "SET1B_24b", - "index": 1, + "index": 0, "setmd_action_code": "SET_16b", "parameters": [ { @@ -8832,7 +8809,7 @@ { "prec": 7, "action_code": "SET1B_24b", - "index": 2, + "index": 1, "setmd_action_code": "SET_8b", "value": 8, "mask": 8, @@ -9109,7 +9086,7 @@ { "prec": 7, "action_code": "SET1B_24b", - "index": 1, + "index": 0, "setmd_action_code": "SET_16b", "parameters": [ { @@ -9127,7 +9104,7 @@ { "prec": 7, "action_code": "SET1B_24b", - "index": 2, + "index": 1, "setmd_action_code": "SET_8b", "value": 32, "mask": 32, @@ -9152,7 +9129,7 @@ { "prec": 7, "action_code": "SET1B_24b", - "index": 1, + "index": 0, "setmd_action_code": "SET_16b", "parameters": [ { @@ -9170,7 +9147,7 @@ { "prec": 7, "action_code": "SET1B_24b", - "index": 2, + "index": 1, "setmd_action_code": "SET_8b", "value": 8, "mask": 8, @@ -9234,16 +9211,16 @@ "bit_width": 16 } ], - "default_action_handle": 32890467, + "default_action_handle": 29238102, "max_default_actions": 2, "actions": [ { "name": "linux_networking_control.set_source_port", "handle": 32890467, - "constant_default_action": true, + "constant_default_action": false, "is_compiler_added_action": false, - "allowed_as_hit_action": false, - "allowed_as_default_action": true, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, "p4_parameters": [ { "name": "source_port", @@ -9254,10 +9231,10 @@ { "name": "linux_networking_control.drop", "handle": 29238102, - "constant_default_action": false, + "constant_default_action": true, "is_compiler_added_action": false, - "allowed_as_hit_action": true, - "allowed_as_default_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, "p4_parameters": [] } ], @@ -9324,17 +9301,15 @@ ], "default_action_format": [ { - "action_name": "linux_networking_control.set_source_port", - "action_handle": 32890467, + "action_name": "linux_networking_control.drop", + "action_handle": 29238102, "hw_actions_list": [ { "prec": 7, - "action_code": "SET1B_24b", - "index": 1, - "setmd_action_code": "SET_16b", - "value": 0, - "type_id": 4, - "offset": 4 + "action_code": "SET10_1b", + "index": 0, + "value": 1, + "mask": 1 } ] } @@ -9387,7 +9362,7 @@ "bit_width": 32 } ], - "default_action_handle": 29238102, + "default_action_handle": 32890467, "max_default_actions": 2, "actions": [ { @@ -9395,8 +9370,8 @@ "handle": 32890467, "constant_default_action": false, "is_compiler_added_action": false, - "allowed_as_hit_action": true, - "allowed_as_default_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, "p4_parameters": [ { "name": "source_port", @@ -9407,10 +9382,10 @@ { "name": "linux_networking_control.drop", "handle": 29238102, - "constant_default_action": true, + "constant_default_action": false, "is_compiler_added_action": false, - "allowed_as_hit_action": false, - "allowed_as_default_action": true, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, "p4_parameters": [] } ], @@ -9477,15 +9452,17 @@ ], "default_action_format": [ { - "action_name": "linux_networking_control.drop", - "action_handle": 29238102, + "action_name": "linux_networking_control.set_source_port", + "action_handle": 32890467, "hw_actions_list": [ { "prec": 7, - "action_code": "SET10_1b", - "index": 0, - "value": 1, - "mask": 1 + "action_code": "SET1B_24b", + "index": 1, + "setmd_action_code": "SET_16b", + "value": 0, + "type_id": 4, + "offset": 4 } ] } @@ -9689,15 +9666,15 @@ "bit_width": 16 } ], - "default_action_handle": 31939992, + "default_action_handle": 29238102, "actions": [ { "name": "linux_networking_control.set_bridge_id", "handle": 31939992, - "constant_default_action": true, + "constant_default_action": false, "is_compiler_added_action": false, - "allowed_as_hit_action": false, - "allowed_as_default_action": true, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, "p4_parameters": [ { "name": "bridge_id", @@ -9708,10 +9685,10 @@ { "name": "linux_networking_control.drop", "handle": 29238102, - "constant_default_action": false, + "constant_default_action": true, "is_compiler_added_action": false, - "allowed_as_hit_action": true, - "allowed_as_default_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, "p4_parameters": [] } ], @@ -9787,18 +9764,15 @@ ], "default_action_format": [ { - "action_name": "linux_networking_control.set_bridge_id", - "action_handle": 31939992, + "action_name": "linux_networking_control.drop", + "action_handle": 29238102, "hw_actions_list": [ { "prec": 7, - "action_code": "SET1B_24b", + "action_code": "SET10_1b", "index": 0, - "setmd_action_code": "SET_8b", - "value": 77, - "mask": 255, - "type_id": 5, - "offset": 4 + "value": 1, + "mask": 1 } ] } @@ -9809,7 +9783,7 @@ }, { "table_type": "match", - "direction": "BIDIRECTIONAL", + "direction": "TX", "handle": 46342225, "name": "linux_networking_control.l2_fwd_smac_table", "size": 1024, @@ -9881,7 +9855,6 @@ "profile": [ 9 ], - "obj_id": 0, "hash_size": 325632, "action_format": [ { @@ -9895,16 +9868,6 @@ "action_handle": 21283156, "immediate_fields": [], "hw_actions_list": [ - { - "prec": 7, - "action_code": "SET1B_24b", - "index": 0, - "setmd_action_code": "SET_8b", - "value": 1, - "mask": 1, - "type_id": 4, - "offset": 0 - }, { "prec": 1, "action_code": "SET1A_24b", @@ -9918,6 +9881,16 @@ "index": 0, "value": 64, "mask": 112 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 2, + "setmd_action_code": "SET_8b", + "value": 1, + "mask": 1, + "type_id": 4, + "offset": 0 } ] } @@ -9927,16 +9900,6 @@ "action_name": "linux_networking_control.fwd_to_cp", "action_handle": 21283156, "hw_actions_list": [ - { - "prec": 7, - "action_code": "SET1B_24b", - "index": 0, - "setmd_action_code": "SET_8b", - "value": 1, - "mask": 1, - "type_id": 4, - "offset": 0 - }, { "prec": 1, "action_code": "SET1A_24b", @@ -9950,6 +9913,16 @@ "index": 0, "value": 64, "mask": 112 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 2, + "setmd_action_code": "SET_8b", + "value": 1, + "mask": 1, + "type_id": 4, + "offset": 0 } ] } @@ -10002,16 +9975,16 @@ "bit_width": 16 } ], - "default_action_handle": 31624713, + "default_action_handle": 29238102, "max_default_actions": 4, "actions": [ { "name": "linux_networking_control.l2_fwd_and_bypass_bridge", "handle": 31624713, - "constant_default_action": true, + "constant_default_action": false, "is_compiler_added_action": false, - "allowed_as_hit_action": false, - "allowed_as_default_action": true, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, "p4_parameters": [ { "name": "port", @@ -10022,10 +9995,10 @@ { "name": "linux_networking_control.drop", "handle": 29238102, - "constant_default_action": false, + "constant_default_action": true, "is_compiler_added_action": false, - "allowed_as_hit_action": true, - "allowed_as_default_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, "p4_parameters": [] } ], @@ -10055,16 +10028,6 @@ } ], "hw_actions_list": [ - { - "prec": 7, - "action_code": "SET1B_24b", - "index": 0, - "setmd_action_code": "SET_8b", - "value": 16, - "mask": 16, - "type_id": 5, - "offset": 3 - }, { "prec": 7, "action_code": "SET1_16b", @@ -10079,6 +10042,16 @@ "byte_order": "HOST" } ] + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 0, + "setmd_action_code": "SET_8b", + "value": 16, + "mask": 16, + "type_id": 5, + "offset": 3 } ] }, @@ -10099,25 +10072,15 @@ ], "default_action_format": [ { - "action_name": "linux_networking_control.l2_fwd_and_bypass_bridge", - "action_handle": 31624713, + "action_name": "linux_networking_control.drop", + "action_handle": 29238102, "hw_actions_list": [ { "prec": 7, - "action_code": "SET1B_24b", + "action_code": "SET10_1b", "index": 0, - "setmd_action_code": "SET_8b", - "value": 16, - "mask": 16, - "type_id": 5, - "offset": 3 - }, - { - "prec": 7, - "action_code": "SET1_16b", - "index": 2, - "value": 0, - "type": "SINGLETON_PORT" + "value": 1, + "mask": 1 } ] } @@ -10357,6 +10320,20 @@ } ], "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 64, + "mask": 112 + }, + { + "prec": 0, + "action_code": "NOP", + "index": 0, + "value": 0, + "mask": 0 + }, { "prec": 7, "action_code": "SET1B_24b", @@ -10399,13 +10376,6 @@ "mask": 7, "type_id": 4, "offset": 4 - }, - { - "prec": 7, - "action_code": "SET10_1b", - "index": 0, - "value": 64, - "mask": 112 } ] }, @@ -10580,6 +10550,20 @@ } ], "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 64, + "mask": 112 + }, + { + "prec": 0, + "action_code": "NOP", + "index": 0, + "value": 0, + "mask": 0 + }, { "prec": 7, "action_code": "SET1B_24b", @@ -10681,13 +10665,6 @@ "mask": 4, "type_id": 4, "offset": 0 - }, - { - "prec": 7, - "action_code": "SET10_1b", - "index": 0, - "value": 64, - "mask": 112 } ] }, @@ -10783,12 +10760,12 @@ "bit_width": 16 } ], - "default_action_handle": 26092385, + "default_action_handle": 29238102, "max_default_actions": 2, "actions": [ { - "name": "linux_networking_control.mirror_and_send", - "handle": 20004960, + "name": "linux_networking_control.fwd_to_vsi", + "handle": 26092385, "constant_default_action": false, "is_compiler_added_action": false, "allowed_as_hit_action": true, @@ -10797,34 +10774,16 @@ { "name": "port", "bit_width": 32 - }, - { - "name": "mirror_session_id", - "bit_width": 16 } ] }, { - "name": "linux_networking_control.fwd_to_vsi", - "handle": 26092385, + "name": "linux_networking_control.drop", + "handle": 29238102, "constant_default_action": true, "is_compiler_added_action": false, "allowed_as_hit_action": false, "allowed_as_default_action": true, - "p4_parameters": [ - { - "name": "port", - "bit_width": 32 - } - ] - }, - { - "name": "linux_networking_control.drop", - "handle": 29238102, - "constant_default_action": false, - "is_compiler_added_action": false, - "allowed_as_hit_action": true, - "allowed_as_default_action": false, "p4_parameters": [] } ], @@ -10842,8 +10801,8 @@ "hash_size": 325632, "action_format": [ { - "action_name": "linux_networking_control.mirror_and_send", - "action_handle": 20004960, + "action_name": "linux_networking_control.fwd_to_vsi", + "action_handle": 26092385, "immediate_fields": [ { "param_name": "port", @@ -10851,37 +10810,9 @@ "dest_start": 0, "start_bit_offset": 0, "dest_width": 32 - }, - { - "param_name": "mirror_session_id", - "param_handle": 1, - "dest_start": 4, - "start_bit_offset": 0, - "dest_width": 16 } ], "hw_actions_list": [ - { - "action_code": "SET2_8b", - "index": 12, - "prec": 1, - "post_mod_msk": 1 - }, - { - "prec": 7, - "action_code": "SET2_8b", - "index": 3, - "parameters": [ - { - "param_name": "mirror_session_id", - "param_handle": 1, - "param_start_bit": 0, - "param_value_length": 16, - "value_start_bit": 0, - "byte_order": "HOST" - } - ] - }, { "prec": 7, "action_code": "SET1_16b", @@ -10901,38 +10832,6 @@ } ] }, - { - "action_name": "linux_networking_control.fwd_to_vsi", - "action_handle": 26092385, - "immediate_fields": [ - { - "param_name": "port", - "param_handle": 0, - "dest_start": 0, - "start_bit_offset": 0, - "dest_width": 32 - } - ], - "hw_actions_list": [ - { - "prec": 7, - "action_code": "SET1_16b", - "encoding_grp": 14, - "encoding_port": "VSI", - "index": 2, - "parameters": [ - { - "param_name": "port", - "param_handle": 0, - "param_start_bit": 0, - "param_value_length": 32, - "value_start_bit": 0, - "byte_order": "HOST" - } - ] - } - ] - }, { "action_name": "linux_networking_control.drop", "action_handle": 29238102, @@ -10950,17 +10849,15 @@ ], "default_action_format": [ { - "action_name": "linux_networking_control.fwd_to_vsi", - "action_handle": 26092385, + "action_name": "linux_networking_control.drop", + "action_handle": 29238102, "hw_actions_list": [ { "prec": 7, - "action_code": "SET1_16b", - "encoding_grp": 17, - "encoding_port": "VSI", - "index": 2, - "value": 28, - "type": "SINGLETON_VSI" + "action_code": "SET10_1b", + "index": 0, + "value": 1, + "mask": 1 } ] } @@ -11013,16 +10910,16 @@ "bit_width": 16 } ], - "default_action_handle": 26092385, + "default_action_handle": 29238102, "max_default_actions": 4, "actions": [ { "name": "linux_networking_control.fwd_to_vsi", "handle": 26092385, - "constant_default_action": true, + "constant_default_action": false, "is_compiler_added_action": false, - "allowed_as_hit_action": false, - "allowed_as_default_action": true, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, "p4_parameters": [ { "name": "port", @@ -11033,10 +10930,10 @@ { "name": "linux_networking_control.drop", "handle": 29238102, - "constant_default_action": false, + "constant_default_action": true, "is_compiler_added_action": false, - "allowed_as_hit_action": true, - "allowed_as_default_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, "p4_parameters": [] } ], @@ -11069,7 +10966,7 @@ { "prec": 7, "action_code": "SET1_16b", - "encoding_grp": 15, + "encoding_grp": 14, "encoding_port": "VSI", "index": 2, "parameters": [ @@ -11102,17 +10999,15 @@ ], "default_action_format": [ { - "action_name": "linux_networking_control.fwd_to_vsi", - "action_handle": 26092385, + "action_name": "linux_networking_control.drop", + "action_handle": 29238102, "hw_actions_list": [ { "prec": 7, - "action_code": "SET1_16b", - "encoding_grp": 18, - "encoding_port": "VSI", - "index": 2, - "value": 28, - "type": "SINGLETON_VSI" + "action_code": "SET10_1b", + "index": 0, + "value": 1, + "mask": 1 } ] } @@ -11221,7 +11116,7 @@ { "prec": 7, "action_code": "SET1_16b", - "encoding_grp": 16, + "encoding_grp": 15, "encoding_port": "VSI", "index": 2, "parameters": [ @@ -11273,64 +11168,83 @@ }, { "table_type": "match", - "direction": "TX", - "handle": 49349790, - "name": "linux_networking_control.ipsec_tunnel_table", + "direction": "RX", + "handle": 44641644, + "name": "linux_networking_control.hash_ipv4_tcp", "size": 1024, + "isDefaultSize": true, "add_on_miss": false, "idle_timeout_with_auto_delete": false, "match_key_fields": [ { - "name": "vmeta.common.saidx", - "instance_name": "vmeta.common.saidx", - "field_name": "vmeta.common.saidx", - "match_type": "exact", - "bit_width": 24, + "name": "hdrs.ipv4[vmeta.common.depth].src_ip", + "instance_name": "hdrs.ipv4[vmeta.common.depth].src_ip", + "field_name": "hdrs.ipv4[vmeta.common.depth].src_ip", + "match_type": "selector", + "bit_width": 32, "index": 0, "position": 0 }, { - "name": "bit16_zeros", - "instance_name": "bit16_zeros", - "field_name": "bit16_zeros", - "match_type": "exact", - "bit_width": 13, + "name": "hdrs.ipv4[vmeta.common.depth].dst_ip", + "instance_name": "hdrs.ipv4[vmeta.common.depth].dst_ip", + "field_name": "hdrs.ipv4[vmeta.common.depth].dst_ip", + "match_type": "selector", + "bit_width": 32, "index": 1, - "position": 3 + "position": 4 + }, + { + "name": "hdrs.tcp.sport", + "instance_name": "hdrs.tcp", + "field_name": "sport", + "match_type": "selector", + "bit_width": 16, + "index": 2, + "position": 8 + }, + { + "name": "hdrs.tcp.dport", + "instance_name": "hdrs.tcp", + "field_name": "dport", + "match_type": "selector", + "bit_width": 16, + "index": 3, + "position": 10 } ], "match_key_format": [ { "match_key_handle": 0, - "byte_order": "HOST", + "byte_order": "NETWORK", "byte_array_index": 0, "start_bit_offset": 0, "bit_width": 32 }, { "match_key_handle": 1, - "byte_order": "HOST", + "byte_order": "NETWORK", "byte_array_index": 4, - "start_bit_offset": 3, + "start_bit_offset": 0, + "bit_width": 32 + }, + { + "match_key_handle": 2, + "byte_order": "NETWORK", + "byte_array_index": 8, + "start_bit_offset": 0, + "bit_width": 16 + }, + { + "match_key_handle": 3, + "byte_order": "NETWORK", + "byte_array_index": 10, + "start_bit_offset": 0, "bit_width": 16 } ], "default_action_handle": 21257015, "actions": [ - { - "name": "linux_networking_control.set_ipsec_tunnel", - "handle": 26423957, - "constant_default_action": false, - "is_compiler_added_action": false, - "allowed_as_hit_action": true, - "allowed_as_default_action": false, - "p4_parameters": [ - { - "name": "tunnel_id", - "bit_width": 24 - } - ] - }, { "name": "NoAction", "handle": 21257015, @@ -11344,54 +11258,13 @@ "match_attributes": { "hardware_blocks": [ { - "name": "LEM", - "id": 2, - "hw_interface": "ConfigQueue", + "name": "HASH", + "id": 5, + "hw_interface": "MMIO", "profile": [ - 11 + 1 ], - "obj_id": 0, - "hash_size": 325632, "action_format": [ - { - "action_name": "linux_networking_control.set_ipsec_tunnel", - "action_handle": 26423957, - "immediate_fields": [ - { - "param_name": "tunnel_id", - "param_handle": 0, - "dest_start": 0, - "start_bit_offset": 0, - "dest_width": 24 - } - ], - "hw_actions_list": [ - { - "prec": 1, - "action_code": "SET1A_24b", - "index": 9, - "mod_profile": 16, - "prefetch": 1 - }, - { - "prec": 1, - "action_code": "SET1A_24b", - "index": 0, - "parameters": [ - { - "param_name": "tunnel_id", - "param_handle": 0, - "param_start_bit": 0, - "param_value_length": 24, - "value_start_bit": 0, - "byte_order": "HOST" - } - ], - "p4_ref_action_handle": 30081157, - "p4_ref_table_handle": 37326952 - } - ] - }, { "action_name": "NoAction", "action_handle": 21257015, @@ -11405,30 +11278,49 @@ }, { "table_type": "match", - "direction": "TX", - "handle": 47756035, - "name": "linux_networking_control.ipsec_spd", + "direction": "RX", + "handle": 46678878, + "name": "linux_networking_control.hash_ipv4_udp", "size": 1024, + "isDefaultSize": true, "add_on_miss": false, "idle_timeout_with_auto_delete": false, "match_key_fields": [ { - "name": "hdrs.ipv4[vmeta.common.depth].dst_ip", - "instance_name": "hdrs.ipv4[vmeta.common.depth].dst_ip", - "field_name": "hdrs.ipv4[vmeta.common.depth].dst_ip", - "match_type": "exact", + "name": "hdrs.ipv4[vmeta.common.depth].src_ip", + "instance_name": "hdrs.ipv4[vmeta.common.depth].src_ip", + "field_name": "hdrs.ipv4[vmeta.common.depth].src_ip", + "match_type": "selector", "bit_width": 32, "index": 0, "position": 0 }, { - "name": "hdrs.ipv4[vmeta.common.depth].protocol", - "instance_name": "hdrs.ipv4[vmeta.common.depth].protocol", - "field_name": "hdrs.ipv4[vmeta.common.depth].protocol", - "match_type": "exact", - "bit_width": 8, + "name": "hdrs.ipv4[vmeta.common.depth].dst_ip", + "instance_name": "hdrs.ipv4[vmeta.common.depth].dst_ip", + "field_name": "hdrs.ipv4[vmeta.common.depth].dst_ip", + "match_type": "selector", + "bit_width": 32, "index": 1, "position": 4 + }, + { + "name": "hdrs.udp[vmeta.common.depth].sport", + "instance_name": "hdrs.udp[vmeta.common.depth].sport", + "field_name": "hdrs.udp[vmeta.common.depth].sport", + "match_type": "selector", + "bit_width": 16, + "index": 2, + "position": 8 + }, + { + "name": "hdrs.udp[vmeta.common.depth].dport", + "instance_name": "hdrs.udp[vmeta.common.depth].dport", + "field_name": "hdrs.udp[vmeta.common.depth].dport", + "match_type": "selector", + "bit_width": 16, + "index": 3, + "position": 10 } ], "match_key_format": [ @@ -11444,39 +11336,30 @@ "byte_order": "NETWORK", "byte_array_index": 4, "start_bit_offset": 0, + "bit_width": 32 + }, + { + "match_key_handle": 2, + "byte_order": "NETWORK", + "byte_array_index": 8, + "start_bit_offset": 0, + "bit_width": 16 + }, + { + "match_key_handle": 3, + "byte_order": "NETWORK", + "byte_array_index": 10, + "start_bit_offset": 0, "bit_width": 16 } ], "default_action_handle": 21257015, "actions": [ { - "name": "linux_networking_control.ipsec_protect_set_metadata", - "handle": 20682322, + "name": "NoAction", + "handle": 21257015, "constant_default_action": false, "is_compiler_added_action": false, - "allowed_as_hit_action": true, - "allowed_as_default_action": false, - "p4_parameters": [ - { - "name": "saidx", - "bit_width": 24 - } - ] - }, - { - "name": "linux_networking_control.ipsec_bypass", - "handle": 19192368, - "constant_default_action": false, - "is_compiler_added_action": false, - "allowed_as_hit_action": true, - "allowed_as_default_action": false, - "p4_parameters": [] - }, - { - "name": "NoAction", - "handle": 21257015, - "constant_default_action": true, - "is_compiler_added_action": false, "allowed_as_hit_action": false, "allowed_as_default_action": true, "p4_parameters": [] @@ -11485,125 +11368,13 @@ "match_attributes": { "hardware_blocks": [ { - "name": "LEM", - "id": 2, - "hw_interface": "ConfigQueue", + "name": "HASH", + "id": 5, + "hw_interface": "MMIO", "profile": [ - 10 + 2 ], - "obj_id": 0, - "hash_size": 325632, "action_format": [ - { - "action_name": "linux_networking_control.ipsec_protect_set_metadata", - "action_handle": 20682322, - "immediate_fields": [ - { - "param_name": "saidx", - "param_handle": 0, - "dest_start": 0, - "start_bit_offset": 0, - "dest_width": 24 - } - ], - "hw_actions_list": [ - { - "prec": 7, - "action_code": "SET1B_24b", - "index": 0, - "setmd_action_code": "SET_8b", - "parameters": [ - { - "param_name": "saidx", - "param_handle": 0, - "param_start_bit": 0, - "param_value_length": 8, - "value_start_bit": 0, - "byte_order": "HOST" - } - ], - "mask": 255, - "type_id": 0, - "offset": 15 - }, - { - "prec": 7, - "action_code": "SET1B_24b", - "index": 3, - "setmd_action_code": "SET_16b", - "parameters": [ - { - "param_name": "saidx", - "param_handle": 0, - "param_start_bit": 8, - "param_value_length": 16, - "value_start_bit": 0, - "byte_order": "HOST" - } - ], - "type_id": 0, - "offset": 8 - }, - { - "prec": 7, - "action_code": "SET1B_24b", - "index": 4, - "setmd_action_code": "SET_8b", - "value": 3, - "mask": 3, - "type_id": 0, - "offset": 1 - }, - { - "prec": 7, - "action_code": "SET1B_24b", - "index": 5, - "setmd_action_code": "SET_8b", - "value": 0, - "mask": 4, - "type_id": 0, - "offset": 3 - }, - { - "prec": 3, - "action_code": "SET2_8b", - "index": 11 - }, - { - "prec": 3, - "action_code": "SET1A_24b", - "index": 7, - "pool_id": 3 - } - ] - }, - { - "action_name": "linux_networking_control.ipsec_bypass", - "action_handle": 19192368, - "immediate_fields": [], - "hw_actions_list": [ - { - "prec": 7, - "action_code": "SET1B_24b", - "index": 4, - "setmd_action_code": "SET_8b", - "value": 0, - "mask": 3, - "type_id": 0, - "offset": 1 - }, - { - "prec": 7, - "action_code": "SET1B_24b", - "index": 5, - "setmd_action_code": "SET_8b", - "value": 4, - "mask": 4, - "type_id": 0, - "offset": 3 - } - ] - }, { "action_name": "NoAction", "action_handle": 21257015, @@ -11617,39 +11388,31 @@ }, { "table_type": "match", - "direction": "TX", - "handle": 45022218, - "name": "linux_networking_control.ipsec_tx_sa_classification_table", + "direction": "RX", + "handle": 45972289, + "name": "linux_networking_control.hash_ipv4", "size": 1024, + "isDefaultSize": true, "add_on_miss": false, "idle_timeout_with_auto_delete": false, "match_key_fields": [ { - "name": "hdrs.ipv4[vmeta.common.depth].dst_ip", - "instance_name": "hdrs.ipv4[vmeta.common.depth].dst_ip", - "field_name": "hdrs.ipv4[vmeta.common.depth].dst_ip", - "match_type": "exact", + "name": "hdrs.ipv4[vmeta.common.depth].src_ip", + "instance_name": "hdrs.ipv4[vmeta.common.depth].src_ip", + "field_name": "hdrs.ipv4[vmeta.common.depth].src_ip", + "match_type": "selector", "bit_width": 32, "index": 0, "position": 0 }, { - "name": "hdrs.ipv4[vmeta.common.depth].protocol", - "instance_name": "hdrs.ipv4[vmeta.common.depth].protocol", - "field_name": "hdrs.ipv4[vmeta.common.depth].protocol", - "match_type": "exact", - "bit_width": 8, + "name": "hdrs.ipv4[vmeta.common.depth].dst_ip", + "instance_name": "hdrs.ipv4[vmeta.common.depth].dst_ip", + "field_name": "hdrs.ipv4[vmeta.common.depth].dst_ip", + "match_type": "selector", + "bit_width": 32, "index": 1, "position": 4 - }, - { - "name": "user_meta.cmeta.is_tunnel", - "instance_name": "user_meta.cmeta.is_tunnel", - "field_name": "user_meta.cmeta.is_tunnel", - "match_type": "exact", - "bit_width": 1, - "index": 2, - "position": 5 } ], "match_key_format": [ @@ -11665,86 +11428,15 @@ "byte_order": "NETWORK", "byte_array_index": 4, "start_bit_offset": 0, - "bit_width": 16 - }, - { - "match_key_handle": 2, - "byte_order": "HOST", - "byte_array_index": 6, - "start_bit_offset": 1, - "bit_width": 16 + "bit_width": 32 } ], "default_action_handle": 21257015, - "max_default_actions": 4, "actions": [ - { - "name": "linux_networking_control.tx_ipsec_transport", - "handle": 24935652, - "constant_default_action": false, - "is_compiler_added_action": false, - "allowed_as_hit_action": true, - "allowed_as_default_action": false, - "p4_parameters": [] - }, - { - "name": "linux_networking_control.tx_ipsec_transport_with_underlay", - "handle": 17885953, - "constant_default_action": false, - "is_compiler_added_action": false, - "allowed_as_hit_action": true, - "allowed_as_default_action": false, - "p4_parameters": [] - }, - { - "name": "linux_networking_control.tx_ipsec_tunnel", - "handle": 30154712, - "constant_default_action": false, - "is_compiler_added_action": false, - "allowed_as_hit_action": true, - "allowed_as_default_action": false, - "p4_parameters": [ - { - "name": "dst_addr", - "bit_width": 32 - } - ] - }, - { - "name": "linux_networking_control.tx_ipsec_tunnel_v6", - "handle": 29527637, - "constant_default_action": false, - "is_compiler_added_action": false, - "allowed_as_hit_action": true, - "allowed_as_default_action": false, - "p4_parameters": [ - { - "name": "dst_addr_1", - "bit_width": 32 - }, - { - "name": "dst_addr_2", - "bit_width": 32 - }, - { - "name": "dst_addr_3", - "bit_width": 16 - } - ] - }, - { - "name": "linux_networking_control.drop", - "handle": 29238102, - "constant_default_action": false, - "is_compiler_added_action": false, - "allowed_as_hit_action": true, - "allowed_as_default_action": false, - "p4_parameters": [] - }, { "name": "NoAction", "handle": 21257015, - "constant_default_action": true, + "constant_default_action": false, "is_compiler_added_action": false, "allowed_as_hit_action": false, "allowed_as_default_action": true, @@ -11754,266 +11446,13 @@ "match_attributes": { "hardware_blocks": [ { - "name": "SEM", - "id": 0, - "hw_interface": "ConfigQueue", + "name": "HASH", + "id": 5, + "hw_interface": "MMIO", "profile": [ - 14 + 3 ], - "sub_profile": 2, - "obj_id": 2, - "hash_size": 325632, "action_format": [ - { - "action_name": "linux_networking_control.tx_ipsec_transport", - "action_handle": 24935652, - "immediate_fields": [], - "hw_actions_list": [ - { - "prec": 7, - "action_code": "SET1B_24b", - "index": 0, - "setmd_action_code": "SET_8b", - "value": 64, - "mask": 64, - "type_id": 4, - "offset": 0 - }, - { - "prec": 1, - "action_code": "SET1A_24b", - "index": 9, - "mod_profile": 17, - "prefetch": 0 - }, - { - "prec": 3, - "action_code": "SET2_8b", - "index": 11 - }, - { - "prec": 3, - "action_code": "SET1A_24b", - "index": 6, - "pool_id": 2 - } - ] - }, - { - "action_name": "linux_networking_control.tx_ipsec_transport_with_underlay", - "action_handle": 17885953, - "immediate_fields": [], - "hw_actions_list": [ - { - "prec": 7, - "action_code": "SET1B_24b", - "index": 0, - "setmd_action_code": "SET_8b", - "value": 64, - "mask": 64, - "type_id": 4, - "offset": 0 - }, - { - "prec": 1, - "action_code": "SET1A_24b", - "index": 9, - "mod_profile": 18, - "prefetch": 0 - }, - { - "prec": 3, - "action_code": "SET2_8b", - "index": 11 - }, - { - "prec": 3, - "action_code": "SET1A_24b", - "index": 6, - "pool_id": 2 - } - ] - }, - { - "action_name": "linux_networking_control.tx_ipsec_tunnel", - "action_handle": 30154712, - "immediate_fields": [ - { - "param_name": "dst_addr", - "param_handle": 0, - "dest_start": 0, - "start_bit_offset": 0, - "dest_width": 32 - } - ], - "hw_actions_list": [ - { - "prec": 7, - "action_code": "SET1B_24b", - "index": 0, - "setmd_action_code": "SET_32b_AUX", - "parameters": [ - { - "param_name": "dst_addr", - "param_handle": 0, - "param_start_bit": 0, - "param_value_length": 32, - "value_start_bit": 0, - "byte_order": "NETWORK" - } - ] - }, - { - "prec": 7, - "action_code": "AUX_DATA", - "index": 0, - "type_id": 4, - "offset": 28 - }, - { - "prec": 7, - "action_code": "SET1B_24b", - "index": 1, - "setmd_action_code": "SET_8b", - "value": 4, - "mask": 7, - "type_id": 4, - "offset": 4 - }, - { - "prec": 7, - "action_code": "SET10_1b", - "index": 0, - "value": 64, - "mask": 112 - }, - { - "prec": 3, - "action_code": "SET2_8b", - "index": 11 - }, - { - "prec": 3, - "action_code": "SET1A_24b", - "index": 6, - "pool_id": 2 - } - ] - }, - { - "action_name": "linux_networking_control.tx_ipsec_tunnel_v6", - "action_handle": 29527637, - "immediate_fields": [ - { - "param_name": "dst_addr_1", - "param_handle": 0, - "dest_start": 0, - "start_bit_offset": 0, - "dest_width": 32 - }, - { - "param_name": "dst_addr_2", - "param_handle": 1, - "dest_start": 4, - "start_bit_offset": 0, - "dest_width": 32 - }, - { - "param_name": "dst_addr_3", - "param_handle": 2, - "dest_start": 8, - "start_bit_offset": 0, - "dest_width": 16 - } - ], - "hw_actions_list": [ - { - "prec": 7, - "action_code": "SET1B_24b", - "index": 0, - "setmd_action_code": "SET_32b_AUX", - "parameters": [ - { - "param_name": "dst_addr_1", - "param_handle": 0, - "param_start_bit": 0, - "param_value_length": 32, - "value_start_bit": 0, - "byte_order": "NETWORK" - } - ] - }, - { - "prec": 7, - "action_code": "AUX_DATA", - "index": 0, - "type_id": 4, - "offset": 28 - }, - { - "prec": 7, - "action_code": "SET1B_24b", - "index": 1, - "setmd_action_code": "SET_32b_AUX", - "parameters": [ - { - "param_name": "dst_addr_2", - "param_handle": 1, - "param_start_bit": 0, - "param_value_length": 32, - "value_start_bit": 0, - "byte_order": "NETWORK" - } - ] - }, - { - "prec": 7, - "action_code": "AUX_DATA", - "index": 1, - "type_id": 4, - "offset": 24 - }, - { - "prec": 7, - "action_code": "SET1B_24b", - "index": 5, - "setmd_action_code": "SET_16b", - "parameters": [ - { - "param_name": "dst_addr_3", - "param_handle": 2, - "param_start_bit": 0, - "param_value_length": 16, - "value_start_bit": 0, - "byte_order": "NETWORK" - } - ], - "type_id": 4, - "offset": 11 - }, - { - "prec": 7, - "action_code": "SET10_1b", - "index": 0, - "value": 64, - "mask": 112 - } - ] - }, - { - "action_name": "linux_networking_control.drop", - "action_handle": 29238102, - "immediate_fields": [], - "hw_actions_list": [ - { - "prec": 7, - "action_code": "SET10_1b", - "index": 0, - "value": 1, - "mask": 1 - } - ] - }, { "action_name": "NoAction", "action_handle": 21257015, @@ -12027,51 +11466,149 @@ }, { "table_type": "match", - "direction": "BIDIRECTIONAL", - "handle": 37326952, - "name": "linux_networking_control.ipsec_tunnel_encap_mod_table", + "direction": "RX", + "handle": 33896331, + "name": "linux_networking_control.hash_l2", "size": 1024, + "isDefaultSize": true, "add_on_miss": false, "idle_timeout_with_auto_delete": false, "match_key_fields": [ { - "name": "vmeta.common.mod_blob_ptr", - "instance_name": "vmeta.common.mod_blob_ptr", - "field_name": "vmeta.common.mod_blob_ptr", - "match_type": "exact", - "bit_width": 24, + "name": "hdrs.mac[vmeta.common.depth].sa", + "instance_name": "hdrs.mac[vmeta.common.depth].sa", + "field_name": "hdrs.mac[vmeta.common.depth].sa", + "match_type": "selector", + "bit_width": 48, "index": 0, "position": 0 + }, + { + "name": "hdrs.mac[vmeta.common.depth].da", + "instance_name": "hdrs.mac[vmeta.common.depth].da", + "field_name": "hdrs.mac[vmeta.common.depth].da", + "match_type": "selector", + "bit_width": 48, + "index": 1, + "position": 6 } ], "default_action_handle": 21257015, "actions": [ { - "name": "linux_networking_control.ipsec_tunnel_encap_mod", - "handle": 30081157, + "name": "NoAction", + "handle": 21257015, "constant_default_action": false, "is_compiler_added_action": false, - "allowed_as_hit_action": true, - "allowed_as_default_action": false, - "p4_parameters": [ - { - "name": "ipsec_src_addr", - "bit_width": 32 - }, - { - "name": "ipsec_dst_addr", - "bit_width": 32 - }, - { - "name": "proto", - "bit_width": 8 - } - ] + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "HASH", + "id": 5, + "hw_interface": "MMIO", + "profile": [ + 10 + ], + "action_format": [ + { + "action_name": "NoAction", + "action_handle": 21257015, + "immediate_fields": [], + "hw_actions_list": [] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "RX", + "handle": 46852435, + "name": "linux_networking_control.hash_ipv6_tcp", + "size": 1024, + "isDefaultSize": true, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "hdrs.ipv6[vmeta.common.depth].src_ip", + "instance_name": "hdrs.ipv6[vmeta.common.depth].src_ip", + "field_name": "hdrs.ipv6[vmeta.common.depth].src_ip", + "match_type": "selector", + "bit_width": 128, + "index": 0, + "position": 0 + }, + { + "name": "hdrs.ipv6[vmeta.common.depth].dst_ip", + "instance_name": "hdrs.ipv6[vmeta.common.depth].dst_ip", + "field_name": "hdrs.ipv6[vmeta.common.depth].dst_ip", + "match_type": "selector", + "bit_width": 128, + "index": 1, + "position": 16 + }, + { + "name": "hdrs.tcp.sport", + "instance_name": "hdrs.tcp", + "field_name": "sport", + "match_type": "selector", + "bit_width": 16, + "index": 2, + "position": 32 + }, + { + "name": "hdrs.tcp.dport", + "instance_name": "hdrs.tcp", + "field_name": "dport", + "match_type": "selector", + "bit_width": 16, + "index": 3, + "position": 34 + } + ], + "match_key_format": [ + { + "match_key_handle": 0, + "byte_order": "NETWORK", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 128 + }, + { + "match_key_handle": 1, + "byte_order": "NETWORK", + "byte_array_index": 16, + "start_bit_offset": 0, + "bit_width": 128 + }, + { + "match_key_handle": 2, + "byte_order": "NETWORK", + "byte_array_index": 32, + "start_bit_offset": 0, + "bit_width": 16 }, + { + "match_key_handle": 3, + "byte_order": "NETWORK", + "byte_array_index": 34, + "start_bit_offset": 0, + "bit_width": 16 + } + ], + "default_action_handle": 21257015, + "actions": [ { "name": "NoAction", "handle": 21257015, - "constant_default_action": true, + "constant_default_action": false, "is_compiler_added_action": false, "allowed_as_hit_action": false, "allowed_as_default_action": true, @@ -12081,253 +11618,13 @@ "match_attributes": { "hardware_blocks": [ { - "name": "MOD", - "id": 7, - "hw_interface": "ConfigQueue", - "hw_resource": "MOD_CONTENT", - "hw_resource_id": 0, + "name": "HASH", + "id": 5, + "hw_interface": "MMIO", "profile": [ - 16 + 4 ], "action_format": [ - { - "action_name": "linux_networking_control.ipsec_tunnel_encap_mod", - "action_handle": 30081157, - "immediate_fields": [ - { - "param_name": "ipsec_src_addr", - "param_handle": 0, - "dest_start": 0, - "start_bit_offset": 0, - "dest_width": 32 - }, - { - "param_name": "ipsec_dst_addr", - "param_handle": 1, - "dest_start": 4, - "start_bit_offset": 0, - "dest_width": 32 - }, - { - "param_name": "proto", - "param_handle": 2, - "dest_start": 8, - "start_bit_offset": 0, - "dest_width": 8 - } - ], - "mod_content_format": { - "mod_profile": 16, - "mod_obj_size": 1, - "mod_fields": [ - { - "name": "version", - "handle": 0, - "type": "constant", - "byte_order": "NETWORK", - "byte_array_index": 0, - "start_bit_offset": 0, - "bit_width": 4, - "value": [ - 4 - ] - }, - { - "name": "ihl", - "handle": 1, - "type": "constant", - "byte_order": "NETWORK", - "byte_array_index": 0, - "start_bit_offset": 4, - "bit_width": 4, - "value": [ - 5 - ] - }, - { - "name": "dscp", - "handle": 2, - "type": "constant", - "byte_order": "NETWORK", - "byte_array_index": 1, - "start_bit_offset": 0, - "bit_width": 6, - "value": [ - 0 - ] - }, - { - "name": "ecn", - "handle": 3, - "type": "constant", - "byte_order": "NETWORK", - "byte_array_index": 1, - "start_bit_offset": 6, - "bit_width": 2, - "value": [ - 0 - ] - }, - { - "name": "length", - "handle": 4, - "type": "constant", - "byte_order": "NETWORK", - "byte_array_index": 2, - "start_bit_offset": 0, - "bit_width": 16, - "value": [ - 0, - 0 - ] - }, - { - "name": "identification", - "handle": 5, - "type": "constant", - "byte_order": "NETWORK", - "byte_array_index": 4, - "start_bit_offset": 0, - "bit_width": 16, - "value": [ - 0, - 0 - ] - }, - { - "name": "rsvd", - "handle": 6, - "type": "constant", - "byte_order": "NETWORK", - "byte_array_index": 6, - "start_bit_offset": 0, - "bit_width": 1, - "value": [ - 0 - ] - }, - { - "name": "df", - "handle": 7, - "type": "constant", - "byte_order": "NETWORK", - "byte_array_index": 6, - "start_bit_offset": 1, - "bit_width": 1, - "value": [ - 1 - ] - }, - { - "name": "mf", - "handle": 8, - "type": "constant", - "byte_order": "NETWORK", - "byte_array_index": 6, - "start_bit_offset": 2, - "bit_width": 1, - "value": [ - 0 - ] - }, - { - "name": "frag_off", - "handle": 9, - "type": "constant", - "byte_order": "NETWORK", - "byte_array_index": 6, - "start_bit_offset": 3, - "bit_width": 5, - "value": [ - 0 - ] - }, - { - "name": "frag_off", - "handle": 10, - "type": "constant", - "byte_order": "NETWORK", - "byte_array_index": 7, - "start_bit_offset": 0, - "bit_width": 3, - "value": [ - 0 - ] - }, - { - "name": "frag_off", - "handle": 11, - "type": "constant", - "byte_order": "NETWORK", - "byte_array_index": 7, - "start_bit_offset": 3, - "bit_width": 5, - "value": [ - 0 - ] - }, - { - "name": "ttl", - "handle": 12, - "type": "constant", - "byte_order": "NETWORK", - "byte_array_index": 8, - "start_bit_offset": 0, - "bit_width": 8, - "value": [ - 64 - ] - }, - { - "name": "proto", - "handle": 13, - "param_handle": 2, - "type": "parameter", - "byte_order": "NETWORK", - "byte_array_index": 9, - "start_bit_offset": 0, - "bit_width": 8, - "value": [] - }, - { - "name": "csum", - "handle": 14, - "type": "constant", - "byte_order": "NETWORK", - "byte_array_index": 10, - "start_bit_offset": 0, - "bit_width": 16, - "value": [ - 0, - 1 - ] - }, - { - "name": "ipsec_src_addr", - "handle": 15, - "param_handle": 0, - "type": "parameter", - "byte_order": "NETWORK", - "byte_array_index": 12, - "start_bit_offset": 0, - "bit_width": 32, - "value": [] - }, - { - "name": "ipsec_dst_addr", - "handle": 16, - "param_handle": 1, - "type": "parameter", - "byte_order": "NETWORK", - "byte_array_index": 16, - "start_bit_offset": 0, - "bit_width": 32, - "value": [] - } - ] - }, - "hw_actions_list": [] - }, { "action_name": "NoAction", "action_handle": 21257015, @@ -12342,29 +11639,48 @@ { "table_type": "match", "direction": "RX", - "handle": 43475471, - "name": "linux_networking_control.ipv4_ipsec_tunnel_term_table", + "handle": 46359163, + "name": "linux_networking_control.hash_ipv6_udp", "size": 1024, + "isDefaultSize": true, "add_on_miss": false, "idle_timeout_with_auto_delete": false, "match_key_fields": [ { - "name": "ipv4_src", - "instance_name": "ipv4_src", - "field_name": "ipv4_src", - "match_type": "exact", - "bit_width": 32, + "name": "hdrs.ipv6[vmeta.common.depth].src_ip", + "instance_name": "hdrs.ipv6[vmeta.common.depth].src_ip", + "field_name": "hdrs.ipv6[vmeta.common.depth].src_ip", + "match_type": "selector", + "bit_width": 128, "index": 0, "position": 0 }, { - "name": "ipv4_dst", - "instance_name": "ipv4_dst", - "field_name": "ipv4_dst", - "match_type": "exact", - "bit_width": 32, + "name": "hdrs.ipv6[vmeta.common.depth].dst_ip", + "instance_name": "hdrs.ipv6[vmeta.common.depth].dst_ip", + "field_name": "hdrs.ipv6[vmeta.common.depth].dst_ip", + "match_type": "selector", + "bit_width": 128, "index": 1, - "position": 4 + "position": 16 + }, + { + "name": "hdrs.udp[vmeta.common.depth].sport", + "instance_name": "hdrs.udp[vmeta.common.depth].sport", + "field_name": "hdrs.udp[vmeta.common.depth].sport", + "match_type": "selector", + "bit_width": 16, + "index": 2, + "position": 32 + }, + { + "name": "hdrs.udp[vmeta.common.depth].dport", + "instance_name": "hdrs.udp[vmeta.common.depth].dport", + "field_name": "hdrs.udp[vmeta.common.depth].dport", + "match_type": "selector", + "bit_width": 16, + "index": 3, + "position": 34 } ], "match_key_format": [ @@ -12373,32 +11689,98 @@ "byte_order": "NETWORK", "byte_array_index": 0, "start_bit_offset": 0, - "bit_width": 32 + "bit_width": 128 }, { "match_key_handle": 1, "byte_order": "NETWORK", - "byte_array_index": 4, + "byte_array_index": 16, "start_bit_offset": 0, - "bit_width": 32 + "bit_width": 128 + }, + { + "match_key_handle": 2, + "byte_order": "NETWORK", + "byte_array_index": 32, + "start_bit_offset": 0, + "bit_width": 16 + }, + { + "match_key_handle": 3, + "byte_order": "NETWORK", + "byte_array_index": 34, + "start_bit_offset": 0, + "bit_width": 16 } ], - "default_action_handle": 33275382, - "max_default_actions": 4, + "default_action_handle": 21257015, "actions": [ { - "name": "linux_networking_control.decap_ipsec_tunnel_hdr", - "handle": 25138331, + "name": "NoAction", + "handle": 21257015, "constant_default_action": false, "is_compiler_added_action": false, - "allowed_as_hit_action": true, - "allowed_as_default_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "HASH", + "id": 5, + "hw_interface": "MMIO", + "profile": [ + 5 + ], + "action_format": [ + { + "action_name": "NoAction", + "action_handle": 21257015, + "immediate_fields": [], + "hw_actions_list": [] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "RX", + "handle": 34506208, + "name": "linux_networking_control.hash_ipv6", + "size": 1024, + "isDefaultSize": true, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "hdrs.ipv6[vmeta.common.depth].src_ip", + "instance_name": "hdrs.ipv6[vmeta.common.depth].src_ip", + "field_name": "hdrs.ipv6[vmeta.common.depth].src_ip", + "match_type": "selector", + "bit_width": 128, + "index": 0, + "position": 0 }, { - "name": "linux_networking_control.do_recirculate", - "handle": 33275382, - "constant_default_action": true, + "name": "hdrs.ipv6[vmeta.common.depth].dst_ip", + "instance_name": "hdrs.ipv6[vmeta.common.depth].dst_ip", + "field_name": "hdrs.ipv6[vmeta.common.depth].dst_ip", + "match_type": "selector", + "bit_width": 128, + "index": 1, + "position": 16 + } + ], + "default_action_handle": 21257015, + "actions": [ + { + "name": "NoAction", + "handle": 21257015, + "constant_default_action": false, "is_compiler_added_action": false, "allowed_as_hit_action": false, "allowed_as_default_action": true, @@ -12408,75 +11790,18 @@ "match_attributes": { "hardware_blocks": [ { - "name": "SEM", - "id": 0, - "hw_interface": "ConfigQueue", + "name": "HASH", + "id": 5, + "hw_interface": "MMIO", "profile": [ - 13 + 6 ], - "sub_profile": 0, - "obj_id": 1, - "hash_size": 325632, "action_format": [ { - "action_name": "linux_networking_control.decap_ipsec_tunnel_hdr", - "action_handle": 25138331, + "action_name": "NoAction", + "action_handle": 21257015, "immediate_fields": [], - "hw_actions_list": [ - { - "prec": 7, - "action_code": "SET1B_24b", - "index": 2, - "setmd_action_code": "SET_8b", - "value": 2, - "mask": 2, - "type_id": 4, - "offset": 0 - }, - { - "prec": 1, - "action_code": "SET1A_24b", - "index": 9, - "mod_profile": 19, - "prefetch": 0 - }, - { - "prec": 7, - "action_code": "SET10_1b", - "index": 0, - "value": 64, - "mask": 112 - } - ] - }, - { - "action_name": "linux_networking_control.do_recirculate", - "action_handle": 33275382, - "immediate_fields": [], - "hw_actions_list": [ - { - "prec": 7, - "action_code": "SET10_1b", - "index": 0, - "value": 64, - "mask": 112 - } - ] - } - ], - "default_action_format": [ - { - "action_name": "linux_networking_control.do_recirculate", - "action_handle": 33275382, - "hw_actions_list": [ - { - "prec": 7, - "action_code": "SET10_1b", - "index": 0, - "value": 64, - "mask": 112 - } - ] + "hw_actions_list": [] } ] } @@ -12485,60 +11810,68 @@ }, { "table_type": "match", - "direction": "RX", - "handle": 37403444, - "name": "linux_networking_control.vm_src_ip4_mac_map_table", + "direction": "TX", + "handle": 49349790, + "name": "linux_networking_control.ipsec_tunnel_table", "size": 1024, "add_on_miss": false, "idle_timeout_with_auto_delete": false, "match_key_fields": [ { - "name": "ipv4_src", - "instance_name": "ipv4_src", - "field_name": "ipv4_src", + "name": "vmeta.common.saidx", + "instance_name": "vmeta.common.saidx", + "field_name": "vmeta.common.saidx", "match_type": "exact", - "bit_width": 32, + "bit_width": 24, "index": 0, "position": 0 + }, + { + "name": "bit16_zeros", + "instance_name": "bit16_zeros", + "field_name": "bit16_zeros", + "match_type": "exact", + "bit_width": 13, + "index": 1, + "position": 3 } ], "match_key_format": [ { "match_key_handle": 0, - "byte_order": "NETWORK", + "byte_order": "HOST", "byte_array_index": 0, "start_bit_offset": 0, "bit_width": 32 + }, + { + "match_key_handle": 1, + "byte_order": "HOST", + "byte_array_index": 4, + "start_bit_offset": 3, + "bit_width": 16 } ], "default_action_handle": 21257015, "actions": [ { - "name": "linux_networking_control.vm_src_ip4_mac_map_action", - "handle": 28718673, + "name": "linux_networking_control.set_ipsec_tunnel", + "handle": 26423957, "constant_default_action": false, "is_compiler_added_action": false, "allowed_as_hit_action": true, "allowed_as_default_action": false, "p4_parameters": [ { - "name": "smac_high", - "bit_width": 16 - }, - { - "name": "smac_mid", - "bit_width": 16 - }, - { - "name": "smac_low", - "bit_width": 16 + "name": "tunnel_id", + "bit_width": 24 } ] }, { "name": "NoAction", "handle": 21257015, - "constant_default_action": true, + "constant_default_action": false, "is_compiler_added_action": false, "allowed_as_hit_action": false, "allowed_as_default_action": true, @@ -12552,91 +11885,46 @@ "id": 2, "hw_interface": "ConfigQueue", "profile": [ - 7 + 11 ], - "obj_id": 0, "hash_size": 325632, "action_format": [ { - "action_name": "linux_networking_control.vm_src_ip4_mac_map_action", - "action_handle": 28718673, + "action_name": "linux_networking_control.set_ipsec_tunnel", + "action_handle": 26423957, "immediate_fields": [ { - "param_name": "smac_high", + "param_name": "tunnel_id", "param_handle": 0, "dest_start": 0, "start_bit_offset": 0, - "dest_width": 16 - }, - { - "param_name": "smac_mid", - "param_handle": 1, - "dest_start": 2, - "start_bit_offset": 0, - "dest_width": 16 - }, - { - "param_name": "smac_low", - "param_handle": 2, - "dest_start": 4, - "start_bit_offset": 0, - "dest_width": 16 + "dest_width": 24 } ], "hw_actions_list": [ { - "prec": 7, - "action_code": "SET1B_24b", - "index": 5, - "setmd_action_code": "SET_16b", - "parameters": [ - { - "param_name": "smac_high", - "param_handle": 0, - "param_start_bit": 0, - "param_value_length": 16, - "value_start_bit": 0, - "byte_order": "HOST" - } - ], - "type_id": 4, - "offset": 7 - }, - { - "prec": 7, - "action_code": "SET1B_24b", - "index": 4, - "setmd_action_code": "SET_16b", - "parameters": [ - { - "param_name": "smac_mid", - "param_handle": 1, - "param_start_bit": 0, - "param_value_length": 16, - "value_start_bit": 0, - "byte_order": "HOST" - } - ], - "type_id": 4, - "offset": 6 + "prec": 1, + "action_code": "SET1A_24b", + "index": 9, + "mod_profile": 16, + "prefetch": 1 }, { - "prec": 7, - "action_code": "SET1B_24b", - "index": 3, - "setmd_action_code": "SET_16b", + "prec": 1, + "action_code": "SET1A_24b", + "index": 0, "parameters": [ { - "param_name": "smac_low", - "param_handle": 2, + "param_name": "tunnel_id", + "param_handle": 0, "param_start_bit": 0, - "param_value_length": 16, + "param_value_length": 24, "value_start_bit": 0, "byte_order": "HOST" } ], - "type_id": 4, - "offset": 5 + "p4_ref_action_handle": 30081157, + "p4_ref_table_handle": 37326952 } ] }, @@ -12653,21 +11941,30 @@ }, { "table_type": "match", - "direction": "RX", - "handle": 50085764, - "name": "linux_networking_control.vm_dst_ip4_mac_map_table", + "direction": "TX", + "handle": 47756035, + "name": "linux_networking_control.ipsec_spd", "size": 1024, "add_on_miss": false, "idle_timeout_with_auto_delete": false, "match_key_fields": [ { - "name": "ipv4_dst", - "instance_name": "ipv4_dst", - "field_name": "ipv4_dst", + "name": "hdrs.ipv4[vmeta.common.depth].dst_ip", + "instance_name": "hdrs.ipv4[vmeta.common.depth].dst_ip", + "field_name": "hdrs.ipv4[vmeta.common.depth].dst_ip", "match_type": "exact", "bit_width": 32, "index": 0, "position": 0 + }, + { + "name": "hdrs.ipv4[vmeta.common.depth].protocol", + "instance_name": "hdrs.ipv4[vmeta.common.depth].protocol", + "field_name": "hdrs.ipv4[vmeta.common.depth].protocol", + "match_type": "exact", + "bit_width": 8, + "index": 1, + "position": 4 } ], "match_key_format": [ @@ -12677,32 +11974,40 @@ "byte_array_index": 0, "start_bit_offset": 0, "bit_width": 32 + }, + { + "match_key_handle": 1, + "byte_order": "NETWORK", + "byte_array_index": 4, + "start_bit_offset": 0, + "bit_width": 16 } ], "default_action_handle": 21257015, "actions": [ { - "name": "linux_networking_control.vm_dst_ip4_mac_map_action", - "handle": 25018769, + "name": "linux_networking_control.ipsec_protect_set_metadata", + "handle": 20682322, "constant_default_action": false, "is_compiler_added_action": false, "allowed_as_hit_action": true, "allowed_as_default_action": false, "p4_parameters": [ { - "name": "dmac_high", - "bit_width": 16 - }, - { - "name": "dmac_mid", - "bit_width": 16 - }, - { - "name": "dmac_low", - "bit_width": 16 + "name": "saidx", + "bit_width": 24 } ] }, + { + "name": "linux_networking_control.ipsec_bypass", + "handle": 19192368, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [] + }, { "name": "NoAction", "handle": 21257015, @@ -12720,91 +12025,117 @@ "id": 2, "hw_interface": "ConfigQueue", "profile": [ - 8 + 10 ], - "obj_id": 0, "hash_size": 325632, "action_format": [ { - "action_name": "linux_networking_control.vm_dst_ip4_mac_map_action", - "action_handle": 25018769, + "action_name": "linux_networking_control.ipsec_protect_set_metadata", + "action_handle": 20682322, "immediate_fields": [ { - "param_name": "dmac_high", + "param_name": "saidx", "param_handle": 0, "dest_start": 0, "start_bit_offset": 0, - "dest_width": 16 - }, + "dest_width": 24 + } + ], + "hw_actions_list": [ { - "param_name": "dmac_mid", - "param_handle": 1, - "dest_start": 2, - "start_bit_offset": 0, - "dest_width": 16 + "prec": 3, + "action_code": "SET2_8b", + "index": 11 }, { - "param_name": "dmac_low", - "param_handle": 2, - "dest_start": 4, - "start_bit_offset": 0, - "dest_width": 16 - } - ], - "hw_actions_list": [ + "prec": 3, + "action_code": "SET1A_24b", + "index": 7, + "pool_id": 3 + }, { "prec": 7, "action_code": "SET1B_24b", "index": 2, - "setmd_action_code": "SET_16b", + "setmd_action_code": "SET_8b", "parameters": [ { - "param_name": "dmac_high", + "param_name": "saidx", "param_handle": 0, "param_start_bit": 0, - "param_value_length": 16, + "param_value_length": 8, "value_start_bit": 0, "byte_order": "HOST" } ], - "type_id": 4, - "offset": 10 + "mask": 255, + "type_id": 0, + "offset": 15 }, { "prec": 7, "action_code": "SET1B_24b", - "index": 1, + "index": 3, "setmd_action_code": "SET_16b", "parameters": [ { - "param_name": "dmac_mid", - "param_handle": 1, - "param_start_bit": 0, + "param_name": "saidx", + "param_handle": 0, + "param_start_bit": 8, "param_value_length": 16, "value_start_bit": 0, "byte_order": "HOST" } ], - "type_id": 4, - "offset": 9 + "type_id": 0, + "offset": 8 }, { "prec": 7, "action_code": "SET1B_24b", - "index": 0, - "setmd_action_code": "SET_16b", - "parameters": [ - { - "param_name": "dmac_low", - "param_handle": 2, - "param_start_bit": 0, - "param_value_length": 16, - "value_start_bit": 0, - "byte_order": "HOST" - } - ], - "type_id": 4, - "offset": 8 + "index": 4, + "setmd_action_code": "SET_8b", + "value": 3, + "mask": 3, + "type_id": 0, + "offset": 1 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 5, + "setmd_action_code": "SET_8b", + "value": 0, + "mask": 4, + "type_id": 0, + "offset": 3 + } + ] + }, + { + "action_name": "linux_networking_control.ipsec_bypass", + "action_handle": 19192368, + "immediate_fields": [], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 4, + "setmd_action_code": "SET_8b", + "value": 0, + "mask": 3, + "type_id": 0, + "offset": 1 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 5, + "setmd_action_code": "SET_8b", + "value": 4, + "mask": 4, + "type_id": 0, + "offset": 3 } ] }, @@ -12821,49 +12152,39 @@ }, { "table_type": "match", - "direction": "RX", - "handle": 8454144, - "name": "linux_networking_control.rss_hash_tcp", + "direction": "TX", + "handle": 45022218, + "name": "linux_networking_control.ipsec_tx_sa_classification_table", "size": 1024, - "isDefaultSize": true, "add_on_miss": false, "idle_timeout_with_auto_delete": false, "match_key_fields": [ { - "name": "hdrs.ipv4[xxpmeta.depth].src_ip", - "instance_name": "hdrs.ipv4[xxpmeta.depth]", - "field_name": "src_ip", - "match_type": "selector", + "name": "hdrs.ipv4[vmeta.common.depth].dst_ip", + "instance_name": "hdrs.ipv4[vmeta.common.depth].dst_ip", + "field_name": "hdrs.ipv4[vmeta.common.depth].dst_ip", + "match_type": "exact", "bit_width": 32, "index": 0, "position": 0 }, { - "name": "hdrs.ipv4[xxpmeta.depth].dst_ip", - "instance_name": "hdrs.ipv4[xxpmeta.depth]", - "field_name": "dst_ip", - "match_type": "selector", - "bit_width": 32, + "name": "hdrs.ipv4[vmeta.common.depth].protocol", + "instance_name": "hdrs.ipv4[vmeta.common.depth].protocol", + "field_name": "hdrs.ipv4[vmeta.common.depth].protocol", + "match_type": "exact", + "bit_width": 8, "index": 1, "position": 4 }, { - "name": "hdrs.tcp.sport", - "instance_name": "hdrs.tcp", - "field_name": "sport", - "match_type": "selector", - "bit_width": 16, + "name": "user_meta.cmeta.is_tunnel", + "instance_name": "user_meta.cmeta.is_tunnel", + "field_name": "user_meta.cmeta.is_tunnel", + "match_type": "exact", + "bit_width": 1, "index": 2, - "position": 8 - }, - { - "name": "hdrs.tcp.dport", - "instance_name": "hdrs.tcp", - "field_name": "dport", - "match_type": "selector", - "bit_width": 16, - "index": 3, - "position": 10 + "position": 5 } ], "match_key_format": [ @@ -12879,128 +12200,690 @@ "byte_order": "NETWORK", "byte_array_index": 4, "start_bit_offset": 0, - "bit_width": 32 - }, - { - "match_key_handle": 2, - "byte_order": "NETWORK", - "byte_array_index": 8, - "start_bit_offset": 0, "bit_width": 16 }, { - "match_key_handle": 3, - "byte_order": "NETWORK", - "byte_array_index": 10, - "start_bit_offset": 0, + "match_key_handle": 2, + "byte_order": "HOST", + "byte_array_index": 6, + "start_bit_offset": 1, "bit_width": 16 } ], - "default_action_handle": 0, - "actions": [], - "match_attributes": { - "hardware_blocks": [ - { - "name": "HASH", - "id": 5, - "hw_interface": "MMIO", - "profile": [ - 1 - ], - "action_format": [] - } - ] - } - }, - { - "table_type": "match", - "direction": "RX", - "handle": 8454145, - "name": "linux_networking_control.rss_hash_udp", - "size": 1024, - "isDefaultSize": true, - "add_on_miss": false, - "idle_timeout_with_auto_delete": false, - "match_key_fields": [ - { - "name": "hdrs.ipv4[xxpmeta.depth].src_ip", - "instance_name": "hdrs.ipv4[xxpmeta.depth]", - "field_name": "src_ip", - "match_type": "selector", - "bit_width": 32, - "index": 0, - "position": 0 - }, + "default_action_handle": 21257015, + "max_default_actions": 4, + "actions": [ { - "name": "hdrs.ipv4[xxpmeta.depth].dst_ip", - "instance_name": "hdrs.ipv4[xxpmeta.depth]", - "field_name": "dst_ip", - "match_type": "selector", - "bit_width": 32, - "index": 1, - "position": 4 + "name": "linux_networking_control.tx_ipsec_transport", + "handle": 24935652, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [] }, { - "name": "hdrs.udp[xxpmeta.depth].sport", - "instance_name": "hdrs.udp[xxpmeta.depth]", - "field_name": "sport", - "match_type": "selector", - "bit_width": 16, - "index": 2, - "position": 8 + "name": "linux_networking_control.tx_ipsec_transport_with_underlay", + "handle": 17885953, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [] }, { - "name": "hdrs.udp[xxpmeta.depth].dport", - "instance_name": "hdrs.udp[xxpmeta.depth]", - "field_name": "dport", - "match_type": "selector", - "bit_width": 16, - "index": 3, - "position": 10 - } - ], - "match_key_format": [ - { - "match_key_handle": 0, - "byte_order": "NETWORK", - "byte_array_index": 0, - "start_bit_offset": 0, - "bit_width": 32 + "name": "linux_networking_control.tx_ipsec_tunnel", + "handle": 30154712, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "dst_addr", + "bit_width": 32 + } + ] }, { - "match_key_handle": 1, - "byte_order": "NETWORK", - "byte_array_index": 4, - "start_bit_offset": 0, - "bit_width": 32 + "name": "linux_networking_control.tx_ipsec_tunnel_v6", + "handle": 29527637, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "dst_addr_1", + "bit_width": 32 + }, + { + "name": "dst_addr_2", + "bit_width": 32 + }, + { + "name": "dst_addr_3", + "bit_width": 16 + } + ] }, { - "match_key_handle": 2, - "byte_order": "NETWORK", - "byte_array_index": 8, - "start_bit_offset": 0, - "bit_width": 16 + "name": "linux_networking_control.drop", + "handle": 29238102, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [] }, { - "match_key_handle": 3, - "byte_order": "NETWORK", - "byte_array_index": 10, - "start_bit_offset": 0, - "bit_width": 16 + "name": "NoAction", + "handle": 21257015, + "constant_default_action": true, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] } ], - "default_action_handle": 0, - "actions": [], "match_attributes": { "hardware_blocks": [ { - "name": "HASH", - "id": 5, - "hw_interface": "MMIO", + "name": "SEM", + "id": 0, + "hw_interface": "ConfigQueue", "profile": [ - 2 + 14 ], - "action_format": [] + "sub_profile": 2, + "obj_id": 2, + "hash_size": 325632, + "action_format": [ + { + "action_name": "linux_networking_control.tx_ipsec_transport", + "action_handle": 24935652, + "immediate_fields": [], + "hw_actions_list": [ + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 9, + "mod_profile": 17, + "prefetch": 0 + }, + { + "prec": 3, + "action_code": "SET2_8b", + "index": 11 + }, + { + "prec": 3, + "action_code": "SET1A_24b", + "index": 6, + "pool_id": 2 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 0, + "setmd_action_code": "SET_8b", + "value": 64, + "mask": 64, + "type_id": 4, + "offset": 0 + } + ] + }, + { + "action_name": "linux_networking_control.tx_ipsec_transport_with_underlay", + "action_handle": 17885953, + "immediate_fields": [], + "hw_actions_list": [ + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 9, + "mod_profile": 18, + "prefetch": 0 + }, + { + "prec": 3, + "action_code": "SET2_8b", + "index": 11 + }, + { + "prec": 3, + "action_code": "SET1A_24b", + "index": 6, + "pool_id": 2 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 0, + "setmd_action_code": "SET_8b", + "value": 64, + "mask": 64, + "type_id": 4, + "offset": 0 + } + ] + }, + { + "action_name": "linux_networking_control.tx_ipsec_tunnel", + "action_handle": 30154712, + "immediate_fields": [ + { + "param_name": "dst_addr", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 32 + } + ], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 64, + "mask": 112 + }, + { + "prec": 3, + "action_code": "SET2_8b", + "index": 11 + }, + { + "prec": 3, + "action_code": "SET1A_24b", + "index": 6, + "pool_id": 2 + }, + { + "prec": 0, + "action_code": "NOP", + "index": 0, + "value": 0, + "mask": 0 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 0, + "setmd_action_code": "SET_32b_AUX", + "parameters": [ + { + "param_name": "dst_addr", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 32, + "value_start_bit": 0, + "byte_order": "NETWORK" + } + ] + }, + { + "prec": 7, + "action_code": "AUX_DATA", + "index": 0, + "type_id": 4, + "offset": 28 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 1, + "setmd_action_code": "SET_8b", + "value": 4, + "mask": 7, + "type_id": 4, + "offset": 4 + } + ] + }, + { + "action_name": "linux_networking_control.tx_ipsec_tunnel_v6", + "action_handle": 29527637, + "immediate_fields": [ + { + "param_name": "dst_addr_1", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 32 + }, + { + "param_name": "dst_addr_2", + "param_handle": 1, + "dest_start": 4, + "start_bit_offset": 0, + "dest_width": 32 + }, + { + "param_name": "dst_addr_3", + "param_handle": 2, + "dest_start": 8, + "start_bit_offset": 0, + "dest_width": 16 + } + ], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 64, + "mask": 112 + }, + { + "prec": 0, + "action_code": "NOP", + "index": 0, + "value": 0, + "mask": 0 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 0, + "setmd_action_code": "SET_32b_AUX", + "parameters": [ + { + "param_name": "dst_addr_1", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 32, + "value_start_bit": 0, + "byte_order": "NETWORK" + } + ] + }, + { + "prec": 7, + "action_code": "AUX_DATA", + "index": 0, + "type_id": 4, + "offset": 28 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 1, + "setmd_action_code": "SET_32b_AUX", + "parameters": [ + { + "param_name": "dst_addr_2", + "param_handle": 1, + "param_start_bit": 0, + "param_value_length": 32, + "value_start_bit": 0, + "byte_order": "NETWORK" + } + ] + }, + { + "prec": 7, + "action_code": "AUX_DATA", + "index": 1, + "type_id": 4, + "offset": 24 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 5, + "setmd_action_code": "SET_16b", + "parameters": [ + { + "param_name": "dst_addr_3", + "param_handle": 2, + "param_start_bit": 0, + "param_value_length": 16, + "value_start_bit": 0, + "byte_order": "NETWORK" + } + ], + "type_id": 4, + "offset": 11 + } + ] + }, + { + "action_name": "linux_networking_control.drop", + "action_handle": 29238102, + "immediate_fields": [], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 1, + "mask": 1 + } + ] + }, + { + "action_name": "NoAction", + "action_handle": 21257015, + "immediate_fields": [], + "hw_actions_list": [] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "BIDIRECTIONAL", + "handle": 37326952, + "name": "linux_networking_control.ipsec_tunnel_encap_mod_table", + "size": 1024, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "vmeta.common.mod_blob_ptr", + "instance_name": "vmeta.common.mod_blob_ptr", + "field_name": "vmeta.common.mod_blob_ptr", + "match_type": "exact", + "bit_width": 24, + "index": 0, + "position": 0 + } + ], + "default_action_handle": 21257015, + "actions": [ + { + "name": "linux_networking_control.ipsec_tunnel_encap_mod", + "handle": 30081157, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "ipsec_src_addr", + "bit_width": 32 + }, + { + "name": "ipsec_dst_addr", + "bit_width": 32 + }, + { + "name": "proto", + "bit_width": 8 + } + ] + }, + { + "name": "NoAction", + "handle": 21257015, + "constant_default_action": true, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "MOD", + "id": 7, + "hw_interface": "ConfigQueue", + "hw_resource": "MOD_CONTENT", + "hw_resource_id": 0, + "profile": [ + 16 + ], + "action_format": [ + { + "action_name": "linux_networking_control.ipsec_tunnel_encap_mod", + "action_handle": 30081157, + "immediate_fields": [ + { + "param_name": "ipsec_src_addr", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 32 + }, + { + "param_name": "ipsec_dst_addr", + "param_handle": 1, + "dest_start": 4, + "start_bit_offset": 0, + "dest_width": 32 + }, + { + "param_name": "proto", + "param_handle": 2, + "dest_start": 8, + "start_bit_offset": 0, + "dest_width": 8 + } + ], + "mod_content_format": { + "mod_profile": 16, + "mod_obj_size": 1, + "mod_fields": [ + { + "name": "version", + "handle": 0, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 4, + "value": [ + 4 + ] + }, + { + "name": "ihl", + "handle": 1, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 0, + "start_bit_offset": 4, + "bit_width": 4, + "value": [ + 5 + ] + }, + { + "name": "dscp", + "handle": 2, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 1, + "start_bit_offset": 0, + "bit_width": 6, + "value": [ + 0 + ] + }, + { + "name": "ecn", + "handle": 3, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 1, + "start_bit_offset": 6, + "bit_width": 2, + "value": [ + 0 + ] + }, + { + "name": "length", + "handle": 4, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 2, + "start_bit_offset": 0, + "bit_width": 16, + "value": [ + 0, + 0 + ] + }, + { + "name": "identification", + "handle": 5, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 4, + "start_bit_offset": 0, + "bit_width": 16, + "value": [ + 0, + 0 + ] + }, + { + "name": "rsvd", + "handle": 6, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 6, + "start_bit_offset": 0, + "bit_width": 1, + "value": [ + 0 + ] + }, + { + "name": "df", + "handle": 7, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 6, + "start_bit_offset": 1, + "bit_width": 1, + "value": [ + 1 + ] + }, + { + "name": "mf", + "handle": 8, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 6, + "start_bit_offset": 2, + "bit_width": 1, + "value": [ + 0 + ] + }, + { + "name": "frag_off", + "handle": 9, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 6, + "start_bit_offset": 3, + "bit_width": 5, + "value": [ + 0 + ] + }, + { + "name": "frag_off", + "handle": 10, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 7, + "start_bit_offset": 0, + "bit_width": 3, + "value": [ + 0 + ] + }, + { + "name": "frag_off", + "handle": 11, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 7, + "start_bit_offset": 3, + "bit_width": 5, + "value": [ + 0 + ] + }, + { + "name": "ttl", + "handle": 12, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 8, + "start_bit_offset": 0, + "bit_width": 8, + "value": [ + 64 + ] + }, + { + "name": "proto", + "handle": 13, + "param_handle": 2, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 9, + "start_bit_offset": 0, + "bit_width": 8, + "value": [] + }, + { + "name": "csum", + "handle": 14, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 10, + "start_bit_offset": 0, + "bit_width": 16, + "value": [ + 0, + 1 + ] + }, + { + "name": "ipsec_src_addr", + "handle": 15, + "param_handle": 0, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 12, + "start_bit_offset": 0, + "bit_width": 32, + "value": [] + }, + { + "name": "ipsec_dst_addr", + "handle": 16, + "param_handle": 1, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 16, + "start_bit_offset": 0, + "bit_width": 32, + "value": [] + } + ] + }, + "hw_actions_list": [] + }, + { + "action_name": "NoAction", + "action_handle": 21257015, + "immediate_fields": [], + "hw_actions_list": [] + } + ] } ] } @@ -13008,27 +12891,26 @@ { "table_type": "match", "direction": "RX", - "handle": 8454146, - "name": "linux_networking_control.rss_hash", + "handle": 43475471, + "name": "linux_networking_control.ipv4_ipsec_tunnel_term_table", "size": 1024, - "isDefaultSize": true, "add_on_miss": false, "idle_timeout_with_auto_delete": false, "match_key_fields": [ { - "name": "hdrs.ipv4[xxpmeta.depth].src_ip", - "instance_name": "hdrs.ipv4[xxpmeta.depth]", - "field_name": "src_ip", - "match_type": "selector", + "name": "ipv4_src", + "instance_name": "ipv4_src", + "field_name": "ipv4_src", + "match_type": "exact", "bit_width": 32, "index": 0, "position": 0 }, { - "name": "hdrs.ipv4[xxpmeta.depth].dst_ip", - "instance_name": "hdrs.ipv4[xxpmeta.depth]", - "field_name": "dst_ip", - "match_type": "selector", + "name": "ipv4_dst", + "instance_name": "ipv4_dst", + "field_name": "ipv4_dst", + "match_type": "exact", "bit_width": 32, "index": 1, "position": 4 @@ -13050,204 +12932,102 @@ "bit_width": 32 } ], - "default_action_handle": 0, - "actions": [], - "match_attributes": { - "hardware_blocks": [ - { - "name": "HASH", - "id": 5, - "hw_interface": "MMIO", - "profile": [ - 3 - ], - "action_format": [] - } - ] - } - }, - { - "table_type": "match", - "direction": "RX", - "handle": 8454147, - "name": "linux_networking_control.rss_hash_ipv6_tcp", - "size": 1024, - "isDefaultSize": true, - "add_on_miss": false, - "idle_timeout_with_auto_delete": false, - "match_key_fields": [ - { - "name": "hdrs.ipv6[xxpmeta.depth].src_ip", - "instance_name": "hdrs.ipv6[xxpmeta.depth]", - "field_name": "src_ip", - "match_type": "selector", - "bit_width": 128, - "index": 0, - "position": 0 - }, - { - "name": "hdrs.ipv6[xxpmeta.depth].dst_ip", - "instance_name": "hdrs.ipv6[xxpmeta.depth]", - "field_name": "dst_ip", - "match_type": "selector", - "bit_width": 128, - "index": 1, - "position": 16 - }, - { - "name": "hdrs.tcp.sport", - "instance_name": "hdrs.tcp", - "field_name": "sport", - "match_type": "selector", - "bit_width": 16, - "index": 2, - "position": 32 - }, - { - "name": "hdrs.tcp.dport", - "instance_name": "hdrs.tcp", - "field_name": "dport", - "match_type": "selector", - "bit_width": 16, - "index": 3, - "position": 34 - } - ], - "match_key_format": [ - { - "match_key_handle": 0, - "byte_order": "NETWORK", - "byte_array_index": 0, - "start_bit_offset": 0, - "bit_width": 128 - }, - { - "match_key_handle": 1, - "byte_order": "NETWORK", - "byte_array_index": 16, - "start_bit_offset": 0, - "bit_width": 128 - }, + "default_action_handle": 33275382, + "max_default_actions": 4, + "actions": [ { - "match_key_handle": 2, - "byte_order": "NETWORK", - "byte_array_index": 32, - "start_bit_offset": 0, - "bit_width": 16 + "name": "linux_networking_control.decap_ipsec_tunnel_hdr", + "handle": 25138331, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [] }, { - "match_key_handle": 3, - "byte_order": "NETWORK", - "byte_array_index": 34, - "start_bit_offset": 0, - "bit_width": 16 + "name": "linux_networking_control.do_recirculate", + "handle": 33275382, + "constant_default_action": true, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] } ], - "default_action_handle": 0, - "actions": [], "match_attributes": { "hardware_blocks": [ { - "name": "HASH", - "id": 5, - "hw_interface": "MMIO", + "name": "SEM", + "id": 0, + "hw_interface": "ConfigQueue", "profile": [ - 4 + 13 ], - "action_format": [] - } - ] - } - }, - { - "table_type": "match", - "direction": "RX", - "handle": 8454148, - "name": "linux_networking_control.rss_hash_ipv6_udp", - "size": 1024, - "isDefaultSize": true, - "add_on_miss": false, - "idle_timeout_with_auto_delete": false, - "match_key_fields": [ - { - "name": "hdrs.ipv6[xxpmeta.depth].src_ip", - "instance_name": "hdrs.ipv6[xxpmeta.depth]", - "field_name": "src_ip", - "match_type": "selector", - "bit_width": 128, - "index": 0, - "position": 0 - }, - { - "name": "hdrs.ipv6[xxpmeta.depth].dst_ip", - "instance_name": "hdrs.ipv6[xxpmeta.depth]", - "field_name": "dst_ip", - "match_type": "selector", - "bit_width": 128, - "index": 1, - "position": 16 - }, - { - "name": "hdrs.udp[xxpmeta.depth].sport", - "instance_name": "hdrs.udp[xxpmeta.depth]", - "field_name": "sport", - "match_type": "selector", - "bit_width": 16, - "index": 2, - "position": 32 - }, - { - "name": "hdrs.udp[xxpmeta.depth].dport", - "instance_name": "hdrs.udp[xxpmeta.depth]", - "field_name": "dport", - "match_type": "selector", - "bit_width": 16, - "index": 3, - "position": 34 - } - ], - "match_key_format": [ - { - "match_key_handle": 0, - "byte_order": "NETWORK", - "byte_array_index": 0, - "start_bit_offset": 0, - "bit_width": 128 - }, - { - "match_key_handle": 1, - "byte_order": "NETWORK", - "byte_array_index": 16, - "start_bit_offset": 0, - "bit_width": 128 - }, - { - "match_key_handle": 2, - "byte_order": "NETWORK", - "byte_array_index": 32, - "start_bit_offset": 0, - "bit_width": 16 - }, - { - "match_key_handle": 3, - "byte_order": "NETWORK", - "byte_array_index": 34, - "start_bit_offset": 0, - "bit_width": 16 - } - ], - "default_action_handle": 0, - "actions": [], - "match_attributes": { - "hardware_blocks": [ - { - "name": "HASH", - "id": 5, - "hw_interface": "MMIO", - "profile": [ - 5 + "sub_profile": 0, + "obj_id": 1, + "hash_size": 325632, + "action_format": [ + { + "action_name": "linux_networking_control.decap_ipsec_tunnel_hdr", + "action_handle": 25138331, + "immediate_fields": [], + "hw_actions_list": [ + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 9, + "mod_profile": 19, + "prefetch": 0 + }, + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 64, + "mask": 112 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 2, + "setmd_action_code": "SET_8b", + "value": 2, + "mask": 2, + "type_id": 4, + "offset": 0 + } + ] + }, + { + "action_name": "linux_networking_control.do_recirculate", + "action_handle": 33275382, + "immediate_fields": [], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 64, + "mask": 112 + } + ] + } ], - "action_format": [] + "default_action_format": [ + { + "action_name": "linux_networking_control.do_recirculate", + "action_handle": 33275382, + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 64, + "mask": 112 + } + ] + } + ] } ] } @@ -13255,30 +13035,20 @@ { "table_type": "match", "direction": "RX", - "handle": 8454149, - "name": "linux_networking_control.rss_hash_ipv6", + "handle": 37403444, + "name": "linux_networking_control.vm_src_ip4_mac_map_table", "size": 1024, - "isDefaultSize": true, "add_on_miss": false, "idle_timeout_with_auto_delete": false, "match_key_fields": [ { - "name": "hdrs.ipv6[xxpmeta.depth].src_ip", - "instance_name": "hdrs.ipv6[xxpmeta.depth]", - "field_name": "src_ip", - "match_type": "selector", - "bit_width": 128, + "name": "ipv4_src", + "instance_name": "ipv4_src", + "field_name": "ipv4_src", + "match_type": "exact", + "bit_width": 32, "index": 0, "position": 0 - }, - { - "name": "hdrs.ipv6[xxpmeta.depth].dst_ip", - "instance_name": "hdrs.ipv6[xxpmeta.depth]", - "field_name": "dst_ip", - "match_type": "selector", - "bit_width": 128, - "index": 1, - "position": 16 } ], "match_key_format": [ @@ -13287,28 +13057,144 @@ "byte_order": "NETWORK", "byte_array_index": 0, "start_bit_offset": 0, - "bit_width": 128 + "bit_width": 32 + } + ], + "default_action_handle": 21257015, + "actions": [ + { + "name": "linux_networking_control.vm_src_ip4_mac_map_action", + "handle": 28718673, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "smac_high", + "bit_width": 16 + }, + { + "name": "smac_mid", + "bit_width": 16 + }, + { + "name": "smac_low", + "bit_width": 16 + } + ] }, { - "match_key_handle": 1, - "byte_order": "NETWORK", - "byte_array_index": 16, - "start_bit_offset": 0, - "bit_width": 128 + "name": "NoAction", + "handle": 21257015, + "constant_default_action": true, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] } ], - "default_action_handle": 0, - "actions": [], "match_attributes": { "hardware_blocks": [ { - "name": "HASH", - "id": 5, - "hw_interface": "MMIO", + "name": "LEM", + "id": 2, + "hw_interface": "ConfigQueue", "profile": [ - 6 + 7 ], - "action_format": [] + "hash_size": 325632, + "action_format": [ + { + "action_name": "linux_networking_control.vm_src_ip4_mac_map_action", + "action_handle": 28718673, + "immediate_fields": [ + { + "param_name": "smac_high", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 16 + }, + { + "param_name": "smac_mid", + "param_handle": 1, + "dest_start": 2, + "start_bit_offset": 0, + "dest_width": 16 + }, + { + "param_name": "smac_low", + "param_handle": 2, + "dest_start": 4, + "start_bit_offset": 0, + "dest_width": 16 + } + ], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 5, + "setmd_action_code": "SET_16b", + "parameters": [ + { + "param_name": "smac_high", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 16, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "type_id": 4, + "offset": 7 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 4, + "setmd_action_code": "SET_16b", + "parameters": [ + { + "param_name": "smac_mid", + "param_handle": 1, + "param_start_bit": 0, + "param_value_length": 16, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "type_id": 4, + "offset": 6 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 3, + "setmd_action_code": "SET_16b", + "parameters": [ + { + "param_name": "smac_low", + "param_handle": 2, + "param_start_bit": 0, + "param_value_length": 16, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "type_id": 4, + "offset": 5 + } + ] + }, + { + "action_name": "NoAction", + "action_handle": 21257015, + "immediate_fields": [], + "hw_actions_list": [] + } + ] } ] } @@ -13316,44 +13202,166 @@ { "table_type": "match", "direction": "RX", - "handle": 8454150, - "name": "linux_networking_control.rss_hash_l2", + "handle": 50085764, + "name": "linux_networking_control.vm_dst_ip4_mac_map_table", "size": 1024, - "isDefaultSize": true, "add_on_miss": false, "idle_timeout_with_auto_delete": false, "match_key_fields": [ { - "name": "hdrs.mac[xxpmeta.depth].da", - "instance_name": "hdrs.mac[xxpmeta.depth]", - "field_name": "da", - "match_type": "selector", - "bit_width": 48, + "name": "ipv4_dst", + "instance_name": "ipv4_dst", + "field_name": "ipv4_dst", + "match_type": "exact", + "bit_width": 32, "index": 0, "position": 0 + } + ], + "match_key_format": [ + { + "match_key_handle": 0, + "byte_order": "NETWORK", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 32 + } + ], + "default_action_handle": 21257015, + "actions": [ + { + "name": "linux_networking_control.vm_dst_ip4_mac_map_action", + "handle": 25018769, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "dmac_high", + "bit_width": 16 + }, + { + "name": "dmac_mid", + "bit_width": 16 + }, + { + "name": "dmac_low", + "bit_width": 16 + } + ] }, { - "name": "hdrs.mac[xxpmeta.depth].sa", - "instance_name": "hdrs.mac[xxpmeta.depth]", - "field_name": "sa", - "match_type": "selector", - "bit_width": 48, - "index": 1, - "position": 6 + "name": "NoAction", + "handle": 21257015, + "constant_default_action": true, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] } ], - "default_action_handle": 0, - "actions": [], "match_attributes": { "hardware_blocks": [ { - "name": "HASH", - "id": 5, - "hw_interface": "MMIO", + "name": "LEM", + "id": 2, + "hw_interface": "ConfigQueue", "profile": [ - 10 + 8 ], - "action_format": [] + "hash_size": 325632, + "action_format": [ + { + "action_name": "linux_networking_control.vm_dst_ip4_mac_map_action", + "action_handle": 25018769, + "immediate_fields": [ + { + "param_name": "dmac_high", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 16 + }, + { + "param_name": "dmac_mid", + "param_handle": 1, + "dest_start": 2, + "start_bit_offset": 0, + "dest_width": 16 + }, + { + "param_name": "dmac_low", + "param_handle": 2, + "dest_start": 4, + "start_bit_offset": 0, + "dest_width": 16 + } + ], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 2, + "setmd_action_code": "SET_16b", + "parameters": [ + { + "param_name": "dmac_high", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 16, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "type_id": 4, + "offset": 10 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 1, + "setmd_action_code": "SET_16b", + "parameters": [ + { + "param_name": "dmac_mid", + "param_handle": 1, + "param_start_bit": 0, + "param_value_length": 16, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "type_id": 4, + "offset": 9 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 0, + "setmd_action_code": "SET_16b", + "parameters": [ + { + "param_name": "dmac_low", + "param_handle": 2, + "param_start_bit": 0, + "param_value_length": 16, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "type_id": 4, + "offset": 8 + } + ] + }, + { + "action_name": "NoAction", + "action_handle": 21257015, + "immediate_fields": [], + "hw_actions_list": [] + } + ] } ] } @@ -13361,7 +13369,7 @@ { "table_type": "match", "direction": "TX", - "handle": 8454151, + "handle": 8454144, "name": "linux_networking_control.ecmp_hash_fn", "size": 1024, "isDefaultSize": true, @@ -13470,7 +13478,7 @@ { "table_type": "match", "direction": "TX", - "handle": 8454152, + "handle": 8454145, "name": "linux_networking_control.ecmp_hash_v6_fn", "size": 1024, "isDefaultSize": true, @@ -13579,7 +13587,7 @@ { "table_type": "match", "direction": "TX", - "handle": 8454153, + "handle": 8454146, "name": "linux_networking_control.lag_hash_fn", "size": 1024, "isDefaultSize": true, @@ -13640,7 +13648,7 @@ { "table_type": "match", "direction": "TX", - "handle": 8454154, + "handle": 8454147, "name": "linux_networking_control.src_port_hash_fn", "size": 1024, "isDefaultSize": true, @@ -13811,314 +13819,6 @@ } ] } - }, - { - "table_type": "match_value_lookup_table", - "handle": 40941464, - "name": "linux_networking_control.mir_prof", - "size": 256, - "p4_hidden": false, - "match_key_fields": [ - { - "name": "mirror_prof_key", - "instance_name": "meta", - "field_name": "key", - "match_type": "exact", - "bit_width": 8, - "index": 0, - "position": 0 - } - ], - "match_attributes": { - "hardware_blocks": [ - { - "name": "MOD", - "id": 7, - "hw_interface": "CP_CHANNEL", - "hw_resource": "mirror_profile", - "hw_resource_id": 0, - "immediate_fields": [ - { - "param_name": "hash_val", - "param_handle": 0, - "dest_start": 0, - "dest_width": 64 - }, - { - "param_name": "hash_mask", - "param_handle": 1, - "dest_start": 8, - "dest_width": 64 - }, - { - "param_name": "port_dest_type", - "param_handle": 2, - "dest_start": 16, - "dest_width": 32 - }, - { - "param_name": "vport_id", - "param_handle": 3, - "dest_start": 20, - "dest_width": 32 - }, - { - "param_name": "mode", - "param_handle": 4, - "dest_start": 24, - "dest_width": 1 - }, - { - "param_name": "op", - "param_handle": 5, - "dest_start": 24, - "dest_width": 32 - }, - { - "param_name": "exp", - "param_handle": 6, - "dest_start": 28, - "dest_width": 32 - }, - { - "param_name": "mod_addr", - "param_handle": 7, - "dest_start": 32, - "dest_width": 32 - }, - { - "param_name": "mod_profile", - "param_handle": 8, - "dest_start": 36, - "dest_width": 24 - }, - { - "param_name": "dest_id", - "param_handle": 9, - "dest_start": 39, - "dest_width": 16 - }, - { - "param_name": "trunc_size", - "param_handle": 10, - "dest_start": 41, - "dest_width": 16 - }, - { - "param_name": "mod_content_size", - "param_handle": 11, - "dest_start": 43, - "dest_width": 16 - }, - { - "param_name": "dst_q", - "param_handle": 12, - "dest_start": 45, - "dest_width": 16 - }, - { - "param_name": "defer_drop_en", - "param_handle": 13, - "dest_start": 47, - "dest_width": 1 - }, - { - "param_name": "trunc_mode_en", - "param_handle": 14, - "dest_start": 47, - "dest_width": 1 - }, - { - "param_name": "recirculate", - "param_handle": 15, - "dest_start": 47, - "dest_width": 1 - }, - { - "param_name": "store_port", - "param_handle": 16, - "dest_start": 47, - "dest_width": 1 - }, - { - "param_name": "func_valid", - "param_handle": 17, - "dest_start": 47, - "dest_width": 1 - }, - { - "param_name": "store_vsi", - "param_handle": 18, - "dest_start": 47, - "dest_width": 1 - }, - { - "param_name": "drop_en", - "param_handle": 19, - "dest_start": 47, - "dest_width": 1 - }, - { - "param_name": "trunc", - "param_handle": 20, - "dest_start": 48, - "dest_width": 1 - }, - { - "param_name": "mod_profile_valid", - "param_handle": 21, - "dest_start": 48, - "dest_width": 1 - }, - { - "param_name": "mod_content_size_en", - "param_handle": 22, - "dest_start": 48, - "dest_width": 1 - }, - { - "param_name": "mod_ptype_tras_index", - "param_handle": 23, - "dest_start": 48, - "dest_width": 8 - }, - { - "param_name": "mod_common_en", - "param_handle": 24, - "dest_start": 49, - "dest_width": 1 - }, - { - "param_name": "mod_append_action_bus_en", - "param_handle": 25, - "dest_start": 49, - "dest_width": 1 - }, - { - "param_name": "is_md_gen0", - "param_handle": 26, - "dest_start": 49, - "dest_width": 1 - }, - { - "param_name": "is_md_gen1", - "param_handle": 27, - "dest_start": 49, - "dest_width": 1 - }, - { - "param_name": "is_md_local", - "param_handle": 28, - "dest_start": 49, - "dest_width": 1 - }, - { - "param_name": "is_md_remote", - "param_handle": 29, - "dest_start": 50, - "dest_width": 1 - }, - { - "param_name": "md_gen0_type", - "param_handle": 30, - "dest_start": 50, - "dest_width": 8 - }, - { - "param_name": "md_gen0_off", - "param_handle": 31, - "dest_start": 51, - "dest_width": 8 - }, - { - "param_name": "md_gen0_val", - "param_handle": 32, - "dest_start": 52, - "dest_width": 16 - }, - { - "param_name": "md_gen0_mask", - "param_handle": 33, - "dest_start": 54, - "dest_width": 16 - }, - { - "param_name": "md_gen1_type", - "param_handle": 34, - "dest_start": 56, - "dest_width": 8 - }, - { - "param_name": "md_gen1_off", - "param_handle": 35, - "dest_start": 57, - "dest_width": 8 - }, - { - "param_name": "md_gen1_val", - "param_handle": 36, - "dest_start": 58, - "dest_width": 16 - }, - { - "param_name": "md_gen1_mask", - "param_handle": 37, - "dest_start": 60, - "dest_width": 16 - }, - { - "param_name": "md_local_type", - "param_handle": 38, - "dest_start": 62, - "dest_width": 8 - }, - { - "param_name": "md_local_off", - "param_handle": 39, - "dest_start": 63, - "dest_width": 8 - }, - { - "param_name": "md_local_val", - "param_handle": 40, - "dest_start": 64, - "dest_width": 8 - }, - { - "param_name": "md_local_mask", - "param_handle": 41, - "dest_start": 65, - "dest_width": 8 - }, - { - "param_name": "md_remote_type", - "param_handle": 42, - "dest_start": 66, - "dest_width": 8 - }, - { - "param_name": "md_remote_off", - "param_handle": 43, - "dest_start": 67, - "dest_width": 8 - }, - { - "param_name": "md_remote_val", - "param_handle": 44, - "dest_start": 68, - "dest_width": 8 - }, - { - "param_name": "md_remote_mask", - "param_handle": 45, - "dest_start": 69, - "dest_width": 8 - } - ], - "p4_ref_table_handles": [] - } - ] - } } ], "counter_with_modify_flag": [ diff --git a/cmd/intelvsp/fxp-net_linux-networking/fxp-net_linux-networking.p4info.txt b/cmd/intelvsp/fxp-net_linux-networking/fxp-net_linux-networking.p4info.txt index 83f27cef9..1ce788dad 100644 --- a/cmd/intelvsp/fxp-net_linux-networking/fxp-net_linux-networking.p4info.txt +++ b/cmd/intelvsp/fxp-net_linux-networking/fxp-net_linux-networking.p4info.txt @@ -547,7 +547,10 @@ tables { annotations: "@defaultonly" scope: DEFAULT_ONLY } - const_default_action_id: 21790705 + action_refs { + id: 21257015 + } + const_default_action_id: 21257015 size: 1024 } tables { @@ -921,7 +924,7 @@ tables { action_refs { id: 29238102 } - const_default_action_id: 32890467 + const_default_action_id: 29238102 size: 1024 } tables { @@ -948,7 +951,6 @@ tables { action_refs { id: 29238102 } - const_default_action_id: 29238102 size: 1024 } tables { @@ -1002,7 +1004,7 @@ tables { action_refs { id: 29238102 } - const_default_action_id: 31939992 + const_default_action_id: 29238102 size: 1024 } tables { @@ -1056,7 +1058,7 @@ tables { action_refs { id: 29238102 } - const_default_action_id: 31624713 + const_default_action_id: 29238102 size: 1024 } tables { @@ -1128,24 +1130,6 @@ tables { const_default_action_id: 33275382 size: 1024 } -tables { - preamble { - id: 40941464 - name: "linux_networking_control.mir_prof" - alias: "mir_prof" - annotations: "@intel_lut_type(\"mirror_profile\")" - } - match_fields { - id: 1 - name: "mirror_prof_key" - bitwidth: 8 - match_type: EXACT - } - action_refs { - id: 19137704 - } - size: 256 -} tables { preamble { id: 38721082 @@ -1164,16 +1148,13 @@ tables { bitwidth: 16 match_type: EXACT } - action_refs { - id: 20004960 - } action_refs { id: 26092385 } action_refs { id: 29238102 } - const_default_action_id: 26092385 + const_default_action_id: 29238102 size: 1024 } tables { @@ -1200,7 +1181,7 @@ tables { action_refs { id: 29238102 } - const_default_action_id: 26092385 + const_default_action_id: 29238102 size: 1024 } tables { @@ -1230,6 +1211,97 @@ tables { const_default_action_id: 29238102 size: 1024 } +tables { + preamble { + id: 44641644 + name: "linux_networking_control.hash_ipv4_tcp" + alias: "hash_ipv4_tcp" + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + size: 1024 +} +tables { + preamble { + id: 46678878 + name: "linux_networking_control.hash_ipv4_udp" + alias: "hash_ipv4_udp" + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + size: 1024 +} +tables { + preamble { + id: 45972289 + name: "linux_networking_control.hash_ipv4" + alias: "hash_ipv4" + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + size: 1024 +} +tables { + preamble { + id: 33896331 + name: "linux_networking_control.hash_l2" + alias: "hash_l2" + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + size: 1024 +} +tables { + preamble { + id: 46852435 + name: "linux_networking_control.hash_ipv6_tcp" + alias: "hash_ipv6_tcp" + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + size: 1024 +} +tables { + preamble { + id: 46359163 + name: "linux_networking_control.hash_ipv6_udp" + alias: "hash_ipv6_udp" + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + size: 1024 +} +tables { + preamble { + id: 34506208 + name: "linux_networking_control.hash_ipv6" + alias: "hash_ipv6" + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + size: 1024 +} tables { preamble { id: 49349790 @@ -2470,29 +2542,6 @@ actions { alias: "fwd_to_cp" } } -actions { - preamble { - id: 20004960 - name: "linux_networking_control.mirror_and_send" - alias: "mirror_and_send" - } - params { - id: 1 - name: "port" - bitwidth: 32 - type_name { - name: "PortId_t" - } - } - params { - id: 2 - name: "mirror_session_id" - bitwidth: 16 - type_name { - name: "MirrorSessionId_t" - } - } -} actions { preamble { id: 26423957 @@ -2666,18 +2715,6 @@ actions { bitwidth: 16 } } -actions { - preamble { - id: 22609087 - name: "linux_networking_control.send_rss_queue" - alias: "send_rss_queue" - } - params { - id: 1 - name: "q_id" - bitwidth: 16 - } -} actions { preamble { id: 17061464 @@ -2702,243 +2739,6 @@ actions { bitwidth: 32 } } -actions { - preamble { - id: 19137704 - name: "linux_networking_control.mir_prof_action" - alias: "mir_prof_action" - } - params { - id: 1 - name: "hash_val" - bitwidth: 64 - } - params { - id: 2 - name: "hash_mask" - bitwidth: 64 - } - params { - id: 3 - name: "port_dest_type" - bitwidth: 32 - } - params { - id: 4 - name: "vport_id" - bitwidth: 32 - } - params { - id: 5 - name: "mode" - bitwidth: 1 - } - params { - id: 6 - name: "op" - bitwidth: 32 - } - params { - id: 7 - name: "exp" - bitwidth: 32 - } - params { - id: 8 - name: "mod_addr" - bitwidth: 32 - } - params { - id: 9 - name: "mod_profile" - bitwidth: 24 - } - params { - id: 10 - name: "dest_id" - bitwidth: 16 - } - params { - id: 11 - name: "trunc_size" - bitwidth: 16 - } - params { - id: 12 - name: "mod_content_size" - bitwidth: 16 - } - params { - id: 13 - name: "dst_q" - bitwidth: 16 - } - params { - id: 14 - name: "defer_drop_en" - bitwidth: 1 - } - params { - id: 15 - name: "trunc_mode_en" - bitwidth: 1 - } - params { - id: 16 - name: "recirculate" - bitwidth: 1 - } - params { - id: 17 - name: "store_port" - bitwidth: 1 - } - params { - id: 18 - name: "func_valid" - bitwidth: 1 - } - params { - id: 19 - name: "store_vsi" - bitwidth: 1 - } - params { - id: 20 - name: "drop_en" - bitwidth: 1 - } - params { - id: 21 - name: "trunc" - bitwidth: 1 - } - params { - id: 22 - name: "mod_profile_valid" - bitwidth: 1 - } - params { - id: 23 - name: "mod_content_size_en" - bitwidth: 1 - } - params { - id: 24 - name: "mod_ptype_tras_index" - bitwidth: 8 - } - params { - id: 25 - name: "mod_common_en" - bitwidth: 1 - } - params { - id: 26 - name: "mod_append_action_bus_en" - bitwidth: 1 - } - params { - id: 27 - name: "is_md_gen0" - bitwidth: 1 - } - params { - id: 28 - name: "is_md_gen1" - bitwidth: 1 - } - params { - id: 29 - name: "is_md_local" - bitwidth: 1 - } - params { - id: 30 - name: "is_md_remote" - bitwidth: 1 - } - params { - id: 31 - name: "md_gen0_type" - bitwidth: 8 - } - params { - id: 32 - name: "md_gen0_off" - bitwidth: 8 - } - params { - id: 33 - name: "md_gen0_val" - bitwidth: 16 - } - params { - id: 34 - name: "md_gen0_mask" - bitwidth: 16 - } - params { - id: 35 - name: "md_gen1_type" - bitwidth: 8 - } - params { - id: 36 - name: "md_gen1_off" - bitwidth: 8 - } - params { - id: 37 - name: "md_gen1_val" - bitwidth: 16 - } - params { - id: 38 - name: "md_gen1_mask" - bitwidth: 16 - } - params { - id: 39 - name: "md_local_type" - bitwidth: 8 - } - params { - id: 40 - name: "md_local_off" - bitwidth: 8 - } - params { - id: 41 - name: "md_local_val" - bitwidth: 8 - } - params { - id: 42 - name: "md_local_mask" - bitwidth: 8 - } - params { - id: 43 - name: "md_remote_type" - bitwidth: 8 - } - params { - id: 44 - name: "md_remote_off" - bitwidth: 8 - } - params { - id: 45 - name: "md_remote_val" - bitwidth: 8 - } - params { - id: 46 - name: "md_remote_mask" - bitwidth: 8 - } -} direct_counters { preamble { id: 333810446 @@ -2980,15 +2780,6 @@ direct_counters { } } type_info { - new_types { - key: "MirrorSessionId_t" - value { - translated_type { - uri: "p4.org/pna/v1/MirrorSessionId_t" - sdn_bitwidth: 16 - } - } - } new_types { key: "PortId_t" value { diff --git a/cmd/intelvsp/fxp-net_linux-networking/fxp-net_linux-networking.pkg b/cmd/intelvsp/fxp-net_linux-networking/fxp-net_linux-networking.pkg index 3478c904f18b0be54d42e07b909536d2195d09b7..3b9369660b5ee7d343f4b12dd7d4f7b0d3f7f164 100644 GIT binary patch delta 27003 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 diff --git a/cmd/intelvsp/fxp-net_linux-networking/fxp-net_linux-networking.tdi.json b/cmd/intelvsp/fxp-net_linux-networking/fxp-net_linux-networking.tdi.json index 34df1e7a1..d53a45d13 100644 --- a/cmd/intelvsp/fxp-net_linux-networking/fxp-net_linux-networking.tdi.json +++ b/cmd/intelvsp/fxp-net_linux-networking/fxp-net_linux-networking.tdi.json @@ -1923,6 +1923,13 @@ } ], "data" : [] + }, + { + "id" : 21257015, + "name" : "NoAction", + "action_scope" : "TableAndDefault", + "annotations" : [], + "data" : [] } ], "data" : [], @@ -3314,7 +3321,7 @@ "size" : 1024, "annotations" : [], "depends_on" : [], - "has_const_default_action" : true, + "has_const_default_action" : false, "key" : [ { "id" : 1, @@ -3901,38 +3908,6 @@ } ], "action_specs" : [ - { - "id" : 20004960, - "name" : "linux_networking_control.mirror_and_send", - "action_scope" : "TableAndDefault", - "annotations" : [], - "data" : [ - { - "id" : 1, - "name" : "port", - "repeated" : false, - "mandatory" : true, - "read_only" : false, - "annotations" : [], - "type" : { - "type" : "bytes", - "width" : 32 - } - }, - { - "id" : 2, - "name" : "mirror_session_id", - "repeated" : false, - "mandatory" : true, - "read_only" : false, - "annotations" : [], - "type" : { - "type" : "bytes", - "width" : 16 - } - } - ] - }, { "id" : 26092385, "name" : "linux_networking_control.fwd_to_vsi", @@ -4099,6 +4074,188 @@ "supported_operations" : [], "attributes" : [] }, + { + "name" : "main.linux_networking_control.hash_ipv4_tcp", + "id" : 44641644, + "table_type" : "MatchAction_Direct", + "size" : 1024, + "annotations" : [], + "depends_on" : [], + "has_const_default_action" : false, + "key" : [], + "action_specs" : [ + { + "id" : 21257015, + "name" : "NoAction", + "action_scope" : "DefaultOnly", + "annotations" : [ + { + "name" : "@defaultonly" + } + ], + "data" : [] + } + ], + "data" : [], + "supported_operations" : [], + "attributes" : [] + }, + { + "name" : "main.linux_networking_control.hash_ipv4_udp", + "id" : 46678878, + "table_type" : "MatchAction_Direct", + "size" : 1024, + "annotations" : [], + "depends_on" : [], + "has_const_default_action" : false, + "key" : [], + "action_specs" : [ + { + "id" : 21257015, + "name" : "NoAction", + "action_scope" : "DefaultOnly", + "annotations" : [ + { + "name" : "@defaultonly" + } + ], + "data" : [] + } + ], + "data" : [], + "supported_operations" : [], + "attributes" : [] + }, + { + "name" : "main.linux_networking_control.hash_ipv4", + "id" : 45972289, + "table_type" : "MatchAction_Direct", + "size" : 1024, + "annotations" : [], + "depends_on" : [], + "has_const_default_action" : false, + "key" : [], + "action_specs" : [ + { + "id" : 21257015, + "name" : "NoAction", + "action_scope" : "DefaultOnly", + "annotations" : [ + { + "name" : "@defaultonly" + } + ], + "data" : [] + } + ], + "data" : [], + "supported_operations" : [], + "attributes" : [] + }, + { + "name" : "main.linux_networking_control.hash_l2", + "id" : 33896331, + "table_type" : "MatchAction_Direct", + "size" : 1024, + "annotations" : [], + "depends_on" : [], + "has_const_default_action" : false, + "key" : [], + "action_specs" : [ + { + "id" : 21257015, + "name" : "NoAction", + "action_scope" : "DefaultOnly", + "annotations" : [ + { + "name" : "@defaultonly" + } + ], + "data" : [] + } + ], + "data" : [], + "supported_operations" : [], + "attributes" : [] + }, + { + "name" : "main.linux_networking_control.hash_ipv6_tcp", + "id" : 46852435, + "table_type" : "MatchAction_Direct", + "size" : 1024, + "annotations" : [], + "depends_on" : [], + "has_const_default_action" : false, + "key" : [], + "action_specs" : [ + { + "id" : 21257015, + "name" : "NoAction", + "action_scope" : "DefaultOnly", + "annotations" : [ + { + "name" : "@defaultonly" + } + ], + "data" : [] + } + ], + "data" : [], + "supported_operations" : [], + "attributes" : [] + }, + { + "name" : "main.linux_networking_control.hash_ipv6_udp", + "id" : 46359163, + "table_type" : "MatchAction_Direct", + "size" : 1024, + "annotations" : [], + "depends_on" : [], + "has_const_default_action" : false, + "key" : [], + "action_specs" : [ + { + "id" : 21257015, + "name" : "NoAction", + "action_scope" : "DefaultOnly", + "annotations" : [ + { + "name" : "@defaultonly" + } + ], + "data" : [] + } + ], + "data" : [], + "supported_operations" : [], + "attributes" : [] + }, + { + "name" : "main.linux_networking_control.hash_ipv6", + "id" : 34506208, + "table_type" : "MatchAction_Direct", + "size" : 1024, + "annotations" : [], + "depends_on" : [], + "has_const_default_action" : false, + "key" : [], + "action_specs" : [ + { + "id" : 21257015, + "name" : "NoAction", + "action_scope" : "DefaultOnly", + "annotations" : [ + { + "name" : "@defaultonly" + } + ], + "data" : [] + } + ], + "data" : [], + "supported_operations" : [], + "attributes" : [] + }, { "name" : "main.linux_networking_control.ipsec_tunnel_table", "id" : 49349790, @@ -4864,587 +5021,6 @@ "read_only" : false } ] - }, - { - "name" : "main.linux_networking_control.mir_prof", - "id" : 40941464, - "table_type" : "MatchValueLookupTable", - "size" : 256, - "annotations" : [ - { - "name" : "@intel_lut_type(\"mirror_profile\")" - } - ], - "depends_on" : [], - "has_const_default_action" : false, - "key" : [ - { - "id" : 1, - "name" : "mirror_prof_key", - "repeated" : false, - "annotations" : [], - "mandatory" : false, - "match_type" : "Exact", - "type" : { - "type" : "bytes", - "width" : 8 - } - } - ], - "data" : [ - { - "id" : 1, - "name" : "hash_val", - "repeated" : false, - "annotations" : [], - "type" : { - "type" : "bytes", - "width" : 64 - }, - "mandatory" : false, - "read_only" : false - }, - { - "id" : 2, - "name" : "hash_mask", - "repeated" : false, - "annotations" : [], - "type" : { - "type" : "bytes", - "width" : 64 - }, - "mandatory" : false, - "read_only" : false - }, - { - "id" : 3, - "name" : "port_dest_type", - "repeated" : false, - "annotations" : [], - "type" : { - "type" : "bytes", - "width" : 32 - }, - "mandatory" : false, - "read_only" : false - }, - { - "id" : 4, - "name" : "vport_id", - "repeated" : false, - "annotations" : [], - "type" : { - "type" : "bytes", - "width" : 32 - }, - "mandatory" : false, - "read_only" : false - }, - { - "id" : 5, - "name" : "mode", - "repeated" : false, - "annotations" : [], - "type" : { - "type" : "bytes", - "width" : 1 - }, - "mandatory" : false, - "read_only" : false - }, - { - "id" : 6, - "name" : "op", - "repeated" : false, - "annotations" : [], - "type" : { - "type" : "bytes", - "width" : 32 - }, - "mandatory" : false, - "read_only" : false - }, - { - "id" : 7, - "name" : "exp", - "repeated" : false, - "annotations" : [], - "type" : { - "type" : "bytes", - "width" : 32 - }, - "mandatory" : false, - "read_only" : false - }, - { - "id" : 8, - "name" : "mod_addr", - "repeated" : false, - "annotations" : [], - "type" : { - "type" : "bytes", - "width" : 32 - }, - "mandatory" : false, - "read_only" : false - }, - { - "id" : 9, - "name" : "mod_profile", - "repeated" : false, - "annotations" : [], - "type" : { - "type" : "bytes", - "width" : 24 - }, - "mandatory" : false, - "read_only" : false - }, - { - "id" : 10, - "name" : "dest_id", - "repeated" : false, - "annotations" : [], - "type" : { - "type" : "bytes", - "width" : 16 - }, - "mandatory" : false, - "read_only" : false - }, - { - "id" : 11, - "name" : "trunc_size", - "repeated" : false, - "annotations" : [], - "type" : { - "type" : "bytes", - "width" : 16 - }, - "mandatory" : false, - "read_only" : false - }, - { - "id" : 12, - "name" : "mod_content_size", - "repeated" : false, - "annotations" : [], - "type" : { - "type" : "bytes", - "width" : 16 - }, - "mandatory" : false, - "read_only" : false - }, - { - "id" : 13, - "name" : "dst_q", - "repeated" : false, - "annotations" : [], - "type" : { - "type" : "bytes", - "width" : 16 - }, - "mandatory" : false, - "read_only" : false - }, - { - "id" : 14, - "name" : "defer_drop_en", - "repeated" : false, - "annotations" : [], - "type" : { - "type" : "bytes", - "width" : 1 - }, - "mandatory" : false, - "read_only" : false - }, - { - "id" : 15, - "name" : "trunc_mode_en", - "repeated" : false, - "annotations" : [], - "type" : { - "type" : "bytes", - "width" : 1 - }, - "mandatory" : false, - "read_only" : false - }, - { - "id" : 16, - "name" : "recirculate", - "repeated" : false, - "annotations" : [], - "type" : { - "type" : "bytes", - "width" : 1 - }, - "mandatory" : false, - "read_only" : false - }, - { - "id" : 17, - "name" : "store_port", - "repeated" : false, - "annotations" : [], - "type" : { - "type" : "bytes", - "width" : 1 - }, - "mandatory" : false, - "read_only" : false - }, - { - "id" : 18, - "name" : "func_valid", - "repeated" : false, - "annotations" : [], - "type" : { - "type" : "bytes", - "width" : 1 - }, - "mandatory" : false, - "read_only" : false - }, - { - "id" : 19, - "name" : "store_vsi", - "repeated" : false, - "annotations" : [], - "type" : { - "type" : "bytes", - "width" : 1 - }, - "mandatory" : false, - "read_only" : false - }, - { - "id" : 20, - "name" : "drop_en", - "repeated" : false, - "annotations" : [], - "type" : { - "type" : "bytes", - "width" : 1 - }, - "mandatory" : false, - "read_only" : false - }, - { - "id" : 21, - "name" : "trunc", - "repeated" : false, - "annotations" : [], - "type" : { - "type" : "bytes", - "width" : 1 - }, - "mandatory" : false, - "read_only" : false - }, - { - "id" : 22, - "name" : "mod_profile_valid", - "repeated" : false, - "annotations" : [], - "type" : { - "type" : "bytes", - "width" : 1 - }, - "mandatory" : false, - "read_only" : false - }, - { - "id" : 23, - "name" : "mod_content_size_en", - "repeated" : false, - "annotations" : [], - "type" : { - "type" : "bytes", - "width" : 1 - }, - "mandatory" : false, - "read_only" : false - }, - { - "id" : 24, - "name" : "mod_ptype_tras_index", - "repeated" : false, - "annotations" : [], - "type" : { - "type" : "bytes", - "width" : 8 - }, - "mandatory" : false, - "read_only" : false - }, - { - "id" : 25, - "name" : "mod_common_en", - "repeated" : false, - "annotations" : [], - "type" : { - "type" : "bytes", - "width" : 1 - }, - "mandatory" : false, - "read_only" : false - }, - { - "id" : 26, - "name" : "mod_append_action_bus_en", - "repeated" : false, - "annotations" : [], - "type" : { - "type" : "bytes", - "width" : 1 - }, - "mandatory" : false, - "read_only" : false - }, - { - "id" : 27, - "name" : "is_md_gen0", - "repeated" : false, - "annotations" : [], - "type" : { - "type" : "bytes", - "width" : 1 - }, - "mandatory" : false, - "read_only" : false - }, - { - "id" : 28, - "name" : "is_md_gen1", - "repeated" : false, - "annotations" : [], - "type" : { - "type" : "bytes", - "width" : 1 - }, - "mandatory" : false, - "read_only" : false - }, - { - "id" : 29, - "name" : "is_md_local", - "repeated" : false, - "annotations" : [], - "type" : { - "type" : "bytes", - "width" : 1 - }, - "mandatory" : false, - "read_only" : false - }, - { - "id" : 30, - "name" : "is_md_remote", - "repeated" : false, - "annotations" : [], - "type" : { - "type" : "bytes", - "width" : 1 - }, - "mandatory" : false, - "read_only" : false - }, - { - "id" : 31, - "name" : "md_gen0_type", - "repeated" : false, - "annotations" : [], - "type" : { - "type" : "bytes", - "width" : 8 - }, - "mandatory" : false, - "read_only" : false - }, - { - "id" : 32, - "name" : "md_gen0_off", - "repeated" : false, - "annotations" : [], - "type" : { - "type" : "bytes", - "width" : 8 - }, - "mandatory" : false, - "read_only" : false - }, - { - "id" : 33, - "name" : "md_gen0_val", - "repeated" : false, - "annotations" : [], - "type" : { - "type" : "bytes", - "width" : 16 - }, - "mandatory" : false, - "read_only" : false - }, - { - "id" : 34, - "name" : "md_gen0_mask", - "repeated" : false, - "annotations" : [], - "type" : { - "type" : "bytes", - "width" : 16 - }, - "mandatory" : false, - "read_only" : false - }, - { - "id" : 35, - "name" : "md_gen1_type", - "repeated" : false, - "annotations" : [], - "type" : { - "type" : "bytes", - "width" : 8 - }, - "mandatory" : false, - "read_only" : false - }, - { - "id" : 36, - "name" : "md_gen1_off", - "repeated" : false, - "annotations" : [], - "type" : { - "type" : "bytes", - "width" : 8 - }, - "mandatory" : false, - "read_only" : false - }, - { - "id" : 37, - "name" : "md_gen1_val", - "repeated" : false, - "annotations" : [], - "type" : { - "type" : "bytes", - "width" : 16 - }, - "mandatory" : false, - "read_only" : false - }, - { - "id" : 38, - "name" : "md_gen1_mask", - "repeated" : false, - "annotations" : [], - "type" : { - "type" : "bytes", - "width" : 16 - }, - "mandatory" : false, - "read_only" : false - }, - { - "id" : 39, - "name" : "md_local_type", - "repeated" : false, - "annotations" : [], - "type" : { - "type" : "bytes", - "width" : 8 - }, - "mandatory" : false, - "read_only" : false - }, - { - "id" : 40, - "name" : "md_local_off", - "repeated" : false, - "annotations" : [], - "type" : { - "type" : "bytes", - "width" : 8 - }, - "mandatory" : false, - "read_only" : false - }, - { - "id" : 41, - "name" : "md_local_val", - "repeated" : false, - "annotations" : [], - "type" : { - "type" : "bytes", - "width" : 8 - }, - "mandatory" : false, - "read_only" : false - }, - { - "id" : 42, - "name" : "md_local_mask", - "repeated" : false, - "annotations" : [], - "type" : { - "type" : "bytes", - "width" : 8 - }, - "mandatory" : false, - "read_only" : false - }, - { - "id" : 43, - "name" : "md_remote_type", - "repeated" : false, - "annotations" : [], - "type" : { - "type" : "bytes", - "width" : 8 - }, - "mandatory" : false, - "read_only" : false - }, - { - "id" : 44, - "name" : "md_remote_off", - "repeated" : false, - "annotations" : [], - "type" : { - "type" : "bytes", - "width" : 8 - }, - "mandatory" : false, - "read_only" : false - }, - { - "id" : 45, - "name" : "md_remote_val", - "repeated" : false, - "annotations" : [], - "type" : { - "type" : "bytes", - "width" : 8 - }, - "mandatory" : false, - "read_only" : false - }, - { - "id" : 46, - "name" : "md_remote_mask", - "repeated" : false, - "annotations" : [], - "type" : { - "type" : "bytes", - "width" : 8 - }, - "mandatory" : false, - "read_only" : false - } - ] } ], "learn_filters" : [] From 00f89e9371e29caa0a0504a9cf3ab00f6322558a Mon Sep 17 00:00:00 2001 From: "Velayutham, Arunkumar" Date: Tue, 14 Oct 2025 02:12:33 -0400 Subject: [PATCH 2/2] HACK - revert back to dual port support on IPU Signed-off-by: Velayutham, Arunkumar --- .../ipu-opi-plugins/.github/dependabot.yml | 41 + .../.github/workflows/buildtest.yml | 42 + .../.github/workflows/codeql.yml | 55 + .../.github/workflows/dependency-review.yml | 27 + .../.github/workflows/scorecard.yml | 77 + .../.github/workflows/static-scan.yml | 68 + .../.github/workflows/unittest.yml | 36 + .../intel/ipu-opi-plugins/.gitignore | 17 + .../ipu-opi-plugins/.pre-commit-config.yaml | 22 + .../intel/ipu-opi-plugins/CODE_OF_CONDUCT.md | 131 + .../intel/ipu-opi-plugins/CONTRIBUTING.md | 57 + .../ipu-opi-plugins/{ipu-plugin => }/LICENSE | 0 .../intel/ipu-opi-plugins/README.md | 11 + .../intel/ipu-opi-plugins/SECURITY.md | 5 + .../intel/ipu-opi-plugins/docs/README.md | 4 + .../intel/ipu-opi-plugins/docs/deployment.md | 778 + .../intel/ipu-opi-plugins/docs/mev_setup.png | Bin 0 -> 18235 bytes .../ipu-opi-plugins/docs/ocp-deployment.md | 184 + .../e2e/artefacts/bin/p4rt-ctl | 1982 + .../bin/p4runtime-2023.11.0-py3-none-any.whl | Bin 0 -> 21190 bytes .../copy_p4rt_python_deps.sh | 9 + .../bin/p4runtime-2023.11.0/p4/__init__.py | 0 .../p4runtime-2023.11.0/p4/config/__init__.py | 0 .../p4/config/v1/__init__.py | 0 .../p4/config/v1/p4info_pb2.py | 94 + .../p4/config/v1/p4info_pb2_grpc.py | 4 + .../p4/config/v1/p4types_pb2.py | 112 + .../p4/config/v1/p4types_pb2_grpc.py | 4 + .../bin/p4runtime-2023.11.0/p4/v1/__init__.py | 0 .../p4runtime-2023.11.0/p4/v1/p4data_pb2.py | 38 + .../p4/v1/p4data_pb2_grpc.py | 4 + .../p4/v1/p4runtime_pb2.py | 184 + .../p4/v1/p4runtime_pb2_grpc.py | 245 + .../p4runtime-2023.11.0.dist-info/LICENSE | 201 + .../p4runtime-2023.11.0.dist-info/METADATA | 26 + .../p4runtime-2023.11.0.dist-info/RECORD | 17 + .../p4runtime-2023.11.0.dist-info/WHEEL | 5 + .../top_level.txt | 1 + .../fxp-net_linux-networking.context.json | 13877 ++++ .../fxp-net_linux-networking.p4info.txt | 2790 + .../fxp-net_linux-networking.pkg | Bin 0 -> 1532240 bytes .../fxp-net_linux-networking.s | 53017 ++++++++++++++++ .../fxp-net_linux-networking.tdi.json | 5020 ++ .../e2e/artefacts/fxp/README.md | 74 + .../e2e/artefacts/fxp/linux_brige_setup | 48 + .../e2e/artefacts/fxp/p4-gen-arp-rules-del.sh | 50 + .../e2e/artefacts/fxp/p4-gen-arp-rules.sh | 60 + .../e2e/artefacts/fxp/p4-gen-no-nf-del.sh | 43 + .../e2e/artefacts/fxp/p4-gen-no-nf.sh | 46 + .../e2e/artefacts/fxp/p4-gen-with-nf-del.sh | 55 + .../e2e/artefacts/fxp/p4-gen-with-nf.sh | 67 + .../e2e/artefacts/k8s/nad.yaml | 12 + .../e2e/artefacts/k8s/p4sdk-ds.yaml | 42 + .../e2e/artefacts/k8s/pod-nf.yaml | 20 + .../e2e/artefacts/k8s/pod-tc1.yaml | 18 + .../e2e/artefacts/k8s/pod-tc2.yaml | 18 + .../e2e/artefacts/k8s/sriov-crd.yaml | 16 + .../e2e/artefacts/k8s/sriov-dp-configMap.yaml | 18 + .../e2e/artefacts/k8s/vsp-ds.yaml | 55 + .../e2e/artefacts/k8s/vsp.yaml | 22 + .../artefacts/p4-linux_networking/cpt_ver.s | 7 + .../linux_networking.bf-rt.json | 2901 + .../linux_networking.context.json | 6799 ++ .../linux_networking.p4info.txt | 1433 + ...cpt_ver_572129ee658b42848732d0a6e74fafa6.s | 12 + .../linux_networking.s/linux_networking.pkg | Bin 0 -> 1106392 bytes ...working_f8754715a0b14dae973b59f9d35b5d89.s | 7294 +++ .../e2e/artefacts/p4-rh_mvp/cpt_ver.s | 7 + .../artefacts/p4-rh_mvp/rh_mvp.context.json | 3287 + .../e2e/artefacts/p4-rh_mvp/rh_mvp.p4info.txt | 826 + .../e2e/artefacts/p4-rh_mvp/rh_mvp.pkg | Bin 0 -> 1061200 bytes .../e2e/artefacts/p4-rh_mvp/rh_mvp.s | 2772 + .../e2e/artefacts/p4-rh_mvp/rh_mvp.tdi.json | 1672 + .../intel/ipu-opi-plugins/ipu-plugin/Makefile | 93 + .../ipu-opi-plugins/ipu-plugin/README.md | 53 + .../ipu-opi-plugins/ipu-plugin/buildkit.toml | 2 + .../fxp-net_linux-networking.context.json | 13877 ++++ .../fxp-net_linux-networking.p4info.txt | 2790 + .../fxp-net_linux-networking.pkg | Bin 0 -> 1532240 bytes .../fxp-net_linux-networking.s | 53017 ++++++++++++++++ .../fxp-net_linux-networking.tdi.json | 5020 ++ .../intel/ipu-opi-plugins/ipu-plugin/go.mod | 55 + .../intel/ipu-opi-plugins/ipu-plugin/go.sum | 240 + .../ipu-plugin/hack/cicd/check-go-fmt.sh | 16 + .../ipu-plugin/images/Dockerfile | 42 + .../ipu-plugin/ipuplugin/cmd/rootcmd.go | 47 +- .../ipu-plugin/ipuplugin/main.go | 23 + .../ipu-plugin/pkg/firewall/firewall.go | 171 - .../bindata/vsp-p4-pvc/05.vsp_p4_pv.yaml | 24 - .../bindata/vsp-p4-pvc/06.vsp_p4_pvc.yaml | 13 - .../infrapod/bindata/vsp-p4/01.vsp_p4_sa.yaml | 5 - .../bindata/vsp-p4/02.vsp_p4_role.yaml | 25 - .../vsp-p4/03.vsp_p4_role_binding.yaml | 13 - .../bindata/vsp-p4/04.vsp_p4_service.yaml | 12 - .../infrapod/bindata/vsp-p4/99.vsp_p4.yaml | 67 - .../ipu-plugin/pkg/infrapod/infrapod.go | 286 - .../ipu-plugin/pkg/ipuplugin/bridgeport.go | 175 +- .../pkg/ipuplugin/bridgeport_test.go | 153 + .../ipu-plugin/pkg/ipuplugin/deviceplugin.go | 77 +- .../ipu-plugin/pkg/ipuplugin/ipuplugin.go | 141 +- .../pkg/ipuplugin/ipuplugin_suite_test.go | 13 + .../pkg/ipuplugin/lifecycleservice.go | 527 +- .../pkg/ipuplugin/lifecycleservice_test.go | 275 + .../pkg/ipuplugin/linuxbridge_test.go | 306 + .../ipu-plugin/pkg/ipuplugin/mocks_test.go | 96 + .../pkg/ipuplugin/networkfunctionservice.go | 121 +- .../ipu-plugin/pkg/ipuplugin/ovsbridge.go | 97 +- .../ipu-plugin/pkg/k8s/render/render.go | 107 - .../ipu-plugin/pkg/p4rtclient/p4rtclient.go | 333 +- .../ipu-plugin/pkg/p4rtclient/rh_p4client.go | 22 +- .../ipu-plugin/pkg/types/types.go | 18 +- .../ipu-plugin/pkg/utils/utils.go | 335 +- .../ipu-opi-plugins/network_function/Makefile | 35 + .../network_function/README.md | 73 + .../network_function/dockerfile | 12 + .../ipu-opi-plugins/network_function/nf.c | 185 + .../intel/ipu-opi-plugins/p4sdk/Makefile | 48 + .../intel/ipu-opi-plugins/p4sdk/README.md | 77 + .../intel/ipu-opi-plugins/p4sdk/buildkit.toml | 2 + .../ipu-opi-plugins/p4sdk/images/Dockerfile | 44 + .../p4sdk/images/entrypoint.sh | 105 + .../p4sdk/images/es2k_skip_p4.conf.template | 42 + .../ipu-opi-plugins/sriov_cni/CONTRIBUTING.md | 96 + .../ipu-opi-plugins/sriov_cni/Developer.md | 23 + .../ipu-opi-plugins/sriov_cni/Dockerfile | 21 + .../sriov_cni/Dockerfile.arm64 | 21 + .../sriov_cni/Dockerfile.ppc64le | 21 + .../intel/ipu-opi-plugins/sriov_cni/LICENSE | 202 + .../intel/ipu-opi-plugins/sriov_cni/Makefile | 162 + .../intel/ipu-opi-plugins/sriov_cni/README.md | 153 + .../sriov_cni/cmd/sriov/main.go | 369 + .../sriov_cni/docs/configuration-reference.md | 74 + .../intel/ipu-opi-plugins/sriov_cni/go.mod | 47 + .../intel/ipu-opi-plugins/sriov_cni/go.sum | 84 + .../sriov_cni/images/README.md | 35 + .../sriov_cni/images/build_docker.sh | 5 + .../sriov_cni/images/entrypoint.sh | 74 + .../sriov_cni/images/image_test.sh | 22 + .../sriov_cni/images/sriov-cni-daemonset.yaml | 51 + .../sriov_cni/pkg/config/config.go | 193 + .../sriov_cni/pkg/config/config_suite_test.go | 25 + .../sriov_cni/pkg/config/config_test.go | 221 + .../sriov_cni/pkg/logging/logging.go | 93 + .../pkg/logging/logging_suite_test.go | 19 + .../sriov_cni/pkg/logging/logging_test.go | 230 + .../pkg/sriov/mocks/pci_utils_mock.go | 104 + .../sriov_cni/pkg/sriov/sriov.go | 373 + .../sriov_cni/pkg/sriov/sriov_suite_test.go | 26 + .../sriov_cni/pkg/sriov/sriov_test.go | 365 + .../sriov_cni/pkg/types/types.go | 66 + .../pkg/utils/mocks/netlink_manager_mock.go | 211 + .../pkg/utils/mocks/pci_allocator_mock.go | 81 + .../sriov_cni/pkg/utils/netlink_manager.go | 90 + .../sriov_cni/pkg/utils/packet.go | 198 + .../sriov_cni/pkg/utils/pci_allocator.go | 92 + .../sriov_cni/pkg/utils/pci_allocator_test.go | 60 + .../sriov_cni/pkg/utils/testing.go | 156 + .../sriov_cni/pkg/utils/utils.go | 404 + .../sriov_cni/pkg/utils/utils_suite_test.go | 24 + .../sriov_cni/pkg/utils/utils_test.go | 187 + 160 files changed, 188780 insertions(+), 2067 deletions(-) create mode 100644 vendor/github.com/intel/ipu-opi-plugins/.github/dependabot.yml create mode 100644 vendor/github.com/intel/ipu-opi-plugins/.github/workflows/buildtest.yml create mode 100644 vendor/github.com/intel/ipu-opi-plugins/.github/workflows/codeql.yml create mode 100644 vendor/github.com/intel/ipu-opi-plugins/.github/workflows/dependency-review.yml create mode 100644 vendor/github.com/intel/ipu-opi-plugins/.github/workflows/scorecard.yml create mode 100644 vendor/github.com/intel/ipu-opi-plugins/.github/workflows/static-scan.yml create mode 100644 vendor/github.com/intel/ipu-opi-plugins/.github/workflows/unittest.yml create mode 100644 vendor/github.com/intel/ipu-opi-plugins/.gitignore create mode 100644 vendor/github.com/intel/ipu-opi-plugins/.pre-commit-config.yaml create mode 100644 vendor/github.com/intel/ipu-opi-plugins/CODE_OF_CONDUCT.md create mode 100644 vendor/github.com/intel/ipu-opi-plugins/CONTRIBUTING.md rename vendor/github.com/intel/ipu-opi-plugins/{ipu-plugin => }/LICENSE (100%) create mode 100644 vendor/github.com/intel/ipu-opi-plugins/README.md create mode 100644 vendor/github.com/intel/ipu-opi-plugins/SECURITY.md create mode 100644 vendor/github.com/intel/ipu-opi-plugins/docs/README.md create mode 100644 vendor/github.com/intel/ipu-opi-plugins/docs/deployment.md create mode 100644 vendor/github.com/intel/ipu-opi-plugins/docs/mev_setup.png create mode 100644 vendor/github.com/intel/ipu-opi-plugins/docs/ocp-deployment.md create mode 100755 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/bin/p4rt-ctl create mode 100644 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/bin/p4runtime-2023.11.0-py3-none-any.whl create mode 100755 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/bin/p4runtime-2023.11.0/copy_p4rt_python_deps.sh create mode 100644 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/bin/p4runtime-2023.11.0/p4/__init__.py create mode 100644 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/bin/p4runtime-2023.11.0/p4/config/__init__.py create mode 100644 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/bin/p4runtime-2023.11.0/p4/config/v1/__init__.py create mode 100644 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/bin/p4runtime-2023.11.0/p4/config/v1/p4info_pb2.py create mode 100644 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/bin/p4runtime-2023.11.0/p4/config/v1/p4info_pb2_grpc.py create mode 100644 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/bin/p4runtime-2023.11.0/p4/config/v1/p4types_pb2.py create mode 100644 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/bin/p4runtime-2023.11.0/p4/config/v1/p4types_pb2_grpc.py create mode 100644 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/bin/p4runtime-2023.11.0/p4/v1/__init__.py create mode 100644 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/bin/p4runtime-2023.11.0/p4/v1/p4data_pb2.py create mode 100644 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/bin/p4runtime-2023.11.0/p4/v1/p4data_pb2_grpc.py create mode 100644 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/bin/p4runtime-2023.11.0/p4/v1/p4runtime_pb2.py create mode 100644 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/bin/p4runtime-2023.11.0/p4/v1/p4runtime_pb2_grpc.py create mode 100644 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/bin/p4runtime-2023.11.0/p4runtime-2023.11.0.dist-info/LICENSE create mode 100644 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/bin/p4runtime-2023.11.0/p4runtime-2023.11.0.dist-info/METADATA create mode 100644 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/bin/p4runtime-2023.11.0/p4runtime-2023.11.0.dist-info/RECORD create mode 100644 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/bin/p4runtime-2023.11.0/p4runtime-2023.11.0.dist-info/WHEEL create mode 100644 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/bin/p4runtime-2023.11.0/p4runtime-2023.11.0.dist-info/top_level.txt create mode 100644 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/fxp-net_linux-networking/fxp-net_linux-networking.context.json create mode 100644 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/fxp-net_linux-networking/fxp-net_linux-networking.p4info.txt create mode 100644 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/fxp-net_linux-networking/fxp-net_linux-networking.pkg create mode 100644 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/fxp-net_linux-networking/fxp-net_linux-networking.s create mode 100644 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/fxp-net_linux-networking/fxp-net_linux-networking.tdi.json create mode 100644 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/fxp/README.md create mode 100644 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/fxp/linux_brige_setup create mode 100755 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/fxp/p4-gen-arp-rules-del.sh create mode 100755 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/fxp/p4-gen-arp-rules.sh create mode 100755 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/fxp/p4-gen-no-nf-del.sh create mode 100755 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/fxp/p4-gen-no-nf.sh create mode 100755 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/fxp/p4-gen-with-nf-del.sh create mode 100755 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/fxp/p4-gen-with-nf.sh create mode 100644 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/k8s/nad.yaml create mode 100644 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/k8s/p4sdk-ds.yaml create mode 100644 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/k8s/pod-nf.yaml create mode 100644 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/k8s/pod-tc1.yaml create mode 100644 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/k8s/pod-tc2.yaml create mode 100644 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/k8s/sriov-crd.yaml create mode 100644 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/k8s/sriov-dp-configMap.yaml create mode 100644 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/k8s/vsp-ds.yaml create mode 100644 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/k8s/vsp.yaml create mode 100644 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/p4-linux_networking/cpt_ver.s create mode 100644 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/p4-linux_networking/linux_networking.bf-rt.json create mode 100644 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/p4-linux_networking/linux_networking.context.json create mode 100644 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/p4-linux_networking/linux_networking.p4info.txt create mode 100644 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/p4-linux_networking/linux_networking.s/cpt_ver_572129ee658b42848732d0a6e74fafa6.s create mode 100644 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/p4-linux_networking/linux_networking.s/linux_networking.pkg create mode 100644 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/p4-linux_networking/linux_networking.s/linux_networking_f8754715a0b14dae973b59f9d35b5d89.s create mode 100644 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/p4-rh_mvp/cpt_ver.s create mode 100644 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/p4-rh_mvp/rh_mvp.context.json create mode 100644 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/p4-rh_mvp/rh_mvp.p4info.txt create mode 100644 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/p4-rh_mvp/rh_mvp.pkg create mode 100644 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/p4-rh_mvp/rh_mvp.s create mode 100644 vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/p4-rh_mvp/rh_mvp.tdi.json create mode 100644 vendor/github.com/intel/ipu-opi-plugins/ipu-plugin/Makefile create mode 100644 vendor/github.com/intel/ipu-opi-plugins/ipu-plugin/README.md create mode 100644 vendor/github.com/intel/ipu-opi-plugins/ipu-plugin/buildkit.toml create mode 100644 vendor/github.com/intel/ipu-opi-plugins/ipu-plugin/fxp-net_linux-networking/fxp-net_linux-networking.context.json create mode 100644 vendor/github.com/intel/ipu-opi-plugins/ipu-plugin/fxp-net_linux-networking/fxp-net_linux-networking.p4info.txt create mode 100644 vendor/github.com/intel/ipu-opi-plugins/ipu-plugin/fxp-net_linux-networking/fxp-net_linux-networking.pkg create mode 100644 vendor/github.com/intel/ipu-opi-plugins/ipu-plugin/fxp-net_linux-networking/fxp-net_linux-networking.s create mode 100644 vendor/github.com/intel/ipu-opi-plugins/ipu-plugin/fxp-net_linux-networking/fxp-net_linux-networking.tdi.json create mode 100644 vendor/github.com/intel/ipu-opi-plugins/ipu-plugin/go.mod create mode 100644 vendor/github.com/intel/ipu-opi-plugins/ipu-plugin/go.sum create mode 100755 vendor/github.com/intel/ipu-opi-plugins/ipu-plugin/hack/cicd/check-go-fmt.sh create mode 100644 vendor/github.com/intel/ipu-opi-plugins/ipu-plugin/images/Dockerfile create mode 100644 vendor/github.com/intel/ipu-opi-plugins/ipu-plugin/ipuplugin/main.go delete mode 100644 vendor/github.com/intel/ipu-opi-plugins/ipu-plugin/pkg/firewall/firewall.go delete mode 100644 vendor/github.com/intel/ipu-opi-plugins/ipu-plugin/pkg/infrapod/bindata/vsp-p4-pvc/05.vsp_p4_pv.yaml delete mode 100644 vendor/github.com/intel/ipu-opi-plugins/ipu-plugin/pkg/infrapod/bindata/vsp-p4-pvc/06.vsp_p4_pvc.yaml delete mode 100644 vendor/github.com/intel/ipu-opi-plugins/ipu-plugin/pkg/infrapod/bindata/vsp-p4/01.vsp_p4_sa.yaml delete mode 100644 vendor/github.com/intel/ipu-opi-plugins/ipu-plugin/pkg/infrapod/bindata/vsp-p4/02.vsp_p4_role.yaml delete mode 100644 vendor/github.com/intel/ipu-opi-plugins/ipu-plugin/pkg/infrapod/bindata/vsp-p4/03.vsp_p4_role_binding.yaml delete mode 100644 vendor/github.com/intel/ipu-opi-plugins/ipu-plugin/pkg/infrapod/bindata/vsp-p4/04.vsp_p4_service.yaml delete mode 100644 vendor/github.com/intel/ipu-opi-plugins/ipu-plugin/pkg/infrapod/bindata/vsp-p4/99.vsp_p4.yaml delete mode 100644 vendor/github.com/intel/ipu-opi-plugins/ipu-plugin/pkg/infrapod/infrapod.go create mode 100644 vendor/github.com/intel/ipu-opi-plugins/ipu-plugin/pkg/ipuplugin/bridgeport_test.go create mode 100644 vendor/github.com/intel/ipu-opi-plugins/ipu-plugin/pkg/ipuplugin/ipuplugin_suite_test.go create mode 100644 vendor/github.com/intel/ipu-opi-plugins/ipu-plugin/pkg/ipuplugin/lifecycleservice_test.go create mode 100644 vendor/github.com/intel/ipu-opi-plugins/ipu-plugin/pkg/ipuplugin/linuxbridge_test.go create mode 100644 vendor/github.com/intel/ipu-opi-plugins/ipu-plugin/pkg/ipuplugin/mocks_test.go delete mode 100644 vendor/github.com/intel/ipu-opi-plugins/ipu-plugin/pkg/k8s/render/render.go create mode 100644 vendor/github.com/intel/ipu-opi-plugins/network_function/Makefile create mode 100644 vendor/github.com/intel/ipu-opi-plugins/network_function/README.md create mode 100644 vendor/github.com/intel/ipu-opi-plugins/network_function/dockerfile create mode 100644 vendor/github.com/intel/ipu-opi-plugins/network_function/nf.c create mode 100644 vendor/github.com/intel/ipu-opi-plugins/p4sdk/Makefile create mode 100644 vendor/github.com/intel/ipu-opi-plugins/p4sdk/README.md create mode 100644 vendor/github.com/intel/ipu-opi-plugins/p4sdk/buildkit.toml create mode 100644 vendor/github.com/intel/ipu-opi-plugins/p4sdk/images/Dockerfile create mode 100755 vendor/github.com/intel/ipu-opi-plugins/p4sdk/images/entrypoint.sh create mode 100644 vendor/github.com/intel/ipu-opi-plugins/p4sdk/images/es2k_skip_p4.conf.template create mode 100644 vendor/github.com/intel/ipu-opi-plugins/sriov_cni/CONTRIBUTING.md create mode 100644 vendor/github.com/intel/ipu-opi-plugins/sriov_cni/Developer.md create mode 100644 vendor/github.com/intel/ipu-opi-plugins/sriov_cni/Dockerfile create mode 100644 vendor/github.com/intel/ipu-opi-plugins/sriov_cni/Dockerfile.arm64 create mode 100644 vendor/github.com/intel/ipu-opi-plugins/sriov_cni/Dockerfile.ppc64le create mode 100644 vendor/github.com/intel/ipu-opi-plugins/sriov_cni/LICENSE create mode 100644 vendor/github.com/intel/ipu-opi-plugins/sriov_cni/Makefile create mode 100644 vendor/github.com/intel/ipu-opi-plugins/sriov_cni/README.md create mode 100644 vendor/github.com/intel/ipu-opi-plugins/sriov_cni/cmd/sriov/main.go create mode 100644 vendor/github.com/intel/ipu-opi-plugins/sriov_cni/docs/configuration-reference.md create mode 100644 vendor/github.com/intel/ipu-opi-plugins/sriov_cni/go.mod create mode 100644 vendor/github.com/intel/ipu-opi-plugins/sriov_cni/go.sum create mode 100644 vendor/github.com/intel/ipu-opi-plugins/sriov_cni/images/README.md create mode 100755 vendor/github.com/intel/ipu-opi-plugins/sriov_cni/images/build_docker.sh create mode 100755 vendor/github.com/intel/ipu-opi-plugins/sriov_cni/images/entrypoint.sh create mode 100755 vendor/github.com/intel/ipu-opi-plugins/sriov_cni/images/image_test.sh create mode 100644 vendor/github.com/intel/ipu-opi-plugins/sriov_cni/images/sriov-cni-daemonset.yaml create mode 100644 vendor/github.com/intel/ipu-opi-plugins/sriov_cni/pkg/config/config.go create mode 100644 vendor/github.com/intel/ipu-opi-plugins/sriov_cni/pkg/config/config_suite_test.go create mode 100644 vendor/github.com/intel/ipu-opi-plugins/sriov_cni/pkg/config/config_test.go create mode 100644 vendor/github.com/intel/ipu-opi-plugins/sriov_cni/pkg/logging/logging.go create mode 100644 vendor/github.com/intel/ipu-opi-plugins/sriov_cni/pkg/logging/logging_suite_test.go create mode 100644 vendor/github.com/intel/ipu-opi-plugins/sriov_cni/pkg/logging/logging_test.go create mode 100644 vendor/github.com/intel/ipu-opi-plugins/sriov_cni/pkg/sriov/mocks/pci_utils_mock.go create mode 100644 vendor/github.com/intel/ipu-opi-plugins/sriov_cni/pkg/sriov/sriov.go create mode 100644 vendor/github.com/intel/ipu-opi-plugins/sriov_cni/pkg/sriov/sriov_suite_test.go create mode 100644 vendor/github.com/intel/ipu-opi-plugins/sriov_cni/pkg/sriov/sriov_test.go create mode 100644 vendor/github.com/intel/ipu-opi-plugins/sriov_cni/pkg/types/types.go create mode 100644 vendor/github.com/intel/ipu-opi-plugins/sriov_cni/pkg/utils/mocks/netlink_manager_mock.go create mode 100644 vendor/github.com/intel/ipu-opi-plugins/sriov_cni/pkg/utils/mocks/pci_allocator_mock.go create mode 100644 vendor/github.com/intel/ipu-opi-plugins/sriov_cni/pkg/utils/netlink_manager.go create mode 100644 vendor/github.com/intel/ipu-opi-plugins/sriov_cni/pkg/utils/packet.go create mode 100644 vendor/github.com/intel/ipu-opi-plugins/sriov_cni/pkg/utils/pci_allocator.go create mode 100644 vendor/github.com/intel/ipu-opi-plugins/sriov_cni/pkg/utils/pci_allocator_test.go create mode 100644 vendor/github.com/intel/ipu-opi-plugins/sriov_cni/pkg/utils/testing.go create mode 100644 vendor/github.com/intel/ipu-opi-plugins/sriov_cni/pkg/utils/utils.go create mode 100644 vendor/github.com/intel/ipu-opi-plugins/sriov_cni/pkg/utils/utils_suite_test.go create mode 100644 vendor/github.com/intel/ipu-opi-plugins/sriov_cni/pkg/utils/utils_test.go diff --git a/vendor/github.com/intel/ipu-opi-plugins/.github/dependabot.yml b/vendor/github.com/intel/ipu-opi-plugins/.github/dependabot.yml new file mode 100644 index 000000000..31caa3b6a --- /dev/null +++ b/vendor/github.com/intel/ipu-opi-plugins/.github/dependabot.yml @@ -0,0 +1,41 @@ +version: 2 +updates: + - package-ecosystem: github-actions + directory: / + schedule: + interval: daily + + - package-ecosystem: docker + directory: / + schedule: + interval: daily + + - package-ecosystem: gomod + directory: / + schedule: + interval: daily + + - package-ecosystem: gomod + directory: /ipu-plugin + schedule: + interval: daily + + - package-ecosystem: docker + directory: /ipu-plugin/images + schedule: + interval: daily + + - package-ecosystem: docker + directory: /sriov_cni + schedule: + interval: daily + + - package-ecosystem: gomod + directory: /sriov_cni + schedule: + interval: daily + + - package-ecosystem: docker + directory: /p4sdk/images + schedule: + interval: daily diff --git a/vendor/github.com/intel/ipu-opi-plugins/.github/workflows/buildtest.yml b/vendor/github.com/intel/ipu-opi-plugins/.github/workflows/buildtest.yml new file mode 100644 index 000000000..757fb60f4 --- /dev/null +++ b/vendor/github.com/intel/ipu-opi-plugins/.github/workflows/buildtest.yml @@ -0,0 +1,42 @@ +name: Go-build-and-test + +on: + push: + pull_request: + schedule: + - cron: "0 8 * * 0" # every sunday + +permissions: + contents: read + +jobs: + build-test: + strategy: + matrix: + go-version: [1.21.x] + os: [ubuntu-latest] + subproject: [ipu-plugin, sriov_cni, network_function] # Add more subprojects as needed + runs-on: ${{ matrix.os }} + env: + GO111MODULE: on + steps: + - name: Harden Runner + uses: step-security/harden-runner@63c24ba6bd7ba022e95695ff85de572c04a18142 # v2.7.0 + with: + egress-policy: audit + + - name: Set up Go + uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v5.0.0 + with: + go-version: ${{ matrix.go-version }} + + - name: Check out code into the Go module directory + uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 + + - name: Build each subproject + run: | + for subproject in ${{ matrix.subproject }}; do + cd "$subproject" + make build + cd .. + done diff --git a/vendor/github.com/intel/ipu-opi-plugins/.github/workflows/codeql.yml b/vendor/github.com/intel/ipu-opi-plugins/.github/workflows/codeql.yml new file mode 100644 index 000000000..0b57385d5 --- /dev/null +++ b/vendor/github.com/intel/ipu-opi-plugins/.github/workflows/codeql.yml @@ -0,0 +1,55 @@ +name: "CodeQL" + +on: + workflow_dispatch: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + schedule: + - cron: "37 4 * * 0" + +permissions: + contents: read + +jobs: + analyze: + name: Analyze + runs-on: ubuntu-latest + permissions: + actions: read + contents: read + security-events: write + + strategy: + fail-fast: false + matrix: + language: [ go ] + + steps: + - name: Harden Runner + uses: step-security/harden-runner@63c24ba6bd7ba022e95695ff85de572c04a18142 # v2.7.0 + with: + egress-policy: audit + + - name: Set up Go + uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v5.0.0 + with: + go-version: 1.21 + - name: Checkout + uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v3.5.2 + + - name: Initialize CodeQL + uses: github/codeql-action/init@df409f7d9260372bd5f19e5b04e83cb3c43714ae # v2.3.3 + with: + languages: ${{ matrix.language }} + queries: +security-and-quality + + - name: Autobuild + uses: github/codeql-action/autobuild@df409f7d9260372bd5f19e5b04e83cb3c43714ae # v2.3.3 + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@df409f7d9260372bd5f19e5b04e83cb3c43714ae # v2.3.3 + with: + category: "/language:${{ matrix.language }}" + diff --git a/vendor/github.com/intel/ipu-opi-plugins/.github/workflows/dependency-review.yml b/vendor/github.com/intel/ipu-opi-plugins/.github/workflows/dependency-review.yml new file mode 100644 index 000000000..e2364e236 --- /dev/null +++ b/vendor/github.com/intel/ipu-opi-plugins/.github/workflows/dependency-review.yml @@ -0,0 +1,27 @@ +# Dependency Review Action +# +# This Action will scan dependency manifest files that change as part of a Pull Request, +# surfacing known-vulnerable versions of the packages declared or updated in the PR. +# Once installed, if the workflow run is marked as required, +# PRs introducing known-vulnerable packages will be blocked from merging. +# +# Source repository: https://github.com/actions/dependency-review-action +name: 'Dependency Review' +on: [pull_request] + +permissions: + contents: read + +jobs: + dependency-review: + runs-on: ubuntu-latest + steps: + - name: Harden Runner + uses: step-security/harden-runner@63c24ba6bd7ba022e95695ff85de572c04a18142 # v2.7.0 + with: + egress-policy: audit + + - name: 'Checkout Repository' + uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v3.5.2 + - name: 'Dependency Review' + uses: actions/dependency-review-action@5bbc3ba658137598168acb2ab73b21c432dd411b # v4.2.5 \ No newline at end of file diff --git a/vendor/github.com/intel/ipu-opi-plugins/.github/workflows/scorecard.yml b/vendor/github.com/intel/ipu-opi-plugins/.github/workflows/scorecard.yml new file mode 100644 index 000000000..c1b860158 --- /dev/null +++ b/vendor/github.com/intel/ipu-opi-plugins/.github/workflows/scorecard.yml @@ -0,0 +1,77 @@ +# This workflow uses actions that are not certified by GitHub. They are provided +# by a third-party and are governed by separate terms of service, privacy +# policy, and support documentation. + +name: Scorecard supply-chain security +on: + # For Branch-Protection check. Only the default branch is supported. See + # https://github.com/ossf/scorecard/blob/main/docs/checks.md#branch-protection + branch_protection_rule: + # To guarantee Maintained check is occasionally updated. See + # https://github.com/ossf/scorecard/blob/main/docs/checks.md#maintained + # schedule: + # - cron: '32 15 * * 6' + push: + branches: [ "main" ] + +# Declare default permissions as read only. +permissions: read-all + +jobs: + analysis: + name: Scorecard analysis + runs-on: ubuntu-latest + permissions: + # Needed to upload the results to code-scanning dashboard. + security-events: write + # Needed to publish results and get a badge (see publish_results below). + id-token: write + # Uncomment the permissions below if installing in a private repository. + # contents: read + # actions: read + + steps: + - name: Harden Runner + uses: step-security/harden-runner@63c24ba6bd7ba022e95695ff85de572c04a18142 # v2.7.0 + with: + egress-policy: audit + + - name: "Checkout code" + uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v3.1.0 + with: + persist-credentials: false + + - name: "Run analysis" + uses: ossf/scorecard-action@0864cf19026789058feabb7e87baa5f140aac736 # v2.3.1 + with: + results_file: results.sarif + results_format: sarif + # (Optional) "write" PAT token. Uncomment the `repo_token` line below if: + # - you want to enable the Branch-Protection check on a *public* repository, or + # - you are installing Scorecard on a *private* repository + # To create the PAT, follow the steps in https://github.com/ossf/scorecard-action#authentication-with-pat. + # repo_token: ${{ secrets.SCORECARD_TOKEN }} + + # Public repositories: + # - Publish results to OpenSSF REST API for easy access by consumers + # - Allows the repository to include the Scorecard badge. + # - See https://github.com/ossf/scorecard-action#publishing-results. + # For private repositories: + # - `publish_results` will always be set to `false`, regardless + # of the value entered here. + publish_results: true + + # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF + # format to the repository Actions tab. + - name: "Upload artifact" + uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 + with: + name: SARIF file + path: results.sarif + retention-days: 5 + + # Upload the results to GitHub's code scanning dashboard. + - name: "Upload to code-scanning" + uses: github/codeql-action/upload-sarif@df409f7d9260372bd5f19e5b04e83cb3c43714ae # v3.27.9 + with: + sarif_file: results.sarif \ No newline at end of file diff --git a/vendor/github.com/intel/ipu-opi-plugins/.github/workflows/static-scan.yml b/vendor/github.com/intel/ipu-opi-plugins/.github/workflows/static-scan.yml new file mode 100644 index 000000000..fce9e16b2 --- /dev/null +++ b/vendor/github.com/intel/ipu-opi-plugins/.github/workflows/static-scan.yml @@ -0,0 +1,68 @@ +name: Go-static-analysis + +on: [push, pull_request] + +permissions: + contents: read + +jobs: + golangci: + name: lint + runs-on: ubuntu-latest + steps: + - name: Harden Runner + uses: step-security/harden-runner@63c24ba6bd7ba022e95695ff85de572c04a18142 # v2.7.0 + with: + egress-policy: audit + + - uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 + - uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v5.0.0 + with: + go-version: '1.21' + cache: false + - name: Install golangci-lint + run: go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.54.0 + - name: Get module list + run: | + modules=$(find . -name 'go.mod' -exec dirname {} \;) + - name: Run golangci-lint + run: | + for module in $modules; do + echo "Running golangci-lint on module: $module" + golangci-lint run $module/... + done + env: + GO111MODULE: on + + shellcheck: + name: Shellcheck + runs-on: ubuntu-latest + env: + SHELLCHECK_OPTS: -e SC3037 # disabled because of false issue in entrypoint.sh + steps: + - name: Harden Runner + uses: step-security/harden-runner@63c24ba6bd7ba022e95695ff85de572c04a18142 # v2.7.0 + with: + egress-policy: audit + + - uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 + - name: Run ShellCheck + uses: ludeeus/action-shellcheck@cd81f4475ab741e097ec0fe73b692f3e49d66b8c # master + + hadolint: + runs-on: ubuntu-latest + name: Hadolint + env: + HADOLINT_RECURSIVE: "true" + steps: + - name: Harden Runner + uses: step-security/harden-runner@63c24ba6bd7ba022e95695ff85de572c04a18142 # v2.7.0 + with: + egress-policy: audit + + - uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 + - uses: hadolint/hadolint-action@54c9adbab1582c2ef04b2016b760714a4bfde3cf # v3.1.0 + name: Run Hadolint + with: + recursive: true + ignore: DL3008,DL3059,DL3015,DL3018,DL3029 diff --git a/vendor/github.com/intel/ipu-opi-plugins/.github/workflows/unittest.yml b/vendor/github.com/intel/ipu-opi-plugins/.github/workflows/unittest.yml new file mode 100644 index 000000000..da26222f8 --- /dev/null +++ b/vendor/github.com/intel/ipu-opi-plugins/.github/workflows/unittest.yml @@ -0,0 +1,36 @@ +name: Run Unit Tests + +on: + pull_request: + branches: + - main + +permissions: + contents: read + +jobs: + test: + runs-on: ubuntu-latest + + strategy: + matrix: + subproject: [ipu-plugin] # Add more as needed + + steps: + - name: Harden Runner + uses: step-security/harden-runner@63c24ba6bd7ba022e95695ff85de572c04a18142 # v2.7.0 + with: + egress-policy: audit + + - name: Checkout code + uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 + + - name: Set up Go + uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v5.0.0 + with: + go-version: 1.21 + + - name: Run make test in subproject + run: | + cd ${{ matrix.subproject }} + make test diff --git a/vendor/github.com/intel/ipu-opi-plugins/.gitignore b/vendor/github.com/intel/ipu-opi-plugins/.gitignore new file mode 100644 index 000000000..38a3da5d2 --- /dev/null +++ b/vendor/github.com/intel/ipu-opi-plugins/.gitignore @@ -0,0 +1,17 @@ +/bin/ +*/vendor/* +*/build/* +*/bin/* +*/.gopath/* + +# No vi temp files +*.swp +*.swo + +# ignore p4.tar.gz +p4sdk/p4.tar.gz + +# cscope files +cscope* + + diff --git a/vendor/github.com/intel/ipu-opi-plugins/.pre-commit-config.yaml b/vendor/github.com/intel/ipu-opi-plugins/.pre-commit-config.yaml new file mode 100644 index 000000000..8055818c7 --- /dev/null +++ b/vendor/github.com/intel/ipu-opi-plugins/.pre-commit-config.yaml @@ -0,0 +1,22 @@ +repos: +- repo: https://github.com/gitleaks/gitleaks + rev: v8.16.3 + hooks: + - id: gitleaks +- repo: https://github.com/golangci/golangci-lint + rev: v1.52.2 + hooks: + - id: golangci-lint +- repo: https://github.com/jumanjihouse/pre-commit-hooks + rev: 3.0.0 + hooks: + - id: shellcheck +- repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.4.0 + hooks: + - id: end-of-file-fixer + - id: trailing-whitespace +- repo: https://github.com/pocc/pre-commit-hooks + rev: v1.3.5 + hooks: + - id: cpplint diff --git a/vendor/github.com/intel/ipu-opi-plugins/CODE_OF_CONDUCT.md b/vendor/github.com/intel/ipu-opi-plugins/CODE_OF_CONDUCT.md new file mode 100644 index 000000000..58dba18db --- /dev/null +++ b/vendor/github.com/intel/ipu-opi-plugins/CODE_OF_CONDUCT.md @@ -0,0 +1,131 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +We as members, contributors, and leaders pledge to make participation in our +community a harassment-free experience for everyone, regardless of age, body +size, visible or invisible disability, ethnicity, sex characteristics, gender +identity and expression, level of experience, education, socio-economic status, +nationality, personal appearance, race, caste, color, religion, or sexual +identity and orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, +diverse, inclusive, and healthy community. + +## Our Standards + +Examples of behavior that contributes to a positive environment for our +community include: + +* Demonstrating empathy and kindness toward other people +* Being respectful of differing opinions, viewpoints, and experiences +* Giving and gracefully accepting constructive feedback +* Accepting responsibility and apologizing to those affected by our mistakes, + and learning from the experience +* Focusing on what is best not just for us as individuals, but for the overall + community + +Examples of unacceptable behavior include: + +* The use of sexualized language or imagery, and sexual attention or advances of + any kind +* Trolling, insulting or derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or email address, + without their explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Enforcement Responsibilities + +Community leaders are responsible for clarifying and enforcing our standards of +acceptable behavior and will take appropriate and fair corrective action in +response to any behavior that they deem inappropriate, threatening, offensive, +or harmful. + +Community leaders have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, and will communicate reasons for moderation +decisions when appropriate. + +## Scope + +This Code of Conduct applies within all community spaces, and also applies when +an individual is officially representing the community in public spaces. +Examples of representing our community include using an official e-mail address, +posting via an official social media account, or acting as an appointed +representative at an online or offline event. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported to the community leaders responsible for enforcement at +CommunityCodeOfConduct AT intel DOT com. +All complaints will be reviewed and investigated promptly and fairly. + +All community leaders are obligated to respect the privacy and security of the +reporter of any incident. + +## Enforcement Guidelines + +Community leaders will follow these Community Impact Guidelines in determining +the consequences for any action they deem in violation of this Code of Conduct: + +### 1. Correction + +**Community Impact**: Use of inappropriate language or other behavior deemed +unprofessional or unwelcome in the community. + +**Consequence**: A private, written warning from community leaders, providing +clarity around the nature of the violation and an explanation of why the +behavior was inappropriate. A public apology may be requested. + +### 2. Warning + +**Community Impact**: A violation through a single incident or series of +actions. + +**Consequence**: A warning with consequences for continued behavior. No +interaction with the people involved, including unsolicited interaction with +those enforcing the Code of Conduct, for a specified period of time. This +includes avoiding interactions in community spaces as well as external channels +like social media. Violating these terms may lead to a temporary or permanent +ban. + +### 3. Temporary Ban + +**Community Impact**: A serious violation of community standards, including +sustained inappropriate behavior. + +**Consequence**: A temporary ban from any sort of interaction or public +communication with the community for a specified period of time. No public or +private interaction with the people involved, including unsolicited interaction +with those enforcing the Code of Conduct, is allowed during this period. +Violating these terms may lead to a permanent ban. + +### 4. Permanent Ban + +**Community Impact**: Demonstrating a pattern of violation of community +standards, including sustained inappropriate behavior, harassment of an +individual, or aggression toward or disparagement of classes of individuals. + +**Consequence**: A permanent ban from any sort of public interaction within the +community. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], +version 2.1, available at +[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1]. + +Community Impact Guidelines were inspired by +[Mozilla's code of conduct enforcement ladder][Mozilla CoC]. + +For answers to common questions about this code of conduct, see the FAQ at +[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at +[https://www.contributor-covenant.org/translations][translations]. + +[homepage]: https://www.contributor-covenant.org +[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html +[Mozilla CoC]: https://github.com/mozilla/diversity +[FAQ]: https://www.contributor-covenant.org/faq diff --git a/vendor/github.com/intel/ipu-opi-plugins/CONTRIBUTING.md b/vendor/github.com/intel/ipu-opi-plugins/CONTRIBUTING.md new file mode 100644 index 000000000..f682f4e4c --- /dev/null +++ b/vendor/github.com/intel/ipu-opi-plugins/CONTRIBUTING.md @@ -0,0 +1,57 @@ +# Contributing + +### License + + is licensed under the terms in [LICENSE]. By contributing to the project, you agree to the license and copyright terms therein and release your contribution under these terms. + +### Sign your work + +Please use the sign-off line at the end of the patch. Your signature certifies that you wrote the patch or otherwise have the right to pass it on as an open-source patch. The rules are pretty simple: if you can certify +the below (from [developercertificate.org](http://developercertificate.org/)): + +``` +Developer Certificate of Origin +Version 1.1 + +Copyright (C) 2004, 2006 The Linux Foundation and its contributors. +660 York Street, Suite 102, +San Francisco, CA 94110 USA + +Everyone is permitted to copy and distribute verbatim copies of this +license document, but changing it is not allowed. + +Developer's Certificate of Origin 1.1 + +By making a contribution to this project, I certify that: + +(a) The contribution was created in whole or in part by me and I + have the right to submit it under the open source license + indicated in the file; or + +(b) The contribution is based upon previous work that, to the best + of my knowledge, is covered under an appropriate open source + license and I have the right under that license to submit that + work with modifications, whether created in whole or in part + by me, under the same open source license (unless I am + permitted to submit under a different license), as indicated + in the file; or + +(c) The contribution was provided directly to me by some other + person who certified (a), (b) or (c) and I have not modified + it. + +(d) I understand and agree that this project and the contribution + are public and that a record of the contribution (including all + personal information I submit with it, including my sign-off) is + maintained indefinitely and may be redistributed consistent with + this project or the open source license(s) involved. +``` + +Then you just add a line to every git commit message: + + Signed-off-by: Joe Smith + +Use your real name (sorry, no pseudonyms or anonymous contributions.) + +If you set your `user.name` and `user.email` git configs, you can sign your +commit automatically with `git commit -s`. diff --git a/vendor/github.com/intel/ipu-opi-plugins/ipu-plugin/LICENSE b/vendor/github.com/intel/ipu-opi-plugins/LICENSE similarity index 100% rename from vendor/github.com/intel/ipu-opi-plugins/ipu-plugin/LICENSE rename to vendor/github.com/intel/ipu-opi-plugins/LICENSE diff --git a/vendor/github.com/intel/ipu-opi-plugins/README.md b/vendor/github.com/intel/ipu-opi-plugins/README.md new file mode 100644 index 000000000..6837f72a2 --- /dev/null +++ b/vendor/github.com/intel/ipu-opi-plugins/README.md @@ -0,0 +1,11 @@ +[![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/intel/ipu-opi-plugins/badge)](https://securityscorecards.dev/viewer/?uri=github.com/intel/ipu-opi-plugins) + +# IPU OPI Plugins + +IPU OPI Plugins are a set of components that expose IPU offload capabilities in a K8s cluster. + +Please follow [deployment.md](docs/deployment.md) to deploy and test these components in a supported environment. + +If you would like to contribute to this project please see the [CONTRIBUTING.md](CONTRIBUTING.md). + +If there's any security issues please see the [guidelines](SECURITY.md) to report them. diff --git a/vendor/github.com/intel/ipu-opi-plugins/SECURITY.md b/vendor/github.com/intel/ipu-opi-plugins/SECURITY.md new file mode 100644 index 000000000..cb59eb893 --- /dev/null +++ b/vendor/github.com/intel/ipu-opi-plugins/SECURITY.md @@ -0,0 +1,5 @@ +# Security Policy +Intel is committed to rapidly addressing security vulnerabilities affecting our customers and providing clear guidance on the solution, impact, severity and mitigation. + +## Reporting a Vulnerability +Please report any security vulnerabilities in this project utilizing the guidelines [here](https://www.intel.com/content/www/us/en/security-center/vulnerability-handling-guidelines.html). diff --git a/vendor/github.com/intel/ipu-opi-plugins/docs/README.md b/vendor/github.com/intel/ipu-opi-plugins/docs/README.md new file mode 100644 index 000000000..89b00307e --- /dev/null +++ b/vendor/github.com/intel/ipu-opi-plugins/docs/README.md @@ -0,0 +1,4 @@ +# Documentation + +IPU Manager documentation: +- [Deployment and E2E tests](deployment.md) \ No newline at end of file diff --git a/vendor/github.com/intel/ipu-opi-plugins/docs/deployment.md b/vendor/github.com/intel/ipu-opi-plugins/docs/deployment.md new file mode 100644 index 000000000..d937c7f74 --- /dev/null +++ b/vendor/github.com/intel/ipu-opi-plugins/docs/deployment.md @@ -0,0 +1,778 @@ +# IPU manager E2E test with K8s +This doc describes the steps for testing the IPU manager with K8s. +It requires a FXP P4 pipeline which is included (pre-compiled) in this repo. +Please follow the instructions below on how to bring up test environment for Host, IMC and ACC. + +## Dependencies and compatibility + +``` +Host OS: RHEL 9.2 +Kernel: 5.14.0-284.11.1.el9_2.x86_64 +Golang: go1.20.4 linux/amd64 +Kubernetes: +Client Version: v1.28.2 +Server Version: v1.28.2 +ContainerD: 1.6.24 +Calico: v3.26.1 +Multus: v4.0.2 +SR-IOV Network Device plugin: latest image (ghcr.io/k8snetworkplumbingwg/sriov-network-device-plugin@sha256:1ba7727a95abefb356e756985d813893623d6898b6a4a12be77e9fbc48abdc6e) +SR-IOV CNI with custom patch +``` + + +## Setup Diagram +![MEV connections](mev_setup.png) + + +## MEV IMC & ACC +``` +CI BUILD: 6584 +P4 recipe: Linux Networking recipe (Deploy P4 Artifacts) +``` + +## Clone repository + +```bash +git clone https://github.com/intel/ipu-opi-plugins +``` + +Set path to directory +``` +cd ipu-opi-plugins +export ROOT_DIR=$(pwd) +``` + +## Deploy the P4 Artifacts for ES2K +This section explains how to deploy the P4 program on the hardware Flexible Pipeline (FXP). + +Data Path Control Plane (DPCP) starts with a default P4 package. As part of this setup, a custom P4 package will need to be loaded (i.e., linux_networking.pkg) to IMC. To load a custom P4 package proceed with the steps below. This package has been pre-compiled and can be found in `e2e/artefacts/p4`. + +### Deploy +Copy the `linux_networking.pkg` file from HOST to `/work/scripts/` directory on IMC. +The IMC should be accessible through ssh from the HOST at the IP address 100.0.0.100 + +Add IMC address to the interface connected to MEV +```bash +ip addr add 100.0.0.1/24 dev eno1 +``` +**_NOTE:_** interface may need to be configured. +eno1 may not be correct for your configuration, it could be eno2. +Depending on which onboard interface is used. + +```bash +# scp $ROOT_DIR/e2e/artefacts/p4/linux_networking.s/linux_networking.pkg root@100.0.0.100:/work/scripts/ +``` + +From the HOST machine, ssh into the IMC: +```bash +# ssh root@100.0.0.100 +``` + +Edit the `load_custom_pkg.sh` file to have the content below: +```bash +root@ipu-imc ~# vi /work/scripts/load_custom_pkg.sh +#!/bin/sh +CP_INIT_CFG=/etc/dpcp/cfg/cp_init.cfg +echo "Checking for custom package..." +if [ -e linux_networking.pkg ]; then + echo "Custom package linux_networking.pkg found. Overriding default package" + cp linux_networking.pkg /etc/dpcp/package/ + rm -rf /etc/dpcp/package/default_pkg.pkg + ln -s /etc/dpcp/package/linux_networking.pkg /etc/dpcp/package/default_pkg.pkg + sed -i 's/sem_num_pages = 1;/sem_num_pages = 25;/g' $CP_INIT_CFG + sed -i 's/acc_apf = 4;/acc_apf = 8;/g' $CP_INIT_CFG + sed -i 's/comm_vports = ((\[5,0\],\[4,0\]));/comm_vports = ((\[5,0\],\[4,0\]),(\[0,3\],\[4,2\]));/g' $CP_INIT_CFG +else + echo "No custom package found. Continuing with default package" +fi +``` + +Create file `config.json` in `/work/cfg/` and make sure it has the content below. This should make the IMC run the script to load the custom package. +```bash +root@ipu-imc ~# cat /work/cfg/config.json +{ + "start_init_app" : "true" +} +``` + +reboot IMC +```bash +root@mev-imc:~# reboot +``` + +After IMC restarts, check that the custom package has been loaded correctly: +```bash +root@ipu-imc ~# ls -lrt /etc/dpcp/package/ +total 2500 +-rw-r--r-- 1 root root 1106392 Jan 1 00:00 linux_networking.pkg +lrwxrwxrwx 1 root root 38 Jan 1 00:00 default_pkg.pkg -> /etc/dpcp/package/linux_networking.pkg +drwxr-xr-x 2 root root 4096 Oct 4 2023 runtime_files +-rw-r--r-- 1 root root 1442232 Oct 4 2023 e2100-default-1.0.12.0.pkg +``` +**_NOTE:_** the symbolic link from default_pkg.pkg to /etc/dpcp/package/linux_networking.pkg. \ +If this symbolic link is missing then likely the following went wrong: \ +(1) the script to load the custom package may contain some error, or\ +(2) the script to load the custom package was not executed during startup of the IMC. + +### Enable Communication +On ACC, we should see something like this: +```bash +[ 6.360336] idpf 0000:00:01.0 enp0s1f0d1: renamed from eth1 +[ 6.569522] idpf 0000:00:01.0 enp0s1f0d2: renamed from eth2 <-- USED TO COMMUNICATE WITH HOST +[ 6.679568] idpf 0000:00:01.0 enp0s1f0d6: renamed from eth6 +[ 6.909360] idpf 0000:00:01.0 enp0s1f0d4: renamed from eth4 +[ 7.039378] idpf 0000:00:01.0 enp0s1f0d5: renamed from eth5 +[ 7.159385] idpf 0000:00:01.0 enp0s1f0d3: renamed from eth3 +[ 7.299356] idpf 0000:00:01.0 enp0s1f0: renamed from eth0 <-- USED TO COMMUNICATE WITH IMC +[ 7.459362] idpf 0000:00:01.0 enp0s1f0d7: renamed from eth7 +``` +On ACC, enp0s1f0 (renamed from eth0) and enp0s1f0d2 (renamed from eth2) can be used to set up the communication with IMC and HOST. + +## Build IDPF driver from source + +**_NOTE_** Follow this section of the official documentation provided with MEV 1.1 release \ +1.5.10.2. Package/Environment Prerequisites to build IDPF + +These steps are an aid if there is an issue from the official docs. +```bash +yum update -y +yum install -y make perl git bubblewrap patch meson autoconf ninja-build python3-pip automake kernel-devel-$(uname -r) +pip3 install meson +cd Intel_IPU_SDK-6854/ +git clone https://github.com/coccinelle/coccinelle.git +cd coccinelle/ +bash -c "sh <(curl -fsSL https://raw.githubusercontent.com/ocaml/opam/master/shell/install.sh)" +opam install Ocaml +opam init +eval $(opam env --switch=default) +./autogen +./configure +source env.sh +make clean +make +make host +make install +ls -lrt ipu_host/build/opt/idpf/idpf.ko +sudo insmod ipu_host/build/opt/idpf/idpf.ko +``` + +## Identify Communication Channel Netdev +On IMC run the following command: +```bash +root@mev-imc:/usr/bin# ./cli_client -cq +No IP address specified, defaulting to localhost +... +fn_id: 0x0 host_id: 0x0 is_vf: no vsi_id: 0x11 vport_id 0x3 is_created: yes is_enabled: yes mac addr: 00:11:00:03:03:14 <- (HOST, vport 3) +... +fn_id: 0x4 host_id: 0x4 is_vf: no vsi_id: 0x9 vport_id 0x2 is_created: yes is_enabled: yes mac addr: 00:09:00:02:03:18 <- (ACC, vport 2) +``` +### Get ACC vport MAC address +```bash +root@mev-imc:/usr/bin/# ./cli_client -cq | awk '{if(($2 == 0x4) && ($4 == 0x4) && ($10 == 0x2)) {print $17}}' + +#or with quotes if the above returns nothing + +root@mev-imc:/usr/bin/# ./cli_client -cq | awk '{if(($2 == "0x4") && ($4 == "0x4") && ($10 == "0x2")) {print $17}}' +``` +This should provide ACC vport MAC address `00:09:00:02:03:18` + +### Get Host vport MAC address +```bash +root@mev-imc:/usr/bin/# ./cli_client -cq | awk '{if(($2 == 0x0) && ($4 == 0x0) && ($10 == 0x3)) {print $17}}' + +#or with quotes if the above returns nothing + +root@mev-imc:/usr/bin/# ./cli_client -cq | awk '{if(($2 == "0x0") && ($4 == "0x0") && ($10 == "0x3")) {print $17}}' +``` +This should provide Host vport MAC address `00:11:00:03:03:14` + +If HOST ports are not seen, reload the idpf driver on HOST using: +```bash +rmmod idpf +modprobe idpf +``` + +## Enable network connectivity between HOST and ACC +We are assigning the following IP addresses for Host and ACC. Change them accordingly for your host setup. +```bash +Host IP: 192.168.1.1/24 +ACC IP: 192.168.1.2/24 +``` + +**On Host:** + +Configure interface: **ens801f0d3** (this name could be different depends on host OS; match the interface name with MAC address returned by cli_client query above) with IP address `192.168.1.1/24` +```bash +nmcli connection add type ethernet ifname ens801f0d3 con-name ens801f0d3 ip4 192.168.1.1/24 +nmcli conn reload +nmcli con up ens801f0d3 +``` +**_NOTE:_** This is not optional, we must pick the PF with mac addr `00:11:00:03:03:14` + +Check IP configurations: +```bash +[root@~ home]# ip -br addr +... +ens801f0d3 UP 192.168.1.1/24 fe80::2e89:1bbd:390d:3278/64 +... +``` + +Enable NAT on host to provide internet connectivity to ACC +```bash +#! /bin/bash + +IPTABLES=/sbin/iptables +# Interface connected to Lab network +WANIF=eno2 +# Interface connected to ACC +LANIF=ens801f0d3 + +# enable ip forwarding in the kernel +echo 'Enabling Kernel IP forwarding...' +/bin/echo 1 > /proc/sys/net/ipv4/ip_forward + +# enable masquerading to allow LAN internet access +echo 'Enabling IP Masquerading and other rules...' + +$IPTABLES -t nat -A POSTROUTING -o $LANIF -j MASQUERADE +$IPTABLES -A FORWARD -i $LANIF -o $WANIF -m state --state RELATED,ESTABLISHED -j ACCEPT +$IPTABLES -A FORWARD -i $WANIF -o $LANIF -j ACCEPT + +$IPTABLES -t nat -A POSTROUTING -o $WANIF -j MASQUERADE +$IPTABLES -A FORWARD -i $WANIF -o $LANIF -m state --state RELATED,ESTABLISHED -j ACCEPT +$IPTABLES -A FORWARD -i $LANIF -o $WANIF -j ACCEPT + +echo 'Done.' +``` + +**_NOTE:_** run on MEV host \ +**_NOTE:_** must be run if MEV host is rebooted + +**On ACC:** + +```bash +nmcli connection add type ethernet ifname enp0s1f0d2 con-name enp0s1f0d2 ip4 192.168.1.2/24 gw4 address 192.168.1.1 +``` +**_NOTE:_** this interface must be enp0s1f0d2 + +Remove default IMC IP address from default gatwway: +```bash +ip route del default via 192.168.0.1 dev enp0s1f0 +``` + +Reload and bring up network connection: +```bash +nmcli conn reload +nmcli con down enp0s1f0d2 +nmcli con up enp0s1f0d2 +``` + +Modify DNS servers in `/etc/resolv.conf` +``` +Input DNS server IP addresses here, ours are specific to our own network. +``` + +reload NetworkManager +```bash +systemctl restart NetworkManager +``` +**_NOTE:_** if configuring over ssh connection, this might disconnect you. Serial connection can also be used instead. + +### Optional - proxy settings to `/etc/environment` +**_NOTE:_** Add proxies relevant to your environment + +Test internet connectivity +```bash +wget google.com +``` + +## Start the Infrap4d Process +This section explains how to start the Infrap4d process on Intel IPU E2100. +This section also assumes the steps described in [Deploy the P4 Artifiacts for ES2K](#deploy-the-p4-artifacts-for-es2k) have been performed. + +### Extract P4 libraries from tarball +This document assumes that `p4.tar.gz` tarball has been provided by the CI-build. If the tarball does not exist at the location mentioned below, then it may need to be built separately. + +### Log in into ACC and untar the p4.tar.gz tarball available under /opt +```bash +root@mev-acc-rl opt~# cd /opt +root@mev-acc-rl opt~# tar -xvf p4.tar.gz +root@mev-acc-rl opt~# cd /opt/p4/ +root@mev-acc-rl p4~# ls -lr +... +drwxr-xr-x 2 root root 4096 Nov 17 09:18 p4sde +drwxr-xr-x 2 root root 4096 Nov 17 09:18 p4-cp-nws +``` + +### Setup the environment +```bash +export SDE_INSTALL=/opt/p4/p4sde +export P4CP_INSTALL=/opt/p4/p4-cp-nws +export DEPEND_INSTALL=$P4CP_INSTALL +export no_proxy=localhost,127.0.0.1,192.168.1.0/16 +export NO_PROXY=localhost,127.0.0.1,192.168.1.0/16 +``` +**_NOTE:_** no_proxy is set to avoid issues with the gRPC server connection + +### Generate the forwarding pipeline binary +Create an empty file and rename it to `tofino.bin`: +```bash +export OUTPUT_DIR=/root/linux_networking +cd $OUTPUT_DIR +touch tofino.bin +``` +### Copy P4 artifacts from this git repo location to ACC: +Copy files to ACC +```bash +scp -r $ROOT_DIR/e2e/artefacts/p4 root@192.168.1.2:/root/linux_networking +``` + +These files should be present on ACC +``` +linux_networking.bf-rt.json +linux_networking.context.json +linux_networking.p4info.txt +cpt_ver.s +linux_networking.s +``` +**_NOTE_** These are the artefacts from the repository. + +```bash +[root@mev-acc-rl linux_networking]# ls -l $OUTPUT_DIR +... +-rw-r--r-- 1 root root 304 Aug 22 02:19 cpt_ver.s +-rw-r--r-- 1 root root 75352 Aug 22 02:19 linux_networking.bf-rt.json +-rw-r--r-- 1 root root 303049 Aug 22 02:19 linux_networking.context.json +-rw-r--r-- 1 root root 24572 Aug 22 02:19 linux_networking.p4info.txt +drwxr-xr-x 2 root root 4096 Aug 22 02:19 linux_networking.s +``` + +```bash +[root@mev-acc-rl linux_networking]# ls -l linux_networking.s/ +... +-rw-r--r-- 1 root root 1106392 Aug 22 02:19 linux_networking.pkg +``` +**_NOTE:_** `linux_networking.s` is a folder that has the `linux_networking.pkg` file. + +### Prepare the configuration file +On ACC, handcraft the configuration file `/usr/share/stratum/es2k/es2k_skip_p4.conf` with the following parameters: + +- `pcie_bdf` + + Get PCI BDF of LAN Control Physical Function (CPF) device with device ID 1453 on ACC: + + ```bash + lspci | grep 1453 + 00:01.6 Ethernet controller: Intel Corporation Device 1453 (rev 11) + ``` + + The value of `pcie_bdf` should be `00:01.6` + +- `iommu_grp_num` + + Get the iommu group number: + + ```bash + cd $SDE_INSTALL/bin/ + ./vfio_bind.sh 8086:1453 + Device: 0000:00:01.6 Group = 5 + ``` + The value of `iommu_grp_num` in this case is `5` \ + **_NOTE_** This value could be different than `5` + +- `vport` + + The number of vports supported is from [0-6]. + For example: `vport=[0-1]` + +- `eal_args` + + Support values for `--proc-type` are `primary` and `auto` + **Note**: In case of multi-process setup which is supported in docker + environment, `--proc-type` can be used to specify the process type. + +- `cfgqs-idx` + + Give options to each process (primary or secondary) to request + numbers of configure queues. Admin must set cfgqs-idx between `"0-15"`, + recommended option when running only 1 process. Plan and split config + queues between multi-processes. For example, to configure two cfgq; use + `cfgqs-idx: "0-1"`. Supported index numbers are from 0 to 15. + +- `program-name` + + Specify the name of P4 program. Set the value for `program-name` to `linux_networking` + +- `p4_pipeline_name` + + Specify the name of P4 pipeline. Set the value for `p4_pipeline_name` to `main` + +- `bfrt-config`, `context`, `config` and `path` + + Specify the absolute paths for these files. For example: + + Set the value for `bfrt-config` to + `/root/linux_networking/linux_networking.bf-rt.json` + + Set the value for `context` to + `/root/linux_networking/linux_networking.context.json` + + Set the value for `config` to + `/root/linux_networking/tofino.bin` + + Set the value for `path` to + `/root/linux_networking` + +The final `es2k_skip_p4.conf` will look like: + +```json +{ + "chip_list": [ + { + "id": "asic-0", + "chip_family": "mev", + "instance": 0, + "pcie_bdf": "0000:00:01.6", + "iommu_grp_num": 5 + } + ], + "instance": 0, + "cfgqs-idx": "0-15", + "p4_devices": [ + { + "device-id": 0, + "fixed_functions" : [], + "eal-args": "--lcores=1-2 -a 00:01.6,vport=[0-1] -- -i --rxq=1 --txq=1 --hairpinq=1 --hairpin-mode=0x0", + "p4_programs": [ + { + "program-name": "linux_networking", + "bfrt-config": "/root/linux_networking/linux_networking.bf-rt.json", + "p4_pipelines": [ + { + "p4_pipeline_name": "main", + "context": "/root/linux_networking/linux_networking.context.json", + "config": "/root/linux_networking/tofino.bin", + "pipe_scope": [ + 0, + 1, + 2, + 3 + ], + "path": "/root/linux_networking" + } + ] + } + ], + "agent0": "lib/libpltfm_mgr.so" + } + ] +} +``` + +#### 3.4 Generate the Binary File + +On ACC, use `tdi_pipeline_builder` available under `/opt/p4/p4-cp-nws/bin` to +combine the artifacts generated by the `p4c-pna-xxp` compiler and generate +forwarding pipeline binary. + +```bash +$P4CP_INSTALL/bin/tdi_pipeline_builder \ + --p4c_conf_file=/usr/share/stratum/es2k/es2k_skip_p4.conf \ + --bf_pipeline_config_binary_file=/root/linux_networking/linux_networking.pb.bin +``` + +### Set Huge Pages + +On ACC, run the following command: + +```bash +mkdir /dev/hugepages +mount -t hugetlbfs -o pagesize=2M none /dev/hugepages +echo 512 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages +``` + +### Start Infrap4d Process + +On ACC, run the command below: + +```bash +/opt/p4/p4-cp-nws/sbin/infrap4d -grpc_open_insecure_mode=true -nodetach -disable_krnlmon=true +``` + +The following options are used: + +- `-grpc_open_insecure_mode=true` is used because the setup described in this document uses an insecure communication mode. + +- `-nodetach` is used to avoid running the `infrap4d` in a detached mode. This is not a strong requirement, but it is useful to see the log generated by the `infrap4d` process. Note that another terminal needs to be used to proceed as the current one will be used by the `infrap4d` process. In case the detached mode is used, double check that the `infrap4d` process has been started and it is running. + +- `-disable_krnlmon=true` is used to run the `infrap4d` without krnlmon support. This option can be omitted, but it has been used to make log generated by the binary for setting the P4 rules easily visible. + +See `/opt/p4/p4-cp-nws/sbin/infrap4d --help` for more options. + +**Note**: In case that the `infrap4d` fails to start, try to run the start command in the folder where the `linux_networking` recipe files are stored e.g., `cd /root/linux_networking`. Sometimes this command fails and needs to be re-run. + +## Create the Topology + + +**Note**: `p4rt-ctl` utility used in below steps can be found under `$P4CP_INSTALL/bin` + +**Note**: Section [Set up the environment](#set_up_environment) explains how set the `$P4PC_INSTALL` variable. + +### 1. Install Python dependencies + +The `p4rt-ctl` binary relies on some Python dependencies that need to be installed before using the `p4rt-ctl` commands. + +On ACC, install the following Python dependencies: + +```bash +python3 -m pip install --upgrade pip +python3 -m pip install grpcio +python3 -m pip install ovspy +python3 -m pip install protobuf==4.25.0 +pip3 install pyelftools +``` + +**Note**: Do **NOT** set the `PYTHONHOME` or `PYTHONPATH` variables to the Python 3.10 binary and packages provided through the `p4.tar.gz` tarball. + +### 2. Set the Forwarding Pipeline + +Before `p4rt-ctl` commands are executed, the `infrap4d` needs to be started, which is explained in Section [Start the Infrap4d Process](#start_infrap4d_process). + +Once the `infrap4d` is started, set the forwarding pipeline config using P4Runtime Client `p4rt-ctl set-pipe` command. + +```bash +$P4CP_INSTALL/bin/p4rt-ctl set-pipe br0 /root/linux_networking/linux_networking.pb.bin /root/linux_networking/linux_networking.p4info.txt +``` + +### Configure the VSI Group and Add a netdev + +Use one of the IPDF netdevs on ACC to receive all control packets from overlay VM's by assigning to a VSI group. + +On ACC, run the command below to select an interface. + +```bash +[root@mev-acc-rl linux_networking]# ip -br l +... +enp0s1f0 UP 00:00:00:00:03:18 +enp0s1f0d1 UP 00:08:00:01:03:18 +enp0s1f0d2 UP 00:09:00:02:03:18 +enp0s1f0d3 UP 00:0a:00:03:03:18 <-- WE USE THIS +enp0s1f0d4 UP 00:0b:00:04:03:18 +enp0s1f0d5 UP 00:0c:00:05:03:18 +enp0s1f0d6 UP 00:0d:00:06:03:18 +enp0s1f0d7 UP 00:0e:00:07:03:18 +... +``` +Warning: Do not reuse same interface used for ACC and HOST communication + +In this document, the `enp0s1f0d3` is selected (the dots are added to show that other network interfaces may already be available). + +Note that `enp0s1f0d3` has the following MAC address: `00:0a:00:03:03:18` + +The second byte in the MAC address is `0a`. + +On IMC, run the command below: + +```bash +root@mev-imc:# cd /usr/bin +root@mev-imc:/usr/bin# ./cli_client -cq +... +fn_id: 0x4 host_id: 0x4 is_vf: no vsi_id: 0xa vport_id 0x3 is_created: yes is_enabled: yes mac addr: 00:0a:00:03:03:18 +... +``` + +Note that the VSI `a` is associated with `enp0s1f0d3` network interface. + +VSI group 3 is dedicated for this configuration, execute below devmem commands on IMC. + + +```bash +# SEM_DIRECT_MAP_PGEN_CTRL: LSB 11-bit is for vsi which need to map into vsig +devmem 0x20292002a0 64 0x800005000000000a + +# SEM_DIRECT_MAP_PGEN_DATA_VSI_GROUP : This will set vsi (set in SEM_DIRECT_MAP_PGEN_CTRL register LSB) into VSIG-3 +devmem 0x2029200388 64 0x3 + +# SEM_DIRECT_MAP_PGEN_CTRL: LSB 11-bit is for vsi which need to map into vsig +devmem 0x20292002a0 64 0xA00005000000000a +``` + +**Note**: That register value `0x800005000000000a` is given by the VSI number. In this document the VSI was `a`, but if the VSI was `8` then the register value would become `0x8000050000000008`. This needs to be adjusted according to the available network interfaces. + +**Note**: Here VSI `a` has been used for receiving all control packets and added to VSI group 3. This refers to HOST netdev VSIG 3 as per the topology diagram. + +# Create MEV SR-IOV virtual functions on Host + +```bash +modprobe idpf +## Wait few seconds for kernel module to be initialized + +# Create Virtual functions +echo 8 > /sys/class/net/ens801f0/device/sriov_numvfs +``` + +Check that VFs are created and show up in the host: + +```bash +ip -br link + +lo UNKNOWN 00:00:00:00:00:00 +ens786f0 DOWN 3c:fd:fe:df:0d:b8 +ens786f1 DOWN 3c:fd:fe:df:0d:b9 +eno1 UP a4:bf:01:6f:96:20 +eno2 UP a4:bf:01:6f:96:21 +ens801f0 UP 00:01:00:00:04:73 +ens801f0d1 UP 00:0f:00:01:04:73 +ens801f0d2 UP 00:10:00:02:04:73 +ens801f0d3 UP 00:11:00:03:04:73 +ens801f0v0 UP 00:12:00:00:04:73 +ens801f0v1 UP 00:13:00:00:04:73 +ens801f0v2 UP 00:14:00:00:04:73 +ens801f0v3 UP 00:15:00:00:04:73 +ens801f0v4 UP 00:16:00:00:04:73 +ens801f0v5 UP 00:17:00:00:04:73 +ens801f0v6 UP 00:18:00:00:04:73 +ens801f0v7 UP 00:19:00:00:04:73 +``` + + +## Deploy a single node cluster on Host +Deploy a single node cluster with Multus as delegate plugin and Calico as primary network. + +### Initialize K8s cluster +Before proceeding with the next commands, make sure the Kubernetes cluster and container runtime required for a Kubernetes cluster are setup and configured correctly. + +```bash +kubeadm init --pod-network-cidr=172.20.0.0/16 +mkdir -p $HOME/.kube +cp -i /etc/kubernetes/admin.conf $HOME/.kube/config +chown $(id -u):$(id -g) $HOME/.kube/config + +``` +### Install Calico +```bash +kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/tigera-operator.yaml +``` + +#### Remove taints so that Pod can be scheduled on Control Plane node in this Single Node Cluster +```bash +kubectl taint nodes --all node-role.kubernetes.io/control-plane- +kubectl taint nodes --all node-role.kubernetes.io/master- +``` + +Download the Calico config CRD to modify the default cluster IP. +```bash +wget https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/custom-resources.yaml + +``` + +Edit this file and change the Pod cidr: 172.20.0.0/16 +```bash +vi custom-resources.yaml +# This section includes base Calico installation configuration. +# For more information, see: https://projectcalico.docs.tigera.io/master/reference/installation/api#operator.tigera.io/v1.Installation +apiVersion: operator.tigera.io/v1 +kind: Installation +metadata: + name: default +spec: + # Configures Calico networking. + calicoNetwork: + # Note: The ipPools section cannot be modified post-install. + ipPools: + - blockSize: 26 + cidr: 172.20.0.0/16 + encapsulation: VXLANCrossSubnet + natOutgoing: Enabled + nodeSelector: all() +``` + +Apply these changes: + +```bash +kubectl create -f ./custom-resources.yaml +``` + +After a while all Calico components should be up and running and `kubectl get nodes` should show the node in **READY** state. + + +### Install Multus + +```bash +kubectl apply -f https://raw.githubusercontent.com/k8snetworkplumbingwg/multus-cni/master/deployments/multus-daemonset.yml +``` +### Install modified SR-IOV CNI plugin +We will need to build patched SR-IOV CNI from source. This will require that you have Golang installed on the host to be able to build it. + +```bash +cd $ROOT_DIR/sriov_cni +make clean +make deps-update +make +cp build/sriov /opt/cni/bin/ +``` +**_NOTE_** sriov_cni is a dir inside the joint repository + +### Install SR-IOV Network Device Plugin +```bash +kubectl create -f $ROOT_DIR/e2e/artefacts/k8s/sriov-dp-configMap.yaml + +kubectl create -f https://raw.githubusercontent.com/k8snetworkplumbingwg/sriov-network-device-plugin/master/deployments/sriovdp-daemonset.yaml +``` + +Once the SR-IOV device plugin Pod is in **READY** state the we should see that the MEV virtual functions are listed as extended node resource. + +```bash +kubectl get node silpixa00400473 -o json | jq '.status.allocatable' + +kubectl get node $NODE -o json | jq '.status.allocatable' +{ + "cpu": "72", + "ephemeral-storage": "181599731412", + "hugepages-1Gi": "0", + "hugepages-2Mi": "0", + "intel.com/intel_sriov_netdevice": "8", + "memory": "196617652Ki", + "pods": "110" +} +``` + +Create SR-IOV network attachment definition: +```bash +kubectl create -f $ROOT_DIR/e2e/artefacts/k8s/sriov-crd.yaml +``` + +## Start Infrap4d on ACC +Start Infrap4d on ACC +```bash +/opt/p4/p4-cp-nws/sbin/infrap4d -grpc_open_insecure_mode=true -nodetach -disable_krnlmon=true +``` + +## Start IPU Manager on ACC + +On the host, build the IPU Manager as an arm64 binary and the copy the binary over to ACC. + +```bash +cd $ROOT_DIR/ipu-plugin +make +scp bin/linux-arm64/ipuplugin 192.168.1.2:/root/ +``` + +Run IPU Manager on ACC: +```bash + /root/ipuplugin --bridgeType=linux --interface=enp0s1f0d3 --p4cpInstall="/opt/p4/p4-cp-nws" +``` +**_NOTE_** Must be from from ACC not Host + +## E2E Tests +Create Pod 1: +```bash +kubectl create -f $ROOT_DIR/e2e/artefacts/k8s/pod-tc1.yaml +``` + +Wait until Pod 1 is "running" state and then create Pod 2: +```bash +kubectl create -f $ROOT_DIR/e2e/artefacts/k8s/pod-tc2.yaml +``` + +Once both Pods are in running state we can do ping and other tests to verify the Pod connectivity over VFs from MEV. diff --git a/vendor/github.com/intel/ipu-opi-plugins/docs/mev_setup.png b/vendor/github.com/intel/ipu-opi-plugins/docs/mev_setup.png new file mode 100644 index 0000000000000000000000000000000000000000..0fb3c0182d720857a6e082866173bfc14d48e843 GIT binary patch literal 18235 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 aTDO?9 /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages +``` + +Then deploy the P4-SDK container daemonset: + +Update P4-SDK container image URL in `$ROOT_DIR/e2e/artefacts/k8s/p4sdk-ds.yaml` and then deploy it. +``` +oc create -f $ROOT_DIR/e2e/artefacts/k8s/p4sdk-ds.yaml +``` + +## Run IPU Plugin + +### Build IPU Plugin container image: +Since ipu-plugin will be running on both workner node host side as well as on ACC we need to build a multi-arch container image for it so that the same image name can used to deploy it on both locations. + +Docker needs to be configured for multi-arch build and correct proxy needs to be set for docker daemon. + +``` +$ROOT_DIR/ipu-plugin +make imagex +``` + +### Run IPU Plugin on Host +Update ipu-plugin image reference if required in `$ROOT_DIR/e2e/artefacts/k8s/vsp-ds.yaml` and then deploy it: + +``` +oc create -f e2e/artefacts/k8s/vsp-ds.yaml +``` + +### Run IPU Plugin on ACC +Login to ACC in worker node and then deploy the ipu-plugin daemonset in there. + +``` +oc create -f e2e/artefacts/k8s/vsp-ds.yaml +``` + +## Create MEV Virtual Functions on worker node + +Replace `ens7f0` with actual MEV PF name on the worker node. + +``` +echo 8 | sudo tee /sys/class/net/ens7f0/device/sriov_numvfs +``` + + + +## Deploy DPU Operator + +### Deploy DPU Operator on ACC + +#### Build container image + +``` +cd +git clone https://github.com/openshift/dpu-operator.git +cd dpu-operator/ +make images-build +make images-push +``` + +#### Deploy DPU Operator + +Update dpu operator image references in `config/dev/local-images.yaml` + +``` +apiVersion: apps/v1 +kind: Deployment +metadata: + name: controller-manager + namespace: system + labels: + control-plane: controller-manager + app.kubernetes.io/name: deployment + app.kubernetes.io/instance: controller-manager + app.kubernetes.io/component: manager + app.kubernetes.io/created-by: dpu-operator + app.kubernetes.io/part-of: dpu-operator + app.kubernetes.io/managed-by: kustomize +spec: + template: + spec: + containers: + - command: + name: manager + env: + - name: DPU_DAEMON_IMAGE + value: {{ Registry URL}}/dpu-daemon:{{tag}} + - name: IMAGE_PULL_POLICIES + value: Always + image: {{ Registry URL}}/dpu-operator:{{tag}} + imagePullPolicy: Always + +``` + +``` +make local-deploy +``` + +#### Configure DPU Operator for ACC + +``` +$ cat < [ TO-DO ] - Check that DPU Operator deploys and configures SRIOV Network Operator to create and register MEV Virtual Functions on the worker node. + +There are sample deployment yaml artifacts available in `e2e/artefacts/k8s/` directory that can be used for e2e tests. +The `pod-tc1.yaml` and `pod-tc2.yaml` Pod specs require MEV Virtual Functions resoruces to be available in a node and Network Attachment Definitions (NAD) is created in the same namespace. + +### Without any Network Function + +[TO-DO] + +### With Network Function + +[TO-DO] diff --git a/vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/bin/p4rt-ctl b/vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/bin/p4rt-ctl new file mode 100755 index 000000000..3b7707e9f --- /dev/null +++ b/vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/bin/p4rt-ctl @@ -0,0 +1,1982 @@ +#! /usr/bin/python3 +# +# Copyright (c) 2021-2023 Intel Corporation. +# +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +""" +p4rt-ctl utility controls P4 bridges. +""" +import argparse +import codecs +import grpc +import ipaddress +import logging +import math +import netaddr +import os +import queue +import random +import re +import socket +import string +import struct +import sys +import threading +import time +import fcntl +import select +from functools import wraps + +import google.protobuf.text_format +from google.rpc import status_pb2, code_pb2 + +from p4.v1 import p4runtime_pb2 +from p4.v1 import p4runtime_pb2_grpc +from p4.config.v1 import p4info_pb2 + +USAGE = """ +p4rt-ctl: P4Runtime switch management utility +usage: p4rt-ctl [OPTIONS] COMMAND [ARG...] + +for P4Runtime switches: + show SWITCH shows P4Runtime switch information + set-pipe SWITCH PROGRAM P4INFO sets P4 pipeline for switch + get-pipe SWITCH prints raw P4Info representation of + P4 program + add-entry SWITCH TABLE FLOW adds new table entry + del-entry SWITCH TABLE KEY deletes table entry with KEY from TABLE + dump-entries SWITCH [TBL] prints table entries + set-default-entry SWITCH TBL ACTION sets default table entry for TBL + get-default-entry SWITCH TBL prints default table entry for TBL + + add-action-profile-member SWITCH PROFILE FLOW adds member reference + delete-action-profile-member SWITCH PROFILE FLOW deletes member reference + get-action-profile-member SWITCH PROFILE FLOW prints member entries + + add-action-profile-group SWITCH PROFILE FLOW adds group reference + delete-action-profile-group SWITCH PROFILE FLOW deletes group reference + get-action-profile-group SWITCH PROFILE FLOW prints group entries + + get-counter SWITCH CTR_TBL CTR_FLOW gets indirect counter table entry + get-direct-counter SWITCH CTR_TBL CTR_FLOW gets direct counter table entry + reset-counter SWITCH CTR_TBL CTR_FLOW resets counter table entry + + add-meter-config SWITCH MTR_TBL MTR_FLOW add packet mod meter config table entry + get-packet-mod-meter SWITCH MTR_TBL MTR_FLOW gets packet mod meter table entry + get-direct-pkt-mod-meter SWITCH MTR_TBL MTR_FLOW gets direct packet mod meter table entry +""" + +def usage(): + print(USAGE) + sys.exit(0) + +def valid_ip(address): + try: + socket.inet_aton(address) + return True + except: + return False + +class P4RuntimeErrorFormatException(Exception): + def __init__(self, message): + super().__init__(message) + + +# Used to iterate over the p4.Error messages in a gRPC error Status object +class P4RuntimeErrorIterator: + def __init__(self, grpc_error): + assert(grpc_error.code() == grpc.StatusCode.UNKNOWN) # nosec + self.grpc_error = grpc_error + + error = None + # The gRPC Python package does not have a convenient way to access the + # binary details for the error: they are treated as trailing metadata. + for meta in self.grpc_error.trailing_metadata(): + if meta[0] == "grpc-status-details-bin": + error = status_pb2.Status() + error.ParseFromString(meta[1]) + break + if error is None: + raise P4RuntimeErrorFormatException("No binary details field") + + if len(error.details) == 0: + raise P4RuntimeErrorFormatException( + "Binary details field has empty Any details repeated field") + self.errors = error.details + self.idx = 0 + + def __iter__(self): + return self + + def __next__(self): + while self.idx < len(self.errors): + p4_error = p4runtime_pb2.Error() + one_error_any = self.errors[self.idx] + if not one_error_any.Unpack(p4_error): + raise P4RuntimeErrorFormatException( + "Cannot convert Any message to p4.Error") + if p4_error.canonical_code == code_pb2.OK: + continue + v = self.idx, p4_error + self.idx += 1 + return v + raise StopIteration + + +class P4RuntimeWriteException(Exception): + def __init__(self, grpc_error): + assert(grpc_error.code() == grpc.StatusCode.UNKNOWN) # nosec + super().__init__() + self.errors = [] + try: + error_iterator = P4RuntimeErrorIterator(grpc_error) + for error_tuple in error_iterator: + self.errors.append(error_tuple) + except P4RuntimeErrorFormatException: + raise # just propagate exception for now + + def __str__(self): + message = "Error(s) during Write:\n" + for idx, p4_error in self.errors: + code_name = code_pb2._CODE.values_by_number[ + p4_error.canonical_code].name + message += "\t* At index {}: {}, '{}'\n".format( + idx, code_name, p4_error.message) + return message + + +class P4RuntimeException(Exception): + def __init__(self, grpc_error): + super().__init__() + self.grpc_error = grpc_error + + def __str__(self): + message = "P4Runtime RPC error ({}): {}".format( + self.grpc_error.code().name, self.grpc_error.details()) + return message + + +def parse_p4runtime_write_error(f): + @wraps(f) + def handle(*args, **kwargs): + try: + return f(*args, **kwargs) + except grpc.RpcError as e: + if e.code() != grpc.StatusCode.UNKNOWN: + raise e + raise P4RuntimeWriteException(e) from None + return handle + + +def parse_p4runtime_error(f): + @wraps(f) + def handle(*args, **kwargs): + try: + return f(*args, **kwargs) + except grpc.RpcError as e: + raise P4RuntimeException(e) from None + return handle + + +mac_pattern = re.compile('^([\da-fA-F]{2}:){5}([\da-fA-F]{2})$') + + +def matchesMac(mac_addr_string): + return mac_pattern.match(mac_addr_string) is not None + + +def encodeMac(mac_addr_string): + str = mac_addr_string.replace(':', '') + return codecs.decode(str, 'hex_codec') + + +def decodeMac(encoded_mac_addr): + return ':'.join(codecs.encode(s, 'hex_codec').decode('utf-8') + for s in struct.unpack(str(len(encoded_mac_addr)) + 'c', + encoded_mac_addr)) + + +def decodeToHex(encoded_bytes): + return '0x' + ''.join(codecs.encode(s, 'hex_codec').decode('utf-8') + for s in struct.unpack(str(len(encoded_bytes)) + + 'c', encoded_bytes)) + + +ip_pattern = re.compile('^(\d{1,3}\.){3}(\d{1,3})$') + + +def matchesIPv4(ip_addr_string): + return ip_pattern.match(ip_addr_string) is not None + + +def encodeIPv4(ip_addr_string): + return socket.inet_aton(ip_addr_string) + + +def encodeIPv4_base10(ip_addr_string): + packedIP = socket.inet_aton(ip_addr_string) + return struct.unpack("!L", packedIP)[0] + + +def decodeIPv4(encoded_ip_addr): + return socket.inet_ntoa(encoded_ip_addr) + +def matchesIPv6(ipv6_str): + return netaddr.valid_ipv6(ipv6_str) + +def encodeIPv6(ipv6_str): + return socket.inet_pton(socket.AF_INET6,ipv6_str) + +def decodeIPv6(encoded_ip_addr): + return socket.inet_ntop(encoded_ip_addr) + +def bitwidthToBytes(bitwidth): + return int(math.ceil(bitwidth / 8.0)) + +def encodeNum(number, bitwidth): + byte_len = bitwidthToBytes(bitwidth) + num_str = '%x' % number + if number >= 2 ** bitwidth: + raise Exception("Number, %d, does not fit in %d bits" % + (number, bitwidth)) + val = ('0' * (byte_len * 2 - len(num_str)) + num_str) + return codecs.decode(val, 'hex_codec') + + +def decodeNum(encoded_number): + return int(codecs.encode(encoded_number, 'hex_codec'), 16) + + +def is_hex_str(hexa): + return '0x'==hexa[:2] and all(val in string.hexdigits for val in hexa[2:]) + + +def encode(x, bitwidth): + 'Tries to infer the type of `x` and encode it' + byte_len = bitwidthToBytes(bitwidth) + if (type(x) == list or type(x) == tuple) and len(x) == 1: + x = x[0] + encoded_bytes = None + if type(x) == str: + if matchesMac(x): + encoded_bytes = encodeMac(x) + elif matchesIPv4(x): + encoded_bytes = encodeIPv4(x) + elif matchesIPv6(x): + encoded_bytes = encodeIPv6(x) + elif str.isdigit(x): + encoded_bytes = encodeNum(int(x), bitwidth) + elif is_hex_str(x): + encoded_bytes = encodeNum(int(x[2:], 16), bitwidth) + else: + # Assume that the string is already encoded + encoded_bytes = x + elif type(x) == int: + encoded_bytes = encodeNum(x, bitwidth) + else: + raise Exception("Encoding objects of %r is not supported" % type(x)) + assert(len(encoded_bytes) == byte_len) # nosec + return encoded_bytes + + +class P4InfoHelper(object): + def __init__(self, p4info): + self.p4info = p4info + + def get(self, entity_type, name=None, id=None): + if name is not None and id is not None: + raise AssertionError("name or id must be None") + + for o in getattr(self.p4info, entity_type): + pre = o.preamble + if name: + if (pre.name == name or pre.alias == name): + return o + else: + if pre.id == id: + return o + + if name: + raise AttributeError("Could not find %r of type %s" % + (name, entity_type)) + else: + raise AttributeError("Could not find id %r of type %s" % + (id, entity_type)) + + def get_id(self, entity_type, name): + return self.get(entity_type, name=name).preamble.id + + def implementation_id(self, entity_type, name): + return self.get(entity_type, name=name).implementation_id + + def get_name(self, entity_type, id): + return self.get(entity_type, id=id).preamble.name + + def get_alias(self, entity_type, id): + return self.get(entity_type, id=id).preamble.alias + + def __getattr__(self, attr): + # Synthesize convenience functions for name to id lookups for top-level + # entities + # e.g. get_tables_id(name_string) or get_actions_id(name_string) + m = re.search("^get_(\w+)_id$", attr) + if m: + primitive = m.group(1) + return lambda name: self.get_id(primitive, name) + + # Synthesize convenience functions for id to name lookups + # e.g. get_tables_name(id) or get_actions_name(id) + m = re.search("^get_(\w+)_name$", attr) + if m: + primitive = m.group(1) + return lambda id: self.get_name(primitive, id) + + raise AttributeError("%r object has no attribute %r" % + (self.__class__, attr)) + + def get_match_fields(self, table_name): + for t in self.p4info.tables: + pre = t.preamble + if pre.name == table_name: + return t.match_fields + + def get_match_field(self, table_name, name=None, id=None): + for t in self.p4info.tables: + pre = t.preamble + if pre.name == table_name: + for mf in t.match_fields: + if name is not None: + if mf.name == name: + return mf + elif id is not None: + if mf.id == id: + return mf + raise AttributeError("%r has no attribute %r" % + (table_name, name if name is not None else id)) + + def get_match_field_id(self, table_name, match_field_name): + return self.get_match_field(table_name, name=match_field_name).id + + def get_match_field_name(self, table_name, match_field_id): + return self.get_match_field(table_name, id=match_field_id).name + + def get_match_field_width(self, table_name, match_field_name): + return self.get_match_field(table_name, name=match_field_name).bitwidth + + def get_match_field_pb(self, table_name, match_field_name, value): + p4info_match = self.get_match_field(table_name, match_field_name) + bitwidth = p4info_match.bitwidth + p4runtime_match = p4runtime_pb2.FieldMatch() + p4runtime_match.field_id = p4info_match.id + match_type = p4info_match.match_type + + if match_type == p4info_pb2.MatchField.EXACT: + exact = p4runtime_match.exact + exact.value = encode(value, bitwidth) + elif match_type == p4info_pb2.MatchField.LPM: + lpm = p4runtime_match.lpm + lpm.value = encode(value[0], bitwidth) + lpm.prefix_len = value[1] + elif match_type == p4info_pb2.MatchField.TERNARY: + lpm = p4runtime_match.ternary + lpm.value = encode(value[0], bitwidth) + lpm.mask = encode(value[1], bitwidth) + elif match_type == p4info_pb2.MatchField.RANGE: + lpm = p4runtime_match.range + lpm.low = encode(value[0], bitwidth) + lpm.high = encode(value[1], bitwidth) + else: + raise Exception("Unsupported match type with type %r" % match_type) + return p4runtime_match + + def get_match_field_value(self, match_field): + match_type = match_field.WhichOneof("field_match_type") + if match_type == 'valid': + return match_field.valid.value + elif match_type == 'exact': + return match_field.exact.value + elif match_type == 'lpm': + return (match_field.lpm.value, match_field.lpm.prefix_len) + elif match_type == 'ternary': + return (match_field.ternary.value, match_field.ternary.mask) + elif match_type == 'range': + return (match_field.range.low, match_field.range.high) + else: + raise Exception("Unsupported match type with type %r" % match_type) + + def get_action_params(self, action_name): + for a in self.p4info.actions: + pre = a.preamble + if pre.name == action_name: + return a.params + + def get_action_param(self, action_name, name=None, id=None): + for a in self.p4info.actions: + pre = a.preamble + if pre.name == action_name: + for p in a.params: + if name is not None: + if p.name == name: + return p + elif id is not None: + if p.id == id: + return p + raise AttributeError("action %r has no param %r, (has: %r)" % + (action_name, name if name is not None else id, + a.params)) + + def get_action_param_id(self, action_name, param_name): + return self.get_action_param(action_name, name=param_name).id + + def get_action_param_name(self, action_name, param_id): + return self.get_action_param(action_name, id=param_id).name + + def get_action_param_pb(self, action_name, param_name, value): + p4info_param = self.get_action_param(action_name, param_name) + p4runtime_param = p4runtime_pb2.Action.Param() + p4runtime_param.param_id = p4info_param.id + p4runtime_param.value = encode(value, p4info_param.bitwidth) + return p4runtime_param + + def buildTableEntry(self, + table_name, + match_fields=None, + default_action=False, + action_name=None, + action_params=None, + priority=None, + group_id=0, + member_id=0, + config_data=None): + one_match_type_is_ternary = False + table_entry = p4runtime_pb2.TableEntry() + table_entry.table_id = self.get_tables_id(table_name) + + for mfn, value in match_fields.items(): + # A table can contain more than one match filed and in such cases + # if one match_type has ternary and other filed is of any type + # it is considered as ternary match_type. + # In these cases we expect priority field from the user. + p4info_match = self.get_match_field(table_name, mfn) + + if p4info_match.match_type == p4info_pb2.MatchField.TERNARY: + one_match_type_is_ternary = True + # If match_type is ternary, then priority field is expected + if priority == None: + print("For ternary match_type, priority field is needed") + sys.exit(1) + + if match_fields: + table_entry.match.extend([ + self.get_match_field_pb(table_name, mfn, value) + ]) + + if priority is not None and one_match_type_is_ternary: + table_entry.priority = int(priority) + + if default_action: + table_entry.is_default_action = True + + if action_name: + action = table_entry.action.action + action.action_id = self.get_actions_id(action_name) + if action_params and action_params != ['']: + action.params.extend([ + self.get_action_param_pb(action_name, field_name, value) + for field_name, value in action_params.items() + ]) + + if member_id: + table_entry.action.action_profile_member_id = member_id + + if group_id: + table_entry.action.action_profile_group_id = group_id + + if config_data: + datas = config_data.split(",") + + # Mapping of keys to attribute names + attribute_mapping = { + "policer_meter_prof_id": "policer_meter_prof_id", + "policer_spec_cir_unit": "policer_spec_cir_unit", + "policer_spec_cbs_unit": "policer_spec_cbs_unit", + "policer_spec_eir_unit": "policer_spec_eir_unit", + "policer_spec_ebs_unit": "policer_spec_ebs_unit", + "policer_spec_cir": "policer_spec_cir", + "policer_spec_cbs": "policer_spec_cbs", + "policer_spec_eir": "policer_spec_eir", + "policer_spec_ebs": "policer_spec_ebs" + } + + meter_config = table_entry.meter_config.policer_meter_config + + # Iterate through the key-value pairs and set attributes + for data in datas: + key, value = data.strip().split("=") + attribute_name = attribute_mapping.get(key) + if attribute_name: + setattr(meter_config, attribute_name, int(value)) + + return table_entry + + + def buildActionProfileMember(self, + table_name, + member_id=0, + action_name=None, + action_params=None, + priority=None): + action_profile_member = p4runtime_pb2.ActionProfileMember() + + action_profile_member.action_profile_id = self.get_action_profiles_id(table_name); + action_profile_member.member_id = member_id + + if action_name: + action = action_profile_member.action + action.action_id = self.get_actions_id(action_name) + if action_params: + action.params.extend([ + self.get_action_param_pb(action_name, field_name, value) + for field_name, value in action_params.items() + ]) + + return action_profile_member + + def buildActionProfileGroup(self, + table_name, + group_id=0, + max_size=0, + members=[]): + + action_profile_group = p4runtime_pb2.ActionProfileGroup() + action_profile_group.action_profile_id = self.get_action_profiles_id(table_name); + action_profile_group.group_id = group_id + # If input for list of members is a comma speated values enclosed in + # parenthesis. Here, remove the parenthesis and split members into + # a list. Iterate over each member list and add to the group. + # Eg: reference_members=(11,22), this needs to be split into a list. + # If Members is NULL (delete group), we dont need to split into each + # member_id + if members: + member_list = members.replace("(","").replace(")","").split(",") + for member_id in member_list: + if str.isdigit(member_id): + apg = action_profile_group.members.add() + apg.member_id = int(member_id) + else: + print("Member ID:", member_id, "should be numeric value.") + sys.exit(1) + + action_profile_group.max_size = max_size + return action_profile_group + +class P4RuntimeClient: + + def __init__(self, device_id, grpc_addr='localhost:9559', + election_id=(1, 0)): + self.device_id = device_id + self.election_id = election_id + grpc_addr = str(grpc_server_addr) + + root_ca_file_path = '/usr/share/stratum/certs/ca.crt' + client_key_file_path = '/usr/share/stratum/certs/client.key' + client_crt_file_path = '/usr/share/stratum/certs/client.crt' + + rootca_exists = os.path.isfile(root_ca_file_path) + clientkey_exists = os.path.isfile(client_key_file_path) + clientcrt_exists = os.path.isfile(client_crt_file_path) + + if rootca_exists and clientkey_exists and clientcrt_exists: + try: + with open(root_ca_file_path, 'rb') as rootca: + with open(client_key_file_path, 'rb') as clientkey: + with open(client_crt_file_path, 'rb') as clientcrt: + creds = grpc.ssl_channel_credentials(rootca.read(), clientkey.read(), clientcrt.read()) + + if creds is not None: + self.channel = grpc.secure_channel(grpc_addr, creds) + else: + self.print_warning_message("Credentials error accessing certificate/key files", grpc_addr) + self.channel = grpc.insecure_channel(grpc_addr) + except Exception as e: + raise e + else: + self.print_warning_message("Unable to locate TLS certificates", grpc_addr) + self.channel = grpc.insecure_channel(grpc_addr) + + self.stub = p4runtime_pb2_grpc.P4RuntimeStub(self.channel) + self.set_up_stream() + + def print_warning_message(self, custom_text, grpc_insecure): + print("*** Warning: " + custom_text + " ***") + print("Attempting P4RT communication over insecure channel on port " + grpc_insecure + "...") + + def set_up_stream(self): + self.stream_out_q = queue.Queue() + self.stream_in_q = queue.Queue() + + def stream_req_iterator(): + while True: + p = self.stream_out_q.get() + if p is None: + break + yield p + + def stream_recv_wrapper(stream): + @parse_p4runtime_error + def stream_recv(): + for p in stream: + self.stream_in_q.put(p) + try: + stream_recv() + except P4RuntimeException as e: + logging.critical("StreamChannel error, closing stream") + logging.critical(e) + self.stream_in_q.put(None) + + self.stream = self.stub.StreamChannel(stream_req_iterator()) + self.stream_recv_thread = threading.Thread( + target=stream_recv_wrapper, args=(self.stream,)) + self.stream_recv_thread.start() + + self.handshake() + + def handshake(self): + req = p4runtime_pb2.StreamMessageRequest() + arbitration = req.arbitration + arbitration.device_id = self.device_id + election_id = arbitration.election_id + election_id.high = self.election_id[0] + election_id.low = self.election_id[1] + self.stream_out_q.put(req) + + rep = self.get_stream_packet("arbitration", timeout=2) + if rep is None: + logging.critical("Failed to establish session with server") + sys.exit(1) + is_primary = (rep.arbitration.status.code == code_pb2.OK) + logging.debug("Session established, client is '{}'".format( + 'primary' if is_primary else 'backup')) + if not is_primary: + print("You are not the primary client, you only have read access " + "to the server") + + def get_stream_packet(self, type_, timeout=1): + start = time.time() + try: + while True: + remaining = timeout - (time.time() - start) + if remaining < 0: + break + msg = self.stream_in_q.get(timeout=remaining) + if msg is None: + return None + if not msg.HasField(type_): + continue + return msg + except queue.Empty: # timeout expired + pass + return None + + def get_packet_in(self, timeout=3): + msg = self.get_stream_packet("packet", timeout) + if msg is not None: + return msg.packet + + def send_packet_out(self, payload): + packet_out = p4runtime_pb2.PacketOut() + packet_out.payload = payload + packet_out_req = p4runtime_pb2.StreamMessageRequest() + packet_out_req.packet.CopyFrom(packet_out) + self.stream_out_q.put(packet_out_req) + + # Continuously poll for pkts from the server + def pktio_rx(self, tap_device): + print("Waiting for Rx packets...") + while True: + pkt = self.get_packet_in() + if pkt is not None: + tap_device.write(pkt.payload) + + @parse_p4runtime_error + def get_p4info(self): + req = p4runtime_pb2.GetForwardingPipelineConfigRequest() + req.device_id = self.device_id + req.response_type = p4runtime_pb2.GetForwardingPipelineConfigRequest. \ + P4INFO_AND_COOKIE + rep = self.stub.GetForwardingPipelineConfig(req) + return rep.config.p4info + + @parse_p4runtime_error + def set_fwd_pipe_config(self, p4info_path, bin_path): + req = p4runtime_pb2.SetForwardingPipelineConfigRequest() + req.device_id = self.device_id + election_id = req.election_id + election_id.high = self.election_id[0] + election_id.low = self.election_id[1] + req.action = p4runtime_pb2.SetForwardingPipelineConfigRequest. \ + VERIFY_AND_COMMIT + with open(p4info_path, 'r') as f1: + with open(bin_path, 'rb') as f2: + try: + google.protobuf.text_format.Merge(f1.read(), + req.config.p4info) + except google.protobuf.text_format.ParseError: + logging.error("Error when parsing P4Info") + raise + req.config.p4_device_config = f2.read() + return self.stub.SetForwardingPipelineConfig(req) + + def tear_down(self): + if self.stream_out_q: + self.stream_out_q.put(None) + self.stream_recv_thread.join() + self.channel.close() + # avoid a race condition if channel deleted when process terminates + del self.channel + + @parse_p4runtime_write_error + def write(self, req): + req.device_id = self.device_id + election_id = req.election_id + election_id.high = self.election_id[0] + election_id.low = self.election_id[1] + return self.stub.Write(req) + + @parse_p4runtime_write_error + def write_update(self, update): + req = p4runtime_pb2.WriteRequest() + req.device_id = self.device_id + election_id = req.election_id + election_id.high = self.election_id[0] + election_id.low = self.election_id[1] + req.updates.extend([update]) + return self.stub.Write(req) + + def read_one(self, entity): + req = p4runtime_pb2.ReadRequest() + req.device_id = self.device_id + req.entities.extend([entity]) + return self.stub.Read(req) + + +def with_client(f): + @wraps(f) + def handle(*args, **kwargs): + client = None + try: + client = P4RuntimeClient(device_id=1) + f(client, *args, **kwargs) + except Exception as e: + raise e + finally: + if client: + client.tear_down() + return handle + + + +@with_client +def p4ctl_show(client, bridge): + p4info = client.get_p4info() + if not p4info: + raise Exception("cannot retrieve P4Info from device {}".format(bridge)) + + helper = P4InfoHelper(p4info) + + bridge_line = "P4Runtime switch {} information:\n".format(bridge) + device_id_line = "device_id: {}\n".format(client.device_id) + n_tables_line = "n_tables: {}\n".format(len(p4info.tables)) + tables_line = "tables:" + for tbl in p4info.tables: + match = [mf.name for mf in tbl.match_fields] + actions = [helper.get_name('actions', a.id) for a in tbl.action_refs] + tables_line += " {}(match=[{}], actions=[{}])".format( + tbl.preamble.name, ', '.join(match), + ', '.join(actions)) + tables_line += "\n" + + print(''.join([bridge_line, + device_id_line, + n_tables_line, + tables_line, + '\n'.join(ports)])) + + +@with_client +def p4ctl_set_pipe(client, bridge, device_config, p4info): + client.set_fwd_pipe_config(p4info, device_config) + +class TapDevice: + def __init__(self, tap_name): + + self.tap_name = tap_name + + # constants derived from + # https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/if_tun.h#L34 + TUNSETIFF = 0x400454CA + IFF_TAP = 0x0002 + IFF_NO_PI = 0x1000 + try: + self.tap = os.open("/dev/net/tun", os.O_RDWR) + + # Configure the TAP interface. + ifr = struct.pack('16sH', self.tap_name.encode(), IFF_TAP | IFF_NO_PI) + fcntl.ioctl(self.tap, TUNSETIFF, ifr) + + print(f"Created TAP device {self.tap_name}") + except Exception as e: + print(f"Error creating TAP interface: {e}") + if self.tap is not None: + os.close(self.tap) + + # Continuously reads pkts from TAP port and sends them out to the server + def read(self, client): + MAX_FRAME_SIZE = 1500 + SELECT_TIMEOUT = 0.1 + while True: + readable, _, _ = select.select([self.tap], [], [], SELECT_TIMEOUT) + if self.tap in readable: + # read pkt from tap port + data = os.read(self.tap, MAX_FRAME_SIZE) + + # send the packet to the server + client.send_packet_out(data) + + # Sends pkts to the tap port + def write(self, data): + os.write(self.tap, data) + +# Thread function to read pkts from TAP port +def read_from_tap(tap, client): + print("Tx thread polling on TAP port") + tap.read(client) + +@with_client +def p4ctl_start_pktio(client, bridge): + try: + tap_device = TapDevice("pktioTap0") + tx_thread = threading.Thread(target=read_from_tap, args=(tap_device,client)) + tx_thread.start() + client.pktio_rx(tap_device) + except Exception as e: + print(f"Error: Failed to start packetIo {e}") + +@with_client +def p4ctl_get_pipe(client, bridge): + p4info = client.get_p4info() + if p4info: + print("P4Info of bridge {}:".format(bridge)) + print(p4info) + + +def parse_match_key(key): + match_keys = dict() + mk_fields = key.split(",") + for mk_field in mk_fields: + m = mk_field.split("=") + if "/" in m[1]: + lpm_mk = m[1].split("/") + match_keys[m[0]] = (lpm_mk[0], int(lpm_mk[1])) + else: + match_keys[m[0]] = m[1] + return match_keys + + +def parse_match_key_ternary(matchkey): + m_key = matchkey.split(",priority=") + key = m_key[0] + priority = m_key[1] + match_keys = dict() + mk_fields = key.split(",") + for mk_field in mk_fields: + m = mk_field.split("=") + if "/" in m[1]: + lpm_mk = m[1].split("/") + if (str.isdigit(lpm_mk[1])): + match_keys[m[0]] = (lpm_mk[0], int(lpm_mk[1])) + else: + match_keys[m[0]] = (lpm_mk[0], lpm_mk[1]) + else: + match_keys[m[0]] = m[1] + return match_keys, priority + + +def parse_action(action, helper): + """ + Accepted input types for action values are + IP - String, Hex or Decimal + MAC - String, Hex or Decimal + Other - Hex Or Decimal + """ + act_fields = action.split('(') + action_name = act_fields[0] + if (len(act_fields) > 1): + + params = act_fields[1].split(')')[0] + act_data = params.split(',') + + # One limitation with this client code is, user should pass all the + # action params associated with an action. Especially in case of lookup + # entries, we will have more params. Example mirroring.p4 program has + # around 45 params. Even though user is not going to program all + # params, current code expects user to program all 45 params. + # To avoid this, a logic is added where user can pass comma seperated + # =, this code will loop through + # available params and add values accordingly. Params which are not + # specified by user will default to 0. + # + # Existing command: + # action=my_control.mir_prof_action(0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,1, + # 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + # 0,0,0,0,0,0,0,0,0) + # + # Command after the change: + # action=my_control.mir_prof_action(port_id=1,mode=0,port_dest_type=0, + # dest_id=1,func_valid=1,store_vsi=1) + if act_data[0].find('=') != -1: + act_values = act_data + for av in helper.p4info.actions: + pre = av.preamble + if pre.name == action_name: + act_data = ['0']*len(av.params) + for p in av.params: + for act in act_values: + act_info = act.split('=') + if p.name == act_info[0]: + act_data[p.id-1]=act_info[1] + + act_data = [encodeIPv4_base10(a) if matchesIPv4(a) else + (int.from_bytes(encodeIPv6(a), "big") if matchesIPv6(a) else + (int.from_bytes(encodeMac(a), "big") if matchesMac(a) else + (int(a, 0) if a.find("0x") != -1 else int(a)))) + for a in act_data] + else: + act_data = [''] + return action_name, act_data + +def parse_flow(flow, helper): + tmp = flow.split(",action=") + mk = tmp[0] + act = tmp[1] + + match_keys = parse_match_key(mk) + action_name, act_data = parse_action(act, helper) + return match_keys, action_name, act_data + +def parse_flow_ternary(flow, helper): + tmp = flow.split(",action=") + mk = tmp[0] + act = tmp[1] + + match_keys, priority = parse_match_key_ternary(mk) + action_name, act_data = parse_action(act, helper) + return match_keys, priority, action_name, act_data + +def parse_flow_as(flow): + if ("priority" in flow): + print("Priority key is not expected in programming action profiles"); + sys.exit(1) + elif ("group_id" in flow): + # Use group_id for tokenizing + extract_mk = flow.split(",group_id=") + key = "group_id" + elif ("member_id" in flow): + # Use member_id for tokenizing + extract_mk = flow.split(",member_id=") + key = "member_id" + else: + raise AssertionError("group_id or member_id is expected") + mk = extract_mk[0] + act = extract_mk[1] + action_name = None + act_data = None + group_id = 0 + member_id = 0 + + if key == "action": + action_name, act_data = parse_action(act) + elif key == "group_id": + group_id = act + elif key == "member_id": + member_id = act + + match_keys = parse_match_key(mk) + return match_keys, action_name, act_data, group_id, member_id + +def parse_profile_mem(flow): + extract_mem = flow.split(",member_id=") + action_param = extract_mem[0] + mem_id = extract_mem[1] + + act = action_param.split("action=") + action_name, act_data = parse_action(act[1]) + return action_name, act_data, mem_id + +def parse_profile_group(flow): + extract_group = flow.split(",reference_members=") + group_id = extract_group[0].split("group_id=") + mem = extract_group[1].split(",max_size=") + + ref_members = mem[0] + max_size = mem[1] + return group_id[1], ref_members, max_size + +def parse_match_key_configData(matchkey): + m_key = matchkey.split(",config_data=") + key = m_key[0] + config_data = m_key[1] + match_keys = dict() + mk_fields = key.split(",") + + for mk_field in mk_fields: + m = mk_field.split("=") + if "/" in m[1]: + lpm_mk = m[1].split("/") + match_keys[m[0]] = (lpm_mk[0], int(lpm_mk[1])) + else: + match_keys[m[0]] = m[1] + return match_keys, config_data + +def parse_flow_meter(flow, helper): + tmp = flow.split(",action=") + mk = tmp[0] + act = tmp[1] + + match_keys, config_data = parse_match_key_configData(mk) + action_name, act_data = parse_action(act, helper) + return match_keys, config_data, action_name, act_data + +@with_client +def p4ctl_add_entry(client, bridge, tbl_name, flow): + """ + add-entry SWITCH TABLE MATCH_KEY ACTION ACTION_DATA + Example: + p4rt-ctl add-entry br0 pipe.filter_tbl + headers.ipv4.dstAddr=10.10.10.10,action=pipe.push_mpls(10) + """ + config_data = None + priority_val = None + grp_id = 0 + mem_id = 0 + + p4info = client.get_p4info() + if not p4info: + raise Exception("cannot retrieve P4Info from device {}".format(bridge)) + + helper = P4InfoHelper(p4info) + + if (flow.find(",group_id") != -1 or flow.find(",member_id") != -1): + # For TableAction when we use type as action_profile_member_id or + # action_profile_group_id, p4rt-ctl expects either group_id or + # member_id as part of flow. Hence delimiter as 'action=' doesnt work + # here. Use parse_flow_as in this case, where we use ',' as a delimiter + match_keys, action, action_data, grp_id, mem_id = parse_flow_as(flow) + elif (flow.find("priority") != -1): + # For match_type ternary, we expect priority to be programmed by user. + match_keys, priority_val, action, action_data = parse_flow_ternary(flow, helper) + elif (flow.find("config_data") != -1): + # For meter, we expect config data to be programmed by user. + match_keys, config_data, action, action_data = parse_flow_meter(flow, helper) + + else: + # For TableAction when we use type as Action, p4rt-ctl expects flow to + # have an 'action=' configured. In this parse_flow, we use 'action=' as + # a delimiter. + match_keys, action, action_data = parse_flow(flow, helper) + + te = helper.buildTableEntry( + table_name=tbl_name, + match_fields=match_keys, + action_name=action, + action_params=action_data + if (action_data==None or action_data==['']) + else {a.name: int(action_data[idx]) for idx, + a in enumerate(helper.get_action_params(action))}, + priority=priority_val, + group_id=int(grp_id), + member_id=int(mem_id), + config_data=config_data) + + update = p4runtime_pb2.Update() + update.type = p4runtime_pb2.Update.INSERT + update.entity.table_entry.CopyFrom(te) + + client.write_update(update) + +def parse_meter_configData(flow): + tmp = flow.split(",meter_config=") + key = tmp[0] + config_data = tmp[1] + + mk_fields = key.split(",") + mtr_id_str = mk_fields[0].split("=") + index_str = mk_fields[1].split("=") + meter_id=mtr_id_str[1] + index=index_str[1] + + return meter_id, index, config_data + +@with_client +def p4ctl_add_meter_config(client, bridge, tbl_name, flow): + """ + add-entry SWITCH TABLE MATCH_KEY ACTION ACTION_DATA + Example: + ./setup/bin/p4rt-ctl add-meter-config br0 my_control.meter1 "meter_id=2244878476, meter_index=6,meter_config=policer_meter_prof_id=0,policer_spec_cir_unit=0,policer_spec_cbs_unit=1,policer_spec_eir_unit=0,policer_spec_ebs_unit=1,policer_spec_cir=100,policer_spec_cbs=1500,policer_spec_eir=100,policer_spec_ebs=1500" + """ + p4info = client.get_p4info() + if not p4info: + raise Exception("cannot retrieve P4Info from device {}".format(bridge)) + + helper = P4InfoHelper(p4info) + if (flow.find("meter_config") != -1): + # For meter, we expect meter_index and config data to be programmed by user. + meter_id, index, config_data = parse_meter_configData(flow) + entity = p4runtime_pb2.Entity() + ce = entity.meter_entry + + if ce is None: + raise Exception("Cannot find meter_entry field in entity") + + ce.index.index = int(index) + ce.meter_id = int(meter_id) + datas = config_data.split(",") + + # Mapping of keys to attribute names + attribute_mapping = { + "policer_meter_prof_id": "policer_meter_prof_id", + "policer_spec_cir_unit": "policer_spec_cir_unit", + "policer_spec_cbs_unit": "policer_spec_cbs_unit", + "policer_spec_eir_unit": "policer_spec_eir_unit", + "policer_spec_ebs_unit": "policer_spec_ebs_unit", + "policer_spec_cir": "policer_spec_cir", + "policer_spec_cbs": "policer_spec_cbs", + "policer_spec_eir": "policer_spec_eir", + "policer_spec_ebs": "policer_spec_ebs" + } + # Iterate through the key-value pairs and set attributes + for data in datas: + key, value = data.strip().split("=") + attribute_name = attribute_mapping.get(key) + if attribute_name: + setattr(ce.config.policer_meter_config, attribute_name, int(value)) + + # Send a write() request + update = p4runtime_pb2.Update() + update.type = p4runtime_pb2.Update.MODIFY + update.entity.meter_entry.CopyFrom(ce) + + client.write_update(update) + +@with_client +def p4ctl_mod_entry(client, bridge, tbl_name, flow): + """ + mod-entry SWITCH TABLE MATCH_KEY ACTION ACTION_DATA + Example: + p4rt-ctl mod-entry br0 pipe.filter_tbl + headers.ipv4.dstAddr=10.10.10.10,action=pipe.push_mpls(10) + """ + priority_val = None + grp_id = 0 + mem_id = 0 + + p4info = client.get_p4info() + if not p4info: + raise Exception("cannot retrieve P4Info from device {}".format(bridge)) + + helper = P4InfoHelper(p4info) + + if (flow.find("group_id") != -1 or flow.find("member_id") != -1): + # For TableAction when we use type as action_profile_member_id or + # action_profile_group_id, p4rt-ctl expects either group_id or + # member_id as part of flow. Hence delimiter as 'action=' doesnt work + # here. Use parse_flow_as in this case, where we use ',' as a delimiter + match_keys, action, action_data, grp_id, mem_id = parse_flow_as(flow) + elif (flow.find("priority") != -1): + # For match_type ternary, we expect priority to be programmed by user. + match_keys, priority_val, action, action_data = parse_flow_ternary(flow, helper) + else: + # For TableAction when we use type as Action, p4rt-ctl expects flow to + # have an 'action=' configured. In this parse_flow, we use 'action=' as + # a delimiter. + match_keys, action, action_data = parse_flow(flow, helper) + + te = helper.buildTableEntry( + table_name=tbl_name, + match_fields=match_keys, + action_name=action, + action_params=action_data + if (action_data==None or action_data==['']) + else {a.name: int(action_data[idx]) for idx, + a in enumerate(helper.get_action_params(action))}, + priority=priority_val, + group_id=int(grp_id), + member_id=int(mem_id)) + + update = p4runtime_pb2.Update() + update.type = p4runtime_pb2.Update.MODIFY + update.entity.table_entry.CopyFrom(te) + + client.write_update(update) + + + +@with_client +def p4ctl_set_default_entry(client, bridge, tbl_name, action): + """ + set-default-entry SWITCH TABLE ACTION + Example: + p4rt-ctl set-default-entry br0 pipe.filter_tbl pipe.push_mpls(10) + """ + + p4info = client.get_p4info() + if not p4info: + raise Exception("cannot retrieve P4Info from device {}".format(bridge)) + helper = P4InfoHelper(p4info) + + action_name, action_data = parse_action(action) + te = helper.buildTableEntry( + table_name=tbl_name, + default_action=True, + action_name=action_name, + action_params={a.name: int(action_data[idx]) for idx, + a in enumerate(helper.get_action_params(action_name))}) + + update = p4runtime_pb2.Update() + update.type = p4runtime_pb2.Update.MODIFY + update.entity.table_entry.CopyFrom(te) + + client.write_update(update) + + +@with_client +def p4ctl_get_default_entry(client, bridge, tbl_name): + """ + get-default-entry SWITCH TABLE + Example: + p4rt-ctl get-default-entry br0 pipe.filter_tbl + """ + p4info = client.get_p4info() + if not p4info: + raise Exception("cannot retrieve P4Info from device {}".format(bridge)) + helper = P4InfoHelper(p4info) + + entity = p4runtime_pb2.Entity() + table_entry = entity.table_entry + table_entry.table_id = helper.get_tables_id(tbl_name) + table_entry.is_default_action = True + + print("Default table entry for bridge {}:".format(bridge)) + for response in client.read_one(entity): + for entry in response.entities: + try: + print(_format_entry(helper, entry.table_entry)) + except AttributeError: + print(" No default entry set!") + + +@with_client +def p4ctl_del_entry(client, bridge, tbl_name, match_key): + priority = None + if (match_key.find("priority") != -1): + # For match_type ternary, we expect priority to be set by user. + key, priority = parse_match_key_ternary(match_key) + else: + key = parse_match_key(match_key) + + p4info = client.get_p4info() + + if not p4info: + raise Exception("cannot retrieve P4Info from device {}".format(bridge)) + + helper = P4InfoHelper(p4info) + + te = helper.buildTableEntry( + table_name=tbl_name, + match_fields=key, + priority=priority, + ) + + update = p4runtime_pb2.Update() + update.type = p4runtime_pb2.Update.DELETE + + update.entity.table_entry.CopyFrom(te) + + client.write_update(update) + + +def _format_entry(p4info_helper, table_entry): + tbl_name = p4info_helper.get_name('tables', table_entry.table_id) + output_buffer = " " + output_buffer += "table={}".format(tbl_name) + if table_entry.priority is not None and table_entry.priority != 0: + output_buffer += " priority={}".format(table_entry.priority) + + first = True + for mf in table_entry.match: + match_field_name = p4info_helper.get_match_field_name(tbl_name, + mf.field_id) + mf_val = p4info_helper.get_match_field_value(mf) + if type(mf_val) == tuple: + mf_val = "{}/{}".format(decodeToHex(mf_val[0]), mf_val[1]) + else: + mf_val = decodeToHex(mf_val) + if first: + output_buffer += " {}={}".format(match_field_name, mf_val) + first = False + else: + output_buffer += ",{}={}".format(match_field_name, mf_val) + + if table_entry.action.action.action_id is not None and \ + table_entry.action.action.action_id != 0: + output_buffer += ' actions=' + action_name = p4info_helper.get_name('actions', + table_entry.action.action.action_id) + action_params = p4info_helper.get_action_params(action_name) + params_str = "" + for idx, param in enumerate(table_entry.action.action.params): + params_str += "{}={}".format(action_params[idx].name, + decodeToHex(param.value)) + output_buffer += '{}({})'.format(action_name, params_str) + + if table_entry.action.action_profile_member_id is not None and \ + table_entry.action.action_profile_member_id != 0: + output_buffer += ' actions=' + action_name = ' member_id' + params_str = table_entry.action.action_profile_member_id + output_buffer += '{}({})'.format(action_name, params_str) + + if table_entry.action.action_profile_group_id is not None and \ + table_entry.action.action_profile_group_id != 0: + output_buffer += ' actions=' + action_name = ' group_id' + params_str = table_entry.action.action_profile_group_id + output_buffer += '{}({})'.format(action_name, params_str) + + # Need to add support for action_profile_action_set, currently not supported. + + return output_buffer + +def _format_member(p4info_helper, apm): + apm_name = p4info_helper.get_name('action_profiles', apm.action_profile_id) + output_buffer = " " + output_buffer += "action_profiles={}".format(apm_name) + + output_buffer += ' actions=' + action_name = p4info_helper.get_name('actions', + apm.action.action_id) + action_params = p4info_helper.get_action_params(action_name) + params_str = "" + for idx, param in enumerate(apm.action.params): + params_str += "{}={}".format(action_params[idx].name, + int.from_bytes(param.value, "big")) + output_buffer += '{}({})'.format(action_name, params_str) + + return output_buffer + +def _format_group(p4info_helper, apg): + apm_name = p4info_helper.get_name('action_profiles', apg.action_profile_id) + output_buffer = " " + output_buffer += "action_profiles={}".format(apm_name) + + output_buffer += ' reference_members=' + + converted_list = [str(member.member_id) for member in apg.members] + params_str = ",".join(converted_list) + + output_buffer += '({})'.format(params_str) + + output_buffer += ' max_size=' + str(apg.max_size) + + return output_buffer + +@with_client +def p4ctl_dump_entries(client, bridge, tbl_name=None): + p4info = client.get_p4info() + if not p4info: + raise Exception("cannot retrieve P4Info from device {}".format(bridge)) + helper = P4InfoHelper(p4info) + entity = p4runtime_pb2.Entity() + table_entry = entity.table_entry + + if not tbl_name: + table_entry.table_id = 0 + else: + table_entry.table_id = helper.get_tables_id(tbl_name) + + print("Table entries for bridge {}:".format(bridge)) + for response in client.read_one(entity): + for entry in response.entities: + print(_format_entry(helper, entry.table_entry)) + +@with_client +def p4ctl_add_group(client, bridge, tbl_name, flow): + """ + add-action-profile-group SWITCH TABLE GROUP_ID MEMBER_ID/ACTIONS MAX_SIZE + Example: + p4rt-ctl add-action-profile-group br0 pipe.filter_tbl + group_id=1,reference_members=(1,2),max_size=2 + """ + group_id, members, max_size = parse_profile_group(flow) + if int(group_id) == 0: + print("Group ID 0 is unsupported.") + return + + p4info = client.get_p4info() + if not p4info: + raise Exception("cannot retrieve P4Info from device {}".format(bridge)) + + helper = P4InfoHelper(p4info) + + apg = helper.buildActionProfileGroup( + table_name=tbl_name, + group_id=int(group_id), + max_size=int(max_size), + members=members) + + update = p4runtime_pb2.Update() + update.type = p4runtime_pb2.Update.INSERT + update.entity.action_profile_group.CopyFrom(apg) + + client.write_update(update) + +@with_client +def p4ctl_mod_group(client, bridge, tbl_name, flow): + """ + modify-action-profile-group SWITCH TABLE GROUP_ID + MEMBER_ID/ACTIONS MAX_SIZE + Example: + p4rt-ctl modify-action-profile-group br0 pipe.filter_tbl + group_id=1,reference_members=(1,2),max_size=2 + """ + + group_id, members, max_size = parse_profile_group(flow) + if int(group_id) == 0: + print("Group ID 0 is unsupported.") + return + + print("Backend target does not currently support Modify Group.") + print("Instead, delete group:", group_id, "and re-add same group with " + "members:", members, " size:", max_size) + return + + p4info = client.get_p4info() + if not p4info: + raise Exception("cannot retrieve P4Info from device {}".format(bridge)) + + helper = P4InfoHelper(p4info) + + apg = helper.buildActionProfileGroup( + table_name=tbl_name, + group_id=int(group_id), + max_size=int(max_size), + members=members) + + update = p4runtime_pb2.Update() + update.type = p4runtime_pb2.Update.MODIFY + update.entity.action_profile_group.CopyFrom(apg) + + client.write_update(update) + +@with_client +def p4ctl_del_group(client, bridge, tbl_name, flow): + """ + delete-action-profile-group SWITCH TABLE GROUP_ID + Example: + p4rt-ctl delete-action-profile-group br0 pipe.filter_tbl + group_id=1 + """ + group_id = flow.split("group_id=")[1] + if int(group_id) == 0: + print("Group ID 0 is unsupported.") + return + + p4info = client.get_p4info() + if not p4info: + raise Exception("cannot retrieve P4Info from device {}".format(bridge)) + + helper = P4InfoHelper(p4info) + apg = helper.buildActionProfileGroup( + table_name=tbl_name, + group_id=int(group_id)) + + update = p4runtime_pb2.Update() + update.type = p4runtime_pb2.Update.DELETE + update.entity.action_profile_group.CopyFrom(apg) + + client.write_update(update) + +@with_client +def p4ctl_add_member(client, bridge, tbl_name, flow): + """ + add-action-profile-member SWITCH TABLE ACTION ACTION_DATA MEMBER_ID + Example: + p4rt-ctl add-action-profile-member br0 pipe.filter_tbl + action=pipe.push_mpls(10),member_id=1 + """ + action, action_data, mem_id = parse_profile_mem(flow) + if int(mem_id) == 0: + print("Member ID 0 is unsupported.") + return + + p4info = client.get_p4info() + if not p4info: + raise Exception("cannot retrieve P4Info from device {}".format(bridge)) + + helper = P4InfoHelper(p4info) + + apm = helper.buildActionProfileMember( + table_name=tbl_name, + member_id=int(mem_id), + action_name=action, + action_params={a.name: int(action_data[idx]) for idx, + a in enumerate(helper.get_action_params(action))}) + + update = p4runtime_pb2.Update() + update.type = p4runtime_pb2.Update.INSERT + update.entity.action_profile_member.CopyFrom(apm) + + client.write_update(update) + + +@with_client +def p4ctl_del_member(client, bridge, tbl_name, flow): + """ + delete-action-profile-member SWITCH TABLE MEMBER_ID + Example: + p4rt-ctl delete-action-profile-member br0 pipe.filter_tbl + member_id=1 + """ + member_id = flow.split("member_id=")[1] + + if int(member_id) == 0: + print("Member ID 0 is unsupported.") + return + + p4info = client.get_p4info() + if not p4info: + raise Exception("cannot retrieve P4Info from device {}".format(bridge)) + + helper = P4InfoHelper(p4info) + apm = helper.buildActionProfileMember( + table_name=tbl_name, + member_id=int(member_id)) + + update = p4runtime_pb2.Update() + update.type = p4runtime_pb2.Update.DELETE + update.entity.action_profile_member.CopyFrom(apm) + + client.write_update(update) + + +@with_client +def p4ctl_get_member(client, bridge, tbl_name, flow): + """ + get-action-profile-member SWITCH TABLE MEMBER_ID + Example: + p4rt-ctl get-action-profile-member br0 pipe.filter_tbl + "member_id=1" + """ + + member_id = flow.split("member_id=")[1] + if int(member_id) == 0: + print("Member ID 0 is unsupported.") + return + + p4info = client.get_p4info() + if not p4info: + raise Exception("cannot retrieve P4Info from device {}".format(bridge)) + + helper = P4InfoHelper(p4info) + entity = p4runtime_pb2.Entity() + apm = entity.action_profile_member + + apm.member_id = int(member_id) + if not tbl_name: + apm.action_profile_id = 0 + else: + apm.action_profile_id = helper.get_action_profiles_id(tbl_name) + + print("Action associated with member_id: ", member_id) + for response in client.read_one(entity): + for entry in response.entities: + print(_format_member(helper, entry.action_profile_member)) + +@with_client +def p4ctl_get_group(client, bridge, tbl_name, flow): + """ + get-action-profile-group SWITCH TABLE GROUP_ID + Example: + p4rt-ctl get-action-profile-group br0 pipe.filter_tbl + "group_id=1" + """ + group_id = flow.split("group_id=")[1] + if int(group_id) == 0: + print("Group ID 0 is unsupported.") + return + + p4info = client.get_p4info() + if not p4info: + raise Exception("cannot retrieve P4Info from device {}".format(bridge)) + + helper = P4InfoHelper(p4info) + entity = p4runtime_pb2.Entity() + apg = entity.action_profile_group + + apg.group_id = int(group_id) + if not tbl_name: + apg.action_profile_id = 0 + else: + apg.action_profile_id = helper.get_action_profiles_id(tbl_name) + + print("Members associated with group: ", group_id) + for response in client.read_one(entity): + for entry in response.entities: + print(_format_group(helper, entry.action_profile_group)) + +def parse_rcflow(flow): + tmp = flow.split(",") + + cnt_id_str = tmp[0].split("=") + index_str = tmp[1].split("=") + + if cnt_id_str[0] != "counter_id": + print("Input error: parameter should be \'counter_id\'") + sys.exit(1) + + if index_str[0] != "index": + print("Input error: parameter should be \'index\'") + sys.exit(1) + + counter_id=cnt_id_str[1] + index=index_str[1] + + if counter_id.isdigit() is False: + print("Counter ID: \"{}\" should be numeric value".format(counter_id)) + sys.exit(1) + + if index == "UNSET": #special case for "UNSET" + index = 0 + elif index.isdigit() is False: + print("Index: \"{}\" should be numeric value".format(index)) + sys.exit(1) + + return counter_id, index + +def _format_dce(ce): + output_buffer = 'table_id={}'.format(ce.table_entry.table_id) + output_buffer += ', counter_data=(bytes={},packets={})'.format(ce.data.byte_count, ce.data.packet_count) + return output_buffer + +@with_client +def p4ctl_get_direct_counter_entry(client, bridge, cnt_tbl_name, flow): + """ + get-direct-counter SWITCH COUNTER_TABLE READ_COUNTER_FLOW + Example 1: // return direct counter stats for matching key + p4rt-ctl get-direct-counter br0 my_control.e_fwd + "hdrs.mac[vmeta.common.depth].da="0x000000000275", + hdrs.mac[vmeta.common.depth].sa="0x9ebace98d9b1"" + """ + p4info = client.get_p4info() + if not p4info: + raise Exception("cannot retrieve P4Info from device {}".format(bridge)) + + key = parse_match_key(flow) + helper = P4InfoHelper(p4info) + entity = p4runtime_pb2.Entity() + ce = entity.direct_counter_entry + if ce is None: + raise Exception("Cannot find direct_counter_entry field in entity") + + te = helper.buildTableEntry( + table_name=cnt_tbl_name, + match_fields=key + ) + + ce.table_entry.CopyFrom(te) + entity.direct_counter_entry.table_entry.CopyFrom(te) + for response in client.read_one(entity): + for entry in response.entities: + if entity.direct_counter_entry.table_entry.table_id == ce.table_entry.table_id: + print(_format_dce(entry.direct_counter_entry)) + +def validate_counter_name_and_id(p4info, cnt_tbl_name, ctr_id): + for iter in p4info.counters: + if iter.preamble.name == cnt_tbl_name: + if int(ctr_id) == 0 or iter.preamble.id == int(ctr_id): + return True + + return False + +def _format_ce(ce): + output_buffer = 'counter_id={}, index={}'.format(ce.counter_id, ce.index.index) + output_buffer += ', counter_data=(bytes={},packets={})'.format(ce.data.byte_count, ce.data.packet_count) + return output_buffer + +@with_client +def p4ctl_get_counter_entry(client, bridge, cnt_tbl_name, flow): + """ + get-counter-entry SWITCH COUNTER_TABLE READ_COUNTER_FLOW + Example 1: // COUNTER_ID=0, return full counter table + p4rt-ctl get-counter br0 ipv4_host_counter + "counter_id=0,index=UNSET" + p4rt-ctl get-counter br0 ipv4_host_counter + "counter_id=0,index=2" + Example 2: // INDEX=UNSET, return all entries matching with counter_id + p4rt-ctl get-counter br0 ipv4_host_pkt_counter + "counter_id=1,index=UNSET" + Example 3: // return single matching counter entry + p4rt-ctl get-counter br0 ipv4_host_pkt_counter + "counter_id=1,index=2" + """ + p4info = client.get_p4info() + if not p4info: + raise Exception("cannot retrieve P4Info from device {}".format(bridge)) + + ctr_id, idx = parse_rcflow(flow) + + if validate_counter_name_and_id(p4info, cnt_tbl_name, ctr_id) is False: + print("Error: Could not find counter table \'{}\' or counter_id {} in P4Info".format(cnt_tbl_name, ctr_id)) + sys.exit(1) + + + helper = P4InfoHelper(p4info) + entity = p4runtime_pb2.Entity() + ce = entity.counter_entry + + if ce is None: + raise Exception("Cannot find counter_entry field in entity") + + ce.counter_id = int(ctr_id) or 0 #Assign 0 if None + + ce.index.index = int(idx) + + for response in client.read_one(entity): + for entry in response.entities: + if entry.counter_entry.counter_id == ce.counter_id and entry.counter_entry.index.index == int(idx): + print(_format_ce(entry.counter_entry)) + +@with_client +def p4ctl_reset_counter_entry(client, bridge, cnt_tbl_name, flow): + """ + reset-counter-entry SWITCH COUNTER_TABLE RESET_COUNTER_FLOW + Example : + p4rt-ctl reset-counter br0 pipe.port_bytes_in + "counter_id=1,index=2" + """ + p4info = client.get_p4info() + if not p4info: + raise Exception("cannot retrieve P4Info from device {}".format(bridge)) + + ctr_id, idx = parse_rcflow(flow) + + if validate_counter_name_and_id(p4info, cnt_tbl_name, ctr_id) is False: + print("Error: Could not find counter table \'{}\' or counter_id {} in P4Info".format(cnt_tbl_name, ctr_id)) + sys.exit(1) + + helper = P4InfoHelper(p4info) + entity = p4runtime_pb2.Entity() + ce = entity.counter_entry + + if ce is None: + raise Exception("Cannot find counter_entry field in entity") + + ce.counter_id = int(ctr_id) + ce.index.index = int(idx) + ce.data.byte_count = 0 + ce.data.packet_count = 0 + + # Send a MODIFY write() request + update = p4runtime_pb2.Update() + update.type = p4runtime_pb2.Update.MODIFY + update.entity.counter_entry.CopyFrom(ce) + + client.write_update(update) + +def parse_get_meter_flow(flow): + tmp = flow.split(",") + + mtr_id_str = tmp[0].split("=") + index_str = tmp[1].split("=") + + if mtr_id_str[0] != "meter_id": + print("Input error: parameter should be \'meter_id\'") + sys.exit(1) + + if index_str[0] != "meter_index": + print("Input error: parameter should be \'meter_index\'") + sys.exit(1) + + meter_id=mtr_id_str[1] + index=index_str[1] + + if meter_id.isdigit() is False: + print("Meter ID: \"{}\" should be numeric value".format(meter_id)) + sys.exit(1) + + if index.isdigit() is False: + print("Index: \"{}\" should be numeric value".format(index)) + sys.exit(1) + + return meter_id, index + +def _format_me(ce): + output_buffer = 'meter_id={}, index={}'.format(ce.meter_id, ce.index) + output_buffer += ', meter_counter_data_green=(bytes={},packets={})'.format(ce.counter_data.green.byte_count, ce.counter_data.green.packet_count) + output_buffer += ', meter_counter_data_yellow=(bytes={},packets={})'.format(ce.counter_data.yellow.byte_count, ce.counter_data.yellow.packet_count) + output_buffer += ', meter_counter_data_red=(bytes={},packets={})'.format(ce.counter_data.red.byte_count, ce.counter_data.red.packet_count) + return output_buffer + +def _format_dme(ce): + pdb.set_trace() + output_buffer = 'table_id={}'.format(ce.table_entry.table_id) + output_buffer += ', direct_meter_counter_data_green=(bytes={},packets={})'.format(ce.counter_data.green.byte_count, ce.counter_data.green.packet_count) + output_buffer += ', direct_meter_counter_data_yellow=(bytes={},packets={})'.format(ce.counter_data.yellow.byte_count, ce.counter_data.yellow.packet_count) + output_buffer += ', direct_meter_counter_data_red=(bytes={},packets={})'.format(ce.counter_data.red.byte_count, ce.counter_data.red.packet_count) + return output_buffer + +@with_client +def p4ctl_get_packet_mod_meter_entry(client, bridge, tbl_name, flow): + """ + p4ctl-get-packet-mod-meter-entry SWITCH METER_TABLE READ_METER_FLOW + Example : // return single matching meter entry + p4rt-ctl get-packet-mod-meter br0 my_control.meter1 "meter_id=2244878476,meter_index=6" + """ + p4info = client.get_p4info() + if not p4info: + raise Exception("cannot retrieve P4Info from device {}".format(bridge)) + + mtr_id, idx = parse_get_meter_flow(flow) + + helper = P4InfoHelper(p4info) + entity = p4runtime_pb2.Entity() + ce = entity.meter_entry + + if ce is None: + raise Exception("Cannot find meter_entry field in entity") + + ce.meter_id = int(mtr_id) or 0 #Assign 0 if None + ce.index.index = int(idx) + + for response in client.read_one(entity): + for entry in response.entities: + if entry.meter_entry.meter_id == ce.meter_id and entry.meter_entry.index.index == int(idx): + print(_format_me(entry.meter_entry)) + +@with_client +def p4ctl_get_direct_pkt_mod_meter_entry(client, bridge, tbl_name, flow): + """ + get-direct-pkt-mod-meter SWITCH METER_TABLE READ_METER_FLOW + Example 1: // return direct meter stats for matching key + p4rt-ctl get-direct-pkt-mod-meter br0 my_control.e_fwd + "hdrs.mac[vmeta.common.depth].da="0x000000000275", + hdrs.mac[vmeta.common.depth].sa="0x9ebace98d9b1"" + """ + p4info = client.get_p4info() + if not p4info: + raise Exception("cannot retrieve P4Info from device {}".format(bridge)) + + key = parse_match_key(flow) + helper = P4InfoHelper(p4info) + entity = p4runtime_pb2.Entity() + ce = entity.direct_meter_entry + if ce is None: + raise Exception("Cannot find direct_meter_entry field in entity") + + te = helper.buildTableEntry( + table_name=tbl_name, + match_fields=key + ) + + ce.table_entry.CopyFrom(te) + entity.direct_meter_entry.table_entry.CopyFrom(te) + for response in client.read_one(entity): + for entry in response.entities: + if entity.direct_meter_entry.table_entry.table_id == ce.table_entry.table_id: + print(_format_dme(entry.direct_meter_entry)) + +all_commands = { + "show": (p4ctl_show, 1), + "set-pipe": (p4ctl_set_pipe, 3), + "start-pktio": (p4ctl_start_pktio, 1), + "get-pipe": (p4ctl_get_pipe, 1), + "add-entry": (p4ctl_add_entry, 3), + "modify-entry": (p4ctl_mod_entry, 3), + "set-default-entry": (p4ctl_set_default_entry, 3), + "get-default-entry": (p4ctl_get_default_entry, 2), + "del-entry": (p4ctl_del_entry, 2), + "dump-entries": (p4ctl_dump_entries, 1), + "add-action-profile-member": (p4ctl_add_member, 3), + "delete-action-profile-member": (p4ctl_del_member, 3), + "add-action-profile-group": (p4ctl_add_group, 3), + #"modify-action-profile-group": (p4ctl_mod_group, 3), + "delete-action-profile-group": (p4ctl_del_group, 3), + "get-action-profile-member": (p4ctl_get_member, 3), + "get-action-profile-group": (p4ctl_get_group, 3), + "get-counter" : (p4ctl_get_counter_entry, 2), + "get-direct-counter" : (p4ctl_get_direct_counter_entry, 2), + "reset-counter" : (p4ctl_reset_counter_entry, 2), + "add-meter-config" : (p4ctl_add_meter_config, 3), + "get-packet-mod-meter" : (p4ctl_get_packet_mod_meter_entry, 2), + "get-direct-pkt-mod-meter" : (p4ctl_get_direct_pkt_mod_meter_entry, 2) +} + + +def validate_args(argv, command, expected_nr): + if len(argv)-2 < expected_nr: + raise Exception("p4rt-ctl: '{}' command requires at least {} " + "arguments".format(command, expected_nr)) + +# Global variable +grpc_server_addr = "" + +def main(): + global grpc_server_addr + if len(sys.argv) < 2: + print("p4rt-ctl: missing command name; use --help for help") + sys.exit(1) + parser = argparse.ArgumentParser(usage=USAGE) + parser.add_argument('-g', '--grpc_addr', required=False, type=str, help="P4Runtime gRPC server address, format : :") + parser.add_argument('command', nargs='*', help='Subcommand to run') + args = parser.parse_args() + if args.grpc_addr is None: + grpc_server_addr = 'localhost:9559' + else: + ip_addr = args.grpc_addr.split(":"); + if valid_ip(ip_addr[0]): + grpc_server_addr = str(args.grpc_addr) + else: + print("Invalid IP address for GRPC server ") + system.exit(1) + if args.command[0] not in all_commands.keys(): + usage() + + + try: + # use dispatch pattern to invoke method with same name + # but first validate number of arguments + validate_args(sys.argv, command=args.command[0], + expected_nr=all_commands[args.command[0]][1]) + all_commands[args.command[0]][0](*args.command[1:]) + + except Exception as e: + print("Error:", str(e)) + sys.exit(1) + + +if __name__ == '__main__': + main() diff --git a/vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/bin/p4runtime-2023.11.0-py3-none-any.whl b/vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/bin/p4runtime-2023.11.0-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..1bb524d01060e28fbffb6463d932f612b57182b7 GIT binary patch literal 21190 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.8 +Description-Content-Type: text/markdown; charset=UTF-8 +License-File: LICENSE +Requires-Dist: protobuf >=4.25.0 +Requires-Dist: grpcio >=1.59.2 +Requires-Dist: googleapis-common-protos >=1.61.0 + +# P4Runtime + +This directory contains Python protobuf files for the custom version of P4Runtime +used by `infrap4d` in P4 Control Plane. + +See the +[P4Runtime Specification](https://github.com/ipdk-io/p4runtime-dev/blob/meters/README.md) +for more information. diff --git a/vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/bin/p4runtime-2023.11.0/p4runtime-2023.11.0.dist-info/RECORD b/vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/bin/p4runtime-2023.11.0/p4runtime-2023.11.0.dist-info/RECORD new file mode 100644 index 000000000..6058df0a3 --- /dev/null +++ b/vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/bin/p4runtime-2023.11.0/p4runtime-2023.11.0.dist-info/RECORD @@ -0,0 +1,17 @@ +p4/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +p4/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +p4/config/v1/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +p4/config/v1/p4info_pb2.py,sha256=r8cIVMC7RnqbctQHVn0YAx3PAsqeDIiYTBc4eBjljb4,13341 +p4/config/v1/p4info_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159 +p4/config/v1/p4types_pb2.py,sha256=63ay_E1hB3U7Zm7dp2cVtKfucGgE569vFLZ4h5sDcu0,13219 +p4/config/v1/p4types_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159 +p4/v1/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +p4/v1/p4data_pb2.py,sha256=Fzkm7VdGzzzOFlD69PUaJEEIcSsOlcBn7aBjOcSVxv4,2799 +p4/v1/p4data_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159 +p4/v1/p4runtime_pb2.py,sha256=HH6c_sXFU4GRYA_onvrwTQOMCE9xLAWKG-Mi1F0wAJY,23106 +p4/v1/p4runtime_pb2_grpc.py,sha256=nE0FhRWhbSzw87PpE4WdQKJb-ryE-53Lqx1qXPqIWYs,11550 +p4runtime-2023.11.0.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357 +p4runtime-2023.11.0.dist-info/METADATA,sha256=4U6aS92YjVUNm7PMDxWTcEy6rHcm7gJfzGbEcC_K6zE,859 +p4runtime-2023.11.0.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92 +p4runtime-2023.11.0.dist-info/top_level.txt,sha256=Ss3wGkEQfZVqh-rkoB2gGKZMgisjExjnfKmLYchnGLo,3 +p4runtime-2023.11.0.dist-info/RECORD,, diff --git a/vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/bin/p4runtime-2023.11.0/p4runtime-2023.11.0.dist-info/WHEEL b/vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/bin/p4runtime-2023.11.0/p4runtime-2023.11.0.dist-info/WHEEL new file mode 100644 index 000000000..98c0d20b7 --- /dev/null +++ b/vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/bin/p4runtime-2023.11.0/p4runtime-2023.11.0.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.42.0) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/bin/p4runtime-2023.11.0/p4runtime-2023.11.0.dist-info/top_level.txt b/vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/bin/p4runtime-2023.11.0/p4runtime-2023.11.0.dist-info/top_level.txt new file mode 100644 index 000000000..13f390d2f --- /dev/null +++ b/vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/bin/p4runtime-2023.11.0/p4runtime-2023.11.0.dist-info/top_level.txt @@ -0,0 +1 @@ +p4 diff --git a/vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/fxp-net_linux-networking/fxp-net_linux-networking.context.json b/vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/fxp-net_linux-networking/fxp-net_linux-networking.context.json new file mode 100644 index 000000000..de2831494 --- /dev/null +++ b/vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/fxp-net_linux-networking/fxp-net_linux-networking.context.json @@ -0,0 +1,13877 @@ +{ + "program_name": "fxp-net_linux-networking", + "build_date": "Mon Nov 4 22:13:20 2024", + "compile_command": "/opt/p4-tools/p4c/bin/p4c-pna-xxp -I /opt/p4-tools/p4c/share/p4c/p4c_src/../idpf-lib --Wdisable --no-pedantic --top4 LiveVariableAnalysis --context fxp-net_linux-networking.context.json --tdi fxp-net_linux-networking.tdi.json -I /opt/p4-tools/p4c/share/p4c/p4include -I /opt/p4-tools/p4c/bin/../lib -I /opt/p4-tools/p4c/bin/../share/p4c/p4include -I /opt/p4-tools/p4c/bin/../share/p4c/idpf-lib --p4v=16 --p4runtime-files fxp-net_linux-networking.p4info.txt --pkg-name linux_networking --pkg-version 1.0.73.29 -v -o ./fxp-net_linux-networking_da46405215bc427e884de0ff497c6e7b.s fxp-net_linux-networking.p4", + "compiler_version": "3.0.70.124", + "schema_version": "1.0.0", + "run_id": "124114221011", + "target": "MEV", + "global_configs": { + "hardware_blocks": [ + { + "name": "RC", + "rc_entry_space_cfg": { + "rc_num_banks": 8, + "rc_num_entries": 8192 + } + }, + { + "name": "CXP_LEM", + "hash_space_cfg": [ + { + "hash_space_id": 0, + "base_address": 0 + }, + { + "hash_space_id": 1, + "base_address": 147456 + } + ] + }, + { + "name": "LEM", + "hash_space_cfg": [ + { + "hash_space_id": 0, + "base_address": 0 + }, + { + "hash_space_id": 1, + "base_address": 0 + } + ] + }, + { + "name": "MOD", + "hash_space_cfg": { + "base_128_entries": 0, + "base_256_entries": 4194304 + } + }, + { + "name": "SEM", + "obj_cache": [ + { + "object_id": 0, + "base_address": 0, + "entry_size": 32 + }, + { + "object_id": 1, + "base_address": 10424320, + "entry_size": 64 + }, + { + "object_id": 2, + "base_address": 31272960, + "entry_size": 64 + } + ] + } + ], + "count_mode": 60 + }, + "tables": [ + { + "table_type": "match", + "direction": "BIDIRECTIONAL", + "handle": 48773578, + "name": "MainControlDecrypt.lem_exception", + "size": 1024, + "isDefaultSize": true, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [], + "default_action_handle": 21257015, + "actions": [ + { + "name": "NoAction", + "handle": 21257015, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "CXP_LEM", + "id": 12, + "hw_interface": "ConfigQueue", + "profile": [ + 0 + ], + "hash_size": 12, + "action_format": [ + { + "action_name": "NoAction", + "action_handle": 21257015, + "immediate_fields": [], + "hw_actions_list": [] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "BIDIRECTIONAL", + "handle": 38116127, + "name": "MainControlDecrypt.lem_clear", + "size": 1024, + "isDefaultSize": true, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [], + "default_action_handle": 21257015, + "actions": [ + { + "name": "NoAction", + "handle": 21257015, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "CXP_LEM", + "id": 12, + "hw_interface": "ConfigQueue", + "profile": [ + 1 + ], + "hash_size": 12, + "action_format": [ + { + "action_name": "NoAction", + "action_handle": 21257015, + "immediate_fields": [], + "hw_actions_list": [] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "BIDIRECTIONAL", + "handle": 45068641, + "name": "MainControlDecrypt.ipsec_rx_sa_classification_table", + "size": 1024, + "isDefaultSize": true, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "hdrs.ipv4[vmeta.common.depth].src_ip", + "instance_name": "hdrs.ipv4[vmeta.common.depth].src_ip", + "field_name": "hdrs.ipv4[vmeta.common.depth].src_ip", + "match_type": "exact", + "bit_width": 32, + "index": 0, + "position": 0 + }, + { + "name": "hdrs.ipv4[vmeta.common.depth].dst_ip", + "instance_name": "hdrs.ipv4[vmeta.common.depth].dst_ip", + "field_name": "hdrs.ipv4[vmeta.common.depth].dst_ip", + "match_type": "exact", + "bit_width": 32, + "index": 1, + "position": 4 + }, + { + "name": "hdrs.esp.spi", + "instance_name": "hdrs.esp", + "field_name": "spi", + "match_type": "exact", + "bit_width": 32, + "index": 2, + "position": 8 + } + ], + "match_key_format": [ + { + "match_key_handle": 0, + "byte_order": "NETWORK", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 32 + }, + { + "match_key_handle": 1, + "byte_order": "NETWORK", + "byte_array_index": 4, + "start_bit_offset": 0, + "bit_width": 32 + }, + { + "match_key_handle": 2, + "byte_order": "NETWORK", + "byte_array_index": 8, + "start_bit_offset": 0, + "bit_width": 32 + } + ], + "default_action_handle": 30285547, + "actions": [ + { + "name": "MainControlDecrypt.ipsec_decrypt", + "handle": 33177492, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "saidx", + "bit_width": 24 + } + ] + }, + { + "name": "MainControlDecrypt.ipsec_bypass", + "handle": 30285547, + "constant_default_action": true, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "CXP_LEM", + "id": 12, + "hw_interface": "ConfigQueue", + "profile": [ + 10 + ], + "hash_size": 325632, + "action_format": [ + { + "action_name": "MainControlDecrypt.ipsec_decrypt", + "action_handle": 33177492, + "immediate_fields": [ + { + "param_name": "saidx", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 24 + } + ], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 0, + "setmd_action_code": "SET_8b", + "parameters": [ + { + "param_name": "saidx", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 8, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "mask": 255, + "type_id": 0, + "offset": 15 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 1, + "setmd_action_code": "SET_16b", + "parameters": [ + { + "param_name": "saidx", + "param_handle": 0, + "param_start_bit": 8, + "param_value_length": 16, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "type_id": 0, + "offset": 8 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 2, + "setmd_action_code": "SET_8b", + "value": 3, + "mask": 3, + "type_id": 0, + "offset": 1 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 3, + "setmd_action_code": "SET_8b", + "value": 0, + "mask": 4, + "type_id": 0, + "offset": 3 + } + ] + }, + { + "action_name": "MainControlDecrypt.ipsec_bypass", + "action_handle": 30285547, + "immediate_fields": [], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 0, + "setmd_action_code": "SET_8b", + "value": 0, + "mask": 3, + "type_id": 0, + "offset": 1 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 1, + "setmd_action_code": "SET_8b", + "value": 4, + "mask": 4, + "type_id": 0, + "offset": 3 + } + ] + } + ], + "default_action_format": [ + { + "action_name": "MainControlDecrypt.ipsec_bypass", + "action_handle": 30285547, + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 0, + "setmd_action_code": "SET_8b", + "value": 0, + "mask": 3, + "type_id": 0, + "offset": 1 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 1, + "setmd_action_code": "SET_8b", + "value": 4, + "mask": 4, + "type_id": 0, + "offset": 3 + } + ] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "BIDIRECTIONAL", + "handle": 42605135, + "name": "linux_networking_control.rif_mod_table_start", + "size": 1024, + "isDefaultSize": true, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "rif_mod_map_id0", + "instance_name": "rif_mod_map_id0", + "field_name": "rif_mod_map_id0", + "match_type": "exact", + "bit_width": 11, + "index": 0, + "position": 0 + } + ], + "default_action_handle": 21257015, + "actions": [ + { + "name": "linux_networking_control.set_src_mac_start", + "handle": 23093409, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "arg", + "bit_width": 16 + } + ] + }, + { + "name": "NoAction", + "handle": 21257015, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "MOD", + "id": 7, + "hw_interface": "MMIO", + "hw_resource": "MOD_LUT", + "hw_resource_id": 2, + "profile": [ + 3, + 16, + 18 + ], + "action_format": [ + { + "action_name": "linux_networking_control.set_src_mac_start", + "action_handle": 23093409, + "immediate_fields": [ + { + "param_name": "arg", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 16 + } + ], + "mod_content_format": { + "mod_lut_num": 0, + "mod_obj_size": 1, + "mod_fields": [ + { + "name": "arg", + "handle": 0, + "param_handle": 0, + "type": "parameter", + "byte_order": "HOST", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 16, + "value": [] + } + ] + }, + "hw_actions_list": [] + }, + { + "action_name": "NoAction", + "action_handle": 21257015, + "immediate_fields": [], + "hw_actions_list": [] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "BIDIRECTIONAL", + "handle": 43970557, + "name": "linux_networking_control.rif_mod_table_mid", + "size": 1024, + "isDefaultSize": true, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "rif_mod_map_id1", + "instance_name": "rif_mod_map_id1", + "field_name": "rif_mod_map_id1", + "match_type": "exact", + "bit_width": 11, + "index": 0, + "position": 0 + } + ], + "default_action_handle": 21257015, + "actions": [ + { + "name": "linux_networking_control.set_src_mac_mid", + "handle": 30315892, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "arg", + "bit_width": 16 + } + ] + }, + { + "name": "NoAction", + "handle": 21257015, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "MOD", + "id": 7, + "hw_interface": "MMIO", + "hw_resource": "MOD_LUT", + "hw_resource_id": 2, + "profile": [ + 3, + 16, + 18 + ], + "action_format": [ + { + "action_name": "linux_networking_control.set_src_mac_mid", + "action_handle": 30315892, + "immediate_fields": [ + { + "param_name": "arg", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 16 + } + ], + "mod_content_format": { + "mod_lut_num": 1, + "mod_obj_size": 1, + "mod_fields": [ + { + "name": "arg", + "handle": 0, + "param_handle": 0, + "type": "parameter", + "byte_order": "HOST", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 16, + "value": [] + } + ] + }, + "hw_actions_list": [] + }, + { + "action_name": "NoAction", + "action_handle": 21257015, + "immediate_fields": [], + "hw_actions_list": [] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "BIDIRECTIONAL", + "handle": 47499906, + "name": "linux_networking_control.rif_mod_table_last", + "size": 1024, + "isDefaultSize": true, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "rif_mod_map_id2", + "instance_name": "rif_mod_map_id2", + "field_name": "rif_mod_map_id2", + "match_type": "exact", + "bit_width": 11, + "index": 0, + "position": 0 + } + ], + "default_action_handle": 21257015, + "actions": [ + { + "name": "linux_networking_control.set_src_mac_last", + "handle": 32740970, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "arg", + "bit_width": 16 + } + ] + }, + { + "name": "NoAction", + "handle": 21257015, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "MOD", + "id": 7, + "hw_interface": "MMIO", + "hw_resource": "MOD_LUT", + "hw_resource_id": 2, + "profile": [ + 3, + 16, + 18 + ], + "action_format": [ + { + "action_name": "linux_networking_control.set_src_mac_last", + "action_handle": 32740970, + "immediate_fields": [ + { + "param_name": "arg", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 16 + } + ], + "mod_content_format": { + "mod_lut_num": 2, + "mod_obj_size": 1, + "mod_fields": [ + { + "name": "arg", + "handle": 0, + "param_handle": 0, + "type": "parameter", + "byte_order": "HOST", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 16, + "value": [] + } + ] + }, + "hw_actions_list": [] + }, + { + "action_name": "NoAction", + "action_handle": 21257015, + "immediate_fields": [], + "hw_actions_list": [] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "TX", + "handle": 48081556, + "name": "linux_networking_control.always_trap_arp_table", + "size": 0, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "hdrs.inval.data", + "instance_name": "hdrs.inval", + "field_name": "data", + "match_type": "exact", + "bit_width": 16, + "index": 0, + "position": 0 + }, + { + "name": "hdrs.inval.data", + "instance_name": "hdrs.inval", + "field_name": "data", + "match_type": "exact", + "bit_width": 16, + "index": 1, + "position": 2 + } + ], + "match_key_format": [ + { + "match_key_handle": 0, + "byte_order": "NETWORK", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 32 + }, + { + "match_key_handle": 1, + "byte_order": "NETWORK", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 32 + } + ], + "default_action_handle": 19361592, + "max_default_actions": 2, + "actions": [ + { + "name": "linux_networking_control.do_trap_enable", + "handle": 19361592, + "constant_default_action": true, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "SEM", + "id": 0, + "hw_interface": "ConfigQueue", + "profile": [ + 16 + ], + "sub_profile": 1, + "obj_id": 0, + "hash_size": 325632, + "action_format": [ + { + "action_name": "linux_networking_control.do_trap_enable", + "action_handle": 19361592, + "immediate_fields": [], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 64, + "mask": 112 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 0, + "setmd_action_code": "SET_8b", + "value": 1, + "mask": 1, + "type_id": 4, + "offset": 0 + } + ] + } + ], + "default_action_format": [ + { + "action_name": "linux_networking_control.do_trap_enable", + "action_handle": 19361592, + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 64, + "mask": 112 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 0, + "setmd_action_code": "SET_8b", + "value": 1, + "mask": 1, + "type_id": 4, + "offset": 0 + } + ] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "RX", + "handle": 47372228, + "name": "linux_networking_control.always_recirculate_table", + "size": 0, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "hdrs.inval.data", + "instance_name": "hdrs.inval", + "field_name": "data", + "match_type": "exact", + "bit_width": 16, + "index": 0, + "position": 0 + }, + { + "name": "hdrs.inval.data", + "instance_name": "hdrs.inval", + "field_name": "data", + "match_type": "exact", + "bit_width": 16, + "index": 1, + "position": 2 + } + ], + "match_key_format": [ + { + "match_key_handle": 0, + "byte_order": "NETWORK", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 32 + }, + { + "match_key_handle": 1, + "byte_order": "NETWORK", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 32 + } + ], + "default_action_handle": 33275382, + "max_default_actions": 2, + "actions": [ + { + "name": "linux_networking_control.do_recirculate", + "handle": 33275382, + "constant_default_action": true, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "SEM", + "id": 0, + "hw_interface": "ConfigQueue", + "profile": [ + 15 + ], + "sub_profile": 1, + "obj_id": 0, + "hash_size": 325632, + "action_format": [ + { + "action_name": "linux_networking_control.do_recirculate", + "action_handle": 33275382, + "immediate_fields": [], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 64, + "mask": 112 + } + ] + } + ], + "default_action_format": [ + { + "action_name": "linux_networking_control.do_recirculate", + "action_handle": 33275382, + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 64, + "mask": 112 + } + ] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "BIDIRECTIONAL", + "handle": 40312237, + "name": "linux_networking_control.vlan_push_mod_table", + "size": 1024, + "isDefaultSize": true, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "vmeta.common.mod_blob_ptr", + "instance_name": "vmeta.common.mod_blob_ptr", + "field_name": "vmeta.common.mod_blob_ptr", + "match_type": "exact", + "bit_width": 24, + "index": 0, + "position": 0 + } + ], + "default_action_handle": 21257015, + "actions": [ + { + "name": "linux_networking_control.vlan_push", + "handle": 24137163, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "pcp", + "bit_width": 3 + }, + { + "name": "dei", + "bit_width": 1 + }, + { + "name": "vlan_id", + "bit_width": 12 + } + ] + }, + { + "name": "NoAction", + "handle": 21257015, + "constant_default_action": true, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "MOD", + "id": 7, + "hw_interface": "ConfigQueue", + "hw_resource": "MOD_CONTENT", + "hw_resource_id": 0, + "profile": [ + 4 + ], + "action_format": [ + { + "action_name": "linux_networking_control.vlan_push", + "action_handle": 24137163, + "immediate_fields": [ + { + "param_name": "pcp", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 3 + }, + { + "param_name": "dei", + "param_handle": 1, + "dest_start": 1, + "start_bit_offset": 0, + "dest_width": 1 + }, + { + "param_name": "vlan_id", + "param_handle": 2, + "dest_start": 2, + "start_bit_offset": 0, + "dest_width": 12 + } + ], + "mod_content_format": { + "mod_profile": 4, + "mod_obj_size": 1, + "mod_fields": [ + { + "name": "type", + "handle": 0, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 16, + "value": [ + 129, + 0 + ] + }, + { + "name": "pcp", + "handle": 1, + "param_handle": 0, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 2, + "start_bit_offset": 0, + "bit_width": 3, + "value": [] + }, + { + "name": "dei", + "handle": 2, + "param_handle": 1, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 2, + "start_bit_offset": 3, + "bit_width": 1, + "value": [] + }, + { + "name": "vlan_id", + "handle": 3, + "param_handle": 2, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 2, + "start_bit_offset": 4, + "bit_width": 12, + "value": [] + } + ] + }, + "hw_actions_list": [] + }, + { + "action_name": "NoAction", + "action_handle": 21257015, + "immediate_fields": [], + "hw_actions_list": [] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "BIDIRECTIONAL", + "handle": 38884256, + "name": "linux_networking_control.vlan_pop_mod_table", + "size": 1024, + "isDefaultSize": true, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "vmeta.common.mod_blob_ptr", + "instance_name": "vmeta.common.mod_blob_ptr", + "field_name": "vmeta.common.mod_blob_ptr", + "match_type": "exact", + "bit_width": 24, + "index": 0, + "position": 0 + } + ], + "default_action_handle": 21257015, + "actions": [ + { + "name": "linux_networking_control.vlan_pop", + "handle": 25667542, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [] + }, + { + "name": "NoAction", + "handle": 21257015, + "constant_default_action": true, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "MOD", + "id": 7, + "hw_interface": "ConfigQueue", + "hw_resource": "MOD_CONTENT", + "hw_resource_id": 0, + "profile": [ + 5 + ], + "action_format": [ + { + "action_name": "linux_networking_control.vlan_pop", + "action_handle": 25667542, + "immediate_fields": [], + "mod_content_format": { + "mod_profile": 5, + "mod_obj_size": 1 + }, + "hw_actions_list": [] + }, + { + "action_name": "NoAction", + "action_handle": 21257015, + "immediate_fields": [], + "hw_actions_list": [] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "BIDIRECTIONAL", + "handle": 40763773, + "name": "linux_networking_control.vxlan_encap_mod_table", + "size": 1024, + "isDefaultSize": true, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "vmeta.common.mod_blob_ptr", + "instance_name": "vmeta.common.mod_blob_ptr", + "field_name": "vmeta.common.mod_blob_ptr", + "match_type": "exact", + "bit_width": 24, + "index": 0, + "position": 0 + } + ], + "default_action_handle": 21257015, + "actions": [ + { + "name": "linux_networking_control.vxlan_encap", + "handle": 20733968, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "src_addr", + "bit_width": 32 + }, + { + "name": "dst_addr", + "bit_width": 32 + }, + { + "name": "src_port", + "bit_width": 16 + }, + { + "name": "dst_port", + "bit_width": 16 + }, + { + "name": "vni", + "bit_width": 24 + } + ] + }, + { + "name": "NoAction", + "handle": 21257015, + "constant_default_action": true, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "MOD", + "id": 7, + "hw_interface": "ConfigQueue", + "hw_resource": "MOD_CONTENT", + "hw_resource_id": 0, + "profile": [ + 1 + ], + "action_format": [ + { + "action_name": "linux_networking_control.vxlan_encap", + "action_handle": 20733968, + "immediate_fields": [ + { + "param_name": "src_addr", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 32 + }, + { + "param_name": "dst_addr", + "param_handle": 1, + "dest_start": 4, + "start_bit_offset": 0, + "dest_width": 32 + }, + { + "param_name": "src_port", + "param_handle": 2, + "dest_start": 8, + "start_bit_offset": 0, + "dest_width": 16 + }, + { + "param_name": "dst_port", + "param_handle": 3, + "dest_start": 10, + "start_bit_offset": 0, + "dest_width": 16 + }, + { + "param_name": "vni", + "param_handle": 4, + "dest_start": 12, + "start_bit_offset": 0, + "dest_width": 24 + } + ], + "mod_content_format": { + "mod_profile": 1, + "mod_obj_size": 1, + "mod_fields": [ + { + "name": "da", + "handle": 0, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 48, + "value": [ + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + { + "name": "sa", + "handle": 1, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 6, + "start_bit_offset": 0, + "bit_width": 48, + "value": [ + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + { + "name": "type", + "handle": 2, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 12, + "start_bit_offset": 0, + "bit_width": 16, + "value": [ + 8, + 0 + ] + }, + { + "name": "version", + "handle": 3, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 14, + "start_bit_offset": 0, + "bit_width": 4, + "value": [ + 4 + ] + }, + { + "name": "ihl", + "handle": 4, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 14, + "start_bit_offset": 4, + "bit_width": 4, + "value": [ + 5 + ] + }, + { + "name": "dscp", + "handle": 5, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 15, + "start_bit_offset": 0, + "bit_width": 6, + "value": [ + 0 + ] + }, + { + "name": "ecn", + "handle": 6, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 15, + "start_bit_offset": 6, + "bit_width": 2, + "value": [ + 0 + ] + }, + { + "name": "length", + "handle": 7, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 16, + "start_bit_offset": 0, + "bit_width": 16, + "value": [ + 0, + 0 + ] + }, + { + "name": "identification", + "handle": 8, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 18, + "start_bit_offset": 0, + "bit_width": 16, + "value": [ + 0, + 0 + ] + }, + { + "name": "rsvd", + "handle": 9, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 20, + "start_bit_offset": 0, + "bit_width": 1, + "value": [ + 0 + ] + }, + { + "name": "df", + "handle": 10, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 20, + "start_bit_offset": 1, + "bit_width": 1, + "value": [ + 1 + ] + }, + { + "name": "mf", + "handle": 11, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 20, + "start_bit_offset": 2, + "bit_width": 1, + "value": [ + 0 + ] + }, + { + "name": "frag_off", + "handle": 12, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 20, + "start_bit_offset": 3, + "bit_width": 5, + "value": [ + 0 + ] + }, + { + "name": "frag_off", + "handle": 13, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 21, + "start_bit_offset": 0, + "bit_width": 3, + "value": [ + 0 + ] + }, + { + "name": "frag_off", + "handle": 14, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 21, + "start_bit_offset": 3, + "bit_width": 5, + "value": [ + 0 + ] + }, + { + "name": "ttl", + "handle": 15, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 22, + "start_bit_offset": 0, + "bit_width": 8, + "value": [ + 64 + ] + }, + { + "name": "protocol", + "handle": 16, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 23, + "start_bit_offset": 0, + "bit_width": 8, + "value": [ + 17 + ] + }, + { + "name": "csum", + "handle": 17, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 24, + "start_bit_offset": 0, + "bit_width": 16, + "value": [ + 0, + 0 + ] + }, + { + "name": "src_addr", + "handle": 18, + "param_handle": 0, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 26, + "start_bit_offset": 0, + "bit_width": 32, + "value": [] + }, + { + "name": "dst_addr", + "handle": 19, + "param_handle": 1, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 30, + "start_bit_offset": 0, + "bit_width": 32, + "value": [] + }, + { + "name": "src_port", + "handle": 20, + "param_handle": 2, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 34, + "start_bit_offset": 0, + "bit_width": 16, + "value": [] + }, + { + "name": "dst_port", + "handle": 21, + "param_handle": 3, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 36, + "start_bit_offset": 0, + "bit_width": 16, + "value": [] + }, + { + "name": "length", + "handle": 22, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 38, + "start_bit_offset": 0, + "bit_width": 16, + "value": [ + 0, + 0 + ] + }, + { + "name": "csum", + "handle": 23, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 40, + "start_bit_offset": 0, + "bit_width": 16, + "value": [ + 0, + 0 + ] + }, + { + "name": "reserved_1", + "handle": 24, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 42, + "start_bit_offset": 0, + "bit_width": 4, + "value": [ + 0 + ] + }, + { + "name": "instance", + "handle": 25, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 42, + "start_bit_offset": 4, + "bit_width": 1, + "value": [ + 1 + ] + }, + { + "name": "reserved_2", + "handle": 26, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 42, + "start_bit_offset": 5, + "bit_width": 3, + "value": [ + 0 + ] + }, + { + "name": "reserved_3", + "handle": 27, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 43, + "start_bit_offset": 0, + "bit_width": 24, + "value": [ + 0, + 0, + 0 + ] + }, + { + "name": "vni", + "handle": 28, + "param_handle": 4, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 46, + "start_bit_offset": 0, + "bit_width": 24, + "value": [] + }, + { + "name": "reserved_4", + "handle": 29, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 49, + "start_bit_offset": 0, + "bit_width": 8, + "value": [ + 0 + ] + } + ] + }, + "hw_actions_list": [] + }, + { + "action_name": "NoAction", + "action_handle": 21257015, + "immediate_fields": [], + "hw_actions_list": [] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "BIDIRECTIONAL", + "handle": 39675860, + "name": "linux_networking_control.vxlan_encap_vlan_pop_mod_table", + "size": 1024, + "isDefaultSize": true, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "vmeta.common.mod_blob_ptr", + "instance_name": "vmeta.common.mod_blob_ptr", + "field_name": "vmeta.common.mod_blob_ptr", + "match_type": "exact", + "bit_width": 24, + "index": 0, + "position": 0 + } + ], + "default_action_handle": 21257015, + "actions": [ + { + "name": "linux_networking_control.vxlan_encap_vlan_pop", + "handle": 26114242, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "src_addr", + "bit_width": 32 + }, + { + "name": "dst_addr", + "bit_width": 32 + }, + { + "name": "src_port", + "bit_width": 16 + }, + { + "name": "dst_port", + "bit_width": 16 + }, + { + "name": "vni", + "bit_width": 24 + } + ] + }, + { + "name": "NoAction", + "handle": 21257015, + "constant_default_action": true, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "MOD", + "id": 7, + "hw_interface": "ConfigQueue", + "hw_resource": "MOD_CONTENT", + "hw_resource_id": 0, + "profile": [ + 8 + ], + "action_format": [ + { + "action_name": "linux_networking_control.vxlan_encap_vlan_pop", + "action_handle": 26114242, + "immediate_fields": [ + { + "param_name": "src_addr", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 32 + }, + { + "param_name": "dst_addr", + "param_handle": 1, + "dest_start": 4, + "start_bit_offset": 0, + "dest_width": 32 + }, + { + "param_name": "src_port", + "param_handle": 2, + "dest_start": 8, + "start_bit_offset": 0, + "dest_width": 16 + }, + { + "param_name": "dst_port", + "param_handle": 3, + "dest_start": 10, + "start_bit_offset": 0, + "dest_width": 16 + }, + { + "param_name": "vni", + "param_handle": 4, + "dest_start": 12, + "start_bit_offset": 0, + "dest_width": 24 + } + ], + "mod_content_format": { + "mod_profile": 8, + "mod_obj_size": 1, + "mod_fields": [ + { + "name": "da", + "handle": 0, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 48, + "value": [ + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + { + "name": "sa", + "handle": 1, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 6, + "start_bit_offset": 0, + "bit_width": 48, + "value": [ + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + { + "name": "type", + "handle": 2, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 12, + "start_bit_offset": 0, + "bit_width": 16, + "value": [ + 8, + 0 + ] + }, + { + "name": "version", + "handle": 3, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 14, + "start_bit_offset": 0, + "bit_width": 4, + "value": [ + 4 + ] + }, + { + "name": "ihl", + "handle": 4, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 14, + "start_bit_offset": 4, + "bit_width": 4, + "value": [ + 5 + ] + }, + { + "name": "dscp", + "handle": 5, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 15, + "start_bit_offset": 0, + "bit_width": 6, + "value": [ + 0 + ] + }, + { + "name": "ecn", + "handle": 6, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 15, + "start_bit_offset": 6, + "bit_width": 2, + "value": [ + 0 + ] + }, + { + "name": "length", + "handle": 7, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 16, + "start_bit_offset": 0, + "bit_width": 16, + "value": [ + 0, + 0 + ] + }, + { + "name": "identification", + "handle": 8, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 18, + "start_bit_offset": 0, + "bit_width": 16, + "value": [ + 0, + 0 + ] + }, + { + "name": "rsvd", + "handle": 9, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 20, + "start_bit_offset": 0, + "bit_width": 1, + "value": [ + 0 + ] + }, + { + "name": "df", + "handle": 10, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 20, + "start_bit_offset": 1, + "bit_width": 1, + "value": [ + 1 + ] + }, + { + "name": "mf", + "handle": 11, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 20, + "start_bit_offset": 2, + "bit_width": 1, + "value": [ + 0 + ] + }, + { + "name": "frag_off", + "handle": 12, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 20, + "start_bit_offset": 3, + "bit_width": 5, + "value": [ + 0 + ] + }, + { + "name": "frag_off", + "handle": 13, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 21, + "start_bit_offset": 0, + "bit_width": 3, + "value": [ + 0 + ] + }, + { + "name": "frag_off", + "handle": 14, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 21, + "start_bit_offset": 3, + "bit_width": 5, + "value": [ + 0 + ] + }, + { + "name": "ttl", + "handle": 15, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 22, + "start_bit_offset": 0, + "bit_width": 8, + "value": [ + 64 + ] + }, + { + "name": "protocol", + "handle": 16, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 23, + "start_bit_offset": 0, + "bit_width": 8, + "value": [ + 17 + ] + }, + { + "name": "csum", + "handle": 17, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 24, + "start_bit_offset": 0, + "bit_width": 16, + "value": [ + 0, + 0 + ] + }, + { + "name": "src_addr", + "handle": 18, + "param_handle": 0, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 26, + "start_bit_offset": 0, + "bit_width": 32, + "value": [] + }, + { + "name": "dst_addr", + "handle": 19, + "param_handle": 1, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 30, + "start_bit_offset": 0, + "bit_width": 32, + "value": [] + }, + { + "name": "src_port", + "handle": 20, + "param_handle": 2, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 34, + "start_bit_offset": 0, + "bit_width": 16, + "value": [] + }, + { + "name": "dst_port", + "handle": 21, + "param_handle": 3, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 36, + "start_bit_offset": 0, + "bit_width": 16, + "value": [] + }, + { + "name": "length", + "handle": 22, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 38, + "start_bit_offset": 0, + "bit_width": 16, + "value": [ + 0, + 0 + ] + }, + { + "name": "csum", + "handle": 23, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 40, + "start_bit_offset": 0, + "bit_width": 16, + "value": [ + 0, + 0 + ] + }, + { + "name": "reserved_1", + "handle": 24, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 42, + "start_bit_offset": 0, + "bit_width": 4, + "value": [ + 0 + ] + }, + { + "name": "instance", + "handle": 25, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 42, + "start_bit_offset": 4, + "bit_width": 1, + "value": [ + 1 + ] + }, + { + "name": "reserved_2", + "handle": 26, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 42, + "start_bit_offset": 5, + "bit_width": 3, + "value": [ + 0 + ] + }, + { + "name": "reserved_3", + "handle": 27, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 43, + "start_bit_offset": 0, + "bit_width": 24, + "value": [ + 0, + 0, + 0 + ] + }, + { + "name": "vni", + "handle": 28, + "param_handle": 4, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 46, + "start_bit_offset": 0, + "bit_width": 24, + "value": [] + }, + { + "name": "reserved_4", + "handle": 29, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 49, + "start_bit_offset": 0, + "bit_width": 8, + "value": [ + 0 + ] + } + ] + }, + "hw_actions_list": [] + }, + { + "action_name": "NoAction", + "action_handle": 21257015, + "immediate_fields": [], + "hw_actions_list": [] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "BIDIRECTIONAL", + "handle": 46225003, + "name": "linux_networking_control.vxlan_encap_v6_mod_table", + "size": 1024, + "isDefaultSize": true, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "vmeta.common.mod_blob_ptr", + "instance_name": "vmeta.common.mod_blob_ptr", + "field_name": "vmeta.common.mod_blob_ptr", + "match_type": "exact", + "bit_width": 24, + "index": 0, + "position": 0 + } + ], + "default_action_handle": 21257015, + "actions": [ + { + "name": "linux_networking_control.vxlan_encap_v6", + "handle": 30345128, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "src_addr", + "bit_width": 128 + }, + { + "name": "dst_addr", + "bit_width": 128 + }, + { + "name": "ds", + "bit_width": 6 + }, + { + "name": "ecn", + "bit_width": 2 + }, + { + "name": "flow_label", + "bit_width": 20 + }, + { + "name": "hop_limit", + "bit_width": 8 + }, + { + "name": "src_port", + "bit_width": 16 + }, + { + "name": "dst_port", + "bit_width": 16 + }, + { + "name": "vni", + "bit_width": 24 + } + ] + }, + { + "name": "NoAction", + "handle": 21257015, + "constant_default_action": true, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "MOD", + "id": 7, + "hw_interface": "ConfigQueue", + "hw_resource": "MOD_CONTENT", + "hw_resource_id": 0, + "profile": [ + 6 + ], + "action_format": [ + { + "action_name": "linux_networking_control.vxlan_encap_v6", + "action_handle": 30345128, + "immediate_fields": [ + { + "param_name": "src_addr", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 128 + }, + { + "param_name": "dst_addr", + "param_handle": 1, + "dest_start": 16, + "start_bit_offset": 0, + "dest_width": 128 + }, + { + "param_name": "ds", + "param_handle": 2, + "dest_start": 32, + "start_bit_offset": 0, + "dest_width": 6 + }, + { + "param_name": "ecn", + "param_handle": 3, + "dest_start": 33, + "start_bit_offset": 0, + "dest_width": 2 + }, + { + "param_name": "flow_label", + "param_handle": 4, + "dest_start": 34, + "start_bit_offset": 0, + "dest_width": 20 + }, + { + "param_name": "hop_limit", + "param_handle": 5, + "dest_start": 37, + "start_bit_offset": 0, + "dest_width": 8 + }, + { + "param_name": "src_port", + "param_handle": 6, + "dest_start": 38, + "start_bit_offset": 0, + "dest_width": 16 + }, + { + "param_name": "dst_port", + "param_handle": 7, + "dest_start": 40, + "start_bit_offset": 0, + "dest_width": 16 + }, + { + "param_name": "vni", + "param_handle": 8, + "dest_start": 42, + "start_bit_offset": 0, + "dest_width": 24 + } + ], + "mod_content_format": { + "mod_profile": 6, + "mod_obj_size": 1, + "mod_fields": [ + { + "name": "da", + "handle": 0, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 48, + "value": [ + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + { + "name": "sa", + "handle": 1, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 6, + "start_bit_offset": 0, + "bit_width": 48, + "value": [ + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + { + "name": "type", + "handle": 2, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 12, + "start_bit_offset": 0, + "bit_width": 16, + "value": [ + 134, + 221 + ] + }, + { + "name": "version", + "handle": 3, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 14, + "start_bit_offset": 0, + "bit_width": 4, + "value": [ + 6 + ] + }, + { + "name": "ds", + "handle": 4, + "param_handle": 2, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 14, + "start_bit_offset": 4, + "bit_width": 6, + "value": [] + }, + { + "name": "ecn", + "handle": 5, + "param_handle": 3, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 15, + "start_bit_offset": 2, + "bit_width": 2, + "value": [] + }, + { + "name": "flow_label", + "handle": 6, + "param_handle": 4, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 15, + "start_bit_offset": 4, + "bit_width": 20, + "value": [] + }, + { + "name": "pay_length", + "handle": 7, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 18, + "start_bit_offset": 0, + "bit_width": 16, + "value": [ + 0, + 0 + ] + }, + { + "name": "next_header", + "handle": 8, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 20, + "start_bit_offset": 0, + "bit_width": 8, + "value": [ + 17 + ] + }, + { + "name": "hop_limit", + "handle": 9, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 21, + "start_bit_offset": 0, + "bit_width": 8, + "value": [ + 64 + ] + }, + { + "name": "src_addr", + "handle": 10, + "param_handle": 0, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 22, + "start_bit_offset": 0, + "bit_width": 128, + "value": [] + }, + { + "name": "dst_addr", + "handle": 11, + "param_handle": 1, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 38, + "start_bit_offset": 0, + "bit_width": 128, + "value": [] + }, + { + "name": "src_port", + "handle": 12, + "param_handle": 6, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 54, + "start_bit_offset": 0, + "bit_width": 16, + "value": [] + }, + { + "name": "dst_port", + "handle": 13, + "param_handle": 7, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 56, + "start_bit_offset": 0, + "bit_width": 16, + "value": [] + }, + { + "name": "length", + "handle": 14, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 58, + "start_bit_offset": 0, + "bit_width": 16, + "value": [ + 0, + 0 + ] + }, + { + "name": "csum", + "handle": 15, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 60, + "start_bit_offset": 0, + "bit_width": 16, + "value": [ + 0, + 0 + ] + }, + { + "name": "reserved_1", + "handle": 16, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 62, + "start_bit_offset": 0, + "bit_width": 4, + "value": [ + 0 + ] + }, + { + "name": "instance", + "handle": 17, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 62, + "start_bit_offset": 4, + "bit_width": 1, + "value": [ + 1 + ] + }, + { + "name": "reserved_2", + "handle": 18, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 62, + "start_bit_offset": 5, + "bit_width": 3, + "value": [ + 0 + ] + }, + { + "name": "reserved_3", + "handle": 19, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 63, + "start_bit_offset": 0, + "bit_width": 24, + "value": [ + 0, + 0, + 0 + ] + }, + { + "name": "vni", + "handle": 20, + "param_handle": 8, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 66, + "start_bit_offset": 0, + "bit_width": 24, + "value": [] + }, + { + "name": "reserved_4", + "handle": 21, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 69, + "start_bit_offset": 0, + "bit_width": 8, + "value": [ + 0 + ] + } + ] + }, + "hw_actions_list": [] + }, + { + "action_name": "NoAction", + "action_handle": 21257015, + "immediate_fields": [], + "hw_actions_list": [] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "BIDIRECTIONAL", + "handle": 34318005, + "name": "linux_networking_control.vxlan_encap_v6_vlan_pop_mod_table", + "size": 1024, + "isDefaultSize": true, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "vmeta.common.mod_blob_ptr", + "instance_name": "vmeta.common.mod_blob_ptr", + "field_name": "vmeta.common.mod_blob_ptr", + "match_type": "exact", + "bit_width": 24, + "index": 0, + "position": 0 + } + ], + "default_action_handle": 21257015, + "actions": [ + { + "name": "linux_networking_control.vxlan_encap_v6_vlan_pop", + "handle": 28284062, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "src_addr", + "bit_width": 128 + }, + { + "name": "dst_addr", + "bit_width": 128 + }, + { + "name": "ds", + "bit_width": 6 + }, + { + "name": "ecn", + "bit_width": 2 + }, + { + "name": "flow_label", + "bit_width": 20 + }, + { + "name": "hop_limit", + "bit_width": 8 + }, + { + "name": "src_port", + "bit_width": 16 + }, + { + "name": "dst_port", + "bit_width": 16 + }, + { + "name": "vni", + "bit_width": 24 + } + ] + }, + { + "name": "NoAction", + "handle": 21257015, + "constant_default_action": true, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "MOD", + "id": 7, + "hw_interface": "ConfigQueue", + "hw_resource": "MOD_CONTENT", + "hw_resource_id": 0, + "profile": [ + 9 + ], + "action_format": [ + { + "action_name": "linux_networking_control.vxlan_encap_v6_vlan_pop", + "action_handle": 28284062, + "immediate_fields": [ + { + "param_name": "src_addr", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 128 + }, + { + "param_name": "dst_addr", + "param_handle": 1, + "dest_start": 16, + "start_bit_offset": 0, + "dest_width": 128 + }, + { + "param_name": "ds", + "param_handle": 2, + "dest_start": 32, + "start_bit_offset": 0, + "dest_width": 6 + }, + { + "param_name": "ecn", + "param_handle": 3, + "dest_start": 33, + "start_bit_offset": 0, + "dest_width": 2 + }, + { + "param_name": "flow_label", + "param_handle": 4, + "dest_start": 34, + "start_bit_offset": 0, + "dest_width": 20 + }, + { + "param_name": "hop_limit", + "param_handle": 5, + "dest_start": 37, + "start_bit_offset": 0, + "dest_width": 8 + }, + { + "param_name": "src_port", + "param_handle": 6, + "dest_start": 38, + "start_bit_offset": 0, + "dest_width": 16 + }, + { + "param_name": "dst_port", + "param_handle": 7, + "dest_start": 40, + "start_bit_offset": 0, + "dest_width": 16 + }, + { + "param_name": "vni", + "param_handle": 8, + "dest_start": 42, + "start_bit_offset": 0, + "dest_width": 24 + } + ], + "mod_content_format": { + "mod_profile": 9, + "mod_obj_size": 1, + "mod_fields": [ + { + "name": "da", + "handle": 0, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 48, + "value": [ + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + { + "name": "sa", + "handle": 1, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 6, + "start_bit_offset": 0, + "bit_width": 48, + "value": [ + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + { + "name": "type", + "handle": 2, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 12, + "start_bit_offset": 0, + "bit_width": 16, + "value": [ + 134, + 221 + ] + }, + { + "name": "version", + "handle": 3, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 14, + "start_bit_offset": 0, + "bit_width": 4, + "value": [ + 6 + ] + }, + { + "name": "ds", + "handle": 4, + "param_handle": 2, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 14, + "start_bit_offset": 4, + "bit_width": 6, + "value": [] + }, + { + "name": "ecn", + "handle": 5, + "param_handle": 3, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 15, + "start_bit_offset": 2, + "bit_width": 2, + "value": [] + }, + { + "name": "flow_label", + "handle": 6, + "param_handle": 4, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 15, + "start_bit_offset": 4, + "bit_width": 20, + "value": [] + }, + { + "name": "pay_length", + "handle": 7, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 18, + "start_bit_offset": 0, + "bit_width": 16, + "value": [ + 0, + 0 + ] + }, + { + "name": "next_header", + "handle": 8, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 20, + "start_bit_offset": 0, + "bit_width": 8, + "value": [ + 17 + ] + }, + { + "name": "hop_limit", + "handle": 9, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 21, + "start_bit_offset": 0, + "bit_width": 8, + "value": [ + 64 + ] + }, + { + "name": "src_addr", + "handle": 10, + "param_handle": 0, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 22, + "start_bit_offset": 0, + "bit_width": 128, + "value": [] + }, + { + "name": "dst_addr", + "handle": 11, + "param_handle": 1, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 38, + "start_bit_offset": 0, + "bit_width": 128, + "value": [] + }, + { + "name": "src_port", + "handle": 12, + "param_handle": 6, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 54, + "start_bit_offset": 0, + "bit_width": 16, + "value": [] + }, + { + "name": "dst_port", + "handle": 13, + "param_handle": 7, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 56, + "start_bit_offset": 0, + "bit_width": 16, + "value": [] + }, + { + "name": "length", + "handle": 14, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 58, + "start_bit_offset": 0, + "bit_width": 16, + "value": [ + 0, + 0 + ] + }, + { + "name": "csum", + "handle": 15, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 60, + "start_bit_offset": 0, + "bit_width": 16, + "value": [ + 0, + 0 + ] + }, + { + "name": "reserved_1", + "handle": 16, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 62, + "start_bit_offset": 0, + "bit_width": 4, + "value": [ + 0 + ] + }, + { + "name": "instance", + "handle": 17, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 62, + "start_bit_offset": 4, + "bit_width": 1, + "value": [ + 1 + ] + }, + { + "name": "reserved_2", + "handle": 18, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 62, + "start_bit_offset": 5, + "bit_width": 3, + "value": [ + 0 + ] + }, + { + "name": "reserved_3", + "handle": 19, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 63, + "start_bit_offset": 0, + "bit_width": 24, + "value": [ + 0, + 0, + 0 + ] + }, + { + "name": "vni", + "handle": 20, + "param_handle": 8, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 66, + "start_bit_offset": 0, + "bit_width": 24, + "value": [] + }, + { + "name": "reserved_4", + "handle": 21, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 69, + "start_bit_offset": 0, + "bit_width": 8, + "value": [ + 0 + ] + } + ] + }, + "hw_actions_list": [] + }, + { + "action_name": "NoAction", + "action_handle": 21257015, + "immediate_fields": [], + "hw_actions_list": [] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "BIDIRECTIONAL", + "handle": 40980035, + "name": "linux_networking_control.vxlan_decap_mod_table", + "size": 1024, + "isDefaultSize": true, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "vmeta.common.mod_blob_ptr", + "instance_name": "vmeta.common.mod_blob_ptr", + "field_name": "vmeta.common.mod_blob_ptr", + "match_type": "exact", + "bit_width": 24, + "index": 0, + "position": 0 + } + ], + "default_action_handle": 21257015, + "actions": [ + { + "name": "linux_networking_control.vxlan_decap_outer_hdr", + "handle": 28308555, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [] + }, + { + "name": "NoAction", + "handle": 21257015, + "constant_default_action": true, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "MOD", + "id": 7, + "hw_interface": "ConfigQueue", + "hw_resource": "MOD_CONTENT", + "hw_resource_id": 0, + "profile": [ + 2 + ], + "action_format": [ + { + "action_name": "linux_networking_control.vxlan_decap_outer_hdr", + "action_handle": 28308555, + "immediate_fields": [], + "mod_content_format": { + "mod_profile": 2, + "mod_obj_size": 1 + }, + "hw_actions_list": [] + }, + { + "action_name": "NoAction", + "action_handle": 21257015, + "immediate_fields": [], + "hw_actions_list": [] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "BIDIRECTIONAL", + "handle": 37624107, + "name": "linux_networking_control.vxlan_decap_and_push_vlan_mod_table", + "size": 1024, + "isDefaultSize": true, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "vmeta.common.mod_blob_ptr", + "instance_name": "vmeta.common.mod_blob_ptr", + "field_name": "vmeta.common.mod_blob_ptr", + "match_type": "exact", + "bit_width": 24, + "index": 0, + "position": 0 + } + ], + "default_action_handle": 21257015, + "actions": [ + { + "name": "linux_networking_control.vxlan_decap_and_push_vlan", + "handle": 31953264, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "pcp", + "bit_width": 3 + }, + { + "name": "dei", + "bit_width": 1 + }, + { + "name": "vlan_id", + "bit_width": 12 + } + ] + }, + { + "name": "NoAction", + "handle": 21257015, + "constant_default_action": true, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "MOD", + "id": 7, + "hw_interface": "ConfigQueue", + "hw_resource": "MOD_CONTENT", + "hw_resource_id": 0, + "profile": [ + 7 + ], + "action_format": [ + { + "action_name": "linux_networking_control.vxlan_decap_and_push_vlan", + "action_handle": 31953264, + "immediate_fields": [ + { + "param_name": "pcp", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 3 + }, + { + "param_name": "dei", + "param_handle": 1, + "dest_start": 1, + "start_bit_offset": 0, + "dest_width": 1 + }, + { + "param_name": "vlan_id", + "param_handle": 2, + "dest_start": 2, + "start_bit_offset": 0, + "dest_width": 12 + } + ], + "mod_content_format": { + "mod_profile": 7, + "mod_obj_size": 1, + "mod_fields": [ + { + "name": "type", + "handle": 0, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 16, + "value": [ + 129, + 0 + ] + }, + { + "name": "pcp", + "handle": 1, + "param_handle": 0, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 2, + "start_bit_offset": 0, + "bit_width": 3, + "value": [] + }, + { + "name": "dei", + "handle": 2, + "param_handle": 1, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 2, + "start_bit_offset": 3, + "bit_width": 1, + "value": [] + }, + { + "name": "vlan_id", + "handle": 3, + "param_handle": 2, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 2, + "start_bit_offset": 4, + "bit_width": 12, + "value": [] + } + ] + }, + "hw_actions_list": [] + }, + { + "action_name": "NoAction", + "action_handle": 21257015, + "immediate_fields": [], + "hw_actions_list": [] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "BIDIRECTIONAL", + "handle": 41319073, + "name": "linux_networking_control.geneve_encap_mod_table", + "size": 1024, + "isDefaultSize": true, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "vmeta.common.mod_blob_ptr", + "instance_name": "vmeta.common.mod_blob_ptr", + "field_name": "vmeta.common.mod_blob_ptr", + "match_type": "exact", + "bit_width": 24, + "index": 0, + "position": 0 + } + ], + "default_action_handle": 21257015, + "actions": [ + { + "name": "linux_networking_control.geneve_encap", + "handle": 25818889, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "src_addr", + "bit_width": 32 + }, + { + "name": "dst_addr", + "bit_width": 32 + }, + { + "name": "src_port", + "bit_width": 16 + }, + { + "name": "dst_port", + "bit_width": 16 + }, + { + "name": "vni", + "bit_width": 24 + } + ] + }, + { + "name": "NoAction", + "handle": 21257015, + "constant_default_action": true, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "MOD", + "id": 7, + "hw_interface": "ConfigQueue", + "hw_resource": "MOD_CONTENT", + "hw_resource_id": 0, + "profile": [ + 10 + ], + "action_format": [ + { + "action_name": "linux_networking_control.geneve_encap", + "action_handle": 25818889, + "immediate_fields": [ + { + "param_name": "src_addr", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 32 + }, + { + "param_name": "dst_addr", + "param_handle": 1, + "dest_start": 4, + "start_bit_offset": 0, + "dest_width": 32 + }, + { + "param_name": "src_port", + "param_handle": 2, + "dest_start": 8, + "start_bit_offset": 0, + "dest_width": 16 + }, + { + "param_name": "dst_port", + "param_handle": 3, + "dest_start": 10, + "start_bit_offset": 0, + "dest_width": 16 + }, + { + "param_name": "vni", + "param_handle": 4, + "dest_start": 12, + "start_bit_offset": 0, + "dest_width": 24 + } + ], + "mod_content_format": { + "mod_profile": 10, + "mod_obj_size": 1, + "mod_fields": [ + { + "name": "da", + "handle": 0, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 48, + "value": [ + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + { + "name": "sa", + "handle": 1, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 6, + "start_bit_offset": 0, + "bit_width": 48, + "value": [ + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + { + "name": "type", + "handle": 2, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 12, + "start_bit_offset": 0, + "bit_width": 16, + "value": [ + 8, + 0 + ] + }, + { + "name": "version", + "handle": 3, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 14, + "start_bit_offset": 0, + "bit_width": 4, + "value": [ + 4 + ] + }, + { + "name": "ihl", + "handle": 4, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 14, + "start_bit_offset": 4, + "bit_width": 4, + "value": [ + 5 + ] + }, + { + "name": "dscp", + "handle": 5, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 15, + "start_bit_offset": 0, + "bit_width": 6, + "value": [ + 0 + ] + }, + { + "name": "ecn", + "handle": 6, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 15, + "start_bit_offset": 6, + "bit_width": 2, + "value": [ + 0 + ] + }, + { + "name": "length", + "handle": 7, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 16, + "start_bit_offset": 0, + "bit_width": 16, + "value": [ + 0, + 0 + ] + }, + { + "name": "identification", + "handle": 8, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 18, + "start_bit_offset": 0, + "bit_width": 16, + "value": [ + 0, + 0 + ] + }, + { + "name": "rsvd", + "handle": 9, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 20, + "start_bit_offset": 0, + "bit_width": 1, + "value": [ + 0 + ] + }, + { + "name": "df", + "handle": 10, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 20, + "start_bit_offset": 1, + "bit_width": 1, + "value": [ + 1 + ] + }, + { + "name": "mf", + "handle": 11, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 20, + "start_bit_offset": 2, + "bit_width": 1, + "value": [ + 0 + ] + }, + { + "name": "frag_off", + "handle": 12, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 20, + "start_bit_offset": 3, + "bit_width": 5, + "value": [ + 0 + ] + }, + { + "name": "frag_off", + "handle": 13, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 21, + "start_bit_offset": 0, + "bit_width": 3, + "value": [ + 0 + ] + }, + { + "name": "frag_off", + "handle": 14, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 21, + "start_bit_offset": 3, + "bit_width": 5, + "value": [ + 0 + ] + }, + { + "name": "ttl", + "handle": 15, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 22, + "start_bit_offset": 0, + "bit_width": 8, + "value": [ + 64 + ] + }, + { + "name": "protocol", + "handle": 16, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 23, + "start_bit_offset": 0, + "bit_width": 8, + "value": [ + 17 + ] + }, + { + "name": "csum", + "handle": 17, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 24, + "start_bit_offset": 0, + "bit_width": 16, + "value": [ + 0, + 0 + ] + }, + { + "name": "src_addr", + "handle": 18, + "param_handle": 0, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 26, + "start_bit_offset": 0, + "bit_width": 32, + "value": [] + }, + { + "name": "dst_addr", + "handle": 19, + "param_handle": 1, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 30, + "start_bit_offset": 0, + "bit_width": 32, + "value": [] + }, + { + "name": "src_port", + "handle": 20, + "param_handle": 2, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 34, + "start_bit_offset": 0, + "bit_width": 16, + "value": [] + }, + { + "name": "dst_port", + "handle": 21, + "param_handle": 3, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 36, + "start_bit_offset": 0, + "bit_width": 16, + "value": [] + }, + { + "name": "length", + "handle": 22, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 38, + "start_bit_offset": 0, + "bit_width": 16, + "value": [ + 0, + 0 + ] + }, + { + "name": "csum", + "handle": 23, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 40, + "start_bit_offset": 0, + "bit_width": 16, + "value": [ + 0, + 0 + ] + }, + { + "name": "version", + "handle": 24, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 42, + "start_bit_offset": 0, + "bit_width": 2, + "value": [ + 0 + ] + }, + { + "name": "opt_length", + "handle": 25, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 42, + "start_bit_offset": 2, + "bit_width": 6, + "value": [ + 0 + ] + }, + { + "name": "oam", + "handle": 26, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 43, + "start_bit_offset": 0, + "bit_width": 1, + "value": [ + 0 + ] + }, + { + "name": "crit", + "handle": 27, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 43, + "start_bit_offset": 1, + "bit_width": 1, + "value": [ + 0 + ] + }, + { + "name": "reserved_0", + "handle": 28, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 43, + "start_bit_offset": 2, + "bit_width": 6, + "value": [ + 0 + ] + }, + { + "name": "protocol", + "handle": 29, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 44, + "start_bit_offset": 0, + "bit_width": 16, + "value": [ + 101, + 88 + ] + }, + { + "name": "vni", + "handle": 30, + "param_handle": 4, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 46, + "start_bit_offset": 0, + "bit_width": 24, + "value": [] + }, + { + "name": "reserved_1", + "handle": 31, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 49, + "start_bit_offset": 0, + "bit_width": 8, + "value": [ + 0 + ] + } + ] + }, + "hw_actions_list": [] + }, + { + "action_name": "NoAction", + "action_handle": 21257015, + "immediate_fields": [], + "hw_actions_list": [] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "BIDIRECTIONAL", + "handle": 47977422, + "name": "linux_networking_control.geneve_encap_vlan_pop_mod_table", + "size": 1024, + "isDefaultSize": true, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "vmeta.common.mod_blob_ptr", + "instance_name": "vmeta.common.mod_blob_ptr", + "field_name": "vmeta.common.mod_blob_ptr", + "match_type": "exact", + "bit_width": 24, + "index": 0, + "position": 0 + } + ], + "default_action_handle": 21257015, + "actions": [ + { + "name": "linux_networking_control.geneve_encap_vlan_pop", + "handle": 26665268, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "src_addr", + "bit_width": 32 + }, + { + "name": "dst_addr", + "bit_width": 32 + }, + { + "name": "src_port", + "bit_width": 16 + }, + { + "name": "dst_port", + "bit_width": 16 + }, + { + "name": "vni", + "bit_width": 24 + } + ] + }, + { + "name": "NoAction", + "handle": 21257015, + "constant_default_action": true, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "MOD", + "id": 7, + "hw_interface": "ConfigQueue", + "hw_resource": "MOD_CONTENT", + "hw_resource_id": 0, + "profile": [ + 12 + ], + "action_format": [ + { + "action_name": "linux_networking_control.geneve_encap_vlan_pop", + "action_handle": 26665268, + "immediate_fields": [ + { + "param_name": "src_addr", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 32 + }, + { + "param_name": "dst_addr", + "param_handle": 1, + "dest_start": 4, + "start_bit_offset": 0, + "dest_width": 32 + }, + { + "param_name": "src_port", + "param_handle": 2, + "dest_start": 8, + "start_bit_offset": 0, + "dest_width": 16 + }, + { + "param_name": "dst_port", + "param_handle": 3, + "dest_start": 10, + "start_bit_offset": 0, + "dest_width": 16 + }, + { + "param_name": "vni", + "param_handle": 4, + "dest_start": 12, + "start_bit_offset": 0, + "dest_width": 24 + } + ], + "mod_content_format": { + "mod_profile": 12, + "mod_obj_size": 1, + "mod_fields": [ + { + "name": "da", + "handle": 0, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 48, + "value": [ + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + { + "name": "sa", + "handle": 1, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 6, + "start_bit_offset": 0, + "bit_width": 48, + "value": [ + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + { + "name": "type", + "handle": 2, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 12, + "start_bit_offset": 0, + "bit_width": 16, + "value": [ + 8, + 0 + ] + }, + { + "name": "version", + "handle": 3, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 14, + "start_bit_offset": 0, + "bit_width": 4, + "value": [ + 4 + ] + }, + { + "name": "ihl", + "handle": 4, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 14, + "start_bit_offset": 4, + "bit_width": 4, + "value": [ + 5 + ] + }, + { + "name": "dscp", + "handle": 5, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 15, + "start_bit_offset": 0, + "bit_width": 6, + "value": [ + 0 + ] + }, + { + "name": "ecn", + "handle": 6, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 15, + "start_bit_offset": 6, + "bit_width": 2, + "value": [ + 0 + ] + }, + { + "name": "length", + "handle": 7, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 16, + "start_bit_offset": 0, + "bit_width": 16, + "value": [ + 0, + 0 + ] + }, + { + "name": "identification", + "handle": 8, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 18, + "start_bit_offset": 0, + "bit_width": 16, + "value": [ + 0, + 0 + ] + }, + { + "name": "rsvd", + "handle": 9, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 20, + "start_bit_offset": 0, + "bit_width": 1, + "value": [ + 0 + ] + }, + { + "name": "df", + "handle": 10, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 20, + "start_bit_offset": 1, + "bit_width": 1, + "value": [ + 1 + ] + }, + { + "name": "mf", + "handle": 11, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 20, + "start_bit_offset": 2, + "bit_width": 1, + "value": [ + 0 + ] + }, + { + "name": "frag_off", + "handle": 12, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 20, + "start_bit_offset": 3, + "bit_width": 5, + "value": [ + 0 + ] + }, + { + "name": "frag_off", + "handle": 13, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 21, + "start_bit_offset": 0, + "bit_width": 3, + "value": [ + 0 + ] + }, + { + "name": "frag_off", + "handle": 14, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 21, + "start_bit_offset": 3, + "bit_width": 5, + "value": [ + 0 + ] + }, + { + "name": "ttl", + "handle": 15, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 22, + "start_bit_offset": 0, + "bit_width": 8, + "value": [ + 64 + ] + }, + { + "name": "protocol", + "handle": 16, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 23, + "start_bit_offset": 0, + "bit_width": 8, + "value": [ + 17 + ] + }, + { + "name": "csum", + "handle": 17, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 24, + "start_bit_offset": 0, + "bit_width": 16, + "value": [ + 0, + 0 + ] + }, + { + "name": "src_addr", + "handle": 18, + "param_handle": 0, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 26, + "start_bit_offset": 0, + "bit_width": 32, + "value": [] + }, + { + "name": "dst_addr", + "handle": 19, + "param_handle": 1, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 30, + "start_bit_offset": 0, + "bit_width": 32, + "value": [] + }, + { + "name": "src_port", + "handle": 20, + "param_handle": 2, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 34, + "start_bit_offset": 0, + "bit_width": 16, + "value": [] + }, + { + "name": "dst_port", + "handle": 21, + "param_handle": 3, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 36, + "start_bit_offset": 0, + "bit_width": 16, + "value": [] + }, + { + "name": "length", + "handle": 22, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 38, + "start_bit_offset": 0, + "bit_width": 16, + "value": [ + 0, + 0 + ] + }, + { + "name": "csum", + "handle": 23, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 40, + "start_bit_offset": 0, + "bit_width": 16, + "value": [ + 0, + 0 + ] + }, + { + "name": "version", + "handle": 24, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 42, + "start_bit_offset": 0, + "bit_width": 2, + "value": [ + 0 + ] + }, + { + "name": "opt_length", + "handle": 25, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 42, + "start_bit_offset": 2, + "bit_width": 6, + "value": [ + 0 + ] + }, + { + "name": "oam", + "handle": 26, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 43, + "start_bit_offset": 0, + "bit_width": 1, + "value": [ + 0 + ] + }, + { + "name": "crit", + "handle": 27, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 43, + "start_bit_offset": 1, + "bit_width": 1, + "value": [ + 0 + ] + }, + { + "name": "reserved_0", + "handle": 28, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 43, + "start_bit_offset": 2, + "bit_width": 6, + "value": [ + 0 + ] + }, + { + "name": "protocol", + "handle": 29, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 44, + "start_bit_offset": 0, + "bit_width": 16, + "value": [ + 101, + 88 + ] + }, + { + "name": "vni", + "handle": 30, + "param_handle": 4, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 46, + "start_bit_offset": 0, + "bit_width": 24, + "value": [] + }, + { + "name": "reserved_1", + "handle": 31, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 49, + "start_bit_offset": 0, + "bit_width": 8, + "value": [ + 0 + ] + } + ] + }, + "hw_actions_list": [] + }, + { + "action_name": "NoAction", + "action_handle": 21257015, + "immediate_fields": [], + "hw_actions_list": [] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "BIDIRECTIONAL", + "handle": 42283616, + "name": "linux_networking_control.geneve_encap_v6_mod_table", + "size": 1024, + "isDefaultSize": true, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "vmeta.common.mod_blob_ptr", + "instance_name": "vmeta.common.mod_blob_ptr", + "field_name": "vmeta.common.mod_blob_ptr", + "match_type": "exact", + "bit_width": 24, + "index": 0, + "position": 0 + } + ], + "default_action_handle": 21257015, + "actions": [ + { + "name": "linux_networking_control.geneve_encap_v6", + "handle": 29610186, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "src_addr", + "bit_width": 128 + }, + { + "name": "dst_addr", + "bit_width": 128 + }, + { + "name": "ds", + "bit_width": 6 + }, + { + "name": "ecn", + "bit_width": 2 + }, + { + "name": "flow_label", + "bit_width": 20 + }, + { + "name": "hop_limit", + "bit_width": 8 + }, + { + "name": "src_port", + "bit_width": 16 + }, + { + "name": "dst_port", + "bit_width": 16 + }, + { + "name": "vni", + "bit_width": 24 + } + ] + }, + { + "name": "NoAction", + "handle": 21257015, + "constant_default_action": true, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "MOD", + "id": 7, + "hw_interface": "ConfigQueue", + "hw_resource": "MOD_CONTENT", + "hw_resource_id": 0, + "profile": [ + 11 + ], + "action_format": [ + { + "action_name": "linux_networking_control.geneve_encap_v6", + "action_handle": 29610186, + "immediate_fields": [ + { + "param_name": "src_addr", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 128 + }, + { + "param_name": "dst_addr", + "param_handle": 1, + "dest_start": 16, + "start_bit_offset": 0, + "dest_width": 128 + }, + { + "param_name": "ds", + "param_handle": 2, + "dest_start": 32, + "start_bit_offset": 0, + "dest_width": 6 + }, + { + "param_name": "ecn", + "param_handle": 3, + "dest_start": 33, + "start_bit_offset": 0, + "dest_width": 2 + }, + { + "param_name": "flow_label", + "param_handle": 4, + "dest_start": 34, + "start_bit_offset": 0, + "dest_width": 20 + }, + { + "param_name": "hop_limit", + "param_handle": 5, + "dest_start": 37, + "start_bit_offset": 0, + "dest_width": 8 + }, + { + "param_name": "src_port", + "param_handle": 6, + "dest_start": 38, + "start_bit_offset": 0, + "dest_width": 16 + }, + { + "param_name": "dst_port", + "param_handle": 7, + "dest_start": 40, + "start_bit_offset": 0, + "dest_width": 16 + }, + { + "param_name": "vni", + "param_handle": 8, + "dest_start": 42, + "start_bit_offset": 0, + "dest_width": 24 + } + ], + "mod_content_format": { + "mod_profile": 11, + "mod_obj_size": 1, + "mod_fields": [ + { + "name": "da", + "handle": 0, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 48, + "value": [ + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + { + "name": "sa", + "handle": 1, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 6, + "start_bit_offset": 0, + "bit_width": 48, + "value": [ + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + { + "name": "type", + "handle": 2, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 12, + "start_bit_offset": 0, + "bit_width": 16, + "value": [ + 134, + 221 + ] + }, + { + "name": "version", + "handle": 3, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 14, + "start_bit_offset": 0, + "bit_width": 4, + "value": [ + 6 + ] + }, + { + "name": "ds", + "handle": 4, + "param_handle": 2, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 14, + "start_bit_offset": 4, + "bit_width": 6, + "value": [] + }, + { + "name": "ecn", + "handle": 5, + "param_handle": 3, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 15, + "start_bit_offset": 2, + "bit_width": 2, + "value": [] + }, + { + "name": "flow_label", + "handle": 6, + "param_handle": 4, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 15, + "start_bit_offset": 4, + "bit_width": 20, + "value": [] + }, + { + "name": "pay_length", + "handle": 7, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 18, + "start_bit_offset": 0, + "bit_width": 16, + "value": [ + 0, + 0 + ] + }, + { + "name": "next_header", + "handle": 8, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 20, + "start_bit_offset": 0, + "bit_width": 8, + "value": [ + 17 + ] + }, + { + "name": "hop_limit", + "handle": 9, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 21, + "start_bit_offset": 0, + "bit_width": 8, + "value": [ + 64 + ] + }, + { + "name": "src_addr", + "handle": 10, + "param_handle": 0, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 22, + "start_bit_offset": 0, + "bit_width": 128, + "value": [] + }, + { + "name": "dst_addr", + "handle": 11, + "param_handle": 1, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 38, + "start_bit_offset": 0, + "bit_width": 128, + "value": [] + }, + { + "name": "src_port", + "handle": 12, + "param_handle": 6, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 54, + "start_bit_offset": 0, + "bit_width": 16, + "value": [] + }, + { + "name": "dst_port", + "handle": 13, + "param_handle": 7, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 56, + "start_bit_offset": 0, + "bit_width": 16, + "value": [] + }, + { + "name": "length", + "handle": 14, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 58, + "start_bit_offset": 0, + "bit_width": 16, + "value": [ + 0, + 0 + ] + }, + { + "name": "csum", + "handle": 15, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 60, + "start_bit_offset": 0, + "bit_width": 16, + "value": [ + 0, + 0 + ] + }, + { + "name": "version", + "handle": 16, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 62, + "start_bit_offset": 0, + "bit_width": 2, + "value": [ + 0 + ] + }, + { + "name": "opt_length", + "handle": 17, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 62, + "start_bit_offset": 2, + "bit_width": 6, + "value": [ + 0 + ] + }, + { + "name": "oam", + "handle": 18, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 63, + "start_bit_offset": 0, + "bit_width": 1, + "value": [ + 0 + ] + }, + { + "name": "crit", + "handle": 19, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 63, + "start_bit_offset": 1, + "bit_width": 1, + "value": [ + 0 + ] + }, + { + "name": "reserved_0", + "handle": 20, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 63, + "start_bit_offset": 2, + "bit_width": 6, + "value": [ + 0 + ] + }, + { + "name": "protocol", + "handle": 21, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 64, + "start_bit_offset": 0, + "bit_width": 16, + "value": [ + 101, + 88 + ] + }, + { + "name": "vni", + "handle": 22, + "param_handle": 8, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 66, + "start_bit_offset": 0, + "bit_width": 24, + "value": [] + }, + { + "name": "reserved_1", + "handle": 23, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 69, + "start_bit_offset": 0, + "bit_width": 8, + "value": [ + 0 + ] + } + ] + }, + "hw_actions_list": [] + }, + { + "action_name": "NoAction", + "action_handle": 21257015, + "immediate_fields": [], + "hw_actions_list": [] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "BIDIRECTIONAL", + "handle": 47370391, + "name": "linux_networking_control.geneve_encap_v6_vlan_pop_mod_table", + "size": 1024, + "isDefaultSize": true, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "vmeta.common.mod_blob_ptr", + "instance_name": "vmeta.common.mod_blob_ptr", + "field_name": "vmeta.common.mod_blob_ptr", + "match_type": "exact", + "bit_width": 24, + "index": 0, + "position": 0 + } + ], + "default_action_handle": 21257015, + "actions": [ + { + "name": "linux_networking_control.geneve_encap_v6_vlan_pop", + "handle": 27347188, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "src_addr", + "bit_width": 128 + }, + { + "name": "dst_addr", + "bit_width": 128 + }, + { + "name": "ds", + "bit_width": 6 + }, + { + "name": "ecn", + "bit_width": 2 + }, + { + "name": "flow_label", + "bit_width": 20 + }, + { + "name": "hop_limit", + "bit_width": 8 + }, + { + "name": "src_port", + "bit_width": 16 + }, + { + "name": "dst_port", + "bit_width": 16 + }, + { + "name": "vni", + "bit_width": 24 + } + ] + }, + { + "name": "NoAction", + "handle": 21257015, + "constant_default_action": true, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "MOD", + "id": 7, + "hw_interface": "ConfigQueue", + "hw_resource": "MOD_CONTENT", + "hw_resource_id": 0, + "profile": [ + 13 + ], + "action_format": [ + { + "action_name": "linux_networking_control.geneve_encap_v6_vlan_pop", + "action_handle": 27347188, + "immediate_fields": [ + { + "param_name": "src_addr", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 128 + }, + { + "param_name": "dst_addr", + "param_handle": 1, + "dest_start": 16, + "start_bit_offset": 0, + "dest_width": 128 + }, + { + "param_name": "ds", + "param_handle": 2, + "dest_start": 32, + "start_bit_offset": 0, + "dest_width": 6 + }, + { + "param_name": "ecn", + "param_handle": 3, + "dest_start": 33, + "start_bit_offset": 0, + "dest_width": 2 + }, + { + "param_name": "flow_label", + "param_handle": 4, + "dest_start": 34, + "start_bit_offset": 0, + "dest_width": 20 + }, + { + "param_name": "hop_limit", + "param_handle": 5, + "dest_start": 37, + "start_bit_offset": 0, + "dest_width": 8 + }, + { + "param_name": "src_port", + "param_handle": 6, + "dest_start": 38, + "start_bit_offset": 0, + "dest_width": 16 + }, + { + "param_name": "dst_port", + "param_handle": 7, + "dest_start": 40, + "start_bit_offset": 0, + "dest_width": 16 + }, + { + "param_name": "vni", + "param_handle": 8, + "dest_start": 42, + "start_bit_offset": 0, + "dest_width": 24 + } + ], + "mod_content_format": { + "mod_profile": 13, + "mod_obj_size": 1, + "mod_fields": [ + { + "name": "da", + "handle": 0, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 48, + "value": [ + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + { + "name": "sa", + "handle": 1, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 6, + "start_bit_offset": 0, + "bit_width": 48, + "value": [ + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + { + "name": "type", + "handle": 2, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 12, + "start_bit_offset": 0, + "bit_width": 16, + "value": [ + 134, + 221 + ] + }, + { + "name": "version", + "handle": 3, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 14, + "start_bit_offset": 0, + "bit_width": 4, + "value": [ + 6 + ] + }, + { + "name": "ds", + "handle": 4, + "param_handle": 2, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 14, + "start_bit_offset": 4, + "bit_width": 6, + "value": [] + }, + { + "name": "ecn", + "handle": 5, + "param_handle": 3, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 15, + "start_bit_offset": 2, + "bit_width": 2, + "value": [] + }, + { + "name": "flow_label", + "handle": 6, + "param_handle": 4, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 15, + "start_bit_offset": 4, + "bit_width": 20, + "value": [] + }, + { + "name": "pay_length", + "handle": 7, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 18, + "start_bit_offset": 0, + "bit_width": 16, + "value": [ + 0, + 0 + ] + }, + { + "name": "next_header", + "handle": 8, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 20, + "start_bit_offset": 0, + "bit_width": 8, + "value": [ + 17 + ] + }, + { + "name": "hop_limit", + "handle": 9, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 21, + "start_bit_offset": 0, + "bit_width": 8, + "value": [ + 64 + ] + }, + { + "name": "src_addr", + "handle": 10, + "param_handle": 0, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 22, + "start_bit_offset": 0, + "bit_width": 128, + "value": [] + }, + { + "name": "dst_addr", + "handle": 11, + "param_handle": 1, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 38, + "start_bit_offset": 0, + "bit_width": 128, + "value": [] + }, + { + "name": "src_port", + "handle": 12, + "param_handle": 6, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 54, + "start_bit_offset": 0, + "bit_width": 16, + "value": [] + }, + { + "name": "dst_port", + "handle": 13, + "param_handle": 7, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 56, + "start_bit_offset": 0, + "bit_width": 16, + "value": [] + }, + { + "name": "length", + "handle": 14, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 58, + "start_bit_offset": 0, + "bit_width": 16, + "value": [ + 0, + 0 + ] + }, + { + "name": "csum", + "handle": 15, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 60, + "start_bit_offset": 0, + "bit_width": 16, + "value": [ + 0, + 0 + ] + }, + { + "name": "version", + "handle": 16, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 62, + "start_bit_offset": 0, + "bit_width": 2, + "value": [ + 0 + ] + }, + { + "name": "opt_length", + "handle": 17, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 62, + "start_bit_offset": 2, + "bit_width": 6, + "value": [ + 0 + ] + }, + { + "name": "oam", + "handle": 18, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 63, + "start_bit_offset": 0, + "bit_width": 1, + "value": [ + 0 + ] + }, + { + "name": "crit", + "handle": 19, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 63, + "start_bit_offset": 1, + "bit_width": 1, + "value": [ + 0 + ] + }, + { + "name": "reserved_0", + "handle": 20, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 63, + "start_bit_offset": 2, + "bit_width": 6, + "value": [ + 0 + ] + }, + { + "name": "protocol", + "handle": 21, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 64, + "start_bit_offset": 0, + "bit_width": 16, + "value": [ + 101, + 88 + ] + }, + { + "name": "vni", + "handle": 22, + "param_handle": 8, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 66, + "start_bit_offset": 0, + "bit_width": 24, + "value": [] + }, + { + "name": "reserved_1", + "handle": 23, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 69, + "start_bit_offset": 0, + "bit_width": 8, + "value": [ + 0 + ] + } + ] + }, + "hw_actions_list": [] + }, + { + "action_name": "NoAction", + "action_handle": 21257015, + "immediate_fields": [], + "hw_actions_list": [] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "BIDIRECTIONAL", + "handle": 34173274, + "name": "linux_networking_control.geneve_decap_mod_table", + "size": 1024, + "isDefaultSize": true, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "vmeta.common.mod_blob_ptr", + "instance_name": "vmeta.common.mod_blob_ptr", + "field_name": "vmeta.common.mod_blob_ptr", + "match_type": "exact", + "bit_width": 24, + "index": 0, + "position": 0 + } + ], + "default_action_handle": 21257015, + "actions": [ + { + "name": "linux_networking_control.geneve_decap_outer_hdr", + "handle": 27842378, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [] + }, + { + "name": "NoAction", + "handle": 21257015, + "constant_default_action": true, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "MOD", + "id": 7, + "hw_interface": "ConfigQueue", + "hw_resource": "MOD_CONTENT", + "hw_resource_id": 0, + "profile": [ + 14 + ], + "action_format": [ + { + "action_name": "linux_networking_control.geneve_decap_outer_hdr", + "action_handle": 27842378, + "immediate_fields": [], + "mod_content_format": { + "mod_profile": 14, + "mod_obj_size": 1 + }, + "hw_actions_list": [] + }, + { + "action_name": "NoAction", + "action_handle": 21257015, + "immediate_fields": [], + "hw_actions_list": [] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "BIDIRECTIONAL", + "handle": 34525815, + "name": "linux_networking_control.geneve_decap_and_push_vlan_mod_table", + "size": 1024, + "isDefaultSize": true, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "vmeta.common.mod_blob_ptr", + "instance_name": "vmeta.common.mod_blob_ptr", + "field_name": "vmeta.common.mod_blob_ptr", + "match_type": "exact", + "bit_width": 24, + "index": 0, + "position": 0 + } + ], + "default_action_handle": 21257015, + "actions": [ + { + "name": "linux_networking_control.geneve_decap_and_push_vlan", + "handle": 25073902, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "pcp", + "bit_width": 3 + }, + { + "name": "dei", + "bit_width": 1 + }, + { + "name": "vlan_id", + "bit_width": 12 + } + ] + }, + { + "name": "NoAction", + "handle": 21257015, + "constant_default_action": true, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "MOD", + "id": 7, + "hw_interface": "ConfigQueue", + "hw_resource": "MOD_CONTENT", + "hw_resource_id": 0, + "profile": [ + 15 + ], + "action_format": [ + { + "action_name": "linux_networking_control.geneve_decap_and_push_vlan", + "action_handle": 25073902, + "immediate_fields": [ + { + "param_name": "pcp", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 3 + }, + { + "param_name": "dei", + "param_handle": 1, + "dest_start": 1, + "start_bit_offset": 0, + "dest_width": 1 + }, + { + "param_name": "vlan_id", + "param_handle": 2, + "dest_start": 2, + "start_bit_offset": 0, + "dest_width": 12 + } + ], + "mod_content_format": { + "mod_profile": 15, + "mod_obj_size": 1, + "mod_fields": [ + { + "name": "type", + "handle": 0, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 16, + "value": [ + 129, + 0 + ] + }, + { + "name": "pcp", + "handle": 1, + "param_handle": 0, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 2, + "start_bit_offset": 0, + "bit_width": 3, + "value": [] + }, + { + "name": "dei", + "handle": 2, + "param_handle": 1, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 2, + "start_bit_offset": 3, + "bit_width": 1, + "value": [] + }, + { + "name": "vlan_id", + "handle": 3, + "param_handle": 2, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 2, + "start_bit_offset": 4, + "bit_width": 12, + "value": [] + } + ] + }, + "hw_actions_list": [] + }, + { + "action_name": "NoAction", + "action_handle": 21257015, + "immediate_fields": [], + "hw_actions_list": [] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "RX", + "handle": 47484925, + "name": "linux_networking_control.ipv4_tunnel_term_table", + "size": 1024, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "ipv4_src", + "instance_name": "ipv4_src", + "field_name": "ipv4_src", + "match_type": "exact", + "bit_width": 32, + "index": 0, + "position": 0 + }, + { + "name": "vni", + "instance_name": "vni", + "field_name": "vni", + "match_type": "exact", + "bit_width": 24, + "index": 1, + "position": 4 + } + ], + "match_key_format": [ + { + "match_key_handle": 0, + "byte_order": "NETWORK", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 32 + }, + { + "match_key_handle": 1, + "byte_order": "NETWORK", + "byte_array_index": 4, + "start_bit_offset": 0, + "bit_width": 32 + } + ], + "default_action_handle": 21790705, + "max_default_actions": 2, + "actions": [ + { + "name": "linux_networking_control.set_vxlan_decap_outer_hdr", + "handle": 31163719, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "tunnel_id", + "bit_width": 20 + } + ] + }, + { + "name": "linux_networking_control.set_vxlan_decap_outer_and_push_vlan", + "handle": 25342798, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "tunnel_id", + "bit_width": 20 + } + ] + }, + { + "name": "linux_networking_control.set_geneve_decap_outer_hdr", + "handle": 26749366, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "tunnel_id", + "bit_width": 20 + } + ] + }, + { + "name": "linux_networking_control.set_geneve_decap_outer_and_push_vlan", + "handle": 31208923, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "tunnel_id", + "bit_width": 20 + } + ] + }, + { + "name": "linux_networking_control.trap_enable", + "handle": 21790705, + "constant_default_action": true, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "SEM", + "id": 0, + "hw_interface": "ConfigQueue", + "profile": [ + 1 + ], + "sub_profile": 1, + "obj_id": 0, + "hash_size": 325632, + "action_format": [ + { + "action_name": "linux_networking_control.set_vxlan_decap_outer_hdr", + "action_handle": 31163719, + "immediate_fields": [ + { + "param_name": "tunnel_id", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 20 + } + ], + "hw_actions_list": [ + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 9, + "mod_profile": 2, + "prefetch": 1 + }, + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 0, + "parameters": [ + { + "param_name": "tunnel_id", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 20, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "p4_ref_action_handle": 28308555, + "p4_ref_table_handle": 40980035 + } + ] + }, + { + "action_name": "linux_networking_control.set_vxlan_decap_outer_and_push_vlan", + "action_handle": 25342798, + "immediate_fields": [ + { + "param_name": "tunnel_id", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 20 + } + ], + "hw_actions_list": [ + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 9, + "mod_profile": 7, + "prefetch": 1 + }, + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 0, + "parameters": [ + { + "param_name": "tunnel_id", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 20, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "p4_ref_action_handle": 31953264, + "p4_ref_table_handle": 37624107 + } + ] + }, + { + "action_name": "linux_networking_control.set_geneve_decap_outer_hdr", + "action_handle": 26749366, + "immediate_fields": [ + { + "param_name": "tunnel_id", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 20 + } + ], + "hw_actions_list": [ + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 9, + "mod_profile": 14, + "prefetch": 1 + }, + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 0, + "parameters": [ + { + "param_name": "tunnel_id", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 20, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "p4_ref_action_handle": 27842378, + "p4_ref_table_handle": 34173274 + } + ] + }, + { + "action_name": "linux_networking_control.set_geneve_decap_outer_and_push_vlan", + "action_handle": 31208923, + "immediate_fields": [ + { + "param_name": "tunnel_id", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 20 + } + ], + "hw_actions_list": [ + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 9, + "mod_profile": 15, + "prefetch": 1 + }, + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 0, + "parameters": [ + { + "param_name": "tunnel_id", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 20, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "p4_ref_action_handle": 25073902, + "p4_ref_table_handle": 34525815 + } + ] + }, + { + "action_name": "linux_networking_control.trap_enable", + "action_handle": 21790705, + "immediate_fields": [], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 64, + "mask": 112 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 0, + "setmd_action_code": "SET_8b", + "value": 1, + "mask": 1, + "type_id": 4, + "offset": 0 + } + ] + } + ], + "default_action_format": [ + { + "action_name": "linux_networking_control.trap_enable", + "action_handle": 21790705, + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 64, + "mask": 112 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 0, + "setmd_action_code": "SET_8b", + "value": 1, + "mask": 1, + "type_id": 4, + "offset": 0 + } + ] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "RX", + "handle": 34601307, + "name": "linux_networking_control.ipv6_tunnel_term_table", + "size": 1024, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "ipv6_src", + "instance_name": "ipv6_src", + "field_name": "ipv6_src", + "match_type": "exact", + "bit_width": 128, + "index": 0, + "position": 0 + }, + { + "name": "vni", + "instance_name": "vni", + "field_name": "vni", + "match_type": "exact", + "bit_width": 24, + "index": 1, + "position": 16 + } + ], + "match_key_format": [ + { + "match_key_handle": 0, + "byte_order": "NETWORK", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 128 + }, + { + "match_key_handle": 1, + "byte_order": "NETWORK", + "byte_array_index": 16, + "start_bit_offset": 0, + "bit_width": 32 + } + ], + "default_action_handle": 21257015, + "max_default_actions": 4, + "actions": [ + { + "name": "linux_networking_control.set_vxlan_decap_outer_hdr", + "handle": 31163719, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "tunnel_id", + "bit_width": 20 + } + ] + }, + { + "name": "linux_networking_control.set_vxlan_decap_outer_and_push_vlan", + "handle": 25342798, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "tunnel_id", + "bit_width": 20 + } + ] + }, + { + "name": "linux_networking_control.set_geneve_decap_outer_hdr", + "handle": 26749366, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "tunnel_id", + "bit_width": 20 + } + ] + }, + { + "name": "linux_networking_control.set_geneve_decap_outer_and_push_vlan", + "handle": 31208923, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "tunnel_id", + "bit_width": 20 + } + ] + }, + { + "name": "NoAction", + "handle": 21257015, + "constant_default_action": true, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "SEM", + "id": 0, + "hw_interface": "ConfigQueue", + "profile": [ + 2 + ], + "sub_profile": 2, + "obj_id": 2, + "hash_size": 325632, + "action_format": [ + { + "action_name": "linux_networking_control.set_vxlan_decap_outer_hdr", + "action_handle": 31163719, + "immediate_fields": [ + { + "param_name": "tunnel_id", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 20 + } + ], + "hw_actions_list": [ + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 9, + "mod_profile": 2, + "prefetch": 1 + }, + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 0, + "parameters": [ + { + "param_name": "tunnel_id", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 20, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "p4_ref_action_handle": 28308555, + "p4_ref_table_handle": 40980035 + } + ] + }, + { + "action_name": "linux_networking_control.set_vxlan_decap_outer_and_push_vlan", + "action_handle": 25342798, + "immediate_fields": [ + { + "param_name": "tunnel_id", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 20 + } + ], + "hw_actions_list": [ + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 9, + "mod_profile": 7, + "prefetch": 1 + }, + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 0, + "parameters": [ + { + "param_name": "tunnel_id", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 20, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "p4_ref_action_handle": 31953264, + "p4_ref_table_handle": 37624107 + } + ] + }, + { + "action_name": "linux_networking_control.set_geneve_decap_outer_hdr", + "action_handle": 26749366, + "immediate_fields": [ + { + "param_name": "tunnel_id", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 20 + } + ], + "hw_actions_list": [ + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 9, + "mod_profile": 14, + "prefetch": 1 + }, + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 0, + "parameters": [ + { + "param_name": "tunnel_id", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 20, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "p4_ref_action_handle": 27842378, + "p4_ref_table_handle": 34173274 + } + ] + }, + { + "action_name": "linux_networking_control.set_geneve_decap_outer_and_push_vlan", + "action_handle": 31208923, + "immediate_fields": [ + { + "param_name": "tunnel_id", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 20 + } + ], + "hw_actions_list": [ + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 9, + "mod_profile": 15, + "prefetch": 1 + }, + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 0, + "parameters": [ + { + "param_name": "tunnel_id", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 20, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "p4_ref_action_handle": 25073902, + "p4_ref_table_handle": 34525815 + } + ] + }, + { + "action_name": "NoAction", + "action_handle": 21257015, + "immediate_fields": [], + "hw_actions_list": [] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "RX", + "handle": 44842501, + "name": "linux_networking_control.l2_fwd_rx_table", + "size": 1024, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "user_meta.pmeta.bridge_id", + "instance_name": "user_meta.pmeta.bridge_id", + "field_name": "user_meta.pmeta.bridge_id", + "match_type": "exact", + "bit_width": 8, + "index": 0, + "position": 0 + }, + { + "name": "dst_mac", + "instance_name": "dst_mac", + "field_name": "dst_mac", + "match_type": "exact", + "bit_width": 48, + "index": 1, + "position": 1 + } + ], + "match_key_format": [ + { + "match_key_handle": 0, + "byte_order": "HOST", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 16 + }, + { + "match_key_handle": 1, + "byte_order": "NETWORK", + "byte_array_index": 2, + "start_bit_offset": 0, + "bit_width": 48 + } + ], + "default_action_handle": 21283156, + "actions": [ + { + "name": "linux_networking_control.l2_fwd", + "handle": 19169916, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "port", + "bit_width": 32 + } + ] + }, + { + "name": "linux_networking_control.l2_fwd_lag_and_recirculate", + "handle": 21862855, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "lag_group_id", + "bit_width": 8 + } + ] + }, + { + "name": "linux_networking_control.fwd_to_cp", + "handle": 21283156, + "constant_default_action": true, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "LEM", + "id": 2, + "hw_interface": "ConfigQueue", + "profile": [ + 1 + ], + "hash_size": 325632, + "action_format": [ + { + "action_name": "linux_networking_control.l2_fwd", + "action_handle": 19169916, + "immediate_fields": [ + { + "param_name": "port", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 32 + } + ], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET1_16b", + "encoding_grp": 1, + "encoding_port": "VSI", + "index": 2, + "parameters": [ + { + "param_name": "port", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 32, + "value_start_bit": 0, + "byte_order": "HOST" + } + ] + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "encoding_grp": 1, + "encoding_port": "VSI", + "index": 3, + "setmd_type": "QUEUE", + "setmd_action_code": "SET_16b", + "value": 0, + "type_id": 0, + "offset": 9 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "encoding_grp": 1, + "encoding_port": "VSI", + "index": 2, + "setmd_type": "QUEUE", + "setmd_action_code": "SET_8b_AUX", + "value": 0, + "mask": 255 + }, + { + "prec": 7, + "action_code": "AUX_DATA", + "encoding_grp": 1, + "encoding_port": "VSI", + "index": 2, + "type_id": 0, + "offset": 20 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "encoding_grp": 1, + "encoding_port": "VSI", + "index": 1, + "setmd_type": "FUNCTION", + "setmd_action_code": "SET_8b_AUX", + "value": 0, + "mask": 255 + }, + { + "prec": 7, + "action_code": "AUX_DATA", + "encoding_grp": 1, + "encoding_port": "VSI", + "index": 1, + "type_id": 0, + "offset": 21 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "encoding_grp": 1, + "encoding_port": "VSI", + "index": 0, + "setmd_type": "FUNCTION", + "setmd_action_code": "SET_16b", + "value": 0, + "type_id": 0, + "offset": 11 + } + ] + }, + { + "action_name": "linux_networking_control.l2_fwd_lag_and_recirculate", + "action_handle": 21862855, + "immediate_fields": [ + { + "param_name": "lag_group_id", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 8 + } + ], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 64, + "mask": 112 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 3, + "setmd_action_code": "SET_8b", + "parameters": [ + { + "param_name": "lag_group_id", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 8, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "mask": 255, + "type_id": 4, + "offset": 1 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 4, + "setmd_action_code": "SET_8b", + "value": 16, + "mask": 16, + "type_id": 4, + "offset": 0 + } + ] + }, + { + "action_name": "linux_networking_control.fwd_to_cp", + "action_handle": 21283156, + "immediate_fields": [], + "hw_actions_list": [ + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 9, + "mod_profile": 0, + "prefetch": 0 + }, + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 64, + "mask": 112 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 0, + "setmd_action_code": "SET_8b", + "value": 1, + "mask": 1, + "type_id": 4, + "offset": 0 + } + ] + } + ], + "default_action_format": [ + { + "action_name": "linux_networking_control.fwd_to_cp", + "action_handle": 21283156, + "hw_actions_list": [ + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 9, + "mod_profile": 0, + "prefetch": 0 + }, + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 64, + "mask": 112 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 0, + "setmd_action_code": "SET_8b", + "value": 1, + "mask": 1, + "type_id": 4, + "offset": 0 + } + ] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "TX", + "handle": 40240205, + "name": "linux_networking_control.l2_fwd_tx_table", + "size": 1024, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "user_meta.pmeta.bridge_id", + "instance_name": "user_meta.pmeta.bridge_id", + "field_name": "user_meta.pmeta.bridge_id", + "match_type": "exact", + "bit_width": 8, + "index": 0, + "position": 0 + }, + { + "name": "dst_mac", + "instance_name": "dst_mac", + "field_name": "dst_mac", + "match_type": "exact", + "bit_width": 48, + "index": 1, + "position": 1 + } + ], + "match_key_format": [ + { + "match_key_handle": 0, + "byte_order": "HOST", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 16 + }, + { + "match_key_handle": 1, + "byte_order": "NETWORK", + "byte_array_index": 2, + "start_bit_offset": 0, + "bit_width": 48 + } + ], + "default_action_handle": 20441854, + "actions": [ + { + "name": "linux_networking_control.l2_fwd", + "handle": 19169916, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "port", + "bit_width": 32 + } + ] + }, + { + "name": "linux_networking_control.l2_fwd_lag", + "handle": 24440746, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "lag_group_id", + "bit_width": 8 + } + ] + }, + { + "name": "linux_networking_control.set_vxlan_underlay_v4", + "handle": 26412051, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "tunnel_id", + "bit_width": 20 + } + ] + }, + { + "name": "linux_networking_control.set_vxlan_underlay_v6", + "handle": 19193142, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "tunnel_id", + "bit_width": 20 + } + ] + }, + { + "name": "linux_networking_control.pop_vlan_set_vxlan_underlay_v4", + "handle": 31983357, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "tunnel_id", + "bit_width": 20 + } + ] + }, + { + "name": "linux_networking_control.pop_vlan_set_vxlan_underlay_v6", + "handle": 23849990, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "tunnel_id", + "bit_width": 20 + } + ] + }, + { + "name": "linux_networking_control.set_geneve_underlay_v4", + "handle": 23736116, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "tunnel_id", + "bit_width": 20 + } + ] + }, + { + "name": "linux_networking_control.set_geneve_underlay_v6", + "handle": 17483375, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "tunnel_id", + "bit_width": 20 + } + ] + }, + { + "name": "linux_networking_control.pop_vlan_set_geneve_underlay_v4", + "handle": 24842266, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "tunnel_id", + "bit_width": 20 + } + ] + }, + { + "name": "linux_networking_control.pop_vlan_set_geneve_underlay_v6", + "handle": 33478945, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "tunnel_id", + "bit_width": 20 + } + ] + }, + { + "name": "linux_networking_control.add_vlan_and_fwd", + "handle": 24108243, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "vlan_ptr", + "bit_width": 24 + }, + { + "name": "port_id", + "bit_width": 32 + } + ] + }, + { + "name": "linux_networking_control.remove_vlan_and_fwd", + "handle": 25690116, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "vlan_ptr", + "bit_width": 24 + }, + { + "name": "port_id", + "bit_width": 32 + } + ] + }, + { + "name": "linux_networking_control.fwd_to_cp_tx", + "handle": 20441854, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "LEM", + "id": 2, + "hw_interface": "ConfigQueue", + "profile": [ + 4 + ], + "hash_size": 325632, + "action_format": [ + { + "action_name": "linux_networking_control.l2_fwd", + "action_handle": 19169916, + "immediate_fields": [ + { + "param_name": "port", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 32 + } + ], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET1_16b", + "encoding_grp": 2, + "encoding_port": "VSI", + "index": 2, + "parameters": [ + { + "param_name": "port", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 32, + "value_start_bit": 0, + "byte_order": "HOST" + } + ] + }, + { + "prec": 7, + "action_code": "SET10_1b", + "encoding_grp": 2, + "encoding_port": "VSI", + "index": 0, + "value": 4, + "mask": 4 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "encoding_grp": 2, + "encoding_port": "VSI", + "index": 3, + "setmd_action_code": "SET_8b", + "value": 2, + "mask": 2, + "type_id": 0, + "offset": 0 + }, + { + "prec": 7, + "action_code": "SET1_16b", + "encoding_grp": 3, + "encoding_port": "PORT", + "index": 2, + "parameters": [ + { + "param_name": "port", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 32, + "value_start_bit": 0, + "byte_order": "HOST" + } + ] + } + ] + }, + { + "action_name": "linux_networking_control.l2_fwd_lag", + "action_handle": 24440746, + "immediate_fields": [ + { + "param_name": "lag_group_id", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 8 + } + ], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 3, + "setmd_action_code": "SET_8b", + "parameters": [ + { + "param_name": "lag_group_id", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 8, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "mask": 255, + "type_id": 4, + "offset": 1 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 4, + "setmd_action_code": "SET_8b", + "value": 16, + "mask": 16, + "type_id": 4, + "offset": 0 + } + ] + }, + { + "action_name": "linux_networking_control.set_vxlan_underlay_v4", + "action_handle": 26412051, + "immediate_fields": [ + { + "param_name": "tunnel_id", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 20 + } + ], + "hw_actions_list": [ + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 9, + "mod_profile": 1, + "prefetch": 1 + }, + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 0, + "parameters": [ + { + "param_name": "tunnel_id", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 20, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "p4_ref_action_handle": 20733968, + "p4_ref_table_handle": 40763773 + }, + { + "prec": 3, + "action_code": "SET2_8b", + "index": 11 + }, + { + "prec": 3, + "action_code": "SET1A_24b", + "index": 4, + "pool_id": 0 + } + ] + }, + { + "action_name": "linux_networking_control.set_vxlan_underlay_v6", + "action_handle": 19193142, + "immediate_fields": [ + { + "param_name": "tunnel_id", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 20 + } + ], + "hw_actions_list": [ + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 9, + "mod_profile": 6, + "prefetch": 1 + }, + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 0, + "parameters": [ + { + "param_name": "tunnel_id", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 20, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "p4_ref_action_handle": 30345128, + "p4_ref_table_handle": 46225003 + }, + { + "prec": 3, + "action_code": "SET2_8b", + "index": 11 + }, + { + "prec": 3, + "action_code": "SET1A_24b", + "index": 4, + "pool_id": 0 + } + ] + }, + { + "action_name": "linux_networking_control.pop_vlan_set_vxlan_underlay_v4", + "action_handle": 31983357, + "immediate_fields": [ + { + "param_name": "tunnel_id", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 20 + } + ], + "hw_actions_list": [ + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 9, + "mod_profile": 8, + "prefetch": 1 + }, + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 0, + "parameters": [ + { + "param_name": "tunnel_id", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 20, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "p4_ref_action_handle": 26114242, + "p4_ref_table_handle": 39675860 + }, + { + "prec": 3, + "action_code": "SET2_8b", + "index": 11 + }, + { + "prec": 3, + "action_code": "SET1A_24b", + "index": 4, + "pool_id": 0 + } + ] + }, + { + "action_name": "linux_networking_control.pop_vlan_set_vxlan_underlay_v6", + "action_handle": 23849990, + "immediate_fields": [ + { + "param_name": "tunnel_id", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 20 + } + ], + "hw_actions_list": [ + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 9, + "mod_profile": 9, + "prefetch": 1 + }, + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 0, + "parameters": [ + { + "param_name": "tunnel_id", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 20, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "p4_ref_action_handle": 28284062, + "p4_ref_table_handle": 34318005 + }, + { + "prec": 3, + "action_code": "SET2_8b", + "index": 11 + }, + { + "prec": 3, + "action_code": "SET1A_24b", + "index": 4, + "pool_id": 0 + } + ] + }, + { + "action_name": "linux_networking_control.set_geneve_underlay_v4", + "action_handle": 23736116, + "immediate_fields": [ + { + "param_name": "tunnel_id", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 20 + } + ], + "hw_actions_list": [ + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 9, + "mod_profile": 10, + "prefetch": 1 + }, + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 0, + "parameters": [ + { + "param_name": "tunnel_id", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 20, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "p4_ref_action_handle": 25818889, + "p4_ref_table_handle": 41319073 + }, + { + "prec": 3, + "action_code": "SET2_8b", + "index": 11 + }, + { + "prec": 3, + "action_code": "SET1A_24b", + "index": 4, + "pool_id": 0 + } + ] + }, + { + "action_name": "linux_networking_control.set_geneve_underlay_v6", + "action_handle": 17483375, + "immediate_fields": [ + { + "param_name": "tunnel_id", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 20 + } + ], + "hw_actions_list": [ + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 9, + "mod_profile": 11, + "prefetch": 1 + }, + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 0, + "parameters": [ + { + "param_name": "tunnel_id", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 20, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "p4_ref_action_handle": 29610186, + "p4_ref_table_handle": 42283616 + }, + { + "prec": 3, + "action_code": "SET2_8b", + "index": 11 + }, + { + "prec": 3, + "action_code": "SET1A_24b", + "index": 4, + "pool_id": 0 + } + ] + }, + { + "action_name": "linux_networking_control.pop_vlan_set_geneve_underlay_v4", + "action_handle": 24842266, + "immediate_fields": [ + { + "param_name": "tunnel_id", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 20 + } + ], + "hw_actions_list": [ + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 9, + "mod_profile": 12, + "prefetch": 1 + }, + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 0, + "parameters": [ + { + "param_name": "tunnel_id", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 20, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "p4_ref_action_handle": 26665268, + "p4_ref_table_handle": 47977422 + }, + { + "prec": 3, + "action_code": "SET2_8b", + "index": 11 + }, + { + "prec": 3, + "action_code": "SET1A_24b", + "index": 4, + "pool_id": 0 + } + ] + }, + { + "action_name": "linux_networking_control.pop_vlan_set_geneve_underlay_v6", + "action_handle": 33478945, + "immediate_fields": [ + { + "param_name": "tunnel_id", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 20 + } + ], + "hw_actions_list": [ + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 9, + "mod_profile": 13, + "prefetch": 1 + }, + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 0, + "parameters": [ + { + "param_name": "tunnel_id", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 20, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "p4_ref_action_handle": 27347188, + "p4_ref_table_handle": 47370391 + }, + { + "prec": 3, + "action_code": "SET2_8b", + "index": 11 + }, + { + "prec": 3, + "action_code": "SET1A_24b", + "index": 4, + "pool_id": 0 + } + ] + }, + { + "action_name": "linux_networking_control.add_vlan_and_fwd", + "action_handle": 24108243, + "immediate_fields": [ + { + "param_name": "vlan_ptr", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 24 + }, + { + "param_name": "port_id", + "param_handle": 1, + "dest_start": 3, + "start_bit_offset": 0, + "dest_width": 32 + } + ], + "hw_actions_list": [ + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 9, + "mod_profile": 4, + "prefetch": 1 + }, + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 0, + "parameters": [ + { + "param_name": "vlan_ptr", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 24, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "p4_ref_action_handle": 24137163, + "p4_ref_table_handle": 40312237 + }, + { + "prec": 7, + "action_code": "SET1_16b", + "encoding_grp": 4, + "encoding_port": "VSI", + "index": 2, + "parameters": [ + { + "param_name": "port_id", + "param_handle": 1, + "param_start_bit": 0, + "param_value_length": 32, + "value_start_bit": 0, + "byte_order": "HOST" + } + ] + }, + { + "prec": 7, + "action_code": "SET10_1b", + "encoding_grp": 4, + "encoding_port": "VSI", + "index": 0, + "value": 4, + "mask": 4 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "encoding_grp": 4, + "encoding_port": "VSI", + "index": 3, + "setmd_action_code": "SET_8b", + "value": 2, + "mask": 2, + "type_id": 0, + "offset": 0 + }, + { + "prec": 7, + "action_code": "SET1_16b", + "encoding_grp": 5, + "encoding_port": "PORT", + "index": 2, + "parameters": [ + { + "param_name": "port_id", + "param_handle": 1, + "param_start_bit": 0, + "param_value_length": 32, + "value_start_bit": 0, + "byte_order": "HOST" + } + ] + }, + { + "prec": 3, + "action_code": "SET2_8b", + "index": 11 + }, + { + "prec": 3, + "action_code": "SET1A_24b", + "index": 4, + "pool_id": 0 + } + ] + }, + { + "action_name": "linux_networking_control.remove_vlan_and_fwd", + "action_handle": 25690116, + "immediate_fields": [ + { + "param_name": "vlan_ptr", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 24 + }, + { + "param_name": "port_id", + "param_handle": 1, + "dest_start": 3, + "start_bit_offset": 0, + "dest_width": 32 + } + ], + "hw_actions_list": [ + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 9, + "mod_profile": 5, + "prefetch": 1 + }, + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 0, + "parameters": [ + { + "param_name": "vlan_ptr", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 24, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "p4_ref_action_handle": 25667542, + "p4_ref_table_handle": 38884256 + }, + { + "prec": 7, + "action_code": "SET1_16b", + "encoding_grp": 6, + "encoding_port": "VSI", + "index": 2, + "parameters": [ + { + "param_name": "port_id", + "param_handle": 1, + "param_start_bit": 0, + "param_value_length": 32, + "value_start_bit": 0, + "byte_order": "HOST" + } + ] + }, + { + "prec": 7, + "action_code": "SET10_1b", + "encoding_grp": 6, + "encoding_port": "VSI", + "index": 0, + "value": 4, + "mask": 4 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "encoding_grp": 6, + "encoding_port": "VSI", + "index": 3, + "setmd_action_code": "SET_8b", + "value": 2, + "mask": 2, + "type_id": 0, + "offset": 0 + }, + { + "prec": 7, + "action_code": "SET1_16b", + "encoding_grp": 7, + "encoding_port": "PORT", + "index": 2, + "parameters": [ + { + "param_name": "port_id", + "param_handle": 1, + "param_start_bit": 0, + "param_value_length": 32, + "value_start_bit": 0, + "byte_order": "HOST" + } + ] + }, + { + "prec": 3, + "action_code": "SET2_8b", + "index": 11 + }, + { + "prec": 3, + "action_code": "SET1A_24b", + "index": 4, + "pool_id": 0 + } + ] + }, + { + "action_name": "linux_networking_control.fwd_to_cp_tx", + "action_handle": 20441854, + "immediate_fields": [], + "hw_actions_list": [ + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 9, + "mod_profile": 0, + "prefetch": 0 + }, + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 64, + "mask": 112 + }, + { + "prec": 3, + "action_code": "SET2_8b", + "index": 11 + }, + { + "prec": 3, + "action_code": "SET1A_24b", + "index": 4, + "pool_id": 0 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 0, + "setmd_action_code": "SET_8b", + "value": 1, + "mask": 1, + "type_id": 4, + "offset": 0 + } + ] + } + ], + "default_action_format": [ + { + "action_name": "linux_networking_control.fwd_to_cp_tx", + "action_handle": 20441854, + "hw_actions_list": [ + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 9, + "mod_profile": 0, + "prefetch": 0 + }, + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 64, + "mask": 112 + }, + { + "prec": 3, + "action_code": "SET2_8b", + "index": 11 + }, + { + "prec": 3, + "action_code": "SET1A_24b", + "index": 4, + "pool_id": 0 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 0, + "setmd_action_code": "SET_8b", + "value": 1, + "mask": 1, + "type_id": 4, + "offset": 0 + } + ] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "TX", + "handle": 37894008, + "name": "linux_networking_control.nexthop_table", + "size": 1024, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "user_meta.cmeta.nexthop_id", + "instance_name": "user_meta.cmeta.nexthop_id", + "field_name": "user_meta.cmeta.nexthop_id", + "match_type": "exact", + "bit_width": 16, + "index": 0, + "position": 0 + }, + { + "name": "bit16_zeros", + "instance_name": "bit16_zeros", + "field_name": "bit16_zeros", + "match_type": "exact", + "bit_width": 8, + "index": 1, + "position": 2 + } + ], + "match_key_format": [ + { + "match_key_handle": 0, + "byte_order": "HOST", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 16 + }, + { + "match_key_handle": 1, + "byte_order": "HOST", + "byte_array_index": 2, + "start_bit_offset": 0, + "bit_width": 16 + } + ], + "default_action_handle": 21257015, + "max_default_actions": 4, + "actions": [ + { + "name": "linux_networking_control.set_nexthop_info_dmac", + "handle": 16795029, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "router_interface_id", + "bit_width": 16 + }, + { + "name": "egress_port", + "bit_width": 32 + }, + { + "name": "dmac_high", + "bit_width": 16 + }, + { + "name": "dmac_low", + "bit_width": 32 + } + ] + }, + { + "name": "linux_networking_control.set_nexthop_lag", + "handle": 25951413, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "lag_group_id", + "bit_width": 8 + }, + { + "name": "dmac_high", + "bit_width": 16 + }, + { + "name": "dmac_low", + "bit_width": 32 + } + ] + }, + { + "name": "linux_networking_control.drop", + "handle": 29238102, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [] + }, + { + "name": "NoAction", + "handle": 21257015, + "constant_default_action": true, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "SEM", + "id": 0, + "hw_interface": "ConfigQueue", + "profile": [ + 14 + ], + "sub_profile": 0, + "obj_id": 2, + "hash_size": 325632, + "action_format": [ + { + "action_name": "linux_networking_control.set_nexthop_info_dmac", + "action_handle": 16795029, + "immediate_fields": [ + { + "param_name": "router_interface_id", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 16 + }, + { + "param_name": "egress_port", + "param_handle": 1, + "dest_start": 2, + "start_bit_offset": 0, + "dest_width": 32 + }, + { + "param_name": "dmac_high", + "param_handle": 2, + "dest_start": 6, + "start_bit_offset": 0, + "dest_width": 16 + }, + { + "param_name": "dmac_low", + "param_handle": 3, + "dest_start": 8, + "start_bit_offset": 0, + "dest_width": 32 + } + ], + "hw_actions_list": [ + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 9, + "mod_profile": 3, + "prefetch": 0 + }, + { + "prec": 7, + "action_code": "SET1_16b", + "index": 2, + "parameters": [ + { + "param_name": "egress_port", + "param_handle": 1, + "param_start_bit": 0, + "param_value_length": 32, + "value_start_bit": 0, + "byte_order": "HOST" + } + ] + }, + { + "prec": 3, + "action_code": "SET2_8b", + "index": 11 + }, + { + "prec": 3, + "action_code": "SET1A_24b", + "index": 5, + "pool_id": 1 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 2, + "setmd_action_code": "SET_16b", + "parameters": [ + { + "param_name": "dmac_high", + "param_handle": 2, + "param_start_bit": 0, + "param_value_length": 16, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "type_id": 4, + "offset": 7 + }, + { + "prec": 0, + "action_code": "NOP", + "index": 0, + "value": 0, + "mask": 0 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 3, + "setmd_action_code": "SET_32b_AUX", + "parameters": [ + { + "param_name": "dmac_low", + "param_handle": 3, + "param_start_bit": 0, + "param_value_length": 32, + "value_start_bit": 0, + "byte_order": "HOST" + } + ] + }, + { + "prec": 7, + "action_code": "AUX_DATA", + "index": 3, + "type_id": 4, + "offset": 10 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 4, + "setmd_action_code": "SET_16b_AUX", + "parameters": [ + { + "param_name": "router_interface_id", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 16, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "mask": 255 + }, + { + "prec": 7, + "action_code": "AUX_DATA", + "index": 4, + "mask": 7, + "type_id": 5, + "offset": 5 + } + ] + }, + { + "action_name": "linux_networking_control.set_nexthop_lag", + "action_handle": 25951413, + "immediate_fields": [ + { + "param_name": "lag_group_id", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 8 + }, + { + "param_name": "dmac_high", + "param_handle": 1, + "dest_start": 1, + "start_bit_offset": 0, + "dest_width": 16 + }, + { + "param_name": "dmac_low", + "param_handle": 2, + "dest_start": 3, + "start_bit_offset": 0, + "dest_width": 32 + } + ], + "hw_actions_list": [ + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 9, + "mod_profile": 3, + "prefetch": 0 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 2, + "setmd_action_code": "SET_16b", + "parameters": [ + { + "param_name": "dmac_high", + "param_handle": 1, + "param_start_bit": 0, + "param_value_length": 16, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "type_id": 4, + "offset": 7 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 3, + "setmd_action_code": "SET_32b_AUX", + "parameters": [ + { + "param_name": "dmac_low", + "param_handle": 2, + "param_start_bit": 0, + "param_value_length": 32, + "value_start_bit": 0, + "byte_order": "HOST" + } + ] + }, + { + "prec": 7, + "action_code": "AUX_DATA", + "index": 3, + "type_id": 4, + "offset": 10 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 4, + "setmd_action_code": "SET_8b", + "parameters": [ + { + "param_name": "lag_group_id", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 8, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "mask": 255, + "type_id": 4, + "offset": 1 + } + ] + }, + { + "action_name": "linux_networking_control.drop", + "action_handle": 29238102, + "immediate_fields": [], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 1, + "mask": 1 + } + ] + }, + { + "action_name": "NoAction", + "action_handle": 21257015, + "immediate_fields": [], + "hw_actions_list": [] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "TX", + "handle": 47712712, + "name": "linux_networking_control.ecmp_nexthop_table", + "size": 1024, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "user_meta.cmeta.nexthop_id", + "instance_name": "user_meta.cmeta.nexthop_id", + "field_name": "user_meta.cmeta.nexthop_id", + "match_type": "ternary", + "bit_width": 16, + "index": 0, + "position": 0 + } + ], + "match_key_format": [ + { + "match_key_handle": 0, + "byte_order": "HOST", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 16 + } + ], + "default_action_handle": 29238102, + "actions": [ + { + "name": "linux_networking_control.ecmp_set_nexthop_info_dmac", + "handle": 27181644, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "router_interface_id", + "bit_width": 16 + }, + { + "name": "egress_port", + "bit_width": 32 + }, + { + "name": "dmac_high", + "bit_width": 16 + }, + { + "name": "dmac_low", + "bit_width": 32 + } + ] + }, + { + "name": "linux_networking_control.drop", + "handle": 29238102, + "constant_default_action": true, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "WCM", + "id": 3, + "hw_interface": "MMIO", + "profile": [ + 2 + ], + "wcm_params": { + "wcm_group": 1, + "slice_start_idx": 1, + "table_width": 16, + "entry_cnt": 1024, + "entry_idx": 0, + "act_rams": [ + 2, + 3, + 4, + 5, + 6 + ] + }, + "action_format": [ + { + "action_name": "linux_networking_control.ecmp_set_nexthop_info_dmac", + "action_handle": 27181644, + "immediate_fields": [ + { + "param_name": "router_interface_id", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 16 + }, + { + "param_name": "egress_port", + "param_handle": 1, + "dest_start": 2, + "start_bit_offset": 0, + "dest_width": 32 + }, + { + "param_name": "dmac_high", + "param_handle": 2, + "dest_start": 6, + "start_bit_offset": 0, + "dest_width": 16 + }, + { + "param_name": "dmac_low", + "param_handle": 3, + "dest_start": 8, + "start_bit_offset": 0, + "dest_width": 32 + } + ], + "hw_actions_list": [ + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 9, + "mod_profile": 3, + "prefetch": 0 + }, + { + "prec": 7, + "action_code": "SET1_16b", + "encoding_grp": 8, + "encoding_port": "VSI", + "index": 2, + "parameters": [ + { + "param_name": "egress_port", + "param_handle": 1, + "param_start_bit": 0, + "param_value_length": 32, + "value_start_bit": 0, + "byte_order": "HOST" + } + ] + }, + { + "prec": 7, + "action_code": "SET10_1b", + "encoding_grp": 8, + "encoding_port": "VSI", + "index": 0, + "value": 4, + "mask": 4 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "encoding_grp": 8, + "encoding_port": "VSI", + "index": 0, + "setmd_action_code": "SET_8b", + "value": 2, + "mask": 2, + "type_id": 0, + "offset": 0 + }, + { + "prec": 7, + "action_code": "SET1_16b", + "encoding_grp": 9, + "encoding_port": "PORT", + "index": 2, + "parameters": [ + { + "param_name": "egress_port", + "param_handle": 1, + "param_start_bit": 0, + "param_value_length": 32, + "value_start_bit": 0, + "byte_order": "HOST" + } + ] + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 1, + "setmd_action_code": "SET_16b", + "parameters": [ + { + "param_name": "dmac_high", + "param_handle": 2, + "param_start_bit": 0, + "param_value_length": 16, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "type_id": 4, + "offset": 7 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 2, + "setmd_action_code": "SET_32b_AUX", + "parameters": [ + { + "param_name": "dmac_low", + "param_handle": 3, + "param_start_bit": 0, + "param_value_length": 32, + "value_start_bit": 0, + "byte_order": "HOST" + } + ] + }, + { + "prec": 7, + "action_code": "AUX_DATA", + "index": 2, + "type_id": 4, + "offset": 10 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 3, + "setmd_action_code": "SET_16b_AUX", + "parameters": [ + { + "param_name": "router_interface_id", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 16, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "mask": 255 + }, + { + "prec": 7, + "action_code": "AUX_DATA", + "index": 3, + "mask": 7, + "type_id": 5, + "offset": 5 + } + ] + }, + { + "action_name": "linux_networking_control.drop", + "action_handle": 29238102, + "immediate_fields": [], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 1, + "mask": 1 + } + ] + } + ], + "default_action_format": [ + { + "action_name": "linux_networking_control.drop", + "action_handle": 29238102, + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 1, + "mask": 1 + } + ] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "TX", + "handle": 40757978, + "name": "linux_networking_control.tx_lag_table", + "size": 1024, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "user_meta.cmeta.lag_group_id", + "instance_name": "user_meta.cmeta.lag_group_id", + "field_name": "user_meta.cmeta.lag_group_id", + "match_type": "ternary", + "bit_width": 8, + "index": 0, + "position": 0 + }, + { + "name": "hash", + "instance_name": "hash", + "field_name": "hash", + "match_type": "ternary", + "bit_width": 3, + "index": 1, + "position": 1 + } + ], + "match_key_format": [ + { + "match_key_handle": 0, + "byte_order": "HOST", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 8 + }, + { + "match_key_handle": 1, + "byte_order": "HOST", + "byte_array_index": 1, + "start_bit_offset": 0, + "bit_width": 8 + } + ], + "default_action_handle": 29238102, + "actions": [ + { + "name": "linux_networking_control.set_egress_port", + "handle": 27998997, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "router_interface_id", + "bit_width": 16 + }, + { + "name": "egress_port", + "bit_width": 32 + } + ] + }, + { + "name": "linux_networking_control.bypass", + "handle": 24954025, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [] + }, + { + "name": "linux_networking_control.drop", + "handle": 29238102, + "constant_default_action": true, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "WCM", + "id": 3, + "hw_interface": "MMIO", + "profile": [ + 2 + ], + "wcm_params": { + "wcm_group": 0, + "slice_start_idx": 5, + "table_width": 32, + "entry_cnt": 1024, + "entry_idx": 0, + "act_rams": [ + 9, + 10, + 11, + 12 + ] + }, + "action_format": [ + { + "action_name": "linux_networking_control.set_egress_port", + "action_handle": 27998997, + "immediate_fields": [ + { + "param_name": "router_interface_id", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 16 + }, + { + "param_name": "egress_port", + "param_handle": 1, + "dest_start": 2, + "start_bit_offset": 0, + "dest_width": 32 + } + ], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET1_16b", + "encoding_grp": 10, + "encoding_port": "VSI", + "index": 2, + "parameters": [ + { + "param_name": "egress_port", + "param_handle": 1, + "param_start_bit": 0, + "param_value_length": 32, + "value_start_bit": 0, + "byte_order": "HOST" + } + ] + }, + { + "prec": 7, + "action_code": "SET10_1b", + "encoding_grp": 10, + "encoding_port": "VSI", + "index": 0, + "value": 4, + "mask": 4 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "encoding_grp": 10, + "encoding_port": "VSI", + "index": 0, + "setmd_action_code": "SET_8b", + "value": 2, + "mask": 2, + "type_id": 0, + "offset": 0 + }, + { + "prec": 7, + "action_code": "SET1_16b", + "encoding_grp": 11, + "encoding_port": "PORT", + "index": 2, + "parameters": [ + { + "param_name": "egress_port", + "param_handle": 1, + "param_start_bit": 0, + "param_value_length": 32, + "value_start_bit": 0, + "byte_order": "HOST" + } + ] + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 1, + "setmd_action_code": "SET_16b_AUX", + "parameters": [ + { + "param_name": "router_interface_id", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 16, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "mask": 255 + }, + { + "prec": 7, + "action_code": "AUX_DATA", + "index": 1, + "mask": 7, + "type_id": 5, + "offset": 5 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 2, + "setmd_action_code": "SET_8b_AUX", + "value": 192, + "mask": 192 + }, + { + "prec": 7, + "action_code": "AUX_DATA", + "index": 2, + "type_id": 0, + "offset": 27 + } + ] + }, + { + "action_name": "linux_networking_control.bypass", + "action_handle": 24954025, + "immediate_fields": [], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 0, + "setmd_action_code": "SET_8b_AUX", + "value": 192, + "mask": 192 + }, + { + "prec": 7, + "action_code": "AUX_DATA", + "index": 0, + "type_id": 0, + "offset": 27 + } + ] + }, + { + "action_name": "linux_networking_control.drop", + "action_handle": 29238102, + "immediate_fields": [], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 1, + "mask": 1 + } + ] + } + ], + "default_action_format": [ + { + "action_name": "linux_networking_control.drop", + "action_handle": 29238102, + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 1, + "mask": 1 + } + ] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "BIDIRECTIONAL", + "handle": 44444143, + "name": "linux_networking_control.rx_lag_table", + "size": 1024, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "vmeta.common.port_id", + "instance_name": "vmeta.common.port_id", + "field_name": "vmeta.common.port_id", + "match_type": "exact", + "bit_width": 2, + "index": 0, + "position": 0 + }, + { + "name": "user_meta.cmeta.lag_group_id", + "instance_name": "user_meta.cmeta.lag_group_id", + "field_name": "user_meta.cmeta.lag_group_id", + "match_type": "exact", + "bit_width": 8, + "index": 1, + "position": 1 + } + ], + "match_key_format": [ + { + "match_key_handle": 0, + "byte_order": "HOST", + "byte_array_index": 0, + "start_bit_offset": 3, + "bit_width": 16 + }, + { + "match_key_handle": 1, + "byte_order": "HOST", + "byte_array_index": 2, + "start_bit_offset": 0, + "bit_width": 16 + } + ], + "default_action_handle": 29238102, + "max_default_actions": 2, + "actions": [ + { + "name": "linux_networking_control.fwd_to_vsi", + "handle": 26092385, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "port", + "bit_width": 32 + } + ] + }, + { + "name": "linux_networking_control.drop", + "handle": 29238102, + "constant_default_action": true, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "SEM", + "id": 0, + "hw_interface": "ConfigQueue", + "profile": [ + 5 + ], + "sub_profile": 0, + "obj_id": 0, + "hash_size": 325632, + "action_format": [ + { + "action_name": "linux_networking_control.fwd_to_vsi", + "action_handle": 26092385, + "immediate_fields": [ + { + "param_name": "port", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 32 + } + ], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET1_16b", + "encoding_grp": 12, + "encoding_port": "VSI", + "index": 2, + "parameters": [ + { + "param_name": "port", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 32, + "value_start_bit": 0, + "byte_order": "HOST" + } + ] + } + ] + }, + { + "action_name": "linux_networking_control.drop", + "action_handle": 29238102, + "immediate_fields": [], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 1, + "mask": 1 + } + ] + } + ], + "default_action_format": [ + { + "action_name": "linux_networking_control.drop", + "action_handle": 29238102, + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 1, + "mask": 1 + } + ] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "TX", + "handle": 37566509, + "name": "linux_networking_control.ipv4_table", + "size": 1024, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "ipv4_table_lpm_root", + "instance_name": "ipv4_table_lpm_root", + "field_name": "ipv4_table_lpm_root", + "match_type": "exact", + "bit_width": 32, + "index": 0, + "position": 0 + }, + { + "name": "ipv4_dst_match", + "instance_name": "ipv4_dst_match", + "field_name": "ipv4_dst_match", + "match_type": "lpm", + "bit_width": 32, + "index": 1, + "position": 4 + } + ], + "match_key_format": [ + { + "match_key_handle": 0, + "byte_order": "HOST", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 32 + }, + { + "match_key_handle": 1, + "byte_order": "NETWORK", + "byte_array_index": 4, + "start_bit_offset": 0, + "bit_width": 32 + } + ], + "default_action_handle": 21257015, + "actions": [ + { + "name": "linux_networking_control.ipv4_set_nexthop_id", + "handle": 22009623, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "nexthop_id", + "bit_width": 16 + } + ] + }, + { + "name": "linux_networking_control.ecmp_hash_action", + "handle": 16874810, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "ecmp_group_id", + "bit_width": 16 + } + ] + }, + { + "name": "NoAction", + "handle": 21257015, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "LPM", + "id": 4, + "hw_interface": "MMIO", + "profile": [ + 1 + ], + "def_action_ptr": 1, + "max_prefix_len": 32, + "action_format": [ + { + "action_name": "linux_networking_control.ipv4_set_nexthop_id", + "action_handle": 22009623, + "immediate_fields": [ + { + "param_name": "nexthop_id", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 16 + } + ], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 1, + "setmd_action_code": "SET_16b", + "parameters": [ + { + "param_name": "nexthop_id", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 16, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "type_id": 4, + "offset": 1 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 2, + "setmd_action_code": "SET_8b", + "value": 32, + "mask": 32, + "type_id": 4, + "offset": 0 + } + ] + }, + { + "action_name": "linux_networking_control.ecmp_hash_action", + "action_handle": 16874810, + "immediate_fields": [ + { + "param_name": "ecmp_group_id", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 16 + } + ], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 1, + "setmd_action_code": "SET_16b", + "parameters": [ + { + "param_name": "ecmp_group_id", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 16, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "type_id": 4, + "offset": 3 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 2, + "setmd_action_code": "SET_8b", + "value": 8, + "mask": 8, + "type_id": 4, + "offset": 0 + } + ] + }, + { + "action_name": "NoAction", + "action_handle": 21257015, + "immediate_fields": [], + "hw_actions_list": [] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "TX", + "handle": 49661222, + "name": "linux_networking_control.ecmp_hash_table", + "size": 1024, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "flex", + "instance_name": "flex", + "field_name": "flex", + "match_type": "ternary", + "bit_width": 16, + "index": 0, + "position": 0 + }, + { + "name": "hash", + "instance_name": "hash", + "field_name": "hash", + "match_type": "ternary", + "bit_width": 3, + "index": 1, + "position": 2 + } + ], + "match_key_format": [ + { + "match_key_handle": 0, + "byte_order": "HOST", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 16 + }, + { + "match_key_handle": 1, + "byte_order": "HOST", + "byte_array_index": 2, + "start_bit_offset": 0, + "bit_width": 8 + } + ], + "default_action_handle": 21257015, + "actions": [ + { + "name": "linux_networking_control.set_nexthop_id", + "handle": 29883644, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "nexthop_id", + "bit_width": 16 + } + ] + }, + { + "name": "NoAction", + "handle": 21257015, + "constant_default_action": true, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "WCM", + "id": 3, + "hw_interface": "MMIO", + "profile": [ + 3 + ], + "wcm_params": { + "wcm_group": 0, + "slice_start_idx": 6, + "table_width": 32, + "entry_cnt": 1024, + "entry_idx": 0, + "act_rams": [ + 13, + 14 + ] + }, + "action_format": [ + { + "action_name": "linux_networking_control.set_nexthop_id", + "action_handle": 29883644, + "immediate_fields": [ + { + "param_name": "nexthop_id", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 16 + } + ], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 0, + "setmd_action_code": "SET_16b", + "parameters": [ + { + "param_name": "nexthop_id", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 16, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "type_id": 4, + "offset": 1 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 1, + "setmd_action_code": "SET_8b", + "value": 32, + "mask": 32, + "type_id": 4, + "offset": 0 + } + ] + }, + { + "action_name": "NoAction", + "action_handle": 21257015, + "immediate_fields": [], + "hw_actions_list": [] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "TX", + "handle": 46496254, + "name": "linux_networking_control.ipv6_table", + "size": 1024, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "ipv6_table_lpm_root", + "instance_name": "ipv6_table_lpm_root", + "field_name": "ipv6_table_lpm_root", + "match_type": "exact", + "bit_width": 32, + "index": 0, + "position": 0 + }, + { + "name": "ipv6_dst_match", + "instance_name": "ipv6_dst_match", + "field_name": "ipv6_dst_match", + "match_type": "lpm", + "bit_width": 128, + "index": 1, + "position": 4 + } + ], + "match_key_format": [ + { + "match_key_handle": 0, + "byte_order": "HOST", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 32 + }, + { + "match_key_handle": 1, + "byte_order": "NETWORK", + "byte_array_index": 4, + "start_bit_offset": 0, + "bit_width": 128 + } + ], + "default_action_handle": 21257015, + "actions": [ + { + "name": "linux_networking_control.ipv6_set_nexthop_id", + "handle": 21321477, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "nexthop_id", + "bit_width": 16 + } + ] + }, + { + "name": "linux_networking_control.ecmp_v6_hash_action", + "handle": 27000185, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "ecmp_group_id", + "bit_width": 16 + } + ] + }, + { + "name": "NoAction", + "handle": 21257015, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "LPM", + "id": 4, + "hw_interface": "MMIO", + "profile": [ + 2 + ], + "def_action_ptr": 2, + "max_prefix_len": 128, + "action_format": [ + { + "action_name": "linux_networking_control.ipv6_set_nexthop_id", + "action_handle": 21321477, + "immediate_fields": [ + { + "param_name": "nexthop_id", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 16 + } + ], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 1, + "setmd_action_code": "SET_16b", + "parameters": [ + { + "param_name": "nexthop_id", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 16, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "type_id": 4, + "offset": 1 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 2, + "setmd_action_code": "SET_8b", + "value": 32, + "mask": 32, + "type_id": 4, + "offset": 0 + } + ] + }, + { + "action_name": "linux_networking_control.ecmp_v6_hash_action", + "action_handle": 27000185, + "immediate_fields": [ + { + "param_name": "ecmp_group_id", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 16 + } + ], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 1, + "setmd_action_code": "SET_16b", + "parameters": [ + { + "param_name": "ecmp_group_id", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 16, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "type_id": 4, + "offset": 3 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 2, + "setmd_action_code": "SET_8b", + "value": 8, + "mask": 8, + "type_id": 4, + "offset": 0 + } + ] + }, + { + "action_name": "NoAction", + "action_handle": 21257015, + "immediate_fields": [], + "hw_actions_list": [] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "RX", + "handle": 40351839, + "name": "linux_networking_control.rx_source_port", + "size": 1024, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "vmeta.common.port_id", + "instance_name": "vmeta.common.port_id", + "field_name": "vmeta.common.port_id", + "match_type": "exact", + "bit_width": 2, + "index": 0, + "position": 0 + }, + { + "name": "zero_padding", + "instance_name": "zero_padding", + "field_name": "zero_padding", + "match_type": "exact", + "bit_width": 16, + "index": 1, + "position": 1 + } + ], + "match_key_format": [ + { + "match_key_handle": 0, + "byte_order": "HOST", + "byte_array_index": 0, + "start_bit_offset": 3, + "bit_width": 16 + }, + { + "match_key_handle": 1, + "byte_order": "HOST", + "byte_array_index": 2, + "start_bit_offset": 0, + "bit_width": 16 + } + ], + "default_action_handle": 32890467, + "max_default_actions": 2, + "actions": [ + { + "name": "linux_networking_control.set_source_port", + "handle": 32890467, + "constant_default_action": true, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [ + { + "name": "source_port", + "bit_width": 16 + } + ] + }, + { + "name": "linux_networking_control.drop", + "handle": 29238102, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "SEM", + "id": 0, + "hw_interface": "ConfigQueue", + "profile": [ + 3 + ], + "sub_profile": 0, + "obj_id": 0, + "hash_size": 325632, + "action_format": [ + { + "action_name": "linux_networking_control.set_source_port", + "action_handle": 32890467, + "immediate_fields": [ + { + "param_name": "source_port", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 16 + } + ], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 1, + "setmd_action_code": "SET_16b", + "parameters": [ + { + "param_name": "source_port", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 16, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "type_id": 4, + "offset": 4 + } + ] + }, + { + "action_name": "linux_networking_control.drop", + "action_handle": 29238102, + "immediate_fields": [], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 1, + "mask": 1 + } + ] + } + ], + "default_action_format": [ + { + "action_name": "linux_networking_control.set_source_port", + "action_handle": 32890467, + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 1, + "setmd_action_code": "SET_16b", + "value": 1, + "type_id": 4, + "offset": 4 + } + ] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "RX", + "handle": 49097500, + "name": "linux_networking_control.rx_ipv4_tunnel_source_port", + "size": 1024, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "ipv4_src", + "instance_name": "ipv4_src", + "field_name": "ipv4_src", + "match_type": "exact", + "bit_width": 32, + "index": 0, + "position": 0 + }, + { + "name": "vni", + "instance_name": "vni", + "field_name": "vni", + "match_type": "exact", + "bit_width": 24, + "index": 1, + "position": 4 + } + ], + "match_key_format": [ + { + "match_key_handle": 0, + "byte_order": "NETWORK", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 32 + }, + { + "match_key_handle": 1, + "byte_order": "NETWORK", + "byte_array_index": 4, + "start_bit_offset": 0, + "bit_width": 32 + } + ], + "default_action_handle": 29238102, + "max_default_actions": 2, + "actions": [ + { + "name": "linux_networking_control.set_source_port", + "handle": 32890467, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "source_port", + "bit_width": 16 + } + ] + }, + { + "name": "linux_networking_control.drop", + "handle": 29238102, + "constant_default_action": true, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "SEM", + "id": 0, + "hw_interface": "ConfigQueue", + "profile": [ + 1 + ], + "sub_profile": 0, + "obj_id": 0, + "hash_size": 325632, + "action_format": [ + { + "action_name": "linux_networking_control.set_source_port", + "action_handle": 32890467, + "immediate_fields": [ + { + "param_name": "source_port", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 16 + } + ], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 1, + "setmd_action_code": "SET_16b", + "parameters": [ + { + "param_name": "source_port", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 16, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "type_id": 4, + "offset": 4 + } + ] + }, + { + "action_name": "linux_networking_control.drop", + "action_handle": 29238102, + "immediate_fields": [], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 1, + "mask": 1 + } + ] + } + ], + "default_action_format": [ + { + "action_name": "linux_networking_control.drop", + "action_handle": 29238102, + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 1, + "mask": 1 + } + ] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "RX", + "handle": 40981078, + "name": "linux_networking_control.rx_ipv6_tunnel_source_port", + "size": 1024, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "ipv6_src", + "instance_name": "ipv6_src", + "field_name": "ipv6_src", + "match_type": "exact", + "bit_width": 128, + "index": 0, + "position": 0 + }, + { + "name": "vni", + "instance_name": "vni", + "field_name": "vni", + "match_type": "exact", + "bit_width": 24, + "index": 1, + "position": 16 + } + ], + "match_key_format": [ + { + "match_key_handle": 0, + "byte_order": "NETWORK", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 128 + }, + { + "match_key_handle": 1, + "byte_order": "NETWORK", + "byte_array_index": 16, + "start_bit_offset": 0, + "bit_width": 32 + } + ], + "default_action_handle": 29238102, + "max_default_actions": 4, + "actions": [ + { + "name": "linux_networking_control.set_source_port", + "handle": 32890467, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "source_port", + "bit_width": 16 + } + ] + }, + { + "name": "linux_networking_control.drop", + "handle": 29238102, + "constant_default_action": true, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "SEM", + "id": 0, + "hw_interface": "ConfigQueue", + "profile": [ + 2 + ], + "sub_profile": 0, + "obj_id": 2, + "hash_size": 325632, + "action_format": [ + { + "action_name": "linux_networking_control.set_source_port", + "action_handle": 32890467, + "immediate_fields": [ + { + "param_name": "source_port", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 16 + } + ], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 1, + "setmd_action_code": "SET_16b", + "parameters": [ + { + "param_name": "source_port", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 16, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "type_id": 4, + "offset": 4 + } + ] + }, + { + "action_name": "linux_networking_control.drop", + "action_handle": 29238102, + "immediate_fields": [], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 1, + "mask": 1 + } + ] + } + ], + "default_action_format": [ + { + "action_name": "linux_networking_control.drop", + "action_handle": 29238102, + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 1, + "mask": 1 + } + ] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "BIDIRECTIONAL", + "handle": 33606489, + "name": "linux_networking_control.source_port_to_bridge_map", + "size": 1024, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "user_meta.cmeta.source_port", + "instance_name": "user_meta.cmeta.source_port", + "field_name": "user_meta.cmeta.source_port", + "match_type": "ternary", + "bit_width": 16, + "index": 0, + "position": 0 + }, + { + "name": "hdrs.vlan_ext[vmeta.common.depth].hdr.vid", + "instance_name": "hdrs.vlan_ext[vmeta.common.depth].hdr.vid", + "field_name": "hdrs.vlan_ext[vmeta.common.depth].hdr.vid", + "match_type": "ternary", + "bit_width": 12, + "index": 1, + "position": 2 + } + ], + "match_key_format": [ + { + "match_key_handle": 0, + "byte_order": "HOST", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 16 + }, + { + "match_key_handle": 1, + "byte_order": "NETWORK", + "byte_array_index": 2, + "start_bit_offset": 4, + "bit_width": 16 + } + ], + "default_action_handle": 31939992, + "actions": [ + { + "name": "linux_networking_control.set_bridge_id", + "handle": 31939992, + "constant_default_action": true, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [ + { + "name": "bridge_id", + "bit_width": 8 + } + ] + }, + { + "name": "linux_networking_control.drop", + "handle": 29238102, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "WCM", + "id": 3, + "hw_interface": "MMIO", + "profile": [ + 1 + ], + "wcm_params": { + "wcm_group": 1, + "slice_start_idx": 0, + "table_width": 32, + "entry_cnt": 1024, + "entry_idx": 0, + "act_rams": [ + 0, + 1 + ] + }, + "action_format": [ + { + "action_name": "linux_networking_control.set_bridge_id", + "action_handle": 31939992, + "immediate_fields": [ + { + "param_name": "bridge_id", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 8 + } + ], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 0, + "setmd_action_code": "SET_8b", + "parameters": [ + { + "param_name": "bridge_id", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 8, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "mask": 255, + "type_id": 5, + "offset": 4 + } + ] + }, + { + "action_name": "linux_networking_control.drop", + "action_handle": 29238102, + "immediate_fields": [], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 1, + "mask": 1 + } + ] + } + ], + "default_action_format": [ + { + "action_name": "linux_networking_control.set_bridge_id", + "action_handle": 31939992, + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 0, + "setmd_action_code": "SET_8b", + "value": 77, + "mask": 255, + "type_id": 5, + "offset": 4 + } + ] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "BIDIRECTIONAL", + "handle": 46342225, + "name": "linux_networking_control.l2_fwd_smac_table", + "size": 1024, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "hdrs.mac[vmeta.common.depth].sa", + "instance_name": "hdrs.mac[vmeta.common.depth].sa", + "field_name": "hdrs.mac[vmeta.common.depth].sa", + "match_type": "exact", + "bit_width": 48, + "index": 0, + "position": 0 + }, + { + "name": "user_meta.pmeta.bridge_id", + "instance_name": "user_meta.pmeta.bridge_id", + "field_name": "user_meta.pmeta.bridge_id", + "match_type": "exact", + "bit_width": 8, + "index": 1, + "position": 6 + } + ], + "match_key_format": [ + { + "match_key_handle": 0, + "byte_order": "NETWORK", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 48 + }, + { + "match_key_handle": 1, + "byte_order": "HOST", + "byte_array_index": 6, + "start_bit_offset": 0, + "bit_width": 16 + } + ], + "default_action_handle": 21283156, + "actions": [ + { + "name": "NoAction", + "handle": 21257015, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [] + }, + { + "name": "linux_networking_control.fwd_to_cp", + "handle": 21283156, + "constant_default_action": true, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "LEM", + "id": 2, + "hw_interface": "ConfigQueue", + "profile": [ + 9 + ], + "hash_size": 325632, + "action_format": [ + { + "action_name": "NoAction", + "action_handle": 21257015, + "immediate_fields": [], + "hw_actions_list": [] + }, + { + "action_name": "linux_networking_control.fwd_to_cp", + "action_handle": 21283156, + "immediate_fields": [], + "hw_actions_list": [ + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 9, + "mod_profile": 0, + "prefetch": 0 + }, + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 64, + "mask": 112 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 0, + "setmd_action_code": "SET_8b", + "value": 1, + "mask": 1, + "type_id": 4, + "offset": 0 + } + ] + } + ], + "default_action_format": [ + { + "action_name": "linux_networking_control.fwd_to_cp", + "action_handle": 21283156, + "hw_actions_list": [ + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 9, + "mod_profile": 0, + "prefetch": 0 + }, + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 64, + "mask": 112 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 0, + "setmd_action_code": "SET_8b", + "value": 1, + "mask": 1, + "type_id": 4, + "offset": 0 + } + ] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "TX", + "handle": 42508227, + "name": "linux_networking_control.tx_acc_vsi", + "size": 1024, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "vmeta.common.vsi", + "instance_name": "vmeta.common.vsi", + "field_name": "vmeta.common.vsi", + "match_type": "exact", + "bit_width": 11, + "index": 0, + "position": 0 + }, + { + "name": "zero_padding", + "instance_name": "zero_padding", + "field_name": "zero_padding", + "match_type": "exact", + "bit_width": 16, + "index": 1, + "position": 2 + } + ], + "match_key_format": [ + { + "match_key_handle": 0, + "byte_order": "HOST", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 16 + }, + { + "match_key_handle": 1, + "byte_order": "HOST", + "byte_array_index": 2, + "start_bit_offset": 0, + "bit_width": 16 + } + ], + "default_action_handle": 31624713, + "max_default_actions": 4, + "actions": [ + { + "name": "linux_networking_control.l2_fwd_and_bypass_bridge", + "handle": 31624713, + "constant_default_action": true, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [ + { + "name": "port", + "bit_width": 32 + } + ] + }, + { + "name": "linux_networking_control.drop", + "handle": 29238102, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "SEM", + "id": 0, + "hw_interface": "ConfigQueue", + "profile": [ + 10 + ], + "sub_profile": 0, + "obj_id": 2, + "hash_size": 325632, + "action_format": [ + { + "action_name": "linux_networking_control.l2_fwd_and_bypass_bridge", + "action_handle": 31624713, + "immediate_fields": [ + { + "param_name": "port", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 32 + } + ], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET1_16b", + "index": 2, + "parameters": [ + { + "param_name": "port", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 32, + "value_start_bit": 0, + "byte_order": "HOST" + } + ] + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 0, + "setmd_action_code": "SET_8b", + "value": 16, + "mask": 16, + "type_id": 5, + "offset": 3 + } + ] + }, + { + "action_name": "linux_networking_control.drop", + "action_handle": 29238102, + "immediate_fields": [], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 1, + "mask": 1 + } + ] + } + ], + "default_action_format": [ + { + "action_name": "linux_networking_control.l2_fwd_and_bypass_bridge", + "action_handle": 31624713, + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET1_16b", + "index": 2, + "value": 1, + "type": "SINGLETON_PORT" + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 0, + "setmd_action_code": "SET_8b", + "value": 16, + "mask": 16, + "type_id": 5, + "offset": 3 + } + ] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "TX", + "handle": 39041593, + "name": "linux_networking_control.tx_source_port", + "size": 1024, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "vmeta.common.vsi", + "instance_name": "vmeta.common.vsi", + "field_name": "vmeta.common.vsi", + "match_type": "ternary", + "bit_width": 11, + "index": 0, + "position": 0 + } + ], + "match_key_format": [ + { + "match_key_handle": 0, + "byte_order": "HOST", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 16 + } + ], + "default_action_handle": 29238102, + "actions": [ + { + "name": "linux_networking_control.set_source_port", + "handle": 32890467, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "source_port", + "bit_width": 16 + } + ] + }, + { + "name": "linux_networking_control.drop", + "handle": 29238102, + "constant_default_action": true, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "WCM", + "id": 3, + "hw_interface": "MMIO", + "profile": [ + 1 + ], + "wcm_params": { + "wcm_group": 0, + "slice_start_idx": 4, + "table_width": 16, + "entry_cnt": 1024, + "entry_idx": 0, + "act_rams": [ + 8 + ] + }, + "action_format": [ + { + "action_name": "linux_networking_control.set_source_port", + "action_handle": 32890467, + "immediate_fields": [ + { + "param_name": "source_port", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 16 + } + ], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 0, + "setmd_action_code": "SET_16b", + "parameters": [ + { + "param_name": "source_port", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 16, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "type_id": 4, + "offset": 4 + } + ] + }, + { + "action_name": "linux_networking_control.drop", + "action_handle": 29238102, + "immediate_fields": [], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 1, + "mask": 1 + } + ] + } + ], + "default_action_format": [ + { + "action_name": "linux_networking_control.drop", + "action_handle": 29238102, + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 1, + "mask": 1 + } + ] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "TX", + "handle": 43337754, + "name": "linux_networking_control.l2_to_tunnel_v4", + "size": 1024, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "hdrs.mac[vmeta.common.depth].da", + "instance_name": "hdrs.mac[vmeta.common.depth].da", + "field_name": "hdrs.mac[vmeta.common.depth].da", + "match_type": "exact", + "bit_width": 48, + "index": 0, + "position": 0 + } + ], + "match_key_format": [ + { + "match_key_handle": 0, + "byte_order": "NETWORK", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 48 + } + ], + "default_action_handle": 33275382, + "max_default_actions": 4, + "actions": [ + { + "name": "linux_networking_control.set_tunnel_v4", + "handle": 23805991, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "dst_addr", + "bit_width": 32 + } + ] + }, + { + "name": "linux_networking_control.drop", + "handle": 29238102, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [] + }, + { + "name": "linux_networking_control.do_recirculate", + "handle": 33275382, + "constant_default_action": true, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "SEM", + "id": 0, + "hw_interface": "ConfigQueue", + "profile": [ + 8 + ], + "sub_profile": 0, + "obj_id": 2, + "hash_size": 325632, + "action_format": [ + { + "action_name": "linux_networking_control.set_tunnel_v4", + "action_handle": 23805991, + "immediate_fields": [ + { + "param_name": "dst_addr", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 32 + } + ], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 64, + "mask": 112 + }, + { + "prec": 0, + "action_code": "NOP", + "index": 0, + "value": 0, + "mask": 0 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 0, + "setmd_action_code": "SET_32b_AUX", + "parameters": [ + { + "param_name": "dst_addr", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 32, + "value_start_bit": 0, + "byte_order": "NETWORK" + } + ] + }, + { + "prec": 7, + "action_code": "AUX_DATA", + "index": 0, + "type_id": 4, + "offset": 28 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 2, + "setmd_action_code": "SET_8b", + "value": 2, + "mask": 2, + "type_id": 4, + "offset": 0 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 1, + "setmd_action_code": "SET_8b", + "value": 4, + "mask": 7, + "type_id": 4, + "offset": 4 + } + ] + }, + { + "action_name": "linux_networking_control.drop", + "action_handle": 29238102, + "immediate_fields": [], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 1, + "mask": 1 + } + ] + }, + { + "action_name": "linux_networking_control.do_recirculate", + "action_handle": 33275382, + "immediate_fields": [], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 64, + "mask": 112 + } + ] + } + ], + "default_action_format": [ + { + "action_name": "linux_networking_control.do_recirculate", + "action_handle": 33275382, + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 64, + "mask": 112 + } + ] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "TX", + "handle": 36796227, + "name": "linux_networking_control.l2_to_tunnel_v6", + "size": 1024, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "hdrs.mac[vmeta.common.depth].da", + "instance_name": "hdrs.mac[vmeta.common.depth].da", + "field_name": "hdrs.mac[vmeta.common.depth].da", + "match_type": "exact", + "bit_width": 48, + "index": 0, + "position": 0 + } + ], + "match_key_format": [ + { + "match_key_handle": 0, + "byte_order": "NETWORK", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 48 + } + ], + "default_action_handle": 33275382, + "max_default_actions": 4, + "actions": [ + { + "name": "linux_networking_control.set_tunnel_v6", + "handle": 23953453, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "ipv6_1", + "bit_width": 32 + }, + { + "name": "ipv6_2", + "bit_width": 32 + }, + { + "name": "ipv6_3", + "bit_width": 32 + }, + { + "name": "ipv6_4", + "bit_width": 32 + } + ] + }, + { + "name": "linux_networking_control.do_recirculate", + "handle": 33275382, + "constant_default_action": true, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + }, + { + "name": "linux_networking_control.drop", + "handle": 29238102, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "SEM", + "id": 0, + "hw_interface": "ConfigQueue", + "profile": [ + 9 + ], + "sub_profile": 0, + "obj_id": 2, + "hash_size": 325632, + "action_format": [ + { + "action_name": "linux_networking_control.set_tunnel_v6", + "action_handle": 23953453, + "immediate_fields": [ + { + "param_name": "ipv6_1", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 32 + }, + { + "param_name": "ipv6_2", + "param_handle": 1, + "dest_start": 4, + "start_bit_offset": 0, + "dest_width": 32 + }, + { + "param_name": "ipv6_3", + "param_handle": 2, + "dest_start": 8, + "start_bit_offset": 0, + "dest_width": 32 + }, + { + "param_name": "ipv6_4", + "param_handle": 3, + "dest_start": 12, + "start_bit_offset": 0, + "dest_width": 32 + } + ], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 64, + "mask": 112 + }, + { + "prec": 0, + "action_code": "NOP", + "index": 0, + "value": 0, + "mask": 0 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 0, + "setmd_action_code": "SET_32b_AUX", + "parameters": [ + { + "param_name": "ipv6_4", + "param_handle": 3, + "param_start_bit": 0, + "param_value_length": 32, + "value_start_bit": 0, + "byte_order": "NETWORK" + } + ] + }, + { + "prec": 7, + "action_code": "AUX_DATA", + "index": 0, + "type_id": 4, + "offset": 28 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 1, + "setmd_action_code": "SET_32b_AUX", + "parameters": [ + { + "param_name": "ipv6_3", + "param_handle": 2, + "param_start_bit": 0, + "param_value_length": 32, + "value_start_bit": 0, + "byte_order": "NETWORK" + } + ] + }, + { + "prec": 7, + "action_code": "AUX_DATA", + "index": 1, + "type_id": 4, + "offset": 24 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 2, + "setmd_action_code": "SET_32b_AUX", + "parameters": [ + { + "param_name": "ipv6_2", + "param_handle": 1, + "param_start_bit": 0, + "param_value_length": 32, + "value_start_bit": 0, + "byte_order": "NETWORK" + } + ] + }, + { + "prec": 7, + "action_code": "AUX_DATA", + "index": 2, + "type_id": 4, + "offset": 20 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 3, + "setmd_action_code": "SET_32b_AUX", + "parameters": [ + { + "param_name": "ipv6_1", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 32, + "value_start_bit": 0, + "byte_order": "NETWORK" + } + ] + }, + { + "prec": 7, + "action_code": "AUX_DATA", + "index": 3, + "type_id": 4, + "offset": 16 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 4, + "setmd_action_code": "SET_8b", + "value": 4, + "mask": 4, + "type_id": 4, + "offset": 0 + } + ] + }, + { + "action_name": "linux_networking_control.do_recirculate", + "action_handle": 33275382, + "immediate_fields": [], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 64, + "mask": 112 + } + ] + }, + { + "action_name": "linux_networking_control.drop", + "action_handle": 29238102, + "immediate_fields": [], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 1, + "mask": 1 + } + ] + } + ], + "default_action_format": [ + { + "action_name": "linux_networking_control.do_recirculate", + "action_handle": 33275382, + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 64, + "mask": 112 + } + ] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "RX", + "handle": 38721082, + "name": "linux_networking_control.rx_phy_port_to_pr_map", + "size": 1024, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "vmeta.common.port_id", + "instance_name": "vmeta.common.port_id", + "field_name": "vmeta.common.port_id", + "match_type": "exact", + "bit_width": 2, + "index": 0, + "position": 0 + }, + { + "name": "zero_padding", + "instance_name": "zero_padding", + "field_name": "zero_padding", + "match_type": "exact", + "bit_width": 16, + "index": 1, + "position": 1 + } + ], + "match_key_format": [ + { + "match_key_handle": 0, + "byte_order": "HOST", + "byte_array_index": 0, + "start_bit_offset": 3, + "bit_width": 16 + }, + { + "match_key_handle": 1, + "byte_order": "HOST", + "byte_array_index": 2, + "start_bit_offset": 0, + "bit_width": 16 + } + ], + "default_action_handle": 26092385, + "max_default_actions": 2, + "actions": [ + { + "name": "linux_networking_control.fwd_to_vsi", + "handle": 26092385, + "constant_default_action": true, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [ + { + "name": "port", + "bit_width": 32 + } + ] + }, + { + "name": "linux_networking_control.drop", + "handle": 29238102, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "SEM", + "id": 0, + "hw_interface": "ConfigQueue", + "profile": [ + 11 + ], + "sub_profile": 0, + "obj_id": 0, + "hash_size": 325632, + "action_format": [ + { + "action_name": "linux_networking_control.fwd_to_vsi", + "action_handle": 26092385, + "immediate_fields": [ + { + "param_name": "port", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 32 + } + ], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET1_16b", + "encoding_grp": 13, + "encoding_port": "VSI", + "index": 2, + "parameters": [ + { + "param_name": "port", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 32, + "value_start_bit": 0, + "byte_order": "HOST" + } + ] + } + ] + }, + { + "action_name": "linux_networking_control.drop", + "action_handle": 29238102, + "immediate_fields": [], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 1, + "mask": 1 + } + ] + } + ], + "default_action_format": [ + { + "action_name": "linux_networking_control.fwd_to_vsi", + "action_handle": 26092385, + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET1_16b", + "encoding_grp": 16, + "encoding_port": "VSI", + "index": 2, + "value": 28, + "type": "SINGLETON_VSI" + } + ] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "BIDIRECTIONAL", + "handle": 35934350, + "name": "linux_networking_control.source_port_to_pr_map", + "size": 1024, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "user_meta.cmeta.source_port", + "instance_name": "user_meta.cmeta.source_port", + "field_name": "user_meta.cmeta.source_port", + "match_type": "exact", + "bit_width": 16, + "index": 0, + "position": 0 + }, + { + "name": "zero_padding", + "instance_name": "zero_padding", + "field_name": "zero_padding", + "match_type": "exact", + "bit_width": 8, + "index": 1, + "position": 2 + } + ], + "match_key_format": [ + { + "match_key_handle": 0, + "byte_order": "HOST", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 16 + }, + { + "match_key_handle": 1, + "byte_order": "HOST", + "byte_array_index": 2, + "start_bit_offset": 0, + "bit_width": 16 + } + ], + "default_action_handle": 26092385, + "max_default_actions": 4, + "actions": [ + { + "name": "linux_networking_control.fwd_to_vsi", + "handle": 26092385, + "constant_default_action": true, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [ + { + "name": "port", + "bit_width": 32 + } + ] + }, + { + "name": "linux_networking_control.drop", + "handle": 29238102, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "SEM", + "id": 0, + "hw_interface": "ConfigQueue", + "profile": [ + 6 + ], + "sub_profile": 0, + "obj_id": 1, + "hash_size": 325632, + "action_format": [ + { + "action_name": "linux_networking_control.fwd_to_vsi", + "action_handle": 26092385, + "immediate_fields": [ + { + "param_name": "port", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 32 + } + ], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET1_16b", + "encoding_grp": 14, + "encoding_port": "VSI", + "index": 2, + "parameters": [ + { + "param_name": "port", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 32, + "value_start_bit": 0, + "byte_order": "HOST" + } + ] + } + ] + }, + { + "action_name": "linux_networking_control.drop", + "action_handle": 29238102, + "immediate_fields": [], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 1, + "mask": 1 + } + ] + } + ], + "default_action_format": [ + { + "action_name": "linux_networking_control.fwd_to_vsi", + "action_handle": 26092385, + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET1_16b", + "encoding_grp": 17, + "encoding_port": "VSI", + "index": 2, + "value": 28, + "type": "SINGLETON_VSI" + } + ] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "RX", + "handle": 45509113, + "name": "linux_networking_control.vsi_to_vsi_loopback", + "size": 1024, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "vmeta.common.vsi", + "instance_name": "vmeta.common.vsi", + "field_name": "vmeta.common.vsi", + "match_type": "exact", + "bit_width": 11, + "index": 0, + "position": 0 + }, + { + "name": "target_vsi", + "instance_name": "target_vsi", + "field_name": "target_vsi", + "match_type": "exact", + "bit_width": 11, + "index": 1, + "position": 2 + } + ], + "match_key_format": [ + { + "match_key_handle": 0, + "byte_order": "HOST", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 16 + }, + { + "match_key_handle": 1, + "byte_order": "HOST", + "byte_array_index": 2, + "start_bit_offset": 1, + "bit_width": 16 + } + ], + "default_action_handle": 29238102, + "max_default_actions": 2, + "actions": [ + { + "name": "linux_networking_control.fwd_to_vsi", + "handle": 26092385, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "port", + "bit_width": 32 + } + ] + }, + { + "name": "linux_networking_control.drop", + "handle": 29238102, + "constant_default_action": true, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "SEM", + "id": 0, + "hw_interface": "ConfigQueue", + "profile": [ + 4 + ], + "sub_profile": 0, + "obj_id": 0, + "hash_size": 325632, + "action_format": [ + { + "action_name": "linux_networking_control.fwd_to_vsi", + "action_handle": 26092385, + "immediate_fields": [ + { + "param_name": "port", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 32 + } + ], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET1_16b", + "encoding_grp": 15, + "encoding_port": "VSI", + "index": 2, + "parameters": [ + { + "param_name": "port", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 32, + "value_start_bit": 0, + "byte_order": "HOST" + } + ] + } + ] + }, + { + "action_name": "linux_networking_control.drop", + "action_handle": 29238102, + "immediate_fields": [], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 1, + "mask": 1 + } + ] + } + ], + "default_action_format": [ + { + "action_name": "linux_networking_control.drop", + "action_handle": 29238102, + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 1, + "mask": 1 + } + ] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "RX", + "handle": 44641644, + "name": "linux_networking_control.hash_ipv4_tcp", + "size": 1024, + "isDefaultSize": true, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "hdrs.ipv4[vmeta.common.depth].src_ip", + "instance_name": "hdrs.ipv4[vmeta.common.depth].src_ip", + "field_name": "hdrs.ipv4[vmeta.common.depth].src_ip", + "match_type": "selector", + "bit_width": 32, + "index": 0, + "position": 0 + }, + { + "name": "hdrs.ipv4[vmeta.common.depth].dst_ip", + "instance_name": "hdrs.ipv4[vmeta.common.depth].dst_ip", + "field_name": "hdrs.ipv4[vmeta.common.depth].dst_ip", + "match_type": "selector", + "bit_width": 32, + "index": 1, + "position": 4 + }, + { + "name": "hdrs.tcp.sport", + "instance_name": "hdrs.tcp", + "field_name": "sport", + "match_type": "selector", + "bit_width": 16, + "index": 2, + "position": 8 + }, + { + "name": "hdrs.tcp.dport", + "instance_name": "hdrs.tcp", + "field_name": "dport", + "match_type": "selector", + "bit_width": 16, + "index": 3, + "position": 10 + } + ], + "match_key_format": [ + { + "match_key_handle": 0, + "byte_order": "NETWORK", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 32 + }, + { + "match_key_handle": 1, + "byte_order": "NETWORK", + "byte_array_index": 4, + "start_bit_offset": 0, + "bit_width": 32 + }, + { + "match_key_handle": 2, + "byte_order": "NETWORK", + "byte_array_index": 8, + "start_bit_offset": 0, + "bit_width": 16 + }, + { + "match_key_handle": 3, + "byte_order": "NETWORK", + "byte_array_index": 10, + "start_bit_offset": 0, + "bit_width": 16 + } + ], + "default_action_handle": 21257015, + "actions": [ + { + "name": "NoAction", + "handle": 21257015, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "HASH", + "id": 5, + "hw_interface": "MMIO", + "profile": [ + 1 + ], + "action_format": [ + { + "action_name": "NoAction", + "action_handle": 21257015, + "immediate_fields": [], + "hw_actions_list": [] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "RX", + "handle": 46678878, + "name": "linux_networking_control.hash_ipv4_udp", + "size": 1024, + "isDefaultSize": true, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "hdrs.ipv4[vmeta.common.depth].src_ip", + "instance_name": "hdrs.ipv4[vmeta.common.depth].src_ip", + "field_name": "hdrs.ipv4[vmeta.common.depth].src_ip", + "match_type": "selector", + "bit_width": 32, + "index": 0, + "position": 0 + }, + { + "name": "hdrs.ipv4[vmeta.common.depth].dst_ip", + "instance_name": "hdrs.ipv4[vmeta.common.depth].dst_ip", + "field_name": "hdrs.ipv4[vmeta.common.depth].dst_ip", + "match_type": "selector", + "bit_width": 32, + "index": 1, + "position": 4 + }, + { + "name": "hdrs.udp[vmeta.common.depth].sport", + "instance_name": "hdrs.udp[vmeta.common.depth].sport", + "field_name": "hdrs.udp[vmeta.common.depth].sport", + "match_type": "selector", + "bit_width": 16, + "index": 2, + "position": 8 + }, + { + "name": "hdrs.udp[vmeta.common.depth].dport", + "instance_name": "hdrs.udp[vmeta.common.depth].dport", + "field_name": "hdrs.udp[vmeta.common.depth].dport", + "match_type": "selector", + "bit_width": 16, + "index": 3, + "position": 10 + } + ], + "match_key_format": [ + { + "match_key_handle": 0, + "byte_order": "NETWORK", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 32 + }, + { + "match_key_handle": 1, + "byte_order": "NETWORK", + "byte_array_index": 4, + "start_bit_offset": 0, + "bit_width": 32 + }, + { + "match_key_handle": 2, + "byte_order": "NETWORK", + "byte_array_index": 8, + "start_bit_offset": 0, + "bit_width": 16 + }, + { + "match_key_handle": 3, + "byte_order": "NETWORK", + "byte_array_index": 10, + "start_bit_offset": 0, + "bit_width": 16 + } + ], + "default_action_handle": 21257015, + "actions": [ + { + "name": "NoAction", + "handle": 21257015, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "HASH", + "id": 5, + "hw_interface": "MMIO", + "profile": [ + 2 + ], + "action_format": [ + { + "action_name": "NoAction", + "action_handle": 21257015, + "immediate_fields": [], + "hw_actions_list": [] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "RX", + "handle": 45972289, + "name": "linux_networking_control.hash_ipv4", + "size": 1024, + "isDefaultSize": true, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "hdrs.ipv4[vmeta.common.depth].src_ip", + "instance_name": "hdrs.ipv4[vmeta.common.depth].src_ip", + "field_name": "hdrs.ipv4[vmeta.common.depth].src_ip", + "match_type": "selector", + "bit_width": 32, + "index": 0, + "position": 0 + }, + { + "name": "hdrs.ipv4[vmeta.common.depth].dst_ip", + "instance_name": "hdrs.ipv4[vmeta.common.depth].dst_ip", + "field_name": "hdrs.ipv4[vmeta.common.depth].dst_ip", + "match_type": "selector", + "bit_width": 32, + "index": 1, + "position": 4 + } + ], + "match_key_format": [ + { + "match_key_handle": 0, + "byte_order": "NETWORK", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 32 + }, + { + "match_key_handle": 1, + "byte_order": "NETWORK", + "byte_array_index": 4, + "start_bit_offset": 0, + "bit_width": 32 + } + ], + "default_action_handle": 21257015, + "actions": [ + { + "name": "NoAction", + "handle": 21257015, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "HASH", + "id": 5, + "hw_interface": "MMIO", + "profile": [ + 3 + ], + "action_format": [ + { + "action_name": "NoAction", + "action_handle": 21257015, + "immediate_fields": [], + "hw_actions_list": [] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "RX", + "handle": 33896331, + "name": "linux_networking_control.hash_l2", + "size": 1024, + "isDefaultSize": true, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "hdrs.mac[vmeta.common.depth].sa", + "instance_name": "hdrs.mac[vmeta.common.depth].sa", + "field_name": "hdrs.mac[vmeta.common.depth].sa", + "match_type": "selector", + "bit_width": 48, + "index": 0, + "position": 0 + }, + { + "name": "hdrs.mac[vmeta.common.depth].da", + "instance_name": "hdrs.mac[vmeta.common.depth].da", + "field_name": "hdrs.mac[vmeta.common.depth].da", + "match_type": "selector", + "bit_width": 48, + "index": 1, + "position": 6 + } + ], + "default_action_handle": 21257015, + "actions": [ + { + "name": "NoAction", + "handle": 21257015, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "HASH", + "id": 5, + "hw_interface": "MMIO", + "profile": [ + 10 + ], + "action_format": [ + { + "action_name": "NoAction", + "action_handle": 21257015, + "immediate_fields": [], + "hw_actions_list": [] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "RX", + "handle": 46852435, + "name": "linux_networking_control.hash_ipv6_tcp", + "size": 1024, + "isDefaultSize": true, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "hdrs.ipv6[vmeta.common.depth].src_ip", + "instance_name": "hdrs.ipv6[vmeta.common.depth].src_ip", + "field_name": "hdrs.ipv6[vmeta.common.depth].src_ip", + "match_type": "selector", + "bit_width": 128, + "index": 0, + "position": 0 + }, + { + "name": "hdrs.ipv6[vmeta.common.depth].dst_ip", + "instance_name": "hdrs.ipv6[vmeta.common.depth].dst_ip", + "field_name": "hdrs.ipv6[vmeta.common.depth].dst_ip", + "match_type": "selector", + "bit_width": 128, + "index": 1, + "position": 16 + }, + { + "name": "hdrs.tcp.sport", + "instance_name": "hdrs.tcp", + "field_name": "sport", + "match_type": "selector", + "bit_width": 16, + "index": 2, + "position": 32 + }, + { + "name": "hdrs.tcp.dport", + "instance_name": "hdrs.tcp", + "field_name": "dport", + "match_type": "selector", + "bit_width": 16, + "index": 3, + "position": 34 + } + ], + "match_key_format": [ + { + "match_key_handle": 0, + "byte_order": "NETWORK", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 128 + }, + { + "match_key_handle": 1, + "byte_order": "NETWORK", + "byte_array_index": 16, + "start_bit_offset": 0, + "bit_width": 128 + }, + { + "match_key_handle": 2, + "byte_order": "NETWORK", + "byte_array_index": 32, + "start_bit_offset": 0, + "bit_width": 16 + }, + { + "match_key_handle": 3, + "byte_order": "NETWORK", + "byte_array_index": 34, + "start_bit_offset": 0, + "bit_width": 16 + } + ], + "default_action_handle": 21257015, + "actions": [ + { + "name": "NoAction", + "handle": 21257015, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "HASH", + "id": 5, + "hw_interface": "MMIO", + "profile": [ + 4 + ], + "action_format": [ + { + "action_name": "NoAction", + "action_handle": 21257015, + "immediate_fields": [], + "hw_actions_list": [] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "RX", + "handle": 46359163, + "name": "linux_networking_control.hash_ipv6_udp", + "size": 1024, + "isDefaultSize": true, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "hdrs.ipv6[vmeta.common.depth].src_ip", + "instance_name": "hdrs.ipv6[vmeta.common.depth].src_ip", + "field_name": "hdrs.ipv6[vmeta.common.depth].src_ip", + "match_type": "selector", + "bit_width": 128, + "index": 0, + "position": 0 + }, + { + "name": "hdrs.ipv6[vmeta.common.depth].dst_ip", + "instance_name": "hdrs.ipv6[vmeta.common.depth].dst_ip", + "field_name": "hdrs.ipv6[vmeta.common.depth].dst_ip", + "match_type": "selector", + "bit_width": 128, + "index": 1, + "position": 16 + }, + { + "name": "hdrs.udp[vmeta.common.depth].sport", + "instance_name": "hdrs.udp[vmeta.common.depth].sport", + "field_name": "hdrs.udp[vmeta.common.depth].sport", + "match_type": "selector", + "bit_width": 16, + "index": 2, + "position": 32 + }, + { + "name": "hdrs.udp[vmeta.common.depth].dport", + "instance_name": "hdrs.udp[vmeta.common.depth].dport", + "field_name": "hdrs.udp[vmeta.common.depth].dport", + "match_type": "selector", + "bit_width": 16, + "index": 3, + "position": 34 + } + ], + "match_key_format": [ + { + "match_key_handle": 0, + "byte_order": "NETWORK", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 128 + }, + { + "match_key_handle": 1, + "byte_order": "NETWORK", + "byte_array_index": 16, + "start_bit_offset": 0, + "bit_width": 128 + }, + { + "match_key_handle": 2, + "byte_order": "NETWORK", + "byte_array_index": 32, + "start_bit_offset": 0, + "bit_width": 16 + }, + { + "match_key_handle": 3, + "byte_order": "NETWORK", + "byte_array_index": 34, + "start_bit_offset": 0, + "bit_width": 16 + } + ], + "default_action_handle": 21257015, + "actions": [ + { + "name": "NoAction", + "handle": 21257015, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "HASH", + "id": 5, + "hw_interface": "MMIO", + "profile": [ + 5 + ], + "action_format": [ + { + "action_name": "NoAction", + "action_handle": 21257015, + "immediate_fields": [], + "hw_actions_list": [] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "RX", + "handle": 34506208, + "name": "linux_networking_control.hash_ipv6", + "size": 1024, + "isDefaultSize": true, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "hdrs.ipv6[vmeta.common.depth].src_ip", + "instance_name": "hdrs.ipv6[vmeta.common.depth].src_ip", + "field_name": "hdrs.ipv6[vmeta.common.depth].src_ip", + "match_type": "selector", + "bit_width": 128, + "index": 0, + "position": 0 + }, + { + "name": "hdrs.ipv6[vmeta.common.depth].dst_ip", + "instance_name": "hdrs.ipv6[vmeta.common.depth].dst_ip", + "field_name": "hdrs.ipv6[vmeta.common.depth].dst_ip", + "match_type": "selector", + "bit_width": 128, + "index": 1, + "position": 16 + } + ], + "default_action_handle": 21257015, + "actions": [ + { + "name": "NoAction", + "handle": 21257015, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "HASH", + "id": 5, + "hw_interface": "MMIO", + "profile": [ + 6 + ], + "action_format": [ + { + "action_name": "NoAction", + "action_handle": 21257015, + "immediate_fields": [], + "hw_actions_list": [] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "TX", + "handle": 49349790, + "name": "linux_networking_control.ipsec_tunnel_table", + "size": 1024, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "vmeta.common.saidx", + "instance_name": "vmeta.common.saidx", + "field_name": "vmeta.common.saidx", + "match_type": "exact", + "bit_width": 24, + "index": 0, + "position": 0 + }, + { + "name": "bit16_zeros", + "instance_name": "bit16_zeros", + "field_name": "bit16_zeros", + "match_type": "exact", + "bit_width": 13, + "index": 1, + "position": 3 + } + ], + "match_key_format": [ + { + "match_key_handle": 0, + "byte_order": "HOST", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 32 + }, + { + "match_key_handle": 1, + "byte_order": "HOST", + "byte_array_index": 4, + "start_bit_offset": 3, + "bit_width": 16 + } + ], + "default_action_handle": 21257015, + "actions": [ + { + "name": "linux_networking_control.set_ipsec_tunnel", + "handle": 26423957, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "tunnel_id", + "bit_width": 24 + } + ] + }, + { + "name": "NoAction", + "handle": 21257015, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "LEM", + "id": 2, + "hw_interface": "ConfigQueue", + "profile": [ + 11 + ], + "hash_size": 325632, + "action_format": [ + { + "action_name": "linux_networking_control.set_ipsec_tunnel", + "action_handle": 26423957, + "immediate_fields": [ + { + "param_name": "tunnel_id", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 24 + } + ], + "hw_actions_list": [ + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 9, + "mod_profile": 16, + "prefetch": 1 + }, + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 0, + "parameters": [ + { + "param_name": "tunnel_id", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 24, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "p4_ref_action_handle": 30081157, + "p4_ref_table_handle": 37326952 + } + ] + }, + { + "action_name": "NoAction", + "action_handle": 21257015, + "immediate_fields": [], + "hw_actions_list": [] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "TX", + "handle": 47756035, + "name": "linux_networking_control.ipsec_spd", + "size": 1024, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "hdrs.ipv4[vmeta.common.depth].dst_ip", + "instance_name": "hdrs.ipv4[vmeta.common.depth].dst_ip", + "field_name": "hdrs.ipv4[vmeta.common.depth].dst_ip", + "match_type": "exact", + "bit_width": 32, + "index": 0, + "position": 0 + }, + { + "name": "hdrs.ipv4[vmeta.common.depth].protocol", + "instance_name": "hdrs.ipv4[vmeta.common.depth].protocol", + "field_name": "hdrs.ipv4[vmeta.common.depth].protocol", + "match_type": "exact", + "bit_width": 8, + "index": 1, + "position": 4 + } + ], + "match_key_format": [ + { + "match_key_handle": 0, + "byte_order": "NETWORK", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 32 + }, + { + "match_key_handle": 1, + "byte_order": "NETWORK", + "byte_array_index": 4, + "start_bit_offset": 0, + "bit_width": 16 + } + ], + "default_action_handle": 21257015, + "actions": [ + { + "name": "linux_networking_control.ipsec_protect_set_metadata", + "handle": 20682322, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "saidx", + "bit_width": 24 + } + ] + }, + { + "name": "linux_networking_control.ipsec_bypass", + "handle": 19192368, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [] + }, + { + "name": "NoAction", + "handle": 21257015, + "constant_default_action": true, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "LEM", + "id": 2, + "hw_interface": "ConfigQueue", + "profile": [ + 10 + ], + "hash_size": 325632, + "action_format": [ + { + "action_name": "linux_networking_control.ipsec_protect_set_metadata", + "action_handle": 20682322, + "immediate_fields": [ + { + "param_name": "saidx", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 24 + } + ], + "hw_actions_list": [ + { + "prec": 3, + "action_code": "SET2_8b", + "index": 11 + }, + { + "prec": 3, + "action_code": "SET1A_24b", + "index": 7, + "pool_id": 3 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 0, + "setmd_action_code": "SET_8b", + "parameters": [ + { + "param_name": "saidx", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 8, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "mask": 255, + "type_id": 0, + "offset": 15 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 3, + "setmd_action_code": "SET_16b", + "parameters": [ + { + "param_name": "saidx", + "param_handle": 0, + "param_start_bit": 8, + "param_value_length": 16, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "type_id": 0, + "offset": 8 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 4, + "setmd_action_code": "SET_8b", + "value": 3, + "mask": 3, + "type_id": 0, + "offset": 1 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 5, + "setmd_action_code": "SET_8b", + "value": 0, + "mask": 4, + "type_id": 0, + "offset": 3 + } + ] + }, + { + "action_name": "linux_networking_control.ipsec_bypass", + "action_handle": 19192368, + "immediate_fields": [], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 4, + "setmd_action_code": "SET_8b", + "value": 0, + "mask": 3, + "type_id": 0, + "offset": 1 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 5, + "setmd_action_code": "SET_8b", + "value": 4, + "mask": 4, + "type_id": 0, + "offset": 3 + } + ] + }, + { + "action_name": "NoAction", + "action_handle": 21257015, + "immediate_fields": [], + "hw_actions_list": [] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "TX", + "handle": 45022218, + "name": "linux_networking_control.ipsec_tx_sa_classification_table", + "size": 1024, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "hdrs.ipv4[vmeta.common.depth].dst_ip", + "instance_name": "hdrs.ipv4[vmeta.common.depth].dst_ip", + "field_name": "hdrs.ipv4[vmeta.common.depth].dst_ip", + "match_type": "exact", + "bit_width": 32, + "index": 0, + "position": 0 + }, + { + "name": "hdrs.ipv4[vmeta.common.depth].protocol", + "instance_name": "hdrs.ipv4[vmeta.common.depth].protocol", + "field_name": "hdrs.ipv4[vmeta.common.depth].protocol", + "match_type": "exact", + "bit_width": 8, + "index": 1, + "position": 4 + }, + { + "name": "user_meta.cmeta.is_tunnel", + "instance_name": "user_meta.cmeta.is_tunnel", + "field_name": "user_meta.cmeta.is_tunnel", + "match_type": "exact", + "bit_width": 1, + "index": 2, + "position": 5 + } + ], + "match_key_format": [ + { + "match_key_handle": 0, + "byte_order": "NETWORK", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 32 + }, + { + "match_key_handle": 1, + "byte_order": "NETWORK", + "byte_array_index": 4, + "start_bit_offset": 0, + "bit_width": 16 + }, + { + "match_key_handle": 2, + "byte_order": "HOST", + "byte_array_index": 6, + "start_bit_offset": 1, + "bit_width": 16 + } + ], + "default_action_handle": 21257015, + "max_default_actions": 4, + "actions": [ + { + "name": "linux_networking_control.tx_ipsec_transport", + "handle": 24935652, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [] + }, + { + "name": "linux_networking_control.tx_ipsec_transport_with_underlay", + "handle": 17885953, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [] + }, + { + "name": "linux_networking_control.tx_ipsec_tunnel", + "handle": 30154712, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "dst_addr", + "bit_width": 32 + } + ] + }, + { + "name": "linux_networking_control.tx_ipsec_tunnel_v6", + "handle": 29527637, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "dst_addr_1", + "bit_width": 32 + }, + { + "name": "dst_addr_2", + "bit_width": 32 + }, + { + "name": "dst_addr_3", + "bit_width": 16 + } + ] + }, + { + "name": "linux_networking_control.drop", + "handle": 29238102, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [] + }, + { + "name": "NoAction", + "handle": 21257015, + "constant_default_action": true, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "SEM", + "id": 0, + "hw_interface": "ConfigQueue", + "profile": [ + 14 + ], + "sub_profile": 2, + "obj_id": 2, + "hash_size": 325632, + "action_format": [ + { + "action_name": "linux_networking_control.tx_ipsec_transport", + "action_handle": 24935652, + "immediate_fields": [], + "hw_actions_list": [ + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 9, + "mod_profile": 17, + "prefetch": 0 + }, + { + "prec": 3, + "action_code": "SET2_8b", + "index": 11 + }, + { + "prec": 3, + "action_code": "SET1A_24b", + "index": 6, + "pool_id": 2 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 0, + "setmd_action_code": "SET_8b", + "value": 64, + "mask": 64, + "type_id": 4, + "offset": 0 + } + ] + }, + { + "action_name": "linux_networking_control.tx_ipsec_transport_with_underlay", + "action_handle": 17885953, + "immediate_fields": [], + "hw_actions_list": [ + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 9, + "mod_profile": 18, + "prefetch": 0 + }, + { + "prec": 3, + "action_code": "SET2_8b", + "index": 11 + }, + { + "prec": 3, + "action_code": "SET1A_24b", + "index": 6, + "pool_id": 2 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 0, + "setmd_action_code": "SET_8b", + "value": 64, + "mask": 64, + "type_id": 4, + "offset": 0 + } + ] + }, + { + "action_name": "linux_networking_control.tx_ipsec_tunnel", + "action_handle": 30154712, + "immediate_fields": [ + { + "param_name": "dst_addr", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 32 + } + ], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 64, + "mask": 112 + }, + { + "prec": 3, + "action_code": "SET2_8b", + "index": 11 + }, + { + "prec": 3, + "action_code": "SET1A_24b", + "index": 6, + "pool_id": 2 + }, + { + "prec": 0, + "action_code": "NOP", + "index": 0, + "value": 0, + "mask": 0 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 0, + "setmd_action_code": "SET_32b_AUX", + "parameters": [ + { + "param_name": "dst_addr", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 32, + "value_start_bit": 0, + "byte_order": "NETWORK" + } + ] + }, + { + "prec": 7, + "action_code": "AUX_DATA", + "index": 0, + "type_id": 4, + "offset": 28 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 1, + "setmd_action_code": "SET_8b", + "value": 4, + "mask": 7, + "type_id": 4, + "offset": 4 + } + ] + }, + { + "action_name": "linux_networking_control.tx_ipsec_tunnel_v6", + "action_handle": 29527637, + "immediate_fields": [ + { + "param_name": "dst_addr_1", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 32 + }, + { + "param_name": "dst_addr_2", + "param_handle": 1, + "dest_start": 4, + "start_bit_offset": 0, + "dest_width": 32 + }, + { + "param_name": "dst_addr_3", + "param_handle": 2, + "dest_start": 8, + "start_bit_offset": 0, + "dest_width": 16 + } + ], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 64, + "mask": 112 + }, + { + "prec": 0, + "action_code": "NOP", + "index": 0, + "value": 0, + "mask": 0 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 0, + "setmd_action_code": "SET_32b_AUX", + "parameters": [ + { + "param_name": "dst_addr_1", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 32, + "value_start_bit": 0, + "byte_order": "NETWORK" + } + ] + }, + { + "prec": 7, + "action_code": "AUX_DATA", + "index": 0, + "type_id": 4, + "offset": 28 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 1, + "setmd_action_code": "SET_32b_AUX", + "parameters": [ + { + "param_name": "dst_addr_2", + "param_handle": 1, + "param_start_bit": 0, + "param_value_length": 32, + "value_start_bit": 0, + "byte_order": "NETWORK" + } + ] + }, + { + "prec": 7, + "action_code": "AUX_DATA", + "index": 1, + "type_id": 4, + "offset": 24 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 5, + "setmd_action_code": "SET_16b", + "parameters": [ + { + "param_name": "dst_addr_3", + "param_handle": 2, + "param_start_bit": 0, + "param_value_length": 16, + "value_start_bit": 0, + "byte_order": "NETWORK" + } + ], + "type_id": 4, + "offset": 11 + } + ] + }, + { + "action_name": "linux_networking_control.drop", + "action_handle": 29238102, + "immediate_fields": [], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 1, + "mask": 1 + } + ] + }, + { + "action_name": "NoAction", + "action_handle": 21257015, + "immediate_fields": [], + "hw_actions_list": [] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "BIDIRECTIONAL", + "handle": 37326952, + "name": "linux_networking_control.ipsec_tunnel_encap_mod_table", + "size": 1024, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "vmeta.common.mod_blob_ptr", + "instance_name": "vmeta.common.mod_blob_ptr", + "field_name": "vmeta.common.mod_blob_ptr", + "match_type": "exact", + "bit_width": 24, + "index": 0, + "position": 0 + } + ], + "default_action_handle": 21257015, + "actions": [ + { + "name": "linux_networking_control.ipsec_tunnel_encap_mod", + "handle": 30081157, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "ipsec_src_addr", + "bit_width": 32 + }, + { + "name": "ipsec_dst_addr", + "bit_width": 32 + }, + { + "name": "proto", + "bit_width": 8 + } + ] + }, + { + "name": "NoAction", + "handle": 21257015, + "constant_default_action": true, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "MOD", + "id": 7, + "hw_interface": "ConfigQueue", + "hw_resource": "MOD_CONTENT", + "hw_resource_id": 0, + "profile": [ + 16 + ], + "action_format": [ + { + "action_name": "linux_networking_control.ipsec_tunnel_encap_mod", + "action_handle": 30081157, + "immediate_fields": [ + { + "param_name": "ipsec_src_addr", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 32 + }, + { + "param_name": "ipsec_dst_addr", + "param_handle": 1, + "dest_start": 4, + "start_bit_offset": 0, + "dest_width": 32 + }, + { + "param_name": "proto", + "param_handle": 2, + "dest_start": 8, + "start_bit_offset": 0, + "dest_width": 8 + } + ], + "mod_content_format": { + "mod_profile": 16, + "mod_obj_size": 1, + "mod_fields": [ + { + "name": "version", + "handle": 0, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 4, + "value": [ + 4 + ] + }, + { + "name": "ihl", + "handle": 1, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 0, + "start_bit_offset": 4, + "bit_width": 4, + "value": [ + 5 + ] + }, + { + "name": "dscp", + "handle": 2, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 1, + "start_bit_offset": 0, + "bit_width": 6, + "value": [ + 0 + ] + }, + { + "name": "ecn", + "handle": 3, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 1, + "start_bit_offset": 6, + "bit_width": 2, + "value": [ + 0 + ] + }, + { + "name": "length", + "handle": 4, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 2, + "start_bit_offset": 0, + "bit_width": 16, + "value": [ + 0, + 0 + ] + }, + { + "name": "identification", + "handle": 5, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 4, + "start_bit_offset": 0, + "bit_width": 16, + "value": [ + 0, + 0 + ] + }, + { + "name": "rsvd", + "handle": 6, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 6, + "start_bit_offset": 0, + "bit_width": 1, + "value": [ + 0 + ] + }, + { + "name": "df", + "handle": 7, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 6, + "start_bit_offset": 1, + "bit_width": 1, + "value": [ + 1 + ] + }, + { + "name": "mf", + "handle": 8, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 6, + "start_bit_offset": 2, + "bit_width": 1, + "value": [ + 0 + ] + }, + { + "name": "frag_off", + "handle": 9, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 6, + "start_bit_offset": 3, + "bit_width": 5, + "value": [ + 0 + ] + }, + { + "name": "frag_off", + "handle": 10, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 7, + "start_bit_offset": 0, + "bit_width": 3, + "value": [ + 0 + ] + }, + { + "name": "frag_off", + "handle": 11, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 7, + "start_bit_offset": 3, + "bit_width": 5, + "value": [ + 0 + ] + }, + { + "name": "ttl", + "handle": 12, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 8, + "start_bit_offset": 0, + "bit_width": 8, + "value": [ + 64 + ] + }, + { + "name": "proto", + "handle": 13, + "param_handle": 2, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 9, + "start_bit_offset": 0, + "bit_width": 8, + "value": [] + }, + { + "name": "csum", + "handle": 14, + "type": "constant", + "byte_order": "NETWORK", + "byte_array_index": 10, + "start_bit_offset": 0, + "bit_width": 16, + "value": [ + 0, + 1 + ] + }, + { + "name": "ipsec_src_addr", + "handle": 15, + "param_handle": 0, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 12, + "start_bit_offset": 0, + "bit_width": 32, + "value": [] + }, + { + "name": "ipsec_dst_addr", + "handle": 16, + "param_handle": 1, + "type": "parameter", + "byte_order": "NETWORK", + "byte_array_index": 16, + "start_bit_offset": 0, + "bit_width": 32, + "value": [] + } + ] + }, + "hw_actions_list": [] + }, + { + "action_name": "NoAction", + "action_handle": 21257015, + "immediate_fields": [], + "hw_actions_list": [] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "RX", + "handle": 43475471, + "name": "linux_networking_control.ipv4_ipsec_tunnel_term_table", + "size": 1024, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "ipv4_src", + "instance_name": "ipv4_src", + "field_name": "ipv4_src", + "match_type": "exact", + "bit_width": 32, + "index": 0, + "position": 0 + }, + { + "name": "ipv4_dst", + "instance_name": "ipv4_dst", + "field_name": "ipv4_dst", + "match_type": "exact", + "bit_width": 32, + "index": 1, + "position": 4 + } + ], + "match_key_format": [ + { + "match_key_handle": 0, + "byte_order": "NETWORK", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 32 + }, + { + "match_key_handle": 1, + "byte_order": "NETWORK", + "byte_array_index": 4, + "start_bit_offset": 0, + "bit_width": 32 + } + ], + "default_action_handle": 33275382, + "max_default_actions": 4, + "actions": [ + { + "name": "linux_networking_control.decap_ipsec_tunnel_hdr", + "handle": 25138331, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [] + }, + { + "name": "linux_networking_control.do_recirculate", + "handle": 33275382, + "constant_default_action": true, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "SEM", + "id": 0, + "hw_interface": "ConfigQueue", + "profile": [ + 13 + ], + "sub_profile": 0, + "obj_id": 1, + "hash_size": 325632, + "action_format": [ + { + "action_name": "linux_networking_control.decap_ipsec_tunnel_hdr", + "action_handle": 25138331, + "immediate_fields": [], + "hw_actions_list": [ + { + "prec": 1, + "action_code": "SET1A_24b", + "index": 9, + "mod_profile": 19, + "prefetch": 0 + }, + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 64, + "mask": 112 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 2, + "setmd_action_code": "SET_8b", + "value": 2, + "mask": 2, + "type_id": 4, + "offset": 0 + } + ] + }, + { + "action_name": "linux_networking_control.do_recirculate", + "action_handle": 33275382, + "immediate_fields": [], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 64, + "mask": 112 + } + ] + } + ], + "default_action_format": [ + { + "action_name": "linux_networking_control.do_recirculate", + "action_handle": 33275382, + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET10_1b", + "index": 0, + "value": 64, + "mask": 112 + } + ] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "RX", + "handle": 37403444, + "name": "linux_networking_control.vm_src_ip4_mac_map_table", + "size": 1024, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "ipv4_src", + "instance_name": "ipv4_src", + "field_name": "ipv4_src", + "match_type": "exact", + "bit_width": 32, + "index": 0, + "position": 0 + } + ], + "match_key_format": [ + { + "match_key_handle": 0, + "byte_order": "NETWORK", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 32 + } + ], + "default_action_handle": 21257015, + "actions": [ + { + "name": "linux_networking_control.vm_src_ip4_mac_map_action", + "handle": 28718673, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "smac_high", + "bit_width": 16 + }, + { + "name": "smac_mid", + "bit_width": 16 + }, + { + "name": "smac_low", + "bit_width": 16 + } + ] + }, + { + "name": "NoAction", + "handle": 21257015, + "constant_default_action": true, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "LEM", + "id": 2, + "hw_interface": "ConfigQueue", + "profile": [ + 7 + ], + "hash_size": 325632, + "action_format": [ + { + "action_name": "linux_networking_control.vm_src_ip4_mac_map_action", + "action_handle": 28718673, + "immediate_fields": [ + { + "param_name": "smac_high", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 16 + }, + { + "param_name": "smac_mid", + "param_handle": 1, + "dest_start": 2, + "start_bit_offset": 0, + "dest_width": 16 + }, + { + "param_name": "smac_low", + "param_handle": 2, + "dest_start": 4, + "start_bit_offset": 0, + "dest_width": 16 + } + ], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 5, + "setmd_action_code": "SET_16b", + "parameters": [ + { + "param_name": "smac_high", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 16, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "type_id": 4, + "offset": 7 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 4, + "setmd_action_code": "SET_16b", + "parameters": [ + { + "param_name": "smac_mid", + "param_handle": 1, + "param_start_bit": 0, + "param_value_length": 16, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "type_id": 4, + "offset": 6 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 3, + "setmd_action_code": "SET_16b", + "parameters": [ + { + "param_name": "smac_low", + "param_handle": 2, + "param_start_bit": 0, + "param_value_length": 16, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "type_id": 4, + "offset": 5 + } + ] + }, + { + "action_name": "NoAction", + "action_handle": 21257015, + "immediate_fields": [], + "hw_actions_list": [] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "RX", + "handle": 50085764, + "name": "linux_networking_control.vm_dst_ip4_mac_map_table", + "size": 1024, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "ipv4_dst", + "instance_name": "ipv4_dst", + "field_name": "ipv4_dst", + "match_type": "exact", + "bit_width": 32, + "index": 0, + "position": 0 + } + ], + "match_key_format": [ + { + "match_key_handle": 0, + "byte_order": "NETWORK", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 32 + } + ], + "default_action_handle": 21257015, + "actions": [ + { + "name": "linux_networking_control.vm_dst_ip4_mac_map_action", + "handle": 25018769, + "constant_default_action": false, + "is_compiler_added_action": false, + "allowed_as_hit_action": true, + "allowed_as_default_action": false, + "p4_parameters": [ + { + "name": "dmac_high", + "bit_width": 16 + }, + { + "name": "dmac_mid", + "bit_width": 16 + }, + { + "name": "dmac_low", + "bit_width": 16 + } + ] + }, + { + "name": "NoAction", + "handle": 21257015, + "constant_default_action": true, + "is_compiler_added_action": false, + "allowed_as_hit_action": false, + "allowed_as_default_action": true, + "p4_parameters": [] + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "LEM", + "id": 2, + "hw_interface": "ConfigQueue", + "profile": [ + 8 + ], + "hash_size": 325632, + "action_format": [ + { + "action_name": "linux_networking_control.vm_dst_ip4_mac_map_action", + "action_handle": 25018769, + "immediate_fields": [ + { + "param_name": "dmac_high", + "param_handle": 0, + "dest_start": 0, + "start_bit_offset": 0, + "dest_width": 16 + }, + { + "param_name": "dmac_mid", + "param_handle": 1, + "dest_start": 2, + "start_bit_offset": 0, + "dest_width": 16 + }, + { + "param_name": "dmac_low", + "param_handle": 2, + "dest_start": 4, + "start_bit_offset": 0, + "dest_width": 16 + } + ], + "hw_actions_list": [ + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 2, + "setmd_action_code": "SET_16b", + "parameters": [ + { + "param_name": "dmac_high", + "param_handle": 0, + "param_start_bit": 0, + "param_value_length": 16, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "type_id": 4, + "offset": 10 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 1, + "setmd_action_code": "SET_16b", + "parameters": [ + { + "param_name": "dmac_mid", + "param_handle": 1, + "param_start_bit": 0, + "param_value_length": 16, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "type_id": 4, + "offset": 9 + }, + { + "prec": 7, + "action_code": "SET1B_24b", + "index": 0, + "setmd_action_code": "SET_16b", + "parameters": [ + { + "param_name": "dmac_low", + "param_handle": 2, + "param_start_bit": 0, + "param_value_length": 16, + "value_start_bit": 0, + "byte_order": "HOST" + } + ], + "type_id": 4, + "offset": 8 + } + ] + }, + { + "action_name": "NoAction", + "action_handle": 21257015, + "immediate_fields": [], + "hw_actions_list": [] + } + ] + } + ] + } + }, + { + "table_type": "match", + "direction": "TX", + "handle": 8454144, + "name": "linux_networking_control.ecmp_hash_fn", + "size": 1024, + "isDefaultSize": true, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "hdrs.ipv4[xxpmeta.depth].src_ip", + "instance_name": "hdrs.ipv4[xxpmeta.depth]", + "field_name": "src_ip", + "match_type": "selector", + "bit_width": 32, + "index": 0, + "position": 0 + }, + { + "name": "hdrs.ipv4[xxpmeta.depth].dst_ip", + "instance_name": "hdrs.ipv4[xxpmeta.depth]", + "field_name": "dst_ip", + "match_type": "selector", + "bit_width": 32, + "index": 1, + "position": 4 + }, + { + "name": "hdrs.ipv4[xxpmeta.depth].protocol", + "instance_name": "hdrs.ipv4[xxpmeta.depth]", + "field_name": "protocol", + "match_type": "selector", + "bit_width": 8, + "index": 2, + "position": 8 + }, + { + "name": "hdrs.udp[xxpmeta.depth].sport", + "instance_name": "hdrs.udp[xxpmeta.depth]", + "field_name": "sport", + "match_type": "selector", + "bit_width": 16, + "index": 3, + "position": 9 + }, + { + "name": "hdrs.udp[xxpmeta.depth].dport", + "instance_name": "hdrs.udp[xxpmeta.depth]", + "field_name": "dport", + "match_type": "selector", + "bit_width": 16, + "index": 4, + "position": 11 + } + ], + "match_key_format": [ + { + "match_key_handle": 0, + "byte_order": "NETWORK", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 32 + }, + { + "match_key_handle": 1, + "byte_order": "NETWORK", + "byte_array_index": 4, + "start_bit_offset": 0, + "bit_width": 32 + }, + { + "match_key_handle": 2, + "byte_order": "NETWORK", + "byte_array_index": 8, + "start_bit_offset": 0, + "bit_width": 8 + }, + { + "match_key_handle": 3, + "byte_order": "NETWORK", + "byte_array_index": 9, + "start_bit_offset": 0, + "bit_width": 16 + }, + { + "match_key_handle": 4, + "byte_order": "NETWORK", + "byte_array_index": 11, + "start_bit_offset": 0, + "bit_width": 16 + } + ], + "default_action_handle": 0, + "actions": [], + "match_attributes": { + "hardware_blocks": [ + { + "name": "HASH", + "id": 5, + "hw_interface": "MMIO", + "profile": [ + 7 + ], + "action_format": [] + } + ] + } + }, + { + "table_type": "match", + "direction": "TX", + "handle": 8454145, + "name": "linux_networking_control.ecmp_hash_v6_fn", + "size": 1024, + "isDefaultSize": true, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "hdrs.ipv6[xxpmeta.depth].src_ip", + "instance_name": "hdrs.ipv6[xxpmeta.depth]", + "field_name": "src_ip", + "match_type": "selector", + "bit_width": 128, + "index": 0, + "position": 0 + }, + { + "name": "hdrs.ipv6[xxpmeta.depth].dst_ip", + "instance_name": "hdrs.ipv6[xxpmeta.depth]", + "field_name": "dst_ip", + "match_type": "selector", + "bit_width": 128, + "index": 1, + "position": 16 + }, + { + "name": "hdrs.ipv6[xxpmeta.depth].next_header", + "instance_name": "hdrs.ipv6[xxpmeta.depth]", + "field_name": "next_header", + "match_type": "selector", + "bit_width": 8, + "index": 2, + "position": 32 + }, + { + "name": "hdrs.udp[xxpmeta.depth].sport", + "instance_name": "hdrs.udp[xxpmeta.depth]", + "field_name": "sport", + "match_type": "selector", + "bit_width": 16, + "index": 3, + "position": 33 + }, + { + "name": "hdrs.udp[xxpmeta.depth].dport", + "instance_name": "hdrs.udp[xxpmeta.depth]", + "field_name": "dport", + "match_type": "selector", + "bit_width": 16, + "index": 4, + "position": 35 + } + ], + "match_key_format": [ + { + "match_key_handle": 0, + "byte_order": "NETWORK", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 128 + }, + { + "match_key_handle": 1, + "byte_order": "NETWORK", + "byte_array_index": 16, + "start_bit_offset": 0, + "bit_width": 128 + }, + { + "match_key_handle": 2, + "byte_order": "NETWORK", + "byte_array_index": 32, + "start_bit_offset": 0, + "bit_width": 8 + }, + { + "match_key_handle": 3, + "byte_order": "NETWORK", + "byte_array_index": 33, + "start_bit_offset": 0, + "bit_width": 16 + }, + { + "match_key_handle": 4, + "byte_order": "NETWORK", + "byte_array_index": 35, + "start_bit_offset": 0, + "bit_width": 16 + } + ], + "default_action_handle": 0, + "actions": [], + "match_attributes": { + "hardware_blocks": [ + { + "name": "HASH", + "id": 5, + "hw_interface": "MMIO", + "profile": [ + 8 + ], + "action_format": [] + } + ] + } + }, + { + "table_type": "match", + "direction": "TX", + "handle": 8454146, + "name": "linux_networking_control.lag_hash_fn", + "size": 1024, + "isDefaultSize": true, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "hdrs.mac[xxpmeta.depth].da", + "instance_name": "hdrs.mac[xxpmeta.depth]", + "field_name": "da", + "match_type": "selector", + "bit_width": 48, + "index": 0, + "position": 0 + }, + { + "name": "hdrs.mac[xxpmeta.depth].sa", + "instance_name": "hdrs.mac[xxpmeta.depth]", + "field_name": "sa", + "match_type": "selector", + "bit_width": 48, + "index": 1, + "position": 6 + } + ], + "match_key_format": [ + { + "match_key_handle": 0, + "byte_order": "NETWORK", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 48 + }, + { + "match_key_handle": 1, + "byte_order": "NETWORK", + "byte_array_index": 6, + "start_bit_offset": 0, + "bit_width": 48 + } + ], + "default_action_handle": 0, + "actions": [], + "match_attributes": { + "hardware_blocks": [ + { + "name": "HASH", + "id": 5, + "hw_interface": "MMIO", + "profile": [ + 9 + ], + "action_format": [] + } + ] + } + }, + { + "table_type": "match", + "direction": "TX", + "handle": 8454147, + "name": "linux_networking_control.src_port_hash_fn", + "size": 1024, + "isDefaultSize": true, + "add_on_miss": false, + "idle_timeout_with_auto_delete": false, + "match_key_fields": [ + { + "name": "hdrs.mac[xxpmeta.depth].da", + "instance_name": "hdrs.mac[xxpmeta.depth]", + "field_name": "da", + "match_type": "selector", + "bit_width": 48, + "index": 0, + "position": 0 + }, + { + "name": "hdrs.mac[xxpmeta.depth].sa", + "instance_name": "hdrs.mac[xxpmeta.depth]", + "field_name": "sa", + "match_type": "selector", + "bit_width": 48, + "index": 1, + "position": 6 + }, + { + "name": "hdrs.etype[xxpmeta.depth].type", + "instance_name": "hdrs.etype[xxpmeta.depth]", + "field_name": "type", + "match_type": "selector", + "bit_width": 16, + "index": 2, + "position": 12 + } + ], + "match_key_format": [ + { + "match_key_handle": 0, + "byte_order": "NETWORK", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 48 + }, + { + "match_key_handle": 1, + "byte_order": "NETWORK", + "byte_array_index": 6, + "start_bit_offset": 0, + "bit_width": 48 + }, + { + "match_key_handle": 2, + "byte_order": "NETWORK", + "byte_array_index": 12, + "start_bit_offset": 0, + "bit_width": 16 + } + ], + "default_action_handle": 0, + "actions": [], + "match_attributes": { + "hardware_blocks": [ + { + "name": "HASH", + "id": 5, + "hw_interface": "MMIO", + "profile": [ + 11 + ], + "action_format": [] + } + ] + } + }, + { + "table_type": "match_value_lookup_table", + "handle": 41667918, + "name": "linux_networking_control.ipv4_lpm_root_lut", + "size": 1, + "p4_hidden": false, + "match_key_fields": [ + { + "name": "user_meta.cmeta.bit16_zeros", + "instance_name": "user_meta.cmeta.bit16_zeros", + "field_name": "user_meta.cmeta.bit16_zeros", + "match_type": "ternary", + "bit_width": 16, + "index": 0, + "position": 0 + } + ], + "match_key_format": [ + { + "match_key_handle": 0, + "byte_order": "HOST", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 16 + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "LPM", + "id": 4, + "hw_interface": "MMIO", + "hw_resource": "lpm_table", + "hw_resource_id": 4, + "immediate_fields": [ + { + "param_name": "ipv4_table_lpm_root", + "param_handle": 0, + "dest_start": 0, + "dest_width": 32 + } + ], + "p4_ref_table_handles": [ + 37566509 + ] + } + ] + } + }, + { + "table_type": "match_value_lookup_table", + "handle": 43524029, + "name": "linux_networking_control.ipv6_lpm_root_lut", + "size": 1, + "p4_hidden": false, + "match_key_fields": [ + { + "name": "user_meta.cmeta.bit16_zeros", + "instance_name": "user_meta.cmeta.bit16_zeros", + "field_name": "user_meta.cmeta.bit16_zeros", + "match_type": "ternary", + "bit_width": 16, + "index": 0, + "position": 0 + } + ], + "match_key_format": [ + { + "match_key_handle": 0, + "byte_order": "HOST", + "byte_array_index": 0, + "start_bit_offset": 0, + "bit_width": 16 + } + ], + "match_attributes": { + "hardware_blocks": [ + { + "name": "LPM", + "id": 4, + "hw_interface": "MMIO", + "hw_resource": "lpm_table", + "hw_resource_id": 4, + "immediate_fields": [ + { + "param_name": "ipv6_table_lpm_root", + "param_handle": 0, + "dest_start": 0, + "dest_width": 32 + } + ], + "p4_ref_table_handles": [ + 46496254 + ] + } + ] + } + } + ], + "counter_with_modify_flag": [ + { + "name": "ddcounter_pool_tx2", + "pool_id": 0, + "pool_type": 0, + "size": 1024 + }, + { + "name": "ddcounter_pool_tx3", + "pool_id": 1, + "pool_type": 0, + "size": 1024 + }, + { + "name": "ddcounter_pool_tx4", + "pool_id": 2, + "pool_type": 0, + "size": 1024 + }, + { + "name": "ddcounter_pool_tx5", + "pool_id": 3, + "pool_type": 0, + "size": 1024 + } + ] +} \ No newline at end of file diff --git a/vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/fxp-net_linux-networking/fxp-net_linux-networking.p4info.txt b/vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/fxp-net_linux-networking/fxp-net_linux-networking.p4info.txt new file mode 100644 index 000000000..da7d6e68b --- /dev/null +++ b/vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/fxp-net_linux-networking/fxp-net_linux-networking.p4info.txt @@ -0,0 +1,2790 @@ +pkg_info { + arch: "pna" +} +tables { + preamble { + id: 48773578 + name: "MainControlDecrypt.lem_exception" + alias: "lem_exception" + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + size: 1024 +} +tables { + preamble { + id: 38116127 + name: "MainControlDecrypt.lem_clear" + alias: "lem_clear" + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + size: 1024 +} +tables { + preamble { + id: 45068641 + name: "MainControlDecrypt.ipsec_rx_sa_classification_table" + alias: "ipsec_rx_sa_classification_table" + } + match_fields { + id: 1 + name: "hdrs.ipv4[vmeta.common.depth].src_ip" + bitwidth: 32 + match_type: EXACT + } + match_fields { + id: 2 + name: "hdrs.ipv4[vmeta.common.depth].dst_ip" + bitwidth: 32 + match_type: EXACT + } + match_fields { + id: 3 + name: "hdrs.esp.spi" + bitwidth: 32 + match_type: EXACT + } + action_refs { + id: 33177492 + } + action_refs { + id: 30285547 + } + const_default_action_id: 30285547 + size: 1024 +} +tables { + preamble { + id: 41667918 + name: "linux_networking_control.ipv4_lpm_root_lut" + alias: "ipv4_lpm_root_lut" + annotations: "@intel_lut_type(\"lpm_table\")" + } + match_fields { + id: 1 + name: "user_meta.cmeta.bit16_zeros" + bitwidth: 16 + match_type: TERNARY + } + action_refs { + id: 17061464 + } + size: 1 +} +tables { + preamble { + id: 43524029 + name: "linux_networking_control.ipv6_lpm_root_lut" + alias: "ipv6_lpm_root_lut" + annotations: "@intel_lut_type(\"lpm_table\")" + } + match_fields { + id: 1 + name: "user_meta.cmeta.bit16_zeros" + bitwidth: 16 + match_type: TERNARY + } + action_refs { + id: 25701894 + } + size: 1 +} +tables { + preamble { + id: 42605135 + name: "linux_networking_control.rif_mod_table_start" + alias: "rif_mod_table_start" + } + match_fields { + id: 1 + name: "rif_mod_map_id0" + bitwidth: 11 + match_type: EXACT + } + action_refs { + id: 23093409 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + size: 1024 +} +tables { + preamble { + id: 43970557 + name: "linux_networking_control.rif_mod_table_mid" + alias: "rif_mod_table_mid" + } + match_fields { + id: 1 + name: "rif_mod_map_id1" + bitwidth: 11 + match_type: EXACT + } + action_refs { + id: 30315892 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + size: 1024 +} +tables { + preamble { + id: 47499906 + name: "linux_networking_control.rif_mod_table_last" + alias: "rif_mod_table_last" + } + match_fields { + id: 1 + name: "rif_mod_map_id2" + bitwidth: 11 + match_type: EXACT + } + action_refs { + id: 32740970 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + size: 1024 +} +tables { + preamble { + id: 48081556 + name: "linux_networking_control.always_trap_arp_table" + alias: "always_trap_arp_table" + } + match_fields { + id: 1 + name: "hdrs.inval.data" + bitwidth: 16 + match_type: EXACT + } + match_fields { + id: 2 + name: "hdrs.inval.data" + bitwidth: 16 + match_type: EXACT + } + action_refs { + id: 19361592 + } + const_default_action_id: 19361592 + size: 1024 +} +tables { + preamble { + id: 47372228 + name: "linux_networking_control.always_recirculate_table" + alias: "always_recirculate_table" + } + match_fields { + id: 1 + name: "hdrs.inval.data" + bitwidth: 16 + match_type: EXACT + } + match_fields { + id: 2 + name: "hdrs.inval.data" + bitwidth: 16 + match_type: EXACT + } + action_refs { + id: 33275382 + } + const_default_action_id: 33275382 + size: 1024 +} +tables { + preamble { + id: 40312237 + name: "linux_networking_control.vlan_push_mod_table" + alias: "vlan_push_mod_table" + } + match_fields { + id: 1 + name: "vmeta.common.mod_blob_ptr" + bitwidth: 24 + match_type: EXACT + } + action_refs { + id: 24137163 + } + action_refs { + id: 21257015 + } + const_default_action_id: 21257015 + size: 1024 +} +tables { + preamble { + id: 38884256 + name: "linux_networking_control.vlan_pop_mod_table" + alias: "vlan_pop_mod_table" + } + match_fields { + id: 1 + name: "vmeta.common.mod_blob_ptr" + bitwidth: 24 + match_type: EXACT + } + action_refs { + id: 25667542 + } + action_refs { + id: 21257015 + } + const_default_action_id: 21257015 + size: 1024 +} +tables { + preamble { + id: 40763773 + name: "linux_networking_control.vxlan_encap_mod_table" + alias: "vxlan_encap_mod_table" + } + match_fields { + id: 1 + name: "vmeta.common.mod_blob_ptr" + bitwidth: 24 + match_type: EXACT + } + action_refs { + id: 20733968 + } + action_refs { + id: 21257015 + } + const_default_action_id: 21257015 + size: 1024 +} +tables { + preamble { + id: 39675860 + name: "linux_networking_control.vxlan_encap_vlan_pop_mod_table" + alias: "vxlan_encap_vlan_pop_mod_table" + } + match_fields { + id: 1 + name: "vmeta.common.mod_blob_ptr" + bitwidth: 24 + match_type: EXACT + } + action_refs { + id: 26114242 + } + action_refs { + id: 21257015 + } + const_default_action_id: 21257015 + size: 1024 +} +tables { + preamble { + id: 46225003 + name: "linux_networking_control.vxlan_encap_v6_mod_table" + alias: "vxlan_encap_v6_mod_table" + } + match_fields { + id: 1 + name: "vmeta.common.mod_blob_ptr" + bitwidth: 24 + match_type: EXACT + } + action_refs { + id: 30345128 + } + action_refs { + id: 21257015 + } + const_default_action_id: 21257015 + size: 1024 +} +tables { + preamble { + id: 34318005 + name: "linux_networking_control.vxlan_encap_v6_vlan_pop_mod_table" + alias: "vxlan_encap_v6_vlan_pop_mod_table" + } + match_fields { + id: 1 + name: "vmeta.common.mod_blob_ptr" + bitwidth: 24 + match_type: EXACT + } + action_refs { + id: 28284062 + } + action_refs { + id: 21257015 + } + const_default_action_id: 21257015 + size: 1024 +} +tables { + preamble { + id: 40980035 + name: "linux_networking_control.vxlan_decap_mod_table" + alias: "vxlan_decap_mod_table" + } + match_fields { + id: 1 + name: "vmeta.common.mod_blob_ptr" + bitwidth: 24 + match_type: EXACT + } + action_refs { + id: 28308555 + } + action_refs { + id: 21257015 + } + const_default_action_id: 21257015 + size: 1024 +} +tables { + preamble { + id: 37624107 + name: "linux_networking_control.vxlan_decap_and_push_vlan_mod_table" + alias: "vxlan_decap_and_push_vlan_mod_table" + } + match_fields { + id: 1 + name: "vmeta.common.mod_blob_ptr" + bitwidth: 24 + match_type: EXACT + } + action_refs { + id: 31953264 + } + action_refs { + id: 21257015 + } + const_default_action_id: 21257015 + size: 1024 +} +tables { + preamble { + id: 41319073 + name: "linux_networking_control.geneve_encap_mod_table" + alias: "geneve_encap_mod_table" + } + match_fields { + id: 1 + name: "vmeta.common.mod_blob_ptr" + bitwidth: 24 + match_type: EXACT + } + action_refs { + id: 25818889 + } + action_refs { + id: 21257015 + } + const_default_action_id: 21257015 + size: 1024 +} +tables { + preamble { + id: 47977422 + name: "linux_networking_control.geneve_encap_vlan_pop_mod_table" + alias: "geneve_encap_vlan_pop_mod_table" + } + match_fields { + id: 1 + name: "vmeta.common.mod_blob_ptr" + bitwidth: 24 + match_type: EXACT + } + action_refs { + id: 26665268 + } + action_refs { + id: 21257015 + } + const_default_action_id: 21257015 + size: 1024 +} +tables { + preamble { + id: 42283616 + name: "linux_networking_control.geneve_encap_v6_mod_table" + alias: "geneve_encap_v6_mod_table" + } + match_fields { + id: 1 + name: "vmeta.common.mod_blob_ptr" + bitwidth: 24 + match_type: EXACT + } + action_refs { + id: 29610186 + } + action_refs { + id: 21257015 + } + const_default_action_id: 21257015 + size: 1024 +} +tables { + preamble { + id: 47370391 + name: "linux_networking_control.geneve_encap_v6_vlan_pop_mod_table" + alias: "geneve_encap_v6_vlan_pop_mod_table" + } + match_fields { + id: 1 + name: "vmeta.common.mod_blob_ptr" + bitwidth: 24 + match_type: EXACT + } + action_refs { + id: 27347188 + } + action_refs { + id: 21257015 + } + const_default_action_id: 21257015 + size: 1024 +} +tables { + preamble { + id: 34173274 + name: "linux_networking_control.geneve_decap_mod_table" + alias: "geneve_decap_mod_table" + } + match_fields { + id: 1 + name: "vmeta.common.mod_blob_ptr" + bitwidth: 24 + match_type: EXACT + } + action_refs { + id: 27842378 + } + action_refs { + id: 21257015 + } + const_default_action_id: 21257015 + size: 1024 +} +tables { + preamble { + id: 34525815 + name: "linux_networking_control.geneve_decap_and_push_vlan_mod_table" + alias: "geneve_decap_and_push_vlan_mod_table" + } + match_fields { + id: 1 + name: "vmeta.common.mod_blob_ptr" + bitwidth: 24 + match_type: EXACT + } + action_refs { + id: 25073902 + } + action_refs { + id: 21257015 + } + const_default_action_id: 21257015 + size: 1024 +} +tables { + preamble { + id: 47484925 + name: "linux_networking_control.ipv4_tunnel_term_table" + alias: "ipv4_tunnel_term_table" + } + match_fields { + id: 1 + name: "ipv4_src" + bitwidth: 32 + match_type: EXACT + } + match_fields { + id: 2 + name: "vni" + bitwidth: 24 + match_type: EXACT + } + action_refs { + id: 31163719 + annotations: "@tableonly" + scope: TABLE_ONLY + } + action_refs { + id: 25342798 + annotations: "@tableonly" + scope: TABLE_ONLY + } + action_refs { + id: 26749366 + annotations: "@tableonly" + scope: TABLE_ONLY + } + action_refs { + id: 31208923 + annotations: "@tableonly" + scope: TABLE_ONLY + } + action_refs { + id: 21790705 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + const_default_action_id: 21790705 + size: 1024 +} +tables { + preamble { + id: 34601307 + name: "linux_networking_control.ipv6_tunnel_term_table" + alias: "ipv6_tunnel_term_table" + } + match_fields { + id: 1 + name: "ipv6_src" + bitwidth: 128 + match_type: EXACT + } + match_fields { + id: 2 + name: "vni" + bitwidth: 24 + match_type: EXACT + } + action_refs { + id: 31163719 + annotations: "@tableonly" + scope: TABLE_ONLY + } + action_refs { + id: 25342798 + annotations: "@tableonly" + scope: TABLE_ONLY + } + action_refs { + id: 26749366 + annotations: "@tableonly" + scope: TABLE_ONLY + } + action_refs { + id: 31208923 + annotations: "@tableonly" + scope: TABLE_ONLY + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + const_default_action_id: 21257015 + size: 1024 +} +tables { + preamble { + id: 44842501 + name: "linux_networking_control.l2_fwd_rx_table" + alias: "l2_fwd_rx_table" + } + match_fields { + id: 2 + name: "user_meta.pmeta.bridge_id" + bitwidth: 8 + match_type: EXACT + } + match_fields { + id: 1 + name: "dst_mac" + annotations: "@format(MAC_ADDRESS)" + bitwidth: 48 + match_type: EXACT + } + action_refs { + id: 19169916 + } + action_refs { + id: 21862855 + } + action_refs { + id: 21283156 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + const_default_action_id: 21283156 + size: 1024 +} +tables { + preamble { + id: 40240205 + name: "linux_networking_control.l2_fwd_tx_table" + alias: "l2_fwd_tx_table" + } + match_fields { + id: 1 + name: "user_meta.pmeta.bridge_id" + bitwidth: 8 + match_type: EXACT + } + match_fields { + id: 2 + name: "dst_mac" + annotations: "@format(MAC_ADDRESS)" + bitwidth: 48 + match_type: EXACT + } + action_refs { + id: 19169916 + } + action_refs { + id: 24440746 + } + action_refs { + id: 26412051 + } + action_refs { + id: 19193142 + } + action_refs { + id: 31983357 + } + action_refs { + id: 23849990 + } + action_refs { + id: 23736116 + } + action_refs { + id: 17483375 + } + action_refs { + id: 24842266 + } + action_refs { + id: 33478945 + } + action_refs { + id: 24108243 + } + action_refs { + id: 25690116 + } + action_refs { + id: 20441854 + } + direct_resource_ids: 333810446 + size: 1024 +} +tables { + preamble { + id: 37894008 + name: "linux_networking_control.nexthop_table" + alias: "nexthop_table" + } + match_fields { + id: 1 + name: "user_meta.cmeta.nexthop_id" + bitwidth: 16 + match_type: EXACT + } + match_fields { + id: 2 + name: "bit16_zeros" + bitwidth: 8 + match_type: EXACT + } + action_refs { + id: 16795029 + } + action_refs { + id: 25951413 + } + action_refs { + id: 29238102 + } + action_refs { + id: 21257015 + } + const_default_action_id: 21257015 + direct_resource_ids: 323002307 + size: 1024 +} +tables { + preamble { + id: 47712712 + name: "linux_networking_control.ecmp_nexthop_table" + alias: "ecmp_nexthop_table" + } + match_fields { + id: 1 + name: "user_meta.cmeta.nexthop_id" + bitwidth: 16 + match_type: TERNARY + } + action_refs { + id: 27181644 + } + action_refs { + id: 29238102 + } + const_default_action_id: 29238102 + size: 1024 +} +tables { + preamble { + id: 40757978 + name: "linux_networking_control.tx_lag_table" + alias: "tx_lag_table" + } + match_fields { + id: 1 + name: "user_meta.cmeta.lag_group_id" + bitwidth: 8 + match_type: TERNARY + } + match_fields { + id: 2 + name: "hash" + bitwidth: 3 + match_type: TERNARY + } + action_refs { + id: 27998997 + } + action_refs { + id: 24954025 + } + action_refs { + id: 29238102 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + const_default_action_id: 29238102 + size: 1024 +} +tables { + preamble { + id: 44444143 + name: "linux_networking_control.rx_lag_table" + alias: "rx_lag_table" + } + match_fields { + id: 1 + name: "vmeta.common.port_id" + bitwidth: 2 + match_type: EXACT + } + match_fields { + id: 2 + name: "user_meta.cmeta.lag_group_id" + bitwidth: 8 + match_type: EXACT + } + action_refs { + id: 26092385 + } + action_refs { + id: 29238102 + } + const_default_action_id: 29238102 + size: 1024 +} +tables { + preamble { + id: 37566509 + name: "linux_networking_control.ipv4_table" + alias: "ipv4_table" + } + match_fields { + id: 1 + name: "ipv4_table_lpm_root" + bitwidth: 32 + match_type: EXACT + } + match_fields { + id: 2 + name: "ipv4_dst_match" + annotations: "@intel_byte_order(\"NETWORK\")" + bitwidth: 32 + match_type: LPM + } + action_refs { + id: 22009623 + } + action_refs { + id: 16874810 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + size: 1024 +} +tables { + preamble { + id: 49661222 + name: "linux_networking_control.ecmp_hash_table" + alias: "ecmp_hash_table" + } + match_fields { + id: 1 + name: "flex" + bitwidth: 16 + match_type: TERNARY + } + match_fields { + id: 2 + name: "hash" + bitwidth: 3 + match_type: TERNARY + } + action_refs { + id: 29883644 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + const_default_action_id: 21257015 + size: 1024 +} +tables { + preamble { + id: 46496254 + name: "linux_networking_control.ipv6_table" + alias: "ipv6_table" + } + match_fields { + id: 1 + name: "ipv6_table_lpm_root" + bitwidth: 32 + match_type: EXACT + } + match_fields { + id: 2 + name: "ipv6_dst_match" + annotations: "@intel_byte_order(\"NETWORK\")" + bitwidth: 128 + match_type: LPM + } + action_refs { + id: 21321477 + } + action_refs { + id: 27000185 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + size: 1024 +} +tables { + preamble { + id: 40351839 + name: "linux_networking_control.rx_source_port" + alias: "rx_source_port" + } + match_fields { + id: 1 + name: "vmeta.common.port_id" + bitwidth: 2 + match_type: EXACT + } + match_fields { + id: 2 + name: "zero_padding" + bitwidth: 16 + match_type: EXACT + } + action_refs { + id: 32890467 + } + action_refs { + id: 29238102 + } + const_default_action_id: 32890467 + size: 1024 +} +tables { + preamble { + id: 49097500 + name: "linux_networking_control.rx_ipv4_tunnel_source_port" + alias: "rx_ipv4_tunnel_source_port" + } + match_fields { + id: 1 + name: "ipv4_src" + bitwidth: 32 + match_type: EXACT + } + match_fields { + id: 2 + name: "vni" + bitwidth: 24 + match_type: EXACT + } + action_refs { + id: 32890467 + } + action_refs { + id: 29238102 + } + const_default_action_id: 29238102 + size: 1024 +} +tables { + preamble { + id: 40981078 + name: "linux_networking_control.rx_ipv6_tunnel_source_port" + alias: "rx_ipv6_tunnel_source_port" + } + match_fields { + id: 1 + name: "ipv6_src" + bitwidth: 128 + match_type: EXACT + } + match_fields { + id: 2 + name: "vni" + bitwidth: 24 + match_type: EXACT + } + action_refs { + id: 32890467 + } + action_refs { + id: 29238102 + } + const_default_action_id: 29238102 + size: 1024 +} +tables { + preamble { + id: 33606489 + name: "linux_networking_control.source_port_to_bridge_map" + alias: "source_port_to_bridge_map" + } + match_fields { + id: 1 + name: "user_meta.cmeta.source_port" + bitwidth: 16 + match_type: TERNARY + } + match_fields { + id: 2 + name: "hdrs.vlan_ext[vmeta.common.depth].hdr.vid" + bitwidth: 12 + match_type: TERNARY + } + action_refs { + id: 31939992 + } + action_refs { + id: 29238102 + } + const_default_action_id: 31939992 + size: 1024 +} +tables { + preamble { + id: 46342225 + name: "linux_networking_control.l2_fwd_smac_table" + alias: "l2_fwd_smac_table" + } + match_fields { + id: 1 + name: "hdrs.mac[vmeta.common.depth].sa" + bitwidth: 48 + match_type: EXACT + } + match_fields { + id: 2 + name: "user_meta.pmeta.bridge_id" + bitwidth: 8 + match_type: EXACT + } + action_refs { + id: 21257015 + } + action_refs { + id: 21283156 + } + const_default_action_id: 21283156 + size: 1024 +} +tables { + preamble { + id: 42508227 + name: "linux_networking_control.tx_acc_vsi" + alias: "tx_acc_vsi" + } + match_fields { + id: 1 + name: "vmeta.common.vsi" + bitwidth: 11 + match_type: EXACT + } + match_fields { + id: 2 + name: "zero_padding" + bitwidth: 16 + match_type: EXACT + } + action_refs { + id: 31624713 + } + action_refs { + id: 29238102 + } + const_default_action_id: 31624713 + size: 1024 +} +tables { + preamble { + id: 39041593 + name: "linux_networking_control.tx_source_port" + alias: "tx_source_port" + } + match_fields { + id: 1 + name: "vmeta.common.vsi" + bitwidth: 11 + match_type: TERNARY + } + action_refs { + id: 32890467 + } + action_refs { + id: 29238102 + } + const_default_action_id: 29238102 + size: 1024 +} +tables { + preamble { + id: 43337754 + name: "linux_networking_control.l2_to_tunnel_v4" + alias: "l2_to_tunnel_v4" + } + match_fields { + id: 1 + name: "hdrs.mac[vmeta.common.depth].da" + bitwidth: 48 + match_type: EXACT + } + action_refs { + id: 23805991 + } + action_refs { + id: 29238102 + } + action_refs { + id: 33275382 + } + const_default_action_id: 33275382 + size: 1024 +} +tables { + preamble { + id: 36796227 + name: "linux_networking_control.l2_to_tunnel_v6" + alias: "l2_to_tunnel_v6" + } + match_fields { + id: 1 + name: "hdrs.mac[vmeta.common.depth].da" + bitwidth: 48 + match_type: EXACT + } + action_refs { + id: 23953453 + } + action_refs { + id: 33275382 + } + action_refs { + id: 29238102 + } + const_default_action_id: 33275382 + size: 1024 +} +tables { + preamble { + id: 38721082 + name: "linux_networking_control.rx_phy_port_to_pr_map" + alias: "rx_phy_port_to_pr_map" + } + match_fields { + id: 1 + name: "vmeta.common.port_id" + bitwidth: 2 + match_type: EXACT + } + match_fields { + id: 2 + name: "zero_padding" + bitwidth: 16 + match_type: EXACT + } + action_refs { + id: 26092385 + } + action_refs { + id: 29238102 + } + const_default_action_id: 26092385 + size: 1024 +} +tables { + preamble { + id: 35934350 + name: "linux_networking_control.source_port_to_pr_map" + alias: "source_port_to_pr_map" + } + match_fields { + id: 1 + name: "user_meta.cmeta.source_port" + bitwidth: 16 + match_type: EXACT + } + match_fields { + id: 2 + name: "zero_padding" + bitwidth: 8 + match_type: EXACT + } + action_refs { + id: 26092385 + } + action_refs { + id: 29238102 + } + const_default_action_id: 26092385 + size: 1024 +} +tables { + preamble { + id: 45509113 + name: "linux_networking_control.vsi_to_vsi_loopback" + alias: "vsi_to_vsi_loopback" + } + match_fields { + id: 1 + name: "vmeta.common.vsi" + bitwidth: 11 + match_type: EXACT + } + match_fields { + id: 2 + name: "target_vsi" + bitwidth: 11 + match_type: EXACT + } + action_refs { + id: 26092385 + } + action_refs { + id: 29238102 + } + const_default_action_id: 29238102 + size: 1024 +} +tables { + preamble { + id: 44641644 + name: "linux_networking_control.hash_ipv4_tcp" + alias: "hash_ipv4_tcp" + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + size: 1024 +} +tables { + preamble { + id: 46678878 + name: "linux_networking_control.hash_ipv4_udp" + alias: "hash_ipv4_udp" + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + size: 1024 +} +tables { + preamble { + id: 45972289 + name: "linux_networking_control.hash_ipv4" + alias: "hash_ipv4" + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + size: 1024 +} +tables { + preamble { + id: 33896331 + name: "linux_networking_control.hash_l2" + alias: "hash_l2" + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + size: 1024 +} +tables { + preamble { + id: 46852435 + name: "linux_networking_control.hash_ipv6_tcp" + alias: "hash_ipv6_tcp" + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + size: 1024 +} +tables { + preamble { + id: 46359163 + name: "linux_networking_control.hash_ipv6_udp" + alias: "hash_ipv6_udp" + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + size: 1024 +} +tables { + preamble { + id: 34506208 + name: "linux_networking_control.hash_ipv6" + alias: "hash_ipv6" + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + size: 1024 +} +tables { + preamble { + id: 49349790 + name: "linux_networking_control.ipsec_tunnel_table" + alias: "ipsec_tunnel_table" + } + match_fields { + id: 1 + name: "vmeta.common.saidx" + bitwidth: 24 + match_type: EXACT + } + match_fields { + id: 2 + name: "bit16_zeros" + bitwidth: 13 + match_type: EXACT + } + action_refs { + id: 26423957 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + size: 1024 +} +tables { + preamble { + id: 47756035 + name: "linux_networking_control.ipsec_spd" + alias: "ipsec_spd" + } + match_fields { + id: 1 + name: "hdrs.ipv4[vmeta.common.depth].dst_ip" + bitwidth: 32 + match_type: EXACT + } + match_fields { + id: 2 + name: "hdrs.ipv4[vmeta.common.depth].protocol" + bitwidth: 8 + match_type: EXACT + } + action_refs { + id: 20682322 + } + action_refs { + id: 19192368 + } + action_refs { + id: 21257015 + } + const_default_action_id: 21257015 + direct_resource_ids: 330899638 + size: 1024 +} +tables { + preamble { + id: 45022218 + name: "linux_networking_control.ipsec_tx_sa_classification_table" + alias: "ipsec_tx_sa_classification_table" + } + match_fields { + id: 1 + name: "hdrs.ipv4[vmeta.common.depth].dst_ip" + bitwidth: 32 + match_type: EXACT + } + match_fields { + id: 2 + name: "hdrs.ipv4[vmeta.common.depth].protocol" + bitwidth: 8 + match_type: EXACT + } + match_fields { + id: 3 + name: "user_meta.cmeta.is_tunnel" + bitwidth: 1 + match_type: EXACT + } + action_refs { + id: 24935652 + } + action_refs { + id: 17885953 + } + action_refs { + id: 30154712 + } + action_refs { + id: 29527637 + } + action_refs { + id: 29238102 + } + action_refs { + id: 21257015 + } + const_default_action_id: 21257015 + direct_resource_ids: 327348295 + size: 1024 +} +tables { + preamble { + id: 37326952 + name: "linux_networking_control.ipsec_tunnel_encap_mod_table" + alias: "ipsec_tunnel_encap_mod_table" + } + match_fields { + id: 1 + name: "vmeta.common.mod_blob_ptr" + bitwidth: 24 + match_type: EXACT + } + action_refs { + id: 30081157 + } + action_refs { + id: 21257015 + } + const_default_action_id: 21257015 + size: 1024 +} +tables { + preamble { + id: 43475471 + name: "linux_networking_control.ipv4_ipsec_tunnel_term_table" + alias: "ipv4_ipsec_tunnel_term_table" + } + match_fields { + id: 1 + name: "ipv4_src" + bitwidth: 32 + match_type: EXACT + } + match_fields { + id: 2 + name: "ipv4_dst" + bitwidth: 32 + match_type: EXACT + } + action_refs { + id: 25138331 + annotations: "@tableonly" + scope: TABLE_ONLY + } + action_refs { + id: 33275382 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + const_default_action_id: 33275382 + size: 1024 +} +tables { + preamble { + id: 37403444 + name: "linux_networking_control.vm_src_ip4_mac_map_table" + alias: "vm_src_ip4_mac_map_table" + } + match_fields { + id: 1 + name: "ipv4_src" + bitwidth: 32 + match_type: EXACT + } + action_refs { + id: 28718673 + annotations: "@tableonly" + scope: TABLE_ONLY + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + const_default_action_id: 21257015 + size: 1024 +} +tables { + preamble { + id: 50085764 + name: "linux_networking_control.vm_dst_ip4_mac_map_table" + alias: "vm_dst_ip4_mac_map_table" + } + match_fields { + id: 1 + name: "ipv4_dst" + bitwidth: 32 + match_type: EXACT + } + action_refs { + id: 25018769 + annotations: "@tableonly" + scope: TABLE_ONLY + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + const_default_action_id: 21257015 + size: 1024 +} +actions { + preamble { + id: 21257015 + name: "NoAction" + alias: "NoAction" + } +} +actions { + preamble { + id: 30285547 + name: "MainControlDecrypt.ipsec_bypass" + alias: "MainControlDecrypt.ipsec_bypass" + } +} +actions { + preamble { + id: 33177492 + name: "MainControlDecrypt.ipsec_decrypt" + alias: "ipsec_decrypt" + } + params { + id: 1 + name: "saidx" + bitwidth: 24 + } +} +actions { + preamble { + id: 19173135 + name: "linux_networking_control.no_modify" + alias: "no_modify" + } +} +actions { + preamble { + id: 31851898 + name: "linux_networking_control.dummycall" + alias: "dummycall" + } +} +actions { + preamble { + id: 33275382 + name: "linux_networking_control.do_recirculate" + alias: "do_recirculate" + } +} +actions { + preamble { + id: 19169916 + name: "linux_networking_control.l2_fwd" + alias: "l2_fwd" + } + params { + id: 1 + name: "port" + bitwidth: 32 + type_name { + name: "PortId_t" + } + } +} +actions { + preamble { + id: 31624713 + name: "linux_networking_control.l2_fwd_and_bypass_bridge" + alias: "l2_fwd_and_bypass_bridge" + } + params { + id: 1 + name: "port" + bitwidth: 32 + type_name { + name: "PortId_t" + } + } +} +actions { + preamble { + id: 24440746 + name: "linux_networking_control.l2_fwd_lag" + alias: "l2_fwd_lag" + } + params { + id: 1 + name: "lag_group_id" + bitwidth: 8 + } +} +actions { + preamble { + id: 21862855 + name: "linux_networking_control.l2_fwd_lag_and_recirculate" + alias: "l2_fwd_lag_and_recirculate" + } + params { + id: 1 + name: "lag_group_id" + bitwidth: 8 + } +} +actions { + preamble { + id: 24954025 + name: "linux_networking_control.bypass" + alias: "bypass" + } +} +actions { + preamble { + id: 29238102 + name: "linux_networking_control.drop" + alias: "drop" + } +} +actions { + preamble { + id: 24137163 + name: "linux_networking_control.vlan_push" + alias: "vlan_push" + } + params { + id: 1 + name: "pcp" + bitwidth: 3 + } + params { + id: 2 + name: "dei" + bitwidth: 1 + } + params { + id: 3 + name: "vlan_id" + bitwidth: 12 + } +} +actions { + preamble { + id: 25667542 + name: "linux_networking_control.vlan_pop" + alias: "vlan_pop" + } +} +actions { + preamble { + id: 20733968 + name: "linux_networking_control.vxlan_encap" + alias: "vxlan_encap" + } + params { + id: 1 + name: "src_addr" + bitwidth: 32 + } + params { + id: 2 + name: "dst_addr" + bitwidth: 32 + } + params { + id: 3 + name: "src_port" + bitwidth: 16 + } + params { + id: 4 + name: "dst_port" + bitwidth: 16 + } + params { + id: 5 + name: "vni" + bitwidth: 24 + } +} +actions { + preamble { + id: 26114242 + name: "linux_networking_control.vxlan_encap_vlan_pop" + alias: "vxlan_encap_vlan_pop" + } + params { + id: 1 + name: "src_addr" + bitwidth: 32 + } + params { + id: 2 + name: "dst_addr" + bitwidth: 32 + } + params { + id: 3 + name: "src_port" + bitwidth: 16 + } + params { + id: 4 + name: "dst_port" + bitwidth: 16 + } + params { + id: 5 + name: "vni" + bitwidth: 24 + } +} +actions { + preamble { + id: 30345128 + name: "linux_networking_control.vxlan_encap_v6" + alias: "vxlan_encap_v6" + } + params { + id: 1 + name: "src_addr" + bitwidth: 128 + } + params { + id: 2 + name: "dst_addr" + bitwidth: 128 + } + params { + id: 3 + name: "ds" + bitwidth: 6 + } + params { + id: 4 + name: "ecn" + bitwidth: 2 + } + params { + id: 5 + name: "flow_label" + bitwidth: 20 + } + params { + id: 6 + name: "hop_limit" + bitwidth: 8 + } + params { + id: 7 + name: "src_port" + bitwidth: 16 + } + params { + id: 8 + name: "dst_port" + bitwidth: 16 + } + params { + id: 9 + name: "vni" + bitwidth: 24 + } +} +actions { + preamble { + id: 28284062 + name: "linux_networking_control.vxlan_encap_v6_vlan_pop" + alias: "vxlan_encap_v6_vlan_pop" + } + params { + id: 1 + name: "src_addr" + bitwidth: 128 + } + params { + id: 2 + name: "dst_addr" + bitwidth: 128 + } + params { + id: 3 + name: "ds" + bitwidth: 6 + } + params { + id: 4 + name: "ecn" + bitwidth: 2 + } + params { + id: 5 + name: "flow_label" + bitwidth: 20 + } + params { + id: 6 + name: "hop_limit" + bitwidth: 8 + } + params { + id: 7 + name: "src_port" + bitwidth: 16 + } + params { + id: 8 + name: "dst_port" + bitwidth: 16 + } + params { + id: 9 + name: "vni" + bitwidth: 24 + } +} +actions { + preamble { + id: 25818889 + name: "linux_networking_control.geneve_encap" + alias: "geneve_encap" + } + params { + id: 1 + name: "src_addr" + bitwidth: 32 + } + params { + id: 2 + name: "dst_addr" + bitwidth: 32 + } + params { + id: 3 + name: "src_port" + bitwidth: 16 + } + params { + id: 4 + name: "dst_port" + bitwidth: 16 + } + params { + id: 5 + name: "vni" + bitwidth: 24 + } +} +actions { + preamble { + id: 26665268 + name: "linux_networking_control.geneve_encap_vlan_pop" + alias: "geneve_encap_vlan_pop" + } + params { + id: 1 + name: "src_addr" + bitwidth: 32 + } + params { + id: 2 + name: "dst_addr" + bitwidth: 32 + } + params { + id: 3 + name: "src_port" + bitwidth: 16 + } + params { + id: 4 + name: "dst_port" + bitwidth: 16 + } + params { + id: 5 + name: "vni" + bitwidth: 24 + } +} +actions { + preamble { + id: 29610186 + name: "linux_networking_control.geneve_encap_v6" + alias: "geneve_encap_v6" + } + params { + id: 1 + name: "src_addr" + bitwidth: 128 + } + params { + id: 2 + name: "dst_addr" + bitwidth: 128 + } + params { + id: 3 + name: "ds" + bitwidth: 6 + } + params { + id: 4 + name: "ecn" + bitwidth: 2 + } + params { + id: 5 + name: "flow_label" + bitwidth: 20 + } + params { + id: 6 + name: "hop_limit" + bitwidth: 8 + } + params { + id: 7 + name: "src_port" + bitwidth: 16 + } + params { + id: 8 + name: "dst_port" + bitwidth: 16 + } + params { + id: 9 + name: "vni" + bitwidth: 24 + } +} +actions { + preamble { + id: 27347188 + name: "linux_networking_control.geneve_encap_v6_vlan_pop" + alias: "geneve_encap_v6_vlan_pop" + } + params { + id: 1 + name: "src_addr" + bitwidth: 128 + } + params { + id: 2 + name: "dst_addr" + bitwidth: 128 + } + params { + id: 3 + name: "ds" + bitwidth: 6 + } + params { + id: 4 + name: "ecn" + bitwidth: 2 + } + params { + id: 5 + name: "flow_label" + bitwidth: 20 + } + params { + id: 6 + name: "hop_limit" + bitwidth: 8 + } + params { + id: 7 + name: "src_port" + bitwidth: 16 + } + params { + id: 8 + name: "dst_port" + bitwidth: 16 + } + params { + id: 9 + name: "vni" + bitwidth: 24 + } +} +actions { + preamble { + id: 28308555 + name: "linux_networking_control.vxlan_decap_outer_hdr" + alias: "vxlan_decap_outer_hdr" + } +} +actions { + preamble { + id: 27842378 + name: "linux_networking_control.geneve_decap_outer_hdr" + alias: "geneve_decap_outer_hdr" + } +} +actions { + preamble { + id: 31953264 + name: "linux_networking_control.vxlan_decap_and_push_vlan" + alias: "vxlan_decap_and_push_vlan" + } + params { + id: 1 + name: "pcp" + bitwidth: 3 + } + params { + id: 2 + name: "dei" + bitwidth: 1 + } + params { + id: 3 + name: "vlan_id" + bitwidth: 12 + } +} +actions { + preamble { + id: 25073902 + name: "linux_networking_control.geneve_decap_and_push_vlan" + alias: "geneve_decap_and_push_vlan" + } + params { + id: 1 + name: "pcp" + bitwidth: 3 + } + params { + id: 2 + name: "dei" + bitwidth: 1 + } + params { + id: 3 + name: "vlan_id" + bitwidth: 12 + } +} +actions { + preamble { + id: 23093409 + name: "linux_networking_control.set_src_mac_start" + alias: "set_src_mac_start" + } + params { + id: 1 + name: "arg" + bitwidth: 16 + } +} +actions { + preamble { + id: 30315892 + name: "linux_networking_control.set_src_mac_mid" + alias: "set_src_mac_mid" + } + params { + id: 1 + name: "arg" + bitwidth: 16 + } +} +actions { + preamble { + id: 32740970 + name: "linux_networking_control.set_src_mac_last" + alias: "set_src_mac_last" + } + params { + id: 1 + name: "arg" + bitwidth: 16 + } +} +actions { + preamble { + id: 31671750 + name: "linux_networking_control.set_outer_mac" + alias: "set_outer_mac" + } +} +actions { + preamble { + id: 31163719 + name: "linux_networking_control.set_vxlan_decap_outer_hdr" + alias: "set_vxlan_decap_outer_hdr" + } + params { + id: 1 + name: "tunnel_id" + bitwidth: 20 + } +} +actions { + preamble { + id: 25342798 + name: "linux_networking_control.set_vxlan_decap_outer_and_push_vlan" + alias: "set_vxlan_decap_outer_and_push_vlan" + } + params { + id: 1 + name: "tunnel_id" + bitwidth: 20 + } +} +actions { + preamble { + id: 26412051 + name: "linux_networking_control.set_vxlan_underlay_v4" + alias: "set_vxlan_underlay_v4" + } + params { + id: 1 + name: "tunnel_id" + bitwidth: 20 + } +} +actions { + preamble { + id: 19193142 + name: "linux_networking_control.set_vxlan_underlay_v6" + alias: "set_vxlan_underlay_v6" + } + params { + id: 1 + name: "tunnel_id" + bitwidth: 20 + } +} +actions { + preamble { + id: 31983357 + name: "linux_networking_control.pop_vlan_set_vxlan_underlay_v4" + alias: "pop_vlan_set_vxlan_underlay_v4" + } + params { + id: 1 + name: "tunnel_id" + bitwidth: 20 + } +} +actions { + preamble { + id: 23849990 + name: "linux_networking_control.pop_vlan_set_vxlan_underlay_v6" + alias: "pop_vlan_set_vxlan_underlay_v6" + } + params { + id: 1 + name: "tunnel_id" + bitwidth: 20 + } +} +actions { + preamble { + id: 26749366 + name: "linux_networking_control.set_geneve_decap_outer_hdr" + alias: "set_geneve_decap_outer_hdr" + } + params { + id: 1 + name: "tunnel_id" + bitwidth: 20 + } +} +actions { + preamble { + id: 31208923 + name: "linux_networking_control.set_geneve_decap_outer_and_push_vlan" + alias: "set_geneve_decap_outer_and_push_vlan" + } + params { + id: 1 + name: "tunnel_id" + bitwidth: 20 + } +} +actions { + preamble { + id: 23736116 + name: "linux_networking_control.set_geneve_underlay_v4" + alias: "set_geneve_underlay_v4" + } + params { + id: 1 + name: "tunnel_id" + bitwidth: 20 + } +} +actions { + preamble { + id: 17483375 + name: "linux_networking_control.set_geneve_underlay_v6" + alias: "set_geneve_underlay_v6" + } + params { + id: 1 + name: "tunnel_id" + bitwidth: 20 + } +} +actions { + preamble { + id: 24842266 + name: "linux_networking_control.pop_vlan_set_geneve_underlay_v4" + alias: "pop_vlan_set_geneve_underlay_v4" + } + params { + id: 1 + name: "tunnel_id" + bitwidth: 20 + } +} +actions { + preamble { + id: 33478945 + name: "linux_networking_control.pop_vlan_set_geneve_underlay_v6" + alias: "pop_vlan_set_geneve_underlay_v6" + } + params { + id: 1 + name: "tunnel_id" + bitwidth: 20 + } +} +actions { + preamble { + id: 27998997 + name: "linux_networking_control.set_egress_port" + alias: "set_egress_port" + } + params { + id: 1 + name: "router_interface_id" + bitwidth: 16 + } + params { + id: 2 + name: "egress_port" + bitwidth: 32 + type_name { + name: "PortId_t" + } + } +} +actions { + preamble { + id: 16795029 + name: "linux_networking_control.set_nexthop_info_dmac" + alias: "set_nexthop_info_dmac" + } + params { + id: 1 + name: "router_interface_id" + bitwidth: 16 + } + params { + id: 2 + name: "egress_port" + bitwidth: 32 + type_name { + name: "PortId_t" + } + } + params { + id: 3 + name: "dmac_high" + bitwidth: 16 + } + params { + id: 4 + name: "dmac_low" + bitwidth: 32 + } +} +actions { + preamble { + id: 25951413 + name: "linux_networking_control.set_nexthop_lag" + alias: "set_nexthop_lag" + } + params { + id: 1 + name: "lag_group_id" + bitwidth: 8 + } + params { + id: 2 + name: "dmac_high" + bitwidth: 16 + } + params { + id: 3 + name: "dmac_low" + bitwidth: 32 + } +} +actions { + preamble { + id: 27181644 + name: "linux_networking_control.ecmp_set_nexthop_info_dmac" + alias: "ecmp_set_nexthop_info_dmac" + } + params { + id: 1 + name: "router_interface_id" + bitwidth: 16 + } + params { + id: 2 + name: "egress_port" + bitwidth: 32 + type_name { + name: "PortId_t" + } + } + params { + id: 3 + name: "dmac_high" + bitwidth: 16 + } + params { + id: 4 + name: "dmac_low" + bitwidth: 32 + } +} +actions { + preamble { + id: 29883644 + name: "linux_networking_control.set_nexthop_id" + alias: "set_nexthop_id" + } + params { + id: 1 + name: "nexthop_id" + bitwidth: 16 + } +} +actions { + preamble { + id: 16874810 + name: "linux_networking_control.ecmp_hash_action" + alias: "ecmp_hash_action" + } + params { + id: 1 + name: "ecmp_group_id" + bitwidth: 16 + } +} +actions { + preamble { + id: 22009623 + name: "linux_networking_control.ipv4_set_nexthop_id" + alias: "ipv4_set_nexthop_id" + } + params { + id: 1 + name: "nexthop_id" + bitwidth: 16 + } +} +actions { + preamble { + id: 21321477 + name: "linux_networking_control.ipv6_set_nexthop_id" + alias: "ipv6_set_nexthop_id" + } + params { + id: 1 + name: "nexthop_id" + bitwidth: 16 + } +} +actions { + preamble { + id: 27000185 + name: "linux_networking_control.ecmp_v6_hash_action" + alias: "ecmp_v6_hash_action" + } + params { + id: 1 + name: "ecmp_group_id" + bitwidth: 16 + } +} +actions { + preamble { + id: 24108243 + name: "linux_networking_control.add_vlan_and_fwd" + alias: "add_vlan_and_fwd" + } + params { + id: 1 + name: "vlan_ptr" + bitwidth: 24 + } + params { + id: 2 + name: "port_id" + bitwidth: 32 + type_name { + name: "PortId_t" + } + } +} +actions { + preamble { + id: 25690116 + name: "linux_networking_control.remove_vlan_and_fwd" + alias: "remove_vlan_and_fwd" + } + params { + id: 1 + name: "vlan_ptr" + bitwidth: 24 + } + params { + id: 2 + name: "port_id" + bitwidth: 32 + type_name { + name: "PortId_t" + } + } +} +actions { + preamble { + id: 32890467 + name: "linux_networking_control.set_source_port" + alias: "set_source_port" + } + params { + id: 1 + name: "source_port" + bitwidth: 16 + } +} +actions { + preamble { + id: 31939992 + name: "linux_networking_control.set_bridge_id" + alias: "set_bridge_id" + } + params { + id: 1 + name: "bridge_id" + bitwidth: 8 + } +} +actions { + preamble { + id: 23805991 + name: "linux_networking_control.set_tunnel_v4" + alias: "set_tunnel_v4" + } + params { + id: 1 + name: "dst_addr" + bitwidth: 32 + } +} +actions { + preamble { + id: 23953453 + name: "linux_networking_control.set_tunnel_v6" + alias: "set_tunnel_v6" + } + params { + id: 1 + name: "ipv6_1" + bitwidth: 32 + } + params { + id: 2 + name: "ipv6_2" + bitwidth: 32 + } + params { + id: 3 + name: "ipv6_3" + bitwidth: 32 + } + params { + id: 4 + name: "ipv6_4" + bitwidth: 32 + } +} +actions { + preamble { + id: 26092385 + name: "linux_networking_control.fwd_to_vsi" + alias: "fwd_to_vsi" + } + params { + id: 1 + name: "port" + bitwidth: 32 + type_name { + name: "PortId_t" + } + } +} +actions { + preamble { + id: 21790705 + name: "linux_networking_control.trap_enable" + alias: "trap_enable" + } +} +actions { + preamble { + id: 19361592 + name: "linux_networking_control.do_trap_enable" + alias: "do_trap_enable" + } +} +actions { + preamble { + id: 20441854 + name: "linux_networking_control.fwd_to_cp_tx" + alias: "fwd_to_cp_tx" + } +} +actions { + preamble { + id: 21283156 + name: "linux_networking_control.fwd_to_cp" + alias: "fwd_to_cp" + } +} +actions { + preamble { + id: 26423957 + name: "linux_networking_control.set_ipsec_tunnel" + alias: "set_ipsec_tunnel" + } + params { + id: 1 + name: "tunnel_id" + bitwidth: 24 + } +} +actions { + preamble { + id: 19192368 + name: "linux_networking_control.ipsec_bypass" + alias: "linux_networking_control.ipsec_bypass" + } +} +actions { + preamble { + id: 29527637 + name: "linux_networking_control.tx_ipsec_tunnel_v6" + alias: "tx_ipsec_tunnel_v6" + } + params { + id: 1 + name: "dst_addr_1" + bitwidth: 32 + } + params { + id: 2 + name: "dst_addr_2" + bitwidth: 32 + } + params { + id: 3 + name: "dst_addr_3" + bitwidth: 16 + } +} +actions { + preamble { + id: 30154712 + name: "linux_networking_control.tx_ipsec_tunnel" + alias: "tx_ipsec_tunnel" + } + params { + id: 1 + name: "dst_addr" + bitwidth: 32 + } +} +actions { + preamble { + id: 24935652 + name: "linux_networking_control.tx_ipsec_transport" + alias: "tx_ipsec_transport" + } +} +actions { + preamble { + id: 17885953 + name: "linux_networking_control.tx_ipsec_transport_with_underlay" + alias: "tx_ipsec_transport_with_underlay" + } +} +actions { + preamble { + id: 25138331 + name: "linux_networking_control.decap_ipsec_tunnel_hdr" + alias: "decap_ipsec_tunnel_hdr" + } +} +actions { + preamble { + id: 20682322 + name: "linux_networking_control.ipsec_protect_set_metadata" + alias: "ipsec_protect_set_metadata" + } + params { + id: 1 + name: "saidx" + bitwidth: 24 + } +} +actions { + preamble { + id: 30081157 + name: "linux_networking_control.ipsec_tunnel_encap_mod" + alias: "ipsec_tunnel_encap_mod" + } + params { + id: 1 + name: "ipsec_src_addr" + bitwidth: 32 + } + params { + id: 2 + name: "ipsec_dst_addr" + bitwidth: 32 + } + params { + id: 3 + name: "proto" + bitwidth: 8 + } +} +actions { + preamble { + id: 33290754 + name: "linux_networking_control.ipsec_transport_mod_action" + alias: "ipsec_transport_mod_action" + } +} +actions { + preamble { + id: 24657351 + name: "linux_networking_control.ipsec_transport_with_underlay_mod_action" + alias: "ipsec_transport_with_underlay_mod_action" + } +} +actions { + preamble { + id: 28758942 + name: "linux_networking_control.ipsec_tunnel_decap" + alias: "ipsec_tunnel_decap" + } +} +actions { + preamble { + id: 28718673 + name: "linux_networking_control.vm_src_ip4_mac_map_action" + alias: "vm_src_ip4_mac_map_action" + } + params { + id: 1 + name: "smac_high" + bitwidth: 16 + } + params { + id: 2 + name: "smac_mid" + bitwidth: 16 + } + params { + id: 3 + name: "smac_low" + bitwidth: 16 + } +} +actions { + preamble { + id: 25018769 + name: "linux_networking_control.vm_dst_ip4_mac_map_action" + alias: "vm_dst_ip4_mac_map_action" + } + params { + id: 1 + name: "dmac_high" + bitwidth: 16 + } + params { + id: 2 + name: "dmac_mid" + bitwidth: 16 + } + params { + id: 3 + name: "dmac_low" + bitwidth: 16 + } +} +actions { + preamble { + id: 17061464 + name: "linux_networking_control.ipv4_lpm_root_lut_action" + alias: "ipv4_lpm_root_lut_action" + } + params { + id: 1 + name: "ipv4_table_lpm_root" + bitwidth: 32 + } +} +actions { + preamble { + id: 25701894 + name: "linux_networking_control.ipv6_lpm_root_lut_action" + alias: "ipv6_lpm_root_lut_action" + } + params { + id: 1 + name: "ipv6_table_lpm_root" + bitwidth: 32 + } +} +direct_counters { + preamble { + id: 333810446 + name: "linux_networking_control.ddcounter_pool_tx2" + alias: "ddcounter_pool_tx2" + } + spec { + unit: BOTH + } +} +direct_counters { + preamble { + id: 323002307 + name: "linux_networking_control.ddcounter_pool_tx3" + alias: "ddcounter_pool_tx3" + } + spec { + unit: BOTH + } +} +direct_counters { + preamble { + id: 327348295 + name: "linux_networking_control.ddcounter_pool_tx4" + alias: "ddcounter_pool_tx4" + } + spec { + unit: BOTH + } +} +direct_counters { + preamble { + id: 330899638 + name: "linux_networking_control.ddcounter_pool_tx5" + alias: "ddcounter_pool_tx5" + } + spec { + unit: BOTH + } +} +type_info { + new_types { + key: "PortId_t" + value { + translated_type { + uri: "p4.org/pna/v1/PortId_t" + sdn_bitwidth: 32 + } + } + } +} diff --git a/vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/fxp-net_linux-networking/fxp-net_linux-networking.pkg b/vendor/github.com/intel/ipu-opi-plugins/e2e/artefacts/fxp-net_linux-networking/fxp-net_linux-networking.pkg new file mode 100644 index 0000000000000000000000000000000000000000..fa02ee481f43687b180dc7eda0a09ebaba3a30ea GIT binary patch literal 1532240 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 z zpyTWRzqzvh|8`LCe|GnJ?fU<3g6ID>Fy5Q)KAv4~{^wx4w}SEByykd+3yk*`Fy7N^ zjyD10eH$3BU30wu0*v=G81F4>j`v@J@!kx^d+VCx{TLYUTfunGtU2C$!Fb;c#(T$_ zq$NO)=cz+Fy_wF^v`w1}K>%n+Gy5@L43C276%g^Z@1tP67q2iTt8WBy#EP|XRe>DjAyQ& ztTo>M48}9pPgce=*H6|OZx4)TuAi)oXRe>DHQq0P@yzv;mGR8=leNbCMKIovgYmw4 z&GCK-jAyQ&tkh?&pR85i2f%pd`pL?8=K9H6<9!f}XRar#jAyPVtTo;*gYnGugq88k z^@O#?`+HzKb3I{YJaau^t?~B3c;j^94nd=E_jrVI{JhT2?8PBYL?>3%Y|Nng% z&*l1mH+X_S|9?H0U!~sz`0&*_cz^KgE7t+cI(wyVv(CO--S#@buLB3O&R!YMth4Vn zp1lrm0LC-x?3MA%I(x10{s9=ztg~0fGwbZN#`}k0JhRST8PBY<*Bb91f$_{bdu2Sc z&R%Q0-vHy8b;-(jW?iz@c>frT_gi2*vo2X{ynh15Gkx8sbq%6@HPhGqBhBu%F8QZm zJk!@*8PD`}*Bb8-jA#0~E905I?povhFJL^=*IgOU^mW%7?|%j3nZEAIc&4wr)_DIL z7|--|SH?4a-L=O1O)#G6>#mGv`nqe4_Yp9j>FchHXZpHpjrY&Mcpn7gees&({T3MS z17N&=ea-QXz<9p|#(UM8U$NT4Cyq^Z+Rcns-J7Bz@0^@zGjU9J_W}6Eihhk z_wnqy_|r1p`QX`WSIqyv)A_q*v{u$Ng0367nXVgX2>LQVo9o~CdiELxFZ|!=qk6aX zwG+JS%4^NK|4J~tGBHnA{UZ6BazPP3{!9>rWEx9G0ezXwuJJjLf2X3|S^Pa^t(ksy z2(l5##vq%3Yznd&$mSr^`Q@7B-^@5oHSe6lns-lO&F7@%J=uqNe=+}|{dpf`2Ov8H z*%8QYg6tN^ZiDRD{(OG%dHB;*v-t<{CS-b=YTiACHJ_83C%>?Ge>S@^f06wZWHXS> zSF^O~X7ZZR<44xM>8F0?!s0cf$B$>8X$yK_dR*OicPLmoems8V@vCnO-nL8Ioy6k@ z*Sz$;b{c9vZO0FCK5fSjs(JbNA?HK9-=DllMJ&<;kn`UZCf1PexBZ^yKv?UqqR% z|LGi$o+V{I*Z*Ae()pWecWdruT5~t^UGwt!+i7qyuz;gsOIJKx31|)bv|wDf8L+hIDg|ESN7dC&)@9&pZC9|^?wA8 zA5T0}@Wbqw_j_IcpQB{y_;GaM#(CNoXgfWAboY%H`n{NIK4r%bs(JbN(KS7(&Zq78 zLC(v^k2qKy7-)ai_chw>>5DQwek>CI#}D40PucN<_vces^C>xg*!4f}&&$V;-~)?~ z?wEa7*ZBx(cK${+pSJTis(JbR?b%D8p-%+yx!OrQf8+i6l${Il{(K5+J|*XG zc74tJ^YZx{=-<%(O<%MgS@ZnOuK#)e+i?AFJ|eJs{J3yqhYo-zb^XsZpR(fz)qL8H zA5`;cJAP2j%f}D1{x|8#J$~^1e9GR7d4E2IHJ_5>hh6{k{=A*zhh6{k{&%+i-};*G z>;cXMRA4uFFMt03dQe`Z-vjvCi{-^CxVYAJfb-`Ib2R%>I#;yU0WQ)3ZmExRBfN2e z9`B@{$8pW4>^zQYK5gf5RP$*&kE5EG&*RLlY|@i^9>@FhDLW_P{rMEueA>?Acz<3x zkGm4=-q8K|9{M%yP|c_9I6^g_w&MuZ42~mwD53p%e`ob~a$e}q15nMuDSJ<*nwLLMMo)vjPO|f9 zJC5-FymTC)&;F~ki{l9Ie`nVNXz6tJbtbSCf#d!E%Nw7sU8WcQDLY@|norsJ8r6K- z&ey2s({{c_HJ`TgHQt|3+4&mp&!@2FQ*yp$`~SQ@Z|8i?_WybRllN2o{eSfNvBh;` zUhmub?lZ5q<>SXue6m0P&o!U2;|JAz+KwMo^JzPNP|YjHk4q=}^Z&d*pR)I2-k(ol z&8Ot}Vf+8QKQA3WcG}$=QS_Jicm3~Sy>I*fy#Jl8_qVdnI~(*&014p!|NU!S2k87B zr|tjWZ;pE_=W!?e_c*!cQ+6IlHJ`TgII8)yoySql%jaqm9v6I@D=KcAUy(jbjd@0>}IRS69y0(BJ>Nk`+O+^m)yz=J>XJzIJ2xWPk3TYd&S?YgF^{`C1Ys4<(mx z1Sj>pm})+4=WA3mIA1fV@js!T*W~^Al%4zV{=8H(zsZ?5lauUxO3v48f1UT|rSmo3 znPq>TcK?RIWY72a|9StD_fzfvC*be@z2zBm_>jlYzyHU7SYzq)V|uVVsqbrC^V0F- zy!pU1)qRp{UOs-D2Itdu{Gfef`S?NmJbj(i_ch+1!F%yZulcln-k+RL$??PX|9O92 z)Y|!?U}&V1>)fS*XZ~DKVW|U|F4+aE0@ZhziMt@8@@mI z8gm<6&Vt6=7MBl#|A6k_*WY=axoz)%ETG%>+@JC7hvoKDlE+tG&H2|}srmM2uPnAd zko@`si|^NR`yRPHlG`V)F23Kp`VIW^zajVIYclS&#drgAzY3z2>lV*(-f2It5YfTy zl%02S&8O_VlWIO~=bcpZX*=(vnorw#C-2Xv?7Wlr=cSqrJ%63l^LyT(Pe;x6yp#9m zHP1VDp5MPaW&d6Q?|&j-AuCN z@mG9d_SDP%3~e`;?3I7|i@uG%D4R;Q_(@(X+GCYu6WXp@A3ZW<``~fA_386iqdu-h z>*M17aVs2YgXBr*P==r3D{M*8XY)sF`{%rKOD5akb z^=I|5C@bY>zXJVi_7U2Yem2&h-Cb-)j~iF=vtKDcOW)Jl6RA@kD=^!K$>jL&>C>;4n&eGTtF{5g2@q;`WlpTn(}zDJMQEM>dFqjs#he2<^78H={xlWccE zXdd~+cKZYQp6=`Cg2(Om!e3a_#edgD#)>54zu6~QESXsr@Yng^i|rT(@;!ZSRL>#E zjwI{WeN(bKb$^K+_qKfRPTjAu-^+e+weDQ9Zrz1sTK74#qR=^M<$K+FhLYKO%ySt@ zcBhW7wqqQ~_qu+El6C7ilI%_$ueW0)zqEKR-8xdqx^-ld-Kpan?HGM9#sG}bu8i?b zc8rmHulroal69ZUL^6FY7lJq1F=q0;?!GVw*`8$G=e#dj_c`w zRsOpYyrk9rk;Te6RaFdy;jZXJ0aXp8N)P zkN>$8y#6As<6jlDyv}}qkOi+d_kTC&ou}K^UdV#4Gq=xNX!-X1#aHufdGRsxR|0>? zK8G224s-Av_LiQ*j(P3ugP%PBKYO_Jv%A4dcl337dw(%U>PzDWzj8dw&AXCr9|V7u z-)lc^4iSI+>1TI%`*xA3FJ+-@XO0m&zbD&;V7o}R`?T5a_hq|Cw%e8WLmDrZ?LK9; z`vci7mhHOppU8HfFx&m1Y?sJ(-TG45?vrM_kI8naY-gs8zvyu@+3t_cb|07RGTE-X z59hMo$3J3RerMs5%XXJK;}x>qr_6SLAlnsSyHd9MwAt?WWxEn=SIKstG28u~Y*&Hp zYT51+X1hO>?P}SM|6Yu#k)CfO+x@ZG?&Gpu1GekQcAqrceN49Nf$jRT-N*m#9hbgr zce&#-knKKYwo{h@*shiBK5e#BmlkX{lHxXi~)w)>RXPF-eTySZ%lX|tWW%)xehvfXFQ zcIvVRw%eEOK4G>~mwm9^fowHEy>Z(F>l(5Wc> zkM_;m&n`0AZOr><=Y8ofF4hpdCKbEzc*bKy$Fp62Z#kZwqbxa|ou@24o?SQ>T(a+r zxqR=jMR6Bt`{Hz3zEv@YTFNHh-~(|7Z=J^MxRbKo)~60a*&N3}iXT3Xqi`t3XzRtN~dM zWPOkgK-Pk62(l5##vq%3Yznd&$mSs11KB>v4nTGYvLle)1lcW+-3D2(1NJ|VMIeho zmVhh;Sq8EkWCh4dkX0b7LDqn*2eLlM1|VxeHU!xSWMhy`KsE*03}kbV?SX6`WCxPH z@?7xBU0DwwYPJ)+l9s9T-gG2c@^Fw)4~w#!nmrgKw4SEymS)$2gn#$IWVbbYAV_rG z9_)hs4`dO@Vvr>uOF@=_EC*QuvJzw!$ZC)^AnSpw53&KsT96GvHUilgWD}50K{f-~ z9AtYS+XvZ!WKW$7p0fL&W;?-CcK?&?*#4(kcmLC@yZ>p{-T%&k{SRaj$YPKsAWK1( zfh-4E0kRTg707CkH6ZJOtPipQ$XbvMK{f)}7-SQWO+hvT*&JkhAlnDo0mu$Pb|l%c z{ZF&*{-;@Y|I@6y|D6Z>AIKt*#UM*SmVzt;Sq`!SWF^Qdkkue-K-L3UU$XA;XrNi= zc+^UkenF6az8rgontfi7J|Wpiv(F9Emq|9(?C~H?B%5gV(jfgD$)=ipc97EbS~|YX zGfkqS{s*!MWHHDRkfk8YK$e5709gsL3S>3N z8j$rs)|ae%JQ`@$IUco=9ozpj>+XM=b@xBby8EAI-ThCq?*6A)cmLC@yZ>p{-TyS} z?thwf_dm_L`=4gr{ZF&*{-;@Y|IxvJ7N7$O@2^Age%DgRB8r4`h9i4M5g{YzVRu$i^U>fNTn~8OY`! z+XLDDoy@$=EZ&a~Br_+$PtoTO=so&Svmi*Q2Ts|MWXH}!H0z#+Xx2Rs(X4wO5`z5? zWD&?>kR>2XL6(6m2U!8K5@Z#~YLGP`>)pxheDo#j&c{HrAV{gFO!Lu7cI-HyS@$@g zS@$@gS@$@gS@$@gS@$@gS@$@gS@$@gS@$@gS@$@gS@$@gS@$@gS@$@gS@$@gS@$@g zS@%5TGT8q>7J)1VSpu>YWEseEkQE>+K~{mR23Z5L9?1G28-T0@*$`wSkc~k$0ofE} zGmy?1vzWKo)~60a*&N3}iXT3Xqi`t3XzRtN~dMWPOkgK-Pk62(l5# z#vq%3Yznd&$mSs11KGZ0mv;g>yz=|`fn>+_L(RJTp=RCvP_yoSs9ASE)J*on6MqtW zR^XYynZTLAnZWZFI2W9M;Oosv$z$gC|NG|l^%r~R>Gs3-<-3(R=IC|1AX$7am5xL7 zMQe)?WD&?>kR>2XL6(6mKbDyf)tXw0W7(p<5@Z#~YLGP`>w&D_$q1in8Azs+L0Q|` zPW^@;8-Z*LvI)qhAe(hEt#2+_x4ym3c3R&)$PPeu2(lxP-2~Y!klmK7TVL=v*#AHl zfh_K1YLH0QeT)=j8OU;w6_Sx1ebJnkAge%DcQUQ7k*r%^4`h9i4M5gPwy17V-w^zN)_rb!ceb;B`ye|2+2NhcKE{z`-N(2IvRfd#4YJ^6VE+SI z1hN=p3CL2AWu1(k3;E@eb)Q?&+0O2NAge%DgRB8r4`h9tEvljV29jxg-QT;a{?s}C zTp88)_%jjz-a_5UwDtyMJ&^T5HUL=*vLVPut65qe&nEO7_r7rPJoGtIwhyuckR5{T z2xK=wb_-;;SF^OZOU-0VU)`D)$s*I5yP4M9&9vrjrZsmnt+|_N&E4!+&GP%)y1$qY z9|phw^S}Hes#*6JzDQyQpzO~6(*A4oH^?Z{{e}K61U(LA9`=`5_ZO+}*#7d-^JY=K zyTiYSbAtAlQ0-C8^bt_{B0sIUJ8v)0{t_Rn+3YWm1?TPg>fQDmx&}vI&$ZvY>Q#T| zb;jcj-TkJ!FFAgn$#uVx`cA`sW8Y^`%_n`o;hN2Uv)H@O{(C0y|385X!82EAz5j~f z_I=-EZl5rJ$L~Kix39gw4&G>Pf5P1VR&)EC_fO4VEV%P~qWb=N-h6NQxZM3c@jJ)m zJMX!ATwWyJj?4BuPU<`M{+e7#uF~vxk8!#;P^QPYZl>o%-AvDkx|yC6bu&FD>SlUQ z)XD7oE2^2c)8p6)IxgFD39fnRJPz$I)H~DXaf0@jP>;t_-|_v${F@8pf5P?`YmaI^ z>H7=UytKcd^L}oInH`4g@9Zxx_<6tGU!=Zc`^(P7op9$qbN1gkhouF##ls)zgq~lGk>r0*kc{5BarKRUn+x;VJO*GNJe%4n)%;O zFA9Tt@pmh!Zu-CxeGn-!xAY$RM)N_XH=17zc%%7+0Xn0kU$moNcB22EesPX|p^koW zfPSHXe$jw_0U=Gy|6XSP_k{VM`2`31MLhatDEgVZ{cooU^1ZJ)_BS*qa-2E4ITJV& z@GNjC$gj2Lz2H?rc;PMP_SF~m&%M>$Ub)=tzRlcz!~Nr(XUy&S2i_liySd$apbfs; z+!j}F2ZedP>-%DmyyQu9SHI|QPo-@)ljAPf&h*Cb{Orz}+wHEo-MKZlGneHjrsnXu z>btP!b{E&&?$R3D@v&yj?bh+5@z(L9?N-f=j>-f=jD}E;9xZ_9Lt@!PpKW|RwjycnI>-f=j>-f=j>-h2C zrCh_0e^+G9?bh+5@z(L9?NIFqwUu5qwUu5qwUu5qwUu5qwUu5qwUu5qwQAwOlH0o`@dMx>wU$q z`+nZpZXG`wZyi6{ZXG|`ZXG|`ZXG|`?k;|@zK&=+^7|ZvV_(O~;&pr!FHXpIXniG_ zo}y6}fh-1D0(#UM*SmVzt;Sq`#7vc(jbw+-6ABs;c$ zNp^#u#i@86$6og|FXq=~?!4}UJI8Oc%%SIPS`d=S6K4y_IFf%~Bhc;4&sBf?^u&kW4-N|VtO^#6W~+&?e(6S*JC{m1406}kU1 zxgW{>lqxXeU6=b$%KcdGzg+G=CinS4&Gw1h|2!G*3At}BPw{xKko){cd(8Hk-2Wo^ z{!?=Q&&vHk?$ceW=RKYKi&yCB|L=w171!QwcJx;S<<2|I?HhLL;GO37!#nBD_nO;} z?GA$PH@Dw#Zts5jn;<&Z{h(r2nhLUcgWTu+!rULo{d4mDcgg)k?vLgE<8uE!a$om_ ziQG@+`|p+ee38M7Kb8A0m+#NyzRvB>%6*;Nx!l*e{Rz3xe?ZKP_kOw0{|2eK|0cQr zu#EqV+$RHizVDFxkI4O2?$h5xq3;jn{)2LVB=_lWs2EQBep8R<_%h0LenPpg^K(V+ z>-wopq{Zj7J{L<$V)M<3(FYtbxn2etHyX3w;@3Gw1=lveJug`lT z_w{+dSMKZcp2~fy>xVk;)nV}+-RotGd4Jz`a<;SksZajVzxb^$*)jF>BzyKVJd?Ct zTI+UHv;5m=!EEuf6ww#`YzVSQvMamE?tRH(yI8X8k0;?5NtQ?!zS#uki^faAcp1oY zkQE>+K~{mR23Z5L9?1G28-T0@*$`wSkc~lhY>wm@AKhincke#up^mppld<8Pn}5ZH zewybp1~u!P^G34W*_@ky+X-0RZO(a)WX@xm^Tn%oVc*E>clYb>`Z~9B&hOD1&iTb) z@7eo)`}mwcJ3M;!;?W}0Io}QTc-qfi=L?tTJLfz{GUv%%Ug!It`Sji1+wGjwIl`u| z^Yc++=kn}z9)#O^Z|6CZIZy90=g~v!z0UdHVcPI@e)itZyS&}+w>9THM>6NxUFQ5b z&f)Cq{32Dn;hdv$xb(@hb2!}-=va0S=Wwx}bMYLRIY0fY{ncl%6a4HoTHjv@rq}j6 zpYPA_vTyJ1K5@5WSgLOP`R@()ZP)K--D6@7&gTk{l_0A?R)eeoSr24=kPSe#t@ksY zBY8h7?lR{)yG42HPhOMS_cQ(s_l9$h-p}rBO?qd&b2jJZ_hx0?!E+>YUOJfb%O~m> zb~fkT&`*%iTd8ob0l-#b1>%*(1SRf z^Lu-ppUpX%bDkra^Zs4teBHhR{hJM&&bjNgTKD;$owo<}It0&=ne)|E{N~AS@Yn;i z{=Xi4`0@{!+oQ{`I``(_8uv%(J!Wv%eQUkz0NhjG@cqQ~zIApTKwn*pb4opi@Epne zNh@={E1S}OpgpUdV!ibN_whHJ^L2YxmtU6be15Wc9@?k8@7W~ymM0cj2Ck!=y`S7U zZ{RtSIUnBTb^fL`dsh5ejSc6VC(Z0{w6Dcr-V%`Moa-JK7-R{^QjldJ%RyFvtOQvFvKnL!$a)~_gKPk@7Gy(^jX*XA*#u-$ zkj+3g2iYFT_Ca<4vO|y^f$S#8Zh`DJ$bz2+`ya?6ki{TNK$e0m16jVB<$8?dH=c8D z*ID|SJG(s-I7tEz1ix{O*8SfQ99|il+gCsESU|Up+`h@&{)o9hmfN3|+XHj^Zj=A6 z+=f>d_n$Dgf7|56)%OQKX>LDtwGL+H_O;jA;JuyCKL_&uaO2vIt2Z9Faix1Kx^e%F z`#yT{qZcTPWIMXASuEMnOYZzGSOVT}QjldJ%RyFvtOQvFvKnL!$a)~_gKPk@7Gy(^ zjX*XA*#u-$kj+3g2iYFT_Ca<4vO|y^f$S#8Zh`DJ$WHjNDAi-p4jqilv8a3gb}z3P zeea?165x`8ECX2%vI1l!$SRQ4AZtL@16dzr1CX^K8-i>EvN6aeAe(}02C_NG_CU4| zvICGEg6s%nH$ip_WVbu9 zas9@_Hy)xn59R&f#)CH^I{r`=X=cvf=$wtR7`$&JAWK1(fh-4E0kRTg707CkH6ZJO ztPipQ$XbvMK{f)}7-SQWO+hvT*&JkhAlnDo0mu$Pb_BAUAiD*!+aNpP#~FK#%`9sc z=Vs;vO|P-V!MF48aL&v-CVhJ+i0t>;mG3=dzc*U>UT4hWE@Q5IuQTS#_c~*?cNuf# zdz~?tzDJ)c)aO2u&zI8krY}BLfNUUH_jjIK$>?{UpMCaQ_-DtGnLh<&$D2qNJ^0YW z*B@CtMqe`CNFFz7FYr9@`LkrftB0KN#F&icPiv25dlS)DYic)tr*kpJB3hh--`TFv z?abflJoZ@TZ!+8&ckfGI#gF;H?Dy#adW}pDC7WFN^3Q0tFWH4Z{pBC{glu=D+YSH2 zeckRrvX9bevfWMH?gtkc|98#*Tnt`+?PmY6N-FTETeI7UB8=rOK#W!9;nLdvj9Rq#b-9>@V`8>K-`aCG3A2*K?9~;j+kM3)x zzxuq>-tmkdU$--#XOGC2YS-<$-nyOnTLbhbZ~5_cJAFQMd*{92BJUR_qOaDBn@8=j zY(nGf_KAE?9y54%=X*h$$ykfOifhISCm(uccYLmUx|*d&$Fm9jY_O-}QE7|kZ2tQ0 z%6Mx&MmRhE7+lL7WXEdJ{jOMj+#rzp_RM5|$)dhJkcFGOgj!2?jzi!QdUWAh#3ckS zAu!knS>(Wl_GRr71A{}5 zB@SH7;oa^p32;d~x^OMxk^q+k7#x8tb>PCk>npFL6u6`wUAPu;Nr6iW3~qufbKpY9 zYV*afqYSuY9$mN=amj#71`KY2EO+3-ze_1DIdI86x^OMxk^`3<7~BR~;lPD|-%wl% z;8J*W;abF{04@bE2zFM_X-Wq!mpiYc61bEeUAPu;DS=A~TteVdIdI|MTa*2z0xs3| zU1B}Q#$~X7h4OhAI%pZM;qYMcy!@f#H9f)4RA?- zOV5D||8A4G^ngpxqYKv}E3W={s=Y-~SPpK5*%Kbm3aWr4L;Cz$F7N0|zer zyDQ={04@WME?kSa41mi3xa7d4b>PCk-ytq7aA`fda4q7}0+$xJ6u@QZz=eMYLR^Nx zW$4j`YY~?ra2W!Z61a>UxbW`@h|37Lj6AwwlU43a^ubU(oRuXxtOqS?xnP?tfVydQ|&w<9zAr;|9B{*NXO* zvXgWjV8`_TY2AM%sIPsX^ZESH!MssVOy?~G^A>J@-t1bNYmxmr1oIXy%@OTa`yh)p zcd@llPfT4R;1YRs;abEc0xl6SH~?Afz=e8Z>JkH&*rN;AA}%p-iGjf($Px!G)Du&e z1h^y~UAPu;Nq|cN430pSI&h($n7X9ECH3gSwTMd!TvA|g6J(hK7wUo*;8Fq?^V!WO%~J@>KLKGsi&Z&rp`Mt!RKTV3=)$## zO9fmi;1U6s+JOu8mei#NF11G&u0>pG;8FvZ7`QYJTzD-g>$e8DG#*{J7IA5SO9NaI z;L>y8LcJy3UwXi$=h2005tklt=>eA%xbz*k(Deg#=>wPk_Fe3HpKB49K5*#+mu$)9 zB(3+CYoY!>t^co^zx?-*x&7GX_QKQMzyG)Se5U#t3hIgJd=9{T4z@p^cJ0lz$b1gK zd=9{T=1cQQ*9O|nU2HAX6H}KKxU?Q!xE66~flCWq3g9wy;6gnybr}Mep+^_4MO=o! zWe8kK;4*UHLOn5c83C7(M;ER|Tt>iU1Y9cMGIroXJu!6|1DCN!7p_HI#=vC^Tx#Gl zao|EdF?E>$mx)Igu0>oXz-0nl8sIW@;6gnyb(sQ}sYe&CMO>!9WeQw+z-8vZg?eJ@ zG6OC%k1kw`xXggd47l`x%iMtr^~BU=4qWEjcd_TAT#LBOfy*4Y43=D8W1f%g&%IUq zY4_HjGkt_bf9@A`Jo6yti_VpT-PJysUfml(Ljz~B&Mi31nvIjKtmT$1g(*!N$qMO+f#k^qCFrEGZ({zBfT{y(kz7ybVW z_PCI4K5wb6`>7|U^Ok~nOSeC7_Pv;Ek$FqOyroNXv}2B2H$j$d?qX}9o|w91z$NqO z!nKG?23#^=a0_I)0~hLvsY?!Aa*r-ti@4;#B?kt#K~^|$p`Mt!6u_nM=)$##O95O8 zU=UnbJ?APNxKK|_T}t3mdUWAh#H9o-C2$FWOXa|YdSdEQ0hh|73)dnp6>zD5O9WhM z2QJhTQ$_k^+~$0~hLvsY@TY^gX(8E#lG#E`8vV0hfUT7wRpk%K*3xJi2f# z;xYg(1K^Sam)3y`^_JA71um^e7p_HITHw+Gmjbv99k@_$NnM7(W$4j`YY~?ra2W!Z z61a>UxKM9NT}HrVw0#%5-sf7xWdvMCz@=Jpc_G*L&-K{U|EKl;^`O1*u(^HLg`>-_ z2_ClB0mhrpr@an9Ju#inF__Qs_UF^Cy}1^d&oP+KF__PKX+C$%wSmdzF18lxiK)v3 zxJ*2{a4q680WK5Z(g2sK0~hLvsmm0&Og*}AE#fi-E>qyr11>WMF4PlKml<%Gd351g z#AOCtX27KnT;>j3s3)c_bKo-HzKcCxa4q682QG8qGFWnX+B_fIpL?73)9$T5XRhZ@ zcBmKkOFEu;5c9>^xz#?|Hv4nu#3%Uj)yEAku3jtJ16jDai+%s4o|w9Xz$NtP!nKG? z2wXy7un)4xfs1)9S(ga7L>^tZ7IBGyO9TuKKo&c2p`MuTFEMb5J-To$;t~Uw7#JLa zEOFpMJu!7jfJ@@hg=-O)1h^!?;0R=?0~hK!sY?o6QjacNi@2n~B?SgIL6$jip`Mev zWWXi!=)$##O9osrU~mg$xdRvKIjKtyTyl>tT#LBmz$FI;w?S4oaG{=)x)i{r*uINB zzvEiOr2sAkFbFOkKc{)FHM!64Q~#gV{fqwpWqaOPZa!~z-A_F+owpLqTe_@;abF{1uiXcDS*q+feZD-)MW@B&3-!d*WdvMC z9$mN=aTx)Z5pb!1%h-Vn^_J9S3|z(@UAPu;83UIwaH)aI#DNR-megeeTqYh}xE67l z0GA1HX@JYrfeZDP)MW}>rXF3m7IB#Zmnm@R0hgHr7wRpk%M7^8w(nxs`&^5-%z(=b zxb&A?e6Hu8?_*K_pVt4^gJkErxqWJjccfA0KhpKP1`x%1)^yn6L< zgYfvZEUIr0WZ~v6_Bsjm#MC7OE}=&ku0>oz;1U9ZeUL>CT&O3eE)j5vJi2f#;t~Ou z2pAlIEOy{x-easw3|wN5E?kSa#K0v628SR^9Jo+VO!t=rxFjB3xE66qfJ*`ljzE?= zaG{=WQgK23#_aE?kSaWWXf@2Dd<#J8+?%n7ZV^ zCHLsUwTMd&TykJ=8)St87wU#p00zP3)pMHCfeZDV)TIP2rAHU8 zMO;eYQUaF{xKs{YsOO|E6>zCMx^OMxQUR9=xJ1CEcHlxiCv~ZTOYPBxYY~?kxYWQU z1}=>Q7g}qnO9Nb*?Yr3P0bGl?G{B_+F3FP1^IfBFb9-9<)4Kn95M6o1+&*!oI`{72 z0lU8KZ9ac?{ZG9yoxdKKzuxxe&#o!C7MZ^un7HabRE(4D)T#L92fXe{5(Pa45tkOY zw7{hRE<*<{)EiTmA#fRbbm3aWWe8k`z@-E(BL^j0C)EiTm zDR7y3bm3aWWeQxTz@-OVW)57aH>NH#;4<^*!nKIY47kjIOCPw*9k@`BNnPf^WxjnE zyI$d1#AOa#=D=mJrp;`k;jdnxpi=1wePgee%A%@ z3I5#b;|BMwUK`p2S-822T@O%?NnJwV5_)vuTEry;E+H`32U+C6g?dct5&@TJ`!4qN z#I=Y^1Y9CuaIlnZb3Olj$EMH!)4G50`TukFbsld%Z+6{JJuscO7|dI|{du#mEv`l8 zEe7)zFU=9X4;_Lm+1$m}VvY^gB>^spM;ER|ToT}t0D~itr4C%ozG7Wc;F5ZD;abEc z1uiKtxCye%feZD(^mUX0m&~IJ*CH+%aLItdEs*67T&M@8E;(??J-To$;*tZG92ndN zS>eEidSL2O0GGm}3)dnp1#l^VL2&=-Ialexg?eD>QUaIKqYKv}E+ud&flCNnDhDpq z15=j@xKtipxE67#fJ+5jBH&UxaG@TUy41j>_UOX3h)WGzYTyzBm&Sn$tp(Mk0WOV4 z7p_HI8sO3Zmjt-<9Jo+#NnLutrRULwYY~?oaOnY;6u9&qxKM9NUHZVK@6m;85tlx2 z=>wMxxC|V)P;W_H2Eb+D(S>UfmjQ4Y0GAxNv<_UTx1=sDaA~*iV%Pgzi@3DFr3Eg< zlFRd5ll$DB`v0{4zaGpky~x~t;L_~U>w*XEb%5dK^J%XGP)|(fa|q^hxc&LGYj3Va z=5q+o%z-0tnD&R79;6gnybr}Pfu}2rK zMO?r7p_HIrod$i zTzbG|=D>w|V(KyjE;ElVT#LBOfXfWH^nuIVfeZD-)MXA_=G%9%=NDXyxXgje9JmaY zTwZ6MkL}NWhxXI%tv_e3^DX*wzpUe#2QgoC>=+T915tk6Sguq}QWRU}x-HuBHTq2JyT#L9wz$F3(2Ox_bxKPhY z_m>#B#2#I^7IBGzOAHJSL6$ghp`MevB)}!{=)$##O9EUHU~mMo)PajRCRvvhxTGFk zxE66qflCSuZh|ax;9~X_>yiPNZ2K8FLOn5csenu6(S>UfmkPL4 zz$F4MwF4LGiK$BsTxyRlT#LBWz@-K*F>q-dxX@ZqT^iuhcy!@f#H9f)4RA?-OV5D| z^~BVr2V8m{UAPu;=>eA>a7lqn-+>GD#MGq^T>2hexE68g1D8H<$$-nifeZD-)MWr% z1|D6w7I7H>mjQ6eflKSag?eJ@(gK&(qYKv}E-i3rflC2gh7Me)x1=sZ;4<{+!nKIY z5V#D1O9@;?4qT|Wq%I@iGVcy7Kbi z5qlkAy7_$C>j2af)A^i&`J8TlKJD6@Ymxb!g87_+`RpytCtVwuZSG=gp`Mt!%z(?x zqYKv}E;HaV11^2wGI!uYJu!8e1DE;sUF_?hYY~?@aG3*_!II0n&GWJSx$o3|+P(GX z%=N5Af9~(;c;-RO7wwzDrPV&!Hv4mz#3%UktB)I8UAr}Jx^OMx5(AeQ z7#xBuao|EdF?C6ROXAUmYY~?OxFo>f2xO@P7wUVqJ3Jl6!RFTEry>E;%r`4YI<43-z4zbyNVC z!lMhzD5OSI(jLaz6hADhIrD zdi(Qd*9csT%wG-WuLkoMFU=pVv6{_YY%R1VRF?+0G#*{J7IA5SO9NaI;L>y8LcK9{ z=>eCXM;ER|TzbHz2V7F%(s$ruUY^#a4_x{lUAPu;=>wNOaLItnz<~?(#&mxf0GEMB z7p_HI2Eb(iTyo&jI&h)hn7XvUrS<5-wTMd#Tw35#0GFWy7wV0v%MiE>J-To$;xYs- zL*P;ZmyrV(>W!((2)K+qx^OMxG6F6m;8FpXu>%+Cjj78RxQsoza4q681}Ykz@-md<_=t_$D}TE;4r}Jx^OMx5(AeQ7#xBuao|EdFm*|QOXAUmYY~?OxFo>f z2xO@P7wUnjOA1_4k1kw`xTL@(1qL@kmN{^t9+E;%r`4YI<4i`iGKO95O8k1kw`xD>#p00zN>tLI#$0~hLn>FcNj zE~Q5ou0>o*;8FsY5V%whT&M@8E){U8Ji2f#;!**Z3b;hTrFP&#y(M+2flKYtg=-O) z8o1QJB?c~y0~cBgs!Ic08jmhqi?}qvr2#GpaOpX4q27|Z^ngpxqYKv}E3W z={sj&!62QK~XyV&(U*CH-`;L-;!*^@QUI5s0~hLvsmlWQh#7`Ti*x^OMxG6pVV;8FvZi31nviK)v3xJ*2{a4q680WK5Z z(g2sK0~hLvsmm0&Og*}AE#fi-E>qyr11>WMF4PlKml<%Gd351g#AOCtX27KnT;>j3 zs3)c_bKo-HzKcB{S3dUKXF=D^?#jcxd%n(H_Xc&0TCQ)N@jo5V(XMUAPu;34u!p4E8}5 zIdGw#le$E}CGzOPwTMduTq0m_0J7MD3-z4TB?d0BM;ER|Tw>r71A{}5B@SGu=cFzP za7niBV&8wc7I8^{O9Bjzma^wsll%NW_5W$zzv%y8u*ZdT^La~k-A_F+owpRsTe|&u zv+u=Ri_BXJ<}F>CBRX!~1X;GZi>-xvV(O9sm&~IJ*CH+%aLItdEs*67T&O3eE;(?? zJ-To$;*tZG92ndNS>eFNoO@cA0=N_&UAPu;DS%4>41$MO&$&tmE@oe`E+ud&J-To$ z;!*;a61arGrE=gxJu!V9Rlue4=)$##O9fmi;1U6s+JOu8#MGq*F11G&u0>pG;8FvZ z7`QYJTxcz*E)8&LJi2f#;?e+@2Dl`^rRTtfdSdF*11>#}E?kSa^ngnbxTL_P@4$t6 zV(QWdE`5(KT#LB$flD8_WWZ(Mz=e8C>M{T>1CK6Ti?|Gc%K*6Kz@>HILcJw*X@N`Y z(S>Ufmln9Rz@-2#LkBL@TT+)Ha2a}Z;abFH2waB1r35Y`2QJiGQkM~M8ExOiuJ^eX zaTx)Z5pb!NTzszQpYLN)|DV?X*Ms)Li_Pu3E*xEcP4KY24lv$)KJ9e?>WS%mj=_A6 zw?ChD?aj5we2&3qw#_2|O2h|3hXOo2-exXc{5P)|%Ufml<%G0hc~-nLBWyo|wAKfy;dR zF7|lAwTR0cxXgjeV9Dia^L%W7?z^?0c5nSTvkqVM=YCbkGY?|E=)EksZ?#Xh&Hmhd z;uHLZ)yEC4uU;$K16jDai+%s4o|w9Xz$NtP!nKG?2wXy7un)4xfeZD-)FlEgkw+J< zMO-4_5&?q)ki`yMs3)c_F>r}Jx^OMx5(AeQ7#xBuao|EdF?C6ROXAUmYY~?OxFo>f z2xO@P7wS2wOA1_4k1kw`xTL@(1qL@kmN{^to|C#{z$NqO!nKG?23#^=a0_I)0~hK! zsY?!Aa*r-ti@4;#B?kt#K~^|$p`Mev6u_m}zKcD-<66X}04@bE2p&0pPV;=%=-b?$ z`v0`piz-0(rO5ieb;6gnybr}Jdkw+JKq1C3Tqsm#Ie= zu0>p?z-0M{c^v+cXs^*+}kE;HaV11|j~mu;@!?{#eI|I_;adXVhA z#N0l$Q(V0oJZi54%r~D;dmVs!VmhC5FrRae^U1Zye9pmq&cS>Rmge()=K0wE+}pLE zc5nSTv))|v=RTz4nFldn+@HIDwNJLq{@nfI6Z~7Nj~l$`__ZvmZx3YQ<}UU+3H8L( zB?K;^M;ER|TteUy0)u^!MGjo3C#EhDaEUy+a4q5z0hb6E9Dpo#;6gnyb%}vX?9qj5 z5tkUa#K7PXWQhY8>WQgK0$dW0E?kSaB)}yB21g)E9k@_WOkGmol6rLETEryo*;8FsY5V%whT+CX)x>UfW z^60{~h)V@rD&P_Um)e1g*;lMf4P0uEE?kSa)WD?%E-`Rv9JtV0OJ7F~aA~&hVy_2q zE#lGumj<{bOD^}iW_S7XwEm}c|Meic@|d}O;!1Vy-N6HPecRi7{_OgndSg0&JurX0 z?a!ZGQ*tdbe?2gNJurXi()`hyx4*fIt;KL#mp*XmdvxJi#H9~h`oJXvE&~TH)Em?N zWdK|T9$mN=aTx%Y0dUEIOY6XedSmL+0+-gK3)dnpEpTapO95Pl4qT`=rY=L^GW6)e zwTR0QxD0_y30y`FT&OpuE+gPF^60{~h|37LjDSl8T*eMus5hoAW8gCO=)$##%NV$f zflCcsCJtPvH>NHV;4<;(!nKIY1h`CqO9Nb{4qT`=rY=+9GWF=fwTR0UxJ-dd54g-6 zxKM9QU1q>#=Fx>~5tkWonE{tRaG5)Bp&paE%z?{%`!069!nKIY9JtJZ%V5dn<>vX= ze%Cv+KXq^YE;HVu-}PY~&pe3vqI2uu%4*+foBggU;uHME)yECu)oVk0APYBlvFicq zF{w)kTtbg7T#LAbz$F9*`yh)PxKNKtT_WHTZQsSdp12lqiGWK43=Wnum+SX?9g9By zPwW20=l{>y*Ll48yxDa>^}uxAVlZ#<_UFyMwzw9Vw;0S@yfjDjK6D7OWOEl=3-!R% zB>^spM;ER|ToT}t0D~itr4C%E2c|A5a7jJ7a4q7J0+$pR+yq(Xz=e8X>XHGM%%cm} zA}$$l$$-HvkmU|ss0XGlIdI86x^OMxk^`3<7~BR~;lPD@VCqr;m%^h9*CH+ja4CR6 z@L8+pT%`jS>Vc_C30z8#E?kSal)$9~E+KHK9Jo*qOkFDAQh9XYTEwLSE){TzfJ^Pb z#jN41OATCVk1kw`xYWR<1}-shX&ktieZ{&oz@_o%!nKG?16&&5k^q;U0~hKo>FcNm zTzVc|xE68g0hbfeZDP)TIwx`W{`l7IEnVmp*XGfXl#v3-y-NWdK|T9$mN= zaTx%Y0dUEIOY6XedQ0lk0+)9CE_S`owTMd#Tw35#EVWQh#7`Ti*x^OMxG6pVV;8FvZi31nviK)v3 zxJ*2{a4q680WK5Z(g2sK0~hLvsmm0&Og*}AE#fi-E>qyr11>WMF4PlKml<%Gd351g z#AOCtX27KnT;>j3s3)c_bKo-HzKcD-;9A6G4qWEIWw7M(y2bNZ^v>R?{j_`Q&zbeZ zqCfX*I-YqD^F_zL;DOaX**5!g4~S3jZ?8UX@Z!~LMSCC%H+QkeYwC%qO9)&-k1kw` zxP-tZ1P1#ciyXM@c3dLh5_xptTEry+E)g&|09ow7g?di9zr?^L_UOX3h)WDyVqkCx zvc!Q4^_1X!94=JRIP{nQiFdCS4P z<=dY(d+g>~WZrTxZ~4+3(Rt2okQJM|*jlJ3rY;3=DLlGxE#guDmjW0BFIhe3Djm2` zPfT4(;8J>Y;abF{1TH0T34u%Hz=e8Z>QVuh%A*U{A}$qhsenraTxtg{)Du&e8o1OR zUAPu;sewxkTw>tTIB=o&aCK>bOXJanYY~?QxHP~e0WLiUF2=;V^ngpxqYKv}E3W={ssi!7IA5TOAA~I;4*aJLcJw*83LD~M;ER|T!z492wY0wGIHQTy(M)S z0hf_S7p_HIM!;nRTq@u)cHlz2C3P7Cm$63|u0>qNz-0_vYTz<);6lA6b(sK{$@X3B zdY@|%mkDs00GDRT<@v73eQruSOGXg}@V`g7)`y6DgSeI3s{i20&@ zGq}3iC);L!?yC3%|IX^;29K>?E7}8DxVejcJyB0gT|(dzdUWAh#3ckSAu!knS>(Wl zdSdDl0hh?53)dnp5paos!2!r(2QJhTQo@;F1D^n;^>^xKK|_T{7U3d351g#3chR z88Em7vfP0S^_0{g^bmu0WOV47p_HI8sO3Zmjt-<9JrXZzjf&Wm!3x#u0>pWz@-OV zQsB~e;9~X_>(U1W!((1h`B*x^OMx zG660V;L-q>sRI}4F{#TGxJ*5|a4q681uj$I(gQ9t2QJiOQkNNUnR#^KTEt}rTxP(f z4_xLBT&TySE_2{A-@c1o-*PSDG6ybm;4)ZpG0(-WAA|4J{?xtoyUcmjqTluFI-YqD z^TqwHYpZ=H$NetrLyvh)e1d;>^>KsGS-m#2x0F5Cn%w92>GS`z?q7WVf5*;S=wRNc z2d48Df_V$KKW}!e&9%t9g<#&or8%PgY9D0L<}S7t>Vc_C1Y9DIE?kSaM8G8i1_vOE z9k@^rOkHB&5_@#vTEry=E-^4T1X<$1g?eD>k^q;)qYKv}E(vf+fWZ;SQU@;715=k2 zxTGFkxE66qflCSuZh|ax;6gnxb;*EB=Fx>~5tj_OWWeAS$Z`iR)B{tO9Ju5jUAPu; z$$?7_3~qz0aNt5cFm)+_OX1OlYY~?MxD>!3coL;L-q>1i17ZxKM9NU3$Q!=h2005tklt=>eA%xbz*k(Deg#=>wPk z_Fe3HpKB49K5*#+mu$(!=X(D6J{I-=Y5jjaIJ%se+mBstFFbAZ>2*SD;KAnenI3&; zaec(hrJc_Kn9srX=hLpexfYqv0hrGLn9qD^KFOus+{M;HJu%(STj0`qbm3aWr3Ef6 za4CSx(18o}#MEU7T!tQ9xE6640+%6hDS^w#feZD-)MW%*MjltAY%fx{T^~BU=0$e5@UAPu;nE;mwaA|eCS0~hLvsmlzw%sjeqE#fi*E;HcL2QG65F4PlKmpO2mZ{Nk9 zk8&;IG6ybm;4)Zpd5w8KdVUv-w4Ziw{W){~u;|Yn=y>Kq%om+21<`7s%yECto>S3d zM&c7xtB)HbtJjM5Ko)N9Vr!wEle&b!CG_aRwTMdyTtZ;553!z9O9EUH zU~sgQJ>NC@Hn*q#Kdt*0{r?O0xR7o>Z>g^PsVAoMmV$Xpw?A+8y_jo}c}u~(rAu=} z$E}+n%QknhwNOt?T{7U3d351g#3chR88Em7vfP0S^~BUA2QIls7p_HIa^R8!gWDi0 z9Jo+VOkE1#Qh0RXTEwLQE(I_M9$!7@Djm2`PfT4(;8J>Y;abF{1TH0T34u%Hz=e8Z z>QVuh%A*U{A}$qhsenraTxtg{)Du&e8o1ORUAPu;sewxkTw>tTIB=o0pt>}`rSa&( zwTMdtTpHk#0GFNv7wUZf8m%alR>WQgKAGq{Ax^OMx(g!Ym z;F1BCfddzFjmWwTfXl$63)dnp1K=_ME;(>%9k`f%#k#b>rS<5-wTMd#Tw35#0GFWy z7wRqP>u3mEh8|tG7I7H@mmzQ|fy>B&3-y-NWdvMC+jp_+eXd1ZM!;nRT&g9PZLZ(% zb!_VY)B68<&|Y}l+`j9=(dE|!58LYiwO!0~hLvsmmO=%(w4ij~85vxXgje9JmaY zT%I=1$M)yGPy1>2)}J%S_eFp1ALw}ILChDumjw^5_Q|%{pLUfmk78-z~BI6u>%+C ziK$BrTw;$dT#LBGz$FF-hagKFxKK|_T@v7ucy!@f#3cbP2{1SUS?a)rdQR$+0+-aI z3)dnpDR4=F!A+254qT|`q%Ik7$vnDnE#i^^mkb!(0$J|Bg?divk^`6AqYKv}E;(?? zfx&H%6%Jge=cFzLa4EL$V$bim7I7(nO92dm&pm!lbFXW5mp@Pae_Ho1`u~^hd1tx# zyxDa>^~7}EN-%Hb_UFx>>v1hIZzY(w63kn;G;egSTy5@RYoVT)x>UfW^60{~h)V@r zD&P_Um)d~~^~BVr1}?Qn7p_HIYT!}>ml(J-4qRw0s4fj~X*{}cE#lGumj<{bz@_KF zg?eJ@(gQ9%k1kw`xb%Qa54fbjrSHIndSdF*2QGb&E?kSa^nptsxMaX(;J}4?V(Kyg zE(4D)T#L92fXe{5si!7IA5TOAA~I;4*aJV)hm5G6XI|k1kw` zxD0{I5V(}UW#qtxdSd!I8UdG)M;ER|Tt>iU1Y9cMGIroXy(M)S1DCN!7p_HI#=vC^ zTx#Glao|F|C3Tqqmx)Igu0>oXz-0nl8sIW@;6lA6b(sQ}sYe&CMO>!9WeQw+z-8vZ zg?dZsG6OEN?Yr3ZKGz~HGvG1eb*;dmUiD z`Fz^z0MrxH`J99KoO_&4u0`f^4(4+X=5w$#pYJoz$M)yGU;AnI)}J%Su|5APYBlvDZncC#EhTa0xxSa4q5z0+$dN z?1LWQgK3|wN5E?kSa#K0v628SR^9Jo+V zOkEP-l6Z9CTEry*E(tI=0$J+7g?eJ@k^-01qYKv}E-7$Hfx%6XWe!}ZC#EhLaLGKn za4q7J0hbII+yYtdz=e8Z>XHMO+@lNEA}%>_$$`ObkQEMGs3)c_1#l@mx^OMxQUI3% z7zCfUdQMY1aG{=)x|G1B^ytF1h)W4vO5hR#m&$<)^_5ELTfE`X@E;CIObmeo+?Gsn3bMH3)`ns-fdz;UnUH?;WOy{o$=C8N?`Lk%9k@_$OkG;w(t32^TEwLVE-i2=fXmQ{%jDX9?qYKv}E+gPF0xlJB89Q*H-k83Q#=vFl(S>Ufmoab|1D6`OOdPmSZ%kb# zz-8jmg=-O)32>PJmj<{@9k@_$OkJkHW$Mv|YY~?zaG3&^9&njCaG~Cqy3Byf%%cm} zA}%xFG6ODs;4*jMLOmvRnFE*k_Fe3Hg=-O)IdGW+m%)Vc_C0$dW0E?kSa zB)}yB21g)E9k@^rOkGmol6rLETEryUfW^60{~h)V@rD&P_Um)d~~^}y7n1}?Qn z7p_HIYT!}>ml(J-4qRw0s4fj~X*{}cE#lGumj<{bz@_KFg?dZs(gQ9%k1kw`xb%Qa z54fbjrSHIndQ0lk2QGb&E?kSa^nptsxMaX(;J}4?OX@NJE(4D)T#L92fXe{5oNi^Babdz zi@1z{%Luqsz-8>f#q2BAWei-#9$mN=aTx=bF>tAY%fx{T^~CgbGyyIXk1kw`xJ-b{ z1h_Q7W$M6%dSdD_1uj#ME?kSaOo7W3xb%R_%z+E_#MEU5TxK3!xE67l0hbwY=>wO! z0~hLvsmmO=%(w4i&o8(ZahU^`IdB;)xxCIiA3a_N@6vwSz4hnJ>wD3k`wbn>Jc#+C zV_$H6wNJLq{@iu(30}MUxIwylt!NKq;pQ&(cuhSqbqRq>=+T915tk6Sguq}QWRU}x z-HuBHTq2JyT#L9wz$F3(2Ox_bxKPhY_m>#B#2#I^7IBGzOAHJSL6$ghp`MevB)}!{ z=)$##O9EUHU~mMo)PW22oYW-+E~!Tsu0>o@;F1D^n;^>^xKPhYT{7U3ZQsQnuela+ z$$(1+3~nuDF4yn(Iu`Z+Y2Cl*|6j7_5&7oxX4n1H6VrLi!Mx?$pErB#=2~RlaxicC z(j3uw&TWtto4eRrs3)c_1#l@mx^OMxQUI3%7z9tQo^zEBT&O3eE+ud&J-To$;!*;a z61arGrE=gxJu!8ufJ^1kg=-O)3b<6jB?2zB0~hLvsY?x9YL6~li@4Olr3NlBaA_R4 z&{|Mk8sO4+bm3aWr2#Gta7lnm&w&f|#MGq+TzVc|xE68g0hbfeZD-)TIwx z`W{`l7IEnVmp*XGfXl#v3-!d*WdK|T9$mN=aTx%Y0dUEIOY6XedSdF*0+-gK3)dnp zEpTapO95Pl4qT|Wq%K3?GW6)ewTR0QxD0_y30y`FT&TCCE+gPF^60{~h|37LjDSl8 zT*eMu%r$81G6pVVk1kw`xQv0z7`W8HW#Yia>?_t~0$e8Bcd_ezu0>oXz-0nlnkAQe zU88UF=c)fs>;LOPb?)=b?d#7)S6&`GVy^>CH=j>?9e{db`ud-O`J8TlKJD6@Ymxb! zg87_+`RpytCtVwuZSG=gp`Mt!%z(?xqYKv}E;HaV11^2wGI!uYJu!8e1DE;sUF_?h zYY~?@aG3*_!II0n&GWJSxgXSi+P(GX%znJ+&;4T^&pe3vqJ1-XWVKJW&HmgY;uHMk z)yEB9zIv@_4`kuyF81|AJu!6&flKJog=-O)5V(ZEU>{_W0~hLvsY?W0B9AUyi?~F< zB?1NqAd4NiP)|%cbm3aWB?c}rFgOHR;=qM^V(O9rm&BtB*CH+na7lo{5y(;p zF4PlKmlU|99$mN=aY=zo3Jh+7EOX#OJu!93fJ^4lg=-O)47g;#;1UfmjbvHz##ZnR?lfl2QJieQkN3AlpbBU z7I7(oO9@;;;8Hnop`MevRKTU$zKdNCa4q6e0hbE6L`yE)T+ct>v1$EJ>;CIOarN`f z?Q5?lJMRnbx9gR9^ZB#uf9j3t{MBIo>g~^;T_bQUGJiFgzZ%S6yflBb#%eZqv9-{e zP+c0}(s*>?TEwLRE)8%=fJ@JT3-!j-r3YMk9$mN=ap?h<9&ky4OW%Qud3jowK5*%K zbm3aWr4L;Cz$F7N0|zeD8`J$|09*zhUAPu;83307aLIv7>%fJ2W9rfZm)4^T*CH-0 zaA|={0bGU-T&OpuE<@ll^ytF1h|3VT41r4tTt*IDs5hoABj7Uf=)$##%LurPfJ+5j z#tvMlH>NIQ;4=2;!nKIY7`TjqOATBm4qT`=rY;lUGV$obwTR0ExJ-ac16-yKT#Siz znF5!oM;ER|T&BQf3S4@?W#+(zdQ7^%%z(?xqYKv}E;HaV11^2wGI!uYJtlRT1DE;s zUF`anYY~?@aG3*_!IBG|8`^%?4{3ku-uhi;z83wif1=}=2QgpV?|RW{-^p>m%lgn` zzDRt6e{c11gIBCx8`@jSp6?oco7>ap|7qR7`27Elowv}zyipHK=Pd;D7H)su>{^>^ zk$DTjyoF11MElh~$fC_%Y%SCSQ^tZ7IBGyO9TuKKo&c2p&ppJ#K0x?=)$## zOAK6MU~mYs#DNR-z|oD;F17?Bao#IT&M@8E-7$HJ-To$;*tWF6d2qD zS?0indSL330hi393)dnp8F0yf!7Y&G4qT`QrY<>f$vwJoE#i^`mmC<}23g_2g?eD> zQUI62qYKv}E(LHYfI;wutLI#$0~hLnsY?l5N{=pFi@21)r35Y^aH$-)P!CL9D&SIi zbm3aWr2;M$aEX9R?ZAb4OX^Ysm)fHX*CH-8aH)Yy3|txqF0>X@mj<{r9$mN=acO`{ z16&f|(sSTKy(M+&0hgXf7p_HIdcdUzTvFiDci=+T57ea(T>9I0vFm-VMO^y8r4L-P zC6{fk-|uy7>i^UF|9WtA`3ubL$1b-Qo(`_r>i~nz=QBO}(Bk?C^~7{O2Vg!2+n-On z_U2k-J_lev2Vg$)rTL_51MTK6wifD%sY?r7T8}PVi@3DFr3Eepa2Yyqp`Mt!41vqg zqYKv}E<@ll1TH0T898vFo|w9ffXm3E3)dnpBj7RuE){SYJ8+?%n7WLC%h;m}*CH-s z;4%g-HE@|YaG{=A}$l)G660PaG5%Ap`Mt!Oo7YPqYKv}E>qw#1ui|{ zGIQW!OsvZcxXe7da4q6811>Y*(g!Yc2QJhT)BR-*T;|(%vFD>)i@3~z%N)22mRw$A zo{#O%{jm1a?yWy(>RR;Y{;7^<9>jdnxl-`xYM;z;f6ks$(PKU;KEYpEeca$rtzIkI z16jDai>-xvPU;c@m(ZgN*CH+WQgK4qS4NE?kSaWQgK30z8#E?kSal)$9~E+KHK9Jo+VOkFDAQh9XYTEwLS zE){TzfJ^Pbg?eJ@QUjOTqYKv}E;VqeflCZr8V4@47F3r8xHKMJxE66~fJ*~h65!Hv z;6gnyb?E_@o<|q1MO=Eor3YM6;L>;CLOn5c=>wO(M;ER|T>8MJ4_q?fGH~ERy(M)S z0GEMB7p_HI2Eb(iTyo&jI&h)hlDf3OrS<5-wTMd#Tw35#0GFWy7wRpk%MiE>J-To$ z;xYs-L*P;ZmyrV(>Mg0u2)K;4?_$^cT#LAjfXfKDR7)-{*XypwqW(Xv|E~w_h1A@> z>%!6H*O-4DNv{u&H=j>?9e{dbI-g@OpX2S%r(JtWQh#1h`B*x^OMxG660V;L-q>sRI}4iK)vJxJ*5|a4q681uj$I(gQ9t2QJhTQ~JYUF`cW^~BUA1TLXR7p_HI zLf{etgME-i4qT`wrY;e1i9EV+E#eXZmk1affGl?4LOn5ciGfS((S>Ufml(Ljz~B&M zi31nviK$BhToR8iT#L9Qz$F0&M<7cbxKPhYT~gqZdUWAh#3cnTDKNMRvdn=C^_NnLW_l6!RFTEry>E;%r`4YI<43-z4Tr2sC)_Fe4x z9oHf*1#l^VLGa4s=QOU@@b@wv_5W$zzv%y8w&$JY=JRIP{nQiFc`L!ZmD`^;d#=Z| z$h?(c-byfU;nKX(xpK9+i>-xvV(L->m&&6H*CH+zaH)Vx1YBwdF4PlKmm0X#9$mN= zajAhz4P0X2(l~ITwV=8*z@_o%!nKG?16&&5k^q;U1DF4gy}N;vWIONrUbC}%xAxw> zyCr)am*s1#WMA85S(Y0RP_~6twk~oT3^caDZOJbsA)t+g=s3nSAmp;Kp#uUspqRE0 z&^7`ZFt|w+rIRSh*eJ<>MVKT`GJt{MeE@Zci7CF`;Pm&Nv7+*=loNKeeJ=MvU)8E`$d7PFp9SkEP_=cu)wA8MYD^@)Da_S2rM zKld57Klj(|e9eP2f3!dM8S8zrZT9Cr!}vtsxc<1&&%JytOX@p-EZ*G3T_=&An01N4 zB@XDKwHTKeTw*Xdge>vkB0Vwdl7LGR&_!!8E(y3KU~mLk>cK^NV%8-Emo%V@)?!>z za7n@77_!WRi}b{-O9n1kKo_mWxMbjxfx!u6xd#{NiCLE%T=IY}T8nYX!6gTSQ^-0V zT%;#vT{_^>3FxA=7?%#Xbim*YvciLl^u(-70WL*A7p=v(6yQ>T!8v552N&syS(g%A z%789fi*YHzr38cM=dGX9bUnC8&&j%U!KE9}MQbrGU2y4wOAIbO4=&PkvMxPv=>>Gr zT8v8%TzcS=fJ@(li}akVOCMbN0bR5fN*l#k;-z_eIaU{q11$^>h1w>5bX-8^HPvw!eOE zPpP$-^&7zY4PgE9*80hwceuHWtEJ&~E<5bXrWdtsx zfG%2#aT$Tj2wVzqsXe$zZ_K*X;8F*4(OQg44K6jfl;AS<;3B;->oNwHaX=TX#kh>Y zWehG|aG7{;k=~efnSjeApo`XGTqfW$0hb=QOg*?rZ_K((!DSlIMQbrGQ*fDrOCMZj z9$ch1W?g3BG7IRUwHTKfxXi$%0++c57wL^zmpQo11G;D}#$^sJb8s1e%ff?;^v0~q z0$dgWU9=YCvH+I_xD3H%>A^*MOx9%yF3at^xc!ROVqBKsvILh=%jH$g^Kt#I_u2l` zll8k^Zu?z-!_L<{Nb^U|t)rK(_no%c?|QlMiQc^axY29ZuMHhQ7H{t2_5;#mvMw>W z!~tEj7UL3wOAH2wkR={mq{n1k5^zbj@8VuhT8nW>z$F2LqgM7f`}1v&m7o8YegDPJ z|L?okdAj+!xqZL%!0fuEux{!0*Ui1Qv=*~&DXd%CS|fQMI)*IU+{M)*JuvH%flC(9 zMQbrG8MtI%Z~|HG!9{vt)+Gm*JfMr#Vq9`?$-&?hvW^EA>49074!Cpzx@axNr2{S< zFgSy(@ZcgnFzZr)OA*jTYcVbbxD;S;4q55JMS5V?r39BUpo`XGTuN{$!65qi>*riu z4=&OJvo2k5=>~MsT8v8%>j2Udv+FsA^&D@1J>A}0YccCNhV>l7dUjjuDc1%jo4dGLq$g%wCg3s& z=%Te4mkGE`z@-N+Qx7iE6SFQ;aG3^l(OQhl6kMj@(g&BB2N&syS(h2O%mTV-EyiUA zE;Decz-8{iMS5b^WezU$fG%2#ahZe599#zAvhd&{Ju&OD0GCBT7p=v(EWl*}E<!nAk827 z?2A5gy-&8y{@iC8pXe>?j~o4h^=m~3kj0z3xX)|piCLEzT;hN(T8nXs!6gQRL&y>j zE;m+O5^zZZx@axNB>|TN42~d6J-A5E$sR8$xTFDHv=-x%f=dbp$B<n%RRVA&&j&v;F1S)(OQg44lX$uoI=*|;37RI>(T+2&h}m0=e5>i zTsq*=0fVzv_9Xjt-`^|!f7$n6^#5eb#wcE>518OD`4G4QrjTvBkU zJh;eS(7IIMQU!F;T8v8tE)}?B;4<*wB0VwdG60uBKo_mWxD3E$04_PW3_Z9=Pt3Xu z!DSfGMQbrGLvR^_O9xy=9$cg+W?e?$G79LTwHTKXxQxK10GHZ>i}b{-OARh{Ko_mW zxYXcMgG&i6V-GIUTe2==a2W@5(OQhl7+l8S(gl}^2N&rrS(gd8Oai)SEyiU6E)#I+ zfy>l`i}aSP%M@Iu0bR5f<1z)8DY*2(W#+*}dP~-21}?MhySV+n)?!>{;4%Z3s^#K) z&+cHo|A|3TE-e|2;F_WkDX0f;`$T?d$NzMk$nfb_)ddd^`z=i6UTxA)ds%zDmY zJ?F5VgVuV=wSmRvF0K~oiCLEgxGVy?Xf4KN0WJ%08G_5wgNyXUtjiKymfLr6uYaw@ zxGceC2`;0S%ln$=(9Ml`*S~K=W8CM`6I_>^ul_dY@7YL7mQEzP3w;v z734{mF7+m6jE?SFmiNPfXgG0y?4=&OZvn~m^BmrHt7UPnDO9BQ* zkfk16q$g%wQgBHFx@axNB?Xrh42~hoJh(_t%(`UYk_B|pT8v8uE*Th{K$d%Ok)D`! z$-yNL=%Te4mmFMjFgS&*3MLGo|ARyflF`uE^a@dwHTKkxb(m!X}S2^zdz|*vj3NT|AVN!_r=Zao9<*x0W(i^ku*N64%Z-4#V9zkm{>(__%>%;n`t@V>VR<*f{t3~#N)};cM zDxizjVq7Y4slX)zmw^Wt>5W;J0k{kTx@axNWdJS%aLK`C=)t9Vc{-ONxC{fjXf4KN z2rff#>43|~gNyXW?C~-Jmr+0$t;M*Ez-0t31-R56T%5? zv=-ws2bVdx48UdK!9{vZ)@1=Mi-0a#i*Z?i%K}`6;Ij1KB0VPSvILjq_FdfmR%dE?DpJn@9f6LC-JV^6L`(2;4-golc?{Yr!n4e{QqHkV* z+~~{JuMHivvM1fM`}}_S`G48>U;O<4o?Exr!@5Zi%&uDu>lSZ+-P~SVYccBv(XH9+-9M zfJ-N!i`HUXI^fa)gEPnq4=&OJvn~a=6aihd7UNQYO92Mwkd+=>qz7hQN^mIyx@axN zr39A}45BYzKj-RtaFHIEb?JgjH=v8wVqCi5(gl|oTzVc{qz7hQdf?Iv=%Te4mmawE zz$F2fz6TfSEm@a7xby?MXf4L24=#OhNx`M^;39iL>r#PB70^X%F)kIjRN#_<%fN$+ z^p>p409*zEU9=YCG60tWxa8n6^xz`b53I`&T!!0sar=F(#kdT?We6^vmW$8*y6?H9 z|1bOh2hqu$*EF|3bEm%b?&!X|4lvq$J@b>FxVSzdJu$nUBUsPT_Se(xy|oszo+DV# z5v*s?T2Hw)P;c(yYLT9pb*aIn4(Ot_7?&DcYH%sRW$eL4dScdP3@+nrOg3Ho_i}b{-%Mx6c+jnv2qgsn`S%S+FTt+RIH#X15_2>SW?Wa9i zf9|twf9`MF`I-l5{>Zsf^x5luGSB@vcTOdb`Ps%N`j+*_jb68Yt>^%z$F2LBgj$@F4A+dE-ARA0bR5f zMO{=e+|FZ%zt+~-2R z`MTwH-!DBeyKXtGTfY5ubMM7ki&?iE)-7+Xk$i5QLe|;b#nmD`G3(L+mrg(zt;M)> zz@-BQXOI;hT%;#vT?%k10=j4|#-#w40u0U}D?PYKPt3ZM;8F&3(OQg42`(iVM89bL zoU7}>MS5b^r3)_IfG%2#ap{6f7hGa+>3MLGo|tv%flDu-i`HUXdf?Inmjqn;9$cg+ zW?lN=(humOwHTK^xb(p#1((W$i|hrhO9d`fKo_mWxK!X$flCH10}n3J6SFP@a2W)2 z(OQhl09*#(l7q|8gNyXUtjiEwh5=o)7UMDmmm#=xz-8pYMS4rtWdtsxfG%2#aT$Tj z2wVzqsXe$zZ^^pU;8F*4(OQg44K6jfl;AS<;3B;x>oNwHaX=TX#kh>YWehG|aG7{; zk=~MZnSje=`z~(3ueBJL3AjwarPp$KlKuI%zgPPIvj2Y&)wjN+xqa`glRIyWKGj_Z zm~OtF?mB?<#O!)bVLhkYUr)F9)>_PZPGLQ#u%7+addjtd+2$^;7U_vuml?Rs0=j4| z#$^UBGjOTEW$wX6dScdP4leV6E?SFmnS;w5Tn6B>@ZcgnG3&AbmqkDqt;M)3z-0k0 zLvUGoaFL#vby(9Ny_UHbNov(S2 z=8wFWMXy-zlWns<_X^_^ee3$;Mqjaht>^%k@-Y9MDB;F)lH<#9(j; zS>nM(dScck0hc78i`HUX5^zbt;0UtRgNyXUtV;?mX+RgP#ki#4l7hi8WSIvS>4{mF z3|z8+E?SFm$-pH8gA>Sd4=&PkvMxEe+jnv2cUp^aDZ!-# zgXr~_&uO;3r+=LJrT;Jc{)_(q9e3W@-F)5LzF&G`cHO$LZr$y#n>*LjTFkn2Vcoj0 zZgFef48fRToQ2UdvKASn04ucOFy8C)?!@x;L-<| z6kI9~F0vQ2E)}>`0bR5f<5Gc31uhx53_Q3!DZsXMS5b^WdbgffG%2#ahZV2 z1YCOHGWFmhy(Q~11(#_+7p=v(Ou=OeE`4yBd2o^5l69GZ%PgRa)?!>{;4%Z33S8zM zT%@;TUFP6259p$`7?(M?%)w;03|lUbvmXyV zR{H<4|9=o=d!6R?wR`2gd(o%6>j2Bm*VA1Gke--b&n2wqGT?e@EoMEJu%1g;&rxeV zKh!)Q*Pol&e%h1u=Q7)$JF)XM57PY6{#>@+C);L!E;Bw+wf?wKdHGtF)OP?`yt#|J zP9ipWE_px~t;M+H z;F5#EDP$cFF47aTE*)^`1a#3_j7tYxI$&@HS>eG&dSce40GA@5i`HUX3UDdF;2g5j zgNyXUtV; ztV<7EdI4Ru7UR+bmmatz;L`WtB0VST(g&A*Ko_mWxb(rL4=yRVR32PpuVq~-aH+QM z;;sj1Eykq+mkM06mP_b8{-YjG_W!c)e-I^ie@=7z;@#f<`=aOF{&ukW`nmnT^v3M^ z4PgBS+h0Gor_@@^`VC!#Ou%Il&_!!8E)#H>fJ+ZtrXF0RH)dU?;4%&9qO};8 zDY#6*r4KGM4=&Ohvo14mnFVywT8zsKTxQ@>fy>;3i}c2<%N$(h0bR5f<1z=AIk*hK zW#Pd^dSljQ0WOPxE?SFmS%Av|T!!GX^xz^rChM{Um*w_d+JuvH1fJ+h3MQbrG1-KMoa1L4N!9{vt)};iOGN6mrVq8ja zDZwCm!}>W_*Mp1nz^qFbT)F{Wv=-yi1(z(T?4UO*SE#klmqr3Wqv zxb!`^NDs`q^ueVc&_!!8E`4z6gG&l7l?NBu3tE>7T&jRBT8nY1z@-A03|s~tT%@;T zT?XJX2OaFO1Ub*aIn-oA_5?`ti_r3RN8T*{V9=so@8Jf8IbW&i&mTHOA* z&Fx2SFK)jrdYQWpFy4GU-E{!ziP`lW!+MUlzn*UIt+kl-9K(8!VLiL8^^|J^lg(XR zEz%RSE)#H>1a#3_jLQUECg9Qom#GIA>4{mFDY#4nx@axNWeP4+aOs1~%!7;c#H`B< zTxJ1Xv=-ws1D6@NRNylA;37RS>oNzIc|aGf#kkDDWezR_a9Mb8k)D`!S%AwTpo`XG zTo&N60GA=SEIqhLPt3Y3!DYF97k7T4wHTKrxGceC)N*-S^L$)??uTtZ?aBIcpJV%T zf6va>JV^6LKKr82S?`l=vp@Ga#wU8)`r}3~tzRoTfGpnJ#eH7yHP7F=#NZMKbkSOj zOAIbC7#u>DcyPI~;*x+%63|6!F)j(XBw%m^S?a+>dQSFuNx>xz=%Te4mlRx5FgS)R z^WY*qC+m`dOBT>YYcVbvxMW~(0$J|CMS4!wB?p&0po`XGTyk*9!Qd3Kjt3X%Ia!wu zxOBGf;y$mn7UR+Zmkt=5wX(qx)rT8+H1~p&LJx|cX72yPt3ZM;8F&3(OQg42`(iVM8A0boU7}>MS5b^ zr3)_IfG%2#ap{6f7hGa+>3MLGo|tv%flDu-i`HUXdf?Inmjqn;9$cg+W?lN=(humO zwHTK^xb(p#1((W$i|hrhO9d`fKo_mWxK!X$flCH10}n3J6SFP@a2W)2(OQhl09*#( zl7q|8gNyXUtjiEwh5=o)7UMDmmm#=xz-8pYMS5b^WdtsxfG%2#aT$Tj2wVzqsXe$z zPt3a1;8F*4(OQg44K6jfl;AS<;3B;x>oNwHaX=TX#kh>YWehG|aG7{;k=~MZnSjeA zpo`XGTqfW$0hb=QOg*?rZ^^n$!DSlIMQbrGQ*fDrOCMZj9$ciiWL;+9GTXk3+wW^F z#$^UBGjOR|F5BM2Kgs;k|Cjy$gQ&Ov^P1bY?7Kx>519(oWpv~ zx4)il@2$0%^_;_c&S5_UcX72yPt3Y3z-1B8MQbrG3vgM0%Me_a9$cg+ zW?h!xvfRFld;M!I#$^dEOK=&rT;A6_AJ?Dz6SklBWc|6%wf(ujZ|7?sr1>MqX7su1 zeX?!#=RVi?M89VJaice`Un@F*EZ*G3y`H2eW?f=%i37T5Eyg7VmlzBVAxk{C+*ol* zz$FRjqO};81Y8m@ID#zo;37RSd%UFJk_L3qT8v8yE-4rsLza1Pk)D`!$-pHG=%Te4 zmkeAoFgSrM_uwKuG3%0pOCHcgYcVc4xa44P3R%a4i}b{-O9xy!0bR5fr#SC8PG**F)k&zlwc5j_4+wY*Mp1n zoUBV1T)F{Wv=-yi1(z(T?4-u7MGen4w6Ecd!t;MWgAJ(rA>zB6H zPxe^V<}R)l*%Mlq3S6pyE?SFmslcTImkeA69$ch1W?cs0G6?9RwHTKHxD3E02bZA- zm*(Z^T!!E>4Ctb@7?&Zq48f%XE+Y>v(i^kK%LrUX0bR5f<1zx55x5lKQhRWb-k5c% z!KDu9qO};88eD2{DZypz!9{vw)@2MX`du&De%C*+^ED6B{Ly~bi|c(S z&;2gvBaiu_@rmBP{v(XH9+-9MfJ-N!i`HUXI^fa)gEPnq4=&OJvn~a=6aihd7UNQYO92Mwkd+=> zqz7hQN^mIyx@axNr39A}45F`DKj-RtaFHIEb?JgjH=v8wVqCi5(gl|oTzVc{qz7hQ zdf?Iv=%Te4mmawEz$F2fz6TfSEm@a7xby?MXf4L24=#OhNx`M^;39iL>r#PB70^X% zF)kIjRN#_<%fN$+^p>p409*zEU9=YCG60tWxa8n6^xz`b53I`&T!!0sar=F(#kdT? zWe6^vmdlgu&$s=((*KwJ|AXk{&d+adf96ho>)p|PcO77~`FiFjKXGw=M0#R&Jx8#f zqwTM!+k0y*W<5u+o+DV#qP3oKZJ^%V#nmD`G3!!;OC8WfYcVc0xYXcMg3H*0i}b{- z%NSh70bR5f<1z-9F}QTWW#Yj_dScdP0xpw)E?SFmnSjd#TzcR#_242sG3zn~muWy3 zt;M)Z!DR|AeQ=q1aFL#vb(w+7ETD_lVq9k6G6RR6SFQ0a9IR&(OQhl0$dj0G6a{U2N&syS(hcaEVu9C&PTNt(`17Ad5G5akWU#$-2bg5(jkAT8v8!E-@G!LY8=Nk)D%vNx&ru=%Te4mjqlAFgSuN z_242sC+m`eOB&EcYcVbrb@1}@q5UEKSx)?!>TaLK^nq?K)ZPyaac zOaEW?{TKcJTkdlq-+bM2yYIiXvTix7TfY5ubMM7ki&?iE)-7+Xk$i5QLe|;b#nmD` zG5b32fJ-N!i`HUXI^fa)gEPnq4=&OZvn~a=6aihd7UNQYO92Mwkd+=>q$g%wN^mIy zx@axNr39A}45DAUe$LhP;37RS>(T|6Za^2U#kh3Ar3)@Gxb!@@NKeeV^uVPT&_!!8 zE4{mF0k{kTx@axNWdJS%aLK`C=)pyLV%B8{F2jH>T8nWRg3AzGI^Z($;3B;x z>oNkDQ9u{1#kh>XWdtq-xYQn8q_<>UYH+Cox@axNr3RN8TuN{mdvKB7l64t_%Q&Em z)?!@7;4%i6F1SoQxJYlwx=g@jvV9k~-`84<%LH5|;L>ZkJkEYR^jPWt%l`jCRNwjq z&Fy<{o!oh2^r`MTz;yHVbk_l-CuY}k3hO!D{(8E-x7K3Ta|-J@h4t*W)>Ezx%rHZGY|`+4-6WY5vH2S@ikqeX?!#=RV)~M89tRaigzYzgBbrS-iQ6d;gW5n01N4 zB@XDKwHTKeTw*Xdge>vkB0Vwdl7LGR&_!!8E(y3KU~mLk>cK^NV%8-Emo%V@)?!>z za7n@77_!WRi}b{-O9n1kKo_mWxMbjxfx!u6xd)e9D=s;>F0lm5T#`!D+ccieerck^{~`+n((*>&r}x^=g| zZth%9YccEAg>~z~y2Y(^lXK4{mF9=P-Zx@axNr3WrOa7nVp&1$5C`j7tSB6}V*JGVtIcJu&Mt0GB~P7p=v( z48UaoE;+aiJ-A3u%(@K0Wf;&!YcVcEa2bM22V6!TT%;#vT}I$C3h1J>7?%;ajKHM; zm)e7i^u(-74K8&+7p=v()ZkKsO9?Jx4=&OZvo2$B83%OHT8zsWT*lzi1(%5j7wL&v zmkGE`0=j4|#$^I76L9H)%hZF5^p>p46kMhOU9=YCG6k0@xb(qg=D|gJOV(uuF0+6x zT8nX+fy)eBDsY*5aFO1Ub(w?9JfMr#VqE6nG6$CdxGX%lNN>ryEWl;4eHXXi*IJCr z0$dj0GHkg#YXAL-{+jgvW&i&m%JzO?bNkx8^4`7Z)7^D|<>u?@t^-I<%&zAW)^izf zJ+&6Io=aHIC9LPDwVoepo{#I#{b}1zd$RuA7uf#XKeqEV57PY6{@fR=_sO=|pZfyi z6aD)2$BlmZz$F2LBgj$@F47aTE-ARA0bR5fA^*MV)k`Zf=e0DMQbrGCAgGe5dDhvbDFLP7wI`!moB(; z1G;D}#-$4`U2uuPrRTv#dQR4*2QIyUE?SFm>48fRToQ2UdvKASlXdBXOFy8C)?!@x z;L-<|6kI9~F0$9ME)}>`+jnu-1GE<7Qh`eaE?LXv6TRnOeSF#f%fA0Xl-wos31a#3_jLQOC7T_`jm!$_6=`mTCCAciN z@8b3=T8nX6g3A(IMlF|DHP6TOyXLk(^<@37-1fUp?R?FHG=JpWI?C7kPTTBv<;Eu( ztUqqlTfa7R09m}bi`x%KkIA~k;1UOP(OQg43@$Mk972|OaFHI9bxFV_*}jW=J!vh* zB>|TN431ja>i+u^{lDes|7G8Q@$>)t?scASzHV;cFFi23ZYiu=y8U%?uPv>`tXm4} zmbTVN-iMAM%Qkm$wMY-lx@6#z1$5C`j7tVC85o>EmV0oK9+-8>!6gsqqO};899(iR zIEAd^!9{vt)};e3oq#S{i*f0IO9u?jAS*n$++J}hz@-T2qO};80$d6(IESqC;1aL6 zl;BbZbkSOjO9?I|7(~Bv{hX`o!9{vt_I1<+mu^58t;M)>!KDi>F}U48fEE`1L!(gU+DeQ@aqbkSOjOCMbN;F5w%<-tYvg4U%1mnxu()?!>L zaH+s01DAmZ7wIiomjSp80=j4|#$^C518~W~W$3|0dP~-22rk2bE?SFm8G_3YTsq(~ z^57!9CF?Q*mr+0$t;M*Ez-0t31-R56T%@;TU21Ttx9{Ti`&x@}sllZNm$K#ZiQeNs z>hY!jFZ=%o(c<=(Hn$(Sy}13h=wEzxOg49MwMb9Qx=g@j63|6!F)kBunSe_VT&5meq$g%wrrA(6SFQeaG3>k(OQhl3|wa5Qi03dgNyXUtjio+<^f%_7UMDpmpQl$z-8gV zMS5b^WdSaWfG%2#aan-N0$hgRvh?60Ju&OD1efLZUEKMF)?!?i;IaglQOo6R>{n zxj$q3X;0Rl`$F5F`zLn3=0Tc2^4S-C;d-BJoBg>jG(OR{tv_z`b?euP4j_v+cX6NB z(i5{TF}TD5U9=YC5`#+&28WO(9$ap$xFq0`1a#3_j7tJ82^btfmU?iJo|8RZQgBHF zx@axNB?Xrh42~hoJh({D$+~3Vk_B|pT8v8uE*Th{K$d%Ok)D%v$-yNL=%Te4mmFMj zFgS&*DZ!--=%Te4ml9k`Fo?c> z{hX`o!R5}1OBYVZoypo`XGTzcTr1D6C``W{@Q zCuUvx;L;E1qO};8KDhM3B?XttgNy71txE+iRX`W5#kf@9Qh`ebE&~rP(i5{T18^Ax zbkSOj%K%&k;F5#O(1VNg#H`B@T!sN%v=-ws1eYPWbiifg!9{vv)@1}Pqkt}2i*Xr& z%LrTwaH&1GNKeeV)ZkJFbkSOjOARhHxRl^B_TVDDCF?QryOu=Ou&_!!8E>m!sf=eG^%5W;JF}REax@axNWehH3aOr}}#Dk0U#;nT( zTqXfsv=-ws0hbB5^uT56!9{vw)@2GV(||5oi*cEP%M@Jt;4<^zBE2!|G6R=cKo_mW zxXi$11}+u2%sseBkIA~s!DSxMMQbrGb8wl1%K%&!9$ciyWL*~EvIyv+wHTKLxGcbB z2rf$xF4AMNE=zD(Zr{c2Z?zWVvILhUxQtpZa&GAQU4PE@r=G0e^+mSd_0Q~l&4V<5 zwBPkb>wPEB{VwMtkNHK$C;ImF$BlmV`n92hR<`Xu{o~9pKmRZL{)?ag-*f90dssK= zf!TG7Vcp{GubbOzYb|EoVpzAhwMKGW9YU6D?&4~Z9+-7Wz$FRjqO};81Y8m@ID#zo z;37RR>ym;?8qh^+F)k^%q+oCiS?0k-dSKQi1D7nIi`HUXGH}Vj-~_VVgNyXQtV<3q zc|aGf#kl0)l7qo1WE~GK(gU+D9dPLcbkSOjO9xy!U~mRm;lV|EVAiDomm;8x)?!== za4Epx9J11bi}b*(O9?JzKo_mWxRl^hf*riu4=&OJvo2k5=>~MsT8v89XWf=lJWMfQUB zbyR^%70^X%F)kIjRN#_<%fN$+^p>p409*zEU9=YCG60tWxa8n6^xz`b53I`&T!!0s zar=F(#kdT?We6^vmdoSp$3u^m{=e-1A4Dg2Uf10I%$@qyyQBN=I>2c2^~_Ix;^O*< z^u+9Xj$l1U+h0$&_tsj>dX8W{N3fnnYdz)KK)tz(t3`TZ)};oQI-rZzVq9u)sllZL zm$3&I>4{mFF}REax@axNWehH3aOr}}#Dk0U#H`B%TqXfsv=-ws0hbB5^uT56!9{vv z)@2GV(||5oi*cEP%M@Jt;4<^zB0VwdG6R=cKo_mWxXi$11}+u2%sseBPt3Z^!DSxM zMQbrGb8wl1%K%&!9$cg+W?dHGvIyv+wHTKLxGcbB2rf$xF47aTE=zD(Zr{b7k7_N( zWeF}za2d5+-q<`J*Pr_l+fRG4{@kl=f9|L4e9eP2f8<;#di8pr%yWOvom0tUzS{Ui z?^u7_sK0)#=m4^Ka~D^O^qj0q3@&j%7p=v(#NZNx!69Uc2N&r%S(gM{l7KE+i*ZT7 zB>{sY$Wjk3(sQydDY&EoU9=YCl7dSL2FH+P9$cj7WL+|F$+qv}-hZ_g-ix&svu-)8Ti#kD`P@2% zth2d`t3`TZ)};e3oq#S{i*f0IO9u?jAS*n$NKeeV6yQ<>bkSOjO93tg7@R{^dT^1R zm~|<^r3~nzwHTKYTuLyAzH$AWtLwo4HlaTw-wPd2o@Qn04ua zOD~{{)?!?G;L-z^1YG(aT%KET>4Qr@po`XGT>9YB2bUCFDi1DqS6nJ^sRFuaEykq+ zmkL}ma2a@Tk)D`+9Sy)`5YRr#VD9neKp4 z7+l5yU9=YCG6t71xOBl~;=x6FOV(uqE|cxMxc$D?Vq7NRG69!f%jHq~?@#pCr2jAb z{|8Zh>lZb*@4a<$=Z(>)y6XVb&DYai2aukaUC$}3=XCq)>Gs}Qi&@VptmhQgv)@`z zxi&D{+{M)*Ju&Mt1D9Dq7p=v(%)n&^E)}@UJ-A3u%(~3MWggH)YcVc!aG8V409+Ox zT%;#vT^8W72 z{a1Qo)+Gj)IG~HxVq9WyiNW9yvc!Xn^u(-70xn5F7p=v(B;b;O!4YJs2N&syS(g-C z(ts{ni*ZT8B?W_H$TANu(i5{T8MtHtU9=YCl7UMG1}Bi^9$cj7WLk)D%v>3~Zopo`XGTsq*=0fRHh3J)&QbFwZ4xD)|hv=-x1fJ*@e=a7{i zT%_k@T}p5%x9{T4@3a=pnT>1fBv=-yi2bVs$q~KC{aFM;Bb*aFm3h1J>7?%oMDsaibW#GZ(`4yJ| zxC{ciXf4KN04@V?$-!ml!9{vv_IMeB%P^pe)?!?S;4%c44!DdwxJXaTx{SbO6wpO$ zF)kx;8G%ayF0}_2>4{mF8eHmtE?SFmsllZNml9mY9$cg+W?jbMG7jjXwHTK%xQxN2 z3oa86F47aTE)#H>1a#3_jLQUECg9Qom#GIA=`C58DY#4nx@axNWeP4+aOs1~%!7;c zmaNMRTxJ1Xv=-ws1D6@NRNylA;3B;x>oNzIc|aGf#kkDDWezR_a9Mb8k=~MZS%Ax8 z`z~(3ueBJL1-LB0W!Q3A-ETi_|6BV1vj2Y&WqV)I+`e|Nymv49bax$Kx%qm!>j2Ud zv+KEp^;`yAPp!qQ=MvU)3F|p(t>=fD=i~Zwf5G1ANVT zpKP1`xz`w<=$-428-3H|Ygtm?0c7#!F77&s^u(-73@&j%7p=v(#NZNx!69Uc2N&sy zS(gM{l7KE+i*ZT7B>{sY$Wjk3(i5{TDY&EoU9=YCl7dSL2FH+P9$cg+W?eFH$pX4) zEyg7SmkbO}Aj>_tNKeeVz@-BQ zXOI;hT%;#vT?%k10=j4|#-#w40u0U}D?PYKPt3ZM;8F&3(OQg42`(iVMBluAPSf?^ zB0VST(gl}pKo_mWxOBm#3obFZ^gOso&&j&9XWf=lJWMfO_Or2>~~`!4Q!fYxGMDsZX5C2P4nP1gWq|1bOg2T^kO z_08>zcYFKqi=KD;+rj4R=l1{4udLqy)^D)=^>celt;MY00M>5+>zB9IPxidS&0SnA z4Yxb4hu|^{=%Te4mm#XWdtq-xYQn8q&H?= zYH+Cox@axNr3RN8TuN{mdvKB7m~|P0%Q&Em)?!@7;4%i6F1SoQxJYlzx=g@j63|6! zF)kBunSe_VT&5meq&H?=rrA(8?!DmaG3>k(OQhl3|wa5 zQi03dgNyXWtjio+<^f%_7UMDpmpQl$z-8gVMS5e_WdSaWfG%2#aan-N0$hgRvh?60 zJtph21efLZUEF>}YcVcMa9M)OsO9pi=J~jO*N@u%)RXnQzQp#s{-vF-d64FhoLfg< zvfg*vX20u8j8F8N)*m=*OS&_ToQ0ez~HErJx%+6`T2j@_h0<{|Gs;jr<<>v+xJTk%&uDs>y~bR z-P~(SYccDV!n&ocHInzCW5}}2U0f~F1G6p}xMTrcv=-x%flCGkCy?bHT%-qPU2<^A z1G;D}#w7=r91Kn&>v(XH9+-9MfJ-N!i`HUXI^fa)gEPnq4=&OJvn~a=6aihd7UNQY zO92Mwkd+=>qz7hQN^mIyx@axNr39A}45DvcKj-RtaFHIEb?JgjH=v8wVqCi5(gl|o zTzVc{qz7hQdf?Iv=%Te4mmawEz$F2fz6TfSfmxS6xby?MXf4L24=#OhNx`M^;39iL z>r#PB70^X%F)kIjRN#_<%fN$+^p>p409*zEU9=YCG60tWxa8n6^x)ELFPzH|T!sN% zv=-ws1eYPWbiifg!R7vn%LrUX0bR5f<1zx55x5lKQhRWb-jaPC)!jKgvv+FyC^&M}2ecfJMYccCPhV>o8`gU9EE7uApo4dGLq(^35Cg3s&=%Te4 zmkGE`z@-N+Qx7iEBeO13aG3^l(OQhl6kMj@(g&BB2N&s)S(h2O%mTV-EyiUAE;Dec zz-8{iMS5h`WezU$fG%2#ahZe599#zAvhd&{Ju>UE0GCBT7p=v(EWl*}E<;}RH`!nhR1WiT#-aXF03VO$5sbzocp;|ds8!nhK~ zbzxi=#`R!a561OjTpz|&Fs_1e0~j}eaYGn4gmEJnH-d3BjH_YX7{-lZ+yur=VB8eO zO<~*&#?4^d9LCLI+ycfeVB8YMEn(aNj5~mFhcNCC#vQ@9BN%rK$B@xu*xKbOM&`OYIbL->sQI$vlh=INTWW3!x88BtI)0+(+}HZ8 zuU+LTz-LAEec9Llbkx!P{R?{+`}|_>CB6Tyy}sW5q{+`r{@NQCUmuy<58t>L_hA1g z^?JeS&5N(U`c|#q|0B09<~_XCiN2klH?^p4~`1sDnxZ=)5zBISRv*!M@7vrkuX8SUKbiZy6@s+>Vuw^B$k%M*?z1-Oz zwZ66=z0!Rx{>s*xG;<}8rLF8{^kr_2qt@4?o@2;PAUkbm(d*s3=dG{pM{jgr>wMLE z-34T2E8CBHZjQS3HK}_H*`$^2M{jm>9JRit&mFRpR(3ObyPG3>!}@c{A?rX^w6af+ z-s$EYw!S8{jUcNb8$&jMYzo;7vN>c6$d-^DKz0b(5oE`Zoj`U9*%@T#kVP-8uU`yV z0$B=K*2?yy_qa8!T3?ej9Y8j0WzR%E;O1Dgz9w@lAv=KV5V9l4j@w!EG57fAUwzr@ zM)Zn3`x$ZGz5F$)E&7_vnf%_59bdln^4Da17qT8?{Z=MF?{DWlxsk1%>zqP%X0lgA z7ys8hem+|r_v}Tl@d@Tj?RG#WcF^6%kZt3aExEm{?(u)^703O$M~`!L{(3X+H7n;5kE-*XkDk}n`J1jdZg|CU|Na%n zea98Y{RdYZ_nlW9_nWUc?z^ry?zdcV+~|tqe(M#-{kAKP`|Vd8_pU3B`yE#tC;#T~ zBR+@R@%Pm${nLUp?o1g8AHf%I})_oUb|Tyv}#u^L+9LxzboK#KKU7YpYzGjru&>v_jn#(Z@L%sINxV@e!egFJl|(} zp6>`*`99n8e6R34U*>r}z4qYoc-Cta9_Q0*86M|*(X-#@d7kg{Jw0uN&-ZgY&-ZgZ&-e2@&-Yr- z^Zk6!^Zf$P^Zi0U^SS+LVdnF3U0^Tz;CUqA(^L%gh zJm1?q&-ZIQ&!<1@;_>*?pNa7}pZ@HO$NBVUY&_04@Vp-1=4U>)@Ba;EJ|FvjJICey z|F?VH|9`um=kNCa@9;d|Z}dFhJ3Y^*KkMc3_|~5Z^EjXW?3l;-^k>XG&Zj?%=5ap# znKh5|>Cd)#obS6lAAi5a^L!)E^Zi!O^Zho@^Zj{ol9?|VGY_r0Fy)1QU(xE}g5lOE^$e$UVMcX^)gcYB_1?0LTb(DQu1$Mbx@*YkYu z@jTz}^E}`0_dMSp@I2qd^L+o2=lTAi=lTAS=lS02dA|SH^L#(xdA>jFdA_OV`F_yz zeDCu--yiWapWFYx-^^$C?mliW@Bja(*Zuz=_4EAQ{{N48p6`!)o^R%Pz8~^D-w%79 z?@xH1?*pFa`;(sM`%|9h`_rE1n|q$`&v>5i&w8Hk&v~BjM?BB>=RME&7d+4Rqn_tm zc%JVsdYUq8odYC&~eZQUKM)aco{QrY!c~5>1;G_5Y(TAhI=Jh(jU-RSO zt^*u-p6`G1Jm3H9dA|R}^L#()dA|SE^L+oC=lTA3&+{F7p6{=Fp6_pXp6_pZp6{nT z&-b@H&-b@I&-Zsc&v)W^zQ5~vzQ5;rzQ6BzzJK6(zJKU>zJKI-zJKg_zEjWh{S(jg z{Zr5L{WH(={j}%#{<-J*{)OlH{-x*n&OFcee|Vnn|MWcH|K)kUpYc53|Lu9c|Ht!u z|H|`x=bq>Le?8Cl|9PJ8UwfYK-}sr&?Ti1dneS%wvHN$M|Gg)F-!c51XjlAu(hB?c zw0-QpOcu@TUip*pb}xGG-8VJ+{=3om?yPyb)-M6SbUn+hRr9Ux-;k*H*8V=_cnsMD zvMFRU$mWnOAX`Fqsb=$UX6#bUdplV3jUB9c-_(2n$Iu~UN01#ub^_TcWM`0_Lw4zS zzIpNYI_^@uJ6Q9MoWHsKwI0vgIe&Bee?9&--2d-4ueV+M{Lq?r?DIov-nGvUsd?8v zKcwbe`~1-3dB@(1^?2UFns?;$!|ng|c;3$Ehui<_@prxde;T)m*EM~T3S8d*-`sfr zf3x|#+qLsIt$D}J-=yYUJAad!ckTR5YTmW;H$9$r>|98X=N+thN6z2e{$G#h?VP{4 z{l6Z68}9#aHLtf_`~1+FckJ^+YTmWa52<>+yHJ|NkW2Xu%RRN3`Z0`y7#)ckOdTYTmWa5vh6CK1cL;-m&*&J)U>4=3V<7 z(c^i`pCfwwU0)A)8n=ztHGPr@T<-th+4y|zPV@P;Yv*fP^NyXbNzJ=uuLQKeXl@`}~la zckS~-YTmWa52<4<{kO`aQ%Nhp11S);rjo2{9W(&KS_3$*H2>? z1i1hI+{V`do@+k$cI`Y)Yu>T*IH`Hp&f}!!T|1AHns@CyPLJmuJ15fPc?WCWwevVV zp0{%z=lcJ8{59{Vz3BOkKS!Q#UU$3pIifZ1*yo7UylbB$QuD5Tj!4bB_Bo=*^NzhI z>+!sUHSgNzh#t>d{v6Tc@A`VcE^H&OYur(R%l-d*8=tQ=zdEpU=WAN?j-9Vb&AWEK zCN=Nc`I^+cYv*fvJnz`Kj~>rESo4mYuetue9?#o3UvvF`J^sx5>ErhQ<)7Nwwf(-< zyknmq`cE3|V9mSs`614`_W7a5^Nzh2>+!sUHSfshhwK0A@w}bS57+7u*b1y`4`~K%Tdizmx`)^F1-hD~)Z@Syp+YjEo7=L8)2hU%8y>D*cZ*EV_?Thy= zzCO734*mY0H22f{X5RZ3^NpJOy(roEx<#^s=bc*fj-A6v&AWEpLTcW%^G>OG*Umfj zc;2ydI6a_}