summaryrefslogtreecommitdiffstats
path: root/bgpd
diff options
context:
space:
mode:
authorDonald Sharp <sharpd@cumulusnetworks.com>2015-08-18 08:48:53 -0400
committerPaul Jakma <paul@quagga.net>2015-09-24 15:26:43 +0100
commita752c3be8c2436941311788f2e7b644a2af0fd65 (patch)
tree78637b4cbf2f1dbb98d0d30207ad8c252493496a /bgpd
parente2a9258c16bce1b3797efb9be354d20d68236194 (diff)
downloadquagga-a752c3be8c2436941311788f2e7b644a2af0fd65.tar.bz2
quagga-a752c3be8c2436941311788f2e7b644a2af0fd65.tar.xz
bgpd: Remove unnecessary stream_dup calls
BGP packet handling creates a stream to handle data for an outgoing packet. In some cases the code would create a new stream, add data, then duplicate the stream and then free the original stream. This change removes the unnecessary duplication, which entails a malloc and memcpy. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Diffstat (limited to 'bgpd')
-rw-r--r--bgpd/bgp_packet.c32
1 files changed, 6 insertions, 26 deletions
diff --git a/bgpd/bgp_packet.c b/bgpd/bgp_packet.c
index 7d27972e..e1ae494d 100644
--- a/bgpd/bgp_packet.c
+++ b/bgpd/bgp_packet.c
@@ -275,7 +275,6 @@ static struct stream *
bgp_update_packet_eor (struct peer *peer, afi_t afi, safi_t safi)
{
struct stream *s;
- struct stream *packet;
if (DISABLE_BGP_ANNOUNCE)
return NULL;
@@ -308,10 +307,8 @@ bgp_update_packet_eor (struct peer *peer, afi_t afi, safi_t safi)
}
bgp_packet_set_size (s);
- packet = stream_dup (s);
- bgp_packet_add (peer, packet);
- stream_free (s);
- return packet;
+ bgp_packet_add (peer, s);
+ return s;
}
/* Make BGP withdraw packet. */
@@ -431,7 +428,6 @@ bgp_default_update_send (struct peer *peer, struct attr *attr,
afi_t afi, safi_t safi, struct peer *from)
{
struct stream *s;
- struct stream *packet;
struct prefix p;
unsigned long pos;
bgp_size_t total_attr_len;
@@ -482,16 +478,13 @@ bgp_default_update_send (struct peer *peer, struct attr *attr,
/* Set size. */
bgp_packet_set_size (s);
- packet = stream_dup (s);
- stream_free (s);
-
/* Dump packet if debug option is set. */
#ifdef DEBUG
/* bgp_packet_dump (packet); */
#endif /* DEBUG */
/* Add packet to the peer. */
- bgp_packet_add (peer, packet);
+ bgp_packet_add (peer, s);
BGP_WRITE_ON (peer->t_write, bgp_write, peer->fd);
}
@@ -500,7 +493,6 @@ void
bgp_default_withdraw_send (struct peer *peer, afi_t afi, safi_t safi)
{
struct stream *s;
- struct stream *packet;
struct prefix p;
unsigned long attrlen_pos = 0;
unsigned long cp;
@@ -570,11 +562,8 @@ bgp_default_withdraw_send (struct peer *peer, afi_t afi, safi_t safi)
bgp_packet_set_size (s);
- packet = stream_dup (s);
- stream_free (s);
-
/* Add packet to the peer. */
- bgp_packet_add (peer, packet);
+ bgp_packet_add (peer, s);
BGP_WRITE_ON (peer->t_write, bgp_write, peer->fd);
}
@@ -1029,7 +1018,6 @@ bgp_route_refresh_send (struct peer *peer, afi_t afi, safi_t safi,
u_char orf_type, u_char when_to_refresh, int remove)
{
struct stream *s;
- struct stream *packet;
int length;
struct bgp_filter *filter;
int orf_refresh = 0;
@@ -1110,12 +1098,8 @@ bgp_route_refresh_send (struct peer *peer, afi_t afi, safi_t safi,
BGP_MSG_ROUTE_REFRESH_NEW : BGP_MSG_ROUTE_REFRESH_OLD, length);
}
- /* Make real packet. */
- packet = stream_dup (s);
- stream_free (s);
-
/* Add packet to the peer. */
- bgp_packet_add (peer, packet);
+ bgp_packet_add (peer, s);
BGP_WRITE_ON (peer->t_write, bgp_write, peer->fd);
}
@@ -1126,7 +1110,6 @@ bgp_capability_send (struct peer *peer, afi_t afi, safi_t safi,
int capability_code, int action)
{
struct stream *s;
- struct stream *packet;
int length;
/* Adjust safi code. */
@@ -1157,12 +1140,9 @@ bgp_capability_send (struct peer *peer, afi_t afi, safi_t safi,
/* Set packet size. */
length = bgp_packet_set_size (s);
- /* Make real packet. */
- packet = stream_dup (s);
- stream_free (s);
/* Add packet to the peer. */
- bgp_packet_add (peer, packet);
+ bgp_packet_add (peer, s);
if (BGP_DEBUG (normal, NORMAL))
zlog_debug ("%s send message type %d, length (incl. header) %d",