}
if ((fp = fopen(file, "r+")) == NULL) {
rc = errno;
- free(file);
- log_debug("privsep", "cannot open interface description for %s",
+ log_debug("privsep", "cannot open interface description for %s: %m",
name);
+ free(file);
return rc;
}
free(file);
os.chdir(pwd)
+def mount_sys(target="/sys"):
+ flags = [2 | 4 | 8] # MS_NOSUID | MS_NODEV | MS_NOEXEC
+ flags.append(1 << 18) # MS_PRIVATE
+ flags.append(1 << 19) # MS_SLAVE
+ for fl in flags:
+ ret = libc.mount(b"none",
+ target.encode('ascii'),
+ b"sysfs",
+ fl,
+ None)
+ if ret == -1:
+ e = ctypes.get_errno()
+ raise OSError(e, os.strerror(e))
+
+
class Namespace(object):
"""Combine several namespaces into one.
# MS_REC | MS_PRIVATE
16384 | (1 << 18),
None)
+ mount_sys()
while True:
try:
assert out == {}
+def test_set_interface_alias(lldpd1, lldpd, lldpcli, namespaces):
+ with namespaces(1):
+ lldpcli("configure", "system", "interface", "description")
+ with namespaces(2):
+ lldpd()
+ with namespaces(1):
+ ipr = pyroute2.IPRoute()
+ link = ipr.link('get', ifname='eth0')[0]
+ assert link.get_attr('IFLA_IFALIAS') == 'lldpd: connected to ns-2.example.com'