summaryrefslogtreecommitdiff
path: root/bgpd/bgp_packet.c
diff options
context:
space:
mode:
authorMaxence Younsi <mx.yns@outlook.fr>2023-04-13 15:28:32 +0200
committerLouis Scalbert <louis.scalbert@6wind.com>2024-10-11 15:14:12 +0200
commit035304c25a3890a040acbe23ca385750b062cdce (patch)
treeaf00dfdffe3ccce3abd6aa6d11d1e6985487002d /bgpd/bgp_packet.c
parent33189510e8d008e894b686291236be7c59b8c603 (diff)
bgpd: bmp loc-rib peer up/down for vrfs
added bmp bgp peer for vrfs added peer up vrf in bmp peer up state added vrf state in bmpbgp added safe bmp_peer_sendall : bmp_peer_sendall_safe changed bgp_open_send to call new bgp_open_make bgp_open_make creates a bgp open packet, now used in bmp for peer up vrf added hook and call to bgp instance state vrf peer state is recomputed when interfaces (including vrf itf) go up / down and when it gets created or removed Link: https://github.com/mxyns/frr/commit/e48ba380700d53124131f4e4419f646c05b40c86 Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com> Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com> Signed-off-by: Maxence Younsi <mx.yns@outlook.fr>
Diffstat (limited to 'bgpd/bgp_packet.c')
-rw-r--r--bgpd/bgp_packet.c51
1 files changed, 29 insertions, 22 deletions
diff --git a/bgpd/bgp_packet.c b/bgpd/bgp_packet.c
index 646ab1d95f..6b116db107 100644
--- a/bgpd/bgp_packet.c
+++ b/bgpd/bgp_packet.c
@@ -641,31 +641,11 @@ void bgp_keepalive_send(struct peer *peer)
bgp_writes_on(peer->connection);
}
-/*
- * Creates a BGP Open packet and appends it to the peer's output queue.
- * Sets capabilities as necessary.
- */
-void bgp_open_send(struct peer_connection *connection)
+struct stream *bgp_open_make(struct peer *peer, uint16_t send_holdtime, as_t local_as)
{
- struct stream *s;
- uint16_t send_holdtime;
- as_t local_as;
- struct peer *peer = connection->peer;
+ struct stream *s = stream_new(BGP_STANDARD_MESSAGE_MAX_PACKET_SIZE);
bool ext_opt_params = false;
- if (CHECK_FLAG(peer->flags, PEER_FLAG_TIMER))
- send_holdtime = peer->holdtime;
- else
- send_holdtime = peer->bgp->default_holdtime;
-
- /* local-as Change */
- if (peer->change_local_as)
- local_as = peer->change_local_as;
- else
- local_as = peer->local_as;
-
- s = stream_new(BGP_STANDARD_MESSAGE_MAX_PACKET_SIZE);
-
/* Make open packet. */
bgp_packet_set_marker(s, BGP_MSG_OPEN);
@@ -704,6 +684,33 @@ void bgp_open_send(struct peer_connection *connection)
ext_opt_params ? " (Extended)" : "", BGP_VERSION_4,
local_as, send_holdtime, &peer->local_id);
+ return s;
+}
+
+/*
+ * Creates a BGP Open packet and appends it to the peer's output queue.
+ * Sets capabilities as necessary.
+ */
+void bgp_open_send(struct peer_connection *connection)
+{
+ struct stream *s;
+ uint16_t send_holdtime;
+ as_t local_as;
+ struct peer *peer = connection->peer;
+
+ if (CHECK_FLAG(peer->flags, PEER_FLAG_TIMER))
+ send_holdtime = peer->holdtime;
+ else
+ send_holdtime = peer->bgp->default_holdtime;
+
+ /* local-as Change */
+ if (peer->change_local_as)
+ local_as = peer->change_local_as;
+ else
+ local_as = peer->local_as;
+
+ s = bgp_open_make(peer, send_holdtime, local_as);
+
/* Dump packet if debug option is set. */
/* bgp_packet_dump (s); */
hook_call(bgp_packet_send, peer, BGP_MSG_OPEN, stream_get_endp(s), s);