Source: ../../fea/mfea_osdep.hh
|
|
|
|
// -*- c-basic-offset: 4; tab-width: 8; indent-tabs-mode: t -*-
// Copyright (c) 2001-2009 XORP, Inc.
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License, Version 2, June
// 1991 as published by the Free Software Foundation. Redistribution
// and/or modification of this program under the terms of any other
// version of the GNU General Public License is not permitted.
//
// This program is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For more details,
// see the GNU General Public License, Version 2, a copy of which can be
// found in the XORP LICENSE.gpl file.
//
// XORP Inc, 2953 Bunker Hill Lane, Suite 204, Santa Clara, CA 95054, USA;
// http://xorp.net
// $XORP: xorp/fea/mfea_osdep.hh,v 1.15 2009/01/05 18:30:49 jtc Exp $
#ifndef __FEA_MFEA_OSDEP_HH__
#define __FEA_MFEA_OSDEP_HH__
//
// A header file that adds various definitions that may be missing from the OS
//
#include "libxorp/xorp.h"
#ifdef HAVE_SYS_TIME_H
#include <sys/time.h>
#endif
#ifdef HAVE_NETINET_IP6_H
#include <netinet/ip6.h>
#endif
#ifdef HAVE_NETINET_ICMP6_H
#include <netinet/icmp6.h>
#endif
#include "mrt/include/ip_mroute.h"
#include "mfea_kernel_messages.hh"
//
// Constants definitions
//
//
// Structures, typedefs and macros
//
//
// XXX: misc. (eventually) missing definitions
// TODO: those should go somewhere else
//
#ifndef INADDR_ALLRTRS_GROUP
#define INADDR_ALLRTRS_GROUP (uint32_t)0xe0000002U // 224.0.0.2
#endif
#ifndef VIFF_REGISTER
#define VIFF_REGISTER 0x4 // Vif for PIM Register encap/decap
#endif
#ifndef IGMPMSG_WHOLEPKT
#define IGMPMSG_WHOLEPKT 3 // Whole packet sent from the kernel to
// the user-level process (typically
// a multicast data packet for PIM
// register encapsulation).
#endif
#ifndef IPPROTO_PIM
#define IPPROTO_PIM 103 // Protocol Independent Multicast
#endif
//
// XXX: in *BSD there is only MRT_ASSERT, but in Linux there are both
// MRT_ASSERT and MRT_PIM (with MRT_PIM defined as a superset of MRT_ASSERT).
//
#ifndef MRT_PIM
#define MRT_PIM MRT_ASSERT
#endif
#ifndef IP6OPT_RTALERT
#define IP6OPT_RTALERT 0x05
#endif
#ifndef IP6OPT_RTALERT_LEN
#define IP6OPT_RTALERT_LEN 4
#endif
#ifndef IP6OPT_RTALERT_MLD
#define IP6OPT_RTALERT_MLD 0
#endif
//
// MLD-related missing definitions
//
// Note that on newer systems all MLD-related definitions use
// mld_xxx and MLD_XXX instead of mld6_xxx and MLD6_XXX.
//
#ifdef HAVE_IPV6_MULTICAST_ROUTING
#ifndef MLD_LISTENER_QUERY
# ifdef MLD6_LISTENER_QUERY
# define MLD_LISTENER_QUERY MLD6_LISTENER_QUERY
# else
# define MLD_LISTENER_QUERY 130
# endif
#endif
#ifndef MLD_LISTENER_REPORT
# ifdef MLD6_LISTENER_REPORT
# define MLD_LISTENER_REPORT MLD6_LISTENER_REPORT
# else
# define MLD_LISTENER_REPORT 131
# endif
#endif
#ifndef MLD_LISTENER_DONE
# ifdef MLD6_LISTENER_DONE
# define MLD_LISTENER_DONE MLD6_LISTENER_DONE
# else
# define MLD_LISTENER_DONE 132
# endif
#endif
#ifndef MLD_MTRACE_RESP
# ifdef MLD6_MTRACE_RESP
# define MLD_MTRACE_RESP MLD6_MTRACE_RESP
# else
# define MLD_MTRACE_RESP 200
# endif
#endif
#ifndef MLD_MTRACE
# ifdef MLD6_MTRACE
# define MLD_MTRACE MLD6_MTRACE
# else
# define MLD_MTRACE 201
# endif
#endif
#ifndef MLDV2_LISTENER_REPORT
# ifdef MLD6V2_LISTENER_REPORT
# define MLDV2_LISTENER_REPORT MLD6V2_LISTENER_REPORT
# else
# define MLDV2_LISTENER_REPORT 143
# endif
#endif
#ifndef MLD_MINLEN
# ifdef HAVE_STRUCT_MLD_HDR
# define MLD_MINLEN (sizeof(struct mld_hdr))
# else
# define MLD_MINLEN 24
# endif
#endif
#endif // HAVE_IPV6_MULTICAST_ROUTING
//
// Test if the kernel multicast signal message types are consistent
// between IPv4 and IPv6.
// E.g., if (IGMPMSG_NOCACHE == MRT6MSG_NOCACHE)
// (IGMPMSG_WRONGVIF == MRT6MSG_WRONGMIF)
// (IGMPMSG_WHOLEPKT == MRT6MSG_WHOLEPKT)
// (IGMPMSG_BW_UPCALL == MRT6MSG_BW_UPCALL)
// Also, check if MFEA_KERNEL_MESSAGE_NOCACHE/WRONGVIF/WHOLEPKT/BW_UPCALL
// were defined accurately.
// TODO: Yes, I know this is a very, very bad style, but I wanted to have
// abstract kernel signal types, and I didn't want the upper layer
// protocols to use IGMPMSG/MRT6MSG, and to have special cases
// for IPv4 and IPv6. Maybe later this will change...
//
#ifdef HAVE_IPV6_MULTICAST_ROUTING
#if IGMPMSG_NOCACHE != MRT6MSG_NOCACHE
# error "MFEA message handling needs fix, because IGMPMSG_NOCACHE != MRT6MSG_NOCACHE"
#endif
#if IGMPMSG_WRONGVIF != MRT6MSG_WRONGMIF
# error "MFEA message handling needs fix, because IGMPMSG_WRONGVIF != MRT6MSG_WRONGMIF"
#endif
#if IGMPMSG_WHOLEPKT != MRT6MSG_WHOLEPKT
# error "MFEA message handling needs fix, because IGMPMSG_WHOLEPKT != MRT6MSG_WHOLEPKT"
#endif
#if defined(IGMPMSG_BW_UPCALL) && defined(MRT6MSG_BW_UPCALL)
#if IGMPMSG_BW_UPCALL != MRT6MSG_BW_UPCALL
# error "MFEA message handling needs fix, because IGMPMSG_BW_UPCALL != MRT6MSG_BW_UPCALL"
#endif
#endif
#endif // HAVE_IPV6_MULTICAST_ROUTING
#ifdef HAVE_IPV4_MULTICAST_ROUTING
#if IGMPMSG_NOCACHE != MFEA_KERNEL_MESSAGE_NOCACHE
# error "MFEA message handling needs fix, because IGMPMSG_NOCACHE != MFEA_KERNEL_MESSAGE_NOCACHE"
#endif
#if IGMPMSG_WRONGVIF != MFEA_KERNEL_MESSAGE_WRONGVIF
# error "MFEA message handling needs fix, because IGMPMSG_WRONGVIF != MFEA_KERNEL_MESSAGE_WRONGVIF"
#endif
#if IGMPMSG_WHOLEPKT != MFEA_KERNEL_MESSAGE_WHOLEPKT
# error "MFEA message handling needs fix, because IGMPMSG_WHOLEPKT != MFEA_KERNEL_MESSAGE_WHOLEPKT"
#endif
#if defined(IGMPMSG_BW_UPCALL)
#if IGMPMSG_BW_UPCALL != MFEA_KERNEL_MESSAGE_BW_UPCALL
# error "MFEA message handling needs fix, because IGMPMSG_BW_UPCALL != MFEA_KERNEL_MESSAGE_BW_UPCALL"
#endif
#endif
#if defined(MRT6MSG_BW_UPCALL)
#if MRT6MSG_BW_UPCALL != MFEA_KERNEL_MESSAGE_BW_UPCALL
# error "MFEA message handling needs fix, because MRT6MSG_BW_UPCALL != MFEA_KERNEL_MESSAGE_BW_UPCALL"
#endif
#endif
#endif // HAVE_IPV4_MULTICAST_ROUTING
//
// Global variables
//
//
// Global functions prototypes
//
#endif // __FEA_MFEA_OSDEP_HH__
Generated by: pavlin on kobe.xorp.net on Wed Jan 7 19:10:56 2009, using kdoc 2.0a54+XORP.