Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
12 changes: 0 additions & 12 deletions sfputil/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -869,20 +869,14 @@ def eeprom_hexdump_pages_general(logical_port_name, pages, target_page):
if page == 0:
lines.append(f'{EEPROM_DUMP_INDENT}Lower page 0h')
return_code, output = eeprom_dump_general(physical_port, page, 0, PAGE_SIZE, 0)
if return_code != 0:
return return_code, output
lines.append(output)

lines.append(f'\n{EEPROM_DUMP_INDENT}Upper page 0h')
return_code, output = eeprom_dump_general(physical_port, page, PAGE_OFFSET, PAGE_SIZE, PAGE_OFFSET)
if return_code != 0:
return return_code, output
lines.append(output)
else:
lines.append(f'\n{EEPROM_DUMP_INDENT}Upper page {page:x}h')
return_code, output = eeprom_dump_general(physical_port, page, page * PAGE_SIZE + PAGE_OFFSET, PAGE_SIZE, PAGE_OFFSET)
if return_code != 0:
return return_code, output
lines.append(output)

lines.append('') # add a new line
Expand Down Expand Up @@ -915,20 +909,14 @@ def eeprom_hexdump_pages_sff8472(logical_port_name, pages, target_page):
return_code, output = eeprom_dump_general(physical_port, page, 0, SFF8472_A0_SIZE, 0)
else:
return_code, output = eeprom_dump_general(physical_port, page, 0, PAGE_SIZE, 0)
if return_code != 0:
return return_code, 'Error: Failed to read EEPROM for A0h!'
lines.append(output)
elif page == 1:
lines.append(f'\n{EEPROM_DUMP_INDENT}A2h dump (lower 128 bytes)')
return_code, output = eeprom_dump_general(physical_port, page, SFF8472_A0_SIZE, PAGE_SIZE, 0)
if return_code != 0:
return ERROR_NOT_IMPLEMENTED, 'Error: Failed to read EEPROM for A2h!'
lines.append(output)
else:
lines.append(f'\n{EEPROM_DUMP_INDENT}A2h dump (upper 128 bytes) page {page - 2:x}h')
return_code, output = eeprom_dump_general(physical_port, page, SFF8472_A0_SIZE + PAGE_OFFSET + page * PAGE_SIZE, PAGE_SIZE, PAGE_SIZE)
if return_code != 0:
return ERROR_NOT_IMPLEMENTED, 'Error: Failed to read EEPROM for A2h upper page!'
lines.append(output)

lines.append('') # add a new line
Expand Down
97 changes: 56 additions & 41 deletions show/vnet.py
Original file line number Diff line number Diff line change
Expand Up @@ -441,7 +441,8 @@ def routes():
"""Show vnet routes related information"""
pass

def pretty_print(table, r, epval, mac_addr, vni, state):

def pretty_print(table, r, epval, mac_addr, vni, metric, state):
endpoints = epval.split(',')
row_width = 3
max_len = 0
Expand All @@ -458,87 +459,101 @@ def pretty_print(table, r, epval, mac_addr, vni, state):
if iter == 0:
r.append(mac_addr)
r.append(vni)
r.append(metric)
r.append(state)
else:
r.extend(["", "", ""])
r.extend(["", "", "", ""])
iter += row_width
table.append(r)
r = ["",""]

@routes.command()
def all():
@click.argument('vnet_name', required=False)
def all(vnet_name):
"""Show all vnet routes"""

appl_db = SonicV2Connector()
appl_db.connect(appl_db.APPL_DB)
state_db = SonicV2Connector()
state_db.connect(state_db.STATE_DB)
header = ['vnet name', 'prefix', 'nexthop', 'interface']

# Fetching data from appl_db for VNET ROUTES
_show_local_helper(vnet_name=vnet_name, appl_db=appl_db)
click.echo()
_show_tunnel_helper(vnet_name=vnet_name, appl_db=appl_db, state_db=state_db)


@routes.command()
@click.argument('vnet_name', required=False)
def local(vnet_name):
"""Show local vnet routes"""

appl_db = SonicV2Connector()

_show_local_helper(vnet_name=vnet_name, appl_db=appl_db)


@routes.command()
@click.argument('vnet_name', required=False)
def tunnel(vnet_name):
"""Show vnet tunnel routes"""

appl_db = SonicV2Connector()
state_db = SonicV2Connector()

_show_tunnel_helper(vnet_name=vnet_name, appl_db=appl_db, state_db=state_db)


def _show_local_helper(vnet_name=None, appl_db=None):
route_header = ['vnet name', 'prefix', 'nexthop', 'interface']

appl_db.connect(appl_db.APPL_DB)

# VNET routes
table = []
vnet_rt_keys = appl_db.keys(appl_db.APPL_DB, "VNET_ROUTE_TABLE:*")
vnet_rt_keys = natsorted(vnet_rt_keys) if vnet_rt_keys else []

