[libvirt] [PATCH 08/16] LXC from native: convert macvlan network configuration

Daniel P. Berrange berrange at redhat.com
Fri Jan 24 13:45:05 UTC 2014


On Tue, Jan 14, 2014 at 02:49:57PM +0100, Cédric Bosdonnat wrote:
> ---
>  src/lxc/lxc_native.c                               | 38 +++++++++++++++++-----
>  .../lxcconf2xml-macvlannetwork.config              | 14 ++++++++
>  .../lxcconf2xmldata/lxcconf2xml-macvlannetwork.xml | 30 +++++++++++++++++
>  tests/lxcconf2xmltest.c                            |  1 +
>  4 files changed, 74 insertions(+), 9 deletions(-)
>  create mode 100644 tests/lxcconf2xmldata/lxcconf2xml-macvlannetwork.config
>  create mode 100644 tests/lxcconf2xmldata/lxcconf2xml-macvlannetwork.xml
> 
> diff --git a/src/lxc/lxc_native.c b/src/lxc/lxc_native.c
> index 6ea4998..a99bc1c 100644
> --- a/src/lxc/lxc_native.c
> +++ b/src/lxc/lxc_native.c
> @@ -521,9 +521,11 @@ static virDomainNetDefPtr
>  lxcCreateNetDef(const char *type,
>                  const char *link,
>                  const char *mac,
> -                const char *flag)
> +                const char *flag,
> +                const char *macvlanmode)
>  {
>      virDomainNetDefPtr net = NULL;
> +    virMacAddr macAddr;
>  
>      if (VIR_ALLOC(net) < 0)
>          goto error;
> @@ -535,9 +537,11 @@ lxcCreateNetDef(const char *type,
>              net->linkstate = VIR_DOMAIN_NET_INTERFACE_LINK_STATE_DOWN;
>      }
>  
> -    if (STREQ(type, "veth")) {
> -        virMacAddr macAddr;
>  
> +    if (mac && virMacAddrParse(mac, &macAddr) == 0)
> +        net->mac = macAddr;
> +
> +    if (STREQ(type, "veth")) {
>          if (!link)
>              goto error;
>  
> @@ -546,9 +550,18 @@ lxcCreateNetDef(const char *type,
>          if (VIR_STRDUP(net->data.bridge.brname, link) < 0)
>              goto error;
>  
> -        if (mac && virMacAddrParse(mac, &macAddr) == 0)
> -            net->mac = macAddr;
> +    } else if (STREQ(type, "macvlan")) {
> +        net->type = VIR_DOMAIN_NET_TYPE_DIRECT;
> +
> +        if (VIR_STRDUP(net->data.direct.linkdev, link) < 0)
> +            goto error;
>  
> +        if (!macvlanmode || STREQ(macvlanmode, "private"))
> +            net->data.direct.mode = VIR_NETDEV_MACVLAN_MODE_PRIVATE;
> +        else if (STREQ(macvlanmode, "vepa"))
> +            net->data.direct.mode = VIR_NETDEV_MACVLAN_MODE_VEPA;
> +        else if (STREQ(macvlanmode, "bridget"))

Is that really meant to be 'bridget' is is that a typo ?

> +            net->data.direct.mode = VIR_NETDEV_MACVLAN_MODE_BRIDGE;

We should likely have a 'else' clause which reports an error


> @@ -655,10 +672,13 @@ lxcConvertNetworkSettings(virDomainDefPtr def, virPropertiesPtr properties)
>                  mac = property->value;
>              else if (STREQ(property->key, "lxc.network.flags"))
>                  flag = property->value;
> +            else if (STREQ(property->key, "lxc.network.macvlan.mode"))
> +                macvlanmode = property->value;

Perhaps we want to have a 'VIR_WARN' statement here. Reporting an error is
a bit harsh, since we want to make best effort to report something sensible,
so a VIR_WARN at least lets us know we've work todo

>          }
>  
>          /* Add the last network definition found */
> -        status = lxcAddNetworkDefinition(def, type, link, mac, flag);
> +        status = lxcAddNetworkDefinition(def, type, link, mac, flag,
> +                                         macvlanmode);
>          if (status < 0)
>              return -1;
>          else if (status > 0)


Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|




More information about the libvir-list mailing list