Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add show CLI for bmp related dataset. #3289

Merged
merged 26 commits into from
Sep 6, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
58485b8
Add CLI for bmp state_db dataset show.
FengPan-Frank Apr 24, 2024
164a39a
Add CLI for bmp state_db dataset show.
FengPan-Frank Apr 24, 2024
6923770
Merge branch 'bmpcli_show' of https://github.com/FengPan-Frank/sonic-…
FengPan-Frank Apr 24, 2024
ce89282
Merge branch 'bmpcli_show' of https://github.com/FengPan-Frank/sonic-…
FengPan-Frank Apr 24, 2024
8efac4c
Merge branch 'bmpcli_show' of https://github.com/FengPan-Frank/sonic-…
FengPan-Frank Apr 24, 2024
874eb8a
Merge branch 'bmpcli_show' of https://github.com/FengPan-Frank/sonic-…
FengPan-Frank Apr 24, 2024
11da19e
Merge branch 'bmpcli_show' of https://github.com/FengPan-Frank/sonic-…
FengPan-Frank Apr 24, 2024
9cb45fc
Merge branch 'bmpcli_show' of https://github.com/FengPan-Frank/sonic-…
FengPan-Frank Apr 24, 2024
f686e7a
Merge branch 'bmpcli_show' of https://github.com/FengPan-Frank/sonic-…
FengPan-Frank Apr 25, 2024
5adad73
Merge branch 'bmpcli_show' of https://github.com/FengPan-Frank/sonic-…
FengPan-Frank Apr 25, 2024
ea68902
Merge branch 'bmpcli_show' of https://github.com/FengPan-Frank/sonic-…
FengPan-Frank Apr 25, 2024
9cff051
Merge branch 'bmpcli_show' of https://github.com/FengPan-Frank/sonic-…
FengPan-Frank Apr 25, 2024
2f51853
Merge branch 'bmpcli_show' of https://github.com/FengPan-Frank/sonic-…
FengPan-Frank May 9, 2024
50e22f1
Merge branch 'bmpcli_show' of https://github.com/FengPan-Frank/sonic-…
FengPan-Frank May 9, 2024
b5ef8fd
Merge branch 'bmpcli_show' of https://github.com/FengPan-Frank/sonic-…
FengPan-Frank May 13, 2024
8366a68
Merge branch 'bmpcli_show' of https://github.com/FengPan-Frank/sonic-…
FengPan-Frank May 13, 2024
fda0ac5
Merge branch 'bmpcli_show' of https://github.com/FengPan-Frank/sonic-…
FengPan-Frank May 16, 2024
e0aaee1
Merge branch 'bmpcli_show' of https://github.com/FengPan-Frank/sonic-…
FengPan-Frank May 16, 2024
519b3b1
Merge branch 'bmpcli_show' of https://github.com/FengPan-Frank/sonic-…
FengPan-Frank May 29, 2024
fd27176
Merge branch 'bmpcli_show' of https://github.com/FengPan-Frank/sonic-…
FengPan-Frank May 29, 2024
e6b6873
Merge branch 'bmpcli_show' of https://github.com/FengPan-Frank/sonic-…
FengPan-Frank May 29, 2024
b17c89a
Merge branch 'sonic-net:master' into bmpcli_show
FengPan-Frank Aug 29, 2024
7845a02
Update db instance
FengPan-Frank Aug 29, 2024
1c9cfe7
Update db instance
FengPan-Frank Aug 29, 2024
5a81b72
Merge branch 'bmpcli_show' of https://github.com/FengPan-Frank/sonic-…
FengPan-Frank Aug 29, 2024
1a2d2c3
update test
FengPan-Frank Sep 5, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
133 changes: 133 additions & 0 deletions show/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@
PLATFORM_JSON = 'platform.json'
HWSKU_JSON = 'hwsku.json'
PORT_STR = "Ethernet"
BMP_STATE_DB = 'BMP_STATE_DB'

VLAN_SUB_INTERFACE_SEPARATOR = '.'

Expand Down Expand Up @@ -2095,6 +2096,138 @@ def ztp(status, verbose):
run_command(cmd, display_cmd=verbose)


