diff options
author | wollman <wollman@FreeBSD.org> | 1994-09-08 00:26:13 +0000 |
---|---|---|
committer | wollman <wollman@FreeBSD.org> | 1994-09-08 00:26:13 +0000 |
commit | 21876867d877dec1bf967dcd74dcfdd83a3ab69e (patch) | |
tree | ac5b66ecd661537969bffb9c43349152a182dd2c /usr.sbin/mrouted/prune.h | |
download | FreeBSD-src-21876867d877dec1bf967dcd74dcfdd83a3ab69e.zip FreeBSD-src-21876867d877dec1bf967dcd74dcfdd83a3ab69e.tar.gz |
mrouted from multicast 3.3 distribution
Diffstat (limited to 'usr.sbin/mrouted/prune.h')
-rw-r--r-- | usr.sbin/mrouted/prune.h | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/usr.sbin/mrouted/prune.h b/usr.sbin/mrouted/prune.h new file mode 100644 index 0000000..3cce25e --- /dev/null +++ b/usr.sbin/mrouted/prune.h @@ -0,0 +1,123 @@ +/* + * The mrouted program is covered by the license in the accompanying file + * named "LICENSE". Use of the mrouted program represents acceptance of + * the terms and conditions listed in that file. + * + * The mrouted program is COPYRIGHT 1989 by The Board of Trustees of + * Leland Stanford Junior University. + * + * + * $Id: prune.h,v 1.3 1994/08/24 23:54:40 thyagara Exp $ + */ + +/* + * Macro for copying the user-level cache table to the kernel + * level table variable passed on by the setsock option + */ + +#define COPY_TABLES(from, to) { \ + register u_int _i; \ + (to).mfcc_origin.s_addr = (from)->kt_origin; \ + (to).mfcc_mcastgrp.s_addr = (from)->kt_mcastgrp; \ + (to).mfcc_originmask.s_addr = (from)->kt_originmask; \ + (to).mfcc_parent = (from)->kt_parent; \ + for (_i = 0; _i < numvifs; _i++) \ + (to).mfcc_ttls[_i] = (from)->kt_ttls[_i]; \ +}; + + +/* + * User level Kernel Cache Table structure + * + * A copy of the kernel table is kept at the user level. Modifications are + * made to this table and then passed on to the kernel. A timeout value is + * an extra field in the user level table. + * + */ +struct ktable +{ + struct ktable *kt_next; /* pointer to the next entry */ + u_long kt_origin; /* subnet origin of multicasts */ + u_long kt_mcastgrp; /* multicast group associated */ + u_long kt_originmask; /* subnet mask for origin */ + vifi_t kt_parent; /* incoming vif */ + u_long kt_gateway; /* upstream router */ + vifbitmap_t kt_children; /* outgoing children vifs */ + vifbitmap_t kt_leaves; /* subset of outgoing children vifs */ + vifbitmap_t kt_scope; /* scoped interfaces */ + u_char kt_ttls[MAXVIFS]; /* ttl vector for forwarding */ + vifbitmap_t kt_grpmems; /* forw. vifs for src, grp */ + int kt_timer; /* for timing out entry in cache */ + struct prunlst *kt_rlist; /* router list nghboring this rter */ + u_short kt_prun_count; /* count of total no. of prunes */ + int kt_prsent_timer; /* prune lifetime timer */ + u_int kt_grftsnt; /* graft sent upstream */ +}; + +/* + * structure to store incoming prunes + */ +struct prunlst +{ + struct prunlst *rl_next; + u_long rl_router; + u_long rl_router_subnet; + vifi_t rl_vifi; + int rl_timer; +}; + +struct tr_query { + u_long tr_src; /* traceroute source */ + u_long tr_dst; /* traceroute destination */ + u_long tr_raddr; /* traceroute response address */ + struct { + u_int ttl : 8; /* traceroute response ttl */ + u_int qid : 24; /* traceroute query id */ + } q; +} tr_query; + +#define tr_rttl q.ttl +#define tr_qid q.qid + +struct tr_resp { + u_long tr_qarr; /* query arrival time */ + u_long tr_inaddr; /* incoming interface address */ + u_long tr_outaddr; /* outgoing interface address */ + u_long tr_rmtaddr; /* parent address in source tree */ + u_long tr_vifin; /* input packet count on interface */ + u_long tr_vifout; /* output packet count on interface */ + u_long tr_pktcnt; /* total incoming packets for src-grp */ + u_char tr_rproto; /* routing protocol deployed on router */ + u_char tr_fttl; /* ttl required to forward on outvif */ + u_char tr_smask; /* subnet mask for src addr */ + u_char tr_rflags; /* forwarding error codes */ +} tr_resp; + +/* defs within mtrace */ +#define QUERY 1 +#define RESP 2 +#define QLEN sizeof(struct tr_query) +#define RLEN sizeof(struct tr_resp) + +/* fields for tr_rflags (forwarding error codes) */ +#define TR_NO_ERR 0x0 +#define TR_WRONG_IF 0x1 +#define TR_PRUNED 0x2 +#define TR_SCOPED 0x4 +#define TR_NO_RTE 0x5 + +/* fields for tr_rproto (routing protocol) */ +#define PROTO_DVMRP 0x1 +#define PROTO_MOSPF 0x2 +#define PROTO_PIM 0x3 +#define PROTO_CBT 0x4 + +#define MASK_TO_VAL(x, i) { \ + (i) = 0; \ + while ((x) << (i)) \ + (i)++; \ + } + +#define VAL_TO_MASK(x, i) { \ + x = ~((1 << (32 - (i))) - 1); \ + } |