On Wed, 2023-01-18 at 20:52 +0300, Sergei Antonov wrote: > Commands "ping6" and "tftpboot ... -ipv6" did not work on ARM because > machine code expects 4-byte alignment and some structures from net6.h > are not aligned in memory. > > Fix by adding __packed, since it is already used in this file. > > Signed-off-by: Sergei Antonov <[email protected]> > --- > include/net6.h | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/include/net6.h b/include/net6.h > index 9b3de028e6dc..2d7c5a096046 100644 > --- a/include/net6.h > +++ b/include/net6.h > @@ -24,7 +24,7 @@ struct in6_addr { > #define s6_addr in6_u.u6_addr8 > #define s6_addr16 in6_u.u6_addr16 > #define s6_addr32 in6_u.u6_addr32 > -}; > +} __packed; > > #define IN6ADDRSZ sizeof(struct in6_addr) > #define INETHADDRSZ sizeof(net_ethaddr) > @@ -62,7 +62,7 @@ struct ip6_hdr { > u8 hop_limit; > struct in6_addr saddr; > struct in6_addr daddr; > -}; > +} __packed; > #define IP6_HDR_SIZE (sizeof(struct ip6_hdr)) > > /* struct udp_hdr - User Datagram Protocol header */ > @@ -164,7 +164,7 @@ struct icmp6hdr { > #define icmp6_addrconf_managed icmp6_dataun.u_nd_ra.managed > #define icmp6_addrconf_other icmp6_dataun.u_nd_ra.other > #define icmp6_rt_lifetime icmp6_dataun.u_nd_ra.rt_lifetime > -}; > +} __packed; > > extern struct in6_addr const net_null_addr_ip6; /* NULL IPv6 > address */ > extern struct in6_addr net_gateway6; /* Our gateways IPv6 address > */ > -- > 2.34.1 > Hello, Sergei!
I didn't get you a little bit. You mean holes between fields of structures or alignment of the beginning? Frankly speaking I always thought that in that kind of structure like below it is not necessary. To be honest I disassembled the same code on arm and there were no holes. There is no "pack" attribute in linux too. https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/in6.h#L33 May be it could be other kind of error? union { u8 u6_addr8[16]; __be16 u6_addr16[8]; __be32 u6_addr32[4]; }; If you don't mind I add Ramon and Simon...

