diff options
author | Hajimu UMEMOTO <ume@FreeBSD.org> | 2001-06-03 18:16:39 +0000 |
---|---|---|
committer | Hajimu UMEMOTO <ume@FreeBSD.org> | 2001-06-03 18:16:39 +0000 |
commit | 2d754db7e62cc619317107412f081f3a75f87a3f (patch) | |
tree | 625024ec4937b272bc3d9c3fe50dc61fe124e7f4 /usr.sbin/pim6sd/mrt.h | |
parent | a98dc5e6a7e06f59f59bec80e3e56a71567d03ca (diff) |
Remove pim6[ds]d from the tree. The software had a restrictive license
than we can handle. pim6[ds]d are available as ports instead.
Notes
Notes:
svn path=/head/; revision=77659
Diffstat (limited to 'usr.sbin/pim6sd/mrt.h')
-rw-r--r-- | usr.sbin/pim6sd/mrt.h | 340 |
1 files changed, 0 insertions, 340 deletions
diff --git a/usr.sbin/pim6sd/mrt.h b/usr.sbin/pim6sd/mrt.h deleted file mode 100644 index 4aa428e1647a..000000000000 --- a/usr.sbin/pim6sd/mrt.h +++ /dev/null @@ -1,340 +0,0 @@ -/* - * Copyright (c) 1998 by the University of Southern California. - * All rights reserved. - * - * Permission to use, copy, modify, and distribute this software and - * its documentation in source and binary forms for lawful - * purposes and without fee is hereby granted, provided - * that the above copyright notice appear in all copies and that both - * the copyright notice and this permission notice appear in supporting - * documentation, and that any documentation, advertising materials, - * and other materials related to such distribution and use acknowledge - * that the software was developed by the University of Southern - * California and/or Information Sciences Institute. - * The name of the University of Southern California may not - * be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THE UNIVERSITY OF SOUTHERN CALIFORNIA DOES NOT MAKE ANY REPRESENTATIONS - * ABOUT THE SUITABILITY OF THIS SOFTWARE FOR ANY PURPOSE. THIS SOFTWARE IS - * PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, TITLE, AND - * NON-INFRINGEMENT. - * - * IN NO EVENT SHALL USC, OR ANY OTHER CONTRIBUTOR BE LIABLE FOR ANY - * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES, WHETHER IN CONTRACT, - * TORT, OR OTHER FORM OF ACTION, ARISING OUT OF OR IN CONNECTION WITH, - * THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Other copyrights might apply to parts of this software and are so - * noted when applicable. - */ -/* - * Questions concerning this software should be directed to - * Mickael Hoerdt (hoerdt@clarinet.u-strasbg.fr) LSIIT Strasbourg. - * - */ -/* - * This program has been derived from pim6dd. - * The pim6dd program is covered by the license in the accompanying file - * named "LICENSE.pim6dd". - */ -/* - * This program has been derived from pimd. - * The pimd program is covered by the license in the accompanying file - * named "LICENSE.pimd". - * - * $FreeBSD$ - */ - - -#ifndef MRT_H -#define MRT_H - -#include <sys/param.h> -#include <sys/time.h> -#include <sys/types.h> -#include <sys/socket.h> -#include <net/route.h> -#include <netinet/in.h> -#include <netinet/ip_mroute.h> -#include <netinet6/ip6_mroute.h> -#include <string.h> -#include "defs.h" - - -/* flags for the mrt entries */ - -#define MRTF_SPT 0x0001 /* iif toward source */ -#define MRTF_WC 0x0002 /* (*,G) entry */ -#define MRTF_RP 0x0004 /* iif toward RP */ -#define MRTF_NEW 0x0008 /* new created routing entry */ -#define MRTF_IIF_REGISTER 0x0020 /* ??? */ -#define MRTF_REGISTER 0x0080 /* ??? */ -#define MRTF_KERNEL_CACHE 0x0200 /* a mirror for the kernel cache */ -#define MRTF_NULL_OIF 0x0400 /* null oif cache.. ??? */ -#define MRTF_REG_SUPP 0x0800 /* register suppress ??? */ -#define MRTF_ASSERTED 0x1000 /* upstream is not that of src ??? */ -#define MRTF_SG 0x2000 /* (S,G) pure, not hanging off of (*,G)*/ -#define MRTF_PMBR 0x4000 /* (*,*,RP) entry (for interop) */ -#define MRTF_MFC_CLONE_SG 0x8000 /* clone (S,G) MFC from (*,G) or (*,*,RP) */ - -#define CREATE TRUE -#define DONT_CREATE FALSE - - -#define MFC_MOVE_FORCE 0x1 -#define MFC_UPDATE_FORCE 0x2 - - -/* Macro to duplicate oif info (oif bits, timers) */ - -#define VOIF_COPY(from , to ) \ - do { \ - IF_COPY(&from->joined_oifs , &to->joined_oifs); \ - IF_COPY(&from->oifs ,&to->oifs ); \ - IF_COPY(&from->leaves , &to->leaves); \ - IF_COPY(&from->pruned_oifs , &to->leaves ); \ - IF_COPY(&from->asserted_oifs ,&to->asserted_oifs); \ - bcopy(from->vif_timers , to->vif_timers , \ - numvifs*sizeof(from->vif_timers[0])); \ - bcopy(from->vif_deletion_delay , to->vif_deletion_delay , \ - numvifs*sizeof(from->vif_deletion_delay[0])); \ - } while (0) - - -#define FREE_MRTENTRY(mrtentry_ptr) \ - do { \ - kernel_cache_t *prev; \ - kernel_cache_t *next; \ - \ - free( (char *)( (mrtentry_ptr)->vif_timers ) ); \ - free( (char *)( (mrtentry_ptr)->vif_deletion_delay ) ); \ - for( next=(mrtentry_ptr)->kernel_cache ; next!=(kernel_cache_t *)NULL ; ) \ - { \ - prev=next; \ - next=next->next; \ - free(prev); \ - } \ - free( (char *)( (mrtentry_ptr)->kernel_cache ) ); \ - free( (char *)(mrtentry_ptr) ); \ - } while (0) - - -/* - * The complicated structure used by the more complicated Join/Prune - * message building - */ - - -typedef struct build_jp_message { - struct build_jp_message *next; /* Used to chain the free entries */ - u_int8 *jp_message; /* The Join/Prune message */ - u_int32 jp_message_size; /* Size of the Join/Prune message (in bytes) */ - u_int16 holdtime; /* Join/Prune message holdtime field */ - struct sockaddr_in6 curr_group; /* Current group address */ - u_int8 curr_group_msklen; /* Current group masklen */ - u_int8 *join_list; /* The working area for the join addresses */ - u_int32 join_list_size; /* The size of the join_list (in bytes) */ - u_int16 join_addr_number; /* Number of the join addresses in join_list */ - u_int8 *prune_list; /* The working area for the prune addresses */ - u_int32 prune_list_size; /* The size of the prune_list (in bytes) */ - u_int16 prune_addr_number; /* Number of the prune addresses in prune_list*/ - u_int8 *rp_list_join; /* The working area for RP join addresses */ - u_int32 rp_list_join_size; /* The size of the rp_list_join (in bytes) */ - u_int16 rp_list_join_number; /* Number of RP addresses in rp_list_join */ - u_int8 *rp_list_prune; /* The working area for RP prune addresses */ - u_int32 rp_list_prune_size; /* The size of the rp_list_prune (in bytes) */ - u_int16 rp_list_prune_number; /* Number of RP addresses in rp_list_prune */ - u_int8 *num_groups_ptr; /* Pointer to number_of_groups in jp_message */ -} build_jp_message_t; - - -typedef struct pim_nbr_entry { - struct pim_nbr_entry *next; /* link to next neighbor */ - struct pim_nbr_entry *prev; /* link to prev neighbor */ - struct sockaddr_in6 address; /* neighbor address */ - vifi_t vifi; /* which interface */ - u_int16 timer; /* for timing out neighbor */ - build_jp_message_t *build_jp_message; /* A structure for fairly - * complicated Join/Prune - * message construction. - */ - -} pim_nbr_entry_t; - -typedef struct srcentry { - struct srcentry *next; /* link to next entry */ - struct srcentry *prev; /* link to prev entry */ - struct sockaddr_in6 address; /* source or RP address */ - struct mrtentry *mrtlink; /* link to routing entries */ - vifi_t incoming; /* incoming vif */ - struct pim_nbr_entry *upstream; /* upstream router */ - u_int32 metric; /* Unicast Routing Metric to the source */ - u_int32 preference; /* The metric preference (for assers)*/ - u_int16 timer; /* Entry timer??? Delete? */ - struct cand_rp *cand_rp; /* Used if this is rpentry_t */ -} srcentry_t; -typedef srcentry_t rpentry_t; - -/* (RP<->group) matching table related structures */ - -typedef struct cand_rp { - struct cand_rp *next; /* Next candidate RP */ - struct cand_rp *prev; /* Previous candidate RP */ - struct rp_grp_entry *rp_grp_next; /* The rp_grp_entry chain for that RP*/ - rpentry_t *rpentry; /* Pointer to the RP entry */ -} cand_rp_t; - -typedef struct grp_mask { - struct grp_mask *next; - struct grp_mask *prev; - struct rp_grp_entry *grp_rp_next; - struct sockaddr_in6 group_addr; - struct in6_addr group_mask; - struct in6_addr hash_mask; - u_int16 fragment_tag; /* Used for garbage collection */ - u_int8 group_rp_number; /* Used when assembling segments */ -} grp_mask_t; - -typedef struct rp_grp_entry { - struct rp_grp_entry *rp_grp_next; /* Next entry for same RP */ - struct rp_grp_entry *rp_grp_prev; /* Prev entry for same RP */ - struct rp_grp_entry *grp_rp_next; /* Next entry for same grp prefix */ - struct rp_grp_entry *grp_rp_prev; /* Prev entry for same grp prefix */ - struct grpentry *grplink; /* Link to all grps via this entry*/ - u_int16 advholdtime; /* The advertised holdtime */ - u_int16 holdtime; /* The RP holdtime (will be aged) */ - u_int16 fragment_tag; /* The fragment tag from the - * received BSR message - */ - - u_int8 priority; /* The RP priority */ - grp_mask_t *group; /* Pointer to (group,mask) entry */ - cand_rp_t *rp; /* Pointer to the RP */ -} rp_grp_entry_t; - -typedef struct grpentry { - struct grpentry *next; /* link to next entry */ - struct grpentry *prev; /* link to prev entry */ - struct grpentry *rpnext; /* next grp for the same RP */ - struct grpentry *rpprev; /* prev grp for the same RP */ - struct sockaddr_in6 group; /* subnet group of multicasts */ - struct sockaddr_in6 rpaddr; /* The IPv6 address of the RP */ - struct mrtentry *mrtlink; /* link to (S,G) routing entries */ - rp_grp_entry_t *active_rp_grp; /* Pointer to the active rp_grp entry*/ - struct mrtentry *grp_route; /* Pointer to the (*,G) routing entry*/ -} grpentry_t; - -typedef struct mrtentry { - struct mrtentry *grpnext; /* next entry of same group */ - struct mrtentry *grpprev; /* prev entry of same group */ - struct mrtentry *srcnext; /* next entry of same source */ - struct mrtentry *srcprev; /* prev entry of same source */ - struct grpentry *group; /* pointer to group entry */ - struct srcentry *source; /* pointer to source entry (or RP) */ - vifi_t incoming; /* the iif (either toward S or RP) */ - if_set oifs; /* The current result oifs */ - if_set joined_oifs; /* The joined oifs (Join received) */ - if_set pruned_oifs; /* The pruned oifs (Prune received) */ - if_set asserted_oifs; /* The asserted oifs (lost Assert) */ - if_set leaves; /* Has directly connected members */ - struct pim_nbr_entry *upstream; /* upstream router, needed because - * of the asserts it may be different - * than the source (or RP) upstream - * router. - */ - - u_int32 metric; /* Routing Metric for this entry */ - u_int32 preference; /* The metric preference value */ - struct sockaddr_in6 pmbr_addr; /* The PMBR address (for interop) */ - u_int16 *vif_timers; /* vifs timer list */ - u_int16 *vif_deletion_delay; /* vifs deletion delay list */ - - u_int16 flags; /* The MRTF_* flags */ - u_int16 timer; /* entry timer */ - u_int16 jp_timer; /* The Join/Prune timer */ - u_int16 rs_timer; /* Register-Suppression Timer */ - u_int assert_timer; - u_int assert_rate_timer; - struct kernel_cache *kernel_cache; /* List of the kernel cache entries */ -#ifdef RSRR - struct rsrr_cache *rsrr_cache; /* Used to save RSRR requests for - * routes change notification. - */ -#endif /* RSRR */ - -} mrtentry_t; - - -/* - * Used to get forwarded data related counts (number of packet, number of - * bits, etc) - */ - -struct sg_count { - u_quad_t pktcnt; /* Number of packets for (s,g) */ - u_quad_t bytecnt; /* Number of bytes for (s,g) */ - u_quad_t wrong_if; /* Number of packets received on wrong iif for (s,g) */ -}; - -/* - * Structure to keep track of existing (S,G) MFC entries in the kernel - * for particular (*,G) or (*,*,RP) entry. We must keep track for - * each active source which doesn't have (S,G) entry in the daemon's - * routing table. We need to keep track of such sources for two reasons: - * - * (1) If the kernel does not support (*,G) MFC entries (currently, the - * "official" mcast code doesn't), we must know all installed (s,G) entries - * in the kernel and modify them if the iif or oif for the (*,G) changes. - * - * (2) By checking periodically the traffic coming from the shared tree, - * we can either delete the idle sources or switch to the shortest path. - * - * Note that even if we have (*,G) implemented in the kernel, we still - * need to have this structure because of (2) - */ - - -typedef struct kernel_cache { - struct kernel_cache *next; - struct kernel_cache *prev; - struct sockaddr_in6 source; - struct sockaddr_in6 group; - struct sg_count sg_count; /* The (s,g) data retated counters (see above) */ -} kernel_cache_t; - -struct vif_count { - u_long icount; /* Input packet count on vif */ - u_long ocount; /* Output packet count on vif */ - u_long ibytes; /* Input byte count on vif */ - u_long obytes; /* Output byte count on vif */ -}; - -/* globals and functions exportations */ - -extern srcentry_t *srclist; -extern grpentry_t *grplist; - -extern void init_pim6_mrt __P((void)); -extern mrtentry_t *find_route __P((struct sockaddr_in6 *source, - struct sockaddr_in6 *group, - u_int16 flags, char create)); -extern grpentry_t *find_group __P((struct sockaddr_in6 *group)); -extern srcentry_t *find_source __P((struct sockaddr_in6 *source)); -extern void delete_mrtentry __P((mrtentry_t *mrtentry_ptr)); -extern void delete_srcentry __P((srcentry_t *srcentry_ptr)); -extern void delete_grpentry __P((grpentry_t *grpentry_ptr)); -extern void delete_mrtentry_all_kernel_cache __P((mrtentry_t *mrtentry_ptr)); -extern void delete_single_kernel_cache __P((mrtentry_t *mrtentry_ptr, - kernel_cache_t *kernel_cache_ptr)); -extern void delete_single_kernel_cache_addr __P((mrtentry_t *mrtentry_ptr, - struct sockaddr_in6 *source, - struct sockaddr_in6 *group)); -extern void add_kernel_cache __P((mrtentry_t *mrtentry_ptr, - struct sockaddr_in6 *source, struct sockaddr_in6 *group, - u_int16 flags)); - - -#endif |