Annotation of embedaddon/quagga/lib/sockopt.h, revision 1.1.1.3

1.1       misho       1: /* Router advertisement
                      2:  * Copyright (C) 1999 Kunihiro Ishiguro
                      3:  *
                      4:  * This file is part of GNU Zebra.
                      5:  *
                      6:  * GNU Zebra is free software; you can redistribute it and/or modify it
                      7:  * under the terms of the GNU General Public License as published by the
                      8:  * Free Software Foundation; either version 2, or (at your option) any
                      9:  * later version.
                     10:  *
                     11:  * GNU Zebra is distributed in the hope that it will be useful, but
                     12:  * WITHOUT ANY WARRANTY; without even the implied warranty of
                     13:  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
                     14:  * General Public License for more details.
                     15:  *
                     16:  * You should have received a copy of the GNU General Public License
                     17:  * along with GNU Zebra; see the file COPYING.  If not, write to the Free
                     18:  * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
                     19:  * 02111-1307, USA.  
                     20:  */
                     21: 
                     22: #ifndef _ZEBRA_SOCKOPT_H
                     23: #define _ZEBRA_SOCKOPT_H
                     24: 
                     25: #include "sockunion.h"
                     26: 
                     27: extern int setsockopt_so_recvbuf (int sock, int size);
                     28: extern int setsockopt_so_sendbuf (const int sock, int size);
                     29: extern int getsockopt_so_sendbuf (const int sock);
                     30: 
                     31: #ifdef HAVE_IPV6
                     32: extern int setsockopt_ipv6_pktinfo (int, int);
                     33: extern int setsockopt_ipv6_checksum (int, int);
                     34: extern int setsockopt_ipv6_multicast_hops (int, int);
                     35: extern int setsockopt_ipv6_unicast_hops (int, int);
                     36: extern int setsockopt_ipv6_hoplimit (int, int);
                     37: extern int setsockopt_ipv6_multicast_loop (int, int);
1.1.1.2   misho      38: extern int setsockopt_ipv6_tclass (int, int);
1.1       misho      39: #endif /* HAVE_IPV6 */
                     40: 
                     41: /*
                     42:  * It is OK to reference in6_pktinfo here without a protecting #if
                     43:  * because this macro will only be used #if HAVE_IPV6, and in6_pktinfo
                     44:  * is not optional for HAVE_IPV6.
                     45:  */
                     46: #define SOPT_SIZE_CMSG_PKTINFO_IPV6() (sizeof (struct in6_pktinfo));
                     47: 
                     48: /*
                     49:  * Size defines for control messages used to get ifindex.  We define
                     50:  * values for each method, and define a macro that can be used by code
                     51:  * that is unaware of which method is in use.
                     52:  * These values are without any alignment needed (see CMSG_SPACE in RFC3542).
                     53:  */
                     54: #if defined (IP_PKTINFO)
                     55: /* Linux in_pktinfo. */
                     56: #define SOPT_SIZE_CMSG_PKTINFO_IPV4()  (CMSG_SPACE(sizeof (struct in_pktinfo)))
                     57: /* XXX This should perhaps be defined even if IP_PKTINFO is not. */
                     58: #define SOPT_SIZE_CMSG_PKTINFO(af) \
                     59:   ((af == AF_INET) ? SOPT_SIZE_CMSG_PKTINFO_IPV4() \
                     60:                    : SOPT_SIZE_CMSG_PKTINFO_IPV6()
                     61: #endif /* IP_PKTINFO */
                     62: 
                     63: #if defined (IP_RECVIF)
                     64: /* BSD/Solaris */
                     65: 
                     66: #if defined (SUNOS_5)
                     67: #define SOPT_SIZE_CMSG_RECVIF_IPV4()  (sizeof (uint_t))
                     68: #else
                     69: #define SOPT_SIZE_CMSG_RECVIF_IPV4()   (sizeof (struct sockaddr_dl))
                     70: #endif /* SUNOS_5 */
                     71: #endif /* IP_RECVIF */
                     72: 
                     73: /* SOPT_SIZE_CMSG_IFINDEX_IPV4 - portable type */
                     74: #if defined (SOPT_SIZE_CMSG_PKTINFO)
                     75: #define SOPT_SIZE_CMSG_IFINDEX_IPV4() SOPT_SIZE_CMSG_PKTINFO_IPV4()
                     76: #elif defined (SOPT_SIZE_CMSG_RECVIF_IPV4)
                     77: #define SOPT_SIZE_CMSG_IFINDEX_IPV4() SOPT_SIZE_CMSG_RECVIF_IPV4()
                     78: #else /* Nothing available */
                     79: #define SOPT_SIZE_CMSG_IFINDEX_IPV4() (sizeof (char *))
                     80: #endif /* SOPT_SIZE_CMSG_IFINDEX_IPV4 */
                     81: 
                     82: #define SOPT_SIZE_CMSG_IFINDEX(af) \
                     83:   (((af) == AF_INET) : SOPT_SIZE_CMSG_IFINDEX_IPV4() \
                     84:                     ? SOPT_SIZE_CMSG_PKTINFO_IPV6())
                     85: 
1.1.1.3 ! misho      86: extern int setsockopt_ipv4_multicast_if(int sock, ifindex_t ifindex);
1.1       misho      87: extern int setsockopt_ipv4_multicast(int sock, int optname,
                     88:                                      unsigned int mcast_addr,
1.1.1.3 ! misho      89:                                     ifindex_t ifindex);
1.1       misho      90: extern int setsockopt_ipv4_tos(int sock, int tos);
                     91: 
                     92: /* Ask for, and get, ifindex, by whatever method is supported. */
1.1.1.3 ! misho      93: extern int setsockopt_ifindex (int, int, ifindex_t);
        !            94: extern ifindex_t getsockopt_ifindex (int, struct msghdr *);
1.1       misho      95: 
                     96: /* swab the fields in iph between the host order and system order expected 
                     97:  * for IP_HDRINCL.
                     98:  */
                     99: extern void sockopt_iphdrincl_swab_htosys (struct ip *iph);
                    100: extern void sockopt_iphdrincl_swab_systoh (struct ip *iph);
                    101: 
1.1.1.3 ! misho     102: extern int sockopt_tcp_rtt (int);
1.1       misho     103: extern int sockopt_tcp_signature(int sock, union sockunion *su,
                    104:                                  const char *password);
                    105: #endif /*_ZEBRA_SOCKOPT_H */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>