Annotation of embedaddon/quagga/lib/sockopt.h, revision 1.1.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>