This is rt_control.h in view mode; [Download] [Up]
/*
* $Header: /disk/d/src/devel/gated/dist/src/RCS/rt_control.h,v 2.1 92/02/24 14:12:57 jch Exp $
*/
/*%Copyright%*/
/************************************************************************
* *
* GateD, Release 2 *
* *
* Copyright (c) 1990,1991,1992 by Cornell University *
* All rights reserved. *
* *
* 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. *
* *
* Royalty-free licenses to redistribute GateD Release *
* 2 in whole or in part may be obtained by writing to: *
* *
* GateDaemon Project *
* Information Technologies/Network Resources *
* 143 Caldwell Hall *
* Cornell University *
* Ithaca, NY 14853-2602 *
* *
* GateD is based on Kirton's EGP, UC Berkeley's routing *
* daemon (routed), and DCN's HELLO routing Protocol. *
* Development of Release 2 has been supported by the *
* National Science Foundation. *
* *
* Please forward bug fixes, enhancements and questions to the *
* gated mailing list: gated-people@gated.cornell.edu. *
* *
* Authors: *
* *
* Jeffrey C Honig <jch@gated.cornell.edu> *
* Scott W Brim <swb@gated.cornell.edu> *
* *
*************************************************************************
* *
* Portions of this software may fall under the following *
* copyrights: *
* *
* Copyright (c) 1988 Regents of the University of California. *
* All rights reserved. *
* *
* Redistribution and use in source and binary forms are *
* permitted provided that the above copyright notice and *
* this paragraph are duplicated in all such forms 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 California, Berkeley. The name of the *
* University may not be used to endorse or promote *
* products derived from this software without specific *
* prior written permission. 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. *
* *
************************************************************************/
typedef struct _dest_mask {
sockaddr_un dm_dest;
sockaddr_un dm_mask;
} dest_mask;
/*
* Structure describing a gateway
*/
typedef struct _gw_entry {
struct _gw_entry *gw_next;
proto_t gw_proto; /* Protocol of this gateway */
sockaddr_un gw_addr; /* Address of this gateway */
flag_t gw_flags; /* Flags for this gateway */
time_t gw_time; /* Time this gateway was last heard from */
struct _adv_entry *gw_accept; /* What to accept from this gateway */
struct _adv_entry *gw_propagate; /* What to propagate to this gateway */
} gw_entry;
#define GWF_SOURCE 0x01 /* This is a source gateway */
#define GWF_TRUSTED 0x02 /* This is a trusted gateway */
#define GWF_ACCEPT 0x04 /* We accepted a packet from this gateway */
#define GWF_REJECT 0x08 /* We rejected a packet from this gateway */
#define GWF_QUERY 0x10 /* RIP query packet received */
/*
* Structure used for all control lists. Nested unions are used
* to minimize unused space.
*/
typedef struct _adv_entry {
struct _adv_entry *adv_next; /* Pointer to next entry in list */
flag_t adv_flag; /* Flags */
proto_t adv_proto; /* Protocol for this match */
union {
dest_mask advu_dm;
struct {
union {
gw_entry *advu_gwp; /* Match a gateway address */
struct _if_entry *advu_ifp; /* Match an interface */
as_t advu_as; /* Match an AS */
#ifdef notdef
pathmatch_t advu_path; /* Match on AS path */
#endif /* notdef */
} adv_s;
struct _adv_entry *advu_list; /* List of allowed sources */
} adv_us;
} adv_u;
#define adv_dm adv_u.advu_dm
#define adv_gwp adv_u.adv_us.adv_s.advu_gwp
#define adv_ifp adv_u.adv_us.adv_s.advu_ifp
#define adv_as adv_u.adv_us.adv_s.advu_as
#define adv_path adv_u.adv_us.adv_s.advu_path
#define adv_list adv_u.adv_us.advu_list
union {
metric_t advu_metric; /* Use this metric */
pref_t advu_preference; /* Use this preference */
} adv_v;
#define adv_metric adv_v.advu_metric
#define adv_preference adv_v.advu_preference
u_char adv_refcount; /* Number of references */
} adv_entry;
#define ADVF_TYPE 0x0f /* Type to match */
#define ADVF_TANY 0x00 /* No type specified */
#define ADVF_TGW 0x01 /* Match gateway address */
#define ADVF_TINTF 0x02 /* Match interface */
#define ADVF_TAS 0x03 /* Match on AS */
#define ADVF_TPATH 0x04 /* Match on AS path */
#define ADVF_TDM 0x05 /* Match on dest/mask pair */
#define ADVF_OTYPE 0xf0 /* Option type */
#define ADVF_OTNONE 0x00 /* No option specified */
#define ADVF_OTMETRIC 0x10 /* Metric option */
#define ADVF_OTPREFERENCE 0x20 /* Preference option */
#define ADVF_NO 0x1000 /* Negative (i.e. noannounce, nolisten, nopropogate) */
#define ADVF_FIRST 0x2000 /* First entry in a sequence (of gateways or interfaces) */
#define GW_LIST(list, gwp) for (gwp = list; gwp; gwp = gwp->gw_next)
#define GW_LISTEND
#define ADV_LIST(list, adv) for (adv = list; adv; adv = adv->adv_next)
#define ADV_LISTEND
#define INT_CONTROL(list, ifp) list ? list[ifp->int_index - 1] : NULL
extern adv_entry *martian_list;
extern unsigned int adv_n_allocated;
#ifdef USE_PROTOTYPES
extern void control_dump(FILE * fd);
extern void control_init(void);
extern void
control_accept_dump(FILE * fd,
int level,
adv_entry * proto_list,
adv_entry ** int_list,
gw_entry * gw_list);
extern void
control_propagate_dump(FILE * fd,
int level,
adv_entry * proto_list,
adv_entry ** int_list,
gw_entry * gw_list);
extern void
control_exterior_dump(FILE * fd,
int level,
void (*func) (),
adv_entry * list);
extern adv_entry *
control_exterior_locate(adv_entry * list,
as_t as);
extern int
is_valid_in(sockaddr_un * dst,
adv_entry * proto_list,
adv_entry * int_list,
adv_entry * gw_list,
int *preference);
extern int
propagate(struct _rt_entry * rt,
proto_t proto,
adv_entry * proto_list,
adv_entry * int_list,
adv_entry * gw_list,
metric_t * metric);
extern int is_martian(sockaddr_un * dst);
extern adv_entry *adv_alloc(flag_t flags, proto_t proto);
extern void adv_free_list(adv_entry * adv);
extern void
adv_cleanup(int *n_trusted,
int *n_source,
gw_entry * gw_list,
adv_entry ** accept_list,
adv_entry ** propagate_list,
adv_entry *** int_accept,
adv_entry *** int_propagate);
extern gw_entry *
gw_lookup(gw_entry ** list,
proto_t proto,
sockaddr_un * addr);
extern gw_entry *
gw_add(gw_entry ** list,
proto_t proto,
sockaddr_un * addr);
extern gw_entry *
gw_locate(gw_entry ** list,
proto_t proto,
sockaddr_un * addr);
extern gw_entry *
gw_timestamp(gw_entry ** list,
proto_t proto,
sockaddr_un * addr);
extern void
gw_dump(FILE * fd,
const char *name,
gw_entry * list);
#else /* USE_PROTOTYPES */
extern void control_dump();
extern void control_init();
extern void control_accept_dump();
extern void control_propagate_dump();
extern void control_exterior_dump();
extern adv_entry *control_exterior_locate();
extern int is_valid_in();
extern int propagate();
extern int propagate_as();
extern int is_martian();
extern adv_entry *adv_alloc(); /* Allocate an adv_entry */
extern void adv_free_list(); /* Free an adv_entry list */
extern void adv_cleanup(); /* Free all adv_entries for a protocol */
extern gw_entry *gw_lookup();
extern gw_entry *gw_add();
extern gw_entry *gw_locate();
extern gw_entry *gw_timestamp();
extern void gw_dump();
#endif /* USE_PROTOTYPES */
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.