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

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);
        !            38: #endif /* HAVE_IPV6 */
        !            39: 
        !            40: /*
        !            41:  * It is OK to reference in6_pktinfo here without a protecting #if
        !            42:  * because this macro will only be used #if HAVE_IPV6, and in6_pktinfo
        !            43:  * is not optional for HAVE_IPV6.
        !            44:  */
        !            45: #define SOPT_SIZE_CMSG_PKTINFO_IPV6() (sizeof (struct in6_pktinfo));
        !            46: 
        !            47: /*
        !            48:  * Size defines for control messages used to get ifindex.  We define
        !            49:  * values for each method, and define a macro that can be used by code
        !            50:  * that is unaware of which method is in use.
        !            51:  * These values are without any alignment needed (see CMSG_SPACE in RFC3542).
        !            52:  */
        !            53: #if defined (IP_PKTINFO)
        !            54: /* Linux in_pktinfo. */
        !            55: #define SOPT_SIZE_CMSG_PKTINFO_IPV4()  (CMSG_SPACE(sizeof (struct in_pktinfo)))
        !            56: /* XXX This should perhaps be defined even if IP_PKTINFO is not. */
        !            57: #define SOPT_SIZE_CMSG_PKTINFO(af) \
        !            58:   ((af == AF_INET) ? SOPT_SIZE_CMSG_PKTINFO_IPV4() \
        !            59:                    : SOPT_SIZE_CMSG_PKTINFO_IPV6()
        !            60: #endif /* IP_PKTINFO */
        !            61: 
        !            62: #if defined (IP_RECVIF)
        !            63: /* BSD/Solaris */
        !            64: 
        !            65: #if defined (SUNOS_5)
        !            66: #define SOPT_SIZE_CMSG_RECVIF_IPV4()  (sizeof (uint_t))
        !            67: #else
        !            68: #define SOPT_SIZE_CMSG_RECVIF_IPV4()   (sizeof (struct sockaddr_dl))
        !            69: #endif /* SUNOS_5 */
        !            70: #endif /* IP_RECVIF */
        !            71: 
        !            72: /* SOPT_SIZE_CMSG_IFINDEX_IPV4 - portable type */
        !            73: #if defined (SOPT_SIZE_CMSG_PKTINFO)
        !            74: #define SOPT_SIZE_CMSG_IFINDEX_IPV4() SOPT_SIZE_CMSG_PKTINFO_IPV4()
        !            75: #elif defined (SOPT_SIZE_CMSG_RECVIF_IPV4)
        !            76: #define SOPT_SIZE_CMSG_IFINDEX_IPV4() SOPT_SIZE_CMSG_RECVIF_IPV4()
        !            77: #else /* Nothing available */
        !            78: #define SOPT_SIZE_CMSG_IFINDEX_IPV4() (sizeof (char *))
        !            79: #endif /* SOPT_SIZE_CMSG_IFINDEX_IPV4 */
        !            80: 
        !            81: #define SOPT_SIZE_CMSG_IFINDEX(af) \
        !            82:   (((af) == AF_INET) : SOPT_SIZE_CMSG_IFINDEX_IPV4() \
        !            83:                     ? SOPT_SIZE_CMSG_PKTINFO_IPV6())
        !            84: 
        !            85: extern int setsockopt_ipv4_multicast_if(int sock,
        !            86:                                     unsigned int ifindex);
        !            87: extern int setsockopt_ipv4_multicast(int sock, int optname,
        !            88:                                      unsigned int mcast_addr,
        !            89:                                     unsigned int ifindex);
        !            90: extern int setsockopt_ipv4_tos(int sock, int tos);
        !            91: 
        !            92: /* Ask for, and get, ifindex, by whatever method is supported. */
        !            93: extern int setsockopt_ifindex (int, int, int);
        !            94: extern int getsockopt_ifindex (int, struct msghdr *);
        !            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: 
        !           102: extern int sockopt_tcp_signature(int sock, union sockunion *su,
        !           103:                                  const char *password);
        !           104: #endif /*_ZEBRA_SOCKOPT_H */

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