Annotation of embedaddon/bird2/sysdep/unix/krt.h, revision 1.1.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>