File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / pimdd / defs.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Mon Jun 12 07:58:55 2017 UTC (7 years ago) by misho
Branches: pimdd, MAIN
CVS tags: v0_2_1p0, v0_2_1, HEAD
pimdd-dense 0.2.1.0_2

    1: /*
    2:  *  Copyright (c) 1998 by the University of Oregon.
    3:  *  All rights reserved.
    4:  *
    5:  *  Permission to use, copy, modify, and distribute this software and
    6:  *  its documentation in source and binary forms for lawful
    7:  *  purposes and without fee is hereby granted, provided
    8:  *  that the above copyright notice appear in all copies and that both
    9:  *  the copyright notice and this permission notice appear in supporting
   10:  *  documentation, and that any documentation, advertising materials,
   11:  *  and other materials related to such distribution and use acknowledge
   12:  *  that the software was developed by the University of Oregon.
   13:  *  The name of the University of Oregon may not be used to endorse or 
   14:  *  promote products derived from this software without specific prior 
   15:  *  written permission.
   16:  *
   17:  *  THE UNIVERSITY OF OREGON DOES NOT MAKE ANY REPRESENTATIONS
   18:  *  ABOUT THE SUITABILITY OF THIS SOFTWARE FOR ANY PURPOSE.  THIS SOFTWARE IS
   19:  *  PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES,
   20:  *  INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
   21:  *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, TITLE, AND 
   22:  *  NON-INFRINGEMENT.
   23:  *
   24:  *  IN NO EVENT SHALL UO, OR ANY OTHER CONTRIBUTOR BE LIABLE FOR ANY
   25:  *  SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES, WHETHER IN CONTRACT,
   26:  *  TORT, OR OTHER FORM OF ACTION, ARISING OUT OF OR IN CONNECTION WITH,
   27:  *  THE USE OR PERFORMANCE OF THIS SOFTWARE.
   28:  *
   29:  *  Other copyrights might apply to parts of this software and are so
   30:  *  noted when applicable.
   31:  */
   32: /*
   33:  *  Questions concerning this software should be directed to 
   34:  *  Kurt Windisch (kurtw@antc.uoregon.edu)
   35:  *
   36:  *  $Id: defs.h,v 1.1.1.1 2017/06/12 07:58:55 misho Exp $
   37:  */
   38: /*
   39:  * Part of this program has been derived from PIM sparse-mode pimd.
   40:  * The pimd program is covered by the license in the accompanying file
   41:  * named "LICENSE.pimd".
   42:  *  
   43:  * The pimd program is COPYRIGHT 1998 by University of Southern California.
   44:  *
   45:  * Part of this program has been derived from mrouted.
   46:  * The mrouted program is covered by the license in the accompanying file
   47:  * named "LICENSE.mrouted".
   48:  * 
   49:  * The mrouted program is COPYRIGHT 1989 by The Board of Trustees of
   50:  * Leland Stanford Junior University.
   51:  *
   52:  */
   53: 
   54: #include <stdio.h>
   55: #include <stdlib.h>
   56: #include <unistd.h> 
   57: #include <ctype.h>
   58: #include <errno.h>
   59: #include <syslog.h>
   60: #include <signal.h> 
   61: #include <string.h> 
   62: #include <sys/param.h>
   63: #include <sys/types.h>
   64: #include <sys/socket.h>
   65: #include <sys/ioctl.h>
   66: #include <fcntl.h>
   67: #if ((defined(SYSV)) || (defined(BSDI)) || ((defined SunOS) && (SunOS < 50)))
   68: #include <sys/sockio.h>
   69: #endif /* SYSV || BSDI || SunOS 4.x */
   70: #include <sys/time.h>
   71: #include <net/if.h>
   72: #include <netinet/in.h>
   73: #include <netinet/in_systm.h>
   74: #include <netinet/ip.h>
   75: #include <netinet/igmp.h>
   76: #ifdef __FreeBSD__      /* sigh */
   77: #include <osreldate.h>
   78: #endif /* __FreeBSD__ */
   79: #if (defined(BSDI)) || (defined(__FreeBSD__) && (__FreeBSD_version >= 220000))
   80: #define rtentry kernel_rtentry
   81: #include <net/route.h>
   82: #undef rtentry
   83: #endif /* BSDI or __FreeBSD_version >= 220000 */
   84: #include <netinet/ip_mroute.h>
   85: #include <strings.h>
   86: #ifdef RSRR
   87: #include <sys/un.h>
   88: #endif /* RSRR */
   89: 
   90: typedef u_int   u_int32;
   91: typedef u_short u_int16;
   92: typedef u_char  u_int8;
   93: 
   94: #ifndef __P
   95: #ifdef __STDC__
   96: #define __P(x)  x
   97: #else
   98: #define __P(x)  ()
   99: #endif
  100: #endif
  101: 
  102: typedef void (*cfunc_t) __P((void *));
  103: typedef void (*ihfunc_t) __P((int, fd_set *));
  104: 
  105: #include "dvmrp.h"     /* Added for further compatibility and convenience */
  106: #include "pimdd.h"
  107: #include "mrt.h"
  108: #include "igmpv2.h"
  109: #include "vif.h"
  110: #include "debug.h"
  111: #include "pathnames.h"
  112: #ifdef RSRR
  113: #include "rsrr.h"
  114: #include "rsrr_var.h"
  115: #endif /* RSRR */
  116: 
  117: /*
  118:  * Miscellaneous constants and macros
  119:  */
  120: /* #if (!(defined(BSDI)) && !(defined(KERNEL))) */
  121: #ifndef KERNEL
  122: #define max(a, b)               ((a) < (b) ? (b) : (a))
  123: #define min(a, b)               ((a) > (b) ? (b) : (a))
  124: #endif
  125: 
  126: /*
  127:  * Various definitions to make it working for different platforms
  128:  */
  129: /* The old style sockaddr definition doesn't have sa_len */
  130: #if (defined(BSD) && (BSD >= 199006)) /* sa_len was added with 4.3-Reno */ 
  131: #define HAVE_SA_LEN
  132: #endif
  133: 
  134: /* Versions of Solaris older than 2.6 don't have routing sockets. */
  135: /* XXX TODO: check FreeBSD version and add all other platforms */
  136: #if ((defined(SunOS) && SunOS >=56) || (defined FreeBSD) || (defined IRIX) || (defined BSDI) || defined(NetBSD))
  137: #define HAVE_ROUTING_SOCKETS
  138: #endif
  139: 
  140: #define TRUE			1
  141: #define FALSE			0
  142: 
  143: #ifndef MAX
  144: #define MAX(a,b) (((a) >= (b))? (a) : (b))
  145: #define MIN(a,b) (((a) <= (b))? (a) : (b))
  146: #endif /* MAX & MIN */
  147: 
  148: #define CREATE                  TRUE
  149: #define DONT_CREATE             FALSE
  150: 
  151: #define EQUAL(s1, s2)		(strcmp((s1), (s2)) == 0)
  152: 
  153: /* obnoxious gcc gives an extraneous warning about this constant... */
  154: #if defined(__STDC__) || defined(__GNUC__)
  155: #define JAN_1970        2208988800UL    /* 1970 - 1900 in seconds */
  156: #else
  157: #define JAN_1970        2208988800L     /* 1970 - 1900 in seconds */
  158: #define const           /**/
  159: #endif
  160: 
  161: 
  162: #define MINTTL			1  /* min TTL in the packets send locally */
  163: 
  164: #define MAX_IP_PACKET_LEN       576
  165: #define MIN_IP_HEADER_LEN       20
  166: #define MAX_IP_HEADER_LEN       60
  167: 
  168: 
  169: /*
  170:  * The IGMPv2 <netinet/in.h> defines INADDR_ALLRTRS_GROUP, but earlier
  171:  * ones don't, so we define it conditionally here.
  172:  */
  173: #ifndef INADDR_ALLRTRS_GROUP
  174: 					/* address for multicast mtrace msg */
  175: #define INADDR_ALLRTRS_GROUP	(u_int32)0xe0000002	/* 224.0.0.2 */
  176: #endif
  177: 
  178: #ifndef INADDR_MAX_LOCAL_GROUP
  179: define INADDR_MAX_LOCAL_GROUP        (u_int32)0xe00000ff     /* 224.0.0.255 */
  180: #endif
  181: 
  182: #define INADDR_ANY_N            (u_int32)0x00000000     /* INADDR_ANY in
  183: 							 * network order */
  184: #define CLASSD_PREFIX           (u_int32)0xe0000000     /* 224.0.0.0 */
  185: #define ALL_MCAST_GROUPS_ADDR   (u_int32)0xe0000000     /* 224.0.0.0 */
  186: #define ALL_MCAST_GROUPS_LENGTH 4
  187: 
  188: /* Used by DVMRP */
  189: #define DEFAULT_METRIC		1	/* default subnet/tunnel metric     */
  190: #define DEFAULT_THRESHOLD	1	/* default subnet/tunnel threshold  */
  191: 
  192: #define TIMER_INTERVAL		5	/* 5 sec virtual timer granularity  */
  193: 
  194: #ifdef RSRR
  195: #define BIT_ZERO(X)             ((X) = 0)
  196: #define BIT_SET(X,n)            ((X) |= 1 << (n))
  197: #define BIT_CLR(X,n)            ((X) &= ~(1 << (n)))
  198: #define BIT_TST(X,n)            ((X) & 1 << (n))
  199: #endif /* RSRR */
  200: 
  201: #ifdef SYSV
  202: #define bcopy(a, b, c)		memcpy((b), (a), (c))
  203: #define bzero(s, n)		memset((s), 0, (n))
  204: #define setlinebuf(s)		setvbuf((s), (NULL), (_IOLBF), 0)
  205: #define RANDOM()                lrand48()
  206: #else
  207: #define RANDOM()                random()
  208: #endif /* SYSV */
  209: 
  210: /*
  211:  * External declarations for global variables and functions.
  212:  */
  213: #define			RECV_BUF_SIZE 64*1024  /* Maximum buff size to send
  214: 					        * or receive packet */
  215: #define                 SO_RECV_BUF_SIZE_MAX 256*1024
  216: #define                 SO_RECV_BUF_SIZE_MIN 48*1024
  217: 
  218: /* TODO: describe the variables and clean up */
  219: extern char		*igmp_recv_buf;
  220: extern char		*igmp_send_buf;
  221: extern char		*pim_recv_buf;
  222: extern char		*pim_send_buf;
  223: extern int		igmp_socket;
  224: extern int		pim_socket;
  225: extern u_int32		allhosts_group;
  226: extern u_int32		allrouters_group;
  227: extern u_int32 		allpimrouters_group;
  228: extern vifbitmap_t      nbr_vifs;
  229: 
  230: #ifdef RSRR
  231: extern int              rsrr_socket;
  232: #endif /* RSRR */
  233: 
  234: extern u_long		virtual_time;
  235: extern char		configfilename[];
  236: 
  237: extern u_int32          default_source_metric;
  238: extern u_int32          default_source_preference;
  239: 
  240: extern srcentry_t 	*srclist;
  241: extern grpentry_t 	*grplist;
  242: 
  243: extern struct uvif	uvifs[MAXVIFS];
  244: extern vifi_t		numvifs;
  245: extern int              total_interfaces;
  246: extern int              phys_vif;
  247: extern int		udp_socket;
  248: 
  249: extern int		vifs_down;
  250: 
  251: extern char		s1[];
  252: extern char		s2[];
  253: extern char		s3[];
  254: extern char		s4[];
  255: 
  256: #if !((defined(BSD) && (BSD >= 199103)) || defined(linux))
  257: extern int		errno;
  258: extern int		sys_nerr;
  259: extern char *		sys_errlist[];
  260: #endif
  261: 
  262: 
  263: #ifndef IGMP_MEMBERSHIP_QUERY
  264: #define IGMP_MEMBERSHIP_QUERY		IGMP_HOST_MEMBERSHIP_QUERY
  265: #if !(defined(NetBSD))
  266: #define IGMP_V1_MEMBERSHIP_REPORT	IGMP_HOST_MEMBERSHIP_REPORT
  267: #define IGMP_V2_MEMBERSHIP_REPORT	IGMP_HOST_NEW_MEMBERSHIP_REPORT
  268: #else
  269: #define IGMP_V1_MEMBERSHIP_REPORT       IGMP_v1_HOST_MEMBERSHIP_REPORT
  270: #define IGMP_V2_MEMBERSHIP_REPORT       IGMP_v2_HOST_MEMBERSHIP_REPORT
  271: #endif
  272: #define IGMP_V2_LEAVE_GROUP		IGMP_HOST_LEAVE_MESSAGE
  273: #endif
  274: 
  275: #if defined(NetBSD)
  276: #define IGMP_MTRACE_RESP                IGMP_MTRACE_REPLY
  277: #define IGMP_MTRACE                     IGMP_MTRACE_QUERY
  278: #endif
  279: 
  280: /* For timeout. The timers count down */
  281: #define SET_TIMER(timer, value) (timer) = (value)
  282: #define RESET_TIMER(timer) (timer) = 0
  283: #define COPY_TIMER(timer_1, timer_2) (timer_2) = (timer_1)
  284: #define IF_TIMER_SET(timer) if ((timer) > 0)
  285: #define IF_TIMER_NOT_SET(timer) if ((timer) <= 0)
  286: #define FIRE_TIMER(timer)       (timer) = 0
  287: 
  288: /* XXX Timer will never decrement below 0 - does this work with age_routes? 
  289:  */
  290: #define IF_TIMEOUT(timer)		\
  291: 	if (!((timer) -= (MIN(timer, TIMER_INTERVAL))))
  292: 
  293: #define IF_NOT_TIMEOUT(timer)		\
  294: 	if ((timer) -= (MIN(timer, TIMER_INTERVAL)))
  295: 
  296: #define TIMEOUT(timer)			\
  297: 	(!((timer) -= (MIN(timer, TIMER_INTERVAL))))
  298: 
  299: #define NOT_TIMEOUT(timer)		\
  300: 	((timer) -= (MIN(timer, TIMER_INTERVAL)))
  301: 
  302: #if 0
  303: #define IF_TIMEOUT(value)     \
  304:   if (!(((value) >= TIMER_INTERVAL) && ((value) -= TIMER_INTERVAL)))
  305: 
  306: #define IF_NOT_TIMEOUT(value) \
  307:   if (((value) >= TIMER_INTERVAL) && ((value) -= TIMER_INTERVAL))
  308: 
  309: #define TIMEOUT(value)        \
  310:      (!(((value) >= TIMER_INTERVAL) && ((value) -= TIMER_INTERVAL)))
  311: 
  312: #define NOT_TIMEOUT(value)    \
  313:      (((value) >= TIMER_INTERVAL) && ((value) -= TIMER_INTERVAL))
  314: #endif /* 0 */
  315: 
  316: #define ELSE else           /* To make emacs cc-mode happy */      
  317: 
  318: 
  319: /*
  320:  * External function definitions
  321:  */
  322: 
  323: /* callout.c */
  324: extern void     callout_init      __P((void));
  325: extern void     free_all_callouts __P((void));
  326: extern void     age_callout_queue __P((int));
  327: extern int      timer_nextTimer   __P((void));
  328: extern int      timer_setTimer    __P((int, cfunc_t, void *));
  329: extern void     timer_clearTimer  __P((int));
  330: extern int      timer_leftTimer   __P((int));
  331: 
  332: /* config.c */
  333: extern void config_vifs_from_kernel __P(());
  334: extern void config_vifs_from_file   __P(());
  335: 
  336: /* debug.c */
  337: extern char     *packet_kind __P((u_int proto, u_int type, u_int code));
  338: extern int      debug_kind   __P((u_int proto, u_int type, u_int code));
  339: extern void     log          __P((int, int, char *, ...));
  340: extern int      log_level    __P((u_int proto, u_int type, u_int code));
  341: extern void     dump         __P((int i));
  342: extern void     fdump        __P((int i));
  343: extern void     cdump        __P((int i));
  344: extern void     dump_vifs    __P((FILE *fp));
  345: extern void     dump_pim_mrt __P((FILE *fp));
  346: 
  347: /* dvmrp_proto.c */
  348: extern void	dvmrp_accept_probe             __P((u_int32 src, u_int32 dst,
  349: 						    char *p, int datalen,
  350: 						    u_int32 level));
  351: extern void	dvmrp_accept_report            __P((u_int32 src, u_int32 dst,
  352: 						    char *p, int datalen,
  353: 						    u_int32 level));
  354: extern void	dvmrp_accept_info_request      __P((u_int32 src, u_int32 dst,
  355: 						    u_char *p, int datalen));
  356: extern void	dvmrp_accept_info_reply        __P((u_int32 src, u_int32 dst,
  357: 						    u_char *p, int datalen));
  358: extern void	dvmrp_accept_neighbors         __P((u_int32 src, u_int32 dst,
  359: 						    u_char *p, int datalen,
  360: 						    u_int32 level));
  361: extern void	dvmrp_accept_neighbors2        __P((u_int32 src, u_int32 dst,
  362: 						    u_char *p, int datalen,
  363: 						    u_int32 level));
  364: extern void	dvmrp_accept_prune             __P((u_int32 src, u_int32 dst,
  365: 						    char *p, int datalen));
  366: extern void	dvmrp_accept_graft             __P((u_int32 src, u_int32 dst,
  367: 						    char *p, int datalen));
  368: extern void	dvmrp_accept_g_ack             __P((u_int32 src, u_int32 dst,
  369: 						    char *p, int datalen));
  370: 
  371: /* igmp.c */
  372: extern void     init_igmp     __P(());
  373: extern void     send_igmp     __P((char *buf, u_int32 src, u_int32 dst,
  374: 				   int type, int code, u_int32 group,
  375: 				   int datalen));
  376: 
  377: /* igmp_proto.c */
  378: extern void     query_groups            __P((struct uvif *v));
  379: extern void     accept_membership_query __P((u_int32 src, u_int32 dst,
  380: 					     u_int32 group, int tmo));
  381: extern void     accept_group_report     __P((u_int32 src, u_int32 dst,
  382: 					     u_int32 group, int r_type));
  383: extern void     accept_leave_message    __P((u_int32 src, u_int32 dst,
  384: 					     u_int32 group));
  385: extern int      check_grp_membership    __P((struct uvif *v, u_int32 group));
  386: 
  387: /* inet.c */
  388: extern int      inet_cksum        __P((u_int16 *addr, u_int len));
  389: extern int      inet_valid_host   __P((u_int32 naddr));
  390: extern int      inet_valid_mask   __P((u_int32 mask));
  391: extern int      inet_valid_subnet __P((u_int32 nsubnet, u_int32 nmask));
  392: extern char    *inet_fmt          __P((u_int32, char *s));
  393: #ifdef NOSUCHDEF
  394: extern char    *inet_fmts         __P((u_int32 addr, u_int32 mask, char *s));
  395: #endif /* NOSUCHDEF */
  396: extern char    *netname           __P((u_int32 addr, u_int32 mask));
  397: extern u_int32  inet_parse        __P((char *s, int n));
  398: 
  399: /* kern.c */
  400: extern void     k_set_rcvbuf    __P((int socket, int bufsize, int minsize));
  401: extern void     k_hdr_include   __P((int socket, int bool));
  402: extern void     k_set_ttl       __P((int socket, int t));
  403: extern void     k_set_loop      __P((int socket, int l));
  404: extern void     k_set_if        __P((int socket, u_int32 ifa));
  405: extern void     k_join          __P((int socket, u_int32 grp, u_int32 ifa));
  406: extern void     k_leave         __P((int socket, u_int32 grp, u_int32 ifa));
  407: extern void     k_init_pim      __P(());
  408: extern void     k_stop_pim      __P(());
  409: extern int      k_del_mfc       __P((int socket, u_int32 source,
  410: 				     u_int32 group));
  411: extern int      k_chg_mfc       __P((int socket, u_int32 source,
  412: 				     u_int32 group, vifi_t iif,
  413: 				     vifbitmap_t oifs));
  414: extern void     k_add_vif       __P((int socket, vifi_t vifi, struct uvif *v));
  415: extern void     k_del_vif       __P((int socket, vifi_t vifi));
  416: extern int      k_get_vif_count __P((vifi_t vifi, struct vif_count *retval));
  417: extern int      k_get_sg_cnt    __P((int socket, u_int32 source,
  418: 				     u_int32 group, struct sg_count *retval));
  419: 
  420: /* main.c */
  421: extern int      register_input_handler __P((int fd, ihfunc_t func));
  422: 
  423: /* mrt.c */
  424: extern void         init_pim_mrt             __P(());
  425: extern mrtentry_t   *find_route              __P((u_int32 source,
  426: 						  u_int32 group,
  427: 						  u_int16 flags, char create));
  428: extern grpentry_t   *find_group              __P((u_int32 group));
  429: extern srcentry_t   *find_source             __P((u_int32 source));
  430: extern void         delete_mrtentry          __P((mrtentry_t *mrtentry_ptr));
  431: extern void         delete_srcentry          __P((srcentry_t *srcentry_ptr));
  432: extern void         delete_grpentry          __P((grpentry_t *grpentry_ptr));
  433: 
  434: /* pim.c */
  435: extern void         init_pim         __P(());
  436: extern void         send_pim         __P((char *buf, u_int32 src, u_int32 dst,
  437: 					  int type, int datalen));
  438: extern void         send_pim_unicast __P((char *buf, u_int32 src, u_int32 dst,
  439: 					  int type, int datalen));
  440: 
  441: /* pim_proto.c */
  442: extern int receive_pim_hello         __P((u_int32 src, u_int32 dst,
  443: 					  char *pim_message, int datalen));
  444: extern int send_pim_hello            __P((struct uvif *v, u_int16 holdtime));
  445: extern void delete_pim_nbr           __P((pim_nbr_entry_t *nbr_delete));
  446: extern int receive_pim_join_prune    __P((u_int32 src, u_int32 dst,
  447: 					  char *pim_message, int datalen));
  448: extern int send_pim_jp               __P((mrtentry_t *mrtentry_ptr, int action,
  449: 					  vifi_t vifi, u_int32 target_addr, 
  450: 					  u_int16 holdtime));
  451: extern int receive_pim_assert        __P((u_int32 src, u_int32 dst,
  452: 					  char *pim_message, int datalen));
  453: extern int send_pim_assert           __P((u_int32 source, u_int32 group,
  454: 					  vifi_t vifi,
  455: 					  u_int32 local_preference,
  456: 					  u_int32 local_metric));
  457: extern void delete_pim_graft_entry   __P((mrtentry_t *mrtentry_ptr));
  458: extern int receive_pim_graft         __P((u_int32 src, u_int32 dst, 
  459: 					  char *pim_message, int datalen,
  460: 					  int pimtype));
  461: extern int send_pim_graft            __P((mrtentry_t *mrtentry_ptr));
  462: 
  463: 
  464: /* route.c */
  465: extern int    set_incoming           __P((srcentry_t *srcentry_ptr,
  466: 					  int srctype));
  467: extern vifi_t get_iif                __P((u_int32 source));
  468: extern pim_nbr_entry_t *find_pim_nbr __P((u_int32 source));
  469: extern int    add_sg_oif             __P((mrtentry_t *mrtentry_ptr,
  470: 					  vifi_t vifi,
  471: 					  u_int16 holdtime,
  472: 					  int update_holdtime));
  473: extern void   add_leaf               __P((vifi_t vifi, u_int32 source,
  474: 					  u_int32 group));
  475: extern void   delete_leaf            __P((vifi_t vifi, u_int32 source,
  476: 					  u_int32 group));
  477: extern void   set_leaves             __P((mrtentry_t *mrtentry_ptr));
  478: extern int    change_interfaces      __P((mrtentry_t *mrtentry_ptr,
  479: 					  vifi_t new_iif,
  480: 					  vifbitmap_t new_pruned_oifs,
  481: 					  vifbitmap_t new_leaves_));
  482: extern void   calc_oifs              __P((mrtentry_t *mrtentry_ptr,
  483:                                        vifbitmap_t *oifs_ptr));
  484: extern void   process_kernel_call    __P(());
  485: extern int    delete_vif_from_mrt    __P((vifi_t vifi));
  486: extern void   trigger_join_alert     __P((mrtentry_t *mrtentry_ptr));
  487: extern void   trigger_prune_alert    __P((mrtentry_t *mrtentry_ptr));
  488: 
  489: 
  490: /* routesock.c */
  491: extern int    k_req_incoming         __P((u_int32 source,
  492: 					  struct rpfctl *rpfp));
  493: #ifdef HAVE_ROUTING_SOCKETS
  494: extern int    init_routesock         __P(());
  495: #endif /* HAVE_ROUTING_SOCKETS */
  496: 
  497: #ifdef RSRR
  498: #define gtable mrtentry
  499: #define RSRR_NOTIFICATION_OK        TRUE
  500: #define RSRR_NOTIFICATION_FALSE    FALSE
  501: 
  502: /* rsrr.c */
  503: extern void             rsrr_init        __P((void));
  504: extern void             rsrr_clean       __P((void));
  505: extern void             rsrr_cache_send  __P((struct gtable *, int));
  506: extern void             rsrr_cache_clean __P((struct gtable *));
  507: extern void             rsrr_cache_bring_up __P((struct gtable *));
  508: #endif /* RSRR */
  509: 
  510: /* timer.c */
  511: extern void init_timers                 __P(());
  512: extern void age_vifs                    __P(());
  513: extern void age_routes                  __P(());
  514: extern int  clean_srclist               __P(());
  515: 
  516: /* trace.c */
  517: /* u_int is promoted u_char */
  518: extern void	accept_mtrace            __P((u_int32 src, u_int32 dst,
  519: 					      u_int32 group, char *data,
  520: 					      u_int no, int datalen));
  521: extern void	accept_neighbor_request  __P((u_int32 src, u_int32 dst));
  522: extern void	accept_neighbor_request2 __P((u_int32 src, u_int32 dst));
  523: 
  524: /* vif.c */
  525: extern void    init_vifs               __P(());
  526: extern void    stop_all_vifs           __P(());
  527: extern void    check_vif_state         __P(());
  528: extern vifi_t  local_address           __P((u_int32 src));
  529: extern vifi_t  find_vif_direct         __P((u_int32 src));
  530: extern vifi_t  find_vif_direct_local   __P((u_int32 src));
  531: extern u_int32 max_local_address       __P((void));
  532: 

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