* it will be a proxy to relay messages to external label manager
* This zclient thus is to connect to it
*/
-static struct stream *ibuf;
static struct stream *obuf;
static struct zclient *zclient;
bool lm_is_external;
/* send response back */
stream_copy(dst, src);
- ret = writen(zserv->sock, src->data, stream_get_endp(src));
+ ret = writen(zserv->sock, dst->data, stream_get_endp(dst));
if (ret <= 0) {
zlog_err("%s: Error sending Label Manager response back: %s",
__func__, strerror(errno));
* @return 0 on success, -1 otherwise
*/
int zread_relay_label_manager_request(int cmd, struct zserv *zserv,
- vrf_id_t vrf_id)
+ struct stream *msg, vrf_id_t vrf_id)
{
struct stream *src, *dst;
int ret = 0;
ret = relay_response_back(zserv);
/* Send request to external label manager */
- src = ibuf;
+ src = msg;
dst = zclient->obuf;
stream_copy(dst, src);
lm_zclient_init(lm_zserv_path);
}
- ibuf = stream_new(ZEBRA_MAX_PACKET_SIZ);
obuf = stream_new(ZEBRA_MAX_PACKET_SIZ);
hook_register(zapi_client_close, release_daemon_label_chunks);
void label_manager_close()
{
list_delete_and_null(&lbl_mgr.lc_list);
- stream_free(ibuf);
stream_free(obuf);
}
bool lm_is_external;
int zread_relay_label_manager_request(int cmd, struct zserv *zserv,
- vrf_id_t vrf_id);
+ struct stream *msg, vrf_id_t vrf_id);
void label_manager_init(char *lm_zserv_path);
struct label_manager_chunk *assign_label_chunk(uint8_t proto,
unsigned short instance,
/* external label manager */
if (lm_is_external)
zread_relay_label_manager_request(hdr->command, client,
- zvrf_id(zvrf));
+ msg, zvrf_id(zvrf));
/* this is a label manager */
else {
if (hdr->command == ZEBRA_LABEL_MANAGER_CONNECT)