提交 e5982092 编写于 作者: L Lubomir Rintel 提交者: Cole Robinson

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: NMichal Privoznik <mprivozn@redhat.com>
(cherry picked from commit 3a495948)
上级 5040f00b
......@@ -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)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册