Re: [PATCH iproute2-next 0/6] ip: Use netlink to walk through network device list

2018-02-02 Thread Serhey Popovych
Serhey Popovych wrote:
> In this seris I replace /proc/net/dev and /sys/class/net usage for walk
> through network device list in iptunnel/ip6tunnel and iptuntap with
> netlink dump.
> 
> Following changed since RFC was sent:
> 
>   1) Treat @struct rtnl_link_stats and @struct rtnl_link_stats64 as
>  array with __u32 and __u64 elements respectively in
>  copy_rtnl_link_stats64() as suggested by Stephen Hemminger.
> 
>   2) Remove @name and @size parameters from @struct tnl_print_nlmsg_info
>  since we can get them easily from other data.
> 
> Testing.
> 
> 
> Following script is used to ensure I didn't broke things too much:
> 
> \#!/bin/bash
> 
> iproute2_dir="$1"
> iface='gre1'
> 
> pushd "$iproute2_dir" &>/dev/null
> 
> for i in new old; do
>   DIR="/tmp/$i"
>   mkdir -p "$DIR"
> 
>   ln -snf ip.$i ip/ip
> 
>   for o in '' -s -d; do
>   ip/ip $o tunnel show   >"$DIR/ip${o}-tunnel-show"
>   ip/ip -4 $o tunnel show>"$DIR/ip-4${o}-tunnel-show"
>   ip/ip -6 $o tunnel show>"$DIR/ip-6${o}-tunnel-show"
>   ip/ip $o tunnel show dev "$iface" \
>   >"$DIR/ip${o}-tunnel-show-$iface"
>   ip/ip $o tuntap show   >"$DIR/ip${o}-tuntap-show"
>   done
> done
> rm -f ip/ip
> 
> diff -urN /tmp/{old,new} |sed -n -Ee'/^(-{3}|\+{3})[[:space:]]+/!p'
> rc=$?
> 
> popd &>/dev/null
> exit $rc
> 
> Results:
> 
> 
> ...
> fopen /sys/class/net/ipip1/tun_flags: No such file or directory
> fopen /sys/class/net/ipip2/tun_flags: No such file or directory
> fopen /sys/class/net/gre10/tun_flags: No such file or directory
> ...
Note that this comes from ip.old (before series applied) on 3.2 kernel.

> diff -urN /tmp/old/ip-d-tuntap-show /tmp/new/ip-d-tuntap-show
> @@ -1,4 +1,4 @@
> -tun1: tap user 1004 group 27
> - Attached to processes:
>  tun0: tun user 1000 group 27
>   Attached to processes:
> +tun1: tap user 1004 group 27
> + Attached to processes:
> diff -urN /tmp/old/ip-s-tuntap-show /tmp/new/ip-s-tuntap-show
> @@ -1,2 +1,2 @@
> -tun1: tap user 1004 group 27
>  tun0: tun user 1000 group 27
> +tun1: tap user 1004 group 27
> diff -urN /tmp/old/ip-tuntap-show /tmp/new/ip-tuntap-show
> @@ -1,2 +1,2 @@
> -tun1: tap user 1004 group 27
>  tun0: tun user 1000 group 27
> +tun1: tap user 1004 group 27
> 
> So basically only print order for ip tuntap get changes. Rest is intact.
> 
> Thanks,
> Serhii
> 
> Serhey Popovych (6):
>   ipaddress: Unify print_link_stats() and print_link_stats64()
>   ip: Introduce get_rtnl_link_stats_rta() to get link statistics
>   tunnel: Split statistic getting and printing
>   iptunnel/ip6tunnel: Code cleanups
>   iptunnel/ip6tunnel: Use netlink to walk through tunnels list
>   tuntap: Use netlink to walk through tuntap list
> 
>  include/utils.h |3 +
>  ip/ip6tunnel.c  |  115 +++--
>  ip/ipaddress.c  |  189 
> ---
>  ip/iptunnel.c   |   93 +--
>  ip/iptuntap.c   |  121 ++-
>  ip/tunnel.c |  114 ++---
>  ip/tunnel.h |   17 -
>  lib/utils.c |   45 +
>  8 files changed, 324 insertions(+), 373 deletions(-)
> 




signature.asc
Description: OpenPGP digital signature


[PATCH iproute2-next 0/6] ip: Use netlink to walk through network device list

2018-02-02 Thread Serhey Popovych
In this seris I replace /proc/net/dev and /sys/class/net usage for walk
through network device list in iptunnel/ip6tunnel and iptuntap with
netlink dump.

