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=IWksWWo1; 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 334E05A0BB9 for ; Thu, 13 Nov 2025 07:33:33 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1763015612; 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=Zi8noj9oiq9MSLT7GuWbsIK7gmbHd10Hu33/XOmmEeE=; b=IWksWWo1MmDUX5/yqNq8gU45HMHBNTXs4phIiYj4Sj27cvdY/2rnQWM+TKElxVquVk/ulj 2XboPyuKHnpg3hszZPw0AAOlUH/v4S7qm3GbEPabE+5kW9NyeaySM14W7gLy2hN4qe+U7I K5CJJh5TvxNqU1s9M/Wu9Z5Q4XgEfPM= Received: from mail-wr1-f70.google.com (mail-wr1-f70.google.com [209.85.221.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-151-cv1EgXJtPRKZGQd1g09UCg-1; Thu, 13 Nov 2025 01:33:30 -0500 X-MC-Unique: cv1EgXJtPRKZGQd1g09UCg-1 X-Mimecast-MFC-AGG-ID: cv1EgXJtPRKZGQd1g09UCg_1763015609 Received: by mail-wr1-f70.google.com with SMTP id ffacd0b85a97d-429c93a28ebso334823f8f.1 for ; Wed, 12 Nov 2025 22:33:30 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763015609; x=1763620409; h=content-transfer-encoding:mime-version:organization:references :in-reply-to:message-id:subject:cc:to:from:date:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=Zi8noj9oiq9MSLT7GuWbsIK7gmbHd10Hu33/XOmmEeE=; b=O7FZLxxVJOJyYBzPLUDY6PRQ6Yl6mz3oY0xV6V3vu+ZZDMYQhFtmuEnpXPiDdmQNeW OjBTTvcIBTvDPxnCNoiES3Hc12U0cTPEiwat5d0Llsu7Xjp56LccVuv+0MNvQYv688e2 hiazfia+gkC7MY9ogqmUUQPGwnX62N8A/ZnVrm4lKwStoXKHa3whYFW3bSPuBN0rrjGy dToUPEyKc7+tSDvP6nh5GC2cLVoFF7y0XvJ1HHLDJ2pG3VG1MVad+FwWg+7fB7MxtyIf 8GtcRQyZHdyB3bSKlKT+H7hR/3ChY2RKPvtvSK5lcDWjgh9YdFrtGClnlefZlV06J1eM fmRg== X-Gm-Message-State: AOJu0YxvPfYF62e9FF9V2qYB07iAKuH/xy859y0BouyjEhAK4YtIUJxb CD81ATGwKHuSfy3N4Whr3OD7hqb/nETFVmswyk0iVbJwXx0joCgthzt0niKRB+iNQllPllnPetK JRLJfNhuKzuuiSqJhMTewbpF9wVn+RipmrPkZw+GotsTgX4ctwbchAWisnOoFtw== X-Gm-Gg: ASbGncvM4SKjwS8ArMHQhE76TfvKa8+P3d9KK0gPim+K8TP6giKwad7GWO2TC+Ncx/N gD09kMBhPEey8pNF7rSozcPbBussj8GVTA4MhEHKGWOrdfQIoyh++uGa5KfkFbYpwlfD1+I3fjN 1VfDFgc6ajKzJ0Bb/IPR1omgVeX6Oz9vNMXtDiWJQ2q/TDlSk+kkCRQzKNZuDrxWX6LfHllt2Bn 6oD1BALivV8/xHyOYx+ghiA4xUY5u5Gz8jYkHinzUdw2MRfrUCrPuaHAnzac4a8z9fsShuS4D9e 0uziudQZR+wXMPFgtboVxeiv0Uce5g/nppHtH5ErB/di/SmRizofCtVZRLnZneBoy7q76Yi6R8C bD3ayCKoltxiE4nxvuQJNpShMqWI= X-Received: by 2002:a05:6000:2082:b0:42b:2f3d:2967 with SMTP id ffacd0b85a97d-42b4bdd3d54mr4751341f8f.51.1763015608890; Wed, 12 Nov 2025 22:33:28 -0800 (PST) X-Google-Smtp-Source: AGHT+IFUw8ki45y2c+k1WFB9cOsdobXYghzrcRJx5aD4XjDuElQVudf1kjDaEvGjdiuXqLKnwxhX6g== X-Received: by 2002:a05:6000:2082:b0:42b:2f3d:2967 with SMTP id ffacd0b85a97d-42b4bdd3d54mr4751318f8f.51.1763015608335; Wed, 12 Nov 2025 22:33:28 -0800 (PST) Received: from maya.myfinge.rs (ifcgrfdd.trafficplex.cloud. [176.103.220.4]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-42b53e845bdsm1869930f8f.12.2025.11.12.22.33.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Nov 2025 22:33:27 -0800 (PST) Date: Thu, 13 Nov 2025 07:33:26 +0100 From: Stefano Brivio To: David Gibson Subject: Re: [PATCH v3 4/8] udp: Unify some more inbound/outbound parts of udp_sock_init() Message-ID: <20251113073326.573bfe51@elisabeth> In-Reply-To: <20251029062628.1647051-5-david@gibson.dropbear.id.au> References: <20251029062628.1647051-1-david@gibson.dropbear.id.au> <20251029062628.1647051-5-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: p6vwbxGt-hcwasITpnNJ4XxmaHg_72iUelIFY1w2oJI_1763015609 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Message-ID-Hash: 2U27MISEDVTCRKFB3ZFA32SWMT2DG7PC X-Message-ID-Hash: 2U27MISEDVTCRKFB3ZFA32SWMT2DG7PC 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: On Wed, 29 Oct 2025 17:26:24 +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 8f96495d..f3237436 100644 > --- a/udp.c > +++ b/udp.c > @@ -1091,64 +1091,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)); > > - 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; Nit: this fits on a single line. > > - 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; ...same here. > > - 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)) > @@ -1214,7 +1218,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