summaryrefslogtreecommitdiff
path: root/proto/bmp/bmp.h
diff options
context:
space:
mode:
Diffstat (limited to 'proto/bmp/bmp.h')
-rw-r--r--proto/bmp/bmp.h110
1 files changed, 43 insertions, 67 deletions
diff --git a/proto/bmp/bmp.h b/proto/bmp/bmp.h
index 19623e33..2d700c25 100644
--- a/proto/bmp/bmp.h
+++ b/proto/bmp/bmp.h
@@ -35,118 +35,94 @@ struct bmp_config {
struct proto_config c;
const char *sys_descr; // sysDescr MIB-II [RFC1213] object
const char *sys_name; // sysName MIB-II [RFC1213] object
+ ip_addr local_addr; // Local IP address
ip_addr station_ip; // Monitoring station address
u16 station_port; // Monitoring station TCP port
bool monitoring_rib_in_pre_policy; // Route monitoring pre-policy Adj-Rib-In
- bool monitoring_rib_in_post_policy; // Route monitoring post-policy Adj-Rib-In
- bool monitoring_rib_local; // Route monitoring Local Rib
+ bool monitoring_rib_in_post_policy; // Route monitoring post-policy Adj-Rib-In
};
/* Forward declarations */
struct bgp_proto;
struct bmp_proto;
-// Stores sent and received BGP OPEN MSGs
-struct bmp_peer_open_msg {
- struct bmp_peer_map tx_msg;
- struct bmp_peer_map rx_msg;
-};
-
-// Keeps necessary information during composing BGP UPDATE MSG which is going
-// to be sent to the BMP collector
-struct rt_table_info {
- list update_msg_queue; // Stores all composed BGP UPDATE MSGs
- size_t update_msg_size; // Size of all BGP UPDATE MSGs
- struct timeval update_begin_time; // Keeps timestamp of starting BGP UPDATE MSGs composing
- bool update_in_progress; // Holds information whether composing process is still in progress
-};
-
struct bmp_proto {
struct proto p; // Parent proto
const struct bmp_config *cf; // Shortcut to BMP configuration
+ node bmp_node; // Node in bmp_proto_list
+
+ HASH(struct bmp_peer) peer_map;
+ HASH(struct bmp_stream) stream_map;
+ HASH(struct bmp_table) table_map;
+
sock *sk; // TCP connection
- event *tx_ev; // TX event
+ event *tx_ev; // TX event
+ event *update_ev; // Update event
char sys_descr[MIB_II_STR_LEN]; // sysDescr MIB-II [RFC1213] object
char sys_name[MIB_II_STR_LEN]; // sysName MIB-II [RFC1213] object
+ ip_addr local_addr; // Source local IP address
ip_addr station_ip; // Monitoring station IP address
u16 station_port; // Monitoring station TCP port
struct monitoring_rib monitoring_rib;
// Below fields are for internal use
- struct bmp_peer_map bgp_peers; // Stores 'bgp_proto' structure per BGP peer
- struct bmp_peer_open_msg peer_open_msg; // Stores sent and received BGP OPEN MSG per BGP peer
+ // struct bmp_peer_map bgp_peers; // Stores 'bgp_proto' structure per BGP peer
pool *buffer_mpool; // Memory pool used for BMP buffer allocations
pool *map_mem_pool; // Memory pool used for BMP map allocations
pool *tx_mem_pool; // Memory pool used for packet allocations designated to BMP collector
pool *update_msg_mem_pool; // Memory pool used for BPG UPDATE MSG allocations
list tx_queue; // Stores queued packets going to be sent
timer *connect_retry_timer; // Timer for retrying connection to the BMP collector
- struct rt_table_info rt_table_in_pre_policy; // Pre-policy route import table
+ list update_msg_queue; // Stores all composed BGP UPDATE MSGs
bool started; // Flag that stores running status of BMP instance
+ int sock_err; // Last socket error code
};
+struct bmp_peer {
+ struct bgp_proto *bgp;
+ struct bmp_peer *next;
+ list streams;
+};
-#ifdef CONFIG_BMP
+struct bmp_stream {
+ node n;
+ struct bgp_proto *bgp;
+ u32 key;
+ bool sync;
+ struct bmp_stream *next;
+ struct bmp_table *table;
+ struct bgp_channel *sender;
+};
-/**
- * bmp_put_sent_bgp_open_msg - save sent BGP OPEN msg packet in BMP implementation.
- * NOTE: If there has been passed sent and received BGP OPEN MSGs to the BMP
- * implementation, then there is going to be send BMP Peer Up Notification
- * message to the BMP collector.
- */
-void
-bmp_put_sent_bgp_open_msg(const struct bgp_proto *bgp, const byte* pkt,
- const size_t pkt_size);
+struct bmp_table {
+ struct rtable *table;
+ struct bmp_table *next;
+ struct channel *channel;
+ u32 uc;
+};
-/**
- * bmp_put_recv_bgp_open_msg - save received BGP OPEN msg packet in BMP implementation.
- * NOTE: If there has been passed sent and received BGP OPEN MSGs to the BMP
- * implementation, then there is going to be send BMP Peer Up Notification
- * message to the BMP collector.
- */
-void
-bmp_put_recv_bgp_open_msg(const struct bgp_proto *bgp, const byte* pkt,
- const size_t pkt_size);
+
+#ifdef CONFIG_BMP
/**
- * The following 4 functions create BMP Route Monitoring message based on
- * pre-policy Adj-RIB-In. Composing Route Monitoring message consist of few
- * stages. First of all call bmp_route_monitor_update_in_pre_begin() in order
- * to start composing message. As a second step, call
- * bmp_route_monitor_put_update_in_pre_msg() in order to save BGP UPDATE msg.
- * As a third step call bmp_route_monitor_update_in_pre_commit() in order to
- * send BMP Route Monitoring message to the BMP collector. As a last step,
- * call bmp_route_monitor_update_in_pre_end() in order to release resources.
+ * bmp_peer_up - send notification that BGP peer connection is established
*/
void
-bmp_route_monitor_update_in_pre_begin(void);
-
-void
-bmp_route_monitor_put_update_in_pre_msg(const byte *data, const size_t data_size);
-
-void
-bmp_route_monitor_update_in_pre_commit(const struct bgp_proto *bgp);
-
-void
-bmp_route_monitor_update_in_pre_end(void);
+bmp_peer_up(struct bgp_proto *bgp,
+ const byte *tx_open_msg, uint tx_open_length,
+ const byte *rx_open_msg, uint rx_open_length);
/**
* bmp_peer_down - send notification that BGP peer connection is not in
* established state
*/
void
-bmp_peer_down(const struct bgp_proto *bgp, const int err_class, const byte *pkt,
- size_t pkt_size);
+bmp_peer_down(const struct bgp_proto *bgp, int err_class, int code, int subcode, const byte *data, int length);
#else /* BMP build disabled */
-static inline void bmp_put_sent_bgp_open_msg(const struct bgp_proto *bgp UNUSED, const byte* pkt UNUSED, const size_t pkt_size UNUSED) { }
-static inline void bmp_put_recv_bgp_open_msg(const struct bgp_proto *bgp UNUSED, const byte* pkt UNUSED, const size_t pkt_size UNUSED) { }
-static inline void bmp_route_monitor_update_in_pre_begin(void) { }
-static inline void bmp_route_monitor_put_update_in_pre_msg(const byte *data UNUSED, const size_t data_size UNUSED) { }
-static inline void bmp_route_monitor_update_in_pre_commit(const struct bgp_proto *bgp UNUSED) { }
-static inline void bmp_route_monitor_update_in_pre_end(void) { }
-static inline void bmp_peer_down(const struct bgp_proto *bgp UNUSED, const int err_class UNUSED, const byte *pkt UNUSED, size_t pkt_size UNUSED) { }
+static inline void bmp_peer_up(struct bgp_proto *bgp UNUSED, const byte *tx_open_msg UNUSED, uint tx_open_length UNUSED, const byte *rx_open_msg UNUSED, uint rx_open_length UNUSED) { }
+static inline void bmp_peer_down(const struct bgp_proto *bgp UNUSED, const int err_class UNUSED, int code UNUSED, int subcode UNUSED, const byte *data UNUSED, int length UNUSED) { }
#endif /* CONFIG_BMP */