diff options
Diffstat (limited to 'bgpd')
-rw-r--r-- | bgpd/ChangeLog | 9 | ||||
-rw-r--r-- | bgpd/bgp_fsm.c | 3 | ||||
-rw-r--r-- | bgpd/bgp_vty.c | 26 | ||||
-rw-r--r-- | bgpd/bgpd.c | 9 | ||||
-rw-r--r-- | bgpd/bgpd.h | 1 |
5 files changed, 47 insertions, 1 deletions
diff --git a/bgpd/ChangeLog b/bgpd/ChangeLog index 6fe2b0f5..e92a72a9 100644 --- a/bgpd/ChangeLog +++ b/bgpd/ChangeLog @@ -292,6 +292,15 @@ * bgp_debug.c: (community_str,community_com2str) Check com pointer before dereferencing. +2007-08-31 Paul Jakma <paul.jakma@sun.com> + + * (general) Add 'bgp open-accept' option, to allow bgpd to send OPEN + on accepted connections, i.e. to not wait till after + collision-detect to send OPEN, which appears to be allowed in + RFC4271. This may help speed up establishing sessions, or help + avoid FSM problems with sessions to certain peers. Not enabled by + default though. + 2007-08-27 Paul Jakma <paul.jakma@sun.com> * bgp_route.c: (bgp_announce_check) Fix bug #398, slight diff --git a/bgpd/bgp_fsm.c b/bgpd/bgp_fsm.c index 15bd8a6c..df1cfb7b 100644 --- a/bgpd/bgp_fsm.c +++ b/bgpd/bgp_fsm.c @@ -616,7 +616,8 @@ bgp_connect_success (struct peer *peer) zlog_debug ("%s passive open", peer->host); } - if (! CHECK_FLAG (peer->sflags, PEER_STATUS_ACCEPT_PEER)) + if (!CHECK_FLAG (peer->sflags, PEER_STATUS_ACCEPT_PEER) + || bgp_option_check (BGP_OPT_ALWAYS_OPEN)) bgp_open_send (peer); return 0; diff --git a/bgpd/bgp_vty.c b/bgpd/bgp_vty.c index 54f11701..90867373 100644 --- a/bgpd/bgp_vty.c +++ b/bgpd/bgp_vty.c @@ -279,6 +279,28 @@ DEFUN (no_bgp_config_type, return CMD_SUCCESS; } +DEFUN_HIDDEN (bgp_open_accept, + bgp_open_accept_cmd, + "bgp open-accept", + BGP_STR + "Send OPEN immediately on accepted connections\n") +{ + bgp_option_set (BGP_OPT_ALWAYS_OPEN); + return CMD_SUCCESS; +} + +DEFUN_HIDDEN (no_bgp_open_accept, + no_bgp_open_accept_cmd, + "no bgp open-accept", + NO_STR + BGP_STR + "Send OPEN immediately on accepted connections\n") + +{ + bgp_option_unset (BGP_OPT_ALWAYS_OPEN); + return CMD_SUCCESS; +} + DEFUN (no_synchronization, no_synchronization_cmd, "no synchronization", @@ -8820,6 +8842,10 @@ bgp_vty_init (void) install_element (CONFIG_NODE, &bgp_config_type_cmd); install_element (CONFIG_NODE, &no_bgp_config_type_cmd); + /* "bgp open-all" commands. */ + install_element (CONFIG_NODE, &bgp_open_accept_cmd); + install_element (CONFIG_NODE, &no_bgp_open_accept_cmd); + /* Dummy commands (Currently not supported) */ install_element (BGP_NODE, &no_synchronization_cmd); install_element (BGP_NODE, &no_auto_summary_cmd); diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c index 8eb0d2e4..bda35ae5 100644 --- a/bgpd/bgpd.c +++ b/bgpd/bgpd.c @@ -81,6 +81,7 @@ bgp_option_set (int flag) case BGP_OPT_NO_FIB: case BGP_OPT_MULTIPLE_INSTANCE: case BGP_OPT_CONFIG_CISCO: + case BGP_OPT_ALWAYS_OPEN: SET_FLAG (bm->options, flag); break; default: @@ -100,6 +101,7 @@ bgp_option_unset (int flag) /* Fall through. */ case BGP_OPT_NO_FIB: case BGP_OPT_CONFIG_CISCO: + case BGP_OPT_ALWAYS_OPEN: UNSET_FLAG (bm->options, flag); break; default: @@ -4910,6 +4912,13 @@ bgp_config_write (struct vty *vty) write++; } + /* BGP Open-Always */ + if (bgp_option_check (BGP_OPT_ALWAYS_OPEN)) + { + vty_out (vty, "bgp open-accept%s", VTY_NEWLINE); + write++; + } + /* BGP configuration. */ for (ALL_LIST_ELEMENTS (bm->bgp, mnode, mnnode, bgp)) { diff --git a/bgpd/bgpd.h b/bgpd/bgpd.h index afe06635..89dde8f1 100644 --- a/bgpd/bgpd.h +++ b/bgpd/bgpd.h @@ -59,6 +59,7 @@ struct bgp_master #define BGP_OPT_NO_FIB (1 << 0) #define BGP_OPT_MULTIPLE_INSTANCE (1 << 1) #define BGP_OPT_CONFIG_CISCO (1 << 2) +#define BGP_OPT_ALWAYS_OPEN (1 << 3) }; /* BGP instance structure. */ |