Skip to content

Commit ce1c444

Browse files
authored
[muxcable][show] update show mux tunnel-route to separate ASIC and kernel into two columns (#2553)
Stemming from sonic-net/sonic-swss#2557. This PR is to update show mux tunnel-route command to show status of both ASIC and kernel tunnel routes. sign-off: Jing Zhang [email protected] What I did How I did it How to verify it Previous command output (if the output of a command-line utility has changed) Only check Kernel Route, if removing tunnel route for server_ipv4 in kernel, it won't show in CMD output: zhangjing@********************:~$ show mux tunnel-route Ethernet4 PORT DEST_TYPE DEST_ADDRESS --------- ----------- -------------------------------- Ethernet4 server_ipv6 2603:10b0:d11:8614::a32:9112/128 New command output (if the output of a command-line utility has changed) Check both ASIC and APP DB for tunnel route status zhangjing@********************:~$ show mux tunnel-route Ethernet4 PORT DEST_TYPE DEST_ADDRESS kernel asic --------- ----------- -------------------------------- -------- ------ Ethernet4 server_ipv4 10.50.145.18/32 - added Ethernet4 server_ipv6 2603:10b0:d11:8614::a32:9112/128 added added
1 parent 49fc389 commit ce1c444

File tree

3 files changed

+48
-25
lines changed

3 files changed

+48
-25
lines changed

show/muxcable.py

+27-14
Original file line numberDiff line numberDiff line change
@@ -549,7 +549,7 @@ def create_json_dump_per_port_config(db, port_status_dict, per_npu_configdb, asi
549549
if soc_ipv4_value is not None:
550550
port_status_dict["MUX_CABLE"]["PORTS"][port_name]["SERVER"]["soc_ipv4"] = soc_ipv4_value
551551

552-
def get_tunnel_route_per_port(db, port_tunnel_route, per_npu_configdb, per_npu_appl_db, asic_id, port):
552+
def get_tunnel_route_per_port(db, port_tunnel_route, per_npu_configdb, per_npu_appl_db, per_npu_asic_db, asic_id, port):
553553

554554
mux_cfg_dict = per_npu_configdb[asic_id].get_all(
555555
per_npu_configdb[asic_id].CONFIG_DB, 'MUX_CABLE|{}'.format(port))
@@ -559,31 +559,40 @@ def get_tunnel_route_per_port(db, port_tunnel_route, per_npu_configdb, per_npu_a
559559
dest_address = mux_cfg_dict.get(name, None)
560560

561561
if dest_address is not None:
562-
route_keys = per_npu_appl_db[asic_id].keys(
562+
kernel_route_keys = per_npu_appl_db[asic_id].keys(
563563
per_npu_appl_db[asic_id].APPL_DB, 'TUNNEL_ROUTE_TABLE:*{}'.format(dest_address))
564-
565-
if route_keys is not None and len(route_keys):
564+
if_kernel_tunnel_route_programed = kernel_route_keys is not None and len(kernel_route_keys)
565+
566+
asic_route_keys = per_npu_asic_db[asic_id].keys(
567+
per_npu_asic_db[asic_id].ASIC_DB, 'ASIC_STATE:SAI_OBJECT_TYPE_ROUTE_ENTRY:*{}*'.format(dest_address))
568+
if_asic_tunnel_route_programed = asic_route_keys is not None and len(asic_route_keys)
566569

570+
if if_kernel_tunnel_route_programed or if_asic_tunnel_route_programed:
567571
port_tunnel_route["TUNNEL_ROUTE"][port] = port_tunnel_route["TUNNEL_ROUTE"].get(port, {})
568572
port_tunnel_route["TUNNEL_ROUTE"][port][name] = {}
569573
port_tunnel_route["TUNNEL_ROUTE"][port][name]['DEST'] = dest_address
570574

571-
def create_json_dump_per_port_tunnel_route(db, port_tunnel_route, per_npu_configdb, per_npu_appl_db, asic_id, port):
575+
port_tunnel_route["TUNNEL_ROUTE"][port][name]['kernel'] = if_kernel_tunnel_route_programed
576+
port_tunnel_route["TUNNEL_ROUTE"][port][name]['asic'] = if_asic_tunnel_route_programed
572577

573-
get_tunnel_route_per_port(db, port_tunnel_route, per_npu_configdb, per_npu_appl_db, asic_id, port)
578+
def create_json_dump_per_port_tunnel_route(db, port_tunnel_route, per_npu_configdb, per_npu_appl_db, per_npu_asic_db, asic_id, port):
574579

575-
def create_table_dump_per_port_tunnel_route(db, print_data, per_npu_configdb, per_npu_appl_db, asic_id, port):
580+
get_tunnel_route_per_port(db, port_tunnel_route, per_npu_configdb, per_npu_appl_db, per_npu_asic_db, asic_id, port)
581+
582+
def create_table_dump_per_port_tunnel_route(db, print_data, per_npu_configdb, per_npu_appl_db, per_npu_asic_db, asic_id, port):
576583

577584
port_tunnel_route = {}
578585
port_tunnel_route["TUNNEL_ROUTE"] = {}
579-
get_tunnel_route_per_port(db, port_tunnel_route, per_npu_configdb, per_npu_appl_db, asic_id, port)
586+
get_tunnel_route_per_port(db, port_tunnel_route, per_npu_configdb, per_npu_appl_db, per_npu_asic_db, asic_id, port)
580587

581588
for port, route in port_tunnel_route["TUNNEL_ROUTE"].items():
582589
for dest_name, values in route.items():
583590
print_line = []
584591
print_line.append(port)
585592
print_line.append(dest_name)
586593
print_line.append(values['DEST'])
594+
print_line.append('added' if values['kernel'] else '-')
595+
print_line.append('added' if values['asic'] else '-')
587596
print_data.append(print_line)
588597

589598
@muxcable.command()
@@ -1904,6 +1913,7 @@ def tunnel_route(db, port, json_output):
19041913
port = platform_sfputil_helper.get_interface_name(port, db)
19051914

19061915
per_npu_appl_db = {}
1916+
per_npu_asic_db = {}
19071917
per_npu_configdb = {}
19081918
mux_tbl_keys = {}
19091919

@@ -1914,6 +1924,9 @@ def tunnel_route(db, port, json_output):
19141924
per_npu_appl_db[asic_id] = swsscommon.SonicV2Connector(use_unix_socket_path=False, namespace=namespace)
19151925
per_npu_appl_db[asic_id].connect(per_npu_appl_db[asic_id].APPL_DB)
19161926

1927+
per_npu_asic_db[asic_id] = swsscommon.SonicV2Connector(use_unix_socket_path=False, namespace=namespace)
1928+
per_npu_asic_db[asic_id].connect(per_npu_asic_db[asic_id].ASIC_DB)
1929+
19171930
per_npu_configdb[asic_id] = swsscommon.SonicV2Connector(use_unix_socket_path=False, namespace=namespace)
19181931
per_npu_configdb[asic_id].connect(per_npu_configdb[asic_id].CONFIG_DB)
19191932

@@ -1947,16 +1960,16 @@ def tunnel_route(db, port, json_output):
19471960
port_tunnel_route = {}
19481961
port_tunnel_route["TUNNEL_ROUTE"] = {}
19491962

1950-
create_json_dump_per_port_tunnel_route(db, port_tunnel_route, per_npu_configdb, per_npu_appl_db, asic_index, port)
1963+
create_json_dump_per_port_tunnel_route(db, port_tunnel_route, per_npu_configdb, per_npu_appl_db, per_npu_asic_db, asic_index, port)
19511964

19521965
click.echo("{}".format(json.dumps(port_tunnel_route, indent=4)))
19531966

19541967
else:
19551968
print_data = []
19561969

1957-
create_table_dump_per_port_tunnel_route(db, print_data, per_npu_configdb, per_npu_appl_db, asic_index, port)
1970+
create_table_dump_per_port_tunnel_route(db, print_data, per_npu_configdb, per_npu_appl_db, per_npu_asic_db, asic_index, port)
19581971

1959-
headers = ['PORT', 'DEST_TYPE', 'DEST_ADDRESS']
1972+
headers = ['PORT', 'DEST_TYPE', 'DEST_ADDRESS', 'kernel', 'asic']
19601973

19611974
click.echo(tabulate(print_data, headers=headers))
19621975
else:
@@ -1972,7 +1985,7 @@ def tunnel_route(db, port, json_output):
19721985
for key in natsorted(mux_tbl_keys[asic_id]):
19731986
port = key.split("|")[1]
19741987

1975-
create_json_dump_per_port_tunnel_route(db, port_tunnel_route, per_npu_configdb, per_npu_appl_db, asic_id, port)
1988+
create_json_dump_per_port_tunnel_route(db, port_tunnel_route, per_npu_configdb, per_npu_appl_db, per_npu_asic_db, asic_id, port)
19761989

19771990
click.echo("{}".format(json.dumps(port_tunnel_route, indent=4)))
19781991
else:
@@ -1983,9 +1996,9 @@ def tunnel_route(db, port, json_output):
19831996
for key in natsorted(mux_tbl_keys[asic_id]):
19841997
port = key.split("|")[1]
19851998

1986-
create_table_dump_per_port_tunnel_route(db, print_data, per_npu_configdb, per_npu_appl_db, asic_id, port)
1999+
create_table_dump_per_port_tunnel_route(db, print_data, per_npu_configdb, per_npu_appl_db, per_npu_asic_db, asic_id, port)
19872000

1988-
headers = ['PORT', 'DEST_TYPE', 'DEST_ADDRESS']
2001+
headers = ['PORT', 'DEST_TYPE', 'DEST_ADDRESS', 'kernel', 'asic']
19892002

19902003
click.echo(tabulate(print_data, headers=headers))
19912004

tests/mock_tables/asic_db.json

+5-1
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,9 @@
1919
"VIDTORID":{
2020
"oid:0xd00000000056d": "oid:0xd",
2121
"oid:0x10000000004a4": "oid:0x1690000000001"
22-
}
22+
},
23+
"ASIC_STATE:SAI_OBJECT_TYPE_ROUTE_ENTRY:{\"dest\":\"10.2.1.1\",\"switch_id\":\"oid:0x21000000000000\",\"vr\":\"oid:0x300000000007c\"}": {
24+
"SAI_ROUTE_ENTRY_ATTR_PACKET_ACTION": "SAI_PACKET_ACTION_FORWARD",
25+
"SAI_ROUTE_ENTRY_ATTR_NEXT_HOP_ID": "oid:0x40000000015d8"
26+
}
2327
}

tests/muxcable_test.py

+16-10
Original file line numberDiff line numberDiff line change
@@ -515,41 +515,47 @@
515515
"TUNNEL_ROUTE": {
516516
"Ethernet0": {
517517
"server_ipv4": {
518-
"DEST": "10.2.1.1"
518+
"DEST": "10.2.1.1",
519+
"kernel": 1,
520+
"asic": 1
519521
}
520522
},
521523
"Ethernet4": {
522524
"server_ipv4": {
523-
"DEST": "10.3.1.1"
525+
"DEST": "10.3.1.1",
526+
"kernel": 1,
527+
"asic": false
524528
}
525529
}
526530
}
527531
}
528532
"""
529533

530534
show_muxcable_tunnel_route_expected_output="""\
531-
PORT DEST_TYPE DEST_ADDRESS
532-
--------- ----------- --------------
533-
Ethernet0 server_ipv4 10.2.1.1
534-
Ethernet4 server_ipv4 10.3.1.1
535+
PORT DEST_TYPE DEST_ADDRESS kernel asic
536+
--------- ----------- -------------- -------- ------
537+
Ethernet0 server_ipv4 10.2.1.1 added added
538+
Ethernet4 server_ipv4 10.3.1.1 added -
535539
"""
536540

537541
show_muxcable_tunnel_route_expected_output_port_json="""\
538542
{
539543
"TUNNEL_ROUTE": {
540544
"Ethernet0": {
541545
"server_ipv4": {
542-
"DEST": "10.2.1.1"
546+
"DEST": "10.2.1.1",
547+
"kernel": 1,
548+
"asic": 1
543549
}
544550
}
545551
}
546552
}
547553
"""
548554

549555
show_muxcable_tunnel_route_expected_port_output="""\
550-
PORT DEST_TYPE DEST_ADDRESS
551-
--------- ----------- --------------
552-
Ethernet0 server_ipv4 10.2.1.1
556+
PORT DEST_TYPE DEST_ADDRESS kernel asic
557+
--------- ----------- -------------- -------- ------
558+
Ethernet0 server_ipv4 10.2.1.1 added added
553559
"""
554560

555561
class TestMuxcable(object):

0 commit comments

Comments
 (0)