summaryrefslogtreecommitdiffstats
path: root/VNFs/vCGNAPT/pipeline/pipeline_cgnapt_common.h
diff options
context:
space:
mode:
Diffstat (limited to 'VNFs/vCGNAPT/pipeline/pipeline_cgnapt_common.h')
-rw-r--r--VNFs/vCGNAPT/pipeline/pipeline_cgnapt_common.h271
1 files changed, 271 insertions, 0 deletions
diff --git a/VNFs/vCGNAPT/pipeline/pipeline_cgnapt_common.h b/VNFs/vCGNAPT/pipeline/pipeline_cgnapt_common.h
new file mode 100644
index 00000000..4f4253cd
--- /dev/null
+++ b/VNFs/vCGNAPT/pipeline/pipeline_cgnapt_common.h
@@ -0,0 +1,271 @@
+/*
+// Copyright (c) 2017 Intel Corporation
+//
+// 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 __INCLUDE_PIPELINE_CGNAPT_COMMON_H__
+#define __INCLUDE_PIPELINE_CGNAPT_COMMON_H__
+
+#include "pipeline_common_fe.h"
+
+extern uint8_t CGNAPT_DEBUG;
+
+struct pipeline_cgnapt_entry_key {
+ uint32_t ip;
+ uint16_t port; /* L4 port */
+ uint16_t pid; /* if port id */
+};
+
+/*
+ * CGNAPY Entry
+ */
+enum cgnapt_entry_type {
+ CGNAPT_ENTRY_IPV4,
+ CGNAPT_ENTRY_IPV6
+};
+
+#ifdef PCP_ENABLE
+/**
+ * An enum defining the CG-NAPT entry creation type
+ */
+
+enum {
+ STATIC_CGNAPT_ENTRY,
+ DYNAMIC_CGNAPT_ENTRY,
+ PCP_CGNAPT_ENTRY,
+};
+#endif
+
+struct app_pipeline_cgnapt_entry_params {
+ enum cgnapt_entry_type type;
+ union {
+ uint32_t prv_ip; /* private ip address */
+ uint8_t prv_ipv6[16];
+ uint16_t u16_prv_ipv6[8];
+ uint32_t u32_prv_ipv6[4];
+ } u;
+ uint32_t prv_ip;
+ uint16_t prv_port; /* private port */
+ uint32_t pub_ip; /* public ip address */
+ uint16_t pub_port; /* public port */
+ uint16_t prv_phy_port; /* physical port on private side */
+ uint16_t pub_phy_port; /* physical port on public side */
+ uint32_t ttl; /* time to live */
+ long long int timeout;
+ #ifdef PCP_ENABLE
+ struct rte_timer *timer;
+ #endif
+};
+
+/*
+ *CGNAPT table
+ */
+
+struct cgnapt_table_entry {
+ struct rte_pipeline_table_entry head;
+ struct app_pipeline_cgnapt_entry_params data;
+} __rte_cache_aligned;
+
+/**
+ * A structure defining the CG-NAPT multiple entry parameter.
+ */
+struct app_pipeline_cgnapt_mentry_params {
+ enum cgnapt_entry_type type;
+ union {
+ uint32_t prv_ip; /* private ip address */
+ uint8_t prv_ipv6[16];
+ uint16_t u16_prv_ipv6[8];
+ uint32_t u32_prv_ipv6[4];
+ } u;
+ uint32_t prv_ip; /* private ip address */
+ uint16_t prv_port; /* private port start */
+ uint32_t pub_ip; /* public ip address */
+ uint16_t pub_port; /* public port start */
+ uint16_t prv_phy_port; /* physical port on private side */
+ uint16_t pub_phy_port; /* physical port on public side */
+ uint32_t ttl; /* time to live */
+ uint32_t num_ue; /* number of UEs to add */
+ uint16_t prv_port_max; /* max value for private port */
+ uint16_t pub_port_max; /* max value for public port */
+};
+
+/**
+ * A structure defining the NAT64 Network Specific Prefix.
+ */
+struct pipeline_cgnapt_nsp_t {
+ uint8_t prefix[16];
+ uint8_t depth;
+};
+
+
+/*
+ * Messages
+ */
+enum pipeline_cgnapt_msg_req_type {
+ PIPELINE_CGNAPT_MSG_REQ_ENTRY_ADD,
+ PIPELINE_CGNAPT_MSG_REQ_ENTRY_DEL,
+ /* to be used for periodic synchronization */
+ PIPELINE_CGNAPT_MSG_REQ_ENTRY_SYNC,
+ /* to be used for debug purposes */
+ PIPELINE_CGNAPT_MSG_REQ_ENTRY_DBG,
+ /* Multiple (bulk) add */
+ PIPELINE_CGNAPT_MSG_REQ_ENTRY_ADDM,
+ PIPELINE_CGNAPT_MSG_REQ_VER,
+ PIPELINE_CGNAPT_MSG_REQ_NSP_ADD,
+ PIPELINE_CGNAPT_MSG_REQ_NSP_DEL,
+ #ifdef PCP_ENABLE
+ PIPELINE_CGNAPT_MSG_REQ_PCP,
+ #endif
+ PIPELINE_CGNAPT_MSG_REQS
+};
+
+/**
+ * A structure defining MSG ENTRY ADD request.
+ */
+struct pipeline_cgnapt_entry_add_msg_req {
+ enum pipeline_msg_req_type type;
+ enum pipeline_cgnapt_msg_req_type subtype;
+
+ /* key */
+ struct pipeline_cgnapt_entry_key key;
+
+ /* data */
+ struct app_pipeline_cgnapt_entry_params data;
+};
+
+/**
+ * A structure defining MSG ENTRY ADD response.
+ */
+struct pipeline_cgnapt_entry_add_msg_rsp {
+ int status;
+ int key_found;
+ void *entry_ptr;
+};
+
+/**
+ * A structure defining MSG ENTRY MADD request.
+ */
+struct pipeline_cgnapt_entry_addm_msg_req {
+ enum pipeline_msg_req_type type;
+ enum pipeline_cgnapt_msg_req_type subtype;
+
+ /* data */
+ struct app_pipeline_cgnapt_mentry_params data;
+};
+
+struct pipeline_cgnapt_entry_addm_msg_rsp {
+ int status;
+ int key_found;
+ void *entry_ptr;
+};
+
+/**
+ * A structure defining MSG ENTRY DELETE request.
+ */
+struct pipeline_cgnapt_entry_delete_msg_req {
+ enum pipeline_msg_req_type type;
+ enum pipeline_cgnapt_msg_req_type subtype;
+
+ /* key */
+ struct pipeline_cgnapt_entry_key key;
+};
+
+/**
+ * A structure defining MSG ENTRY DELETE response.
+ */
+struct pipeline_cgnapt_entry_delete_msg_rsp {
+ int status;
+ int key_found;
+};
+
+/*
+ * MSG ENTRY SYNC
+ */
+struct pipeline_cgnapt_entry_sync_msg_req {
+ enum pipeline_msg_req_type type;
+ enum pipeline_cgnapt_msg_req_type subtype;
+
+ /* data */
+ struct app_pipeline_cgnapt_entry_params data;
+};
+
+struct pipeline_cgnapt_entry_sync_msg_rsp {
+ int status;
+ void *entry_ptr;
+};
+
+/**
+ * A structure defining the debug command response message.
+ */
+struct pipeline_cgnapt_entry_dbg_msg_rsp {
+ int status;
+ void *entry_ptr;
+};
+
+/**
+ * A structure defining the NSP add request.
+ */
+struct pipeline_cgnapt_nsp_add_msg_req {
+ enum pipeline_msg_req_type type;
+ enum pipeline_cgnapt_msg_req_type subtype;
+
+ /* Network Specific Prefix and prefix length */
+ struct pipeline_cgnapt_nsp_t nsp;
+};
+
+/**
+ * A structure defining the NSP add response.
+ */
+struct pipeline_cgnapt_nsp_add_msg_rsp {
+ int status;
+ int key_found;
+};
+
+/**
+ * A structure defining MSG NSP DEL request
+ */
+struct pipeline_cgnapt_nsp_del_msg_req {
+ enum pipeline_msg_req_type type;
+ enum pipeline_cgnapt_msg_req_type subtype;
+
+ /* Network Specific Prefix and prefix length */
+ struct pipeline_cgnapt_nsp_t nsp;
+
+};
+
+/**
+ * A structure defining MSG NSP DEL response
+ */
+struct pipeline_cgnapt_nsp_del_msg_rsp {
+ int status;
+ int key_found;
+};
+
+/**
+ * A structure defining the debug command request message.
+ */
+struct pipeline_cgnapt_entry_dbg_msg_req {
+ enum pipeline_msg_req_type type;
+ enum pipeline_cgnapt_msg_req_type subtype;
+
+ /* data */
+ uint8_t data[5];
+};
+
+extern struct pipeline_be_ops pipeline_cgnapt_be_ops;
+void print_num_ip_clients(void);
+void all_cgnapt_stats(void);
+void all_cgnapt_clear_stats(void);
+void print_static_cgnapt_entries(void);
+#endif