Skip to content

Commit 9a12947

Browse files
AlexanderGrissikgalnoam
authored andcommitted
issue: 3886011 Removing UDP RX callback API
Removing the remainings of RX callback API that was kept for UDP sockets. Signed-off-by: Alexander Grissik <[email protected]>
1 parent 594c2d2 commit 9a12947

File tree

6 files changed

+20
-195
lines changed

6 files changed

+20
-195
lines changed

src/core/sock/sock-extra.cpp

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -34,19 +34,6 @@
3434
// extended API functions
3535
//-----------------------------------------------------------------------------
3636

37-
extern "C" int xlio_register_recv_callback(int __fd, xlio_recv_callback_t __callback,
38-
void *__context)
39-
{
40-
sockinfo *p_socket_object = nullptr;
41-
p_socket_object = fd_collection_get_sockfd(__fd);
42-
if (p_socket_object && p_socket_object->get_protocol() == PROTO_UDP) {
43-
reinterpret_cast<sockinfo_udp *>(p_socket_object)->register_callback(__callback, __context);
44-
return 0;
45-
}
46-
errno = EINVAL;
47-
return -1;
48-
}
49-
5037
extern "C" int xlio_add_conf_rule(const char *config_line)
5138
{
5239
int ret = __xlio_parse_config_line(config_line);
@@ -88,8 +75,6 @@ struct xlio_api_t *extra_api()
8875
memset(xlio_api, 0, sizeof(struct xlio_api_t));
8976
xlio_api->magic = XLIO_MAGIC_NUMBER;
9077
xlio_api->cap_mask = 0;
91-
SET_EXTRA_API(register_recv_callback, xlio_register_recv_callback,
92-
XLIO_EXTRA_API_REGISTER_RECV_CALLBACK);
9378
SET_EXTRA_API(add_conf_rule, xlio_add_conf_rule, XLIO_EXTRA_API_ADD_CONF_RULE);
9479
SET_EXTRA_API(thread_offload, xlio_thread_offload, XLIO_EXTRA_API_THREAD_OFFLOAD);
9580
SET_EXTRA_API(dump_fd_stats, xlio_dump_fd_stats, XLIO_EXTRA_API_DUMP_FD_STATS);

src/core/sock/sockinfo_udp.cpp

Lines changed: 18 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -347,12 +347,12 @@ sockinfo_udp::sockinfo_udp(int fd, int domain)
347347
, m_port_map_lock("sockinfo_udp::m_ports_map_lock")
348348
, m_port_map_index(0)
349349
, m_p_last_dst_entry(nullptr)
350-
, m_tos(0)
351350
, m_n_sysvar_rx_poll_yield_loops(safe_mce_sys().rx_poll_yield_loops)
352351
, m_n_sysvar_rx_udp_poll_os_ratio(safe_mce_sys().rx_udp_poll_os_ratio)
353352
, m_n_sysvar_rx_ready_byte_min_limit(safe_mce_sys().rx_ready_byte_min_limit)
354353
, m_n_sysvar_rx_cq_drain_rate_nsec(safe_mce_sys().rx_cq_drain_rate_nsec)
355354
, m_n_sysvar_rx_delta_tsc_between_cq_polls(safe_mce_sys().rx_delta_tsc_between_cq_polls)
355+
, m_tos(0)
356356
, m_sockopt_mapped(false)
357357
, m_is_connected(false)
358358
, m_multicast(false)
@@ -2264,72 +2264,27 @@ int sockinfo_udp::rx_verify_available_data()
22642264
return ret;
22652265
}
22662266

