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

Loopback interface configuration CLIs #879

Merged
merged 30 commits into from
May 21, 2020
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
4fb95be
Adding configuration CLIs for loopback interfaces
preetham-singh Apr 15, 2020
e28fc6f
Adding show interface loopback CLI to dump list of loopback interfaces
preetham-singh Apr 16, 2020
297f78d
Adding missing get_intf_master to get interface vrf binding information
preetham-singh Apr 16, 2020
51b43f0
Updating Command reference guide to include Vrf & Loopback CLIs
preetham-singh Apr 17, 2020
c2c08b7
Fixing LGTM alert by removing unnecessary pass
preetham-singh Apr 21, 2020
e4cb415
[fast reboot] set a fast-reboot DB flag (#887)
yxieca Apr 27, 2020
8f92952
[utility] Filter FDB entries (#890)
tahmed-dev Apr 28, 2020
7fd6233
Allow show ztp to display non-sensitive information visible to non-ro…
rajendra-dendukuri Apr 29, 2020
4d29a3c
[doc]: ZTP configuration and show commands (#866)
rajendra-dendukuri Apr 29, 2020
506a407
[fwutil]: Fix firmware update command. (#895)
nazariig Apr 29, 2020
f78755c
Make `config` command support abbreviation. (#893)
qiluo-msft Apr 29, 2020
726da60
ssd_mitigation_changes (#829)
rkdevi27 Apr 30, 2020
9060054
[psushow] Add a column to display LED color to show platform psustatu…
Junchao-Mellanox Apr 30, 2020
8f7ecfc
Improved route_check tool and adopt to 20191130 image. (#898)
renukamanavalan May 2, 2020
fa95325
[config] Add support for multi-ASIC devices (#877)
judyjoseph May 2, 2020
72f8713
[show] Fix abbreviations for 'show ip bgp ...' commands (#901)
jleveque May 4, 2020
e9b79dc
[Vnet] Fix NameError for 'swsssdk' and align output (#902)
prsunny May 6, 2020
52ac15a
[config] Support load_minigraph command for multi NPU platform (#896)
arlakshm May 7, 2020
188aaf9
[show] Add 'errors' and 'rates' subcommands to 'show interfaces count…
tsvanduyn May 8, 2020
47c7b3b
[config] Add 'interface transceiver' subgroup with 'lpmode' and 'rese…
jleveque May 9, 2020
e0eff2d
Remove dependency on click-default-group package (#903)
jleveque May 9, 2020
0a283ae
[config] Log invocation of config commands to syslog (#259)
jleveque May 10, 2020
d625d06
[show] Add `ntpstat` output to `show ntp` (#861)
yangshp1987 May 11, 2020
a0ec639
Adding configuration CLIs for loopback interfaces
preetham-singh Apr 15, 2020
06ef536
Updating CLI Command reference guide with correct show ip interface
preetham-singh May 12, 2020
43b274e
Merge branch 'master' into master
preetham-singh May 13, 2020
b6a528c
Adding configuration CLIs for loopback interfaces
preetham-singh Apr 15, 2020
680eb43
Make `config` command support abbreviation. (#893)
qiluo-msft Apr 29, 2020
00b2d25
[config] Support load_minigraph command for multi NPU platform (#896)
arlakshm May 7, 2020
e516d0c
Removing show interfaces loopback command as per review comment.
preetham-singh May 13, 2020
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
68 changes: 68 additions & 0 deletions config/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,11 @@
SYSTEMCTL_ACTION_RESTART="restart"
SYSTEMCTL_ACTION_RESET_FAILED="reset-failed"

CFG_LOOPBACK_PREFIX = "Loopback"
CFG_LOOPBACK_PREFIX_LEN = len(CFG_LOOPBACK_PREFIX)
CFG_LOOPBACK_NAME_TOTAL_LEN_MAX = 11
CFG_LOOPBACK_ID_MAX_VAL = 999
CFG_LOOPBACK_NO="<0-999>"
# ========================== Syslog wrappers ==========================

def log_debug(msg):
Expand Down Expand Up @@ -2289,6 +2294,69 @@ def naming_mode_alias():
"""Set CLI interface naming mode to ALIAS (Vendor port alias)"""
set_interface_naming_mode('alias')

def is_loopback_name_valid(loopback_name):
"""Loopback name validation
"""

if loopback_name[:CFG_LOOPBACK_PREFIX_LEN] != CFG_LOOPBACK_PREFIX :
return False
if (loopback_name[CFG_LOOPBACK_PREFIX_LEN:].isdigit() is False or
int(loopback_name[CFG_LOOPBACK_PREFIX_LEN:]) > CFG_LOOPBACK_ID_MAX_VAL) :
return False
if len(loopback_name) > CFG_LOOPBACK_NAME_TOTAL_LEN_MAX:
return False
return True

#
# 'loopback' group ('config loopback ...')
#
@config.group()
@click.pass_context
@click.option('-s', '--redis-unix-socket-path', help='unix socket path for redis connection')
def loopback(ctx, redis_unix_socket_path):
"""Loopback-related configuration tasks"""
kwargs = {}
if redis_unix_socket_path:
kwargs['unix_socket_path'] = redis_unix_socket_path
config_db = ConfigDBConnector(**kwargs)
config_db.connect(wait_for_init=False)
ctx.obj = {'db': config_db}

@loopback.command('add')
@click.argument('loopback_name', metavar='<loopback_name>', required=True)
@click.pass_context
def add_loopback(ctx, loopback_name):
config_db = ctx.obj['db']
if is_loopback_name_valid(loopback_name) is False:
ctx.fail("{} is invalid, name should have prefix '{}' and suffix '{}' "
.format(loopback_name, CFG_LOOPBACK_PREFIX, CFG_LOOPBACK_NO))

lo_intfs = [k for k,v in config_db.get_table('LOOPBACK_INTERFACE').iteritems() if type(k) != tuple]
if loopback_name in lo_intfs:
ctx.fail("{} already exists".format(loopback_name))

config_db.set_entry('LOOPBACK_INTERFACE', loopback_name, {"NULL" : "NULL"})

@loopback.command('del')
@click.argument('loopback_name', metavar='<loopback_name>', required=True)
@click.pass_context
def del_loopback(ctx, loopback_name):
config_db = ctx.obj['db']
if is_loopback_name_valid(loopback_name) is False:
ctx.fail("{} is invalid, name should have prefix '{}' and suffix '{}' "
.format(loopback_name, CFG_LOOPBACK_PREFIX, CFG_LOOPBACK_NO))

lo_config_db = config_db.get_table('LOOPBACK_INTERFACE')
lo_intfs = [k for k,v in lo_config_db.iteritems() if type(k) != tuple]
if loopback_name not in lo_intfs:
ctx.fail("{} does not exists".format(loopback_name))

ips = [ k[1] for k in lo_config_db if type(k) == tuple and k[0] == loopback_name ]
for ip in ips:
config_db.set_entry('LOOPBACK_INTERFACE', (loopback_name, ip), None)

config_db.set_entry('LOOPBACK_INTERFACE', loopback_name, None)

@config.group()
def ztp():
""" Configure Zero Touch Provisioning """
Expand Down
Loading