Annotation of embedaddon/pimdd/defs.h, revision 1.1
1.1 ! misho 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.18 1998/12/22 21:50:17 kurtw 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>