[libvirt] [RESEND PATCH] network: don't allow multiple dhcp sections

Laine Stump laine at laine.org
Mon Dec 8 20:45:15 UTC 2014


On 12/04/2014 04:07 PM, Kyle DeFrancia wrote:
> This resolves: https://bugzilla.redhat.com/show_bug.cgi?id=907779
>
> A <dhcp> element can exist in only one IPv4 address and one IPv6
> address per network.  This patch enforces that in virNetworkUpdate.
> ---
> Rebased to latest master, hopefully this works better.

It took awhile to figure out the problem - whatever method you used to
send this patch wrapped long lines and combined them together. I had to
break up and re-format the places I've indicated below with ^^^. Aside
from that I just combined the multiple lines of the for() (because
combined they were still below the 80 character limit) and added another
blank line before and after the new function.

ACK and pushed. Thanks for the bugfix!

(Next time it would save some trouble if you directly used "git
send-email" to sent patches)

> My original message:
> https://www.redhat.com/archives/libvir-list/2014-November/msg00989.html
>
>  src/conf/network_conf.c | 31 +++++++++++++++++++++++++++++++
>  1 file changed, 31 insertions(+)
>
> diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c
> index 97719ed..92aa9d5 100644
> --- a/src/conf/network_conf.c
> +++ b/src/conf/network_conf.c
> @@ -3480,6 +3480,31 @@ virNetworkIpDefByIndex(virNetworkDefPtr def, int
> parentIndex) }

^^^^^^
>  static int
> +virNetworkDefUpdateCheckMultiDHCP(virNetworkDefPtr def,
> +                                  virNetworkIpDefPtr ipdef)
> +{
> +    int family = VIR_SOCKET_ADDR_FAMILY(&ipdef->address);
> +    size_t i;
> +    virNetworkIpDefPtr ip;
> +
> +    for (i = 0;
> +         (ip = virNetworkDefGetIpByIndex(def, family, i));
> +         i++) {
> +        if (ip != ipdef) {
> +            if (ip->nranges || ip->nhosts) {
> +                virReportError(VIR_ERR_OPERATION_INVALID,
> +                               _("dhcp is supported only for a "
> +                                 "single %s address on each network"),
> +                               (family == AF_INET) ? "IPv4" : "IPv6");
> +                return -1;
> +            }
> +        }
> +    }
> +
> +    return 0;
> +}
> +
> +static int
>  virNetworkDefUpdateIPDHCPHost(virNetworkDefPtr def,
>                                unsigned int command,
>                                int parentIndex,
> @@ -3544,6 +3569,9 @@ virNetworkDefUpdateIPDHCPHost(virNetworkDefPtr
>  def, } else if ((command == VIR_NETWORK_UPDATE_COMMAND_ADD_FIRST) ||

^^^
>                 (command == VIR_NETWORK_UPDATE_COMMAND_ADD_LAST)) {
>
> +        if (virNetworkDefUpdateCheckMultiDHCP(def, ipdef) < 0)
> +            goto cleanup;
> +
>          /* log error if an entry with same name/address/ip already
>   exists */ for (i = 0; i < ipdef->nhosts; i++) {

^^^^
>              if ((host.mac &&
> @@ -3651,6 +3679,9 @@ virNetworkDefUpdateIPDHCPRange(virNetworkDefPtr
>   def, if ((command == VIR_NETWORK_UPDATE_COMMAND_ADD_FIRST) ||

^^^^^^
>          (command == VIR_NETWORK_UPDATE_COMMAND_ADD_LAST)) {
>
> +        if (virNetworkDefUpdateCheckMultiDHCP(def, ipdef) < 0)
> +            goto cleanup;
> +
>          if (i < ipdef->nranges) {
>              char *startip = virSocketAddrFormat(&range.start);
>              char *endip = virSocketAddrFormat(&range.end);




More information about the libvir-list mailing list