----- Original Message -----
net without arguments shows network devices in init_net
net -n -- in network namespace of current task
net -n pid|taskp -- in network namespace of specified task
Signed-off-by: Vasily Averin <vvs(a)openvz.org>
... [ cut ] ...
static void
-show_net_devices_v3(void)
+show_net_devices_v3(ulong task)
{
+ ulong nsproxy_p, net_ns_p;
struct list_data list_data, *ld;
char *net_device_buf;
char buf[BUFSIZE];
@@ -523,8 +542,15 @@ show_net_devices_v3(void)
ld = &list_data;
BZERO(ld, sizeof(struct list_data));
ld->flags |= LIST_ALLOCATE;
- ld->start = ld->end =
- symbol_value("init_net") + OFFSET(net_dev_base_head);
+ if (VALID_MEMBER(task_struct_nsproxy)) {
+ readmem(task + OFFSET(task_struct_nsproxy), KVADDR, &nsproxy_p,
+ sizeof(ulong), "task_struct.nsproxy", FAULT_ON_ERROR);
+ if (!readmem(nsproxy_p + OFFSET(nsproxy_net_ns), KVADDR, &net_ns_p,
+ sizeof(ulong), "nsproxy.net_ns", RETURN_ON_ERROR|QUIET))
+ error(FATAL, "cannot determine net_namespace location!\n");
+ } else
+ net_ns_p = symbol_value("init_net");
+ ld->start = ld->end = net_ns_p + OFFSET(net_dev_base_head);
ld->list_head_offset = OFFSET(net_device_dev_list);
Shouldn't the VALID_MEMBER test above be for nsproxy.net_ns?
It looks task_struct.nsproxy was introduced in 2.6.19, but
nsproxy.net_ns didn't come along until 2.6.24.
Dave