summaryrefslogtreecommitdiffstats
path: root/src/cmake/VPPConfig.cmake
blob: 2de35d1f7ef6c27eb33c71542a2b81bcbbfd33c3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# Copyright (c) 2018 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

get_filename_component(CMAKE_CURRENT_LIST_DIR ${CMAKE_CURRENT_LIST_FILE} PATH)

find_path(VPP_INCLUDE_DIR PATH_SUFFIXES NAMES vppinfra/clib.h)
find_program(VPP_APIGEN vppapigen)
find_program(VPP_VAPI_C_GEN vapi_c_gen.py)
find_program(VPP_VAPI_CPP_GEN vapi_cpp_gen.py)

if(VPP_INCLUDE_DIR AND VPP_APIGEN)
  include_directories (${VPP_INCLUDE_DIR})
else()
  message(FATAL_ERROR "VPP headers, libraries and/or tools not found")
endif()

set(VPP_EXTERNAL_PROJECT 1)

include(CheckCCompilerFlag)

check_c_compiler_flag("-Wno-address-of-packed-member" compiler_flag_no_address_of_packed_member)
if (compiler_flag_no_address_of_packed_member)
  add_definitions(-Wno-address-of-packed-member)
endif()

set(VPP_RUNTIME_DIR "bin" CACHE STRING "Relative runtime directory path")
set(VPP_LIBRARY_DIR "lib" CACHE STRING "Relative library directory path")
set(VPP_BINARY_DIR ${CMAKE_BINARY_DIR}/CMakeFiles)

include(${CMAKE_CURRENT_LIST_DIR}/cpu.cmake)
include(${CMAKE_CURRENT_LIST_DIR}/api.cmake)
include(${CMAKE_CURRENT_LIST_DIR}/library.cmake)
include(${CMAKE_CURRENT_LIST_DIR}/plugin.cmake)
include(${CMAKE_CURRENT_LIST_DIR}/pack.cmake)
n class="o">= 5 SR_BEHAVIOR_DX6 = 6 SR_BEHAVIOR_DX4 = 7 SR_BEHAVIOR_DT6 = 8 SR_BEHAVIOR_DT4 = 9 SR_BEHAVIOR_END_UN_PERF = 10 SR_BEHAVIOR_END_UN = 11 SR_BEHAVIOR_LAST = 12 # Must always be the last one class SRv6PolicyType(): # from src/vnet/srv6/sr.h SR_POLICY_TYPE_DEFAULT = 0 SR_POLICY_TYPE_SPRAY = 1 class SRv6PolicySteeringTypes(): # from src/vnet/srv6/sr.h SR_STEER_L2 = 2 SR_STEER_IPV4 = 4 SR_STEER_IPV6 = 6 class VppSRv6LocalSID(VppObject): """ SRv6 LocalSID """ def __init__(self, test, localsid, behavior, nh_addr, end_psp, sw_if_index, vlan_index, fib_table): self._test = test self.localsid = localsid self.behavior = behavior self.nh_addr = nh_addr self.end_psp = end_psp self.sw_if_index = sw_if_index self.vlan_index = vlan_index self.fib_table = fib_table self._configured = False def add_vpp_config(self): self._test.vapi.sr_localsid_add_del( localsid=self.localsid, behavior=self.behavior, nh_addr=self.nh_addr, is_del=0, end_psp=self.end_psp, sw_if_index=self.sw_if_index, vlan_index=self.vlan_index, fib_table=self.fib_table) self._configured = True def remove_vpp_config(self): self._test.vapi.sr_localsid_add_del( localsid=self.localsid, behavior=self.behavior, nh_addr=self.nh_addr, is_del=1, end_psp=self.end_psp, sw_if_index=self.sw_if_index, vlan_index=self.vlan_index, fib_table=self.fib_table) self._configured = False def query_vpp_config(self): # sr_localsids_dump API is disabled # use _configured flag for now return self._configured def object_id(self): return ("%d;%s,%d" % (self.fib_table, self.localsid, self.behavior)) class VppSRv6Policy(VppObject): """ SRv6 Policy """ def __init__(self, test, bsid, is_encap, sr_type, weight, fib_table, segments, source): self._test = test self.bsid = bsid self.is_encap = is_encap self.sr_type = sr_type self.weight = weight self.fib_table = fib_table self.segments = segments self.n_segments = len(segments) # source not passed to API # self.source = inet_pton(AF_INET6, source) self.source = source self._configured = False def add_vpp_config(self): self._test.vapi.sr_policy_add( bsid=self.bsid, weight=self.weight, is_encap=self.is_encap, is_spray=self.sr_type, fib_table=self.fib_table, sids={'num_sids': self.n_segments, 'sids': self.segments}) self._configured = True def remove_vpp_config(self): self._test.vapi.sr_policy_del( self.bsid) 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)) class VppSRv6Steering(VppObject): """ SRv6 Steering """ def __init__(self, test, bsid, prefix, mask_width, traffic_type, sr_policy_index, table_id, sw_if_index): self._test = test self.bsid = bsid self.prefix = prefix self.mask_width = mask_width self.traffic_type = traffic_type self.sr_policy_index = sr_policy_index self.sw_if_index = sw_if_index self.table_id = table_id self._configured = False def add_vpp_config(self): self._test.vapi.sr_steering_add_del( is_del=0, bsid=self.bsid, sr_policy_index=self.sr_policy_index, table_id=self.table_id, prefix={'address': self.prefix, 'len': self.mask_width}, sw_if_index=self.sw_if_index, traffic_type=self.traffic_type) self._configured = True def remove_vpp_config(self): self._test.vapi.sr_steering_add_del( is_del=1, bsid=self.bsid, sr_policy_index=self.sr_policy_index, table_id=self.table_id, prefix={'address': self.prefix, 'len': self.mask_width}, sw_if_index=self.sw_if_index, traffic_type=self.traffic_type) self._configured = False def query_vpp_config(self): # no API to query steering entries # use _configured flag for now return self._configured def object_id(self): return ("%d;%d;%s/%d->%s" % (self.table_id, self.traffic_type, self.prefix, self.mask_width, self.bsid))