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>