
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 :|