2267-
void sockinfo_udp::register_callback(xlio_recv_callback_t callback, void *context)
2268-
{
2269-
m_rx_callback = callback;
2270-
m_rx_callback_context = context;
2271-
}
2272-
2273-
/**
2274-
* Performs inspection by registered user callback
2275-
*
2276-
*/
2277-
inline xlio_recv_callback_retval_t sockinfo_udp::inspect_by_user_cb(mem_buf_desc_t *p_desc)
2278-
{
2279-
xlio_info_t pkt_info;
2280-
2281-
pkt_info.struct_sz = sizeof(pkt_info);
2282-
pkt_info.packet_id = (void *)p_desc;
2283-
pkt_info.src = p_desc->rx.src.get_p_sa();
2284-
pkt_info.dst = p_desc->rx.dst.get_p_sa();
2285-
pkt_info.socket_ready_queue_pkt_count = m_n_rx_pkt_ready_list_count;
2286-
pkt_info.socket_ready_queue_byte_count = m_rx_ready_byte_count;
2287-
2288-
if (m_n_tsing_flags & SOF_TIMESTAMPING_RAW_HARDWARE) {
2289-
pkt_info.hw_timestamp = p_desc->rx.timestamps.hw;
2290-
}
2291-
if (p_desc->rx.timestamps.sw.tv_sec) {
2292-
pkt_info.sw_timestamp = p_desc->rx.timestamps.sw;
2293-
}
2294-
2295-
// fill io vector array with data buffer pointers
2296-
iovec iov[p_desc->rx.n_frags];
2297-
int nr_frags = 0;
2298-
2299-
for (mem_buf_desc_t *tmp = p_desc; tmp; tmp = tmp->p_next_desc) {
2300-
iov[nr_frags++] = tmp->rx.frag;
2301-
}
2302-
2303-
// call user callback
2304-
return m_rx_callback(m_fd, nr_frags, iov, &pkt_info, m_rx_callback_context);
2305-
}
2306-
23072267
/**
23082268
* Performs packet processing and store packet
23092269
* in ready queue.
23102270
*/
2311-
inline void sockinfo_udp::update_ready(mem_buf_desc_t *p_desc, void *pv_fd_ready_array,
2312-
xlio_recv_callback_retval_t cb_ret)
2271+
inline void sockinfo_udp::update_ready(mem_buf_desc_t *p_desc, void *pv_fd_ready_array)
23132272
{
2314-
// In ZERO COPY case we let the user's application manage the ready queue
2315-
if (cb_ret != XLIO_PACKET_HOLD) {
2316-
m_lock_rcv.lock();
2317-
// Save rx packet info in our ready list
2318-
m_rx_pkt_ready_list.push_back(p_desc);
2319-
m_n_rx_pkt_ready_list_count++;
2320-
m_rx_ready_byte_count += p_desc->rx.sz_payload;
2321-
if (unlikely(m_p_socket_stats)) {
2322-
m_p_socket_stats->n_rx_ready_byte_count += p_desc->rx.sz_payload;
2323-
m_p_socket_stats->n_rx_ready_pkt_count++;
2324-
m_p_socket_stats->counters.n_rx_ready_pkt_max =
2325-
std::max((uint32_t)m_n_rx_pkt_ready_list_count,
2326-
m_p_socket_stats->counters.n_rx_ready_pkt_max);
2327-
m_p_socket_stats->counters.n_rx_ready_byte_max = std::max(
2328-
(uint32_t)m_rx_ready_byte_count, m_p_socket_stats->counters.n_rx_ready_byte_max);
2329-
}
2330-
m_sock_wakeup_pipe.do_wakeup();
2331-
m_lock_rcv.unlock();
2273+
m_lock_rcv.lock();
2274+
// Save rx packet info in our ready list
2275+
m_rx_pkt_ready_list.push_back(p_desc);
2276+
m_n_rx_pkt_ready_list_count++;
2277+
m_rx_ready_byte_count += p_desc->rx.sz_payload;
2278+
if (unlikely(m_p_socket_stats)) {
2279+
m_p_socket_stats->n_rx_ready_byte_count += p_desc->rx.sz_payload;
2280+
m_p_socket_stats->n_rx_ready_pkt_count++;
2281+
m_p_socket_stats->counters.n_rx_ready_pkt_max = std::max(
2282+
(uint32_t)m_n_rx_pkt_ready_list_count, m_p_socket_stats->counters.n_rx_ready_pkt_max);
2283+
m_p_socket_stats->counters.n_rx_ready_byte_max = std::max(
2284+
(uint32_t)m_rx_ready_byte_count, m_p_socket_stats->counters.n_rx_ready_byte_max);
23322285
}
2286+
m_sock_wakeup_pipe.do_wakeup();
2287+
m_lock_rcv.unlock();
23332288

23342289
NOTIFY_ON_EVENTS(this, EPOLLIN);
23352290

@@ -2482,17 +2437,10 @@ bool sockinfo_udp::rx_input_cb(mem_buf_desc_t *p_desc, void *pv_fd_ready_array)
24822437

24832438
process_timestamps(p_desc);
24842439

2485-
xlio_recv_callback_retval_t cb_ret = XLIO_PACKET_RECV;
2486-
if (m_rx_callback && ((cb_ret = inspect_by_user_cb(p_desc)) == XLIO_PACKET_DROP)) {
2487-
si_udp_logfunc("rx packet discarded - by user callback");
2488-
return false;
2489-
}
2490-
// Yes, we want to keep this packet!
2491-
// And we must increment ref_counter before pushing this packet into the ready queue
2492-
// to prevent race condition with the 'if( (--ref_count) <= 0)' in ib_comm_mgr
2440+
// We must increment ref_counter before pushing this packet into the ready queue
24932441
p_desc->inc_ref_count();
24942442
save_strq_stats(p_desc->rx.strides_num);
2495-
update_ready(p_desc, pv_fd_ready_array, cb_ret);
2443+
update_ready(p_desc, pv_fd_ready_array);
24962444
if (unlikely(m_p_socket_stats)) {
24972445
m_p_socket_stats->counters.n_rx_bytes += p_desc->rx.sz_payload;
24982446
m_p_socket_stats->counters.n_rx_data_pkts++;

src/core/sock/sockinfo_udp.h

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,6 @@ class sockinfo_udp : public sockinfo {
159159

160160
bool prepare_to_close(bool process_shutdown = false) override;
161161
void update_header_field(data_updater *updater) override;
162-
void register_callback(xlio_recv_callback_t callback, void *context);
163162

164163
#if defined(DEFINED_NGINX)
165164
void prepare_to_close_socket_pool(bool _push_pop) override;
@@ -241,9 +240,7 @@ class sockinfo_udp : public sockinfo {
241240
}
242241
}
243242

244-
inline xlio_recv_callback_retval_t inspect_by_user_cb(mem_buf_desc_t *p_desc);
245-
inline void update_ready(mem_buf_desc_t *p_rx_wc_buf_desc, void *pv_fd_ready_array,
246-
xlio_recv_callback_retval_t cb_ret);
243+
inline void update_ready(mem_buf_desc_t *p_rx_wc_buf_desc, void *pv_fd_ready_array);
247244

248245
void post_dequeue() override;
249246
size_t handle_msg_trunc(size_t total_rx, size_t payload_size, int in_flags,
@@ -289,18 +286,13 @@ class sockinfo_udp : public sockinfo {
289286

290287
chunk_list_t<mem_buf_desc_t *> m_rx_pkt_ready_list;
291288

292-
// Callback function pointer to support XLIO extra API (xlio_extra.h)
293-
xlio_recv_callback_t m_rx_callback = nullptr;
294-
void *m_rx_callback_context = nullptr; // user context
295-
296-
uint8_t m_tos;
297-
298289
const uint32_t m_n_sysvar_rx_poll_yield_loops;
299290
const uint32_t m_n_sysvar_rx_udp_poll_os_ratio;
300291
const uint32_t m_n_sysvar_rx_ready_byte_min_limit;
301292
const uint32_t m_n_sysvar_rx_cq_drain_rate_nsec;
302293
const uint32_t m_n_sysvar_rx_delta_tsc_between_cq_polls;
303294

295+
uint8_t m_tos;
304296
bool m_sockopt_mapped; // setsockopt IPPROTO_UDP UDP_MAP_ADD
305297
bool m_is_connected; // to inspect for in_addr.src
306298
bool m_multicast; // true when socket set MC rule

src/core/xlio.h

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -163,18 +163,6 @@ int xlio_thread_offload(int offload, pthread_t tid);
163163
*/
164164
int xlio_dump_fd_stats(int fd, int log_level);
165165

166-
/*
167-
* Register a received packet notification callback.
168-
*
169-
* @param s Socket file descriptor.
170-
* @param callback Callback function.
171-
* @param context user contex for callback function.
172-
* @return 0 - success, -1 - error
173-
*
174-
* errno is set to: EINVAL - not offloaded socket
175-
*/
176-
int xlio_register_recv_callback(int s, xlio_recv_callback_t callback, void *context);
177-
178166
/**
179167
* @defgroup xlio_ultra_api XLIO Ultra API
180168
* @brief High-performance zero-copy networking interface

src/core/xlio_extra.h

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ struct ibv_pd;
3333
*/
3434

3535
enum {
36-
XLIO_EXTRA_API_REGISTER_RECV_CALLBACK = (1 << 0),
3736
XLIO_EXTRA_API_ADD_CONF_RULE = (1 << 3),
3837
XLIO_EXTRA_API_THREAD_OFFLOAD = (1 << 4),
3938
XLIO_EXTRA_API_DUMP_FD_STATS = (1 << 11),
@@ -82,18 +81,6 @@ struct __attribute__((packed)) xlio_api_t {
8281
*/
8382
int (*dump_fd_stats)(int fd, int log_level);
8483

85-
/*
86-
* Register a received packet notification callback.
87-
*
88-
* @param s Socket file descriptor.
89-
* @param callback Callback function.
90-
* @param context user context for callback function.
91-
* @return 0 - success, -1 - error
92-
*
93-
* errno is set to: EINVAL - not offloaded socket
94-
*/
95-
int (*register_recv_callback)(int s, xlio_recv_callback_t callback, void *context);
96-
9784
/*
9885
* XLIO Ultra API.
9986
*/

src/core/xlio_types.h

Lines changed: 0 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -28,48 +28,6 @@
2828
#define SO_XLIO_SHUTDOWN_RX 2821
2929
#define SO_XLIO_EXT_VLAN_TAG 2824
3030

31-
/*
32-
* Return values for the receive packet notify callback function
33-
*/
34-
typedef enum {
35-
XLIO_PACKET_DROP, /* The library will drop the received packet and recycle
36-
the buffer if no other socket needs it */
37-
38-
XLIO_PACKET_RECV, /* The library will queue the received packet on this socket ready queue.
39-
The application will read it with the usual recv socket APIs */
40-
41-
XLIO_PACKET_HOLD /* Application will handle the queuing of the received packet. The application
42-
must return the descriptor to the library using the free packet function
43-
But not in the context of XLIO's callback itself. */
44-
} xlio_recv_callback_retval_t;
45-
46-
/*
47-
* Structure holding additional information on the packet and socket
48-
* Note: Check structure size value for future library changes
49-
*/
50-
struct __attribute__((packed)) xlio_info_t {
51-
size_t
52-
struct_sz; /* Compare this value with sizeof(xlio_info_t) to check version compatability */
53-
void *packet_id; /* Handle to received packet buffer to be return if zero copy logic is used */
54-
55-
/* Packet addressing information (in network byte order) */
56-
const struct sockaddr *src;
57-
const struct sockaddr *dst;
58-
59-
/* Packet information */
60-
size_t payload_sz;
61-
62-
/* Socket's information */
63-
uint32_t socket_ready_queue_pkt_count; /* Current count of packets waiting to be read from the
64-
socket */
65-
uint32_t socket_ready_queue_byte_count; /* Current count of bytes waiting to be read from the
66-
socket */
67-
68-
/* Packet timestamping information */
69-
struct timespec hw_timestamp;
70-
struct timespec sw_timestamp;
71-
};
72-
7331
struct xlio_rate_limit_t {
7432
uint32_t rate; /* rate limit in Kbps */
7533
uint32_t max_burst_sz; /* maximum burst size in bytes */
@@ -117,39 +75,6 @@ struct xlio_ring_alloc_logic_attr {
11775
uint32_t reserved : 30;
11876
};
11977

120-
/*
121-
* Notification callback for incoming packet on socket
122-
* @param fd Socket's file descriptor which this packet refers to
123-
* @param iov iovector structure array point holding the packet
124-
* received data buffer pointers and size of each buffer
125-
* @param iov_sz Size of iov array
126-
* @param xlio_info Additional information on the packet and socket
127-
* @param context User-defined value provided during callback
128-
* registration for each socket
129-
*
130-
* This callback function should be registered by the library calling
131-
* register_recv_callback() in the extended API. It can be unregistered by
132-
* setting a NULL function pointer. The library will call the callback to notify
133-
* of new incoming packets after the IP & UDP header processing and before
134-
* they are queued in the socket's receive queue.
135-
* Context of the callback will always be from one of the user's application
136-
* threads when calling the following socket APIs: select, poll, epoll, recv,
137-
* recvfrom, recvmsg, read, readv.
138-
*
139-
* Notes:
140-
* - The application can call all of the Socket APIs control and send from
141-
* within the callback context.
142-
* - Packet loss might occur depending on the applications behavior in the
143-
* callback context.
144-
* - Parameters `iov' and `xlio_info' are only valid until callback context
145-
* is returned to the library. User should copy these structures for later use
146-
* if working with zero copy logic.
147-
*/
148-
typedef xlio_recv_callback_retval_t (*xlio_recv_callback_t)(int fd, size_t sz_iov,
149-
struct iovec iov[],
150-
struct xlio_info_t *xlio_info,
151-
void *context);
152-
15378
/**
15479
* @addtogroup xlio_ultra_api XLIO Ultra API
15580
* @{

0 commit comments

Comments
 (0)