summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Breunig <christian@breunig.cc>2023-06-29 08:51:33 +0200
committerChristian Breunig <christian@breunig.cc>2023-06-29 09:07:12 +0200
commit93724b596dab81d9a801bb5da7fd06933e293cae (patch)
tree5a7f483bf5a01621b0db89ef37229e5a863d7db3
parent88282bed3b9a91f3a1cd645fee89fe38d8735de6 (diff)
downloadvyos-1x-93724b596dab81d9a801bb5da7fd06933e293cae.tar.gz
vyos-1x-93724b596dab81d9a801bb5da7fd06933e293cae.zip
policy: T4329: Fix regex for extcommunity rt #2
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'
-rw-r--r--interface-definitions/include/policy/extended-community-value-list.xml.i2
-rwxr-xr-xsrc/validators/bgp-extended-community51
2 files changed, 26 insertions, 27 deletions
diff --git a/interface-definitions/include/policy/extended-community-value-list.xml.i b/interface-definitions/include/policy/extended-community-value-list.xml.i
index c79f78c67..33a279be1 100644
--- a/interface-definitions/include/policy/extended-community-value-list.xml.i
+++ b/interface-definitions/include/policy/extended-community-value-list.xml.i
@@ -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 -->
diff --git a/src/validators/bgp-extended-community b/src/validators/bgp-extended-community
index b69ae3449..d66665519 100755
--- a/src/validators/bgp-extended-community
+++ b/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
@@ -28,28 +28,27 @@ 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) \ No newline at end of file
+
+ 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
+
+ raise Exception()
+
+ except Exception:
+ # fail if something was wrong
+ print("Invalid community format")
+ exit(1) \ No newline at end of file