#
# 'bmp' group ("show bmp ...")
#
@cli.group(cls=clicommon.AliasedGroup)
def bmp():
"""Show details of the bmp dataset"""
pass


# 'bgp-neighbor-table' subcommand ("show bmp bgp-neighbor-table")
@bmp.command('bgp-neighbor-table')
@clicommon.pass_db
def bmp_neighbor_table(db):
"""Show bmp bgp-neighbor-table information"""
bmp_headers = ["Neighbor_Address", "Peer_Address", "Peer_ASN", "Peer_RD", "Peer_Port",
"Local_Address", "Local_ASN", "Local_Port", "Advertised_Capabilities", "Received_Capabilities"]

# BGP_NEIGHBOR_TABLE|10.0.1.2
bmp_keys = db.db.keys(BMP_STATE_DB, "BGP_NEIGHBOR_TABLE|*")

click.echo("Total number of bmp neighbors: {}".format(0 if bmp_keys is None else len(bmp_keys)))

bmp_body = []
if bmp_keys is not None:
for key in bmp_keys:
values = db.db.get_all(BMP_STATE_DB, key)
bmp_body.append([
values["peer_addr"], # Neighbor_Address
values["peer_addr"],
values["peer_asn"],
values["peer_rd"],
values["peer_port"],
values["local_addr"],
values["local_asn"],
values["local_port"],
values["sent_cap"],
values["recv_cap"]
])

click.echo(tabulate(bmp_body, bmp_headers))


# 'bmp-rib-out-table' subcommand ("show bmp bgp-rib-out-table")
@bmp.command('bgp-rib-out-table')
@clicommon.pass_db
def bmp_rib_out_table(db):
"""Show bmp bgp-rib-out-table information"""
bmp_headers = ["Neighbor_Address", "NLRI", "Origin", "AS_Path", "Origin_AS", "Next_Hop", "Local_Pref",
"Originator_ID", "Community_List", "Ext_Community_List"]

# BGP_RIB_OUT_TABLE|192.181.168.0/25|10.0.0.59
bmp_keys = db.db.keys(BMP_STATE_DB, "BGP_RIB_OUT_TABLE|*")
delimiter = db.db.get_db_separator(BMP_STATE_DB)

click.echo("Total number of bmp bgp-rib-out-table: {}".format(0 if bmp_keys is None else len(bmp_keys)))

bmp_body = []
if bmp_keys is not None:
for key in bmp_keys:
key_values = key.split(delimiter)
if len(key_values) < 3:
continue
values = db.db.get_all(BMP_STATE_DB, key)
bmp_body.append([
key_values[2], # Neighbor_Address
key_values[1], # NLRI
values["origin"],
values["as_path"],
values["origin_as"],
values["next_hop"],
values["local_pref"],
values["originator_id"],
values["community_list"],
values["ext_community_list"]
])

click.echo(tabulate(bmp_body, bmp_headers))


# 'bgp-rib-in-table' subcommand ("show bmp bgp-rib-in-table")
@bmp.command('bgp-rib-in-table')
@clicommon.pass_db
def bmp_rib_in_table(db):
"""Show bmp bgp-rib-in-table information"""
bmp_headers = ["Neighbor_Address", "NLRI", "Origin", "AS_Path", "Origin_AS", "Next_Hop", "Local_Pref",
"Originator_ID", "Community_List", "Ext_Community_List"]

# BGP_RIB_IN_TABLE|20c0:ef50::/64|10.0.0.57
bmp_keys = db.db.keys(BMP_STATE_DB, "BGP_RIB_IN_TABLE|*")
delimiter = db.db.get_db_separator(BMP_STATE_DB)

click.echo("Total number of bmp bgp-rib-in-table: {}".format(0 if bmp_keys is None else len(bmp_keys)))

bmp_body = []
if bmp_keys is not None:
for key in bmp_keys:
key_values = key.split(delimiter)
if len(key_values) < 3:
continue
values = db.db.get_all(BMP_STATE_DB, key)
bmp_body.append([
key_values[2], # Neighbor_Address
key_values[1], # NLRI
values["origin"],
values["as_path"],
values["origin_as"],
values["next_hop"],
values["local_pref"],
values["originator_id"],
values["community_list"],
values["ext_community_list"]
])

