From 64a0ba3b272dd9ee175e0c6256a6d0cb1733599b Mon Sep 17 00:00:00 2001 From: Stefano Brivio Date: Wed, 21 Jul 2021 12:01:04 +0200 Subject: udp: Introduce recvmmsg()/sendmmsg(), zero-copy path from socket Packets are received directly onto pre-cooked, static buffers for IPv4 (with partial checksum pre-calculation) and IPv6 frames, with pre-filled Ethernet addresses and, partially, IP headers, and sent out from the same buffers with sendmmsg(), for both passt and pasta (non-local traffic only) modes. Signed-off-by: Stefano Brivio --- passt.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'passt.c') diff --git a/passt.c b/passt.c index ee721df..b0fcbc0 100644 --- a/passt.c +++ b/passt.c @@ -409,6 +409,18 @@ static void timer_handler(struct ctx *c, struct timespec *now) } } +/** + * proto_update_l2_buf() - Update scatter-gather L2 buffers in protocol handlers + * @eth_d: Ethernet destination address, NULL if unchanged + * @eth_s: Ethernet source address, NULL if unchanged + * @ip_da: Pointer to IPv4 destination address, NULL if unchanged + */ +void proto_update_l2_buf(unsigned char *eth_d, unsigned char *eth_s, + uint32_t *ip_da) +{ + udp_update_l2_buf(eth_d, eth_s, ip_da); +} + /** * usage_passt() - Print usage for "passt" mode and exit * @name: Executable name @@ -499,6 +511,8 @@ int main(int argc, char **argv) get_dns(&c); get_bound_ports(&c); + proto_update_l2_buf(c.mac_guest, c.mac, &c.addr4); + if (udp_sock_init(&c) || tcp_sock_init(&c)) exit(EXIT_FAILURE); -- cgit v1.2.3