| { |
| "header_types": [ |
| { |
| "name": "standard_metadata_t", |
| "id": 0, |
| "fields": [ |
| [ |
| "ingress_port", |
| 9 |
| ], |
| [ |
| "packet_length", |
| 32 |
| ], |
| [ |
| "egress_spec", |
| 9 |
| ], |
| [ |
| "egress_port", |
| 9 |
| ], |
| [ |
| "egress_instance", |
| 32 |
| ], |
| [ |
| "instance_type", |
| 32 |
| ], |
| [ |
| "clone_spec", |
| 32 |
| ], |
| [ |
| "_padding", |
| 5 |
| ] |
| ], |
| "length_exp": null, |
| "max_length": null |
| }, |
| { |
| "name": "intrinsic_metadata_t", |
| "id": 1, |
| "fields": [ |
| [ |
| "ingress_global_timestamp", |
| 32 |
| ], |
| [ |
| "lf_field_list", |
| 32 |
| ], |
| [ |
| "mcast_grp", |
| 16 |
| ], |
| [ |
| "egress_rid", |
| 16 |
| ] |
| ], |
| "length_exp": null, |
| "max_length": null |
| }, |
| { |
| "name": "ethernet_t", |
| "id": 2, |
| "fields": [ |
| [ |
| "dstAddr", |
| 48 |
| ], |
| [ |
| "srcAddr", |
| 48 |
| ], |
| [ |
| "etherType", |
| 16 |
| ] |
| ], |
| "length_exp": null, |
| "max_length": null |
| }, |
| { |
| "name": "ipv4_t", |
| "id": 3, |
| "fields": [ |
| [ |
| "version", |
| 4 |
| ], |
| [ |
| "ihl", |
| 4 |
| ], |
| [ |
| "diffserv", |
| 8 |
| ], |
| [ |
| "totalLen", |
| 16 |
| ], |
| [ |
| "identification", |
| 16 |
| ], |
| [ |
| "flags", |
| 3 |
| ], |
| [ |
| "fragOffset", |
| 13 |
| ], |
| [ |
| "ttl", |
| 8 |
| ], |
| [ |
| "protocol", |
| 8 |
| ], |
| [ |
| "hdrChecksum", |
| 16 |
| ], |
| [ |
| "srcAddr", |
| 32 |
| ], |
| [ |
| "dstAddr", |
| 32 |
| ] |
| ], |
| "length_exp": null, |
| "max_length": null |
| }, |
| { |
| "name": "tcp_t", |
| "id": 4, |
| "fields": [ |
| [ |
| "srcPort", |
| 16 |
| ], |
| [ |
| "dstPort", |
| 16 |
| ], |
| [ |
| "seqNo", |
| 32 |
| ], |
| [ |
| "ackNo", |
| 32 |
| ], |
| [ |
| "dataOffset", |
| 4 |
| ], |
| [ |
| "res", |
| 3 |
| ], |
| [ |
| "ecn", |
| 3 |
| ], |
| [ |
| "ctrl", |
| 6 |
| ], |
| [ |
| "window", |
| 16 |
| ], |
| [ |
| "checksum", |
| 16 |
| ], |
| [ |
| "urgentPtr", |
| 16 |
| ] |
| ], |
| "length_exp": null, |
| "max_length": null |
| }, |
| { |
| "name": "udp_t", |
| "id": 5, |
| "fields": [ |
| [ |
| "srcPort", |
| 16 |
| ], |
| [ |
| "dstPort", |
| 16 |
| ], |
| [ |
| "length_", |
| 16 |
| ], |
| [ |
| "checksum", |
| 16 |
| ] |
| ], |
| "length_exp": null, |
| "max_length": null |
| }, |
| { |
| "name": "wcmp_meta_t", |
| "id": 6, |
| "fields": [ |
| [ |
| "groupId", |
| 16 |
| ], |
| [ |
| "numBits", |
| 8 |
| ], |
| [ |
| "selector", |
| 64 |
| ] |
| ], |
| "length_exp": null, |
| "max_length": null |
| } |
| ], |
| "headers": [ |
| { |
| "name": "standard_metadata", |
| "id": 0, |
| "header_type": "standard_metadata_t", |
| "metadata": true |
| }, |
| { |
| "name": "intrinsic_metadata", |
| "id": 1, |
| "header_type": "intrinsic_metadata_t", |
| "metadata": true |
| }, |
| { |
| "name": "ethernet", |
| "id": 2, |
| "header_type": "ethernet_t", |
| "metadata": false |
| }, |
| { |
| "name": "ipv4", |
| "id": 3, |
| "header_type": "ipv4_t", |
| "metadata": false |
| }, |
| { |
| "name": "tcp", |
| "id": 4, |
| "header_type": "tcp_t", |
| "metadata": false |
| }, |
| { |
| "name": "udp", |
| "id": 5, |
| "header_type": "udp_t", |
| "metadata": false |
| }, |
| { |
| "name": "wcmp_meta", |
| "id": 6, |
| "header_type": "wcmp_meta_t", |
| "metadata": true |
| } |
| ], |
| "header_stacks": [], |
| "parsers": [ |
| { |
| "name": "parser", |
| "id": 0, |
| "init_state": "start", |
| "parse_states": [ |
| { |
| "name": "start", |
| "id": 0, |
| "parser_ops": [], |
| "transition_key": [], |
| "transitions": [ |
| { |
| "value": "default", |
| "mask": null, |
| "next_state": "parse_ethernet" |
| } |
| ] |
| }, |
| { |
| "name": "parse_ethernet", |
| "id": 1, |
| "parser_ops": [ |
| { |
| "op": "extract", |
| "parameters": [ |
| { |
| "type": "regular", |
| "value": "ethernet" |
| } |
| ] |
| } |
| ], |
| "transition_key": [ |
| { |
| "type": "field", |
| "value": [ |
| "ethernet", |
| "etherType" |
| ] |
| } |
| ], |
| "transitions": [ |
| { |
| "value": "0x0800", |
| "mask": null, |
| "next_state": "parse_ipv4" |
| }, |
| { |
| "value": "default", |
| "mask": null, |
| "next_state": null |
| } |
| ] |
| }, |
| { |
| "name": "parse_ipv4", |
| "id": 2, |
| "parser_ops": [ |
| { |
| "op": "extract", |
| "parameters": [ |
| { |
| "type": "regular", |
| "value": "ipv4" |
| } |
| ] |
| } |
| ], |
| "transition_key": [ |
| { |
| "type": "field", |
| "value": [ |
| "ipv4", |
| "fragOffset" |
| ] |
| }, |
| { |
| "type": "field", |
| "value": [ |
| "ipv4", |
| "protocol" |
| ] |
| } |
| ], |
| "transitions": [ |
| { |
| "value": "0x000006", |
| "mask": null, |
| "next_state": "parse_tcp" |
| }, |
| { |
| "value": "0x000011", |
| "mask": null, |
| "next_state": "parse_udp" |
| }, |
| { |
| "value": "default", |
| "mask": null, |
| "next_state": null |
| } |
| ] |
| }, |
| { |
| "name": "parse_tcp", |
| "id": 3, |
| "parser_ops": [ |
| { |
| "op": "extract", |
| "parameters": [ |
| { |
| "type": "regular", |
| "value": "tcp" |
| } |
| ] |
| } |
| ], |
| "transition_key": [], |
| "transitions": [ |
| { |
| "value": "default", |
| "mask": null, |
| "next_state": null |
| } |
| ] |
| }, |
| { |
| "name": "parse_udp", |
| "id": 4, |
| "parser_ops": [ |
| { |
| "op": "extract", |
| "parameters": [ |
| { |
| "type": "regular", |
| "value": "udp" |
| } |
| ] |
| } |
| ], |
| "transition_key": [], |
| "transitions": [ |
| { |
| "value": "default", |
| "mask": null, |
| "next_state": null |
| } |
| ] |
| } |
| ] |
| } |
| ], |
| "deparsers": [ |
| { |
| "name": "deparser", |
| "id": 0, |
| "order": [ |
| "ethernet", |
| "ipv4", |
| "tcp", |
| "udp" |
| ] |
| } |
| ], |
| "meter_arrays": [], |
| "actions": [ |
| { |
| "name": "set_egress_port", |
| "id": 0, |
| "runtime_data": [ |
| { |
| "name": "port", |
| "bitwidth": 9 |
| } |
| ], |
| "primitives": [ |
| { |
| "op": "modify_field", |
| "parameters": [ |
| { |
| "type": "field", |
| "value": [ |
| "standard_metadata", |
| "egress_spec" |
| ] |
| }, |
| { |
| "type": "runtime_data", |
| "value": 0 |
| } |
| ] |
| } |
| ] |
| }, |
| { |
| "name": "_drop", |
| "id": 1, |
| "runtime_data": [], |
| "primitives": [ |
| { |
| "op": "modify_field", |
| "parameters": [ |
| { |
| "type": "field", |
| "value": [ |
| "standard_metadata", |
| "egress_spec" |
| ] |
| }, |
| { |
| "type": "hexstr", |
| "value": "0x1ff" |
| } |
| ] |
| } |
| ] |
| }, |
| { |
| "name": "send_to_cpu", |
| "id": 2, |
| "runtime_data": [], |
| "primitives": [ |
| { |
| "op": "modify_field", |
| "parameters": [ |
| { |
| "type": "field", |
| "value": [ |
| "standard_metadata", |
| "egress_spec" |
| ] |
| }, |
| { |
| "type": "hexstr", |
| "value": "0xff" |
| } |
| ] |
| } |
| ] |
| }, |
| { |
| "name": "wcmp_group", |
| "id": 3, |
| "runtime_data": [ |
| { |
| "name": "groupId", |
| "bitwidth": 16 |
| } |
| ], |
| "primitives": [ |
| { |
| "op": "modify_field", |
| "parameters": [ |
| { |
| "type": "field", |
| "value": [ |
| "wcmp_meta", |
| "groupId" |
| ] |
| }, |
| { |
| "type": "runtime_data", |
| "value": 0 |
| } |
| ] |
| }, |
| { |
| "op": "modify_field_with_hash_based_offset", |
| "parameters": [ |
| { |
| "type": "field", |
| "value": [ |
| "wcmp_meta", |
| "numBits" |
| ] |
| }, |
| { |
| "type": "hexstr", |
| "value": "0x2" |
| }, |
| { |
| "type": "calculation", |
| "value": "wcmp_hash" |
| }, |
| { |
| "type": "hexstr", |
| "value": "0x3e" |
| } |
| ] |
| } |
| ] |
| }, |
| { |
| "name": "wcmp_set_selector", |
| "id": 4, |
| "runtime_data": [], |
| "primitives": [ |
| { |
| "op": "modify_field", |
| "parameters": [ |
| { |
| "type": "field", |
| "value": [ |
| "wcmp_meta", |
| "selector" |
| ] |
| }, |
| { |
| "type": "expression", |
| "value": { |
| "type": "expression", |
| "value": { |
| "op": "<<", |
| "left": { |
| "type": "expression", |
| "value": { |
| "op": "-", |
| "left": { |
| "type": "expression", |
| "value": { |
| "op": "<<", |
| "left": { |
| "type": "hexstr", |
| "value": "0x1" |
| }, |
| "right": { |
| "type": "field", |
| "value": [ |
| "wcmp_meta", |
| "numBits" |
| ] |
| } |
| } |
| }, |
| "right": { |
| "type": "hexstr", |
| "value": "0x1" |
| } |
| } |
| }, |
| "right": { |
| "type": "expression", |
| "value": { |
| "op": "-", |
| "left": { |
| "type": "hexstr", |
| "value": "0x40" |
| }, |
| "right": { |
| "type": "field", |
| "value": [ |
| "wcmp_meta", |
| "numBits" |
| ] |
| } |
| } |
| } |
| } |
| } |
| } |
| ] |
| } |
| ] |
| }, |
| { |
| "name": "count_packet", |
| "id": 5, |
| "runtime_data": [], |
| "primitives": [ |
| { |
| "op": "count", |
| "parameters": [ |
| { |
| "type": "counter_array", |
| "value": "ingress_port_counter" |
| }, |
| { |
| "type": "field", |
| "value": [ |
| "standard_metadata", |
| "ingress_port" |
| ] |
| } |
| ] |
| }, |
| { |
| "op": "count", |
| "parameters": [ |
| { |
| "type": "counter_array", |
| "value": "egress_port_counter" |
| }, |
| { |
| "type": "field", |
| "value": [ |
| "standard_metadata", |
| "egress_spec" |
| ] |
| } |
| ] |
| } |
| ] |
| } |
| ], |
| "pipelines": [ |
| { |
| "name": "ingress", |
| "id": 0, |
| "init_table": "table0", |
| "tables": [ |
| { |
| "name": "port_count_table", |
| "id": 0, |
| "match_type": "exact", |
| "type": "simple", |
| "max_size": 16384, |
| "with_counters": false, |
| "direct_meters": null, |
| "support_timeout": false, |
| "key": [], |
| "actions": [ |
| "count_packet" |
| ], |
| "next_tables": { |
| "count_packet": null |
| }, |
| "default_action": null, |
| "base_default_next": null |
| }, |
| { |
| "name": "table0", |
| "id": 1, |
| "match_type": "ternary", |
| "type": "simple", |
| "max_size": 16384, |
| "with_counters": true, |
| "direct_meters": null, |
| "support_timeout": true, |
| "key": [ |
| { |
| "match_type": "ternary", |
| "target": [ |
| "standard_metadata", |
| "ingress_port" |
| ], |
| "mask": null |
| }, |
| { |
| "match_type": "ternary", |
| "target": [ |
| "ethernet", |
| "dstAddr" |
| ], |
| "mask": null |
| }, |
| { |
| "match_type": "ternary", |
| "target": [ |
| "ethernet", |
| "srcAddr" |
| ], |
| "mask": null |
| }, |
| { |
| "match_type": "ternary", |
| "target": [ |
| "ethernet", |
| "etherType" |
| ], |
| "mask": null |
| } |
| ], |
| "actions": [ |
| "set_egress_port", |
| "wcmp_group", |
| "send_to_cpu", |
| "_drop" |
| ], |
| "next_tables": { |
| "set_egress_port": "_condition_0", |
| "wcmp_group": "wcmp_set_selector_table", |
| "send_to_cpu": "_condition_0", |
| "_drop": "_condition_0" |
| }, |
| "default_action": null, |
| "base_default_next": "_condition_0" |
| }, |
| { |
| "name": "wcmp_set_selector_table", |
| "id": 2, |
| "match_type": "exact", |
| "type": "simple", |
| "max_size": 16384, |
| "with_counters": false, |
| "direct_meters": null, |
| "support_timeout": false, |
| "key": [], |
| "actions": [ |
| "wcmp_set_selector" |
| ], |
| "next_tables": { |
| "wcmp_set_selector": "wcmp_group_table" |
| }, |
| "default_action": null, |
| "base_default_next": "_condition_0" |
| }, |
| { |
| "name": "wcmp_group_table", |
| "id": 3, |
| "match_type": "lpm", |
| "type": "simple", |
| "max_size": 16384, |
| "with_counters": true, |
| "direct_meters": null, |
| "support_timeout": false, |
| "key": [ |
| { |
| "match_type": "exact", |
| "target": [ |
| "wcmp_meta", |
| "groupId" |
| ], |
| "mask": null |
| }, |
| { |
| "match_type": "lpm", |
| "target": [ |
| "wcmp_meta", |
| "selector" |
| ], |
| "mask": null |
| } |
| ], |
| "actions": [ |
| "set_egress_port" |
| ], |
| "next_tables": { |
| "set_egress_port": "_condition_0" |
| }, |
| "default_action": null, |
| "base_default_next": "_condition_0" |
| } |
| ], |
| "conditionals": [ |
| { |
| "name": "_condition_0", |
| "id": 0, |
| "expression": { |
| "type": "expression", |
| "value": { |
| "op": "<", |
| "left": { |
| "type": "field", |
| "value": [ |
| "standard_metadata", |
| "egress_spec" |
| ] |
| }, |
| "right": { |
| "type": "hexstr", |
| "value": "0xfe" |
| } |
| } |
| }, |
| "true_next": "port_count_table", |
| "false_next": null |
| } |
| ] |
| }, |
| { |
| "name": "egress", |
| "id": 1, |
| "init_table": null, |
| "tables": [], |
| "conditionals": [] |
| } |
| ], |
| "calculations": [ |
| { |
| "name": "wcmp_hash", |
| "id": 0, |
| "input": [ |
| { |
| "type": "field", |
| "value": [ |
| "ipv4", |
| "srcAddr" |
| ] |
| }, |
| { |
| "type": "field", |
| "value": [ |
| "ipv4", |
| "dstAddr" |
| ] |
| }, |
| { |
| "type": "field", |
| "value": [ |
| "ipv4", |
| "protocol" |
| ] |
| }, |
| { |
| "type": "field", |
| "value": [ |
| "tcp", |
| "srcPort" |
| ] |
| }, |
| { |
| "type": "field", |
| "value": [ |
| "tcp", |
| "dstPort" |
| ] |
| }, |
| { |
| "type": "field", |
| "value": [ |
| "udp", |
| "srcPort" |
| ] |
| }, |
| { |
| "type": "field", |
| "value": [ |
| "udp", |
| "dstPort" |
| ] |
| } |
| ], |
| "algo": "bmv2_hash" |
| } |
| ], |
| "checksums": [], |
| "learn_lists": [], |
| "field_lists": [], |
| "counter_arrays": [ |
| { |
| "name": "ingress_port_counter", |
| "id": 0, |
| "is_direct": false, |
| "size": 254 |
| }, |
| { |
| "name": "egress_port_counter", |
| "id": 1, |
| "is_direct": false, |
| "size": 254 |
| }, |
| { |
| "name": "table0_counter", |
| "id": 2, |
| "is_direct": true, |
| "binding": "table0" |
| }, |
| { |
| "name": "wcmp_group_table_counter", |
| "id": 3, |
| "is_direct": true, |
| "binding": "wcmp_group_table" |
| } |
| ], |
| "register_arrays": [], |
| "force_arith": [ |
| [ |
| "standard_metadata", |
| "ingress_port" |
| ], |
| [ |
| "standard_metadata", |
| "packet_length" |
| ], |
| [ |
| "standard_metadata", |
| "egress_spec" |
| ], |
| [ |
| "standard_metadata", |
| "egress_port" |
| ], |
| [ |
| "standard_metadata", |
| "egress_instance" |
| ], |
| [ |
| "standard_metadata", |
| "instance_type" |
| ], |
| [ |
| "standard_metadata", |
| "clone_spec" |
| ], |
| [ |
| "standard_metadata", |
| "_padding" |
| ], |
| [ |
| "intrinsic_metadata", |
| "ingress_global_timestamp" |
| ], |
| [ |
| "intrinsic_metadata", |
| "lf_field_list" |
| ], |
| [ |
| "intrinsic_metadata", |
| "mcast_grp" |
| ], |
| [ |
| "intrinsic_metadata", |
| "egress_rid" |
| ] |
| ] |
| } |