All of lore.kernel.org
 help / color / mirror / Atom feed
From: Justin Iurman <justin.iurman@uliege.be>
To: David Ahern <dsahern@gmail.com>
Cc: netdev@vger.kernel.org, davem@davemloft.net, kuba@kernel.org,
	yoshfuji@linux-ipv6.org, dsahern@kernel.org
Subject: Re: [PATCH net-next 1/2] ipv6: ioam: Add support for the ip6ip6 encapsulation
Date: Fri, 1 Oct 2021 13:38:44 +0200 (CEST)	[thread overview]
Message-ID: <625451834.109328801.1633088324880.JavaMail.zimbra@uliege.be> (raw)
In-Reply-To: <0ce98a52-e9fe-9b5c-68ca-f81c88e021ab@gmail.com>

>>>>  static const struct nla_policy ioam6_iptunnel_policy[IOAM6_IPTUNNEL_MAX + 1] = {
>>>> -	[IOAM6_IPTUNNEL_TRACE]	= NLA_POLICY_EXACT_LEN(sizeof(struct ioam6_trace_hdr)),
>>>> +	[IOAM6_IPTUNNEL_TRACE]	= NLA_POLICY_EXACT_LEN(sizeof(struct
>>>> ioam6_iptunnel_trace)),
>>>
>>> you can't do that. Once a kernel is released with a given UAPI, it can
>>> not be changed. You could go the other way and handle
>>>
>>> struct ioam6_iptunnel_trace {
>>> +	struct ioam6_trace_hdr trace;
>>> +	__u8 mode;
>>> +	struct in6_addr tundst;	/* unused for inline mode */
>>> +};
>> 
>> Makes sense. But I'm not sure what you mean by "go the other way". Should I
>> handle ioam6_iptunnel_trace as well, in addition to ioam6_trace_hdr, so that
>> the uapi is backward compatible?
> 
> by "the other way" I meant let ioam6_trace_hdr be the top element in the
> new ioam6_iptunnel_trace struct. If the IOAM6_IPTUNNEL_TRACE size ==
> ioam6_trace_hdr then you know it is the legacy argument vs sizeof
> ioam6_iptunnel_trace which is the new.

OK, I see. The problem is ioam6_trace_hdr must be the last entry because of its last field, which is "__u8 data[0]". But, anyway, I could still apply the same kind of logic with the size.

>>> Also, no gaps in uapi. Make sure all holes are stated; an anonymous
>>> entry is best.
>> 
>> Would something like this do the trick?
>> 
>> struct ioam6_iptunnel_trace {
>> 	struct ioam6_trace_hdr trace;
>> 	__u8 mode;
>> 	union { /* anonymous field only used by both the encap and auto modes */
>> 		struct in6_addr tundst;
>> 	};
>> };
> 
> By anonymous filling of the holes I meant something like:
> 
> struct ioam6_iptunnel_trace {
>	struct ioam6_trace_hdr trace;
>	__u8 mode;
>	__u8 :8;
>	__u16 :16;
> 
>	struct in6_addr tundst;
> };
> 
> Use pahole to check that struct for proper alignment of the entries as
> desired (4-byte or 8-byte aligned).

By reading your example, I'm not sure we're talking about the same thing. Actually, do you refer to the fact that the ioam6_trace_hdr field must be 8n-aligned? If so, I don't see any static way to do that (i.e., by adding anonymous fields as you did) since it depends on the size of the data field I mentioned above.  The size can either be 8n-aligned already, or 4n-aligned in which case we add a PadN (1 2 0 0) at the end of the data field.

  reply	other threads:[~2021-10-01 11:38 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-28 19:03 [PATCH net-next 0/2] Support for the ip6ip6 encapsulation of IOAM Justin Iurman
2021-09-28 19:03 ` [PATCH net-next 1/2] ipv6: ioam: Add support for the ip6ip6 encapsulation Justin Iurman
2021-09-30  3:26   ` David Ahern
2021-09-30 15:19     ` Justin Iurman
2021-09-30 18:20       ` David Ahern
2021-10-01 11:38         ` Justin Iurman [this message]
2021-10-01 14:06           ` David Ahern
2021-10-01 14:10             ` Justin Iurman
2021-09-28 19:03 ` [PATCH net-next 2/2] selftests: net: Test for the IOAM encapsulation with IPv6 Justin Iurman
2021-09-30  3:20 ` [PATCH net-next 0/2] Support for the ip6ip6 encapsulation of IOAM David Ahern
2021-09-30 12:32   ` Justin Iurman

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=625451834.109328801.1633088324880.JavaMail.zimbra@uliege.be \
    --to=justin.iurman@uliege.be \
    --cc=davem@davemloft.net \
    --cc=dsahern@gmail.com \
    --cc=dsahern@kernel.org \
    --cc=kuba@kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=yoshfuji@linux-ipv6.org \
    /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.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.