projects
/
l2tpns.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'fdn-mods'
[l2tpns.git]
/
bgp.c
diff --git
a/bgp.c
b/bgp.c
index
600c950
..
04ff767
100644
(file)
--- a/
bgp.c
+++ b/
bgp.c
@@
-35,6
+35,7
@@
static struct bgp_route_list *bgp_insert_route(struct bgp_route_list *head,
static struct bgp_route6_list *bgp_insert_route6(struct bgp_route6_list *head,
struct bgp_route6_list *new);
static struct bgp_route6_list *bgp_insert_route6(struct bgp_route6_list *head,
struct bgp_route6_list *new);
+static void bgp_process_timers(struct bgp_peer *peer);
static void bgp_free_routes(struct bgp_route_list *routes);
static void bgp_free_routes6(struct bgp_route6_list *routes);
static char const *bgp_msg_type_str(uint8_t type);
static void bgp_free_routes(struct bgp_route_list *routes);
static void bgp_free_routes6(struct bgp_route6_list *routes);
static char const *bgp_msg_type_str(uint8_t type);
@@
-826,35
+827,51
@@
int bgp_process(uint32_t events[])
}
/* process timers */
}
/* process timers */
- if (peer->state == Established)
- {
- if (time_now > peer->expire_time)
- {
- LOG(1, 0, 0, "No message from BGP peer %s in %ds\n",
- peer->name, peer->hold);
+ bgp_process_timers(peer);
+ }
- bgp_send_notification(peer, BGP_ERR_HOLD_TIMER_EXP, 0);
- continue;
- }
+ return 1;
+}
- if (time_now > peer->keepalive_time && !peer->outbuf->packet.header.len)
- bgp_send_keepalive(peer);
- }
- else if (peer->state == Idle)
- {
- if (time_now > peer->retry_time)
- bgp_connect(peer);
- }
- else if (time_now > peer->state_time + BGP_STATE_TIME)
+void bgp_process_peers_timers()
+{
+ int i;
+
+ if (!bgp_configured)
+ return;
+
+ for (i = 0; i < BGP_NUM_PEERS; i++)
+ bgp_process_timers(&bgp_peers[i]);
+}
+
+static void bgp_process_timers(struct bgp_peer *peer)
+{
+ if (peer->state == Established)
+ {
+ if (time_now > peer->expire_time)
{
{
- LOG(1, 0, 0, "
%s timer expired for BGP peer %
s\n",
-
bgp_state_str(peer->state), peer->name
);
+ LOG(1, 0, 0, "
No message from BGP peer %s in %d
s\n",
+
peer->name, peer->hold
);
- bgp_restart(peer);
+ bgp_send_notification(peer, BGP_ERR_HOLD_TIMER_EXP, 0);
+ return;
}
}
+
+ if (time_now > peer->keepalive_time && !peer->outbuf->packet.header.len)
+ bgp_send_keepalive(peer);
+ }
+ else if (peer->state == Idle)
+ {
+ if (time_now > peer->retry_time)
+ bgp_connect(peer);
}
}
+ else if (time_now > peer->state_time + BGP_STATE_TIME)
+ {
+ LOG(1, 0, 0, "%s timer expired for BGP peer %s\n",
+ bgp_state_str(peer->state), peer->name);
- return 1;
+ bgp_restart(peer);
+ }
}
static void bgp_free_routes(struct bgp_route_list *routes)
}
static void bgp_free_routes(struct bgp_route_list *routes)
@@
-1383,7
+1400,11
@@
static int bgp_send_open(struct bgp_peer *peer)
data.version = BGP_VERSION;
data.as = htons(our_as);
data.hold_time = htons(peer->hold);
data.version = BGP_VERSION;
data.as = htons(our_as);
data.hold_time = htons(peer->hold);
- data.identifier = my_address;
+ /* use the source IP we use as identifier, if available */
+ if (peer->source_addr != INADDR_ANY)
+ data.identifier = peer->source_addr;
+ else
+ data.identifier = my_address;
/* if we know peer doesn't support MP (mp_handling == DoesntHandleIPv6Routes)
then don't add this parameter */
/* if we know peer doesn't support MP (mp_handling == DoesntHandleIPv6Routes)
then don't add this parameter */