mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-25 23:25:24 +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;
|
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))) {
|
if (0 != (rc = brAddInterface(brctl, bridge, parentVeth))) {
|
||||||
virReportSystemError(conn, rc,
|
virReportSystemError(conn, rc,
|
||||||
_("failed to add %s device to %s"),
|
_("failed to add %s device to %s"),
|
||||||
|
@ -216,3 +216,34 @@ error_out:
|
|||||||
VIR_FREE(pid);
|
VIR_FREE(pid);
|
||||||
return rc;
|
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 vethDelete(const char* veth);
|
||||||
int vethInterfaceUpOrDown(const char* veth, int upOrDown);
|
int vethInterfaceUpOrDown(const char* veth, int upOrDown);
|
||||||
int moveInterfaceToNetNs(const char *iface, int pidInNs);
|
int moveInterfaceToNetNs(const char *iface, int pidInNs);
|
||||||
|
int setMacAddr(const char* iface, const char* macaddr);
|
||||||
|
|
||||||
#endif /* VETH_H */
|
#endif /* VETH_H */
|
||||||
|
Loading…
Reference in New Issue
Block a user