Robin Andersson
Robin Andersson

Reputation: 5390

Why is in_addr6 not defined in netinet in Ubuntu 18.04.1?

I am currently building a cross-platform library in C that works with IP-addresses. So I thought that I could use the types in_addr and in_addr6 to represent the values since it looked like they would be quite portable.

But it seems like the in_addr6 struct is not defined in <netinet/in.h> in my installation of Ubuntu 18.04.1 (Windows Subsystem for Linux).

I get no results when I search the headers for in_addr6 the following way:

robin@ROBIN-PC:/usr/include/netinet$ grep -rnw '/usr/include/netinet' -e 'in_addr6'

If I search for in_addr I get multiple results:

robin@ROBIN-PC:/usr/include/netinet$ grep -rnw '/usr/include/netinet' -e 'in_addr'
/usr/include/netinet/if_ether.h:90:     /* struct in_addr *ipaddr; */ \
/usr/include/netinet/igmp.h:70:  struct in_addr igmp_group;     /* group address */
/usr/include/netinet/in.h:31:struct in_addr
/usr/include/netinet/in.h:241:    struct in_addr sin_addr;              /* Internet address.  */
/usr/include/netinet/in.h:247:                     sizeof (struct in_addr)];
/usr/include/netinet/in.h:267:    struct in_addr imr_multiaddr;
/usr/include/netinet/in.h:270:    struct in_addr imr_interface;
/usr/include/netinet/in.h:276:    struct in_addr imr_multiaddr;
/usr/include/netinet/in.h:279:    struct in_addr imr_interface;
/usr/include/netinet/in.h:282:    struct in_addr imr_sourceaddr;
/usr/include/netinet/in.h:326:    struct in_addr imsf_multiaddr;
/usr/include/netinet/in.h:329:    struct in_addr imsf_interface;
/usr/include/netinet/in.h:337:    struct in_addr imsf_slist[1];
/usr/include/netinet/in.h:341:                            - sizeof (struct in_addr)                   \
/usr/include/netinet/in.h:342:                            + (numsrc) * sizeof (struct in_addr))
/usr/include/netinet/in.h:602:extern int getipv4sourcefilter (int __s, struct in_addr __interface_addr,
/usr/include/netinet/in.h:603:                          struct in_addr __group, uint32_t *__fmode,
/usr/include/netinet/in.h:604:                          uint32_t *__numsrc, struct in_addr *__slist)
/usr/include/netinet/in.h:608:extern int setipv4sourcefilter (int __s, struct in_addr __interface_addr,
/usr/include/netinet/in.h:609:                          struct in_addr __group, uint32_t __fmode,
/usr/include/netinet/in.h:611:                          const struct in_addr *__slist)
/usr/include/netinet/ip.h:128:    struct in_addr ip_src, ip_dst;        /* source and dest address */
/usr/include/netinet/ip_icmp.h:145:    struct in_addr ih_gwaddr;        /* gateway address */

This raises some questions for me:

Upvotes: 1

Views: 699

Answers (1)

Robin Andersson
Robin Andersson

Reputation: 5390

The struct in_addr6 is specific to Windows. The struct in6_addr is available in Windows, Linux and macOS and should be used for portable libraries.

Upvotes: 2

Related Questions