NVIDIA DOCA SDK Data Center on a Chip Framework Documentation
tcp_session_table.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2023 NVIDIA CORPORATION AND AFFILIATES. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without modification, are permitted
5  * provided that the following conditions are met:
6  * * Redistributions of source code must retain the above copyright notice, this list of
7  * conditions and the following disclaimer.
8  * * Redistributions in binary form must reproduce the above copyright notice, this list of
9  * conditions and the following disclaimer in the documentation and/or other materials
10  * provided with the distribution.
11  * * Neither the name of the NVIDIA CORPORATION nor the names of its contributors may be used
12  * to endorse or promote products derived from this software without specific prior written
13  * permission.
14  *
15  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
16  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
17  * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NVIDIA CORPORATION BE LIABLE
18  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
19  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
20  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
21  * STRICT LIABILITY, OR TOR (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
22  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23  *
24  */
25 
26 #ifndef DOCA_GPU_PACKET_PROCESSING_TCP_SESSION_H
27 #define DOCA_GPU_PACKET_PROCESSING_TCP_SESSION_H
28 
29 #include <stdint.h>
30 #include <rte_common.h>
31 #include <rte_byteorder.h>
32 #include <rte_hash.h>
33 
34 #define TCP_SESSION_MAX_ENTRIES 4096
35 
36 /* TCP session key */
38  rte_be32_t src_addr; /* TCP session key src addr */
39  rte_be32_t dst_addr; /* TCP session key dst addr */
40  rte_be16_t src_port; /* TCP session key src port */
41  rte_be16_t dst_port; /* TCP session key dst port */
42 };
43 
44 /* TCP session entry */
46  struct tcp_session_key key; /* TCP session key */
47  struct doca_flow_pipe_entry *flow; /* TCP session key DOCA flow entry */
48 };
49 
50 /* TCP session params */
51 extern struct rte_hash_parameters tcp_session_ht_params;
52 /* TCP session table */
53 extern struct rte_hash *tcp_session_table;
54 
55 /*
56  * TCP session table CRC
57  *
58  * @data [in]: Network card PCIe address
59  * @data_len [in]: DOCA device
60  * @init_val [in]: DPDK port id associated with the DOCA device
61  * @return: 0 on success and 1 otherwise
62  */
63 uint32_t tcp_session_table_crc(const void *data, uint32_t data_len, uint32_t init_val);
64 
65 /*
66  * TCP session table CRC
67  *
68  * @key [in]: TCP session table key
69  * @return: ptr on success and NULL otherwise
70  */
72 
73 /*
74  * TCP session table CRC
75  *
76  * @entry [in]: TCP session table key
77  */
79 
80 /*
81  * Establish new TCP session
82  *
83  * @key [in]: TCP session table key
84  * @return: ptr on success and NULL otherwise
85  */
87 
88 #endif
static struct doca_flow_pipe_entry * entry[MAX_ENTRIES]
struct doca_flow_pipe_entry * flow
struct tcp_session_key key
struct rte_hash * tcp_session_table
struct rte_hash_parameters tcp_session_ht_params
uint32_t tcp_session_table_crc(const void *data, uint32_t data_len, uint32_t init_val)
struct tcp_session_entry * tcp_session_table_new(struct tcp_session_key *key)
struct tcp_session_entry * tcp_session_table_find(struct tcp_session_key *key)
void tcp_session_table_delete(struct tcp_session_entry *entry)