diff options
author | Takeru Hayasaka <hayatake396@gmail.com> | 2022-10-28 04:26:05 +0900 |
---|---|---|
committer | Andrew Yourtchenko <ayourtch@gmail.com> | 2023-12-20 17:30:19 +0000 |
commit | 68ac244283b60cbaf6356ab732f1d31583bb3e7a (patch) | |
tree | eafd76834ecd0aaa77ac4f9a54629636489d5bfd /test/vpp_srv6_mobile.py | |
parent | 69f800fbfd559c8db21d064ceeca5f81fb1f0021 (diff) |
srv6-mobile: Implement SRv6 mobile API funcs
This merge request adds the feature to manipulate localsids and policies for SRv6 mobile via API.
Type: feature
Signed-off-by: Takeru Hayasaka <hayatake396@gmail.com>
Change-Id: Ibb46bf71ae1d9d4591ce2c8ccf66f520887dad70
Diffstat (limited to 'test/vpp_srv6_mobile.py')
-rw-r--r-- | test/vpp_srv6_mobile.py | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/test/vpp_srv6_mobile.py b/test/vpp_srv6_mobile.py new file mode 100644 index 00000000000..33b6a6905ec --- /dev/null +++ b/test/vpp_srv6_mobile.py @@ -0,0 +1,136 @@ +from vpp_object import VppObject +from socket import inet_pton, inet_ntop, AF_INET, AF_INET6 + + +class SRv6MobileNhtype: + SRV6_NHTYPE_API_NONE = 0 + SRV6_NHTYPE_API_IPV4 = 1 + SRV6_NHTYPE_API_IPV6 = 2 + SRV6_NHTYPE_API_NON_IP = 3 + + +class VppSRv6MobileLocalSID(VppObject): + """ + SRv6 LocalSID + """ + + def __init__( + self, + test, + localsid_prefix, + behavior, + fib_table=0, + local_fib_table=0, + drop_in=0, + nhtype=SRv6MobileNhtype.SRV6_NHTYPE_API_NONE, + sr_prefix="", + v4src_addr="", + v4src_position=0, + ): + self._test = test + self.localsid_prefix = localsid_prefix + self.behavior = behavior + self.fib_table = fib_table + self.local_fib_table = local_fib_table + self.drop_in = drop_in + self.nhtype = nhtype + self.sr_prefix = sr_prefix + self.v4src_addr = v4src_addr + self.v4src_position = v4src_position + self._configured = False + + def add_vpp_config(self): + self._test.vapi.sr_mobile_localsid_add_del( + localsid_prefix=self.localsid_prefix, + behavior=self.behavior, + fib_table=self.fib_table, + local_fib_table=self.local_fib_table, + drop_in=self.drop_in, + sr_prefix=self.sr_prefix, + v4src_addr=self.v4src_addr, + v4src_position=self.v4src_position, + is_del=0, + ) + self._configured = True + + def remove_vpp_config(self): + self._test.vapi.sr_mobile_localsid_add_del( + localsid_prefix=self.localsid_prefix, + behavior=self.behavior, + fib_table=self.fib_table, + local_fib_table=self.local_fib_table, + drop_in=self.drop_in, + sr_prefix=self.sr_prefix, + v4src_addr=self.v4src_addr, + v4src_position=self.v4src_position, + is_del=1, + ) + self._configured = False + + def query_vpp_config(self): + return self._configured + + def object_id(self): + return "%d;%s,%s" % (self.fib_table, self.localsid_prefix, self.behavior) + + +class VppSRv6MobilePolicy(VppObject): + """ + SRv6 Policy + """ + + def __init__( + self, + test, + bsid_addr, + sr_prefix, + v6src_prefix, + behavior, + fib_table=0, + local_fib_table=0, + encap_src=None, + drop_in=0, + nhtype=SRv6MobileNhtype.SRV6_NHTYPE_API_NONE, + ): + self._test = test + self.bsid_addr = bsid_addr + self.sr_prefix = sr_prefix + self.v6src_prefix = v6src_prefix + self.behavior = behavior + self.fib_table = fib_table + self.local_fib_table = local_fib_table + self.drop_in = drop_in + self.nhtype = nhtype + self.encap_src = encap_src + self._configured = False + + def add_vpp_config(self): + self._test.vapi.sr_mobile_policy_add( + bsid_addr=self.bsid_addr, + sr_prefix=self.sr_prefix, + v6src_prefix=self.v6src_prefix, + behavior=self.behavior, + fib_table=self.fib_table, + local_fib_table=self.local_fib_table, + encap_src=self.encap_src, + drop_in=self.drop_in, + nhtype=self.nhtype, + ) + self._configured = True + + def remove_vpp_config(self): + self._test.vapi.sr_policy_del(self.bsid_addr) + self._configured = False + + def query_vpp_config(self): + # no API to query SR Policies + # use _configured flag for now + return self._configured + + def object_id(self): + return "%d;%s-><%s>;%d" % ( + self.sr_type, + self.bsid, + ",".join(self.segments), + self.is_encap, + ) |