> We(Linux IPv6 Group in Japan) found the portability problem that
> sin6_scope_id member is missing in Linux kernel.
> RFC2553 says in section 2.4 that follow
Linux does not follow this RFC. It complies to previous RFC.
> In case that the destination of outgoing packets is an
> IPv6 global address, kernel may select an outgoing interface as routing
> table. But in case of a link-local address, how can I select the interface
> for outgoing packets without sin6_scope_id ?
Certainly, it is IPV6_PKTINFO.
> Of course, I know the method of using SO_BINDTODEVICE,
Or this one.
> In IPv4 environment, there are few applications which have to select an
> outgoing interface.
IPv4 has the same problems as IPv6 does.
After thinking a bit, you will understand that IPv4 has both link local
and site local and all the kinds of addresses. The only difference of IPv6
is returning to brain-dead "classful" addressing, which was rejected
in IPv4 years ago.
> But IPv6, we can select one of addresses from three address types, global,
> site-local and link-local. So it is not rare case for us to specify
> an outgoing interface.
site-local addresses have no differences of global scope at all.
> Do you have any plan to add sin6_scope_id in in6.h ?
No. I really have plan to resist to this silly idea until the last
cartridge 8)8)8) And to accept the defeat 8)
Yes, I do think that this idea is deathly broken.
Application must not refer to this field and then they will be
not only portable, but also free of ambiguity.
> BTW, if we add sin6_scope_id into **ONLY LINUX KERNEL**
> or **ONLY LIBC HEADER FILE**, we encounter the problem of
> inconsistency between kernel and libc structure.
Even not commented. I do not understand at all, how struct
definitions may be got from different sources.
> If you aren't interested in the sockaddr_in6 problem,
> we would like take any solution to the problem.