mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-25 15:15:25 +00:00
LXC implement missing macaddr assignment feature
Currently MAC address configuration of container veth is just ignored. This patch implements the missing feature. * src/lxc/veth.c, src/lxc/veth.h: add setMacAddr * src/lxc/lxc_driver.c: set macaddr of container veth if specified
This commit is contained in:
parent
89f0c6d089
commit
e8fc4cbb64
@ -786,6 +786,17 @@ static int lxcSetupInterfaces(virConnectPtr conn,
|
||||
goto error_exit;
|
||||
}
|
||||
|
||||
if (def->nets[i]->mac) {
|
||||
char macaddr[VIR_MAC_STRING_BUFLEN];
|
||||
virFormatMacAddr(def->nets[i]->mac, macaddr);
|
||||
if (0 != (rc = setMacAddr(containerVeth, macaddr))) {
|
||||
virReportSystemError(conn, rc,
|
||||
_("failed to set %s to %s"),
|
||||
macaddr, containerVeth);
|
||||
goto error_exit;
|
||||
}
|
||||
}
|
||||
|
||||
if (0 != (rc = brAddInterface(brctl, bridge, parentVeth))) {
|
||||
virReportSystemError(conn, rc,
|
||||
_("failed to add %s device to %s"),
|
||||
|
@ -216,3 +216,34 @@ error_out:
|
||||
VIR_FREE(pid);
|
||||
return rc;
|
||||
}
|
||||
|
||||
/**
|
||||
* setMacAddr
|
||||
* @iface: name of device
|
||||
* @macaddr: MAC address to be assigned
|
||||
*
|
||||
* Changes the MAC address of the given device with the
|
||||
* given address using this command:
|
||||
* ip link set @iface address @macaddr
|
||||
*
|
||||
* Returns 0 on success or -1 in case of error
|
||||
*/
|
||||
int setMacAddr(const char* iface, const char* macaddr)
|
||||
{
|
||||
int rc = -1;
|
||||
const char *argv[] = {
|
||||
"ip", "link", "set", iface, "address", macaddr, NULL
|
||||
};
|
||||
int cmdResult;
|
||||
|
||||
if (NULL == iface) {
|
||||
goto error_out;
|
||||
}
|
||||
|
||||
rc = virRun(NULL, argv, &cmdResult);
|
||||
if (0 == rc)
|
||||
rc = cmdResult;
|
||||
|
||||
error_out:
|
||||
return rc;
|
||||
}
|
||||
|
@ -20,5 +20,6 @@ int vethCreate(char* veth1, int veth1MaxLen, char* veth2,
|
||||
int vethDelete(const char* veth);
|
||||
int vethInterfaceUpOrDown(const char* veth, int upOrDown);
|
||||
int moveInterfaceToNetNs(const char *iface, int pidInNs);
|
||||
int setMacAddr(const char* iface, const char* macaddr);
|
||||
|
||||
#endif /* VETH_H */
|
||||
|
Loading…
Reference in New Issue
Block a user