click.echo(tabulate(bmp_body, bmp_headers))


# 'tables' subcommand ("show bmp tables")
@bmp.command('tables')
@clicommon.pass_db
def tables(db):
"""Show bmp table status information"""
bmp_headers = ["Table_Name", "Enabled"]
bmp_body = []
click.echo("BMP tables: ")
bmp_keys = db.cfgdb.get_table('BMP')
if bmp_keys['table']:
bmp_body.append(['bgp_neighbor_table', bmp_keys['table']['bgp_neighbor_table']])
bmp_body.append(['bgp_rib_in_table', bmp_keys['table']['bgp_rib_in_table']])
bmp_body.append(['bgp_rib_out_table', bmp_keys['table']['bgp_rib_out_table']])
click.echo(tabulate(bmp_body, bmp_headers))


#
# 'bfd' group ("show bfd ...")
#
Expand Down
10 changes: 10 additions & 0 deletions tests/mock_tables/asic0/database_config.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,11 @@
"hostname" : "127.0.0.1",
"port" : 6379,
"unix_socket_path" : "/var/run/redis/redis.sock"
},
"redis_bmp": {
"hostname" : "127.0.0.1",
"port" : 6400,
"unix_socket_path" : "/var/run/redis/redis_bmp.sock"
}
},
"DATABASES" : {
Expand Down Expand Up @@ -51,6 +56,11 @@
"id" : 7,
"separator": "|",
"instance" : "redis"
},
"BMP_STATE_DB" : {
"id" : 20,
"separator": "|",
"instance" : "redis_bmp"
}
},
"VERSION" : "1.1"
Expand Down
10 changes: 10 additions & 0 deletions tests/mock_tables/asic1/database_config.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,11 @@
"hostname" : "127.0.0.1",
"port" : 6379,
"unix_socket_path" : "/var/run/redis/redis.sock"
},
"redis_bmp": {
"hostname" : "127.0.0.1",
"port" : 6400,
"unix_socket_path" : "/var/run/redis/redis_bmp.sock"
}
},
"DATABASES" : {
Expand Down Expand Up @@ -51,6 +56,11 @@
"id" : 7,
"separator": "|",
"instance" : "redis"
},
"BMP_STATE_DB" : {
"id" : 20,
"separator": "|",
"instance" : "redis_bmp"
}
},
"VERSION" : "1.1"
Expand Down
10 changes: 10 additions & 0 deletions tests/mock_tables/asic2/database_config.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,11 @@
"hostname" : "127.0.0.1",
"port" : 6379,
"unix_socket_path" : "/var/run/redis/redis.sock"
},
"redis_bmp": {
"hostname" : "127.0.0.1",
"port" : 6400,
"unix_socket_path" : "/var/run/redis/redis_bmp.sock"
}
},
"DATABASES" : {
Expand Down Expand Up @@ -51,6 +56,11 @@
"id" : 7,
"separator": "|",
"instance" : "redis"
},
"BMP_STATE_DB" : {
"id" : 20,
"separator": "|",
"instance" : "redis_bmp"
}
},
"VERSION" : "1.1"
Expand Down
10 changes: 10 additions & 0 deletions tests/mock_tables/database_config.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,11 @@
"hostname" : "227.0.0.1",
"port" : 6379,
"unix_socket_path" : "/var/run/redis/redis.sock"
},
"redis_bmp": {
"hostname" : "127.0.0.1",
"port" : 6400,
"unix_socket_path" : "/var/run/redis/redis_bmp.sock"
}
},
"DATABASES" : {
Expand Down Expand Up @@ -61,6 +66,11 @@
"id" : 13,
"separator": "|",
"instance" : "redis"
},
"BMP_STATE_DB" : {
"id" : 20,
"separator": "|",
"instance" : "redis_bmp"
}
},
"VERSION" : "1.1"
Expand Down
Loading
Loading