1
0
Fork 0
mirror of https://github.com/sileht/bird-lg.git synced 2024-11-21 22:44:43 +01:00

Merge pull request #49 from tamihiro/new-pr-batch

Correctly parse aspath for both bird 1.x and 2.0.
This commit is contained in:
zorun 2020-03-02 12:03:25 +01:00 committed by GitHub
commit 93ed0769fe
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

29
lg.py
View file

@ -538,21 +538,29 @@ def build_as_tree_from_raw_bird_ouput(host, proto, text):
path = None path = None
paths = [] paths = []
net_dest = None net_dest = None
peer_protocol_name = None
for line in text: for line in text:
line = line.strip() line = line.strip()
expr = re.search(r'(.*)via\s+([0-9a-fA-F:\.]+)\s+on.*\[(\w+)\s+', line) expr = re.search(r'(.*)unicast\s+\[(\w+)\s+', line)
if expr: if expr:
if expr.group(1).strip():
net_dest = expr.group(1).strip()
peer_protocol_name = expr.group(2).strip()
expr2 = re.search(r'(.*)via\s+([0-9a-fA-F:\.]+)\s+on\s+\w+(\s+\[(\w+)\s+)?', line)
if expr2:
if path: if path:
path.append(net_dest) path.append(net_dest)
paths.append(path) paths.append(path)
path = None path = None
if expr.group(1).strip(): if expr2.group(1).strip():
net_dest = expr.group(1).strip() net_dest = expr2.group(1).strip()
peer_ip = expr.group(2).strip() peer_ip = expr2.group(2).strip()
peer_protocol_name = expr.group(3).strip() if expr2.group(4):
peer_protocol_name = expr2.group(4).strip()
# Check if via line is a internal route # Check if via line is a internal route
for rt_host, rt_ips in app.config["ROUTER_IP"].iteritems(): for rt_host, rt_ips in app.config["ROUTER_IP"].iteritems():
# Special case for internal routing # Special case for internal routing
@ -564,15 +572,18 @@ def build_as_tree_from_raw_bird_ouput(host, proto, text):
path = [ peer_protocol_name ] path = [ peer_protocol_name ]
# path = ["%s\r%s" % (peer_protocol_name, get_as_name(get_as_number_from_protocol_name(host, proto, peer_protocol_name)))] # path = ["%s\r%s" % (peer_protocol_name, get_as_name(get_as_number_from_protocol_name(host, proto, peer_protocol_name)))]
expr2 = re.search(r'(.*)unreachable\s+\[(\w+)\s+', line) expr3 = re.search(r'(.*)unreachable\s+\[(\w+)\s+', line)
if expr2: if expr3:
if path: if path:
path.append(net_dest) path.append(net_dest)
paths.append(path) paths.append(path)
path = None path = None
if expr2.group(1).strip(): if path is None:
net_dest = expr2.group(1).strip() path = [ expr3.group(2).strip() ]
if expr3.group(1).strip():
net_dest = expr3.group(1).strip()
if line.startswith("BGP.as_path:"): if line.startswith("BGP.as_path:"):
ASes = line.replace("BGP.as_path:", "").strip().split(" ") ASes = line.replace("BGP.as_path:", "").strip().split(" ")