| raw e-mail | index | archive | help
Thanks! I was testing a similar change, but I like yours better... though maybe we should just make it visible when __BSD_VISIBLE is true.... I'll have to look closely at what Linux does here... I think they have it always visible, or at least musl does that (glibc is harder to track down due to the many layers of indirection). Warner --000000000000fe240c061707f464 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr"><div dir=3D"ltr"><br></div><br><div class=3D"gmail_quote">= <div dir=3D"ltr" class=3D"gmail_attr">On Fri, Apr 26, 2024 at 4:21=E2=80=AF= PM Mike Karels <<a href=3D"mailto:mike@karels.net">mike@karels.net</a>&g= t; wrote:<br></div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0p= x 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On 26 = Apr 2024, at 15:49, Mike Karels wrote:<br> <br> > On 26 Apr 2024, at 15:01, Warner Losh wrote:<br> ><br> >> This has to be a FAQ<br> >><br> >> I'm porting a program from Linux, I often see an error like:<b= r> >> ./test/mock-ifaddrs.c:95:19: error: no member named 's6_addr32= ' in 'struct<br> >> in6_addr'<br> >>=C2=A0 =C2=A0 95 |=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0ipv6->sin6_addr.s6_addr32[3] =3D 0;<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0~~~~~~~~~~~~~~~ ^<br> >> but yet, we kinda define them, but only for the kernel and boot lo= ader:<br> >> /*<br> >>=C2=A0 * IPv6 address<br> >>=C2=A0 */<br> >> struct in6_addr {<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0union {<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0uint8= _t=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0__u6_addr8[16];<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0uint1= 6_t=C2=A0 =C2=A0 =C2=A0 =C2=A0 __u6_addr16[8];<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0uint3= 2_t=C2=A0 =C2=A0 =C2=A0 =C2=A0 __u6_addr32[4];<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0} __u6_addr;=C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 /* 128-bit IP6 address */<= br> >> };<br> >><br> >> #define s6_addr=C2=A0 =C2=A0__u6_addr.__u6_addr8<br> >> #if defined(_KERNEL) || defined(_STANDALONE) /* XXX nonstandard */= <br> >> #define s6_addr8=C2=A0 __u6_addr.__u6_addr8<br> >> #define s6_addr16 __u6_addr.__u6_addr16<br> >> #define s6_addr32 __u6_addr.__u6_addr32<br> >> #endif<br> >><br> >> I'm wondering if anybody why it's like that? git blame sug= gests we imported<br> >> that from kame, with<br> >> only tweaks by people that are now deceased*.*<br> >><br> >> Why not just expose them?<br> ><br> > Looks like only s6_addr is specified in the RFCs (2553 and 3493).=C2= =A0 Oddly,<br> > though, the RFCs give an example implementation using that union with<= br> > different element names (like _S6_u8), and show the one #define.<br> > Similarly, POSIX specifies only s6_addr, but it allows other members<b= r> > of the structure, so I don't see a problem with exposing them all = even<br> > in a POSIX environment.<br> ><br> > I would have no objection to exposing all four definitions, especially= <br> > if Linux apps use them.<br> <br> I put the change, along with an explanatory comment, in<br> <a href=3D"https://reviews.freebsd.org/D44979" rel=3D"noreferrer" target=3D= "_blank">https://reviews.freebsd.org/D44979</a>.=C2=A0 Comments welcome.<br= ></blockquote><div><br></div><div>Thanks! I was testing a similar change, b= ut I like yours better... though maybe</div><div>we should just make it vis= ible when __BSD_VISIBLE is true.... I'll have to look</div><div>closely= at what Linux does here... I think they have it always visible, or at leas= t</div><div>musl does that (glibc is harder to track down due to the many l= ayers of indirection).</div><div><br></div><div>Warner<br></div></div></div= > --000000000000fe240c061707f464--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?>