diff options
Diffstat (limited to 'src/scvpp/inc')
-rw-r--r-- | src/scvpp/inc/scvpp/comm.h | 245 | ||||
-rw-r--r-- | src/scvpp/inc/scvpp/interface.h | 69 | ||||
-rw-r--r-- | src/scvpp/inc/scvpp/ip.h | 77 | ||||
-rw-r--r-- | src/scvpp/inc/scvpp/nat.h | 61 | ||||
-rw-r--r-- | src/scvpp/inc/scvpp/v3po.h | 54 |
5 files changed, 0 insertions, 506 deletions
diff --git a/src/scvpp/inc/scvpp/comm.h b/src/scvpp/inc/scvpp/comm.h deleted file mode 100644 index a7bac5d..0000000 --- a/src/scvpp/inc/scvpp/comm.h +++ /dev/null @@ -1,245 +0,0 @@ -/* - * Copyright (c) 2018 HUACHENTEL and/or its affiliates. - * Copyright (c) 2018 PANTHEON.tech - * 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. - */ - -#ifndef __SC_VPP_COMMM_H__ -#define __SC_VPP_COMMM_H__ - -#include <errno.h> - -#include <vapi/vapi.h> -#include <vapi/vapi_common.h> -#include <vapi/vpe.api.vapi.h> - -typedef enum { - SCVPP_OK = 0, /* Success */ - SCVPP_EINVAL, /* Invalid value encountered */ - SCVPP_EAGAIN, /* Operation would block */ - SCVPP_ENOTSUP, /* Operation not supported */ - SCVPP_ENOMEM, /* Out of memory */ - SCVPP_NOT_FOUND, /* Required element can not be found */ -} scvpp_error_e; - -// Use VAPI macros to define symbols -DEFINE_VAPI_MSG_IDS_VPE_API_JSON; - -#define VPP_IP4_HOST_PREFIX_LEN 32 -#define VPP_INTFC_NAME_LEN 64 /* Interface name max length */ -#define VPP_IP4_ADDRESS_LEN 4 /* IPv4 length in VPP format */ -#define VPP_IP6_ADDRESS_LEN 16 /* IPv6 length in VPP format */ -#define VPP_MAC_ADDRESS_LEN 8 /* MAC length in VPP format */ -/* IPv4 and IPv6 length in string format */ -#define VPP_IP4_ADDRESS_STRING_LEN INET_ADDRSTRLEN //16, include '\0' -#define VPP_IP6_ADDRESS_STRING_LEN INET6_ADDRSTRLEN //46, include '\0' -#define VPP_IP4_PREFIX_STRING_LEN \ - INET_ADDRSTRLEN + sizeof('/') + 2 // include '\0' -#define VPP_IP6_PREFIX_STRING_LEN \ - INET6_ADDRSTRLEN + sizeof('/') + 3 // include '\0' - -/**********************************MACROS**********************************/ -#define ARG_CHECK(retval, arg) \ - do \ - { \ - if (NULL == (arg)) \ - { \ - return (retval); \ - } \ - } \ - while (0) - -#define ARG_CHECK2(retval, arg1, arg2) \ - ARG_CHECK(retval, arg1); \ - ARG_CHECK(retval, arg2) - -#define ARG_CHECK3(retval, arg1, arg2, arg3) \ - ARG_CHECK(retval, arg1); \ - ARG_CHECK(retval, arg2); \ - ARG_CHECK(retval, arg3) - -#define ARG_CHECK4(retval, arg1, arg2, arg3, arg4) \ - ARG_CHECK(retval, arg1); \ - ARG_CHECK(retval, arg2); \ - ARG_CHECK(retval, arg3); \ - ARG_CHECK(retval, arg4) - -/* Suppress compiler warning about unused variable. - * This must be used only for callback function else suppress your unused - * parameter in function prototype. */ -#define UNUSED(x) (void)x - -#define VAPI_REQUEST_CB(api_name) \ -static vapi_error_e \ -api_name##_cb (struct vapi_ctx_s *ctx, void *callback_ctx, vapi_error_e rv, \ - bool is_last, vapi_payload_##api_name##_reply * reply) \ -{ \ - UNUSED(ctx); UNUSED(rv); UNUSED(is_last); \ - if (callback_ctx) { \ - memcpy(callback_ctx, reply, sizeof(vapi_payload_##api_name##_reply)); \ - } \ - return reply->retval; \ -} - -#define VAPI_REQUEST_CB_EXTRA(api_name, member) \ -static vapi_error_e \ -api_name##_cb (struct vapi_ctx_s *ctx, void *callback_ctx, vapi_error_e rv, \ - bool is_last, vapi_payload_##api_name##_reply * reply) \ -{ \ - UNUSED(ctx); UNUSED(rv); UNUSED(is_last); \ - vapi_payload_##api_name##_reply **p = callback_ctx; \ - int size = sizeof(vapi_payload_##api_name##_reply) + reply->member; \ - if (p) { \ - *p = malloc(size); \ - if (!*p) { \ - return VAPI_ENOMEM; \ - } \ - memcpy(*p, reply, size); \ - } \ - return reply->retval; \ -} - -#define VAPI_CALL_MODE(call_code, vapi_mode) \ - do \ - { \ - pthread_mutex_lock (&sc_vpp_main.vapi_lock); \ - if (VAPI_MODE_BLOCKING == (vapi_mode)) \ - { \ - rv = call_code; \ - } \ - else \ - { \ - while (VAPI_EAGAIN == (rv = call_code)); \ - if (rv != VAPI_OK) { /* try once more to get reply */ \ - rv = vapi_dispatch (sc_vpp_main.vapi_ctx); \ - } \ - } \ - pthread_mutex_unlock (&sc_vpp_main.vapi_lock); \ - } \ - while (0) - -#define VAPI_CALL(call_code) VAPI_CALL_MODE(call_code, sc_vpp_main.vapi_mode) - -struct elt { - void *data; //vapi_payload structure - struct elt *next; - int id; //id of the stack element to count total nb of elements -}; - -static inline int push(struct elt **stack, void *data, int length) -{ - struct elt *el; - - //new stack node - el = malloc(sizeof(struct elt)); - if (!el) - return -ENOMEM; - el->data = malloc(length); - if (!el->data) { - free(el); - return -ENOMEM; - } - - - memcpy(el->data, data, length); - if (*stack) - el->id = (*stack)->id + 1; - else - el->id = 0; - el->next = *stack; //point to old value of stack - *stack = el; //el is new stack head - - return 0; -} - -static inline void * pop(struct elt **stack) -{ - struct elt *prev; - void *data; - - if (!(*stack)) - return NULL; - - data = (*stack)->data; //get data at stack head - prev = *stack; //save stack to free memory later - *stack = (*stack)->next; //new stack - - free(prev); - prev = NULL; - - return data; -} - -#define VAPI_DUMP_LIST_CB(api_name) \ -static vapi_error_e \ -api_name##_all_cb(vapi_ctx_t ctx, void *caller_ctx, vapi_error_e rv, bool is_last, \ - vapi_payload_##api_name##_details *reply) \ -{ \ - UNUSED(ctx); UNUSED(rv); \ - struct elt **stackp; \ - \ - if (is_last) { \ - return VAPI_OK; \ - } \ - \ - ARG_CHECK2(VAPI_EINVAL, caller_ctx, reply); \ - \ - stackp = (struct elt**) caller_ctx; \ - push(stackp, reply, sizeof(*reply)); \ - \ - return VAPI_OK; \ -} - -#define foreach_stack_elt(stack) \ - for(void *data = pop(&stack); data != NULL ; data = pop(&stack)) - - -int sc_aton(const char *cp, u8 * buf, size_t length); -char * sc_ntoa(const u8 * buf); -int sc_pton(int af, const char *cp, u8 * buf); -const char * sc_ntop(int af, const u8 * buf, char *addr); - -/** - * @brief Function converts the u8 array from network byte order to host byte order. - * - * @param[in] host IPv4 address. - * @return host byte order value. - */ -uint32_t hardntohlu32(uint8_t host[4]); - -/* - * VPP - */ - -typedef struct sc_vpp_main_t { - /* VAPI context */ - vapi_ctx_t vapi_ctx; - - /* VAPI calling mode: VAPI_MODE_BLOCKING, VAPI_MODE_NONBLOCKING */ - vapi_mode_e vapi_mode; - - /* Mutex for keeping atomicity when calling VAPI */ - pthread_mutex_t vapi_lock; - - /* pid of VPP */ - pid_t pid; -} sc_vpp_main_t; - -extern sc_vpp_main_t sc_vpp_main; - -sc_vpp_main_t *sc_connect_vpp(); -void sc_disconnect_vpp(); -pid_t sc_get_vpp_pid(); -int sc_end_with(const char* str, const char* end); - -#endif //__SC_VPP_COMMM_H__ diff --git a/src/scvpp/inc/scvpp/interface.h b/src/scvpp/inc/scvpp/interface.h deleted file mode 100644 index 86cd185..0000000 --- a/src/scvpp/inc/scvpp/interface.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright (c) 2018 PANTHEON.tech. - * - * 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. - */ - -#ifndef __BAPI_INTERFACE_H__ -#define __BAPI_INTERFACE_H__ - -#include <vapi/interface.api.vapi.h> -#include <scvpp/comm.h> - -typedef vapi_payload_sw_interface_details sw_interface_dump_t; - -/** - * @brief Change an interface state - * @param interface_name - name of target interface - * @param enable - true=state up, false=state down - * @return 0 for success, else negative SCVPP error code - */ -int interface_enable(const char *interface_name, const bool enable); - -/** - * @brief Dump details about all existing interfaces - * @return stack structure containing all interfaces or NULL if empty - */ -extern struct elt * interface_dump_all(); - - -/** - * @brief Dump details about a specific interface - * @param details - where answer will be written - * @param interface_name - name of the interface to dump - * @return 0 for success or negative SCVPP error code - */ -extern int interface_dump_iface(sw_interface_dump_t *details, - const char *interface_name); - -/* - * Library internal helper functions. Symbols should not be exported eventually - */ - -/* - * @brief Get VPP internal index for an interface - * @param interface_name - name of the interface to get id from - * @param sw_if_index - pointer to interface index to be returned - * @return 0 upon success or negative SCVPP error code - */ -extern int get_interface_id(const char *interface_name, uint32_t *sw_if_index); - -/* @brief Get interface name from an interface ID. This is a super expensive - * operation !!! Avoid using it. - * @param interface_name - pointer to string holding returned interface name - * @param sw_if_index - interface index provided - * @return 0 upon success or negative SCVPP error code - */ -extern int get_interface_name(char *interface_name, uint32_t sw_if_index); - -#endif /* __BAPI_INTERFACE_H__ */ diff --git a/src/scvpp/inc/scvpp/ip.h b/src/scvpp/inc/scvpp/ip.h deleted file mode 100644 index f8805b3..0000000 --- a/src/scvpp/inc/scvpp/ip.h +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (c) 2018 PANTHEON.tech. - * - * 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. - */ - - -#ifndef __BAPI_IP_H__ -#define __BAPI_IP_H__ - -#include <vapi/interface.api.vapi.h> -#include <vapi/ip.api.vapi.h> - -typedef vapi_payload_ip_fib_details fib_dump_t; - -/* - * @brief Dump IPv4/IPv6 address from an interface. - * @param interface_name - name of the interface to get ip from. - * @param ip_addr - where dump will store IP. If IP not found, returns 0.0.0.0 - * @param prefix_len - pointer where dump will store prefix - * @param is_ipv6 - true = IPv6, false = IPv4 - * @return 0 on success, or nergative SCVPP error code - */ -extern int ipv46_address_dump(const char *interface_name, char *ip_addr, - u8 *prefix_len, bool is_ipv6); - -/** - * @brief Add or remove IPv4/IPv6 address to/from an interface. - * @param interface_name - name of interface to configure - * @param addr - address to add - * @param prefix_len - prefix length of interface - * @param is_ipv6 - true if ipv6, false otherwise - * @param add - true to add, false to remove - */ -extern int ipv46_config_add_remove(const char *interface_name, const char *addr, - uint8_t prefix_len, bool is_ipv6, bool add); - -/* - * TODO should add a field is_ipv6 because it only do ipv4 now - * @brief Add or remove an IP route - * @param dst_address - subnet IP you wish to route - * @param dst_address_length - prefix length for subnet you wish to route - * @param next_address - Next hop IP (can use next_hop_interface instead) - * @param is_add - true to add, false to remove - * @param table_id - id of the tab in FIB - * @param next_hop_interface - Next hop interface (can use next_address instead) - */ -extern int -ipv46_config_add_del_route(const char* dst_address, u8 dst_address_length, - const char* next_address, u8 is_add, u32 table_id, - const char *next_hop_interface); - -/** - * @brief Dump all FIB tables entries - * @return stacked answers on success, or NULL on failure - */ -extern struct elt* ipv4_fib_dump_all(); - -/* - * @brief Dump information about a prefix, based on fib_dump_all - * @param prefix_xpath - prefix to look for in FIB - * @param reply - FIB entry dump replied - * @return SCVPP_OK if prefix found or SCVPP_NOT_FOUND - */ -extern int ipv4_fib_dump_prefix(const char *prefix_xpath, fib_dump_t **reply); - -#endif /* __BAPI_IP_H__ */ diff --git a/src/scvpp/inc/scvpp/nat.h b/src/scvpp/inc/scvpp/nat.h deleted file mode 100644 index 40e727e..0000000 --- a/src/scvpp/inc/scvpp/nat.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (c) 2018 PANTHEON.tech. - * - * 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. - */ - -#ifndef __BAPI_NAT_H__ -#define __BAPI_NAT_H__ - -#include <vapi/nat.api.vapi.h> - -typedef vapi_payload_nat44_interface_details nat44_interface_details_t; -typedef vapi_payload_nat44_add_del_interface_addr nat44_add_del_interface_addr_t; -typedef vapi_payload_nat44_add_del_address_range nat44_add_del_address_range_t; -typedef vapi_payload_nat44_add_del_static_mapping nat44_add_del_static_mapping_t; -typedef vapi_payload_nat44_static_mapping_details nat44_static_mapping_details_t; -typedef vapi_payload_nat44_forwarding_enable_disable nat44_forwarding_enable_disable_t; -typedef vapi_payload_nat_set_workers nat_set_workers_t; - - -//Wrapper function, if we want hide the VAPI return value -extern int nat44_interface_dump(nat44_interface_details_t *reply); -extern int nat44_add_del_interface_addr( - const nat44_add_del_interface_addr_t *msg); -extern int nat44_add_del_addr_range(const nat44_add_del_address_range_t *range); -extern int nat44_add_del_static_mapping( - const nat44_add_del_static_mapping_t *msg); -extern int nat44_static_mapping_dump(nat44_static_mapping_details_t *reply); -extern int nat44_forwarding_enable_disable( - const nat44_forwarding_enable_disable_t *msg); -extern int nat_set_workers(const nat_set_workers_t *msg); - - -// Alternative, if we don't want hide VAPI return value - -// extern vapi_error_e bin_api_nat44_interface_dump(nat44_interface_details_t *reply); -// extern vapi_error_e bin_api_nat44_add_del_interface_addr( -// const nat44_add_del_interface_addr_t *msg); -// extern vapi_error_e bin_api_nat44_add_del_addr_range( -// const nat44_add_del_address_range_t *range); -// extern vapi_error_e bin_api_nat44_add_del_static_mapping( -// const nat44_add_del_static_mapping_t *msg); -// extern vapi_error_e bin_api_nat44_static_mapping_dump( -// nat44_static_mapping_details_t *reply); -// extern vapi_error_e bin_api_nat44_forwarding_enable_disable( -// const nat44_forwarding_enable_disable_t *msg); -// extern vapi_error_e bin_api_nat_set_workers(const nat_set_workers_t *msg); - - -#endif /* __BAPI_NAT_H__ */ - diff --git a/src/scvpp/inc/scvpp/v3po.h b/src/scvpp/inc/scvpp/v3po.h deleted file mode 100644 index f876ab4..0000000 --- a/src/scvpp/inc/scvpp/v3po.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (c) 2016 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. - */ - -#ifndef _V3PO__INTERFACE_H__ -#define _V3PO__INTERFACE_H__ - -#include <vapi/tapv2.api.vapi.h> -#include <vapi/l2.api.vapi.h> - -/** - * V3PO defines operations for specific interfaces used by VPP like: - * - tapv2 - */ - -/* tapv2 */ - -typedef vapi_payload_tap_create_v2 tapv2_create_t; -typedef vapi_payload_sw_interface_tap_v2_details tapv2_dump_t; - -/** - * TODO problem: vapi_payload_sw_interface_tap_v2_details reply is NULL - * @brief Dump information about a tap interface - * @param dump - where dump information will be stored - * @return 0 on success, or negative SCVPP error code - */ -extern int dump_tapv2(tapv2_dump_t *dump); - -/** - * @brief Create a tapv2 interface - * @param query - required structure for the creation of a VPP tapv2 interface - * @return 0 on success, or negative SCVPP error code - */ -extern int create_tapv2(tapv2_create_t *query); - -/** - * @brief Delete a tapv2 interface - * @param interface_name - name of the interface to delete - * @return 0 on success, or negative SCVPP error code - */ -extern int delete_tapv2(char *interface_name); - -#endif /* __V3PO_INTERFACE_H__ */ |