#include <cnat/cnat_types.h>
cnat_main_t cnat_main;
-fib_source_t cnat_fib_source;
-cnat_timestamp_t *cnat_timestamps;
+cnat_timestamp_mpool_t cnat_timestamps;
char *cnat_error_strings[] = {
#define cnat_error(n,s) s,
return 1;
}
+uword
+unformat_cnat_ep_flags (unformat_input_t *input, va_list *args)
+{
+ int *a = va_arg (*args, int *);
+ if (unformat (input, ":nonat"))
+ *a = CNAT_TRK_FLAG_NO_NAT;
+ return 1;
+}
+
uword
unformat_cnat_ep_tuple (unformat_input_t * input, va_list * args)
{
cnat_endpoint_tuple_t *a = va_arg (*args, cnat_endpoint_tuple_t *);
- if (unformat (input, "%U->%U", unformat_cnat_ep, &a->src_ep,
- unformat_cnat_ep, &a->dst_ep))
- ;
- else if (unformat (input, "->%U", unformat_cnat_ep, &a->dst_ep))
- ;
- else if (unformat (input, "%U->", unformat_cnat_ep, &a->src_ep))
- ;
+ int flgs = 0;
+ if (unformat (input, "%U->%U%U", unformat_cnat_ep, &a->src_ep,
+ unformat_cnat_ep, &a->dst_ep, unformat_cnat_ep_flags, &flgs))
+ a->ep_flags = flgs;
+ else if (unformat (input, "->%U%U", unformat_cnat_ep, &a->dst_ep,
+ unformat_cnat_ep_flags, &flgs))
+ a->ep_flags = flgs;
+ else if (unformat (input, "%U->%U", unformat_cnat_ep, &a->src_ep,
+ unformat_cnat_ep_flags, &flgs))
+ a->ep_flags = flgs;
else
return 0;
return 1;
return (s);
}
-static clib_error_t *
-cnat_types_init (vlib_main_t * vm)
-{
- cnat_fib_source = fib_source_allocate ("cnat",
- CNAT_FIB_SOURCE_PRIORITY,
- FIB_SOURCE_BH_SIMPLE);
-
-
- clib_rwlock_init (&cnat_main.ts_lock);
-
- return (NULL);
-}
-
void
cnat_enable_disable_scanner (cnat_scanner_cmd_t event_type)
{
cm->session_hash_buckets = CNAT_DEFAULT_SESSION_BUCKETS;
cm->translation_hash_memory = CNAT_DEFAULT_TRANSLATION_MEMORY;
cm->translation_hash_buckets = CNAT_DEFAULT_TRANSLATION_BUCKETS;
+ cm->client_hash_memory = CNAT_DEFAULT_CLIENT_MEMORY;
+ cm->client_hash_buckets = CNAT_DEFAULT_CLIENT_BUCKETS;
cm->snat_hash_memory = CNAT_DEFAULT_SNAT_MEMORY;
cm->snat_hash_buckets = CNAT_DEFAULT_SNAT_BUCKETS;
+ cm->snat_if_map_length = CNAT_DEFAULT_SNAT_IF_MAP_LEN;
cm->scanner_timeout = CNAT_DEFAULT_SCANNER_TIMEOUT;
cm->session_max_age = CNAT_DEFAULT_SESSION_MAX_AGE;
cm->tcp_max_age = CNAT_DEFAULT_TCP_MAX_AGE;
cm->default_scanner_state = CNAT_SCANNER_ON;
+ cm->maglev_len = CNAT_DEFAULT_MAGLEV_LEN;
cm->lazy_init_done = 0;
while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
else if (unformat (input, "translation-db-memory %U",
unformat_memory_size, &cm->translation_hash_memory))
;
+ else if (unformat (input, "client-db-buckets %u",
+ &cm->client_hash_buckets))
+ ;
+ else if (unformat (input, "client-db-memory %U", unformat_memory_size,
+ &cm->client_hash_memory))
+ ;
else if (unformat (input, "snat-db-buckets %u", &cm->snat_hash_buckets))
;
+ else if (unformat (input, "snat-if-map-len %u", &cm->snat_if_map_length))
+ ;
else if (unformat (input, "snat-db-memory %U",
unformat_memory_size, &cm->snat_hash_memory))
;
;
else if (unformat (input, "tcp-max-age %u", &cm->tcp_max_age))
;
+ else if (unformat (input, "maglev-len %u", &cm->maglev_len))
+ ;
else
return clib_error_return (0, "unknown input '%U'",
format_unformat_error, input);
}
VLIB_EARLY_CONFIG_FUNCTION (cnat_config, "cnat");
-VLIB_INIT_FUNCTION (cnat_types_init);
/*
* fd.io coding-style-patch-verification: ON