Skip to content

Commit 8218b09

Browse files
Harish Venkatramanlguohan
Harish Venkatraman
authored andcommitted
Management vrf snmp cli support (sonic-net#472)
* [sonic-utilities] managementVRF cli support(l3mdev) This commit adds CLI support for management VRF using l3dev. mVRF can be enabled using config vrf add mgmt and deleted using config vrf del mgmt. Show commands for management VRF are added which displays the linux command output, will update show command display after concluding what would be the output for the show commands. Added cli to configure management interface(eth0), config interface ip eth0 add can be used to configure eth0 ip and config ip eth0 remove is used to remove eth0 ip. New cli config/show commands: config vrf add mgmt config vrf del mgmt config interface eth0 ip add ip/mask gatewayIP config interface eth0 ip remove ip/mask show mgmt-vrf show mgmt-vrf route show mgmt-vrf addresses show mgmt-vrf interfaces Signed-off-by: Harish Venkatraman <[email protected]>
1 parent e78d7b8 commit 8218b09

File tree

2 files changed

+141
-0
lines changed

2 files changed

+141
-0
lines changed

config/main.py

+98
Original file line numberDiff line numberDiff line change
@@ -978,6 +978,104 @@ def vrf_del (ctx, vrfname):
978978
else:
979979
click.echo("Deletion of data vrf={} is not yet supported".format(vrfname))
980980

981+
@config.group()
982+
@click.pass_context
983+
def snmpagentaddress(ctx):
984+
"""SNMP agent listening IP address, port, vrf configuration"""
985+
config_db = ConfigDBConnector()
986+
config_db.connect()
987+
ctx.obj = {'db': config_db}
988+
pass
989+
990+
@snmpagentaddress.command('add')
991+
@click.argument('agentip', metavar='<SNMP AGENT LISTENING IP Address>', required=True)
992+
@click.option('-p', '--port', help="SNMP AGENT LISTENING PORT")
993+
@click.option('-v', '--vrf', help="VRF Name mgmt/DataVrfName/None")
994+
@click.pass_context
995+
def add_snmp_agent_address(ctx, agentip, port, vrf):
996+
"""Add the SNMP agent listening IP:Port%Vrf configuration"""
997+
998+
#Construct SNMP_AGENT_ADDRESS_CONFIG table key in the format ip|<port>|<vrf>
999+
key = agentip+'|'
1000+
if port:
1001+
key = key+port
1002+
key = key+'|'
1003+
if vrf:
1004+
key = key+vrf
1005+
config_db = ctx.obj['db']
1006+
config_db.set_entry('SNMP_AGENT_ADDRESS_CONFIG', key, {})
1007+
1008+
#Restarting the SNMP service will regenerate snmpd.conf and rerun snmpd
1009+
cmd="systemctl restart snmp"
1010+
os.system (cmd)
1011+
1012+
@snmpagentaddress.command('del')
1013+
@click.argument('agentip', metavar='<SNMP AGENT LISTENING IP Address>', required=True)
1014+
@click.option('-p', '--port', help="SNMP AGENT LISTENING PORT")
1015+
@click.option('-v', '--vrf', help="VRF Name mgmt/DataVrfName/None")
1016+
@click.pass_context
1017+
def del_snmp_agent_address(ctx, agentip, port, vrf):
1018+
"""Delete the SNMP agent listening IP:Port%Vrf configuration"""
1019+
1020+
key = agentip+'|'
1021+
if port:
1022+
key = key+port
1023+
key = key+'|'
1024+
if vrf:
1025+
key = key+vrf
1026+
config_db = ctx.obj['db']
1027+
config_db.set_entry('SNMP_AGENT_ADDRESS_CONFIG', key, None)
1028+
cmd="systemctl restart snmp"
1029+
os.system (cmd)
1030+
1031+
@config.group()
1032+
@click.pass_context
1033+
def snmptrap(ctx):
1034+
"""SNMP Trap server configuration to send traps"""
1035+
config_db = ConfigDBConnector()
1036+
config_db.connect()
1037+
ctx.obj = {'db': config_db}
1038+
pass
1039+
1040+
@snmptrap.command('modify')
1041+
@click.argument('ver', metavar='<SNMP Version>', type=click.Choice(['1', '2', '3']), required=True)
1042+
@click.argument('serverip', metavar='<SNMP TRAP SERVER IP Address>', required=True)
1043+
@click.option('-p', '--port', help="SNMP Trap Server port, default 162", default="162")
1044+
@click.option('-v', '--vrf', help="VRF Name mgmt/DataVrfName/None", default="None")
1045+
@click.option('-c', '--comm', help="Community", default="public")
1046+
@click.pass_context
1047+
def modify_snmptrap_server(ctx, ver, serverip, port, vrf, comm):
1048+
"""Modify the SNMP Trap server configuration"""
1049+
1050+
#SNMP_TRAP_CONFIG for each SNMP version
1051+
config_db = ctx.obj['db']
1052+
if ver == "1":
1053+
#By default, v1TrapDest value in snmp.yml is "NotConfigured". Modify it.
1054+
config_db.mod_entry('SNMP_TRAP_CONFIG',"v1TrapDest",{"DestIp": serverip, "DestPort": port, "vrf": vrf, "Community": comm})
1055+
elif ver == "2":
1056+
config_db.mod_entry('SNMP_TRAP_CONFIG',"v2TrapDest",{"DestIp": serverip, "DestPort": port, "vrf": vrf, "Community": comm})
1057+
else:
1058+
config_db.mod_entry('SNMP_TRAP_CONFIG',"v3TrapDest",{"DestIp": serverip, "DestPort": port, "vrf": vrf, "Community": comm})
1059+
1060+
cmd="systemctl restart snmp"
1061+
os.system (cmd)
1062+
1063+
@snmptrap.command('del')
1064+
@click.argument('ver', metavar='<SNMP Version>', type=click.Choice(['1', '2', '3']), required=True)
1065+
@click.pass_context
1066+
def delete_snmptrap_server(ctx, ver):
1067+
"""Delete the SNMP Trap server configuration"""
1068+
1069+
config_db = ctx.obj['db']
1070+
if ver == "1":
1071+
config_db.mod_entry('SNMP_TRAP_CONFIG',"v1TrapDest",None)
1072+
elif ver == "2":
1073+
config_db.mod_entry('SNMP_TRAP_CONFIG',"v2TrapDest",None)
1074+
else:
1075+
config_db.mod_entry('SNMP_TRAP_CONFIG',"v3TrapDest",None)
1076+
cmd="systemctl restart snmp"
1077+
os.system (cmd)
1078+
9811079
@vlan.group('dhcp_relay')
9821080
@click.pass_context
9831081
def vlan_dhcp_relay(ctx):

show/main.py

+43
Original file line numberDiff line numberDiff line change
@@ -503,6 +503,49 @@ def address ():
503503
click.echo("Management IP address = {0}".format(key[1]))
504504
click.echo("Management Network Default Gateway = {0}".format(mgmt_ip_data[key]['gwaddr']))
505505

506+
#
507+
# 'snmpagentaddress' group ("show snmpagentaddress ...")
508+
#
509+
510+
@cli.group('snmpagentaddress', invoke_without_command=True)
511+
@click.pass_context
512+
def snmpagentaddress (ctx):
513+
"""Show SNMP agent listening IP address configuration"""
514+
config_db = ConfigDBConnector()
515+
config_db.connect()
516+
agenttable = config_db.get_table('SNMP_AGENT_ADDRESS_CONFIG')
517+
518+
header = ['ListenIP', 'ListenPort', 'ListenVrf']
519+
body = []
520+
for agent in agenttable.keys():
521+
body.append([agent[0], agent[1], agent[2]])
522+
click.echo(tabulate(body, header))
523+
524+
#
525+
# 'snmptrap' group ("show snmptrap ...")
526+
#
527+
528+
@cli.group('snmptrap', invoke_without_command=True)
529+
@click.pass_context
530+
def snmptrap (ctx):
531+
"""Show SNMP agent Trap server configuration"""
532+
config_db = ConfigDBConnector()
533+
config_db.connect()
534+
traptable = config_db.get_table('SNMP_TRAP_CONFIG')
535+
536+
header = ['Version', 'TrapReceiverIP', 'Port', 'VRF', 'Community']
537+
body = []
538+
for row in traptable.keys():
539+
if row == "v1TrapDest":
540+
ver=1
541+
elif row == "v2TrapDest":
542+
ver=2
543+
else:
544+
ver=3
545+
body.append([ver, traptable[row]['DestIp'], traptable[row]['DestPort'], traptable[row]['vrf'], traptable[row]['Community']])
546+
click.echo(tabulate(body, header))
547+
548+
506549
#
507550
# 'interfaces' group ("show interfaces ...")
508551
#

0 commit comments

Comments
 (0)