diff --git a/config/main.py b/config/main.py index 025346e3a6..6e903f08ea 100755 --- a/config/main.py +++ b/config/main.py @@ -1082,7 +1082,8 @@ def add_vlan_member(ctx, vid, interface_name, untagged): if len(vlan) == 0: ctx.fail("{} doesn't exist".format(vlan_name)) members = vlan.get('members', []) - if interface_name in members: + vlan_member_data = db.get_entry('VLAN_MEMBER', (vlan_name, interface_name)) + if interface_name in members or len(vlan_member_data) !=0: if get_interface_naming_mode() == "alias": interface_name = interface_name_to_alias(interface_name) if interface_name is None: @@ -1092,13 +1093,11 @@ def add_vlan_member(ctx, vid, interface_name, untagged): else: ctx.fail("{} is already a member of {}".format(interface_name, vlan_name)) + for entry in interface_table: if (interface_name == entry[0]): ctx.fail("{} is a L3 interface!".format(interface_name)) - - members.append(interface_name) - vlan['members'] = members - db.set_entry('VLAN', vlan_name, vlan) + db.set_entry('VLAN_MEMBER', (vlan_name, interface_name), {'tagging_mode': "untagged" if untagged else "tagged" }) @@ -1119,7 +1118,8 @@ def del_vlan_member(ctx, vid, interface_name): if len(vlan) == 0: ctx.fail("{} doesn't exist".format(vlan_name)) members = vlan.get('members', []) - if interface_name not in members: + vlan_member_data = db.get_entry('VLAN_MEMBER', (vlan_name, interface_name)) + if interface_name not in members and len(vlan_member_data) == 0: if get_interface_naming_mode() == "alias": interface_name = interface_name_to_alias(interface_name) if interface_name is None: @@ -1127,11 +1127,12 @@ def del_vlan_member(ctx, vid, interface_name): ctx.fail("{} is not a member of {}".format(interface_name, vlan_name)) else: ctx.fail("{} is not a member of {}".format(interface_name, vlan_name)) - members.remove(interface_name) - if len(members) == 0: - del vlan['members'] - else: - vlan['members'] = members + if interface_name in members: + members.remove(interface_name) + if len(members) == 0: + del vlan['members'] + else: + vlan['members'] = members db.set_entry('VLAN', vlan_name, vlan) db.set_entry('VLAN_MEMBER', (vlan_name, interface_name), None) diff --git a/show/main.py b/show/main.py index c4c0d4e493..825ed84b32 100755 --- a/show/main.py +++ b/show/main.py @@ -2245,19 +2245,17 @@ def config(redis_unix_socket_path): config_db.connect(wait_for_init=False) data = config_db.get_table('VLAN') keys = data.keys() + member_data = config_db.get_table('VLAN_MEMBER') def tablelize(keys, data): table = [] for k in natsorted(keys): - if 'members' not in data[k] : - r = [] - r.append(k) - r.append(data[k]['vlanid']) - table.append(r) - continue - - for m in data[k].get('members', []): + members = set(data[k].get('members', [])) + for (vlan, interface_name) in member_data: + if vlan == k: + members.add(interface_name) + for m in members: r = [] r.append(k) r.append(data[k]['vlanid'])