From 5b3d543878c7a09a3ddcc617b5d2978e710d0861 Mon Sep 17 00:00:00 2001 From: GaoChX Date: Tue, 28 Jun 2022 16:25:03 +0800 Subject: vrrp: while delete vr can't delete multi virtual address. Here is bug example: vpp# create loopback interface loop0 vpp# vrrp vr add loop0 vr_id 1 priority 100 192.168.1.1 192.168.1.2 vpp# vrrp vr del loop0 vr_id 1 vpp# vrrp vr add loop0 vr_id 1 priority 100 192.168.1.1 192.168.1.2 vrrp vr add: vrrp_vr_add_del returned -105 Type: fix Signed-off-by: GaoChX Change-Id: I3e0d086ac8fb52756339cff19b9a83911ec9748b --- src/plugins/vrrp/vrrp.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/plugins/vrrp/vrrp.c b/src/plugins/vrrp/vrrp.c index d28905379b2..f1ab1b27185 100644 --- a/src/plugins/vrrp/vrrp.c +++ b/src/plugins/vrrp/vrrp.c @@ -813,10 +813,13 @@ static void vrrp_vr_del_common (vrrp_vr_t *vr, vrrp_vr_key_t *key) { vrrp_main_t *vrm = &vrrp_main; + ip46_address_t *vr_addrs_del_copy; vrrp_vr_tracking_ifs_add_del (vr, vr->tracking.interfaces, 0); - vrrp_vr_addrs_add_del (vr, 0, vr->config.vr_addrs); + vr_addrs_del_copy = vec_dup (vr->config.vr_addrs); + vrrp_vr_addrs_add_del (vr, 0, vr_addrs_del_copy); mhash_unset (&vrm->vr_index_by_key, key, 0); + vec_free (vr_addrs_del_copy); vec_free (vr->config.peer_addrs); vec_free (vr->config.vr_addrs); vec_free (vr->tracking.interfaces); -- cgit 1.2.3-korg