Annotation of embedaddon/bird2/proto/mrt/mrt.h, revision 1.1

1.1     ! misho       1: /*
        !             2:  *     BIRD -- Multi-Threaded Routing Toolkit (MRT) Protocol
        !             3:  *
        !             4:  *     (c) 2017--2018 Ondrej Zajicek <santiago@crfreenet.org>
        !             5:  *     (c) 2017--2018 CZ.NIC z.s.p.o.
        !             6:  *
        !             7:  *     Can be freely distributed and used under the terms of the GNU GPL.
        !             8:  */
        !             9: 
        !            10: #ifndef _BIRD_MRT_H_
        !            11: #define _BIRD_MRT_H_
        !            12: 
        !            13: #include "nest/bird.h"
        !            14: #include "nest/protocol.h"
        !            15: #include "lib/lists.h"
        !            16: #include "nest/route.h"
        !            17: #include "lib/event.h"
        !            18: #include "lib/hash.h"
        !            19: 
        !            20: 
        !            21: struct mrt_config {
        !            22:   struct proto_config c;
        !            23: 
        !            24:   struct rtable_config *table_cf;
        !            25:   const char *table_expr;
        !            26:   const struct filter *filter;
        !            27:   const char *filename;
        !            28:   uint period;
        !            29:   int always_add_path;
        !            30: };
        !            31: 
        !            32: struct mrt_proto {
        !            33:   struct proto p;
        !            34:   timer *timer;
        !            35:   event *event;
        !            36: 
        !            37:   struct mrt_target *file;
        !            38:   struct mrt_table_dump_state *table_dump;
        !            39: };
        !            40: 
        !            41: struct mrt_dump_data {
        !            42:   const char *table_expr;
        !            43:   struct rtable *table_ptr;
        !            44:   const struct filter *filter;
        !            45:   char *filename;
        !            46: };
        !            47: 
        !            48: struct mrt_peer_entry {
        !            49:   u32 index;
        !            50:   u32 peer_id;
        !            51:   u32 peer_as;
        !            52:   ip_addr peer_ip;
        !            53:   struct mrt_peer_entry *next;
        !            54: };
        !            55: 
        !            56: struct mrt_table_dump_state {
        !            57:   struct mrt_proto *proto;             /* Protocol for regular MRT dumps (or NULL) */
        !            58:   struct cli *cli;                     /* CLI for irregular MRT dumps (or NULL) */
        !            59:   struct config *config;               /* Config valid during start of dump, locked */
        !            60: 
        !            61:                                        /* Configuration information */
        !            62:   const char *table_expr;              /* Wildcard for table name (or NULL) */
        !            63:   struct rtable *table_ptr;            /* Explicit table (or NULL) */
        !            64:   const struct filter *filter;         /* Optional filter */
        !            65:   const char *filename;                        /* Filename pattern */
        !            66:   int always_add_path;                 /* Always use *_ADDPATH message subtypes */
        !            67: 
        !            68:   /* Allocated by mrt_table_dump_init() */
        !            69:   pool *pool;                          /* Pool for table dump */
        !            70:   linpool *linpool;                    /* Temporary linear pool */
        !            71:   linpool *peer_lp;                    /* Linear pool for peer entries in peer_hash */
        !            72:   buffer buf;                          /* Buffer for MRT messages */
        !            73: 
        !            74:   HASH(struct mrt_peer_entry) peer_hash; /* Hash for peers to find the index */
        !            75: 
        !            76:   struct rtable *table;                        /* Processed table, NULL initially */
        !            77:   struct fib_iterator fit;             /* Iterator in processed table */
        !            78:   int table_open;                      /* Whether iterator is linked */
        !            79: 
        !            80:   int ipv4;                            /* Processed table is IPv4 */
        !            81:   int add_path;                                /* Current message subtype is *_ADDPATH */
        !            82:   int want_add_path;                   /* Want *_ADDPATH message later */
        !            83:   int max;                             /* Decreasing counter of dumped routes */
        !            84:   u32 seqnum;                          /* MRT message sequence number */
        !            85:   btime time_offset;                   /* Time offset between monotonic and real time */
        !            86:   struct bgp_write_state *bws;         /*   */
        !            87: 
        !            88:   u16 peer_count;                      /* Number of peers */
        !            89:   u32 peer_count_offset;               /* Buffer offset to store peer_count later */
        !            90:   u16 entry_count;                     /* Number of RIB Entries */
        !            91:   u32 entry_count_offset;              /* Buffer offset to store entry_count later */
        !            92: 
        !            93:   struct rfile *file;                  /* tracking for mrt table dump file */
        !            94:   int fd;
        !            95: };
        !            96: 
        !            97: struct mrt_bgp_data {
        !            98:   uint peer_as;
        !            99:   uint local_as;
        !           100:   uint index;
        !           101:   uint af;
        !           102:   ip_addr peer_ip;
        !           103:   ip_addr local_ip;
        !           104:   byte *message;
        !           105:   uint msg_len;
        !           106:   uint old_state;
        !           107:   uint new_state;
        !           108:   u8 as4;
        !           109:   u8 add_path;
        !           110: };
        !           111: 
        !           112: 
        !           113: #define MRT_HDR_LENGTH         12      /* MRT Timestamp + MRT Type + MRT Subtype + MRT Load Length */
        !           114: #define MRT_PEER_TYPE_32BIT_ASN        2       /* MRT Table Dump: Peer Index Table: Peer Type: Use 32bit ASN */
        !           115: #define MRT_PEER_TYPE_IPV6     1       /* MRT Table Dump: Peer Index Table: Peer Type: Use IPv6 IP Address */
        !           116: 
        !           117: #define MRT_ATTR_BUFFER_SIZE   65536
        !           118: 
        !           119: /* MRT Types */
        !           120: #define MRT_TABLE_DUMP_V2      13
        !           121: #define MRT_BGP4MP             16
        !           122: 
        !           123: /* MRT Table Dump v2 Subtypes */
        !           124: #define MRT_PEER_INDEX_TABLE           1
        !           125: #define MRT_RIB_IPV4_UNICAST           2
        !           126: #define MRT_RIB_IPV4_MULTICAST         3
        !           127: #define MRT_RIB_IPV6_UNICAST           4
        !           128: #define MRT_RIB_IPV6_MULTICAST                 5
        !           129: #define MRT_RIB_GENERIC                        6
        !           130: #define MRT_RIB_IPV4_UNICAST_ADDPATH   8
        !           131: #define MRT_RIB_IPV4_MULTICAST_ADDPATH 9
        !           132: #define MRT_RIB_IPV6_UNICAST_ADDPATH   10
        !           133: #define MRT_RIB_IPV6_MULTICAST_ADDPATH         11
        !           134: #define MRT_RIB_GENERIC_ADDPATH                12
        !           135: 
        !           136: /* MRT BGP4MP Subtypes */
        !           137: #define MRT_BGP4MP_MESSAGE             1
        !           138: #define MRT_BGP4MP_MESSAGE_AS4         4
        !           139: #define MRT_BGP4MP_STATE_CHANGE_AS4    5
        !           140: #define MRT_BGP4MP_MESSAGE_LOCAL       6
        !           141: #define MRT_BGP4MP_MESSAGE_AS4_LOCAL   7
        !           142: #define MRT_BGP4MP_MESSAGE_ADDPATH     8
        !           143: #define MRT_BGP4MP_MESSAGE_AS4_ADDPATH 9
        !           144: #define MRT_BGP4MP_MESSAGE_LOCAL_ADDPATH       10
        !           145: #define MRT_BGP4MP_MESSAGE_AS4_LOCAL_ADDPATH   11
        !           146: 
        !           147: 
        !           148: #ifdef CONFIG_MRT
        !           149: void mrt_dump_cmd(struct mrt_dump_data *d);
        !           150: void mrt_dump_bgp_message(struct mrt_bgp_data *d);
        !           151: void mrt_dump_bgp_state_change(struct mrt_bgp_data *d);
        !           152: void mrt_check_config(struct proto_config *C);
        !           153: #else
        !           154: static inline void mrt_dump_bgp_message(struct mrt_bgp_data *d UNUSED) { }
        !           155: static inline void mrt_dump_bgp_state_change(struct mrt_bgp_data *d UNUSED) { }
        !           156: #endif
        !           157: 
        !           158: #endif /* _BIRD_MRT_H_ */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>