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=CQFHd0Ji; dkim-atps=neutral Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by passt.top (Postfix) with ESMTPS id 8AAD45A0265 for ; Wed, 06 May 2026 10:50:01 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1778057400; 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=vVN3gstLbe11ERrXEs0DzPhz31amY7IE5G5P9FaEnx4=; b=CQFHd0JiEZWBfG/AmtSy1/PSo6nPgu5xuG/d3WG1Pkvi07jj/edaqiTiXLG0xhvXEz+nh/ i05ErY77dG9wMMpgxdWNeqzDrGXvIsCFc/YJC5MXd9dtodmuLs0zCfESqbaArsvQyHoztl FlTy9z/Z+E5F9BwfqEoRSZbX5jdYyhc= 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-64-b4HO5DQuPfmUA3hHntLmng-1; Wed, 06 May 2026 04:49:59 -0400 X-MC-Unique: b4HO5DQuPfmUA3hHntLmng-1 X-Mimecast-MFC-AGG-ID: b4HO5DQuPfmUA3hHntLmng_1778057398 Received: by mail-wr1-f70.google.com with SMTP id ffacd0b85a97d-44bf1ac8893so3860212f8f.0 for ; Wed, 06 May 2026 01:49:59 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778057398; x=1778662198; h=date:content-transfer-encoding:mime-version:organization:references :in-reply-to:message-id:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=vVN3gstLbe11ERrXEs0DzPhz31amY7IE5G5P9FaEnx4=; b=qDGyBP+fGqe5Kg3tEAMOJbjeT0LlrM/cw87d6kuS+Uq6LAm7tg/C54d3K4HmS1ZcvE 8G4oFnlnCzCAXbXVb28rjYkF8NRdUy0UKPKQkU44sNWDCfdEj6mCalXywS6cEFTBrUGh XKzqRNXWTRyCSolHPwu0kMMgYjxlPXefvvJJ1tuRec9JWRnzd6nXR3PpEV+NJjJyx4SW qRWvQozC+AxIDTynPrYaMmdrIfoG7PLi1tXLGKR2KBGvdruBEbaYirUeC5Dhl1riuQiJ afJihhYBUvHITFa0c45q8t5OW3HxieE5cNdvW1gdteCj6OJ9/Xab6prUPTf+cez6Hp/3 ZsFQ== X-Gm-Message-State: AOJu0YzYNmF0lIiCmsjTF1nnWZuIg6FTUCccYmYTtbAKUtP61jrCrzoa udzrXwGhwZiWN7aeHY5q+Ou0JPy7JsN6sqhRZhmARfVHZuStZ92mOdvATQEVc04MtvCD7vDIy2a QM/ZxqRDSimfC8U5BRRchtXJoa/7cMyPwF/ZwM0oxOa1COVsu1FzlevntaF3Stw== X-Gm-Gg: AeBDieucyjVwq9skq1pUpymScBzTIHX+syf/EVV/rFXGYDrjPgzNX7ME5DW22K2B0hQ E7ezoRFiIHb/AiuXwo/fdvZslrxq/Qh/bvzeqpv2duC5OapvGz8I23iAEbUIKyG8NciWXnzTi/D r0jH2mHVkohebGSr5ZEQrjKOlj1XK85K1AxoXRplMPzC9PAEtLixFrPSOgxU4zJ1s0/ZbvTqgJX 7zz+24TId2PJvlqNr2losWRgJ5fZuanfCcNK58eNc0SSo7w4pbFYF2X3qPiZ3FdngsT+UOW79lP /2Qo6+rVRYmFwsdvaGjB4azrylTWahC9TqBz2XNrms2zDA+cRDo9mkoSw0PZUDMMxcs4wvvqxCL flXLZuTwJEq2FoxAz7rZuAgIExXp64aVXoALTsdvUncQ0FQPlA23Mh8C64N0Y X-Received: by 2002:a05:600c:47d3:b0:48d:c0a:3813 with SMTP id 5b1f17b1804b1-48e51e0bb62mr26855425e9.3.1778057397689; Wed, 06 May 2026 01:49:57 -0700 (PDT) X-Received: by 2002:a05:600c:47d3:b0:48d:c0a:3813 with SMTP id 5b1f17b1804b1-48e51e0bb62mr26854905e9.3.1778057397124; Wed, 06 May 2026 01:49:57 -0700 (PDT) Received: from maya.myfinge.rs (ifcgrfdd.trafficplex.cloud. [176.103.220.4]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48e530a68aesm16725115e9.1.2026.05.06.01.49.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 May 2026 01:49:56 -0700 (PDT) From: Stefano Brivio To: Laurent Vivier Subject: Re: [PATCH v8 17/19] conf, fwd: Allow switching to new rules received from pesto Message-ID: <20260506104955.51cdc602@elisabeth> In-Reply-To: <20260506103930.1b7023a6@elisabeth> References: <20260505234719.1437340-1-sbrivio@redhat.com> <20260505234719.1437340-18-sbrivio@redhat.com> <20260506103930.1b7023a6@elisabeth> Organization: Red Hat X-Mailer: Claws Mail 4.2.0 (GTK 3.24.49; x86_64-pc-linux-gnu) MIME-Version: 1.0 Date: Wed, 06 May 2026 10:49:55 +0200 (CEST) X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: aiG1DwE6Rd4dxShGq4nBSbj6VrwWg2BK-Z-awFXbEIY_1778057398 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Message-ID-Hash: 4CRTHWI6LOXEZJKCHMNNWNK2DRPRAHA5 X-Message-ID-Hash: 4CRTHWI6LOXEZJKCHMNNWNK2DRPRAHA5 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, Jon Maloy , 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: On Wed, 6 May 2026 10:39:30 +0200 Stefano Brivio wrote: > On Wed, 6 May 2026 10:12:21 +0200 > Laurent Vivier wrote: > > > On 5/6/26 01:47, Stefano Brivio wrote: > > > From: David Gibson > > > > > > We can now receive updates to the forwarding rules from the pesto client > > > and store them in a "pending" copy of the forwarding tables. Implement > > > switching to using the new rules. > > > > > > The logic is in a new fwd_listen_switch(). For now this closes all > > > listening sockets related to the old tables, swaps the active and pending > > > tables, then listens based on the new tables. In future we look to improve > > > this so that we don't temporarily stop listening on ports that both the > > > old and new tables specify. > > > > > > Signed-off-by: David Gibson > > > [sbrivio: In fwd_listen_switch(), use the destination size as argument > > > to memcpy(), instead of sizeof(tmp), as suggested by Laurent] > > > Signed-off-by: Stefano Brivio > > > --- > > > conf.c | 5 ++--- > > > fwd.c | 34 ++++++++++++++++++++++++++++++++++ > > > fwd.h | 1 + > > > 3 files changed, 37 insertions(+), 3 deletions(-) > > > > > > diff --git a/conf.c b/conf.c > > > index 76344da..3f48793 100644 > > > --- a/conf.c > > > +++ b/conf.c > > > @@ -2160,15 +2160,14 @@ void conf_handler(struct ctx *c, uint32_t events) > > > fwd_rules_dump(info, fwd->rules, fwd->count, > > > " ", ""); > > > } > > > + > > > + fwd_listen_switch(c); > > > } > > > > > > if (events & EPOLLHUP) { > > > debug("Configuration client hangup"); > > > - goto close; > > > } > > > > > > - return; > > > - > > > close: > > > conf_close(c); > > > > > > diff --git a/fwd.c b/fwd.c > > > index d93d2e5..0697435 100644 > > > --- a/fwd.c > > > +++ b/fwd.c > > > @@ -534,6 +534,40 @@ int fwd_listen_init(const struct ctx *c) > > > return 0; > > > } > > > > > > +/** > > > + * fwd_listen_switch() - Switch from current to pending rules table > > > + * @c: Execution context > > > + */ > > > +void fwd_listen_switch(struct ctx *c) > > > +{ > > > + struct fwd_table *tmp[PIF_NUM_TYPES]; > > > + unsigned i; > > > + > > > + /* Stop listening on the old tables */ > > > + for (i = 0; i < PIF_NUM_TYPES; i++) { > > > + struct fwd_table *fwd = c->fwd[i]; > > > + > > > + if (!fwd) > > > + continue; > > > + > > > + debug("Flushing %u old %s rules", fwd->count, pif_name(i)); > > > + fwd_listen_close(fwd); > > > + fwd->count = fwd->sock_count = 0; > > > + } > > > + > > > + /* Swap active and pending tables */ > > > + static_assert(sizeof(tmp) == sizeof(c->fwd) && > > > + sizeof(tmp) == sizeof(c->fwd_pending), > > > + "Temporary has wrong size"); > > > > At this point: > > > > c->fwd[PIF_HOST] = &fwd_in; > > c->fwd[PIF_SPLICE] = &fwd_out; > > > > c->fwd_pending[PIF_HOST] = &fwd_in_pending; > > c->fwd_pending[PIF_SPLICE] = &fwd_out_pending; > > > > > + memcpy(&tmp, (void *)c->fwd, sizeof(tmp)); > > > + memcpy((void *)c->fwd, (void *)c->fwd_pending, sizeof(c->fwd)); > > > + memcpy((void *)c->fwd_pending, &tmp, sizeof(c->fwd_pending)); > > > > At this point: > > > > c->fwd[PIF_HOST] = &fwd_in_pending; > > c->fwd[PIF_SPLICE] = &fwd_out_pending; > > > > c->fwd_pending[PIF_HOST] = &fwd_in; > > c->fwd_pending[PIF_SPLICE] = &fwd_out; > > Yeah, makes sense, I can change that in v9. > > > Perhaps it should be noted somewhere to avoid confusion in the future? > > What do you think should be noted exactly, and where? Can you show a > practical example of the change you're proposing? ...I'm leaving like it is in v9 to make sure I'm not misinterpreting you, and also because the current (v8) version is obviously correct and I also tested it fairly heavily by now. I'd suggest optimising this (and commenting as needed) in a separate patch later. -- Stefano