table = []
for k in vnet_rt_keys:
if vnet_name and k.split(":")[1] != vnet_name:
continue
r = []
r.extend(k.split(":", 2)[1:])
val = appl_db.get_all(appl_db.APPL_DB, k)
r.append(val.get('nexthop'))
r.append(val.get('ifname'))
table.append(r)

click.echo(tabulate(table, header))
click.echo(tabulate(table, route_header))

click.echo()

header = ['vnet name', 'prefix', 'endpoint', 'mac address', 'vni', 'status']
def _show_tunnel_helper(vnet_name=None, appl_db=None, state_db=None):
tunnel_header = ['vnet name', 'prefix', 'endpoint', 'mac address', 'vni', 'metric', 'status']

# Fetching data from appl_db for VNET TUNNEL ROUTES
appl_db.connect(appl_db.APPL_DB)
state_db.connect(state_db.STATE_DB)

# VNET tunnel routes
table = []
vnet_rt_keys = appl_db.keys(appl_db.APPL_DB, "VNET_ROUTE_TUNNEL_TABLE:*")
vnet_rt_keys = natsorted(vnet_rt_keys) if vnet_rt_keys else []

table = []
for k in vnet_rt_keys:
if vnet_name and k.split(":")[1] != vnet_name:
continue
r = []
r.extend(k.split(":", 2)[1:])
state_db_key = '|'.join(k.split(":",2))
state_db_key = '|'.join(k.split(":", 2))
val = appl_db.get_all(appl_db.APPL_DB, k)
val_state = state_db.get_all(state_db.STATE_DB, state_db_key)
epval = val.get('endpoint')
if len(epval) < 40:
r.append(epval)
r.append(val.get('mac_address'))
r.append(val.get('vni'))
r.append(val.get('metric'))
if val_state:
r.append(val_state.get('state'))
table.append(r)
continue
state = val_state.get('state') if val_state else ""
pretty_print(table, r, epval, val.get('mac_address'), val.get('vni'), state )

click.echo(tabulate(table, header))


@routes.command()
def tunnel():
"""Show vnet tunnel routes"""
appl_db = SonicV2Connector()
appl_db.connect(appl_db.APPL_DB)

header = ['vnet name', 'prefix', 'endpoint', 'mac address', 'vni']

# Fetching data from appl_db for VNET TUNNEL ROUTES
vnet_rt_keys = appl_db.keys(appl_db.APPL_DB, "VNET_ROUTE_TUNNEL_TABLE:*")
vnet_rt_keys = natsorted(vnet_rt_keys) if vnet_rt_keys else []

table = []
for k in vnet_rt_keys:
r = []
r.extend(k.split(":", 2)[1:])
val = appl_db.get_all(appl_db.APPL_DB, k)
r.append(val.get('endpoint'))
r.append(val.get('mac_address'))
r.append(val.get('vni'))
table.append(r)
pretty_print(table, r, epval, val.get('mac_address'), val.get('vni'), val.get('metric'), state)

click.echo(tabulate(table, header))
click.echo(tabulate(table, tunnel_header))
19 changes: 18 additions & 1 deletion tests/mock_tables/appl_db.json
Original file line number Diff line number Diff line change
Expand Up @@ -371,9 +371,26 @@
"TUNNEL_ROUTE_TABLE:10.3.1.1": {
"alias": "Vlan1000"
},
"VNET_ROUTE_TABLE:test_v4_in_v4-0:160.162.191.1/32": {
"nexthop": "100.100.4.1",
"ifname": "Ethernet1"
},
"VNET_ROUTE_TABLE:test_v4_in_v4-0:160.163.191.1/32": {
"nexthop": "100.101.4.1, 100.101.4.2",
"ifname": "Ethernet1, Ethernet2"
},
"VNET_ROUTE_TABLE:test_v4_in_v4-0:160.164.191.1/32": {
"nexthop": "100.102.4.1, 100.102.4.2, 100.102.4.3",
"ifname": "Ethernet1, Ethernet2, Ethernet3"
},
"VNET_ROUTE_TABLE:test_v4_in_v4-1:160.165.191.1/32": {
"nexthop": "100.103.4.1, 100.103.4.2, 100.103.4.3",
"ifname": "Ethernet1, Ethernet2, Ethernet3"
},
"VNET_ROUTE_TUNNEL_TABLE:test_v4_in_v4-0:160.163.191.1/32": {
"endpoint":"100.251.7.1",
"endpoint_monitor":"100.251.7.1"
"endpoint_monitor":"100.251.7.1",
"metric": "0"
},
"VNET_ROUTE_TUNNEL_TABLE:Vnet_v6_in_v6-0:fddd:a156:a251::a6:1/128": {
"endpoint": "fddd:a100:a251::a10:1,fddd:a101:a251::a10:1,fddd:a102:a251::a10:1,fddd:a103:a251::a10:1",
Expand Down
Loading
Loading