mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-04 10:55:19 +00:00
lxc: move wireless PHYs to a network namespace
The 802.11 interfaces can not be moved by themselves, their Phy has to move too. If there are other interfaces, they have to move too -- hopefully it's not too confusing. This is a less-invasive alternative to defining a new hostdev type for PHYs. Signed-off-by: Michal Privoznik <mprivozn@redhat.com> (cherry picked from commit 3a495948b97770b026afab1ccaac560a9669a36e)
This commit is contained in:
parent
5040f00b49
commit
e5982092d1
@ -551,20 +551,53 @@ int virNetDevSetMTUFromDevice(const char *ifname,
|
||||
*/
|
||||
int virNetDevSetNamespace(const char *ifname, pid_t pidInNs)
|
||||
{
|
||||
int rc;
|
||||
int ret = -1;
|
||||
char *pid = NULL;
|
||||
char *phy = NULL;
|
||||
char *phy_path = NULL;
|
||||
int len;
|
||||
|
||||
const char *argv[] = {
|
||||
"ip", "link", "set", ifname, "netns", NULL, NULL
|
||||
};
|
||||
|
||||
const char *iwargv[] = {
|
||||
"iw", "phy", NULL, "set", "netns", NULL, NULL
|
||||
};
|
||||
|
||||
if (virAsprintf(&pid, "%lld", (long long) pidInNs) == -1)
|
||||
return -1;
|
||||
|
||||
argv[5] = pid;
|
||||
rc = virRun(argv, NULL);
|
||||
if (virRun(argv, NULL) < 0)
|
||||
goto cleanup;
|
||||
|
||||
/* The 802.11 wireless devices only move together with their PHY. */
|
||||
if (virNetDevSysfsFile(&phy_path, ifname, "phy80211/name") < 0)
|
||||
goto cleanup;
|
||||
|
||||
if ((len = virFileReadAllQuiet(phy_path, 1024, &phy) < 0)) {
|
||||
if (errno == ENOENT) {
|
||||
/* Okay, this is not a wireless card. Claim success. */
|
||||
ret = 0;
|
||||
}
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
/* Remove a line break. */
|
||||
phy[len - 1] = '\0';
|
||||
|
||||
iwargv[2] = phy;
|
||||
iwargv[5] = pid;
|
||||
if (virRun(iwargv, NULL) < 0)
|
||||
goto cleanup;
|
||||
|
||||
ret = 0;
|
||||
cleanup:
|
||||
VIR_FREE(phy_path);
|
||||
VIR_FREE(phy);
|
||||
VIR_FREE(pid);
|
||||
return rc;
|
||||
return ret;
|
||||
}
|
||||
|
||||
#if defined(SIOCSIFNAME) && defined(HAVE_STRUCT_IFREQ)
|
||||
|
Loading…
x
Reference in New Issue
Block a user