1
0
Fork 0
mirror of https://passt.top/passt synced 2025-06-12 02:25:34 +02:00

udp, passt: Introduce socket packet buffer, avoid getsockname() for UDP

This is in preparation for scatter-gather IO on the UDP receive path:
save a getsockname() syscall by setting a flag if we get the numbering
of all bound sockets in a strict sequence (expected, in practice) and
repurpose the tap buffer to be also a socket receive buffer, passing
it down to protocol handlers.

Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
This commit is contained in:
Stefano Brivio 2021-04-30 14:52:18 +02:00
parent 605af213c5
commit e07f539ae0
10 changed files with 103 additions and 34 deletions

5
tcp.c
View file

@ -1402,14 +1402,17 @@ static void tcp_connect_finish(struct ctx *c, int s)
* @c: Execution context
* @s: File descriptor number for socket
* @events: epoll events bitmap
* @pkt_buf: Buffer to receive packets, currently unused
* @now: Current timestamp
*/
void tcp_sock_handler(struct ctx *c, int s, uint32_t events,
void tcp_sock_handler(struct ctx *c, int s, uint32_t events, char *pkt_buf,
struct timespec *now)
{
socklen_t sl;
int accept;
(void)pkt_buf;
if (tc[s].s == LAST_ACK) {
tcp_send_to_tap(c, s, ACK, NULL, 0);
tcp_close_and_epoll_del(c, s);