Annotation of embedaddon/bird2/sysdep/unix/krt.h, revision 1.1
1.1 ! misho 1: /*
! 2: * BIRD -- UNIX Kernel Route Syncer
! 3: *
! 4: * (c) 1998--2000 Martin Mares <mj@ucw.cz>
! 5: *
! 6: * Can be freely distributed and used under the terms of the GNU GPL.
! 7: */
! 8:
! 9: #ifndef _BIRD_KRT_H_
! 10: #define _BIRD_KRT_H_
! 11:
! 12: struct config;
! 13: struct krt_config;
! 14: struct krt_proto;
! 15: struct kif_config;
! 16: struct kif_proto;
! 17:
! 18: #include "nest/iface.h"
! 19: #include "sysdep/config.h"
! 20: #include CONFIG_INCLUDE_KRTSYS_H
! 21:
! 22: /* Flags stored in net->n.flags, rest are in nest/route.h */
! 23:
! 24: #define KRF_VERDICT_MASK 0x0f
! 25: #define KRF_CREATE 0 /* Not seen in kernel table */
! 26: #define KRF_SEEN 1 /* Seen in kernel table during last scan */
! 27: #define KRF_UPDATE 2 /* Need to update this entry */
! 28: #define KRF_DELETE 3 /* Should be deleted */
! 29: #define KRF_IGNORE 4 /* To be ignored */
! 30:
! 31: #define KRT_DEFAULT_ECMP_LIMIT 16
! 32:
! 33: #define EA_KRT_SOURCE EA_CODE(PROTOCOL_KERNEL, 0)
! 34: #define EA_KRT_METRIC EA_CODE(PROTOCOL_KERNEL, 1)
! 35:
! 36: /* Whenever we recognize our own routes, we allow learing of foreign routes */
! 37:
! 38: #ifdef CONFIG_SELF_CONSCIOUS
! 39: #define KRT_ALLOW_LEARN
! 40: #endif
! 41:
! 42: /* krt.c */
! 43:
! 44: extern struct protocol proto_unix_kernel;
! 45:
! 46: struct krt_config {
! 47: struct proto_config c;
! 48: struct krt_params sys; /* Sysdep params */
! 49: btime scan_time; /* How often we re-scan routes */
! 50: int persist; /* Keep routes when we exit */
! 51: int learn; /* Learn routes from other sources */
! 52: int graceful_restart; /* Regard graceful restart recovery */
! 53: int merge_paths; /* Exported routes are merged for ECMP */
! 54: };
! 55:
! 56: struct krt_proto {
! 57: struct proto p;
! 58: struct krt_state sys; /* Sysdep state */
! 59:
! 60: #ifdef KRT_ALLOW_LEARN
! 61: struct rtable krt_table; /* Internal table of inherited routes */
! 62: #endif
! 63:
! 64: #ifndef CONFIG_ALL_TABLES_AT_ONCE
! 65: timer *scan_timer;
! 66: #endif
! 67:
! 68: node krt_node; /* Node in krt_proto_list */
! 69: byte af; /* Kernel address family (AF_*) */
! 70: byte ready; /* Initial feed has been finished */
! 71: byte initialized; /* First scan has been finished */
! 72: byte reload; /* Next scan is doing reload */
! 73: };
! 74:
! 75: extern pool *krt_pool;
! 76:
! 77: #define KRT_CF ((struct krt_config *)p->p.cf)
! 78:
! 79: #define KRT_TRACE(pr, fl, msg, args...) do { \
! 80: DBG("KRT: " msg "\n" , ## args); \
! 81: if (pr->p.debug & fl) \
! 82: { log(L_TRACE "%s: " msg, pr->p.name , ## args); } } while(0)
! 83:
! 84: struct proto_config * kif_init_config(int class);
! 85: void kif_request_scan(void);
! 86: void krt_got_route(struct krt_proto *p, struct rte *e);
! 87: void krt_got_route_async(struct krt_proto *p, struct rte *e, int new);
! 88:
! 89: /* Values for rte->u.krt_sync.src */
! 90: #define KRT_SRC_UNKNOWN -1 /* Nobody knows */
! 91: #define KRT_SRC_BIRD 0 /* Our route (not passed in async mode) */
! 92: #define KRT_SRC_REDIRECT 1 /* Redirect route, delete it */
! 93: #define KRT_SRC_ALIEN 2 /* Route installed by someone else */
! 94: #define KRT_SRC_KERNEL 3 /* Kernel routes, are ignored by krt syncer */
! 95:
! 96: extern struct protocol proto_unix_iface;
! 97:
! 98: struct kif_config {
! 99: struct proto_config c;
! 100: struct kif_params sys; /* Sysdep params */
! 101:
! 102: list iface_list; /* List of iface configs (struct kif_iface_config) */
! 103: btime scan_time; /* How often we re-scan interfaces */
! 104: };
! 105:
! 106: struct kif_iface_config {
! 107: struct iface_patt i;
! 108:
! 109: ip_addr pref_v4;
! 110: ip_addr pref_v6;
! 111: ip_addr pref_ll;
! 112: };
! 113:
! 114: struct kif_proto {
! 115: struct proto p;
! 116: struct kif_state sys; /* Sysdep state */
! 117: };
! 118:
! 119: extern struct kif_proto *kif_proto;
! 120:
! 121: #define KIF_CF ((struct kif_config *)p->p.cf)
! 122:
! 123: struct kif_iface_config * kif_get_iface_config(struct iface *iface);
! 124: struct proto_config * krt_init_config(int class);
! 125:
! 126:
! 127: /* krt sysdep */
! 128:
! 129: void krt_sys_io_init(void);
! 130: void krt_sys_init(struct krt_proto *);
! 131: int krt_sys_start(struct krt_proto *);
! 132: void krt_sys_shutdown(struct krt_proto *);
! 133: int krt_sys_reconfigure(struct krt_proto *p UNUSED, struct krt_config *n, struct krt_config *o);
! 134:
! 135: void krt_sys_preconfig(struct config *);
! 136: void krt_sys_postconfig(struct krt_config *);
! 137: void krt_sys_init_config(struct krt_config *);
! 138: void krt_sys_copy_config(struct krt_config *, struct krt_config *);
! 139:
! 140: int krt_capable(rte *e);
! 141: void krt_do_scan(struct krt_proto *);
! 142: void krt_replace_rte(struct krt_proto *p, net *n, rte *new, rte *old);
! 143: int krt_sys_get_attr(eattr *a, byte *buf, int buflen);
! 144:
! 145:
! 146: /* kif sysdep */
! 147:
! 148: void kif_sys_init(struct kif_proto *);
! 149: void kif_sys_start(struct kif_proto *);
! 150: void kif_sys_shutdown(struct kif_proto *);
! 151: int kif_sys_reconfigure(struct kif_proto *, struct kif_config *, struct kif_config *);
! 152:
! 153: void kif_sys_init_config(struct kif_config *);
! 154: void kif_sys_copy_config(struct kif_config *, struct kif_config *);
! 155:
! 156: void kif_do_scan(struct kif_proto *);
! 157:
! 158: int kif_update_sysdep_addr(struct iface *i);
! 159:
! 160: #endif
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>