From: Cédric Bosdonnat Date: Wed, 26 Apr 2017 09:45:42 +0000 (+0200) Subject: IPv6 route check: list devices only once X-Git-Tag: v3.3.0-rc1~75 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b63de148a4299dc8de4210fb181fb65f95970590;p=thirdparty%2Flibvirt.git 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. --- 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: