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

[filter-fdb] Fix Filter FDB With IPv6 Present in Config DB #1059

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
19 changes: 11 additions & 8 deletions fdbutil/filter_fdb_entries.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import argparse
import json
import sys
import os
import argparse
import sys
import syslog
import traceback
import time
import traceback

from ipaddress import ip_address, ip_network, ip_interface
from collections import defaultdict
from ipaddress import ip_address, ip_network, ip_interface

def get_vlan_cidr_map(filename):
"""
Expand All @@ -33,7 +33,9 @@ def get_vlan_cidr_map(filename):
continue
vlan, cidr = tuple(vlan_key.split('|'))
if vlan in config_db_entries["VLAN"]:
vlan_cidr[vlan] = ip_interface(cidr).network
if vlan not in vlan_cidr:
vlan_cidr[vlan] = {4: ip_address("0.0.0.0".decode()), 6: ip_address("::".decode())}
vlan_cidr[vlan][ip_interface(cidr).version] = ip_interface(cidr).network

return vlan_cidr

Expand Down Expand Up @@ -63,8 +65,9 @@ def get_arp_entries_map(arp_filename, config_db_filename):
continue
table, vlan, ip = tuple(key.split(':'))
if "NEIGH_TABLE" in table and vlan in vlan_cidr.keys() \
and ip_address(ip) in ip_network(vlan_cidr[vlan]) and "neigh" in config.keys():
arp_map[config["neigh"].replace(':', '-')] = ""
and ip_address(ip) in ip_network(vlan_cidr[vlan][ip_interface(ip).version]) \
and "neigh" in config.keys():
arp_map[config["neigh"].replace(':', '-').upper()] = ""

return arp_map

Expand Down Expand Up @@ -92,7 +95,7 @@ def filter_fdb_entries(fdb_filename, arp_filename, config_db_filename, backup_fi
def filter_fdb_entry(fdb_entry):
for key, _ in fdb_entry.items():
if 'FDB_TABLE' in key:
return key.split(':')[-1] in arp_map
return key.split(':')[-1].upper() in arp_map

# malformed entry, default to False so it will be deleted
return False
Expand Down
4 changes: 3 additions & 1 deletion tests/filter_fdb_input/config_db.json
Original file line number Diff line number Diff line change
Expand Up @@ -1125,7 +1125,9 @@
}
},
"VLAN_INTERFACE": {
"Vlan1000|192.168.0.1/21": {}
"Vlan1000": {},
"Vlan1000|192.168.0.1/21": {},
"Vlan1000|fc02:1000::1/64": {}
},
"BUFFER_PG": {
"Ethernet4|0": {
Expand Down
9 changes: 8 additions & 1 deletion tests/filter_fdb_input/expected_fdb.json
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,13 @@
},
"OP": "SET"
},
{
"FDB_TABLE:Vlan1000:24-8A-07-4C-F5-18": {
"type": "dynamic",
"port": "Ethernet24"
},
"OP": "SET"
},
{
"FDB_TABLE:Vlan1000:72-06-00-01-02-72": {
"type": "dynamic",
Expand Down Expand Up @@ -398,4 +405,4 @@
},
"OP": "SET"
}
]
]
13 changes: 9 additions & 4 deletions tests/filter_fdb_input/test_vectors.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,9 @@
"Vlan1000": {}
},
"VLAN_INTERFACE": {
"Vlan1000|192.168.0.1/21": {}
"Vlan1000": {},
"Vlan1000|192.168.0.1/21": {},
"Vlan1000|fc02:1000::1/64": {}
},
},
"expected_fdb": [
Expand Down Expand Up @@ -80,7 +82,8 @@
"Vlan1000": {}
},
"VLAN_INTERFACE": {
"Vlan1000|192.168.0.1/21": {}
"Vlan1000|192.168.0.1/21": {},
"Vlan1000|fc02:1000::1/64": {}
},
},
"expected_fdb": [
Expand Down Expand Up @@ -154,8 +157,10 @@
"Vlan1": {}
},
"VLAN_INTERFACE": {
"Vlan1|25.103.178.1/21": {}
},
"Vlan1|25.103.178.1/21": {},
"Vlan1": {},
"Vlan1|fc02:1000::1/64": {}
},
},
"expected_fdb": [
{
Expand Down