From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: passt.top; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: passt.top; dkim=pass (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=YTZCDhme; dkim-atps=neutral Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by passt.top (Postfix) with ESMTPS id 97BAF5A061B for ; Wed, 29 Oct 2025 00:13:46 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1761693225; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=P7fr7X2eyUp6jmmT4cL01N4GfAMCVS7L/r5O0A+kgkg=; b=YTZCDhmeVq6DpkjP6UIIgW+Vhg+khJ/8+4NgNEEqgeXlyATNC7glkHT9YBEP+wRx0voiz1 rJof58hzTVAlN3eXboH7e7u0slUC7TH76MNsfuqr9ZObXsA5aCmOOks67y+HPXMx/btIM/ fcOYu6saKUV4zrCflAv0yuUP2ZriPgY= Received: from mail-wr1-f69.google.com (mail-wr1-f69.google.com [209.85.221.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-261-snkvmZYWP1SU2Zj4scZSkg-1; Tue, 28 Oct 2025 19:13:43 -0400 X-MC-Unique: snkvmZYWP1SU2Zj4scZSkg-1 X-Mimecast-MFC-AGG-ID: snkvmZYWP1SU2Zj4scZSkg_1761693223 Received: by mail-wr1-f69.google.com with SMTP id ffacd0b85a97d-426d4f59cbcso184422f8f.1 for ; Tue, 28 Oct 2025 16:13:43 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761693222; x=1762298022; h=content-transfer-encoding:mime-version:organization:references :in-reply-to:message-id:subject:cc:to:from:date:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=P7fr7X2eyUp6jmmT4cL01N4GfAMCVS7L/r5O0A+kgkg=; b=p8fWqAIfz3OxzUmBd0U9Bq6fDSyMzYBIM4LKT4wyUITeFMxLxrdjcCOu4BReL6050M HiF4LM7ky6QZi2389rSY7q4uBHt/WEOk6Om2f5930E3tWOldg6SUSJID5q77c+dPF1J3 M0KEoIboX2xs/MlwZkV7tMlXU9Blj1oYuy/cjuSFUxnx+VdeYoDpq77PrO7HhmWz7/2D F2yDop47sok6QD73GGIFcTX4989a0+6ZGqwOdNIr7dGLzU0RkG47OUhDMkgRIdHdKuTY QgLRIuCQQxDwtCuVLOgFVgGmH7Zh7avmrUSWW4KnZHbVY/ft5Bom2BtzB0Dt/R6tNVHH zrFQ== X-Gm-Message-State: AOJu0Yynqy6iNE+l9X2aNPA1vlmJbdLHA3XIMRlRCOECssasN1Sc9fhz 5+DmClrn9DtHXDHwDQN0LB0htrmO/PQuwI8zN6L9FeLycXmJcOG5xzaFc+dqiaIODLb0O7MP4lM x/YgF6sA+NECJruMQ3CFQiB5PCL4nDL8GP3SPpAloOCTFRXWliKRSYRoBXNt/KQ== X-Gm-Gg: ASbGncu3Y5Gk77TWrvQNDzJ6U0FkkHEPb/Lz6kNDW1oUlRH+Lj399CT/xYCyBJbYdCE jRhssHxKciVRW+P7YwfBGRGimRLbfzZKfeMsvIXK9W8kA94QutgytdyYWXzFa6Sx0Pfo5W5Exx1 6bicCtEBsqyrQZJvzvmt8dANiJJNyXe82S7hDe4SaOGhPbSqaAjpgOHe5NrazD84O+IIvLJFAqJ JvgFkfxBM6hixAAsJMY4B9Ea/hkGIBXfqMIv+w/8iPUtV8UjzHRJbCW31DcbEhxcSsp43M9JkOb LK0bIFtIVA+cSiBmes16nkWtLUemgIYVy3aP41FXdQx7+d3k7PTIfa8drQrZBxvXDOnjHJsIrWk RuE+BjkAsZw== X-Received: by 2002:a05:6000:4026:b0:429:8b01:c0a1 with SMTP id ffacd0b85a97d-429a83e5042mr4647690f8f.28.1761693222029; Tue, 28 Oct 2025 16:13:42 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEZgf/6kjOj4oBYlL5rNS75GISLzmpMbd0hpfqn4mNt/E4YB+qv3rTrt551F+pBoC6VBoLMMQ== X-Received: by 2002:a05:6000:4026:b0:429:8b01:c0a1 with SMTP id ffacd0b85a97d-429a83e5042mr4647678f8f.28.1761693221509; Tue, 28 Oct 2025 16:13:41 -0700 (PDT) Received: from maya.myfinge.rs (ifcgrfdd.trafficplex.cloud. [2a10:fc81:a806:d6a9::1]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-429952cbc16sm22145107f8f.15.2025.10.28.16.13.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Oct 2025 16:13:39 -0700 (PDT) Date: Wed, 29 Oct 2025 00:13:38 +0100 From: Stefano Brivio To: David Gibson Subject: Re: [PATCH v2 2/3] udp: Unify some more inbound/outbound parts of udp_sock_init() Message-ID: <20251029001338.3e33a58f@elisabeth> In-Reply-To: <20251022031527.990033-3-david@gibson.dropbear.id.au> References: <20251022031527.990033-1-david@gibson.dropbear.id.au> <20251022031527.990033-3-david@gibson.dropbear.id.au> Organization: Red Hat X-Mailer: Claws Mail 4.2.0 (GTK 3.24.49; x86_64-pc-linux-gnu) MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: n5k8w57WaQqCs0SSptx6UwYz4VmctsKTK4iH6IFWFtA_1761693223 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Message-ID-Hash: 73WWGPIWVS2GFFF2JUPOAAT7UUXMM2O2 X-Message-ID-Hash: 73WWGPIWVS2GFFF2JUPOAAT7UUXMM2O2 X-MailFrom: sbrivio@redhat.com 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: passt-dev@passt.top 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: Sorry for the delay but... On Wed, 22 Oct 2025 14:15:26 +1100 David Gibson wrote: > udp_sock_init() takes an 'ns' parameter determining if it creates a socket > in the guest namespace or host namespace. Alter it to take a pif > parameter instead, like tcp_sock_init(), and use that change to slightly > reduce code duplication between the HOST and SPLICE cases. > > Signed-off-by: David Gibson > --- > conf.c | 2 +- > udp.c | 65 +++++++++++++++++++++++++++++++--------------------------- > udp.h | 5 +++-- > 3 files changed, 39 insertions(+), 33 deletions(-) > > diff --git a/conf.c b/conf.c > index 26f1bcc0..08cb50aa 100644 > --- a/conf.c > +++ b/conf.c > @@ -171,7 +171,7 @@ static void conf_ports_range_except(const struct ctx *c, char optname, > if (optname == 't') > ret = tcp_sock_init(c, PIF_HOST, addr, ifname, i); > else if (optname == 'u') > - ret = udp_sock_init(c, 0, addr, ifname, i); > + ret = udp_sock_init(c, PIF_HOST, addr, ifname, i); > else > /* No way to check in advance for -T and -U */ > ret = 0; > diff --git a/udp.c b/udp.c > index 86585b7e..7f5faf20 100644 > --- a/udp.c > +++ b/udp.c > @@ -1093,64 +1093,68 @@ int udp_tap_handler(const struct ctx *c, uint8_t pif, > /** > * udp_sock_init() - Initialise listening sockets for a given port > * @c: Execution context > - * @ns: In pasta mode, if set, bind with loopback address in namespace > + * @pif: Interface to open the socket for (PIF_HOST or PIF_SPLICE) > * @addr: Pointer to address for binding, NULL if not configured > * @ifname: Name of interface to bind to, NULL if not configured > * @port: Port, host order > * > * Return: 0 on (partial) success, negative error code on (complete) failure > */ > -int udp_sock_init(const struct ctx *c, int ns, const union inany_addr *addr, > - const char *ifname, in_port_t port) > +int udp_sock_init(const struct ctx *c, uint8_t pif, > + const union inany_addr *addr, const char *ifname, > + in_port_t port) > { > union udp_listen_epoll_ref uref = { > - .pif = ns ? PIF_SPLICE : PIF_HOST, > + .pif = pif, > .port = port, > }; > int r4 = FD_REF_MAX + 1, r6 = FD_REF_MAX + 1; > + int (*socks)[NUM_PORTS]; > > ASSERT(!c->no_udp); > + ASSERT(pif_is_socket(pif)) ...this doesn't build. If I add the missing semicolon everything is fine. Should I? Worth double checking on your side? The series looks otherwise good to me. > > - if (!addr && c->ifi4 && c->ifi6 && !ns) { > + if (pif == PIF_HOST) > + socks = udp_splice_init; > + else > + socks = udp_splice_ns; > + > + if (!addr && c->ifi4 && c->ifi6 && pif == PIF_HOST) { > int s; > > /* Attempt to get a dual stack socket */ > s = pif_sock_l4(c, EPOLL_TYPE_UDP_LISTEN, PIF_HOST, > NULL, ifname, port, uref.u32); > - udp_splice_init[V4][port] = s < 0 ? -1 : s; > - udp_splice_init[V6][port] = s < 0 ? -1 : s; > + socks[V4][port] = s < 0 ? -1 : s; > + socks[V6][port] = s < 0 ? -1 : s; > if (IN_INTERVAL(0, FD_REF_MAX, s)) > return 0; > } > > if ((!addr || inany_v4(addr)) && c->ifi4) { > - if (!ns) { > - r4 = pif_sock_l4(c, EPOLL_TYPE_UDP_LISTEN, PIF_HOST, > - addr ? addr : &inany_any4, ifname, > - port, uref.u32); > + const union inany_addr *a = addr ? > + addr : &inany_any4; > > - udp_splice_init[V4][port] = r4 < 0 ? -1 : r4; > - } else { > - r4 = pif_sock_l4(c, EPOLL_TYPE_UDP_LISTEN, PIF_SPLICE, > - &inany_loopback4, ifname, > - port, uref.u32); > - udp_splice_ns[V4][port] = r4 < 0 ? -1 : r4; > - } > + if (pif == PIF_SPLICE) > + a = &inany_loopback4; > + > + r4 = pif_sock_l4(c, EPOLL_TYPE_UDP_LISTEN, pif, a, ifname, > + port, uref.u32); > + > + socks[V4][port] = r4 < 0 ? -1 : r4; > } > > if ((!addr || !inany_v4(addr)) && c->ifi6) { > - if (!ns) { > - r6 = pif_sock_l4(c, EPOLL_TYPE_UDP_LISTEN, PIF_HOST, > - addr ? addr : &inany_any6, ifname, > - port, uref.u32); > + const union inany_addr *a = addr ? > + addr : &inany_any6; > > - udp_splice_init[V6][port] = r6 < 0 ? -1 : r6; > - } else { > - r6 = pif_sock_l4(c, EPOLL_TYPE_UDP_LISTEN, PIF_SPLICE, > - &inany_loopback6, ifname, > - port, uref.u32); > - udp_splice_ns[V6][port] = r6 < 0 ? -1 : r6; > - } > + if (pif == PIF_SPLICE) > + a = &inany_loopback6; > + > + r6 = pif_sock_l4(c, EPOLL_TYPE_UDP_LISTEN, pif, a, ifname, > + port, uref.u32); > + > + socks[V6][port] = r6 < 0 ? -1 : r6; > } > > if (IN_INTERVAL(0, FD_REF_MAX, r4) || IN_INTERVAL(0, FD_REF_MAX, r6)) > @@ -1216,7 +1220,8 @@ static void udp_port_rebind(struct ctx *c, bool outbound) > > if ((c->ifi4 && socks[V4][port] == -1) || > (c->ifi6 && socks[V6][port] == -1)) > - udp_sock_init(c, outbound, NULL, NULL, port); > + udp_sock_init(c, outbound ? PIF_SPLICE : PIF_HOST, > + NULL, NULL, port); > } > } > > diff --git a/udp.h b/udp.h > index 8f8531ad..f78dc528 100644 > --- a/udp.h > +++ b/udp.h > @@ -17,8 +17,9 @@ int udp_tap_handler(const struct ctx *c, uint8_t pif, > sa_family_t af, const void *saddr, const void *daddr, > uint8_t ttl, const struct pool *p, int idx, > const struct timespec *now); > -int udp_sock_init(const struct ctx *c, int ns, const union inany_addr *addr, > - const char *ifname, in_port_t port); > +int udp_sock_init(const struct ctx *c, uint8_t pif, > + const union inany_addr *addr, const char *ifname, > + in_port_t port); > int udp_init(struct ctx *c); > 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); -- Stefano