forked from Mirror/frr
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>
This commit is contained in:
parent
97722e560e
commit
881999e64f
|
@ -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
|
* it will be a proxy to relay messages to external label manager
|
||||||
* This zclient thus is to connect to it
|
* This zclient thus is to connect to it
|
||||||
*/
|
*/
|
||||||
static struct stream *ibuf;
|
|
||||||
static struct stream *obuf;
|
static struct stream *obuf;
|
||||||
static struct zclient *zclient;
|
static struct zclient *zclient;
|
||||||
bool lm_is_external;
|
bool lm_is_external;
|
||||||
|
@ -89,7 +88,7 @@ static int relay_response_back(struct zserv *zserv)
|
||||||
|
|
||||||
/* send response back */
|
/* send response back */
|
||||||
stream_copy(dst, src);
|
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) {
|
if (ret <= 0) {
|
||||||
zlog_err("%s: Error sending Label Manager response back: %s",
|
zlog_err("%s: Error sending Label Manager response back: %s",
|
||||||
__func__, strerror(errno));
|
__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
|
* @return 0 on success, -1 otherwise
|
||||||
*/
|
*/
|
||||||
int zread_relay_label_manager_request(int cmd, struct zserv *zserv,
|
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;
|
struct stream *src, *dst;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
@ -166,7 +165,7 @@ int zread_relay_label_manager_request(int cmd, struct zserv *zserv,
|
||||||
ret = relay_response_back(zserv);
|
ret = relay_response_back(zserv);
|
||||||
|
|
||||||
/* Send request to external label manager */
|
/* Send request to external label manager */
|
||||||
src = ibuf;
|
src = msg;
|
||||||
dst = zclient->obuf;
|
dst = zclient->obuf;
|
||||||
|
|
||||||
stream_copy(dst, src);
|
stream_copy(dst, src);
|
||||||
|
@ -287,7 +286,6 @@ void label_manager_init(char *lm_zserv_path)
|
||||||
lm_zclient_init(lm_zserv_path);
|
lm_zclient_init(lm_zserv_path);
|
||||||
}
|
}
|
||||||
|
|
||||||
ibuf = stream_new(ZEBRA_MAX_PACKET_SIZ);
|
|
||||||
obuf = stream_new(ZEBRA_MAX_PACKET_SIZ);
|
obuf = stream_new(ZEBRA_MAX_PACKET_SIZ);
|
||||||
|
|
||||||
hook_register(zapi_client_close, release_daemon_label_chunks);
|
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()
|
void label_manager_close()
|
||||||
{
|
{
|
||||||
list_delete_and_null(&lbl_mgr.lc_list);
|
list_delete_and_null(&lbl_mgr.lc_list);
|
||||||
stream_free(ibuf);
|
|
||||||
stream_free(obuf);
|
stream_free(obuf);
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,7 +64,7 @@ struct label_manager {
|
||||||
bool lm_is_external;
|
bool lm_is_external;
|
||||||
|
|
||||||
int zread_relay_label_manager_request(int cmd, struct zserv *zserv,
|
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);
|
void label_manager_init(char *lm_zserv_path);
|
||||||
struct label_manager_chunk *assign_label_chunk(uint8_t proto,
|
struct label_manager_chunk *assign_label_chunk(uint8_t proto,
|
||||||
unsigned short instance,
|
unsigned short instance,
|
||||||
|
|
|
@ -2454,7 +2454,7 @@ static void zread_label_manager_request(ZAPI_HANDLER_ARGS)
|
||||||
/* external label manager */
|
/* external label manager */
|
||||||
if (lm_is_external)
|
if (lm_is_external)
|
||||||
zread_relay_label_manager_request(hdr->command, client,
|
zread_relay_label_manager_request(hdr->command, client,
|
||||||
zvrf_id(zvrf));
|
msg, zvrf_id(zvrf));
|
||||||
/* this is a label manager */
|
/* this is a label manager */
|
||||||
else {
|
else {
|
||||||
if (hdr->command == ZEBRA_LABEL_MANAGER_CONNECT)
|
if (hdr->command == ZEBRA_LABEL_MANAGER_CONNECT)
|
||||||
|
|
Loading…
Reference in a new issue