return zclient_send_message(zclient);
}
-/* size needed by a stream for redistributing a route */
-int zapi_redistribute_stream_size(struct zapi_route *api)
-{
- size_t msg_size = 0;
- size_t nh_size = sizeof(struct zapi_nexthop);
-
- msg_size = sizeof(struct zapi_route);
- /* remove unused nexthop structures */
- msg_size -= (MULTIPATH_NUM - api->nexthop_num) * nh_size;
- /* remove unused backup nexthop structures */
- msg_size -= (MULTIPATH_NUM - api->backup_nexthop_num) * nh_size;
- /* remove unused opaque values */
- msg_size -= ZAPI_MESSAGE_OPAQUE_LENGTH - api->opaque.length;
-
- return msg_size;
-}
-
-
int zapi_route_encode(uint8_t cmd, struct stream *s, struct zapi_route *api)
{
struct zapi_nexthop *api_nh;
vrf_id_t vrf_id);
int zapi_nexthop_encode(struct stream *s, const struct zapi_nexthop *api_nh,
uint32_t api_flags, uint32_t api_message);
-extern int zapi_redistribute_stream_size(struct zapi_route *api);
extern int zapi_route_encode(uint8_t, struct stream *, struct zapi_route *);
extern int zapi_route_decode(struct stream *s, struct zapi_route *api);
extern int zapi_nexthop_decode(struct stream *s, struct zapi_nexthop *api_nh,
const struct prefix *p, *src_p;
uint16_t count = 0;
afi_t afi;
- size_t stream_size = 0;
srcdest_rnode_prefixes(rn, &p, &src_p);
memset(&api, 0, sizeof(api));
SET_FLAG(api.message, ZAPI_MESSAGE_MTU);
api.mtu = re->mtu;
- stream_size = zapi_redistribute_stream_size(&api);
- struct stream *s = stream_new(stream_size);
+ struct stream *s = stream_new_expandable(ZEBRA_MAX_PACKET_SIZ);
/* Encode route and send. */
if (zapi_route_encode(cmd, s, &api) < 0) {