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>