From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail.ozlabs.org (mail.ozlabs.org [IPv6:2404:9400:2221:ea00::3]) by passt.top (Postfix) with ESMTPS id C8C1E5A0323 for ; Fri, 05 Jul 2024 04:07:44 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gibson.dropbear.id.au; s=202312; t=1720145251; bh=9Te8KKwjMoK51Qn3zDN8d5hUtlc+sTzGp+y7xqr1KDA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Tr5S3Sz9YhTSrojF7UdXXIu27Lm0CpPMj8jcLIKS/g0Y+z42XGJ8rUteVe2SPfomW g7M8v/2bfl1BKYD/IZxoEOX1gLrXExeRyvtt80DMvKOC7s/9Sa8OCAOBz37frgSaJl 4qBEMaZf+w19LDEik+n3GZmHcoDRs6wTPDF5gGCoeIoyFJNX/h6pEKX8YQy8IFgNav iwmdOR/i+Aiy+x7sr8H7pvNVeP/U5OWgDPuWz+3fYL3Gfp1Fj3/D7SNWnx28dvBcIp 0UJBn13JuK1GdWjAafqZ6PqTJnBH83z0hlnJb21Ppj8VPH4E0/AOs+U/LYdYGQKp7z ob0QH8pM6O5xA== Received: by gandalf.ozlabs.org (Postfix, from userid 1007) id 4WFcNM2mZDz4xQW; Fri, 5 Jul 2024 12:07:31 +1000 (AEST) From: David Gibson To: Stefano Brivio , passt-dev@passt.top Subject: [PATCH v7 27/27] udp: Rename UDP listening sockets Date: Fri, 5 Jul 2024 12:07:24 +1000 Message-ID: <20240705020724.3447719-28-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240705020724.3447719-1-david@gibson.dropbear.id.au> References: <20240705020724.3447719-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Message-ID-Hash: 52GFXFMQFQIX6YCI34L3MWQXXFWPXQDM X-Message-ID-Hash: 52GFXFMQFQIX6YCI34L3MWQXXFWPXQDM X-MailFrom: dgibson@gandalf.ozlabs.org X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: jmaloy@redhat.com, David Gibson X-Mailman-Version: 3.3.8 Precedence: list List-Id: Development discussion and patches for passt Archived-At: Archived-At: List-Archive: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: EPOLL_TYPE_UDP is now only used for "listening" sockets; long lived sockets which can initiate new flows. Rename to EPOLL_TYPE_UDP_LISTEN and associated functions to match. Along with that, remove the .orig field from union udp_listen_epoll_ref, since it is now always true. Signed-off-by: David Gibson --- epoll_type.h | 4 ++-- passt.c | 6 +++--- passt.h | 2 +- udp.c | 25 +++++++++++-------------- udp.h | 12 +++++------- util.c | 2 +- 6 files changed, 23 insertions(+), 28 deletions(-) diff --git a/epoll_type.h b/epoll_type.h index 7a752ed1..0ad1efa0 100644 --- a/epoll_type.h +++ b/epoll_type.h @@ -20,8 +20,8 @@ enum epoll_type { EPOLL_TYPE_TCP_LISTEN, /* timerfds used for TCP timers */ EPOLL_TYPE_TCP_TIMER, - /* UDP sockets */ - EPOLL_TYPE_UDP, + /* UDP "listening" sockets */ + EPOLL_TYPE_UDP_LISTEN, /* UDP socket for replies on a specific flow */ EPOLL_TYPE_UDP_REPLY, /* ICMP/ICMPv6 ping sockets */ diff --git a/passt.c b/passt.c index f9405bee..eed74ec9 100644 --- a/passt.c +++ b/passt.c @@ -66,7 +66,7 @@ char *epoll_type_str[] = { [EPOLL_TYPE_TCP_SPLICE] = "connected spliced TCP socket", [EPOLL_TYPE_TCP_LISTEN] = "listening TCP socket", [EPOLL_TYPE_TCP_TIMER] = "TCP timer", - [EPOLL_TYPE_UDP] = "UDP socket", + [EPOLL_TYPE_UDP_LISTEN] = "listening UDP socket", [EPOLL_TYPE_UDP_REPLY] = "UDP reply socket", [EPOLL_TYPE_PING] = "ICMP/ICMPv6 ping socket", [EPOLL_TYPE_NSQUIT_INOTIFY] = "namespace inotify watch", @@ -347,8 +347,8 @@ loop: case EPOLL_TYPE_TCP_TIMER: tcp_timer_handler(&c, ref); break; - case EPOLL_TYPE_UDP: - udp_buf_sock_handler(&c, ref, eventmask, &now); + case EPOLL_TYPE_UDP_LISTEN: + udp_listen_sock_handler(&c, ref, eventmask, &now); break; case EPOLL_TYPE_UDP_REPLY: udp_reply_sock_handler(&c, ref, eventmask, &now); diff --git a/passt.h b/passt.h index 0d76b498..4cc2b6f0 100644 --- a/passt.h +++ b/passt.h @@ -48,7 +48,7 @@ union epoll_ref { uint32_t flow; flow_sidx_t flowside; union tcp_listen_epoll_ref tcp_listen; - union udp_epoll_ref udp; + union udp_listen_epoll_ref udp; uint32_t data; int nsdir_fd; }; diff --git a/udp.c b/udp.c index 8affcf12..58cf6b93 100644 --- a/udp.c +++ b/udp.c @@ -420,10 +420,7 @@ static flow_sidx_t udp_flow_from_sock(const struct ctx *c, union epoll_ref ref, union flow *flow; flow_sidx_t sidx; - ASSERT(ref.type == EPOLL_TYPE_UDP); - - if (!ref.udp.orig) - return FLOW_SIDX_NONE; + ASSERT(ref.type == EPOLL_TYPE_UDP_LISTEN); sidx = flow_lookup_sa(c, IPPROTO_UDP, ref.udp.pif, &meta->s_in, ref.udp.port); if ((uflow = udp_at_sidx(sidx))) { @@ -604,7 +601,7 @@ int udp_sock_recv(const struct ctx *c, int s, uint32_t events, } /** - * udp_buf_sock_handler() - Handle new data from socket + * udp_listen_sock_handler() - Handle new data from socket * @c: Execution context * @ref: epoll reference * @events: epoll events bitmap @@ -612,8 +609,8 @@ int udp_sock_recv(const struct ctx *c, int s, uint32_t events, * * #syscalls recvmmsg */ -void udp_buf_sock_handler(const struct ctx *c, union epoll_ref ref, uint32_t events, - const struct timespec *now) +void udp_listen_sock_handler(const struct ctx *c, union epoll_ref ref, + uint32_t events, const struct timespec *now) { struct mmsghdr *mmh_recv = ref.udp.v6 ? udp6_mh_recv : udp4_mh_recv; int n, i; @@ -881,7 +878,7 @@ int udp_tap_handler(const struct ctx *c, uint8_t pif, int udp_sock_init(const struct ctx *c, int ns, sa_family_t af, const void *addr, const char *ifname, in_port_t port) { - union udp_epoll_ref uref = { .orig = true, .port = port }; + union udp_listen_epoll_ref uref = { .port = port }; int s, r4 = FD_REF_MAX + 1, r6 = FD_REF_MAX + 1; if (ns) @@ -893,12 +890,12 @@ int udp_sock_init(const struct ctx *c, int ns, sa_family_t af, uref.v6 = 0; if (!ns) { - r4 = s = sock_l4(c, AF_INET, EPOLL_TYPE_UDP, addr, - ifname, port, uref.u32); + r4 = s = sock_l4(c, AF_INET, EPOLL_TYPE_UDP_LISTEN, + addr, ifname, port, uref.u32); udp_splice_init[V4][port] = s < 0 ? -1 : s; } else { - r4 = s = sock_l4(c, AF_INET, EPOLL_TYPE_UDP, + r4 = s = sock_l4(c, AF_INET, EPOLL_TYPE_UDP_LISTEN, &in4addr_loopback, ifname, port, uref.u32); udp_splice_ns[V4][port] = s < 0 ? -1 : s; @@ -909,12 +906,12 @@ int udp_sock_init(const struct ctx *c, int ns, sa_family_t af, uref.v6 = 1; if (!ns) { - r6 = s = sock_l4(c, AF_INET6, EPOLL_TYPE_UDP, addr, - ifname, port, uref.u32); + r6 = s = sock_l4(c, AF_INET6, EPOLL_TYPE_UDP_LISTEN, + addr, ifname, port, uref.u32); udp_splice_init[V6][port] = s < 0 ? -1 : s; } else { - r6 = s = sock_l4(c, AF_INET6, EPOLL_TYPE_UDP, + r6 = s = sock_l4(c, AF_INET6, EPOLL_TYPE_UDP_LISTEN, &in6addr_loopback, ifname, port, uref.u32); udp_splice_ns[V6][port] = s < 0 ? -1 : s; diff --git a/udp.h b/udp.h index ba803d51..18a86892 100644 --- a/udp.h +++ b/udp.h @@ -9,8 +9,8 @@ #define UDP_TIMER_INTERVAL 1000 /* ms */ void udp_portmap_clear(void); -void udp_buf_sock_handler(const struct ctx *c, union epoll_ref ref, - uint32_t events, const struct timespec *now); +void udp_listen_sock_handler(const struct ctx *c, union epoll_ref ref, + uint32_t events, const struct timespec *now); void udp_reply_sock_handler(const struct ctx *c, union epoll_ref ref, uint32_t events, const struct timespec *now); int udp_tap_handler(const struct ctx *c, uint8_t pif, @@ -23,21 +23,19 @@ void udp_timer(struct ctx *c, const struct timespec *now); void udp_update_l2_buf(const unsigned char *eth_d, const unsigned char *eth_s); /** - * union udp_epoll_ref - epoll reference portion for TCP connections + * union udp_listen_epoll_ref - epoll reference for "listening" UDP sockets * @port: Source port for connected sockets, bound port otherwise * @pif: pif for this socket * @bound: Set if this file descriptor is a bound socket * @splice: Set if descriptor packets to be "spliced" - * @orig: Set if a spliced socket which can originate "connections" * @v6: Set for IPv6 sockets or connections * @u32: Opaque u32 value of reference */ -union udp_epoll_ref { +union udp_listen_epoll_ref { struct { in_port_t port; uint8_t pif; - bool orig:1, - v6:1; + bool v6:1; }; uint32_t u32; }; diff --git a/util.c b/util.c index 7c57ab15..82b0028b 100644 --- a/util.c +++ b/util.c @@ -60,7 +60,7 @@ int sock_l4_sa(const struct ctx *c, enum epoll_type type, proto = IPPROTO_TCP; socktype = SOCK_STREAM | SOCK_NONBLOCK; break; - case EPOLL_TYPE_UDP: + case EPOLL_TYPE_UDP_LISTEN: case EPOLL_TYPE_UDP_REPLY: proto = IPPROTO_UDP; socktype = SOCK_DGRAM | SOCK_NONBLOCK; -- 2.45.2