From edc127627d19da37fb247ee76999d17e651c2237 Mon Sep 17 00:00:00 2001 From: Renato Westphal Date: Fri, 18 Jan 2019 16:06:00 -0200 Subject: [PATCH] lib: use the correct VRF ID when parsing INTERFACE_LINK_PARAMS messages Bug found during code inspection. Signed-off-by: Renato Westphal --- isisd/isis_zebra.c | 4 ++-- lib/zclient.c | 7 ++++--- lib/zclient.h | 5 +++-- ospfd/ospf_zebra.c | 4 ++-- 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/isisd/isis_zebra.c b/isisd/isis_zebra.c index 958f8c2281..d03c1dde08 100644 --- a/isisd/isis_zebra.c +++ b/isisd/isis_zebra.c @@ -219,11 +219,11 @@ static int isis_zebra_if_address_del(int command, struct zclient *client, } static int isis_zebra_link_params(int command, struct zclient *zclient, - zebra_size_t length) + zebra_size_t length, vrf_id_t vrf_id) { struct interface *ifp; - ifp = zebra_interface_link_params_read(zclient->ibuf); + ifp = zebra_interface_link_params_read(zclient->ibuf, vrf_id); if (ifp == NULL) return 0; diff --git a/lib/zclient.c b/lib/zclient.c index 367a21f7d0..187a4b20b0 100644 --- a/lib/zclient.c +++ b/lib/zclient.c @@ -1495,7 +1495,8 @@ static void link_params_set_value(struct stream *s, struct if_link_params *iflp) iflp->use_bw = stream_getf(s); } -struct interface *zebra_interface_link_params_read(struct stream *s) +struct interface *zebra_interface_link_params_read(struct stream *s, + vrf_id_t vrf_id) { struct if_link_params *iflp; ifindex_t ifindex; @@ -1504,7 +1505,7 @@ struct interface *zebra_interface_link_params_read(struct stream *s) ifindex = stream_getl(s); - struct interface *ifp = if_lookup_by_index(ifindex, VRF_DEFAULT); + struct interface *ifp = if_lookup_by_index(ifindex, vrf_id); if (ifp == NULL) { flog_err(EC_LIB_ZAPI_ENCODE, @@ -2581,7 +2582,7 @@ static int zclient_read(struct thread *thread) case ZEBRA_INTERFACE_LINK_PARAMS: if (zclient->interface_link_params) (*zclient->interface_link_params)(command, zclient, - length); + length, vrf_id); break; case ZEBRA_FEC_UPDATE: if (zclient_debug) diff --git a/lib/zclient.h b/lib/zclient.h index 401d6c400a..95f0a990b2 100644 --- a/lib/zclient.h +++ b/lib/zclient.h @@ -229,7 +229,7 @@ struct zclient { int (*interface_address_add)(int, struct zclient *, uint16_t, vrf_id_t); int (*interface_address_delete)(int, struct zclient *, uint16_t, vrf_id_t); - int (*interface_link_params)(int, struct zclient *, uint16_t); + int (*interface_link_params)(int, struct zclient *, uint16_t, vrf_id_t); int (*interface_bfd_dest_update)(int, struct zclient *, uint16_t, vrf_id_t); int (*interface_nbr_address_add)(int, struct zclient *, uint16_t, @@ -564,7 +564,8 @@ extern struct interface *zebra_interface_vrf_update_read(struct stream *s, extern void zebra_interface_if_set_value(struct stream *, struct interface *); extern void zebra_router_id_update_read(struct stream *s, struct prefix *rid); -extern struct interface *zebra_interface_link_params_read(struct stream *); +extern struct interface *zebra_interface_link_params_read(struct stream *s, + vrf_id_t vrf_id); extern size_t zebra_interface_link_params_write(struct stream *, struct interface *); extern int zclient_send_get_label_chunk( diff --git a/ospfd/ospf_zebra.c b/ospfd/ospf_zebra.c index 79ddb192c1..21695ac776 100644 --- a/ospfd/ospf_zebra.c +++ b/ospfd/ospf_zebra.c @@ -340,11 +340,11 @@ static int ospf_interface_address_delete(int command, struct zclient *zclient, } static int ospf_interface_link_params(int command, struct zclient *zclient, - zebra_size_t length) + zebra_size_t length, vrf_id_t vrf_id) { struct interface *ifp; - ifp = zebra_interface_link_params_read(zclient->ibuf); + ifp = zebra_interface_link_params_read(zclient->ibuf, vrf_id); if (ifp == NULL) return 0; -- 2.39.5