Skip to content

Commit

Permalink
Add vlan validation in config interface ip add command (sonic-net#3155)
Browse files Browse the repository at this point in the history
  • Loading branch information
matiAlfaro committed Feb 29, 2024
1 parent ba98c7f commit bf35596
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 1 deletion.
12 changes: 11 additions & 1 deletion config/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -4513,7 +4513,11 @@ def fec(ctx, interface_name, interface_fec, verbose):
def ip(ctx):
"""Set IP interface attributes"""
pass


def validate_vlan_exists(db,text):
data = db.get_table('VLAN')
keys = list(data.keys())
return text in keys
#
# 'add' subcommand
#
Expand Down Expand Up @@ -4577,6 +4581,12 @@ def add(ctx, interface_name, ip_addr, gw):
table_name = get_interface_table_name(interface_name)
if table_name == "":
ctx.fail("'interface_name' is not valid. Valid names [Ethernet/PortChannel/Vlan/Loopback]")

if table_name == "VLAN_INTERFACE":
if not validate_vlan_exists(config_db, interface_name):
ctx.fail(f"Error: {interface_name} does not exist. Vlan must be created before adding an IP address")
return

interface_entry = config_db.get_entry(table_name, interface_name)
if len(interface_entry) == 0:
if table_name == "VLAN_SUB_INTERFACE":
Expand Down
32 changes: 32 additions & 0 deletions tests/ip_config_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import utilities_common.bgp_util as bgp_util

ERROR_MSG = "Error: IP address is not valid"
NOT_EXIST_VLAN_ERROR_MSG ="does not exist"

INVALID_VRF_MSG ="""\
Usage: bind [OPTIONS] <interface_name> <vrf_name>
Expand Down Expand Up @@ -43,6 +44,37 @@ def setup_class(cls):
def mock_run_bgp_command():
return ""

def test_add_vlan_interface_ipv4(self):
db = Db()
runner = CliRunner()
obj = {'config_db':db.cfgdb}

# config int ip add Vlan100 1.1.1.1/24
result = runner.invoke(config.config.commands["interface"].commands["ip"].commands["add"], ["Vlan100", "1.1.1.1/24"], obj=obj)
print(result.exit_code, result.output)
assert result.exit_code != 0
assert NOT_EXIST_VLAN_ERROR_MSG in result.output

# create vlan 4093
result = runner.invoke(config.config.commands["vlan"].commands["add"], ["4093"], obj=db)
# config int ip add Vlan4093 1.1.1.1/24
result = runner.invoke(config.config.commands["interface"].commands["ip"].commands["add"], ["Vlan4093", "1.1.1.1/24"], obj=obj)
print(result.exit_code, result.output)
assert result.exit_code == 0

# config int ip add Vlan000000000000003 1.1.1.1/24
result = runner.invoke(config.config.commands["interface"].commands["ip"].commands["add"], ["Vlan000000000000003", "1.1.1.1/24"], obj=obj)
print(result.exit_code, result.output)
assert result.exit_code != 0
assert NOT_EXIST_VLAN_ERROR_MSG in result.output

# config int ip add Vlan1.2 1.1.1.1/24
result = runner.invoke(config.config.commands["interface"].commands["ip"].commands["add"], ["Vlan1.2", "1.1.1.1/24"], obj=obj)
print(result.exit_code, result.output)
assert result.exit_code != 0
assert NOT_EXIST_VLAN_ERROR_MSG in result.output


def test_add_del_interface_valid_ipv4(self):
db = Db()
runner = CliRunner()
Expand Down

0 comments on commit bf35596

Please sign in to comment.