Skip to content

Commit

Permalink
policy: T4329: Fix regex for extcommunity rt #2
Browse files Browse the repository at this point in the history
The previous implementation did not iterate over the communit list, so only
one match criteria was supported.

set policy route-map FOO rule 10 action 'permit'
set policy route-map FOO rule 10 set extcommunity rt '1111:2222222'

worked but on the other hand this failed:

set policy route-map FOO rule 20 action 'permit'
set policy route-map FOO rule 20 set extcommunity rt '6500:24 6500:23 192.168.0.1:111 192.168.0.1:222'
  • Loading branch information
c-po committed Jun 29, 2023
1 parent 88282be commit 6a6ea8e
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 27 deletions.
Expand Up @@ -12,4 +12,4 @@
</constraint>
<constraintErrorMessage>Should be in form: ASN:NN or IPADDR:NN where ASN is autonomous system number</constraintErrorMessage>
<multi/>
<!-- include end -->
<!-- include end -->
49 changes: 23 additions & 26 deletions src/validators/bgp-extended-community
@@ -1,6 +1,6 @@
#!/usr/bin/env python3

# Copyright 2019-2022 VyOS maintainers and contributors <maintainers@vyos.io>
# Copyright 2019-2023 VyOS maintainers and contributors <maintainers@vyos.io>
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
Expand Down Expand Up @@ -28,28 +28,25 @@ if __name__ == '__main__':
parser: ArgumentParser = ArgumentParser()
parser.add_argument('community', type=str)
args = parser.parse_args()
community: str = args.community
if community.count(':') != 1:
print("Invalid community format")
exit(1)
try:
# try to extract community parts from an argument
comm_left: str = community.split(':')[0]
comm_right: int = int(community.split(':')[1])

# check if left part is an IPv4 address
if is_ipv4(comm_left) and 0 <= comm_right <= COMM_MAX_2_OCTET:
exit()
# check if a left part is a number
if 0 <= int(comm_left) <= COMM_MAX_2_OCTET \
and 0 <= comm_right <= COMM_MAX_4_OCTET:
exit()

except Exception:
# fail if something was wrong
print("Invalid community format")
exit(1)

# fail if none of validators catched the value
print("Invalid community format")
exit(1)

for community in args.community.split():
if community.count(':') != 1:
print("Invalid community format")
exit(1)
try:
# try to extract community parts from an argument
comm_left: str = community.split(':')[0]
comm_right: int = int(community.split(':')[1])

# check if left part is an IPv4 address
if is_ipv4(comm_left) and 0 <= comm_right <= COMM_MAX_2_OCTET:
continue
# check if a left part is a number
if 0 <= int(comm_left) <= COMM_MAX_2_OCTET \
and 0 <= comm_right <= COMM_MAX_4_OCTET:
continue

except Exception:
# fail if something was wrong
print("Invalid community format")
exit(1)

0 comments on commit 6a6ea8e

Please sign in to comment.