From ecec76a69d2abb084516e2b1f381a9552386b8cf Mon Sep 17 00:00:00 2001 From: KKK Date: Fri, 4 Jan 2019 16:01:09 +0530 Subject: [PATCH 1/6] Avoid shutdown/startup commands on invalid interface names --- config/main.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/config/main.py b/config/main.py index 99955d90c3..c8bb2d8bdb 100755 --- a/config/main.py +++ b/config/main.py @@ -99,7 +99,6 @@ def interface_name_to_alias(interface_name): for port_name in natsorted(port_dict.keys()): if interface_name == port_name: return port_dict[port_name]['alias'] - click.echo("Invalid interface {}".format(interface_alias)) return None @@ -823,6 +822,10 @@ def startup(ctx): config_db = ctx.obj['config_db'] interface_name = ctx.obj['interface_name'] + alias = interface_name_to_alias(interface_name) + if alias is None: + ctx.fail("Enter valid interface name!!") + if interface_name.startswith("Ethernet"): config_db.mod_entry("PORT", interface_name, {"admin_status": "up"}) elif interface_name.startswith("PortChannel"): @@ -838,6 +841,10 @@ def shutdown(ctx): config_db = ctx.obj['config_db'] interface_name = ctx.obj['interface_name'] + alias = interface_name_to_alias(interface_name) + if alias is None: + ctx.fail("Enter valid interface name!!") + if interface_name.startswith("Ethernet"): config_db.mod_entry("PORT", interface_name, {"admin_status": "down"}) elif interface_name.startswith("PortChannel"): From 3d424ddbcf019a43c1e48949641a5368a6f0c3b6 Mon Sep 17 00:00:00 2001 From: Kiran Kella Date: Fri, 4 Jan 2019 16:01:09 +0530 Subject: [PATCH 2/6] Avoid shutdown/startup commands on invalid interface names --- config/main.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/config/main.py b/config/main.py index 99955d90c3..c8bb2d8bdb 100755 --- a/config/main.py +++ b/config/main.py @@ -99,7 +99,6 @@ def interface_name_to_alias(interface_name): for port_name in natsorted(port_dict.keys()): if interface_name == port_name: return port_dict[port_name]['alias'] - click.echo("Invalid interface {}".format(interface_alias)) return None @@ -823,6 +822,10 @@ def startup(ctx): config_db = ctx.obj['config_db'] interface_name = ctx.obj['interface_name'] + alias = interface_name_to_alias(interface_name) + if alias is None: + ctx.fail("Enter valid interface name!!") + if interface_name.startswith("Ethernet"): config_db.mod_entry("PORT", interface_name, {"admin_status": "up"}) elif interface_name.startswith("PortChannel"): @@ -838,6 +841,10 @@ def shutdown(ctx): config_db = ctx.obj['config_db'] interface_name = ctx.obj['interface_name'] + alias = interface_name_to_alias(interface_name) + if alias is None: + ctx.fail("Enter valid interface name!!") + if interface_name.startswith("Ethernet"): config_db.mod_entry("PORT", interface_name, {"admin_status": "down"}) elif interface_name.startswith("PortChannel"): From ec748612ac7bc9af8f3eb47040f3bdc767ee0d2b Mon Sep 17 00:00:00 2001 From: Kiran Kella Date: Mon, 7 Jan 2019 13:18:15 +0530 Subject: [PATCH 3/6] sonic-utilities: Fix bug in the show command to display a specific interface status A bug in intfutil script that gets the keys object from the app-db for a specific interface Signed-off-by: kiran.kella@broadcom.com --- scripts/intfutil | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/intfutil b/scripts/intfutil index 3078f5c9a9..23ebcd2c7d 100755 --- a/scripts/intfutil +++ b/scripts/intfutil @@ -38,7 +38,7 @@ def appl_db_keys_get(appl_db, intf_name): if intf_name is None: appl_db_keys = appl_db.keys(appl_db.APPL_DB, "PORT_TABLE:*") elif intf_name.startswith('Ethernet'): - appl_db_keys = db.keys(appl_db.APPL_DB, "PORT_TABLE:%s" % intf_name) + appl_db_keys = appl_db.keys(appl_db.APPL_DB, "PORT_TABLE:%s" % intf_name) else: return None From e97ec505f9c453d78ecbf028cdea5ac2ff75ae81 Mon Sep 17 00:00:00 2001 From: Kiran Kella Date: Tue, 8 Jan 2019 15:00:06 +0530 Subject: [PATCH 4/6] sonic-utilities: Check for the presence of interface in port table instead of the optional alias attribute * Addressed review comment for #424 * Undone the change in intfutil file to push that fix in a seperate PR. Signed-off-by: kiran.kella@broadcom.com --- config/main.py | 28 ++++++++++++++++++++++------ scripts/intfutil | 2 +- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/config/main.py b/config/main.py index c8bb2d8bdb..a2389b981a 100755 --- a/config/main.py +++ b/config/main.py @@ -85,6 +85,22 @@ def interface_alias_to_name(interface_alias): return None +def interface_name_is_valid(interface_name): + """Check if the interface name is valid + """ + config_db = ConfigDBConnector() + config_db.connect() + port_dict = config_db.get_table('PORT') + + if interface_name is not None: + if not port_dict: + click.echo("port_dict is None!") + raise click.Abort() + for port_name in natsorted(port_dict.keys()): + if interface_name == port_name: + return True + return False + def interface_name_to_alias(interface_name): """Return alias interface name if default name is given as argument """ @@ -100,6 +116,8 @@ def interface_name_to_alias(interface_name): if interface_name == port_name: return port_dict[port_name]['alias'] + click.echo("Invalid interface {}".format(interface_alias)) + return None @@ -822,9 +840,8 @@ def startup(ctx): config_db = ctx.obj['config_db'] interface_name = ctx.obj['interface_name'] - alias = interface_name_to_alias(interface_name) - if alias is None: - ctx.fail("Enter valid interface name!!") + if interface_name_is_valid(interface_name) is False: + ctx.fail("Enter valid interface name!!") if interface_name.startswith("Ethernet"): config_db.mod_entry("PORT", interface_name, {"admin_status": "up"}) @@ -841,9 +858,8 @@ def shutdown(ctx): config_db = ctx.obj['config_db'] interface_name = ctx.obj['interface_name'] - alias = interface_name_to_alias(interface_name) - if alias is None: - ctx.fail("Enter valid interface name!!") + if interface_name_is_valid(interface_name) is False: + ctx.fail("Enter valid interface name!!") if interface_name.startswith("Ethernet"): config_db.mod_entry("PORT", interface_name, {"admin_status": "down"}) diff --git a/scripts/intfutil b/scripts/intfutil index 23ebcd2c7d..3078f5c9a9 100755 --- a/scripts/intfutil +++ b/scripts/intfutil @@ -38,7 +38,7 @@ def appl_db_keys_get(appl_db, intf_name): if intf_name is None: appl_db_keys = appl_db.keys(appl_db.APPL_DB, "PORT_TABLE:*") elif intf_name.startswith('Ethernet'): - appl_db_keys = appl_db.keys(appl_db.APPL_DB, "PORT_TABLE:%s" % intf_name) + appl_db_keys = db.keys(appl_db.APPL_DB, "PORT_TABLE:%s" % intf_name) else: return None From 9864e0ed458f7e646f550df39f74c8bdaad9b421 Mon Sep 17 00:00:00 2001 From: Kiran Kella Date: Sat, 12 Jan 2019 11:13:46 +0530 Subject: [PATCH 5/6] Corrected the error message string for 'config interface startup/shutdown'. --- config/main.py | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/config/main.py b/config/main.py index a2389b981a..1cd172c051 100755 --- a/config/main.py +++ b/config/main.py @@ -11,7 +11,6 @@ import sonic_platform from swsssdk import ConfigDBConnector -from natsort import natsorted from minigraph import parse_device_desc_xml import aaa @@ -77,7 +76,7 @@ def interface_alias_to_name(interface_alias): if not port_dict: click.echo("port_dict is None!") raise click.Abort() - for port_name in natsorted(port_dict.keys()): + for port_name in port_dict.keys(): if interface_alias == port_dict[port_name]['alias']: return port_name click.echo("Invalid interface {}".format(interface_alias)) @@ -96,7 +95,7 @@ def interface_name_is_valid(interface_name): if not port_dict: click.echo("port_dict is None!") raise click.Abort() - for port_name in natsorted(port_dict.keys()): + for port_name in port_dict.keys(): if interface_name == port_name: return True return False @@ -112,12 +111,10 @@ def interface_name_to_alias(interface_name): if not port_dict: click.echo("port_dict is None!") raise click.Abort() - for port_name in natsorted(port_dict.keys()): + for port_name in port_dict.keys(): if interface_name == port_name: return port_dict[port_name]['alias'] - click.echo("Invalid interface {}".format(interface_alias)) - return None @@ -841,7 +838,7 @@ def startup(ctx): interface_name = ctx.obj['interface_name'] if interface_name_is_valid(interface_name) is False: - ctx.fail("Enter valid interface name!!") + ctx.fail("Interface name is invalid. Please enter a valid interface name!!") if interface_name.startswith("Ethernet"): config_db.mod_entry("PORT", interface_name, {"admin_status": "up"}) @@ -859,7 +856,7 @@ def shutdown(ctx): interface_name = ctx.obj['interface_name'] if interface_name_is_valid(interface_name) is False: - ctx.fail("Enter valid interface name!!") + ctx.fail("Interface name is invalid. Please enter a valid interface name!!") if interface_name.startswith("Ethernet"): config_db.mod_entry("PORT", interface_name, {"admin_status": "down"}) From ffc07cc66f751c54937f09499bf24110b705cf2c Mon Sep 17 00:00:00 2001 From: Kiran Kella Date: Mon, 28 Jan 2019 11:33:38 +0530 Subject: [PATCH 6/6] show startupconfiguration bgp was throwing error in case of frr. Fix: Print the frr startup config from the right location. --- show/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/show/main.py b/show/main.py index aa52b7d0ec..2eeb386ca7 100755 --- a/show/main.py +++ b/show/main.py @@ -1338,7 +1338,7 @@ def bgp(verbose): if result == "quagga": run_command('sudo docker exec bgp cat /etc/quagga/bgpd.conf', display_cmd=verbose) elif result == "frr": - run_command('sudo docker exec bgp cat /etc/frr/bgpd.conf', display_cmd=verbose) + run_command('sudo docker exec bgp cat /etc/sonic/frr/frr.conf', display_cmd=verbose) elif result == "gobgp": run_command('sudo docker exec bgp cat /etc/gpbgp/bgpd.conf', display_cmd=verbose) else: