summaryrefslogtreecommitdiff
path: root/zebra/label_manager.c
diff options
context:
space:
mode:
authorFredi Raspall <fredi@voltanet.io>2018-04-25 12:18:10 +0200
committerFredi Raspall <fredi@voltanet.io>2018-04-27 20:10:39 +0200
commit881999e64fcf1cf7bac65a74bcc4a6ed7cfdbbbe (patch)
tree5cdcf1c364674df2dc49f19ea49d251621e305cb /zebra/label_manager.c
parent97722e560ecaf87125aff5a56e247b7952ef8105 (diff)
zebra: fix broken label manager proxy mode.
In a prior refactor, label manager proxy functionality was broken in two places: 1) in function relay_response_back(), "dst" stream was accidentally replaced by "src". 2) in zread_relay_label_manager_request(), src was set to point to a global struct stream *ibuf that was not used/initialized anywhere. Signed-off-by: Fredi Raspall <fredi@voltanet.io>
Diffstat (limited to 'zebra/label_manager.c')
-rw-r--r--zebra/label_manager.c9
1 files changed, 3 insertions, 6 deletions
diff --git a/zebra/label_manager.c b/zebra/label_manager.c
index 190ac1e57f..4ae8fde0c2 100644
--- a/zebra/label_manager.c
+++ b/zebra/label_manager.c
@@ -50,7 +50,6 @@ DEFINE_MTYPE_STATIC(LBL_MGR, LM_CHUNK, "Label Manager Chunk");
* 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;
@@ -89,7 +88,7 @@ static int relay_response_back(struct zserv *zserv)
/* 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));
@@ -148,7 +147,7 @@ static int reply_error(int cmd, struct zserv *zserv, vrf_id_t vrf_id)
* @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;
@@ -166,7 +165,7 @@ int zread_relay_label_manager_request(int cmd, struct zserv *zserv,
ret = relay_response_back(zserv);
/* Send request to external label manager */
- src = ibuf;
+ src = msg;
dst = zclient->obuf;
stream_copy(dst, src);
@@ -287,7 +286,6 @@ void label_manager_init(char *lm_zserv_path)
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);
@@ -393,6 +391,5 @@ int release_label_chunk(uint8_t proto, unsigned short instance, uint32_t start,
void label_manager_close()
{
list_delete_and_null(&lbl_mgr.lc_list);
- stream_free(ibuf);
stream_free(obuf);
}