1/* Copyright (C) 1991-2001, 2003, 2004, 2006, 2007, 2008 2 Free Software Foundation, Inc. 3 This file is part of the GNU C Library. 4 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. 9 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. 14 15 You should have received a copy of the GNU Lesser General Public 16 License along with the GNU C Library; if not, write to the Free 17 Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 18 02111-1307 USA. */ 19 20#ifndef _NETINET_IN_H 21#define _NETINET_IN_H 1 22 23#include <features.h> 24#include <stdint.h> 25#include <sys/socket.h> 26#include <bits/types.h> 27 28 29__BEGIN_DECLS 30 31/* Standard well-defined IP protocols. */ 32enum 33 { 34 IPPROTO_IP = 0, /* Dummy protocol for TCP. */ 35#define IPPROTO_IP IPPROTO_IP 36 IPPROTO_HOPOPTS = 0, /* IPv6 Hop-by-Hop options. */ 37#define IPPROTO_HOPOPTS IPPROTO_HOPOPTS 38 IPPROTO_ICMP = 1, /* Internet Control Message Protocol. */ 39#define IPPROTO_ICMP IPPROTO_ICMP 40 IPPROTO_IGMP = 2, /* Internet Group Management Protocol. */ 41#define IPPROTO_IGMP IPPROTO_IGMP 42 IPPROTO_IPIP = 4, /* IPIP tunnels (older KA9Q tunnels use 94). */ 43#define IPPROTO_IPIP IPPROTO_IPIP 44 IPPROTO_TCP = 6, /* Transmission Control Protocol. */ 45#define IPPROTO_TCP IPPROTO_TCP 46 IPPROTO_EGP = 8, /* Exterior Gateway Protocol. */ 47#define IPPROTO_EGP IPPROTO_EGP 48 IPPROTO_PUP = 12, /* PUP protocol. */ 49#define IPPROTO_PUP IPPROTO_PUP 50 IPPROTO_UDP = 17, /* User Datagram Protocol. */ 51#define IPPROTO_UDP IPPROTO_UDP 52 IPPROTO_IDP = 22, /* XNS IDP protocol. */ 53#define IPPROTO_IDP IPPROTO_IDP 54 IPPROTO_TP = 29, /* SO Transport Protocol Class 4. */ 55#define IPPROTO_TP IPPROTO_TP 56 IPPROTO_DCCP = 33, /* Datagram Congestion Control Protocol. */ 57#define IPPROTO_DCCP IPPROTO_DCCP 58 IPPROTO_IPV6 = 41, /* IPv6 header. */ 59#define IPPROTO_IPV6 IPPROTO_IPV6 60 IPPROTO_ROUTING = 43, /* IPv6 routing header. */ 61#define IPPROTO_ROUTING IPPROTO_ROUTING 62 IPPROTO_FRAGMENT = 44, /* IPv6 fragmentation header. */ 63#define IPPROTO_FRAGMENT IPPROTO_FRAGMENT 64 IPPROTO_RSVP = 46, /* Reservation Protocol. */ 65#define IPPROTO_RSVP IPPROTO_RSVP 66 IPPROTO_GRE = 47, /* General Routing Encapsulation. */ 67#define IPPROTO_GRE IPPROTO_GRE 68 IPPROTO_ESP = 50, /* encapsulating security payload. */ 69#define IPPROTO_ESP IPPROTO_ESP 70 IPPROTO_AH = 51, /* authentication header. */ 71#define IPPROTO_AH IPPROTO_AH 72 IPPROTO_ICMPV6 = 58, /* ICMPv6. */ 73#define IPPROTO_ICMPV6 IPPROTO_ICMPV6 74 IPPROTO_NONE = 59, /* IPv6 no next header. */ 75#define IPPROTO_NONE IPPROTO_NONE 76 IPPROTO_DSTOPTS = 60, /* IPv6 destination options. */ 77#define IPPROTO_DSTOPTS IPPROTO_DSTOPTS 78 IPPROTO_MTP = 92, /* Multicast Transport Protocol. */ 79#define IPPROTO_MTP IPPROTO_MTP 80 IPPROTO_ENCAP = 98, /* Encapsulation Header. */ 81#define IPPROTO_ENCAP IPPROTO_ENCAP 82 IPPROTO_PIM = 103, /* Protocol Independent Multicast. */ 83#define IPPROTO_PIM IPPROTO_PIM 84 IPPROTO_COMP = 108, /* Compression Header Protocol. */ 85#define IPPROTO_COMP IPPROTO_COMP 86 IPPROTO_SCTP = 132, /* Stream Control Transmission Protocol. */ 87#define IPPROTO_SCTP IPPROTO_SCTP 88 IPPROTO_UDPLITE = 136, /* UDP-Lite protocol. */ 89#define IPPROTO_UDPLITE IPPROTO_UDPLITE 90 IPPROTO_RAW = 255, /* Raw IP packets. */ 91#define IPPROTO_RAW IPPROTO_RAW 92 IPPROTO_MAX 93 }; 94 95 96/* Type to represent a port. */ 97typedef uint16_t in_port_t; 98 99/* Standard well-known ports. */ 100enum 101 { 102 IPPORT_ECHO = 7, /* Echo service. */ 103 IPPORT_DISCARD = 9, /* Discard transmissions service. */ 104 IPPORT_SYSTAT = 11, /* System status service. */ 105 IPPORT_DAYTIME = 13, /* Time of day service. */ 106 IPPORT_NETSTAT = 15, /* Network status service. */ 107 IPPORT_FTP = 21, /* File Transfer Protocol. */ 108 IPPORT_TELNET = 23, /* Telnet protocol. */ 109 IPPORT_SMTP = 25, /* Simple Mail Transfer Protocol. */ 110 IPPORT_TIMESERVER = 37, /* Timeserver service. */ 111 IPPORT_NAMESERVER = 42, /* Domain Name Service. */ 112 IPPORT_WHOIS = 43, /* Internet Whois service. */ 113 IPPORT_MTP = 57, 114 115 IPPORT_TFTP = 69, /* Trivial File Transfer Protocol. */ 116 IPPORT_RJE = 77, 117 IPPORT_FINGER = 79, /* Finger service. */ 118 IPPORT_TTYLINK = 87, 119 IPPORT_SUPDUP = 95, /* SUPDUP protocol. */ 120 121 122 IPPORT_EXECSERVER = 512, /* execd service. */ 123 IPPORT_LOGINSERVER = 513, /* rlogind service. */ 124 IPPORT_CMDSERVER = 514, 125 IPPORT_EFSSERVER = 520, 126 127 /* UDP ports. */ 128 IPPORT_BIFFUDP = 512, 129 IPPORT_WHOSERVER = 513, 130 IPPORT_ROUTESERVER = 520, 131 132 /* Ports less than this value are reserved for privileged processes. */ 133 IPPORT_RESERVED = 1024, 134 135 /* Ports greater this value are reserved for (non-privileged) servers. */ 136 IPPORT_USERRESERVED = 5000 137 }; 138 139 140/* Internet address. */ 141typedef uint32_t in_addr_t; 142struct in_addr 143 { 144 in_addr_t s_addr; 145 }; 146 147 148/* Definitions of the bits in an Internet address integer. 149 150 On subnets, host and network parts are found according to 151 the subnet mask, not these masks. */ 152 153#define IN_CLASSA(a) ((((in_addr_t)(a)) & 0x80000000) == 0) 154#define IN_CLASSA_NET 0xff000000 155#define IN_CLASSA_NSHIFT 24 156#define IN_CLASSA_HOST (0xffffffff & ~IN_CLASSA_NET) 157#define IN_CLASSA_MAX 128 158 159#define IN_CLASSB(a) ((((in_addr_t)(a)) & 0xc0000000) == 0x80000000) 160#define IN_CLASSB_NET 0xffff0000 161#define IN_CLASSB_NSHIFT 16 162#define IN_CLASSB_HOST (0xffffffff & ~IN_CLASSB_NET) 163#define IN_CLASSB_MAX 65536 164 165#define IN_CLASSC(a) ((((in_addr_t)(a)) & 0xe0000000) == 0xc0000000) 166#define IN_CLASSC_NET 0xffffff00 167#define IN_CLASSC_NSHIFT 8 168#define IN_CLASSC_HOST (0xffffffff & ~IN_CLASSC_NET) 169 170#define IN_CLASSD(a) ((((in_addr_t)(a)) & 0xf0000000) == 0xe0000000) 171#define IN_MULTICAST(a) IN_CLASSD(a) 172 173#define IN_EXPERIMENTAL(a) ((((in_addr_t)(a)) & 0xe0000000) == 0xe0000000) 174#define IN_BADCLASS(a) ((((in_addr_t)(a)) & 0xf0000000) == 0xf0000000) 175 176/* Address to accept any incoming messages. */ 177#define INADDR_ANY ((in_addr_t) 0x00000000) 178/* Address to send to all hosts. */ 179#define INADDR_BROADCAST ((in_addr_t) 0xffffffff) 180/* Address indicating an error return. */ 181#define INADDR_NONE ((in_addr_t) 0xffffffff) 182 183/* Network number for local host loopback. */ 184#define IN_LOOPBACKNET 127 185/* Address to loopback in software to local host. */ 186#ifndef INADDR_LOOPBACK 187# define INADDR_LOOPBACK ((in_addr_t) 0x7f000001) /* Inet 127.0.0.1. */ 188#endif 189 190/* Defines for Multicast INADDR. */ 191#define INADDR_UNSPEC_GROUP ((in_addr_t) 0xe0000000) /* 224.0.0.0 */ 192#define INADDR_ALLHOSTS_GROUP ((in_addr_t) 0xe0000001) /* 224.0.0.1 */ 193#define INADDR_ALLRTRS_GROUP ((in_addr_t) 0xe0000002) /* 224.0.0.2 */ 194#define INADDR_MAX_LOCAL_GROUP ((in_addr_t) 0xe00000ff) /* 224.0.0.255 */ 195 196 197#if defined __UCLIBC_HAS_IPV6__ || !defined __UCLIBC_STRICT_HEADERS__ 198/* IPv6 address */ 199struct in6_addr 200 { 201 union { 202 uint8_t u6_addr8[16]; 203 uint16_t u6_addr16[8]; 204 uint32_t u6_addr32[4]; 205 } in6_u; 206#define s6_addr in6_u.u6_addr8 207#define s6_addr16 in6_u.u6_addr16 208#define s6_addr32 in6_u.u6_addr32 209 }; 210 211#define IN6ADDR_ANY_INIT { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } } } 212#define IN6ADDR_LOOPBACK_INIT { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 } } } 213 214#define INET6_ADDRSTRLEN 46 215#endif 216 217#ifdef __UCLIBC_HAS_IPV6__ 218extern const struct in6_addr in6addr_any; /* :: */ 219extern const struct in6_addr in6addr_loopback; /* ::1 */ 220#endif 221 222#define INET_ADDRSTRLEN 16 223 224 225#if 1 /*def __UCLIBC_HAS_IPV4__*/ 226/* Structure describing an Internet socket address. */ 227struct sockaddr_in 228 { 229 __SOCKADDR_COMMON (sin_); 230 in_port_t sin_port; /* Port number. */ 231 struct in_addr sin_addr; /* Internet address. */ 232 233 /* Pad to size of `struct sockaddr'. */ 234 unsigned char sin_zero[sizeof (struct sockaddr) - 235 __SOCKADDR_COMMON_SIZE - 236 sizeof (in_port_t) - 237 sizeof (struct in_addr)]; 238 }; 239#endif 240 241#if defined __UCLIBC_HAS_IPV6__ || !defined __UCLIBC_STRICT_HEADERS__ 242/* Ditto, for IPv6. */ 243struct sockaddr_in6 244 { 245 __SOCKADDR_COMMON (sin6_); 246 in_port_t sin6_port; /* Transport layer port # */ 247 uint32_t sin6_flowinfo; /* IPv6 flow information */ 248 struct in6_addr sin6_addr; /* IPv6 address */ 249 uint32_t sin6_scope_id; /* IPv6 scope-id */ 250 }; 251#endif 252 253 254#if defined __USE_MISC || defined __USE_GNU 255/* IPv4 multicast request. */ 256struct ip_mreq 257 { 258 /* IP multicast address of group. */ 259 struct in_addr imr_multiaddr; 260 261 /* Local IP address of interface. */ 262 struct in_addr imr_interface; 263 }; 264 265struct ip_mreq_source 266 { 267 /* IP multicast address of group. */ 268 struct in_addr imr_multiaddr; 269 270 /* IP address of source. */ 271 struct in_addr imr_interface; 272 273 /* IP address of interface. */ 274 struct in_addr imr_sourceaddr; 275 }; 276#endif 277 278 279#if defined __UCLIBC_HAS_IPV6__ || !defined __UCLIBC_STRICT_HEADERS__ 280/* Likewise, for IPv6. */ 281struct ipv6_mreq 282 { 283 /* IPv6 multicast address of group */ 284 struct in6_addr ipv6mr_multiaddr; 285 286 /* local interface */ 287 unsigned int ipv6mr_interface; 288 }; 289#endif 290 291 292#if defined __USE_MISC || defined __USE_GNU 293/* Multicast group request. */ 294struct group_req 295 { 296 /* Interface index. */ 297 uint32_t gr_interface; 298 299 /* Group address. */ 300 struct sockaddr_storage gr_group; 301 }; 302 303struct group_source_req 304 { 305 /* Interface index. */ 306 uint32_t gsr_interface; 307 308 /* Group address. */ 309 struct sockaddr_storage gsr_group; 310 311 /* Source address. */ 312 struct sockaddr_storage gsr_source; 313 }; 314 315 316/* Full-state filter operations. */ 317struct ip_msfilter 318 { 319 /* IP multicast address of group. */ 320 struct in_addr imsf_multiaddr; 321 322 /* Local IP address of interface. */ 323 struct in_addr imsf_interface; 324 325 /* Filter mode. */ 326 uint32_t imsf_fmode; 327 328 /* Number of source addresses. */ 329 uint32_t imsf_numsrc; 330 /* Source addresses. */ 331 struct in_addr imsf_slist[1]; 332 }; 333 334#define IP_MSFILTER_SIZE(numsrc) (sizeof (struct ip_msfilter) \ 335 - sizeof (struct in_addr) \ 336 + (numsrc) * sizeof (struct in_addr)) 337 338struct group_filter 339 { 340 /* Interface index. */ 341 uint32_t gf_interface; 342 343 /* Group address. */ 344 struct sockaddr_storage gf_group; 345 346 /* Filter mode. */ 347 uint32_t gf_fmode; 348 349 /* Number of source addresses. */ 350 uint32_t gf_numsrc; 351 /* Source addresses. */ 352 struct sockaddr_storage gf_slist[1]; 353}; 354 355#define GROUP_FILTER_SIZE(numsrc) (sizeof (struct group_filter) \ 356 - sizeof (struct sockaddr_storage) \ 357 + ((numsrc) \ 358 * sizeof (struct sockaddr_storage))) 359#endif 360 361 362/* Get system-specific definitions. */ 363#include <bits/in.h> 364 365/* Functions to convert between host and network byte order. 366 367 Please note that these functions normally take `unsigned long int' or 368 `unsigned short int' values as arguments and also return them. But 369 this was a short-sighted decision since on different systems the types 370 may have different representations but the values are always the same. */ 371 372extern uint32_t ntohl (uint32_t __netlong) __THROW __attribute__ ((__const__)); 373extern uint16_t ntohs (uint16_t __netshort) 374 __THROW __attribute__ ((__const__)); 375extern uint32_t htonl (uint32_t __hostlong) 376 __THROW __attribute__ ((__const__)); 377extern uint16_t htons (uint16_t __hostshort) 378 __THROW __attribute__ ((__const__)); 379 380#include <endian.h> 381 382/* Get machine dependent optimized versions of byte swapping functions. */ 383#include <bits/byteswap.h> 384 385#ifdef __OPTIMIZE__ 386/* We can optimize calls to the conversion functions. Either nothing has 387 to be done or we are using directly the byte-swapping functions which 388 often can be inlined. */ 389# if __BYTE_ORDER == __BIG_ENDIAN 390/* The host byte order is the same as network byte order, 391 so these functions are all just identity. */ 392# define ntohl(x) (x) 393# define ntohs(x) (x) 394# define htonl(x) (x) 395# define htons(x) (x) 396# else 397# if __BYTE_ORDER == __LITTLE_ENDIAN 398# define ntohl(x) __bswap_32 (x) 399# define ntohs(x) __bswap_16 (x) 400# define htonl(x) __bswap_32 (x) 401# define htons(x) __bswap_16 (x) 402# endif 403# endif 404#endif 405 406#if defined __UCLIBC_HAS_IPV6__ || !defined __UCLIBC_STRICT_HEADERS__ 407#define IN6_IS_ADDR_UNSPECIFIED(a) \ 408 (((__const uint32_t *) (a))[0] == 0 \ 409 && ((__const uint32_t *) (a))[1] == 0 \ 410 && ((__const uint32_t *) (a))[2] == 0 \ 411 && ((__const uint32_t *) (a))[3] == 0) 412 413#define IN6_IS_ADDR_LOOPBACK(a) \ 414 (((__const uint32_t *) (a))[0] == 0 \ 415 && ((__const uint32_t *) (a))[1] == 0 \ 416 && ((__const uint32_t *) (a))[2] == 0 \ 417 && ((__const uint32_t *) (a))[3] == htonl (1)) 418 419#define IN6_IS_ADDR_MULTICAST(a) (((__const uint8_t *) (a))[0] == 0xff) 420 421#define IN6_IS_ADDR_LINKLOCAL(a) \ 422 ((((__const uint32_t *) (a))[0] & htonl (0xffc00000)) \ 423 == htonl (0xfe800000)) 424 425#define IN6_IS_ADDR_SITELOCAL(a) \ 426 ((((__const uint32_t *) (a))[0] & htonl (0xffc00000)) \ 427 == htonl (0xfec00000)) 428 429#define IN6_IS_ADDR_V4MAPPED(a) \ 430 ((((__const uint32_t *) (a))[0] == 0) \ 431 && (((__const uint32_t *) (a))[1] == 0) \ 432 && (((__const uint32_t *) (a))[2] == htonl (0xffff))) 433 434#define IN6_IS_ADDR_V4COMPAT(a) \ 435 ((((__const uint32_t *) (a))[0] == 0) \ 436 && (((__const uint32_t *) (a))[1] == 0) \ 437 && (((__const uint32_t *) (a))[2] == 0) \ 438 && (ntohl (((__const uint32_t *) (a))[3]) > 1)) 439 440#define IN6_ARE_ADDR_EQUAL(a,b) \ 441 ((((__const uint32_t *) (a))[0] == ((__const uint32_t *) (b))[0]) \ 442 && (((__const uint32_t *) (a))[1] == ((__const uint32_t *) (b))[1]) \ 443 && (((__const uint32_t *) (a))[2] == ((__const uint32_t *) (b))[2]) \ 444 && (((__const uint32_t *) (a))[3] == ((__const uint32_t *) (b))[3])) 445#endif 446 447#if defined __USE_MISC || defined __USE_GNU 448/* Bind socket to a privileged IP port. */ 449extern int bindresvport (int __sockfd, struct sockaddr_in *__sock_in) __THROW; 450 451# if 0 /*def __UCLIBC_HAS_IPV6__*/ 452/* The IPv6 version of this function. */ 453extern int bindresvport6 (int __sockfd, struct sockaddr_in6 *__sock_in) 454 __THROW; 455# endif 456#endif 457 458 459#if defined __UCLIBC_HAS_IPV6__ || !defined __UCLIBC_STRICT_HEADERS__ 460#define IN6_IS_ADDR_MC_NODELOCAL(a) \ 461 (IN6_IS_ADDR_MULTICAST(a) \ 462 && ((((__const uint8_t *) (a))[1] & 0xf) == 0x1)) 463 464#define IN6_IS_ADDR_MC_LINKLOCAL(a) \ 465 (IN6_IS_ADDR_MULTICAST(a) \ 466 && ((((__const uint8_t *) (a))[1] & 0xf) == 0x2)) 467 468#define IN6_IS_ADDR_MC_SITELOCAL(a) \ 469 (IN6_IS_ADDR_MULTICAST(a) \ 470 && ((((__const uint8_t *) (a))[1] & 0xf) == 0x5)) 471 472#define IN6_IS_ADDR_MC_ORGLOCAL(a) \ 473 (IN6_IS_ADDR_MULTICAST(a) \ 474 && ((((__const uint8_t *) (a))[1] & 0xf) == 0x8)) 475 476#define IN6_IS_ADDR_MC_GLOBAL(a) \ 477 (IN6_IS_ADDR_MULTICAST(a) \ 478 && ((((__const uint8_t *) (a))[1] & 0xf) == 0xe)) 479#endif 480 481 482/* IPv6 packet information. */ 483struct in6_pktinfo 484 { 485 struct in6_addr ipi6_addr; /* src/dst IPv6 address */ 486 unsigned int ipi6_ifindex; /* send/recv interface index */ 487 }; 488 489/* IPv6 MTU information. */ 490struct ip6_mtuinfo 491 { 492 struct sockaddr_in6 ip6m_addr; /* dst address including zone ID */ 493 uint32_t ip6m_mtu; /* path MTU in host byte order */ 494 }; 495 496#ifdef __USE_GNU 497# if defined __UCLIBC_HAS_IPV6__ || !defined __UCLIBC_STRICT_HEADERS__ 498 499# if 0 500/* Obsolete hop-by-hop and Destination Options Processing (RFC 2292). */ 501extern int inet6_option_space (int __nbytes) 502 __THROW __attribute_deprecated__; 503extern int inet6_option_init (void *__bp, struct cmsghdr **__cmsgp, 504 int __type) __THROW __attribute_deprecated__; 505extern int inet6_option_append (struct cmsghdr *__cmsg, 506 __const uint8_t *__typep, int __multx, 507 int __plusy) __THROW __attribute_deprecated__; 508extern uint8_t *inet6_option_alloc (struct cmsghdr *__cmsg, int __datalen, 509 int __multx, int __plusy) 510 __THROW __attribute_deprecated__; 511extern int inet6_option_next (__const struct cmsghdr *__cmsg, 512 uint8_t **__tptrp) 513 __THROW __attribute_deprecated__; 514extern int inet6_option_find (__const struct cmsghdr *__cmsg, 515 uint8_t **__tptrp, int __type) 516 __THROW __attribute_deprecated__; 517 518 519/* Hop-by-Hop and Destination Options Processing (RFC 3542). */ 520extern int inet6_opt_init (void *__extbuf, socklen_t __extlen) __THROW; 521extern int inet6_opt_append (void *__extbuf, socklen_t __extlen, int __offset, 522 uint8_t __type, socklen_t __len, uint8_t __align, 523 void **__databufp) __THROW; 524extern int inet6_opt_finish (void *__extbuf, socklen_t __extlen, int __offset) 525 __THROW; 526extern int inet6_opt_set_val (void *__databuf, int __offset, void *__val, 527 socklen_t __vallen) __THROW; 528extern int inet6_opt_next (void *__extbuf, socklen_t __extlen, int __offset, 529 uint8_t *__typep, socklen_t *__lenp, 530 void **__databufp) __THROW; 531extern int inet6_opt_find (void *__extbuf, socklen_t __extlen, int __offset, 532 uint8_t __type, socklen_t *__lenp, 533 void **__databufp) __THROW; 534extern int inet6_opt_get_val (void *__databuf, int __offset, void *__val, 535 socklen_t __vallen) __THROW; 536 537 538/* Routing Header Option (RFC 3542). */ 539extern socklen_t inet6_rth_space (int __type, int __segments) __THROW; 540extern void *inet6_rth_init (void *__bp, socklen_t __bp_len, int __type, 541 int __segments) __THROW; 542extern int inet6_rth_add (void *__bp, __const struct in6_addr *__addr) __THROW; 543extern int inet6_rth_reverse (__const void *__in, void *__out) __THROW; 544extern int inet6_rth_segments (__const void *__bp) __THROW; 545extern struct in6_addr *inet6_rth_getaddr (__const void *__bp, int __index) 546 __THROW; 547# endif 548# endif 549 550 551# if 0 552/* Multicast source filter support. */ 553 554/* Get IPv4 source filter. */ 555extern int getipv4sourcefilter (int __s, struct in_addr __interface_addr, 556 struct in_addr __group, uint32_t *__fmode, 557 uint32_t *__numsrc, struct in_addr *__slist) 558 __THROW; 559 560/* Set IPv4 source filter. */ 561extern int setipv4sourcefilter (int __s, struct in_addr __interface_addr, 562 struct in_addr __group, uint32_t __fmode, 563 uint32_t __numsrc, 564 __const struct in_addr *__slist) 565 __THROW; 566 567 568/* Get source filter. */ 569extern int getsourcefilter (int __s, uint32_t __interface_addr, 570 __const struct sockaddr *__group, 571 socklen_t __grouplen, uint32_t *__fmode, 572 uint32_t *__numsrc, 573 struct sockaddr_storage *__slist) __THROW; 574 575/* Set source filter. */ 576extern int setsourcefilter (int __s, uint32_t __interface_addr, 577 __const struct sockaddr *__group, 578 socklen_t __grouplen, uint32_t __fmode, 579 uint32_t __numsrc, 580 __const struct sockaddr_storage *__slist) __THROW; 581# endif 582#endif /* use GNU */ 583 584__END_DECLS 585 586#endif /* netinet/in.h */ 587