From b63de148a4299dc8de4210fb181fb65f95970590 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Bosdonnat?= Date: Wed, 26 Apr 2017 11:45:42 +0200 Subject: [PATCH] IPv6 route check: list devices only once If several RA routes are found for the same device, only list that device once in the error message. --- src/util/virnetdevip.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/util/virnetdevip.c b/src/util/virnetdevip.c index 09925e1d74..bf98ed8a59 100644 --- a/src/util/virnetdevip.c +++ b/src/util/virnetdevip.c @@ -551,6 +551,8 @@ virNetDevIPCheckIPv6ForwardingCallback(const struct nlmsghdr *resp, int ret = 0; int len = RTM_PAYLOAD(resp); int oif = -1; + size_t i; + bool hasDevice; /* Ignore messages other than route ones */ if (resp->nlmsg_type != RTM_NEWROUTE) @@ -587,7 +589,13 @@ virNetDevIPCheckIPv6ForwardingCallback(const struct nlmsghdr *resp, accept_ra = virNetDevIPGetAcceptRA(ifname); VIR_DEBUG("Checking route for device %s, accept_ra: %d", ifname, accept_ra); - if (accept_ra != 2 && VIR_APPEND_ELEMENT(data->devices, data->ndevices, ifname) < 0) + hasDevice = false; + for (i = 0; i < data->ndevices && !hasDevice; i++) { + if (STREQ(data->devices[i], ifname)) + hasDevice = true; + } + if (accept_ra != 2 && !hasDevice && + VIR_APPEND_ELEMENT(data->devices, data->ndevices, ifname) < 0) goto error; cleanup: