diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/zclient.c | 16 | ||||
| -rw-r--r-- | lib/zclient.h | 3 |
2 files changed, 17 insertions, 2 deletions
diff --git a/lib/zclient.c b/lib/zclient.c index 4a70881b57..ffae1332af 100644 --- a/lib/zclient.c +++ b/lib/zclient.c @@ -2269,10 +2269,13 @@ stream_failure: } struct interface *zebra_interface_link_params_read(struct stream *s, - vrf_id_t vrf_id) + vrf_id_t vrf_id, + bool *changed) { struct if_link_params *iflp; + struct if_link_params iflp_copy; ifindex_t ifindex; + bool params_changed = false; STREAM_GETL(s, ifindex); @@ -2285,12 +2288,23 @@ struct interface *zebra_interface_link_params_read(struct stream *s, return NULL; } + if (ifp->link_params == NULL) + params_changed = true; + if ((iflp = if_link_params_get(ifp)) == NULL) return NULL; + memcpy(&iflp_copy, iflp, sizeof(iflp_copy)); + if (link_params_set_value(s, iflp) != 0) goto stream_failure; + if (memcmp(&iflp_copy, iflp, sizeof(iflp_copy))) + params_changed = true; + + if (changed) + *changed = params_changed; + return ifp; stream_failure: diff --git a/lib/zclient.h b/lib/zclient.h index 48de3425be..a25c5800b7 100644 --- a/lib/zclient.h +++ b/lib/zclient.h @@ -1043,7 +1043,8 @@ extern struct interface *zebra_interface_vrf_update_read(struct stream *s, extern int zebra_router_id_update_read(struct stream *s, struct prefix *rid); extern struct interface *zebra_interface_link_params_read(struct stream *s, - vrf_id_t vrf_id); + vrf_id_t vrf_id, + bool *changed); extern size_t zebra_interface_link_params_write(struct stream *, struct interface *); extern enum zclient_send_status |
