]> git.puffer.fish Git - mirror/frr.git/commitdiff
zebra: Reduce memory usage of streams for encoding packets
authorDonald Sharp <sharpd@nvidia.com>
Thu, 10 Jun 2021 14:54:11 +0000 (10:54 -0400)
committerDonald Sharp <sharpd@nvidia.com>
Mon, 9 Dec 2024 17:31:29 +0000 (12:31 -0500)
For those packets that we are not sending 16k of data, but something
far less than 256 bytes.  Reduce those stream sizes we allocate
to something much more reasonable.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
zebra/zapi_msg.c
zebra/zebra_mpls.c
zebra/zebra_mroute.c
zebra/zebra_vxlan.c

index 10acee9be435630451a78f8650e932bc6a7b70ec..d269cdd015375c3a8a3f40c79d0143e99a1964ca 100644 (file)
@@ -282,7 +282,7 @@ int zsend_interface_address(int cmd, struct zserv *client,
 {
        int blen;
        struct prefix *p;
-       struct stream *s = stream_new(ZEBRA_MAX_PACKET_SIZ);
+       struct stream *s = stream_new(ZEBRA_SMALL_PACKET_SIZE);
 
        zclient_create_header(s, cmd, ifp->vrf->vrf_id);
        stream_putl(s, ifp->ifindex);
@@ -323,7 +323,7 @@ static int zsend_interface_nbr_address(int cmd, struct zserv *client,
                                       struct nbr_connected *ifc)
 {
        int blen;
-       struct stream *s = stream_new(ZEBRA_MAX_PACKET_SIZ);
+       struct stream *s = stream_new(ZEBRA_SMALL_PACKET_SIZE);
        struct prefix *p;
 
        zclient_create_header(s, cmd, ifp->vrf->vrf_id);
@@ -651,7 +651,7 @@ static int zsend_nexthop_lookup_mrib(struct zserv *client, struct ipaddr *addr,
        struct nexthop *nexthop;
 
        /* Get output stream. */
-       s = stream_new(ZEBRA_MAX_PACKET_SIZ);
+       s = stream_new(ZEBRA_SMALL_PACKET_SIZE);
        stream_reset(s);
 
        /* Fill in result. */
@@ -706,7 +706,7 @@ int zsend_nhg_notify(uint16_t type, uint16_t instance, uint32_t session_id,
                zlog_debug("%s: type %d, id %d, note %s",
                           __func__, type, id, zapi_nhg_notify_owner2str(note));
 
-       s = stream_new(ZEBRA_MAX_PACKET_SIZ);
+       s = stream_new(ZEBRA_SMALL_PACKET_SIZE);
        stream_reset(s);
 
        zclient_create_header(s, ZEBRA_NHG_NOTIFY_OWNER, VRF_DEFAULT);
@@ -835,7 +835,7 @@ void zsend_rule_notify_owner(const struct zebra_dplane_ctx *ctx,
        if (!client)
                return;
 
-       s = stream_new(ZEBRA_MAX_PACKET_SIZ);
+       s = stream_new(ZEBRA_SMALL_PACKET_SIZE);
 
        zclient_create_header(s, ZEBRA_RULE_NOTIFY_OWNER,
                              dplane_ctx_rule_get_vrfid(ctx));
@@ -889,7 +889,7 @@ void zsend_iptable_notify_owner(const struct zebra_dplane_ctx *ctx,
        if (!client)
                return;
 
-       s = stream_new(ZEBRA_MAX_PACKET_SIZ);
+       s = stream_new(ZEBRA_SMALL_PACKET_SIZE);
 
        zclient_create_header(s, cmd, VRF_DEFAULT);
        stream_putw(s, note);
@@ -923,7 +923,7 @@ void zsend_ipset_notify_owner(const struct zebra_dplane_ctx *ctx,
        if (!client)
                return;
 
-       s = stream_new(ZEBRA_MAX_PACKET_SIZ);
+       s = stream_new(ZEBRA_SMALL_PACKET_SIZE);
 
        zclient_create_header(s, cmd, VRF_DEFAULT);
        stream_putw(s, note);
@@ -959,7 +959,7 @@ void zsend_ipset_entry_notify_owner(const struct zebra_dplane_ctx *ctx,
        if (!client)
                return;
 
-       s = stream_new(ZEBRA_MAX_PACKET_SIZ);
+       s = stream_new(ZEBRA_SMALL_PACKET_SIZE);
 
        zclient_create_header(s, cmd, VRF_DEFAULT);
        stream_putw(s, note);
@@ -1049,13 +1049,12 @@ int zsend_router_id_update(struct zserv *client, afi_t afi, struct prefix *p,
                           vrf_id_t vrf_id)
 {
        int blen;
-       struct stream *s;
 
        /* Check this client need interface information. */
        if (!vrf_bitmap_check(&client->ridinfo[afi], vrf_id))
                return 0;
 
-       s = stream_new(ZEBRA_MAX_PACKET_SIZ);
+       struct stream *s = stream_new(ZEBRA_SMALL_PACKET_SIZE);
 
        /* Message type. */
        zclient_create_header(s, ZEBRA_ROUTER_ID_UPDATE, vrf_id);
@@ -1077,7 +1076,7 @@ int zsend_router_id_update(struct zserv *client, afi_t afi, struct prefix *p,
  */
 int zsend_pw_update(struct zserv *client, struct zebra_pw *pw)
 {
-       struct stream *s = stream_new(ZEBRA_MAX_PACKET_SIZ);
+       struct stream *s = stream_new(ZEBRA_SMALL_PACKET_SIZE);
 
        zclient_create_header(s, ZEBRA_PW_STATUS_UPDATE, pw->vrf_id);
        stream_write(s, pw->ifname, IFNAMSIZ);
@@ -1094,7 +1093,7 @@ int zsend_pw_update(struct zserv *client, struct zebra_pw *pw)
 int zsend_assign_label_chunk_response(struct zserv *client, vrf_id_t vrf_id,
                                      struct label_manager_chunk *lmc)
 {
-       struct stream *s = stream_new(ZEBRA_MAX_PACKET_SIZ);
+       struct stream *s = stream_new(ZEBRA_SMALL_PACKET_SIZE);
 
        zclient_create_header(s, ZEBRA_GET_LABEL_CHUNK, vrf_id);
        /* proto */
@@ -1120,7 +1119,7 @@ int zsend_assign_label_chunk_response(struct zserv *client, vrf_id_t vrf_id,
 int zsend_label_manager_connect_response(struct zserv *client, vrf_id_t vrf_id,
                                         unsigned short result)
 {
-       struct stream *s = stream_new(ZEBRA_MAX_PACKET_SIZ);
+       struct stream *s = stream_new(ZEBRA_SMALL_PACKET_SIZE);
 
        zclient_create_header(s, ZEBRA_LABEL_MANAGER_CONNECT, vrf_id);
 
@@ -1144,7 +1143,7 @@ static int zsend_assign_table_chunk_response(struct zserv *client,
                                             vrf_id_t vrf_id,
                                             struct table_manager_chunk *tmc)
 {
-       struct stream *s = stream_new(ZEBRA_MAX_PACKET_SIZ);
+       struct stream *s = stream_new(ZEBRA_SMALL_PACKET_SIZE);
 
        zclient_create_header(s, ZEBRA_GET_TABLE_CHUNK, vrf_id);
 
@@ -1164,7 +1163,7 @@ static int zsend_table_manager_connect_response(struct zserv *client,
                                                vrf_id_t vrf_id,
                                                uint16_t result)
 {
-       struct stream *s = stream_new(ZEBRA_MAX_PACKET_SIZ);
+       struct stream *s = stream_new(ZEBRA_SMALL_PACKET_SIZE);
 
        zclient_create_header(s, ZEBRA_TABLE_MANAGER_CONNECT, vrf_id);
 
@@ -2406,7 +2405,7 @@ stream_failure:
 
 static void zsend_capabilities(struct zserv *client, struct zebra_vrf *zvrf)
 {
-       struct stream *s = stream_new(ZEBRA_MAX_PACKET_SIZ);
+       struct stream *s = stream_new(ZEBRA_SMALL_PACKET_SIZE);
 
        zclient_create_header(s, ZEBRA_CAPABILITIES, zvrf->vrf->vrf_id);
        stream_putl(s, vrf_get_backend());
@@ -3990,8 +3989,7 @@ static inline void zebra_gre_source_set(ZAPI_HANDLER_ARGS)
 static void zsend_error_msg(struct zserv *client, enum zebra_error_types error,
                            struct zmsghdr *bad_hdr)
 {
-
-       struct stream *s = stream_new(ZEBRA_MAX_PACKET_SIZ);
+       struct stream *s = stream_new(ZEBRA_SMALL_PACKET_SIZE);
 
        zclient_create_header(s, ZEBRA_ERROR, bad_hdr->vrf_id);
 
index 0d3fd2a7268f08c4822fb6466ec056c87f64210b..3325532ca920fe8d1032357312232cb43e63746b 100644 (file)
@@ -466,7 +466,7 @@ static int fec_send(struct zebra_fec *fec, struct zserv *client)
        rn = fec->rn;
 
        /* Get output stream. */
-       s = stream_new(ZEBRA_MAX_PACKET_SIZ);
+       s = stream_new(ZEBRA_SMALL_PACKET_SIZE);
 
        zclient_create_header(s, ZEBRA_FEC_UPDATE, VRF_DEFAULT);
 
index 881b681c2f6d837ae69ea62219701fc0dd90ad2c..86e25469ba2d4319d82c0bde38bd7e8f89ec82ce 100644 (file)
@@ -61,7 +61,7 @@ void zebra_ipmr_route_stats(ZAPI_HANDLER_ARGS)
        suc = kernel_get_ipmr_sg_stats(zvrf, &mroute);
 
 stream_failure:
-       s = stream_new(ZEBRA_MAX_PACKET_SIZ);
+       s = stream_new(ZEBRA_SMALL_PACKET_SIZE);
 
        stream_reset(s);
 
index bc4f3438983697fd9a66cc42a05de020ba7174c5..c60eeab946711d6d505cc31824b86acc652df8fe 100644 (file)
@@ -2203,7 +2203,7 @@ static int zl3vni_send_add_to_client(struct zebra_l3vni *zl3vni)
                is_anycast_mac = false;
        }
 
-       s = stream_new(ZEBRA_MAX_PACKET_SIZ);
+       s = stream_new(ZEBRA_SMALL_PACKET_SIZE);
 
        /* The message is used for both vni add and/or update like
         * vrr mac is added for l3vni SVI.
@@ -2246,7 +2246,7 @@ static int zl3vni_send_del_to_client(struct zebra_l3vni *zl3vni)
        if (!client)
                return 0;
 
-       s = stream_new(ZEBRA_MAX_PACKET_SIZ);
+       s = stream_new(ZEBRA_SMALL_PACKET_SIZE);
 
        zclient_create_header(s, ZEBRA_L3VNI_DEL, zl3vni_vrf_id(zl3vni));
        stream_putl(s, zl3vni->vni);
@@ -5861,7 +5861,7 @@ static int zebra_vxlan_sg_send(struct zebra_vrf *zvrf,
        if (!CHECK_FLAG(zvrf->flags, ZEBRA_PIM_SEND_VXLAN_SG))
                return 0;
 
-       s = stream_new(ZEBRA_MAX_PACKET_SIZ);
+       s = stream_new(ZEBRA_SMALL_PACKET_SIZE);
 
        zclient_create_header(s, cmd, VRF_DEFAULT);
        stream_putl(s, IPV4_MAX_BYTELEN);