public inbox for passt-dev@passt.top
 help / color / mirror / code / Atom feed
From: David Gibson <david@gibson.dropbear.id.au>
To: Anshu Kumari <anskuma@redhat.com>
Cc: sbrivio@redhat.com, passt-dev@passt.top, lvivier@redhat.com,
	jmaloy@redhat.com
Subject: Re: [PATCH v5 6/7] dhcp: Add RFC 3396 option splitting for concatenation-requiring options
Date: Mon, 27 Jul 2026 13:00:28 +1000	[thread overview]
Message-ID: <ambJu6XF3T9dEIQ9@zatzit> (raw)
In-Reply-To: <CADJNnVJg8iJ_RuHbC=uAODaoDdtFC4GvLJGOqv=afyiHZMxvXg@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 4259 bytes --]

On Mon, Jul 20, 2026 at 02:44:34PM +0530, Anshu Kumari wrote:
> On Mon, Jul 20, 2026 at 9:54 AM David Gibson <david@gibson.dropbear.id.au>
> wrote:
> 
> > On Fri, Jul 17, 2026 at 11:26:43PM +0530, Anshu Kumari wrote:
> > > Implement option splitting per RFC 3396 for options that may exceed
> > > 255 bytes.  A new DHCP_OPT_STR_CONCAT type marks concatenation-
> > > requiring options (currently option 81, Client FQDN per RFC 4702).
> > >
> > > The opts[].s buffer is resized from 255 to 496 bytes to hold the
> > > maximum data that can be split across the options field, file field,
> > > and sname field.
> > >
> > > When a concatenation-requiring option does not fit as a single option
> > > in any field, fill() splits it across fields in RFC 3396 order:
> > > options field first, then file, then sname.
> > >
> > > Link: https://bugs.passt.top/show_bug.cgi?id=192
> > > Signed-off-by: Anshu Kumari <anskuma@redhat.com>
> > > ---
> > > v5:
> > >   - New patch: implement option splitting per RFC 3396 for options
> > exceeding 255 bytes
> > >   - Add DHCP_OPT_STR_CONCAT type, is_concat_opt(), fill_split() helpers
> > >   - Resize opts[].s from 255 to OPT_CONCAT_MAX (496) bytes
> > >   - Add /* fallthrough */ between DHCP_OPT_STR and DHCP_OPT_STR_CONCAT
> > case
> > >
> > > ---
> > >  dhcp.c | 109 +++++++++++++++++++++++++++++++++++++++++++++++++++++++--
> > >  1 file changed, 106 insertions(+), 3 deletions(-)
> > >
> > > diff --git a/dhcp.c b/dhcp.c
> > > index cc910ee..6bebb5f 100644
> > > --- a/dhcp.c
> > > +++ b/dhcp.c
> > > @@ -34,6 +34,11 @@
> > >  #include "log.h"
> > >  #include "dhcp.h"
> > >
> > > +/* RFC 3396: maximum option data that can be split across options field,
> > > + * file field, and sname field (minus code+length overhead per portion).
> > > + */
> > > +#define OPT_CONCAT_MAX       496
> > > +
> > >  /**
> > >   * enum opt_state - DHCP option state
> > >   * @OPT_UNSET:               Option not configured
> > > @@ -58,7 +63,7 @@ enum opt_state {
> > >  struct opt {
> > >       int sent;
> > >       int slen;
> > > -     uint8_t s[255];
> > > +     uint8_t s[OPT_CONCAT_MAX];
> > >       int clen;
> > >       uint8_t c[255];
> > >       enum opt_state state;
> > > @@ -159,6 +164,7 @@ struct msg {
> > >   * @DHCP_OPT_UINT16: Unsigned 16-bit integer
> > >   * @DHCP_OPT_UINT32: Unsigned 32-bit integer
> > >   * @DHCP_OPT_INT32:  Signed 32-bit integer
> > > + * @DHCP_OPT_STR_CONCAT:Concatenation-requiring string (RFC 3396)
> >
> > It's not entirely clear to me that encoding this in the opt_type enum
> > makes sense.  Generally the dhcp_opt_type is saying how the option is
> > encoded as a string for the user.  This is saying how it's encoded
> > within the DHCP packet itself, which seems qualitatively different
> > information.
> >
> > Since we don't limit on the string length that user can set via
> --dhcp-opt, DHCP_OPT_STR rejects
> anything over 255 bytes but with STR_CONCAT longer input can be parsed.
> 
> is_concat_opt() checks dhcp_opt_types[] for STR_CONCAT to decide which
> options need splitting in fill().
> I think these two concerns are coupled: an option that accepts long strings
> from the CLI
> is exactly the same option that needs splitting on the wire.

Ah, ok.  I see the case for including this in the type now.  However,
I still think it's not the best approach on balance.  Remember that
unless there's only one option, the practical limit on the length of
these options will be shorter - 256 is just an upper bound.  We can
calculate different upper bounds depending on whether it's a concat
option or not, but I wouldn't consider it exactly part of the type.

If we store the concat bit in a separate field of the options table,
we can still apply that different upper bound calculation.  Plus, we
can also use it for things of other types without introducing yet more
type variants.  Similarly we can use it for fqdn, or anything else we
don't have a parsing type for at present.

-- 
David Gibson (he or they)	| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you, not the other way
				| around.
http://www.ozlabs.org/~dgibson

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

  reply	other threads:[~2026-07-27  3:34 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-17 17:56 [PATCH v5 0/7] Add --dhcp-boot and --dhcp-opt options Anshu Kumari
2026-07-17 17:56 ` [PATCH v5 1/7] dhcp: Refactor fill_one() to operate on a generic buffer Anshu Kumari
2026-07-20  1:18   ` David Gibson
2026-07-17 17:56 ` [PATCH v5 2/7] dhcp: Add option state management with enum opt_state Anshu Kumari
2026-07-20  1:36   ` David Gibson
2026-07-27  6:18   ` Stefano Brivio
2026-07-17 17:56 ` [PATCH v5 3/7] dhcp: Add option overload Anshu Kumari
2026-07-20  2:03   ` David Gibson
2026-07-27  6:19   ` Stefano Brivio
2026-07-17 17:56 ` [PATCH v5 4/7] dhcp: Add --dhcp-opt with option table and value parser Anshu Kumari
2026-07-20  3:58   ` David Gibson
2026-07-27  6:19   ` Stefano Brivio
2026-07-17 17:56 ` [PATCH v5 5/7] dhcp: Add --dhcp-boot command-line option Anshu Kumari
2026-07-20  4:06   ` David Gibson
2026-07-17 17:56 ` [PATCH v5 6/7] dhcp: Add RFC 3396 option splitting for concatenation-requiring options Anshu Kumari
2026-07-20  4:21   ` David Gibson
2026-07-20  9:14     ` Anshu Kumari
2026-07-27  3:00       ` David Gibson [this message]
2026-07-27  6:19   ` Stefano Brivio
2026-07-17 17:56 ` [PATCH v5 7/7] dhcp: Handle FQDN option with RFC 3396 concatenation Anshu Kumari
2026-07-20  4:23   ` David Gibson
2026-07-20  7:38     ` Anshu Kumari
2026-07-21  0:34       ` David Gibson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ambJu6XF3T9dEIQ9@zatzit \
    --to=david@gibson.dropbear.id.au \
    --cc=anskuma@redhat.com \
    --cc=jmaloy@redhat.com \
    --cc=lvivier@redhat.com \
    --cc=passt-dev@passt.top \
    --cc=sbrivio@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://passt.top/passt

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for IMAP folder(s).