FRET-qemu/linux-user
Neng Chen 22bf4ee903 linux-user: Add support for setsockopt() options IPV6_<ADD|DROP>_MEMBERSHIP
Add support for the option IPV6_<ADD|DROP>_MEMBERSHIP of the syscall
setsockopt(). This option controls membership in multicast groups.
Argument is a pointer to a struct ipv6_mreq.

The glibc <netinet/in.h> header defines the ipv6_mreq structure,
which includes the following members:

  struct in6_addr  ipv6mr_multiaddr;
  unsigned int     ipv6mr_interface;

Whereas the kernel in its <linux/in6.h> header defines following
members of the same structure:

  struct in6_addr  ipv6mr_multiaddr;
  int              ipv6mr_ifindex;

POSIX defines ipv6mr_interface [1].

__UAPI_DEF_IVP6_MREQ appears in kernel headers with v3.12:

  cfd280c91253 net: sync some IP headers with glibc

Without __UAPI_DEF_IVP6_MREQ, kernel defines ipv6mr_ifindex, and
this is explained in cfd280c91253:

  "If you include the kernel headers first you get those,
  and if you include the glibc headers first you get those,
  and the following patch arranges a coordination and
  synchronization between the two."

So before 3.12, a program can't include both <netinet/in.h> and
<linux/in6.h>.

In linux-user/syscall.c, we only include <netinet/in.h> (glibc) and
not <linux/in6.h> (kernel headers), so ipv6mr_interface is the one
to use.

[1] http://pubs.opengroup.org/onlinepubs/009695399/basedefs/netinet/in.h.html

Signed-off-by: Neng Chen <nchen@wavecomp.com>
Signed-off-by: Aleksandar Markovic <amarkovic@wavecomp.com>
Reviewed-by: Laurent Vivier <laurent@vivier.eu>
Message-Id: <1560953834-29584-2-git-send-email-aleksandar.markovic@rt-rk.com>
Signed-off-by: Laurent Vivier <laurent@vivier.eu>
2019-06-24 23:04:05 +02:00
..
2019-06-12 13:20:21 +02:00
2019-06-12 13:20:21 +02:00
2019-06-12 13:20:21 +02:00
2019-06-12 13:20:21 +02:00
2019-06-12 13:20:21 +02:00
2019-06-12 13:20:21 +02:00
2019-06-12 13:20:21 +02:00
2019-06-12 13:20:21 +02:00
2019-06-12 13:20:21 +02:00
2019-06-12 13:20:21 +02:00
2019-06-12 13:20:21 +02:00
2019-06-12 13:20:21 +02:00
2019-06-12 13:20:21 +02:00
2019-06-12 13:20:21 +02:00
2019-06-12 13:20:21 +02:00
2019-06-12 13:20:21 +02:00
2019-06-12 13:20:21 +02:00
2019-06-12 13:20:21 +02:00
2019-06-12 13:20:21 +02:00
2019-06-12 13:20:21 +02:00
2019-05-10 12:44:23 +02:00
2019-03-07 11:02:33 +01:00
2019-06-12 13:20:21 +02:00
2019-06-10 07:03:42 -07:00
2019-06-12 13:20:21 +02:00
2019-06-12 13:20:21 +02:00
2019-06-10 07:03:34 -07:00
2019-06-10 07:03:42 -07:00