mirror of
https://gitlab.labs.nic.cz/labs/bird.git
synced 2024-05-11 16:54:54 +00:00
BMP protocol support
Initial implementation of a basic subset of the BMP (BGP Monitoring Protocol, RFC 7854) from Akamai team. Submitted for further review and improvement.
This commit is contained in:
committed by
Ondrej Zajicek
parent
9e44ace392
commit
a848dad40a
@ -42,6 +42,7 @@ enum protocol_class {
|
||||
PROTOCOL_BABEL,
|
||||
PROTOCOL_BFD,
|
||||
PROTOCOL_BGP,
|
||||
PROTOCOL_BMP,
|
||||
PROTOCOL_DEVICE,
|
||||
PROTOCOL_DIRECT,
|
||||
PROTOCOL_KERNEL,
|
||||
@ -103,7 +104,7 @@ void protos_dump_all(void);
|
||||
extern struct protocol
|
||||
proto_device, proto_radv, proto_rip, proto_static, proto_mrt,
|
||||
proto_ospf, proto_perf,
|
||||
proto_pipe, proto_bgp, proto_bfd, proto_babel, proto_rpki;
|
||||
proto_pipe, proto_bgp, proto_bmp, proto_bfd, proto_babel, proto_rpki;
|
||||
|
||||
/*
|
||||
* Routing Protocol Instance
|
||||
@ -213,6 +214,8 @@ struct proto {
|
||||
void (*if_notify)(struct proto *, unsigned flags, struct iface *i);
|
||||
void (*ifa_notify)(struct proto *, unsigned flags, struct ifa *a);
|
||||
void (*rt_notify)(struct proto *, struct channel *, struct network *net, struct rte *new, struct rte *old);
|
||||
void (*rte_update_in_notify)(const struct proto *, const struct channel *,
|
||||
const net *net, const struct rte *new, const struct rte *old, const struct rte_src *src);
|
||||
void (*neigh_notify)(struct neighbor *neigh);
|
||||
int (*preexport)(struct channel *, struct rte *rt);
|
||||
void (*reload_routes)(struct channel *);
|
||||
|
@ -3095,6 +3095,10 @@ rte_update_in(struct channel *c, const net_addr *n, rte *new, struct rte_src *sr
|
||||
if (old->flags & (REF_STALE | REF_DISCARD | REF_MODIFY))
|
||||
{
|
||||
old->flags &= ~(REF_STALE | REF_DISCARD | REF_MODIFY);
|
||||
|
||||
if (c->proto->rte_update_in_notify)
|
||||
c->proto->rte_update_in_notify(c->proto, c, net, new, old, src);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -3118,6 +3122,9 @@ rte_update_in(struct channel *c, const net_addr *n, rte *new, struct rte_src *sr
|
||||
if (!old)
|
||||
goto drop_withdraw;
|
||||
|
||||
if (c->proto->rte_update_in_notify)
|
||||
c->proto->rte_update_in_notify(c->proto, c, net, new, old, src);
|
||||
|
||||
if (!net->routes)
|
||||
fib_delete(&tab->fib, net);
|
||||
|
||||
@ -3149,6 +3156,10 @@ rte_update_in(struct channel *c, const net_addr *n, rte *new, struct rte_src *sr
|
||||
e->next = *pos;
|
||||
*pos = e;
|
||||
tab->rt_count++;
|
||||
|
||||
if (c->proto->rte_update_in_notify)
|
||||
c->proto->rte_update_in_notify(c->proto, c, net, new, old, src);
|
||||
|
||||
return 1;
|
||||
|
||||
drop_update:
|
||||
|
Reference in New Issue
Block a user