/* * BIRD Internet Routing Daemon -- Protocols * * (c) 1998 Martin Mares * * Can be freely distributed and used under the terms of the GNU GPL. */ #ifndef _BIRD_PROTOCOL_H_ #define _BIRD_PROTOCOL_H_ #include "lib/lists.h" #include "lib/resource.h" struct iface; struct rte; struct neighbor; struct rtattr; /* * Routing Protocol */ struct protocol { char *name; unsigned type; /* ??? List values ??? */ unsigned debug; /* Default debugging flags */ void (*init)(struct protocol *); /* Boot time */ void (*preconfig)(struct protocol *); /* Just before configuring */ void (*postconfig)(struct protocol *); /* After configuring */ }; void protos_init(void); void protos_preconfig(void); void protos_postconfig(void); /* * Known protocols */ extern struct protocol proto_static; /* * Routing Protocol Instance */ struct proto { node n; struct protocol *proto; /* Protocol */ char *name; /* Name of this instance */ unsigned debug; /* Debugging flags */ pool *pool; /* Local objects */ unsigned preference; /* Default route preference */ void (*if_notify)(struct proto *, struct iface *new, struct iface *old); void (*rt_notify)(struct proto *, struct rte *new, struct rte *old); void (*neigh_lost_notify)(struct proto *, struct neighbor *neigh); void (*dump)(struct proto *); /* Debugging dump */ void (*start)(struct proto *); /* Start the instance */ void (*shutdown)(struct proto *, int time); /* Stop the instance */ int (*rta_same)(struct rtattr *, struct rtattr *); int (*rte_better)(struct rte *, struct rte *); /* Reconfigure function? */ /* Interface patterns */ /* Input/output filters */ /* Connection to routing tables? */ /* Hic sunt protocol-specific data */ }; void *proto_new(struct protocol *, unsigned size); extern list proto_list; #endif