summaryrefslogtreecommitdiffstats
path: root/src/plugins/nat/nat44-ed/nat44_ed.h
diff options
context:
space:
mode:
authorFilip Varga <fivarga@cisco.com>2021-05-26 18:45:59 +0200
committerOle Tr�an <otroan@employees.org>2021-07-22 11:27:07 +0000
commit2cf583e3d6b7f8290e4fefec3b70968048d8dae0 (patch)
treebb1390a711a346f6dab5d93241ccbda9ab066f0f /src/plugins/nat/nat44-ed/nat44_ed.h
parent976a0ed6ac7e57709c5917bfe7d9c8141e80e901 (diff)
nat: nat44-ed configuration refactor & cleanup
Refactoring static mapping configuration functions based on feature type. Type: refactor Signed-off-by: Filip Varga <fivarga@cisco.com> Change-Id: I007d9b0e9717ced613fbcef2b11b6853f479be1e
Diffstat (limited to 'src/plugins/nat/nat44-ed/nat44_ed.h')
-rw-r--r--src/plugins/nat/nat44-ed/nat44_ed.h211
1 files changed, 83 insertions, 128 deletions
diff --git a/src/plugins/nat/nat44-ed/nat44_ed.h b/src/plugins/nat/nat44-ed/nat44_ed.h
index 6abdbadae43..b74b46f81b7 100644
--- a/src/plugins/nat/nat44-ed/nat44_ed.h
+++ b/src/plugins/nat/nat44-ed/nat44_ed.h
@@ -43,12 +43,11 @@
#define SNAT_FLAG_HAIRPINNING (1 << 0)
/* NAT44 API Configuration flags */
-#define foreach_nat44_config_flag \
- _(0x00, IS_ENDPOINT_INDEPENDENT) \
- _(0x01, IS_ENDPOINT_DEPENDENT) \
- _(0x02, IS_STATIC_MAPPING_ONLY) \
- _(0x04, IS_CONNECTION_TRACKING) \
- _(0x08, IS_OUT2IN_DPO)
+#define foreach_nat44_config_flag \
+ _ (0x00, IS_ENDPOINT_INDEPENDENT) \
+ _ (0x01, IS_ENDPOINT_DEPENDENT) \
+ _ (0x02, IS_STATIC_MAPPING_ONLY) \
+ _ (0x04, IS_CONNECTION_TRACKING)
typedef enum nat44_config_flags_t_
{
@@ -187,11 +186,14 @@ typedef enum
#define NAT_INTERFACE_FLAG_IS_OUTSIDE 2
/* Static mapping flags */
-#define NAT_STATIC_MAPPING_FLAG_ADDR_ONLY 1
-#define NAT_STATIC_MAPPING_FLAG_OUT2IN_ONLY 2
-#define NAT_STATIC_MAPPING_FLAG_IDENTITY_NAT 4
-#define NAT_STATIC_MAPPING_FLAG_LB 8
-#define NAT_STATIC_MAPPING_FLAG_EXACT_ADDRESS 16
+#define NAT_SM_FLAG_SELF_TWICE_NAT (1 << 1)
+#define NAT_SM_FLAG_TWICE_NAT (1 << 2)
+#define NAT_SM_FLAG_IDENTITY_NAT (1 << 3)
+#define NAT_SM_FLAG_ADDR_ONLY (1 << 4)
+#define NAT_SM_FLAG_EXACT_ADDRESS (1 << 5)
+#define NAT_SM_FLAG_OUT2IN_ONLY (1 << 6)
+#define NAT_SM_FLAG_LB (1 << 7)
+#define NAT_SM_FLAG_SWITCH_ADDRESS (1 << 8)
typedef CLIB_PACKED(struct
{
@@ -420,8 +422,6 @@ typedef struct
u16 local_port;
/* external port */
u16 external_port;
- /* is twice-nat */
- twice_nat_type_t twice_nat;
/* local FIB table */
u32 vrf_id;
u32 fib_index;
@@ -786,36 +786,6 @@ unformat_function_t unformat_nat_protocol;
*/
#define nat44_is_ses_closed(s) s->state == 0xf
-/** \brief Check if NAT static mapping is address only (1:1NAT).
- @param sm NAT static mapping
- @return 1 if 1:1NAT, 0 if 1:1NAPT
-*/
-#define is_addr_only_static_mapping(sm) (sm->flags & NAT_STATIC_MAPPING_FLAG_ADDR_ONLY)
-
-/** \brief Check if NAT static mapping match only out2in direction.
- @param sm NAT static mapping
- @return 1 if rule match only out2in direction
-*/
-#define is_out2in_only_static_mapping(sm) (sm->flags & NAT_STATIC_MAPPING_FLAG_OUT2IN_ONLY)
-
-/** \brief Check if NAT static mapping is identity NAT.
- @param sm NAT static mapping
- @return 1 if identity NAT
-*/
-#define is_identity_static_mapping(sm) (sm->flags & NAT_STATIC_MAPPING_FLAG_IDENTITY_NAT)
-
-/** \brief Check if NAT static mapping is load-balancing.
- @param sm NAT static mapping
- @return 1 if load-balancing
-*/
-#define is_lb_static_mapping(sm) (sm->flags & NAT_STATIC_MAPPING_FLAG_LB)
-
-/** \brief Check if exact pool address should be used.
- @param s SNAT session
- @return 1 if exact pool address or 0
-*/
-#define is_exact_address(s) (s->flags & NAT_STATIC_MAPPING_FLAG_EXACT_ADDRESS)
-
/** \brief Check if client initiating TCP connection (received SYN from client)
@param t TCP header
@return 1 if client initiating TCP connection
@@ -826,6 +796,54 @@ tcp_flags_is_init (u8 f)
return (f & TCP_FLAG_SYN) && !(f & TCP_FLAG_ACK);
}
+always_inline bool
+is_sm_addr_only (u32 f)
+{
+ return (f & NAT_SM_FLAG_ADDR_ONLY);
+}
+
+always_inline bool
+is_sm_out2in_only (u32 f)
+{
+ return (f & NAT_SM_FLAG_OUT2IN_ONLY);
+}
+
+always_inline bool
+is_sm_identity_nat (u32 f)
+{
+ return (f & NAT_SM_FLAG_IDENTITY_NAT);
+}
+
+always_inline bool
+is_sm_lb (u32 f)
+{
+ return (f & NAT_SM_FLAG_LB);
+}
+
+always_inline bool
+is_sm_exact_address (u32 f)
+{
+ return (f & NAT_SM_FLAG_EXACT_ADDRESS);
+}
+
+always_inline bool
+is_sm_self_twice_nat (u32 f)
+{
+ return (f & NAT_SM_FLAG_SELF_TWICE_NAT);
+}
+
+always_inline bool
+is_sm_twice_nat (u32 f)
+{
+ return (f & NAT_SM_FLAG_TWICE_NAT);
+}
+
+always_inline bool
+is_sm_switch_address (u32 f)
+{
+ return (f & NAT_SM_FLAG_SWITCH_ADDRESS);
+}
+
/* logging */
#define nat_log_err(...) \
vlib_log(VLIB_LOG_LEVEL_ERR, snat_main.log_class, __VA_ARGS__)
@@ -838,6 +856,28 @@ tcp_flags_is_init (u8 f)
#define nat_log_debug(...)\
vlib_log(VLIB_LOG_LEVEL_DEBUG, snat_main.log_class, __VA_ARGS__)
+int nat44_ed_add_static_mapping (ip4_address_t l_addr, ip4_address_t e_addr,
+ u16 l_port, u16 e_port, nat_protocol_t proto,
+ u32 vrf_id, u32 sw_if_index, u32 flags,
+ ip4_address_t pool_addr, u8 *tag);
+
+int nat44_ed_del_static_mapping (ip4_address_t l_addr, ip4_address_t e_addr,
+ u16 l_port, u16 e_port, nat_protocol_t proto,
+ u32 vrf_id, u32 sw_if_index, u32 flags);
+
+int nat44_ed_add_lb_static_mapping (ip4_address_t e_addr, u16 e_port,
+ nat_protocol_t proto,
+ nat44_lb_addr_port_t *locals, u32 flags,
+ u8 *tag, u32 affinity);
+
+int nat44_ed_del_lb_static_mapping (ip4_address_t e_addr, u16 e_port,
+ nat_protocol_t proto, u32 flags);
+
+int nat44_ed_add_del_lb_static_mapping_local (ip4_address_t e_addr, u16 e_port,
+ ip4_address_t l_addr, u16 l_port,
+ nat_protocol_t proto, u32 vrf_id,
+ u8 probability, u8 is_add);
+
/**
* @brief Enable NAT44 plugin
*
@@ -880,71 +920,6 @@ int snat_add_address (snat_main_t * sm, ip4_address_t * addr, u32 vrf_id,
int snat_del_address (snat_main_t * sm, ip4_address_t addr, u8 delete_sm,
u8 twice_nat);
-/**
- * @brief Add/delete external address to FIB DPO (out2in DPO mode)
- *
- * @param addr IPv4 address
- * @param is_add 1 = add, 0 = delete
- *
- * @return 0 on success, non-zero value otherwise
- */
-void nat44_add_del_address_dpo (ip4_address_t addr, u8 is_add);
-
-/**
- * @brief Add/delete NAT44 static mapping
- *
- * @param l_addr local IPv4 address
- * @param e_addr external IPv4 address
- * @param l_port local port number
- * @param e_port external port number
- * @param vrf_id local VRF ID
- * @param addr_only 1 = 1:1NAT, 0 = 1:1NAPT
- * @param sw_if_index use interface address as external IPv4 address
- * @param proto L4 protocol
- * @param is_add 1 = add, 0 = delete
- * @param twice_nat twice-nat mode
- * @param out2in_only if 1 rule match only out2in direction
- * @param tag opaque string tag
- * @param identity_nat identity NAT
- * @param pool_addr pool IPv4 address
- * @param exact 1 = exact pool address
- *
- * @return 0 on success, non-zero value otherwise
- */
-int snat_add_static_mapping (ip4_address_t l_addr, ip4_address_t e_addr,
- u16 l_port, u16 e_port, u32 vrf_id,
- int addr_only, u32 sw_if_index,
- nat_protocol_t proto, int is_add,
- twice_nat_type_t twice_nat, u8 out2in_only,
- u8 * tag, u8 identity_nat,
- ip4_address_t pool_addr, int exact);
-
-/**
- * @brief Add/delete static mapping with load-balancing (multiple backends)
- *
- * @param e_addr external IPv4 address
- * @param e_port external port number
- * @param proto L4 protocol
- * @param locals list of local backends
- * @param is_add 1 = add, 0 = delete
- * @param twice_nat twice-nat mode
- * @param out2in_only if 1 rule match only out2in direction
- * @param tag opaque string tag
- * @param affinity 0 = disabled, otherwise client IP affinity sticky time
- *
- * @return 0 on success, non-zero value otherwise
- */
-int nat44_add_del_lb_static_mapping (ip4_address_t e_addr, u16 e_port,
- nat_protocol_t proto,
- nat44_lb_addr_port_t * locals, u8 is_add,
- twice_nat_type_t twice_nat,
- u8 out2in_only, u8 * tag, u32 affinity);
-
-int nat44_lb_static_mapping_add_del_local (ip4_address_t e_addr, u16 e_port,
- ip4_address_t l_addr, u16 l_port,
- nat_protocol_t proto, u32 vrf_id,
- u8 probability, u8 is_add);
-
clib_error_t *nat44_api_hookup (vlib_main_t * vm);
/**
@@ -1074,26 +1049,6 @@ int snat_static_mapping_match (
void snat_add_del_addr_to_fib (ip4_address_t * addr,
u8 p_len, u32 sw_if_index, int is_add);
-#if 0
-void
-nat_ha_sadd_ed_cb (ip4_address_t * in_addr, u16 in_port,
- ip4_address_t * out_addr, u16 out_port,
- ip4_address_t * eh_addr, u16 eh_port,
- ip4_address_t * ehn_addr, u16 ehn_port, u8 proto,
- u32 fib_index, u16 flags, u32 thread_index);
-
-void
-nat_ha_sdel_ed_cb (ip4_address_t * out_addr, u16 out_port,
- ip4_address_t * eh_addr, u16 eh_port, u8 proto,
- u32 fib_index, u32 ti);
-
-void
-nat_ha_sref_ed_cb (ip4_address_t * out_addr, u16 out_port,
- ip4_address_t * eh_addr, u16 eh_port, u8 proto,
- u32 fib_index, u32 total_pkts, u64 total_bytes,
- u32 thread_index);
-#endif
-
int nat_set_outside_address_and_port (snat_address_t *addresses,
u32 thread_index, ip4_address_t addr,
u16 port, nat_protocol_t protocol);