Following changed since RFC was sent:

  1) Treat @struct rtnl_link_stats and @struct rtnl_link_stats64 as
 array with __u32 and __u64 elements respectively in
 copy_rtnl_link_stats64() as suggested by Stephen Hemminger.

  2) Remove @name and @size parameters from @struct tnl_print_nlmsg_info
 since we can get them easily from other data.

Testing.


Following script is used to ensure I didn't broke things too much:

\#!/bin/bash

iproute2_dir="$1"
iface='gre1'

pushd "$iproute2_dir" &>/dev/null

for i in new old; do
DIR="/tmp/$i"
mkdir -p "$DIR"

ln -snf ip.$i ip/ip

for o in '' -s -d; do
ip/ip $o tunnel show   >"$DIR/ip${o}-tunnel-show"
ip/ip -4 $o tunnel show>"$DIR/ip-4${o}-tunnel-show"
ip/ip -6 $o tunnel show>"$DIR/ip-6${o}-tunnel-show"
ip/ip $o tunnel show dev "$iface" \
>"$DIR/ip${o}-tunnel-show-$iface"
ip/ip $o tuntap show   >"$DIR/ip${o}-tuntap-show"
done
done
rm -f ip/ip

diff -urN /tmp/{old,new} |sed -n -Ee'/^(-{3}|\+{3})[[:space:]]+/!p'
rc=$?

popd &>/dev/null
exit $rc

Results:


...
fopen /sys/class/net/ipip1/tun_flags: No such file or directory
fopen /sys/class/net/ipip2/tun_flags: No such file or directory
fopen /sys/class/net/gre10/tun_flags: No such file or directory
...
diff -urN /tmp/old/ip-d-tuntap-show /tmp/new/ip-d-tuntap-show
@@ -1,4 +1,4 @@
-tun1: tap user 1004 group 27
-   Attached to processes:
 tun0: tun user 1000 group 27
Attached to processes:
+tun1: tap user 1004 group 27
+   Attached to processes:
diff -urN /tmp/old/ip-s-tuntap-show /tmp/new/ip-s-tuntap-show
@@ -1,2 +1,2 @@
-tun1: tap user 1004 group 27
 tun0: tun user 1000 group 27
+tun1: tap user 1004 group 27
diff -urN /tmp/old/ip-tuntap-show /tmp/new/ip-tuntap-show
@@ -1,2 +1,2 @@
-tun1: tap user 1004 group 27
 tun0: tun user 1000 group 27
+tun1: tap user 1004 group 27

So basically only print order for ip tuntap get changes. Rest is intact.

Thanks,
Serhii

Serhey Popovych (6):
  ipaddress: Unify print_link_stats() and print_link_stats64()
  ip: Introduce get_rtnl_link_stats_rta() to get link statistics
  tunnel: Split statistic getting and printing
  iptunnel/ip6tunnel: Code cleanups
  iptunnel/ip6tunnel: Use netlink to walk through tunnels list
  tuntap: Use netlink to walk through tuntap list

 include/utils.h |3 +
 ip/ip6tunnel.c  |  115 +++--
 ip/ipaddress.c  |  189 ---
 ip/iptunnel.c   |   93 +--
 ip/iptuntap.c   |  121 ++-
 ip/tunnel.c |  114 ++---
 ip/tunnel.h |   17 -
 lib/utils.c |   45 +
 8 files changed, 324 insertions(+), 373 deletions(-)

-- 
1.7.10.4



[RFC][PATCH iproute2-next 0/6] ip: Use netlink to walk through network device list

2018-02-01 Thread Serhey Popovych
In this seris I replace /proc/net/dev and /sys/class/net usage for walk
through network device list in iptunnel/ip6tunnel and iptuntap by
rtnl_dump_filter() functionality.

This is an RFC, tested minimally tunnels, tuntap seems work as before.

Note that some comments, especially for iptunnel/ip6tunnel commit are
missing: will add this in final series, as well as update cover letter.

Thanks,
Serhii

Serhey Popovych (6):
  ipaddress: Unify print_link_stats() and print_link_stats64()
  ip: Introduce get_rtnl_link_stats_rta() to get link statistics
  tunnel: Split statistic getting and printing
  iptunnel/ip6tunnel: Code cleanups
  iptunnel/ip6tunnel: Use netlink to walk through tunnels list
  tuntap: Use netlink to walk through tuntap list

 include/utils.h |3 +
 ip/ip6tunnel.c  |  117 +++---
 ip/ipaddress.c  |  189 ---
 ip/iptunnel.c   |   95 ++--
 ip/iptuntap.c   |  121 ++-
 ip/tunnel.c |  114 ++---
 ip/tunnel.h |   17 -
 lib/utils.c |   68 
 8 files changed, 351 insertions(+), 373 deletions(-)

-- 
1.7.10.4