Code Review
/
vpp.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
review
|
tree
raw
|
inline
| side by side
acl-plugin: 5-tuple parse: get rid of memcpy and move to flags vs. bitfields
[vpp.git]
/
src
/
plugins
/
acl
/
fa_node.h
diff --git
a/src/plugins/acl/fa_node.h
b/src/plugins/acl/fa_node.h
index
102922c
..
903ef87
100644
(file)
--- a/
src/plugins/acl/fa_node.h
+++ b/
src/plugins/acl/fa_node.h
@@
-5,6
+5,8
@@
#include <vppinfra/bihash_16_8.h>
#include <vppinfra/bihash_40_8.h>
#include <vppinfra/bihash_16_8.h>
#include <vppinfra/bihash_40_8.h>
+#include <plugins/acl/exported_types.h>
+
// #define FA_NODE_VERBOSE_DEBUG 3
#define TCP_FLAG_FIN 0x01
// #define FA_NODE_VERBOSE_DEBUG 3
#define TCP_FLAG_FIN 0x01
@@
-36,6
+38,11
@@
typedef union {
};
} fa_packet_info_t;
};
} fa_packet_info_t;
+typedef enum {
+ FA_SK_L4_FLAG_IS_INPUT = (1 << 0),
+ FA_SK_L4_FLAG_IS_SLOWPATH = (1 << 1),
+} fa_session_l4_key_l4_flags_t;
+
typedef union {
u64 as_u64;
struct {
typedef union {
u64 as_u64;
struct {
@@
-43,9
+50,7
@@
typedef union {
union {
struct {
u8 proto;
union {
struct {
u8 proto;
- u8 is_input: 1;
- u8 is_slowpath: 1;
- u8 reserved0: 6;
+ u8 l4_flags;
u16 lsb_of_sw_if_index;
};
u32 non_port_l4_data;
u16 lsb_of_sw_if_index;
};
u32 non_port_l4_data;
@@
-53,6
+58,13
@@
typedef union {
};
} fa_session_l4_key_t;
};
} fa_session_l4_key_t;
+
+static_always_inline
+int is_session_l4_key_u64_slowpath(u64 l4key) {
+ fa_session_l4_key_t k = { .as_u64 = l4key };
+ return (k.l4_flags & FA_SK_L4_FLAG_IS_SLOWPATH) ? 1 : 0;
+}
+
typedef union {
struct {
union {
typedef union {
struct {
union {
@@
-77,10
+89,18
@@
typedef union {
};
} fa_5tuple_t;
};
} fa_5tuple_t;
-typedef struct {
- u8 opaque[sizeof(fa_5tuple_t)];
-} fa_5tuple_opaque_t;
+static_always_inline u8 *
+format_fa_session_l4_key(u8 * s, va_list * args)
+{
+ fa_session_l4_key_t *l4 = va_arg (*args, fa_session_l4_key_t *);
+ int is_input = (l4->l4_flags & FA_SK_L4_FLAG_IS_INPUT) ? 1 : 0;
+ int is_slowpath = (l4->l4_flags & FA_SK_L4_FLAG_IS_SLOWPATH) ? 1 : 0;
+ return (format (s, "l4 lsb_of_sw_if_index %d proto %d l4_is_input %d l4_slow_path %d l4_flags 0x%02x port %d -> %d",
+ l4->lsb_of_sw_if_index,
+ l4->proto, is_input, is_slowpath,
+ l4->l4_flags, l4->port[0], l4->port[1]));
+}
typedef struct {
fa_5tuple_t info; /* (5+1)*8 = 48 bytes */
typedef struct {
fa_5tuple_t info; /* (5+1)*8 = 48 bytes */
@@
-139,6
+159,8
@@
CT_ASSERT_EQUAL(fa_session_t_size_is_128, sizeof(fa_session_t), 128);
/* Session ID MUST be the same as u64 */
CT_ASSERT_EQUAL(fa_full_session_id_size_is_64, sizeof(fa_full_session_id_t), sizeof(u64));
/* Session ID MUST be the same as u64 */
CT_ASSERT_EQUAL(fa_full_session_id_size_is_64, sizeof(fa_full_session_id_t), sizeof(u64));
+
+CT_ASSERT_EQUAL(fa_5tuple_opaque_t_must_match_5tuple, sizeof(fa_5tuple_opaque_t), sizeof(fa_5tuple_t));
#undef CT_ASSERT_EQUAL
#define FA_SESSION_BOGUS_INDEX ~0
#undef CT_ASSERT_EQUAL
#define FA_SESSION_BOGUS_INDEX ~0
@@
-146,6
+168,12
@@
CT_ASSERT_EQUAL(fa_full_session_id_size_is_64, sizeof(fa_full_session_id_t), siz
typedef struct {
/* The pool of sessions managed by this worker */
fa_session_t *fa_sessions_pool;
typedef struct {
/* The pool of sessions managed by this worker */
fa_session_t *fa_sessions_pool;
+ /* incoming session change requests from other workers */
+ clib_spinlock_t pending_session_change_request_lock;
+ u64 *pending_session_change_requests;
+ u64 *wip_session_change_requests;
+ u64 rcvd_session_change_requests;
+ u64 sent_session_change_requests;
/* per-worker ACL_N_TIMEOUTS of conn lists */
u32 *fa_conn_list_head;
u32 *fa_conn_list_tail;
/* per-worker ACL_N_TIMEOUTS of conn lists */
u32 *fa_conn_list_head;
u32 *fa_conn_list_tail;