diff options
author | Christian Poessinger <christian@poessinger.com> | 2022-10-07 07:34:24 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-07 07:34:24 +0200 |
commit | 23f7ef7e9e79b1f159c3e874c2237b5b804d9380 (patch) | |
tree | 6b1f1e912830a2b334f82431e92d0360c23533ca /src/validators/bgp-extended-community | |
parent | 14fb822154015dc7944187361153b4fed205730e (diff) | |
parent | 067cc12d0e6e52044df48f6f612cb4db1d4ad80c (diff) | |
download | vyos-1x-23f7ef7e9e79b1f159c3e874c2237b5b804d9380.tar.gz vyos-1x-23f7ef7e9e79b1f159c3e874c2237b5b804d9380.zip |
Merge branch 'current' into radius-rate-limit-comp
Diffstat (limited to 'src/validators/bgp-extended-community')
-rwxr-xr-x | src/validators/bgp-extended-community | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/src/validators/bgp-extended-community b/src/validators/bgp-extended-community new file mode 100755 index 000000000..b69ae3449 --- /dev/null +++ b/src/validators/bgp-extended-community @@ -0,0 +1,55 @@ +#!/usr/bin/env python3 + +# Copyright 2019-2022 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 +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see <http://www.gnu.org/licenses/>. + +from argparse import ArgumentParser +from sys import exit + +from vyos.template import is_ipv4 + +COMM_MAX_2_OCTET: int = 65535 +COMM_MAX_4_OCTET: int = 4294967295 + +if __name__ == '__main__': + # add an argument with community + 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 |