Add IPV6_FREEBIND from Linux 4.15.
[glibc.git] / socket / sa_len.c
blob1efc1baeb54e260e69c85780ffa7de3d250b4b65
1 /* Helper for SA_LEN macro.
2 Copyright (C) 2013-2018 Free Software Foundation, Inc.
3 This file is part of the GNU C Library.
5 The GNU C Library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
10 The GNU C Library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Lesser General Public License for more details.
15 You should have received a copy of the GNU Lesser General Public
16 License along with the GNU C Library; if not, see
17 <http://www.gnu.org/licenses/>. */
19 #include <sys/socket.h>
21 /* If _HAVE_SA_LEN is defined, then SA_LEN just uses sockaddr.sa_len
22 and there is no need for a helper function. */
24 #ifndef _HAVE_SA_LEN
26 /* All configurations have at least these two headers
27 and their associated address families. */
29 # include <netinet/in.h>
30 # include <sys/un.h>
32 /* More-specific sa_len.c files #define these various HAVE_*_H
33 macros and then #include this file. */
35 # ifdef HAVE_NETASH_ASH_H
36 # include <netash/ash.h>
37 # endif
38 # ifdef HAVE_NETATALK_AT_H
39 # include <netatalk/at.h>
40 # endif
41 # ifdef HAVE_NETAX25_AX25_H
42 # include <netax25/ax25.h>
43 # endif
44 # ifdef HAVE_NETECONET_EC_H
45 # include <neteconet/ec.h>
46 # endif
47 # ifdef HAVE_NETIPX_IPX_H
48 # include <netipx/ipx.h>
49 # endif
50 # ifdef HAVE_NETPACKET_PACKET_H
51 # include <netpacket/packet.h>
52 # endif
53 # ifdef HAVE_NETROSE_ROSE_H
54 # include <netrose/rose.h>
55 # endif
56 # ifdef HAVE_NETIUCV_IUCV_H
57 # include <netiucv/iucv.h>
58 # endif
60 int
61 __libc_sa_len (sa_family_t af)
63 switch (af)
65 # ifdef HAVE_NETATALK_AT_H
66 case AF_APPLETALK:
67 return sizeof (struct sockaddr_at);
68 # endif
69 # ifdef HAVE_NETASH_ASH_H
70 case AF_ASH:
71 return sizeof (struct sockaddr_ash);
72 # endif
73 # ifdef HAVE_NETAX25_AX25_H
74 case AF_AX25:
75 return sizeof (struct sockaddr_ax25);
76 # endif
77 # ifdef HAVE_NETECONET_EC_H
78 case AF_ECONET:
79 return sizeof (struct sockaddr_ec);
80 # endif
81 case AF_INET:
82 return sizeof (struct sockaddr_in);
83 case AF_INET6:
84 return sizeof (struct sockaddr_in6);
85 # ifdef HAVE_NETIPX_IPX_H
86 case AF_IPX:
87 return sizeof (struct sockaddr_ipx);
88 # endif
89 # ifdef HAVE_NETIUCV_IUCV_H
90 case AF_IUCV:
91 return sizeof (struct sockaddr_iucv);
92 # endif
93 case AF_LOCAL:
94 return sizeof (struct sockaddr_un);
95 # ifdef HAVE_NETPACKET_PACKET_H
96 case AF_PACKET:
97 return sizeof (struct sockaddr_ll);
98 # endif
99 # ifdef HAVE_NETROSE_ROSE_H
100 case AF_ROSE:
101 return sizeof (struct sockaddr_rose);
102 # endif
104 return 0;
106 libc_hidden_def (__libc_sa_len)
108 #endif /* Not _HAVE_SA_LEN. */