From 68d7c546fa7e6c801031f2922c9be067d64e0f59 Mon Sep 17 00:00:00 2001 From: Filip Varga Date: Mon, 21 Dec 2020 18:20:00 +0100 Subject: nat: refactor and split fo EI/ED features p.2 Patch n. 2 aimed at moving EI features out of NAT44 plugin & split of EI/ED functions. Type: refactor Change-Id: Ida20c1c084449b146344b6c3d8442f49efb6f3fa Signed-off-by: Filip Varga --- src/plugins/nat/nat44-ei/nat44_ei.h | 98 ++++++++++++++++++++++++++++++++++++- 1 file changed, 96 insertions(+), 2 deletions(-) (limited to 'src/plugins/nat/nat44-ei/nat44_ei.h') diff --git a/src/plugins/nat/nat44-ei/nat44_ei.h b/src/plugins/nat/nat44-ei/nat44_ei.h index ac430bee5c3..510e73de59a 100644 --- a/src/plugins/nat/nat44-ei/nat44_ei.h +++ b/src/plugins/nat/nat44-ei/nat44_ei.h @@ -19,9 +19,38 @@ #ifndef __included_nat44_ei_h__ #define __included_nat44_ei_h__ -int nat44_ei_plugin_enable (); +typedef struct +{ + /* maximum number of users */ + u32 users; + /* maximum number of sessions */ + u32 sessions; + /* maximum number of ssessions per user */ + u32 user_sessions; -void nat44_ei_plugin_disable (); + /* plugin features */ + u8 static_mapping_only; + u8 connection_tracking; + u8 out2in_dpo; + + u32 inside_vrf; + u32 outside_vrf; + +} nat44_ei_config_t; + +typedef struct +{ + u32 translations; + u32 translation_buckets; + u32 user_buckets; + + nat44_ei_config_t rconfig; + +} nat44_ei_main_t; + +int nat44_ei_plugin_enable (nat44_ei_config_t c); + +int nat44_ei_plugin_disable (); /** * @brief Delete specific NAT44 EI user and his sessions @@ -71,6 +100,71 @@ void nat44_ei_set_alloc_mape (u16 psid, u16 psid_offset, u16 psid_length); */ void nat44_ei_set_alloc_range (u16 start_port, u16 end_port); +/** + * @brief Add/delete NAT44-EI 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 proto L4 protocol + * @param sw_if_index use interface address as external IPv4 address + * @param vrf_id local VRF ID + * @param addr_only 1 = 1:1NAT, 0 = 1:1NAPT + * @param identity_nat identity NAT + * @param tag opaque string tag + * @param is_add 1 = add, 0 = delete + * + * @return 0 on success, non-zero value otherwise + + */ +int nat44_ei_add_del_static_mapping (ip4_address_t l_addr, + ip4_address_t e_addr, u16 l_port, + u16 e_port, nat_protocol_t proto, + u32 sw_if_index, u32 vrf_id, u8 addr_only, + u8 identity_nat, u8 *tag, u8 is_add); + +/** + * @brief Delete NAT44-EI session + * + * @param addr IPv4 address + * @param port L4 port number + * @param proto L4 protocol + * @param vrf_id VRF ID + * @param is_in 1 = inside network address and port pair, 0 = outside + * + * @return 0 on success, non-zero value otherwise + */ +int nat44_ei_del_session (snat_main_t *sm, ip4_address_t *addr, u16 port, + nat_protocol_t proto, u32 vrf_id, int is_in); + +/** + * @brief Match NAT44-EI static mapping. + * + * @param key address and port to match + * @param addr external/local address of the matched mapping + * @param port port of the matched mapping + * @param fib_index fib index of the matched mapping + * @param by_external if 0 match by local address otherwise match by + * external address + * @param is_addr_only 1 if matched mapping is address only + * @param is_identity_nat 1 if indentity mapping + * + * @returns 0 if match found otherwise 1. + */ +int nat44_ei_static_mapping_match (ip4_address_t match_addr, u16 match_port, + u32 match_fib_index, + nat_protocol_t match_protocol, + ip4_address_t *mapping_addr, + u16 *mapping_port, u32 *mapping_fib_index, + u8 by_external, u8 *is_addr_only, + u8 *is_identity_nat); + +/** + * @brief Clear all active NAT44-EI sessions. + */ +void nat44_ei_sessions_clear (); + #endif /* __included_nat44_ei_h__ */ /* * fd.io coding-style-patch-verification: ON -- cgit 1.2.3-korg