X-Git-Url: http://git.sameswireless.fr/l2tpns.git/blobdiff_plain/500eb6e594bcf6585828419322d0a61d7edc9f44..2c6957f223400fb892349fac5d521b89d12610df:/bgp.c diff --git a/bgp.c b/bgp.c index 04ff767..85415d1 100644 --- a/bgp.c +++ b/bgp.c @@ -29,7 +29,6 @@ char const *cvs_id_bgp = "$Id: bgp.c,v 1.12 2005/09/02 23:39:36 bodea Exp $"; static void bgp_clear(struct bgp_peer *peer); static void bgp_set_retry(struct bgp_peer *peer); -static void bgp_cidr(in_addr_t ip, in_addr_t mask, struct bgp_ip_prefix *pfx); static struct bgp_route_list *bgp_insert_route(struct bgp_route_list *head, struct bgp_route_list *new); static struct bgp_route6_list *bgp_insert_route6(struct bgp_route6_list *head, @@ -394,26 +393,6 @@ static void bgp_set_retry(struct bgp_peer *peer) bgp_halt(peer); /* give up */ } -/* convert ip/mask to CIDR notation */ -static void bgp_cidr(in_addr_t ip, in_addr_t mask, struct bgp_ip_prefix *pfx) -{ - int i; - uint32_t b; - - /* convert to prefix notation */ - pfx->len = 32; - pfx->prefix = ip; - - if (!mask) /* bogus */ - mask = 0xffffffff; - - for (i = 0; i < 32 && ((b = ntohl(1 << i)), !(mask & b)); i++) - { - pfx->len--; - pfx->prefix &= ~b; - } -} - /* insert route into list; sorted */ static struct bgp_route_list *bgp_insert_route(struct bgp_route_list *head, struct bgp_route_list *new) @@ -475,13 +454,14 @@ static struct bgp_route6_list *bgp_insert_route6(struct bgp_route6_list *head, * that if that route is later deleted we don't have to be concerned * about adding back the more specific one). */ -int bgp_add_route(in_addr_t ip, in_addr_t mask) +int bgp_add_route(in_addr_t ip, int prefixlen) { struct bgp_route_list *r = bgp_routes; struct bgp_route_list add; int i; - bgp_cidr(ip, mask, &add.dest); + add.dest.prefix = ip; + add.dest.len = prefixlen; add.next = 0; /* check for duplicate */ @@ -574,14 +554,15 @@ int bgp_add_route6(struct in6_addr ip, int prefixlen) } /* remove route from list for peers */ -int bgp_del_route(in_addr_t ip, in_addr_t mask) +int bgp_del_route(in_addr_t ip, int prefixlen) { struct bgp_route_list *r = bgp_routes; struct bgp_route_list *e = 0; struct bgp_route_list del; int i; - bgp_cidr(ip, mask, &del.dest); + del.dest.prefix = ip; + del.dest.len = prefixlen; del.next = 0; /* find entry in routes list and remove */ @@ -833,6 +814,7 @@ int bgp_process(uint32_t events[]) return 1; } +/* process bgp timers only */ void bgp_process_peers_timers() { int i; @@ -841,7 +823,14 @@ void bgp_process_peers_timers() return; for (i = 0; i < BGP_NUM_PEERS; i++) - bgp_process_timers(&bgp_peers[i]); + { + struct bgp_peer *peer = &bgp_peers[i]; + + if (peer->state == Disabled) + continue; + + bgp_process_timers(peer); + } } static void bgp_process_timers(struct bgp_peer *peer)