summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Jakma <paul.jakma@sun.com>2007-08-31 14:27:37 +0100
committerPaul Jakma <paul@quagga.net>2008-08-22 19:52:12 +0100
commitd664ae1182c29b74b409bc8594b7bd0575e91ce9 (patch)
treedd7c7edf880483e1deade4e0c26e3844cd78a79e
parente30db001530a39b827cc4f073033e35d9ca22662 (diff)
[bgpd] Add 'bgp open-accept' option, to send OPEN immediately on accepted conns
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.
-rw-r--r--bgpd/ChangeLog9
-rw-r--r--bgpd/bgp_fsm.c3
-rw-r--r--bgpd/bgp_vty.c26
-rw-r--r--bgpd/bgpd.c9
-rw-r--r--bgpd/bgpd.h1
5 files changed, 47 insertions, 1 deletions
diff --git a/bgpd/ChangeLog b/bgpd/ChangeLog
index 6fe2b0f5ae..e92a72a95c 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 15bd8a6c83..df1cfb7b50 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 54f11701be..9086737304 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 8eb0d2e496..bda35ae592 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 afe0663571..89dde8f101 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. */