Currently there is two places in ip(8) where /proc/net/dev is read line by line with nearly identical steps: iptunnel.c and ip6tunnel.c
On the other hand we have iptuntap.c that uses /sys/class/net that could be problematic in case of unshare(1)d network namespace without sysfs being mounted. Introduce and use do_each_proc_net_dev() helper to read data from /proc/net/dev line by line and pass this information to implementation specific callback function. See individual patch description message for more details. Series is open for reviews and comments. Tested only by compiling and executing ip [-46] [-s] [-d] tunnel in various combinations: no problem so far. More can be done by request. Thanks, Serhii Serhey Popovych (4): utils: Introduce do_each_proc_net_dev() helper iptunnel: Use do_each_proc_net_dev() ip6tunnel: Use do_each_proc_net_dev() tuntap: Use do_each_proc_net_dev() include/utils.h | 10 ++++++ ip/ip6tunnel.c | 94 ++++++++++++++++++++------------------------------ ip/iptunnel.c | 102 +++++++++++++++++++++++++------------------------------ ip/iptuntap.c | 59 ++++++++++++++------------------ lib/utils.c | 51 ++++++++++++++++++++++++++++ 5 files changed, 170 insertions(+), 146 deletions(-) -- 1.7.10.4