File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / quagga / lib / sockopt.h
Revision 1.1.1.2 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Oct 9 09:22:28 2012 UTC (11 years, 9 months ago) by misho
Branches: quagga, MAIN
CVS tags: v0_99_22p0, v0_99_22, v0_99_21, HEAD
quagga

    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: extern int setsockopt_ipv6_tclass (int, int);
   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: 
   86: extern int setsockopt_ipv4_multicast_if(int sock,
   87: 			             unsigned int ifindex);
   88: extern int setsockopt_ipv4_multicast(int sock, int optname,
   89:                                      unsigned int mcast_addr,
   90: 			             unsigned int ifindex);
   91: extern int setsockopt_ipv4_tos(int sock, int tos);
   92: 
   93: /* Ask for, and get, ifindex, by whatever method is supported. */
   94: extern int setsockopt_ifindex (int, int, int);
   95: extern int getsockopt_ifindex (int, struct msghdr *);
   96: 
   97: /* swab the fields in iph between the host order and system order expected 
   98:  * for IP_HDRINCL.
   99:  */
  100: extern void sockopt_iphdrincl_swab_htosys (struct ip *iph);
  101: extern void sockopt_iphdrincl_swab_systoh (struct ip *iph);
  102: 
  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>