Hello community,

here is the log from the commit of package net-tools for openSUSE:Factory 
checked in at 2017-06-23 09:14:37
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/net-tools (Old)
 and      /work/SRC/openSUSE:Factory/.net-tools.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "net-tools"

Fri Jun 23 09:14:37 2017 rev:51 rq:504900 version:2.0+git20170221.479bb4a

Changes:
--------
--- /work/SRC/openSUSE:Factory/net-tools/net-tools.changes      2016-11-04 
20:49:15.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.net-tools.new/net-tools.changes 2017-06-23 
09:14:39.429868189 +0200
@@ -1,0 +2,129 @@
+Sun Jun 18 07:29:18 UTC 2017 - [email protected]
+
+- Drop netstat xinetd service as we are phasing xinetd out
+  There is probably no need to replace it here as netstat was
+  deprecated and now users should favor 'ss' command from
+  iproute2
+
+-------------------------------------------------------------------
+Sun Jun 18 07:27:20 UTC 2017 - [email protected]
+
+- Provide compat symlink to /bin and /sbin to be on safe side
+  if someone hardcoded them in scripts (most distros switched
+  7 years ago)
+
+-------------------------------------------------------------------
+Sat Jun 17 19:53:44 UTC 2017 - [email protected]
+
+- Disable removed binaries for build rather than on install
+  * Refresh patch net-tools-configure.patch
+- Make sure we respect optflags
+- Add patch 0001-Add-ether-wake-binary.patch replacing standalone
+  ether-wake code in the archive
+- Add patch 0002-Do-not-warn-about-interface-socket-not-binded.patch
+  replacing net-tools-1.60-interface_socket.diff
+- Add patch 0003-Add-support-for-EiB-in-interface.c.patch enabling
+  EiB support in interfaces
+- Add patch 0004-By-default-do-not-fopen-anything-in-netrom_gr.patch
+  relpacing net-tools-1.60-netrom-fopen.diff
+- Add patch 0005-Add-support-for-interface-rename-in-nameif.patch
+  replacing nameif-rename.patch
+- Add patch 0006-Allow-interface-stacking.patch
+  replacing net-tools-1.60-interface_stack.patch
+- Add patch 0007-Introduce-T-notrim-option-in-netstat.patch
+  replacing net-tools-1.60-dont-trim-foreign-addr6.diff
+  and also net-tools-1.60-notrim.diff
+- Drop net-tools-1.60-use-gai.patch as it should be upstreamed first
+  and it does not apply clearly at all now
+
+-------------------------------------------------------------------
+Sat Jun 17 19:41:08 UTC 2017 - [email protected]
+
+- Move binaries to sbindir and bindir respectively
+- Switch from generating filelists to actually state them within
+  the spec-file, now it is quite readable
+- Move ifconfig and route to %{_bindir} as upstream does
+  (and debian/rh/... do too)
+
+-------------------------------------------------------------------
+Sat Jun 17 08:09:20 UTC 2017 - [email protected]
+
+- Remove all the manpage altering patches as they are from 2002 and
+  older while it changed and touching different languages for
+  rebasing is not bright idea, the same applies for translations
+  as upstream updated the translations we will pretend their
+  strings win
+- Switch to git service repacking so we don't have to carry all
+  the patches ourselves
+- Update to version 2.0+git20170221.479bb4a:
+  * slattach/plipconfig: add a config knob to control them
+  * Fixed trailing whitespace issue with a and i flags (#7)
+  * iptunnel: drop netinet/ip.h include
+  * iptunnel: fix building w/older linux headers
+  * build: respect standard $(LDLIBS) variable
+  * netstat: improve ROSE support
+  * AX.25: Rename all references to axattach to kissattach.
+  * Update all instances of my email address.
+  * Fix conversion of some ROSE addresses.
+  * Fix incorrect ARP output
+- Merge patch net-tools-1.60-miioff.diff in the main config patch
+- Rename net-tools-1.60.dif to net-tools-configure.patch in order
+  to reflect what it actually does
+- Drop nstrcmp.c as VCS contains newer version
+- Drop patches that were either merged upstream or fixed bit differently:
+  * manpages.diff
+  * net-tools-1.60-arp-unaligned-access.patch
+  * net-tools-1.60-compoundstatement.diff
+  * net-tools-1.60-cont-buff.patch
+  * net-tools-1.60-cs_CZ.bnc715580.diff
+  * net-tools-1.60-doc.dif
+  * net-tools-1.60-errors.patch
+  * net-tools-1.60-fclose.diff
+  * net-tools-1.60-fix-header-conflict.patch
+  * net-tools-1.60-hostname-ipv6.patch
+  * net-tools-1.60-hostname-s.patch
+  * net-tools-1.60-hostname-space.patch
+  * net-tools-1.60-ifconfig-SIOCSIFNETMASK.diff
+  * net-tools-1.60-ifconfig.8.diff
+  * net-tools-1.60-ifindex.diff
+  * net-tools-1.60-infiniband.diff
+  * net-tools-1.60-ipv6-statistics.diff
+  * net-tools-1.60-krn26.dif
+  * net-tools-1.60-long_to_int.diff
+  * net-tools-1.60-multilinestr.diff
+  * net-tools-1.60-nameif.diff
+  * net-tools-1.60-netstat-ci.diff
+  * net-tools-1.60-netstat-output.patch
+  * net-tools-1.60-netstat-p.patch
+  * net-tools-1.60-netstat.8.diff
+  * net-tools-1.60-netstat_retval.diff
+  * net-tools-1.60-numericstuff.diff
+  * net-tools-1.60-plipconfig-ecode.patch
+  * net-tools-1.60-plipconfig-manpage.patch
+  * net-tools-1.60-plipconfig-usage.patch
+  * net-tools-1.60-printval-conversion.patch
+  * net-tools-1.60-sctp-quiet
+  * net-tools-1.60-sctp.patch
+  * net-tools-1.60-snmp-counter-overflow.patch
+  * net-tools-1.60-sockios-SIOCGMIIPHY.diff
+  * net-tools-1.60-strictaliasing.diff
+  * net-tools-1.60-tcp-recvq-listen.patch
+  * netstat-trunc.dif
+  * net-tools-1.60-if_tr.diff
+  * net-tools-1.60-interface_mtu.diff
+
+-------------------------------------------------------------------
+Sat Jun 17 08:02:18 UTC 2017 - [email protected]
+
+- Cleanup a bit with spec-cleaner and remove sle11 conditions
+- Drop the patch net-tools-1.60-obsolete.diff
+  * If restored it is in the VCS and it silences all the rpm warnings
+
+-------------------------------------------------------------------
+Tue Nov  1 10:01:53 UTC 2016 - [email protected]
+
+- add COPYING
+- net-tools-1.60-use-gai.patch: 
+  use getaddrinfo instead of gethostbyname
+
+-------------------------------------------------------------------

Old:
----
  ether-wake.8
  ether-wake.c
  manpages.diff
  nameif-rename.patch
  net-tools-1.60-arp-unaligned-access.patch
  net-tools-1.60-compoundstatement.diff
  net-tools-1.60-cont-buff.patch
  net-tools-1.60-cs_CZ.bnc715580.diff
  net-tools-1.60-doc.dif
  net-tools-1.60-dont-trim-foreign-addr6.diff
  net-tools-1.60-errors.patch
  net-tools-1.60-fclose.diff
  net-tools-1.60-fix-header-conflict.patch
  net-tools-1.60-hostname-ipv6.patch
  net-tools-1.60-hostname-s.patch
  net-tools-1.60-hostname-space.patch
  net-tools-1.60-if_tr.diff
  net-tools-1.60-ifconfig-SIOCSIFNETMASK.diff
  net-tools-1.60-ifconfig.8.diff
  net-tools-1.60-ifindex.diff
  net-tools-1.60-infiniband.diff
  net-tools-1.60-interface_mtu.diff
  net-tools-1.60-interface_socket.diff
  net-tools-1.60-interface_stack.patch
  net-tools-1.60-ipv6-statistics.diff
  net-tools-1.60-krn26.dif
  net-tools-1.60-long_to_int.diff
  net-tools-1.60-miioff.diff
  net-tools-1.60-multilinestr.diff
  net-tools-1.60-nameif.diff
  net-tools-1.60-netrom-fopen.diff
  net-tools-1.60-netstat-ci.diff
  net-tools-1.60-netstat-output.patch
  net-tools-1.60-netstat-p.patch
  net-tools-1.60-netstat.8.diff
  net-tools-1.60-netstat_retval.diff
  net-tools-1.60-notrim.diff
  net-tools-1.60-numericstuff.diff
  net-tools-1.60-obsolete.diff
  net-tools-1.60-plipconfig-ecode.patch
  net-tools-1.60-plipconfig-manpage.patch
  net-tools-1.60-plipconfig-usage.patch
  net-tools-1.60-printval-conversion.patch
  net-tools-1.60-sctp-quiet
  net-tools-1.60-sctp.patch
  net-tools-1.60-snmp-counter-overflow.patch
  net-tools-1.60-sockios-SIOCGMIIPHY.diff
  net-tools-1.60-strictaliasing.diff
  net-tools-1.60-tcp-recvq-listen.patch
  net-tools-1.60.dif
  net-tools-1.60.tar.bz2
  netstat-trunc.dif
  netstat.xinetd
  nstrcmp.c

New:
----
  0001-Add-ether-wake-binary.patch
  0002-Do-not-warn-about-interface-socket-not-binded.patch
  0003-Add-support-for-EiB-in-interface.c.patch
  0004-By-default-do-not-fopen-anything-in-netrom_gr.patch
  0005-Add-support-for-interface-rename-in-nameif.patch
  0006-Allow-interface-stacking.patch
  0007-Introduce-T-notrim-option-in-netstat.patch
  _service
  net-tools-2.0+git20170221.479bb4a.tar.xz
  net-tools-configure.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ net-tools.spec ++++++
--- /var/tmp/diff_new_pack.xjdxy2/_old  2017-06-23 09:14:40.765679446 +0200
+++ /var/tmp/diff_new_pack.xjdxy2/_new  2017-06-23 09:14:40.765679446 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package net-tools
 #
-# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -17,93 +17,40 @@
 
 
 Name:           net-tools
-Url:            http://www.tazenda.demon.co.uk/phil/net-tools/
-Provides:       iputils:/usr/sbin/traceroute6
-Provides:       net_tool
-Obsoletes:      net_tool
-#force new traceroute or else..
-Recommends:     traceroute >= 2.0.0
-# provides hostname, domainname and dnsdomainname
-Requires:       hostname
-Version:        1.60
+Version:        2.0+git20170221.479bb4a
 Release:        0
 Summary:        Important Programs for Networking
 License:        GPL-2.0+
 Group:          Productivity/Networking/Other
-BuildRoot:      %{_tmppath}/%{name}-%{version}-build
-Source:         
http://www.tazenda.demon.co.uk/phil/net-tools/net-tools-%{version}.tar.bz2
-Source2:        netstat.xinetd
-Source3:        nstrcmp.c
-Source4:        ether-wake.c
-Source5:        ether-wake.8
-Patch:          net-tools-%{version}.dif
-Patch1:         netstat-trunc.dif
-Patch2:         manpages.diff
-Patch4:         net-tools-1.60-multilinestr.diff
-Patch5:         net-tools-1.60-krn26.dif
-Patch7:         net-tools-1.60-long_to_int.diff
-Patch8:         net-tools-1.60-compoundstatement.diff
-Patch9:         nameif-rename.patch
-Patch10:        net-tools-1.60-errors.patch
-Patch11:        net-tools-1.60-cont-buff.patch
-Patch12:        net-tools-1.60-miioff.diff
-Patch13:        net-tools-1.60-nameif.diff
-Patch14:        net-tools-1.60-sockios-SIOCGMIIPHY.diff
-Patch15:        net-tools-1.60-numericstuff.diff
-Patch16:        net-tools-1.60-if_tr.diff
-Patch18:        net-tools-1.60-netstat.8.diff
-Patch19:        net-tools-1.60-strictaliasing.diff
-Patch20:        net-tools-1.60-interface_stack.patch
-Patch21:        net-tools-1.60-arp-unaligned-access.patch
-Patch22:        net-tools-1.60-snmp-counter-overflow.patch
-Patch23:        net-tools-1.60-netstat-output.patch
-Patch24:        net-tools-1.60-netstat-p.patch
-Patch25:        net-tools-1.60-sctp.patch
-Patch26:        net-tools-1.60-sctp-quiet
-Patch27:        net-tools-1.60-hostname-space.patch
-Patch30:        net-tools-1.60-ifconfig.8.diff
-Patch31:        net-tools-1.60-tcp-recvq-listen.patch
-Patch32:        net-tools-1.60-netstat-ci.diff
-Patch33:        net-tools-1.60-ifconfig-SIOCSIFNETMASK.diff 
-Patch34:        net-tools-1.60-interface_socket.diff
-Patch35:        net-tools-1.60-interface_mtu.diff
-Patch36:        net-tools-1.60-printval-conversion.patch
-Patch38:        net-tools-1.60-obsolete.diff
-Patch39:        net-tools-1.60-fclose.diff
-Patch40:        net-tools-1.60-notrim.diff
-Patch41:        net-tools-1.60-ipv6-statistics.diff
-Patch42:        net-tools-1.60-ifindex.diff
-Patch43:        net-tools-1.60-infiniband.diff
-Patch44:        net-tools-1.60-netrom-fopen.diff
-Patch45:        net-tools-1.60-doc.dif
-Patch46:        net-tools-1.60-netstat_retval.diff
-Patch47:        net-tools-1.60-hostname-ipv6.patch
-Patch48:        net-tools-1.60-dont-trim-foreign-addr6.diff
-Patch49:        net-tools-1.60-cs_CZ.bnc715580.diff
-Patch50:        net-tools-1.60-plipconfig-usage.patch
-Patch51:        net-tools-1.60-plipconfig-manpage.patch
-Patch52:        net-tools-1.60-plipconfig-ecode.patch
-# PATCH-FIX-UPSTREAM net-tools-1.60-hostname-s.patch boo#872264 ticket#14 
commit#452f8e 
-Patch53:        net-tools-1.60-hostname-s.patch
-Patch54:        net-tools-1.60-fix-header-conflict.patch
+Url:            https://sourceforge.net/projects/net-tools/
+# Repacked by the service file from git
+Source:         %{name}-%{version}.tar.xz
+# PATCH-FEATURE-SUSE: set configure values to our liking as we do not need
+# everything here
+Patch0:         net-tools-configure.patch
+# Git formatted patches described in each patch
+Patch1:         0001-Add-ether-wake-binary.patch
+Patch2:         0002-Do-not-warn-about-interface-socket-not-binded.patch
+Patch3:         0003-Add-support-for-EiB-in-interface.c.patch
+Patch4:         0004-By-default-do-not-fopen-anything-in-netrom_gr.patch
+Patch5:         0005-Add-support-for-interface-rename-in-nameif.patch
+Patch6:         0006-Allow-interface-stacking.patch
+Patch7:         0007-Introduce-T-notrim-option-in-netstat.patch
+BuildRequires:  help2man
+Requires:       hostname
+Recommends:     %{name}-lang = %{version}
+Recommends:     traceroute >= 2.0.0
+Provides:       net_tool = %{version}
+Obsoletes:      net_tool < %{version}
 
 %description
 This package contains essential programs for network administration and
 maintenance: netstat, arp, ifconfig, rarp, and route.
 
-
-
-Authors:
---------
-    Fred N. van Kempen <[email protected]>
-    Bernd Eckenfels <[email protected]>
-    Fred Baumgarten <[email protected]>
-    Peter Tobias <[email protected]>
-    Olaf Kirch <[email protected]>
-
 %package deprecated
 Summary:        Deprecated Networking Utilities
 Group:          Productivity/Networking/Other
+Recommends:     %{name}-lang = %{version}
 
 %description deprecated
 This package contains the arp, ifconfig, netstat and route utilities,
@@ -113,118 +60,101 @@
   * netstat -> ss [-r]
   * route -> ip r
 
+%lang_package
+
 %prep
 %setup -q
-cp %{S:3} lib/
-%patch
-%patch1
-%patch2 -p1
-%patch4
-%patch5
-%patch7 -p1
-%patch8 -p1
-%patch9
-%patch10 -p1 -b .errors
-%patch11 -p1
-%patch12 -p1
-%patch13 -p1
-%patch14 -p1
-%patch15 -p1
-%patch16 -p1
-%patch18 -p1
-%patch19 -p1
-%patch20
-%patch21 -p1
-%patch22 -p1
-%patch23 -p1
-%patch24 -p1
-%patch25 -p1
-%patch26 -p1
-%patch27 -p1
-%patch30 -p1
-%patch31 -p1
-%patch32 -p1
-%patch33 -p1
-%patch34 -p1
-%patch35 -p1
-%patch36 -p1
-#not applied, see bugzilla discussion
-##%patch38 -p1
-%patch39 -p1
-%patch40 -p1
-%patch41
-%patch42
-%patch43
-%patch44
-%patch45
-%patch46
-%patch47
-%patch48
-%patch49
-%patch50 -p1
-%patch51 -p1
-%patch52 -p1
-%patch53 -p1
-%patch54 -p1
-cp %{S:4} .
-cp %{S:5} ./man/en_US
+%autopatch -p1
 
 %build
-
-# Kernel 3.6 removes if_strip.h - disable STRIP
-%if 0%{?suse_version} > 1220
-%__sed -i -e '/HAVE_HWSTRIP y/s/y$/n/' config.in
-%endif
-#
-
-make config
-make COPTS="-D_GNU_SOURCE $RPM_OPT_FLAGS" LOPTS="$RPM_OPT_FLAGS"
-gcc $RPM_OPT_FLAGS -D_GNU_SOURCE -fwhole-program -o ether-wake ether-wake.c
+export CFLAGS="%{optflags}"
+make %{?_smp_mflags} config
+make %{?_smp_mflags}
 
 %install
-install -d -m 755 $RPM_BUILD_ROOT/etc/xinetd.d
-install -m 644 %{S:2} $RPM_BUILD_ROOT/etc/xinetd.d/netstat
-make install BASEDIR=$RPM_BUILD_ROOT
-install -m 755 ether-wake %{buildroot}/sbin
-for tool in \
-%ifarch s390
-               plipconfig slattach \
-%endif
-               hostname domainname dnsdomainname nisdomainname ypdomainname 
mii-tool rarp
-do
-       rm -f $RPM_BUILD_ROOT/*bin/$tool
-       rm -f $RPM_BUILD_ROOT/%{_mandir}/man*/$tool.*
-       rm -f $RPM_BUILD_ROOT/%{_mandir}/*/man*/$tool.*
+%make_install BINDIR=%{_bindir} SBINDIR=%{_sbindir}
+
+# remove rarp as it is not usefull with our kernel
+rm -fv %{buildroot}/usr/*bin/rarp
+rm -fv %{buildroot}/%{_mandir}/man*/rarp.*
+rm -fv %{buildroot}/%{_mandir}/*/man*/rarp.*
+# Fix manpage locations
+mv %{buildroot}/%{_mandir}/de_DE %{buildroot}/%{_mandir}/de
+mv %{buildroot}/%{_mandir}/fr_FR %{buildroot}/%{_mandir}/fr
+# Generate missing manpages
+for tool in iptunnel ipmaddr; do
+  t="%{buildroot}/%{_mandir}/man8/${tool}.8"
+  help2man -s8 "%{buildroot}%{_sbindir}/${tool}" --no-discard-stderr >"${t}"
 done
-mv $RPM_BUILD_ROOT/%{_mandir}/de_DE $RPM_BUILD_ROOT/%{_mandir}/de
-mv $RPM_BUILD_ROOT/%{_mandir}/fr_FR $RPM_BUILD_ROOT/%{_mandir}/fr
-%if 0%{?suse_version} < 1120
-rm -rf $RPM_BUILD_ROOT/%{_mandir}/pt_BR
-%endif
-%find_lang %{name} --all-name --with-man
-
-# generate the filelist for net-tools-deprecated
-echo '%%defattr(-,root,root)' >deprecated.list
-for tool in arp ifconfig ipmaddr iptunnel netstat route; do
-       for dir in bin sbin; do
-               if test -x $RPM_BUILD_ROOT/$dir/$tool; then
-                       break
-               fi
-       done
-       echo /$dir/$tool >>deprecated.list
-       find $RPM_BUILD_ROOT/%_mandir -name "$tool.*"\
-               -printf '%_mandir/%%P*\n' >>deprecated.list
+# generate bin/sbin compat symlinks
+mkdir -p %{buildroot}/sbin
+mkdir -p %{buildroot}/bin
+for i in ether-wake nameif plipconfig slattach arp ipmaddr iptunnel; do
+ln -s %{_sbindir}/$i %{buildroot}/sbin/$i
 done
-cat deprecated.list
-sed 's/^/%%exclude /' deprecated.list >>%name.lang
+for i in netstat ifconfig route; do
+ln -s %{_bindir}/$i %{buildroot}/bin/$i
+done
+%find_lang %{name} --all-name
+
+%files
+%defattr(-,root,root)
+%doc COPYING README ABOUT-NLS
+%{_sbindir}/ether-wake
+/sbin/ether-wake
+%{_sbindir}/nameif
+/sbin/nameif
+%{_sbindir}/plipconfig
+/sbin/plipconfig
+%{_sbindir}/slattach
+/sbin/slattach
+%{_mandir}/de/man5/ethers.5%{ext_man}
+%{_mandir}/de/man8/plipconfig.8%{ext_man}
+%{_mandir}/de/man8/slattach.8%{ext_man}
+%{_mandir}/fr/man5/ethers.5%{ext_man}
+%{_mandir}/fr/man8/plipconfig.8%{ext_man}
+%{_mandir}/fr/man8/slattach.8%{ext_man}
+%{_mandir}/man5/ethers.5%{ext_man}
+%{_mandir}/man8/ether-wake.8%{ext_man}
+%{_mandir}/man8/nameif.8%{ext_man}
+%{_mandir}/man8/plipconfig.8%{ext_man}
+%{_mandir}/man8/slattach.8%{ext_man}
 
-%files -f %{name}.lang
+%files deprecated
 %defattr(-,root,root)
-/bin/*
-/sbin/*
-%_mandir/man*/*
-%config(noreplace) /etc/xinetd.d/netstat
+%doc COPYING
+%{_bindir}/netstat
+/bin/netstat
+%{_sbindir}/arp
+/sbin/arp
+%{_bindir}/ifconfig
+/bin/ifconfig
+%{_sbindir}/ipmaddr
+/sbin/ipmaddr
+%{_sbindir}/iptunnel
+/sbin/iptunnel
+%{_bindir}/route
+/bin/route
+%{_mandir}/de/man8/arp.8%{ext_man}
+%{_mandir}/de/man8/ifconfig.8%{ext_man}
+%{_mandir}/de/man8/netstat.8%{ext_man}
+%{_mandir}/de/man8/route.8%{ext_man}
+%{_mandir}/fr/man8/arp.8%{ext_man}
+%{_mandir}/fr/man8/ifconfig.8%{ext_man}
+%{_mandir}/fr/man8/netstat.8%{ext_man}
+%{_mandir}/fr/man8/route.8%{ext_man}
+%{_mandir}/man8/arp.8%{ext_man}
+%{_mandir}/man8/ifconfig.8%{ext_man}
+%{_mandir}/man8/netstat.8%{ext_man}
+%{_mandir}/man8/route.8%{ext_man}
+%{_mandir}/man8/ipmaddr.8%{ext_man}
+%{_mandir}/man8/iptunnel.8%{ext_man}
+%{_mandir}/pt_BR/man8/arp.8%{ext_man}
+%{_mandir}/pt_BR/man8/ifconfig.8%{ext_man}
+%{_mandir}/pt_BR/man8/netstat.8%{ext_man}
+%{_mandir}/pt_BR/man8/route.8%{ext_man}
 
-%files deprecated -f deprecated.list
+%files lang -f %{name}.lang
+%defattr(-,root,root)
 
 %changelog

++++++ 0001-Add-ether-wake-binary.patch ++++++
>From 259d1c453c7dc3b0291f3b4755567a94b778480e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Chv=C3=A1tal?= <[email protected]>
Date: Sat, 17 Jun 2017 22:06:03 +0200
Subject: [PATCH 1/7] Add ether-wake binary

---
 Makefile               |   6 +-
 ether-wake.c           | 445 +++++++++++++++++++++++++++++++++++++++++++++++++
 man/en_US/ether-wake.8 |  81 +++++++++
 3 files changed, 531 insertions(+), 1 deletion(-)
 create mode 100644 ether-wake.c
 create mode 100644 man/en_US/ether-wake.8

diff --git a/Makefile b/Makefile
index bf67bc6..cb171a0 100644
--- a/Makefile
+++ b/Makefile
@@ -33,7 +33,7 @@ SBINDIR ?= /sbin
 NET_LIB_PATH = lib
 NET_LIB_NAME = net-tools
 
-PROGS  := ifconfig netstat route nameif
+PROGS  := ifconfig netstat route nameif ether-wake
 
 -include config.make
 ifeq ($(HAVE_ARP_TOOLS),1)
@@ -205,6 +205,9 @@ ipmaddr:    $(NET_LIB) ipmaddr.o
 mii-tool:      $(NET_LIB) mii-tool.o
                $(CC) $(CFLAGS) $(LDFLAGS) -o $@ mii-tool.o $(NLIB) $(LDLIBS)
 
+ether-wake:    $(NET_LIB) ether-wake.o
+               $(CC) $(CFLAGS) $(LDFLAGS) -o ether-wake ether-wake.o $(NLIB) 
$(LDLIBS)
+
 installbin:
        @echo
        @echo "######################################################"
@@ -217,6 +220,7 @@ installbin:
        install -m 0755 nameif     ${BASEDIR}${SBINDIR}
        install -m 0755 netstat    ${BASEDIR}${BINDIR}
        install -m 0755 route      ${BASEDIR}${BINDIR}
+       install -m 0755 ether-wake ${BASEDIR}${SBINDIR}
 ifeq ($(HAVE_ARP_TOOLS),1)
        install -m 0755 arp        ${BASEDIR}${SBINDIR}
        install -m 0755 rarp       ${BASEDIR}${SBINDIR}
diff --git a/ether-wake.c b/ether-wake.c
new file mode 100644
index 0000000..cfceb44
--- /dev/null
+++ b/ether-wake.c
@@ -0,0 +1,445 @@
+/* ether-wake.c: Send a magic packet to wake up sleeping machines. */
+
+static char version_msg[] =
+"ether-wake.c: v1.09 11/12/2003 Donald Becker, http://www.scyld.com/";;
+static char brief_usage_msg[] =
+"usage: ether-wake -i <ifname> [-p aa:bb:cc:dd[:ee:ff]] 00:11:22:33:44:55\n"
+"   Use '-u' to see the complete set of options.\n";
+static char usage_msg[] =
+"usage: ether-wake -i <ifname> [-p aa:bb:cc:dd[:ee:ff]] 00:11:22:33:44:55\n"
+"\n"
+"      This program generates and transmits a Wake-On-LAN (WOL)\n"
+"      \"Magic Packet\", used for restarting machines that have been\n"
+"      soft-powered-down (ACPI D3-warm state).\n"
+"      It currently generates the standard AMD Magic Packet format, with\n"
+"      an optional password appended.\n"
+"\n"
+"      The single required parameter is the Ethernet MAC (station) address\n"
+"      of the machine to wake or a host ID with known NSS 'ethers' entry.\n"
+"      The MAC address may be found with the 'arp' program while the target\n"
+"      machine is awake.\n"
+"\n"
+"      Options:\n"
+"              -b      Send wake-up packet to the broadcast address.\n"
+"              -D      Increase the debug level.\n"
+"              -i ifname       Use interface ifname instead of sending a wake 
packet to all interfaces.\n"
+"              -p <pw>         Append the four or six byte password PW to the 
packet.\n"
+"                                      A password is only required for a few 
adapter types.\n"
+"                                      The password may be specified in 
ethernet hex format\n"
+"                                      or dotted decimal (Internet address)\n"
+"              -p 00:22:44:66:88:aa\n"
+"              -p 192.168.1.1\n";
+
+/*
+       This program generates and transmits a Wake-On-LAN (WOL) "Magic Packet",
+       used for restarting machines that have been soft-powered-down
+       (ACPI D3-warm state).  It currently generates the standard AMD Magic 
Packet
+       format, with an optional password appended.
+
+       This software may be used and distributed according to the terms
+       of the GNU Public License, incorporated herein by reference.
+       Contact the author for use under other terms.
+
+       This source file was originally part of the network tricks package, and
+       is now distributed to support the Scyld Beowulf system.
+       Copyright 1999-2003 Donald Becker and Scyld Computing Corporation.
+
+       The author may be reached as becker@scyld, or C/O
+        Scyld Computing Corporation
+        914 Bay Ridge Road, Suite 220
+        Annapolis MD 21403
+
+  Notes:
+  On some systems dropping root capability allows the process to be
+  dumped, traced or debugged.
+  If someone traces this program, they get control of a raw socket.
+  Linux handles this safely, but beware when porting this program.
+
+  An alternative to needing 'root' is using a UDP broadcast socket, however
+  doing so only works with adapters configured for unicast+broadcast Rx
+  filter.  That configuration consumes more power.
+*/
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <errno.h>
+#include <ctype.h>
+#include <string.h>
+
+#if 0                                                  /* Only exists on some 
versions. */
+#include <ioctls.h>
+#endif
+
+#include <sys/socket.h>
+
+#include <sys/types.h>
+#include <sys/ioctl.h>
+#include <linux/if.h>
+
+#include <features.h>
+#if __GLIBC__ >= 2 && __GLIBC_MINOR >= 1
+#include <netpacket/packet.h>
+#include <net/ethernet.h>
+#else
+#include <asm/types.h>
+#include <linux/if_packet.h>
+#include <linux/if_ether.h>
+#endif
+#include <netdb.h>
+#include <netinet/ether.h>
+
+#include "interface.h"
+#include "sockets.h"
+
+/* Grrr, no consistency between include versions.
+   Enable this if setsockopt() isn't declared with your library. */
+#if 0
+extern int setsockopt __P ((int __fd, int __level, int __optname,
+                                                       __ptr_t __optval, int 
__optlen));
+#else                          /* New, correct head files.  */
+#include <sys/socket.h>
+#endif
+
+u_char outpack[1000];
+int outpack_sz = 0;
+int debug = 0;
+u_char wol_passwd[6];
+int wol_passwd_sz = 0;
+
+static int opt_no_src_addr = 0, opt_broadcast = 0;
+
+static int get_dest_addr(const char *arg, struct ether_addr *eaddr);
+static int get_fill(unsigned char *pkt, struct ether_addr *eaddr);
+static int get_wol_pw(const char *optarg);
+
+typedef struct {
+       int s;
+       int verbose;
+       int pktsize;
+} if_info;
+
+static int send_wol_packet(char *ifname, int s, int verbose, int pktsize);
+
+static int do_wake(struct interface *ife, void *cookie) {
+       if_info *info = (if_info *)cookie;
+       send_wol_packet(ife->name, info->s, info->verbose, info->pktsize);
+       return 0;
+}
+
+int main(int argc, char *argv[])
+{
+       char *ifname = NULL;
+       int s;                                          /* Raw socket */
+       int errflag = 0, verbose = 0, do_version = 0;
+       int perm_failure = 0;
+       int c, pktsize;
+       struct ether_addr eaddr;
+       if_info info;
+
+       while ((c = getopt(argc, argv, "bDi:p:uvV")) != -1)
+               switch (c) {
+               case 'b': opt_broadcast++;      break;
+               case 'D': debug++;                      break;
+               case 'i': ifname = optarg;      break;
+               case 'p': get_wol_pw(optarg); break;
+               case 'u': printf("%s",usage_msg); return 0;
+               case 'v': verbose++;            break;
+               case 'V': do_version++;         break;
+               case '?':
+                       errflag++;
+               }
+       if (verbose || do_version)
+               printf("%s\n", version_msg);
+       if (errflag) {
+               fprintf(stderr,"%s", brief_usage_msg);
+               return 3;
+       }
+
+       if (ifname == NULL) {
+               fprintf(stderr, "Specify -i <interface>.\n");
+               return 3;
+       }
+
+       if (optind == argc) {
+               fprintf(stderr, "Specify the Ethernet address as 
00:11:22:33:44:55.\n");
+               return 3;
+       }
+
+       /* Note: PF_INET, SOCK_DGRAM, IPPROTO_UDP would allow SIOCGIFHWADDR to
+          work as non-root, but we need SOCK_PACKET to specify the Ethernet
+          destination address. */
+#if defined(PF_PACKET)
+       s = socket(PF_PACKET, SOCK_RAW, 0);
+#else
+       s = socket(AF_INET, SOCK_PACKET, SOCK_PACKET);
+#endif
+       if (s < 0) {
+               if (errno == EPERM)
+                       fprintf(stderr, "ether-wake: This program must be run 
as root.\n");
+               else
+                       perror("ether-wake: socket");
+               perm_failure++;
+       }
+       /* Don't revert if debugging allows a normal user to get the raw 
socket. */
+       setuid(getuid());
+
+       /* We look up the station address before reporting failure so that
+          errors may be reported even when run as a normal user.
+       */
+       if (get_dest_addr(argv[optind], &eaddr) != 0)
+               return 3;
+       if (perm_failure && ! debug)
+               return 2;
+
+       pktsize = get_fill(outpack, &eaddr);
+
+       if (ifname == NULL) {
+               info.s = s;
+               info.verbose = verbose;
+               info.pktsize = pktsize;
+
+               /* Create a channel to the NET kernel. */
+               if ((sockets_open(0)) < 0) {
+                       perror("socket");
+                       exit(1);
+               }
+
+               return for_all_interfaces(do_wake, &info);
+       }
+
+       return send_wol_packet(ifname, s, verbose, pktsize);
+}
+
+/* Send a Wake-On-LAN (WOL) "Magic Packet" to Interface IFNAME using
+   Socket S with a packet size PKTSIZE.  VERBOSE implies
+   verbosity.  */
+
+static int send_wol_packet(char *ifname, int s, int verbose, int pktsize)
+{
+       int i;
+       int one = 1;                            /* True, for socket options. */
+#if defined(PF_PACKET)
+       struct sockaddr_ll whereto;
+#else
+       struct sockaddr whereto;        /* who to wake up */
+#endif
+
+       /* Fill in the source address, if possible.
+          The code to retrieve the local station address is Linux specific. */
+       if (! opt_no_src_addr) {
+               struct ifreq if_hwaddr;
+               const char *hwaddr = if_hwaddr.ifr_hwaddr.sa_data;
+
+               strncpy(if_hwaddr.ifr_name, ifname, IFNAMSIZ);
+               if_hwaddr.ifr_name[IFNAMSIZ-1] = '\0';
+               if (ioctl(s, SIOCGIFHWADDR, &if_hwaddr) < 0) {
+                       fprintf(stderr, "SIOCGIFHWADDR on %s failed: %s\n", 
ifname,
+                                       strerror(errno));
+                       /* Magic packets still work if our source address is 
bogus, but
+                          we fail just to be anal. */
+                       return 1;
+               }
+               memcpy(outpack+6, if_hwaddr.ifr_hwaddr.sa_data, 6);
+
+               if (verbose) {
+                       printf("The hardware address (SIOCGIFHWADDR) of %s is 
type %d  "
+                                  "%2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x.\n", 
ifname,
+                                  if_hwaddr.ifr_hwaddr.sa_family, hwaddr[0], 
hwaddr[1],
+                                  hwaddr[2], hwaddr[3], hwaddr[4], hwaddr[5]);
+               }
+       }
+
+       if (wol_passwd_sz > 0) {
+               memcpy(outpack+pktsize, wol_passwd, wol_passwd_sz);
+               pktsize += wol_passwd_sz;
+       }
+
+       if (verbose > 1) {
+               printf("The final packet is: ");
+               for (i = 0; i < pktsize; i++)
+                       printf(" %2.2x", outpack[i]);
+               printf(".\n");
+       }
+
+       /* This is necessary for broadcasts to work */
+       if (setsockopt(s, SOL_SOCKET, SO_BROADCAST, (char *)&one, sizeof(one)) 
< 0)
+               perror("setsockopt: SO_BROADCAST");
+
+#if defined(PF_PACKET)
+       {
+               struct ifreq ifr;
+               strncpy(ifr.ifr_name, ifname, IFNAMSIZ);
+               ifr.ifr_name[IFNAMSIZ-1] = '\0';
+               if (ioctl(s, SIOCGIFINDEX, &ifr) == -1) {
+                       fprintf(stderr, "SIOCGIFINDEX on %s failed: %s\n", 
ifname,
+                                       strerror(errno));
+                       return 1;
+               }
+               memset(&whereto, 0, sizeof(whereto));
+               whereto.sll_family = AF_PACKET;
+               whereto.sll_ifindex = ifr.ifr_ifindex;
+               /* The manual page incorrectly claims the address must be 
filled.
+                  We do so because the code may change to match the docs. */
+               whereto.sll_halen = ETH_ALEN;
+               memcpy(whereto.sll_addr, outpack, ETH_ALEN);
+
+       }
+#else
+       whereto.sa_family = 0;
+       strcpy(whereto.sa_data, ifname);
+#endif
+
+       char senderrmsg[IFNAMSIZ+16] = "'";
+       strcat(senderrmsg, ifname);
+       strcat(senderrmsg, "', sendto");
+       if ((i = sendto(s, outpack, pktsize, 0, (struct sockaddr *)&whereto,
+                                       sizeof(whereto))) < 0)
+               perror(senderrmsg);
+       else if (debug)
+               printf("'%s', Sendto worked ! %d.\n", ifname, i);
+
+#ifdef USE_SEND
+       if (bind(s, (struct sockaddr *)&whereto, sizeof(whereto)) < 0)
+               perror("bind");
+       else if (send(s, outpack, 100, 0) < 0)
+               perror("send");
+#endif
+#ifdef USE_SENDMSG
+       {
+               struct msghdr msghdr = { 0,};
+               struct iovec iovector[1];
+               msghdr.msg_name = &whereto;
+               msghdr.msg_namelen = sizeof(whereto);
+               msghdr.msg_iov = iovector;
+               msghdr.msg_iovlen = 1;
+               iovector[0].iov_base = outpack;
+               iovector[0].iov_len = pktsize;
+               if ((i = sendmsg(s, &msghdr, 0)) < 0)
+                       perror("sendmsg");
+               else if (debug)
+                       printf("sendmsg worked, %d (%d).\n", i, errno);
+       }
+#endif
+
+       return 0;
+}
+
+/* Convert the host ID string to a MAC address.
+   The string may be a
+       Host name
+    IP address string
+       MAC address string
+*/
+
+static int get_dest_addr(const char *hostid, struct ether_addr *eaddr)
+{
+       struct ether_addr *eap;
+
+       eap = ether_aton(hostid);
+       if (eap) {
+               *eaddr = *eap;
+               if (debug)
+                       fprintf(stderr, "The target station address is %s.\n",
+                                       ether_ntoa(eaddr));
+       } else if (ether_hostton(hostid, eaddr) == 0) {
+               if (debug)
+                       fprintf(stderr, "Station address for hostname %s is 
%s.\n",
+                                       hostid, ether_ntoa(eaddr));
+       } else {
+               (void)fprintf(stderr,
+                                         "ether-wake: The Magic Packet host 
address must be "
+                                         "specified as\n"
+                                         "  - a station address, 
00:11:22:33:44:55, or\n"
+                                         "  - a hostname with a known 'ethers' 
entry.\n");
+               return -1;
+       }
+       return 0;
+}
+
+
+static int get_fill(unsigned char *pkt, struct ether_addr *eaddr)
+{
+       int offset, i;
+       unsigned char *station_addr = eaddr->ether_addr_octet;
+
+       if (opt_broadcast)
+               memset(pkt+0, 0xff, 6);
+       else
+               memcpy(pkt, station_addr, 6);
+       memcpy(pkt+6, station_addr, 6);
+       pkt[12] = 0x08;                         /* Or 0x0806 for ARP, 0x8035 
for RARP */
+       pkt[13] = 0x42;
+       offset = 14;
+
+       memset(pkt+offset, 0xff, 6);
+       offset += 6;
+
+       for (i = 0; i < 16; i++) {
+               memcpy(pkt+offset, station_addr, 6);
+               offset += 6;
+       }
+       if (debug) {
+               fprintf(stderr, "Packet is ");
+               for (i = 0; i < offset; i++)
+                       fprintf(stderr, " %2.2x", pkt[i]);
+               fprintf(stderr, ".\n");
+       }
+       return offset;
+}
+
+static int get_wol_pw(const char *optarg)
+{
+       int passwd[6];
+       int byte_cnt;
+       int i;
+
+       byte_cnt = sscanf(optarg, "%2x:%2x:%2x:%2x:%2x:%2x",
+                                         &passwd[0], &passwd[1], &passwd[2],
+                                         &passwd[3], &passwd[4], &passwd[5]);
+       if (byte_cnt < 4)
+               byte_cnt = sscanf(optarg, "%d.%d.%d.%d",
+                                                 &passwd[0], &passwd[1], 
&passwd[2], &passwd[3]);
+       if (byte_cnt < 4) {
+               fprintf(stderr, "Unable to read the Wake-On-LAN password.\n");
+               return 0;
+       }
+       printf(" The Magic packet password is %2.2x %2.2x %2.2x %2.2x (%d).\n",
+                  passwd[0], passwd[1], passwd[2], passwd[3], byte_cnt);
+       for (i = 0; i < byte_cnt; i++)
+               wol_passwd[i] = passwd[i];
+       return wol_passwd_sz = byte_cnt;
+}
+
+#if 0
+{
+       to = (struct sockaddr_in *)&whereto;
+       to->sin_family = AF_INET;
+       if (inet_aton(target, &to->sin_addr)) {
+               hostname = target;
+       }
+       memset (&sa, 0, sizeof sa);
+       sa.sa_family = AF_INET;
+       strncpy (sa.sa_data, interface, sizeof sa.sa_data);
+       sendto (sock, buf, bufix + len, 0, &sa, sizeof sa);
+       strncpy (sa.sa_data, interface, sizeof sa.sa_data);
+#if 1
+       sendto (sock, buf, bufix + len, 0, &sa, sizeof sa);
+#else
+       bind (sock, &sa, sizeof sa);
+       connect();
+       send (sock, buf, bufix + len, 0);
+#endif
+}
+#endif
+
+
+/*
+ * Local variables:
+ *  compile-command: "gcc -O -Wall -o ether-wake ether-wake.c"
+ *  c-indent-level: 4
+ *  c-basic-offset: 4
+ *  c-indent-level: 4
+ *  tab-width: 4
+ * End:
+ */
diff --git a/man/en_US/ether-wake.8 b/man/en_US/ether-wake.8
new file mode 100644
index 0000000..d0569c2
--- /dev/null
+++ b/man/en_US/ether-wake.8
@@ -0,0 +1,81 @@
+.\"                                      Hey, EMACS: -*- nroff -*-
+.\" First parameter, NAME, should be all caps
+.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
+.\" other parameters are allowed: see man(7), man(1)
+.TH ETHER-WAKE 8 "March 31, 2003" "Scyld"
+.\" Please adjust this date whenever revising the manpage.
+.\"
+.\" Some roff macros, for reference:
+.\" .nh        disable hyphenation
+.\" .hy        enable hyphenation
+.\" .ad l      left justify
+.\" .ad b      justify to both left and right margins
+.\" .nf        disable filling
+.\" .fi        enable filling
+.\" .br        insert line break
+.\" .sp <n>    insert n+1 empty lines
+.\" for manpage-specific macros, see man(7)
+.SH NAME
+ether-wake \- A tool to send a Wake-On-LAN "Magic Packet"
+.SH SYNOPSIS
+.B ether-wake
+.RI [ options ] " Host-ID"
+.SH DESCRIPTION
+This manual page documents the usage of the
+.B ether-wake
+command.
+.PP
+.\" TeX users may be more comfortable with the \fB<whatever>\fP and
+.\" \fI<whatever>\fP escape sequences to invoke bold face and italics, 
+.\" respectively.
+\fBether-wake\fP is a program that generates and transmits a Wake-On-LAN 
+(WOL) "Magic Packet", used for restarting machines that have been
+soft-powered-down (ACPI D3-warm state). It generates the standard
+AMD Magic Packet format, optionally with a password included.  The
+single required parameter is a station (MAC) address or a host ID that can
+be translated to a MAC address by an
+.BR ethers (5)
+database specified in
+.BR nsswitch.conf (5)
+.
+.SH OPTIONS
+\fBether-wake\fP needs a single dash (´-´) in front of options.
+A summary of options is included below.
+.TP
+.B \-b
+Send the wake-up packet to the broadcast address.
+.TP
+.B \-D
+Increase the Debug Level.
+.TP
+.B \-i ifname
+Use interface ifname instead of sending a wake packet to all interfaces.
+.TP
+.B \-p passwd
+Append a four or six byte password to the packet. Only a few adapters
+need or support this. A six byte password may be specified in Ethernet hex
+format (00:22:44:66:88:aa) or four byte dotted decimal (192.168.1.1) format.
+A four byte password must use the dotted decimal format.
+
+.TP
+.B \-V
+Show the program version information.
+
+.SH EXIT STATUS
+This program returns 0 on success.
+A permission failures (e.g. run as a non-root user) results in an exit
+status of 2.  Unrecognized or invalid parameters result in an exit
+status of 3.  Failure to retrieve network interface information or send
+a packet will result in an exit status of 1.
+
+.SH SEE ALSO
+.BR arp (8).
+.br
+.SH SECURITY
+On some non-Linux systems dropping root capability allows the process to be
+dumped, traced or debugged.
+If someone traces this program, they get control of a raw socket.
+Linux handles this safely, but beware when porting this program.
+.SH AUTHOR
+The ether-wake program was written by Donald Becker at Scyld Computing
+Corporation for use with the Scyld(\*(Tm) Beowulf System.
-- 
2.13.1

++++++ 0002-Do-not-warn-about-interface-socket-not-binded.patch ++++++
>From 5b612570220e66ea3197b88b5f9d81e064f9e873 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Chv=C3=A1tal?= <[email protected]>
Date: Sat, 17 Jun 2017 22:15:06 +0200
Subject: [PATCH 2/7] Do not warn about interface socket not binded

---
 lib/interface.c | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)

diff --git a/lib/interface.c b/lib/interface.c
index e8ab2b8..94e554b 100644
--- a/lib/interface.c
+++ b/lib/interface.c
@@ -173,12 +173,10 @@ static int if_readconf(void)
        (as of 2.1.128) */
     skfd = get_socket_for_af(AF_INET);
     if (skfd < 0) {
-       fprintf(stderr, _("warning: no inet socket available: %s\n"),
-               strerror(errno));
-       /* Try to soldier on with whatever socket we can get hold of.  */
-       skfd = sockets_open(0);
-       if (skfd < 0)
-           return -1;
+           /* Try to soldier on with whatever socket we can get hold of.  */
+           skfd = sockets_open(0);
+           if (skfd < 0)
+               return -1;
     }
 
     ifc.ifc_buf = NULL;
-- 
2.13.1

++++++ 0003-Add-support-for-EiB-in-interface.c.patch ++++++
>From 1198aae1c5d434f6e9bc6a0af8060e82eed3a6c9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Chv=C3=A1tal?= <[email protected]>
Date: Sat, 17 Jun 2017 22:21:34 +0200
Subject: [PATCH 3/7] Add support for EiB in interface.c

Taken from Fedora package
---
 lib/interface.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/lib/interface.c b/lib/interface.c
index 94e554b..7e326a0 100644
--- a/lib/interface.c
+++ b/lib/interface.c
@@ -864,10 +864,10 @@ void ife_print_long(struct interface *ptr)
         */
        rx = ptr->stats.rx_bytes;
        short_rx = rx * 10;
-       if (rx > 1125899906842624ull) {
-           if (rx > (9223372036854775807ull / 10))
-               short_rx = rx / 112589990684262ull;
-           else
+       if (rx > 1152921504606846976ull) {
+               short_rx = rx / 115292150460684697ull;
+               Rext = "EiB";
+       } else if (rx > 1125899906842624ull) {
                short_rx /= 1125899906842624ull;
            Rext = "PiB";
        } else if (rx > 1099511627776ull) {
@@ -885,10 +885,10 @@ void ife_print_long(struct interface *ptr)
        }
        tx = ptr->stats.tx_bytes;
        short_tx = tx * 10;
-       if (tx > 1125899906842624ull) {
-           if (tx > (9223372036854775807ull / 10))
-               short_tx = tx / 112589990684262ull;
-           else
+       if (tx > 1152921504606846976ull) {
+               short_tx = tx / 115292150460684697ull;
+               Text = "EiB";
+       } else if (tx > 1125899906842624ull) {
                short_tx /= 1125899906842624ull;
            Text = "PiB";
        } else  if (tx > 1099511627776ull) {
-- 
2.13.1

++++++ 0004-By-default-do-not-fopen-anything-in-netrom_gr.patch ++++++
>From 70a4077962be2dc3ea7dc20a3687e9f1c7458ade Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Chv=C3=A1tal?= <[email protected]>
Date: Sat, 17 Jun 2017 22:26:14 +0200
Subject: [PATCH 4/7] By default do not fopen anything in netrom_gr

This is SUSE specific patch basically disabling this functionality.
---
 lib/netrom_gr.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/lib/netrom_gr.c b/lib/netrom_gr.c
index ec82fe8..eecf148 100644
--- a/lib/netrom_gr.c
+++ b/lib/netrom_gr.c
@@ -32,8 +32,8 @@
 
 int NETROM_rprint(int options)
 {
-    FILE *f1 = fopen(_PATH_PROCNET_NR_NODES, "r");
-    FILE *f2 = fopen(_PATH_PROCNET_NR_NEIGH, "r");
+    FILE *f1 = NULL;
+    FILE *f2 = NULL;
     char buffer[256];
     int qual, n, w;
     /*int ext = options & FLAG_EXT;
-- 
2.13.1

++++++ 0005-Add-support-for-interface-rename-in-nameif.patch ++++++
>From 2f92b974dd8f6c0885e060b53254d4470d06235f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Chv=C3=A1tal?= <[email protected]>
Date: Sat, 17 Jun 2017 23:07:04 +0200
Subject: [PATCH 5/7] Add support for interface rename in nameif

---
 man/en_US/nameif.8 | 43 ++++++++++++++++++++++++--------------
 nameif.c           | 61 ++++++++++++++++++++++++++++++++++++++----------------
 2 files changed, 70 insertions(+), 34 deletions(-)

diff --git a/man/en_US/nameif.8 b/man/en_US/nameif.8
index 195304d..ccea694 100644
--- a/man/en_US/nameif.8
+++ b/man/en_US/nameif.8
@@ -4,26 +4,37 @@ nameif \- name network interfaces based on MAC addresses
 .SH SYNOPSIS
 .B "nameif [\-c configfile] [\-s]"
 .br
-.B "nameif [\-c configfile] [\-s] {interface macaddress}"
+.B "nameif [\-c configfile] [\-s] [interface macaddress]"
+.br
+.B "nameif [-c configfile] [-r] [newifname oldifname]"
 .SH DESCRIPTION
-.B nameif 
-renames network interfaces based on mac addresses. When no arguments are
-given 
+.B nameif
+renames network interfaces based on mac addresses or interface names.
+When no arguments are given
 .I /etc/mactab
-is read. Each line  of it contains an interface name and a Ethernet MAC 
-address. Comments are allowed starting with #. 
+is read. Each line  of it contains an interface name and a Ethernet MAC
+address. Comments are allowed starting with #.
 Otherwise the interfaces specified on the command line are processed.
 .I nameif
-looks for the interface with the given MAC address and renames it to the
-name given.
-
-When the 
-.I \-s
-argument is given all error messages go to the syslog.
-
-When the 
-.I \-c 
-argument is given with a file name that file is read instead of /etc/mactab.
+looks for the interface with the given MAC address or old interface name
+and renames it to the name given.
+.SH OPTIONS
+.TP
+.B "[-s|--syslog]"
+Log all error messages to syslog.
+.TP
+.B "[-r|--rename]"
+Rename the interface given by
+.I oldifname
+to the new name
+.I newifname
+without consulting any macaddress.
+.TP
+.B "[-c|--config-file configfile]"
+Read
+.I configfile
+instead of
+.I /etc/mactab.
 
 .SH NOTES
 .I nameif
diff --git a/nameif.c b/nameif.c
index b280e59..bdc1dfa 100644
--- a/nameif.c
+++ b/nameif.c
@@ -28,6 +28,7 @@
 const char default_conf[] = "/etc/mactab";
 const char *fname = default_conf;
 int use_syslog;
+int do_rename;
 int ctl_sk = -1;
 
 void err(char *msg)
@@ -114,7 +115,8 @@ int getmac(char *name, unsigned char *mac)
 struct change {
        struct change *next;
        int found;
-       char ifname[IFNAMSIZ+1];
+       unsigned char ifname_old[IFNAMSIZ+1];
+       unsigned char ifname_new[IFNAMSIZ+1];
        unsigned char mac[6];
 };
 struct change *clist;
@@ -128,13 +130,28 @@ struct change *lookupmac(unsigned char *mac)
        return NULL;
 }
 
+struct change *lookupifname(unsigned char *ifname_old)
+{
+       struct change *ch;
+       for (ch = clist;ch;ch = ch->next)
+               if (!strcmp(ch->ifname_old, ifname_old))
+                       return ch;
+       return NULL;
+}
+
 int addchange(char *p, struct change *ch, char *pos)
 {
-       if (strchr(ch->ifname, ':'))
-               warning(_("alias device %s at %s probably has no mac"),
-                       ch->ifname, pos);
-       if (parsemac(p,ch->mac) < 0)
-               complain(_("cannot parse MAC `%s' at %s"), p, pos);
+       if (do_rename) {
+               if (strlen(p)+1>IFNAMSIZ)
+                       complain(_("interface name `%s' too long"), p);
+               strcpy(ch->ifname_old, p);
+       } else {
+               if (strchr(ch->ifname_new, ':'))
+                       warning(_("alias device %s at %s probably has no mac"),
+                               ch->ifname_new, pos);
+               if (parsemac(p,ch->mac) < 0)
+                       complain(_("cannot parse MAC `%s' at %s"), p, pos);
+       }
        ch->next = clist;
        clist = ch;
        return 0;
@@ -173,8 +190,8 @@ void readconf(void)
                if (n > IFNAMSIZ-1)
                        complain(_("interface name too long at line %d"), line);
                ch = xmalloc(sizeof(struct change));
-               memcpy(ch->ifname, p, n);
-               ch->ifname[n] = 0;
+               memcpy(ch->ifname_new, p, n);
+               ch->ifname_new[n] = 0;
                p += n;
                p += strspn(p, " \t");
                n = strspn(p, "0123456789ABCDEFabcdef:");
@@ -187,6 +204,7 @@ void readconf(void)
 
 struct option lopt[] = {
        {"syslog", 0, NULL, 's' },
+       {"rename", 0, NULL, 'r' },
        {"config-file", 1, NULL, 'c' },
        {"help", 0, NULL, '?' },
        {NULL},
@@ -194,7 +212,7 @@ struct option lopt[] = {
 
 void usage(void)
 {
-       fprintf(stderr, _("usage: nameif [-c configurationfile] [-s] {ifname 
macaddress}\n"));
+       fprintf(stderr, _("usage: nameif [-c configurationfile] [-s] [-r] 
{ifname macaddress|oldifname}\n"));
        exit(E_USAGE);
 }
 
@@ -209,7 +227,7 @@ int main(int ac, char **av)
        int ret = 0;
 
        for (;;) {
-               int c = getopt_long(ac,av,"c:s",lopt,NULL);
+               int c = getopt_long(ac,av,"c:sr",lopt,NULL);
                if (c == -1) break;
                switch (c) {
                default:
@@ -221,6 +239,9 @@ int main(int ac, char **av)
                case 's':
                        use_syslog = 1;
                        break;
+               case 'r':
+                       do_rename = 1;
+                       break;
                }
        }
 
@@ -235,7 +256,7 @@ int main(int ac, char **av)
                        usage();
                if (strlen(av[optind])+1>IFNAMSIZ)
                        complain(_("interface name `%s' too long"), av[optind]);
-               safe_strncpy(ch->ifname, av[optind], sizeof(ch->ifname));
+               safe_strncpy(ch->ifname_new, av[optind], 
sizeof(ch->ifname_new));
                optind++;
                sprintf(pos,_("argument %d"),optind);
                addchange(av[optind], ch, pos);
@@ -266,18 +287,22 @@ int main(int ac, char **av)
                if (n > IFNAMSIZ-1)
                        complain(_("interface name `%s' too long"), p);
 
-               if (getmac(p, mac) < 0)
-                       continue;
+               if (do_rename) {
+                       ch = lookupifname(p);
+               } else {
+                       if (getmac(p, mac) < 0)
+                               continue;
 
-               ch = lookupmac(mac);
+                       ch = lookupmac(mac);
+               }
                if (!ch)
                        continue;
 
                ch->found = 1;
-               if (strcmp(p, ch->ifname)) {
-                       if (setname(p, ch->ifname) < 0)
+               if (strcmp(p, ch->ifname_new)) {
+                       if (setname(p, ch->ifname_new) < 0)
                                complain(_("cannot change name of %s to %s: 
%s"),
-                                               p, ch->ifname, strerror(errno));
+                                        p, ch->ifname_new, strerror(errno));
                }
        }
        fclose(ifh);
@@ -286,7 +311,7 @@ int main(int ac, char **av)
                struct change *ch = clist;
                clist = clist->next;
                if (!ch->found){
-                       warning(_("interface '%s' not found"), ch->ifname);
+                       complain(_("interface '%s' not found"), ch->ifname_new);
                        ret = 1;
                }
                free(ch);
-- 
2.13.1

++++++ 0006-Allow-interface-stacking.patch ++++++
>From 3e27ced0c24be18dc443f7eb1421c7c3c1755cfe Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Chv=C3=A1tal?= <[email protected]>
Date: Sun, 18 Jun 2017 08:54:17 +0200
Subject: [PATCH 6/7] Allow interface stacking

---
 lib/interface.c | 25 +++++++++++++++----------
 1 file changed, 15 insertions(+), 10 deletions(-)

diff --git a/lib/interface.c b/lib/interface.c
index 7e326a0..42d86fb 100644
--- a/lib/interface.c
+++ b/lib/interface.c
@@ -208,10 +208,11 @@ out:
     return err;
 }
 
-static const char *get_name(char *name, const char *p)
+static const char *get_name(char **namep, const char *p)
 {
     while (isspace(*p))
        p++;
+    char *name = *namep = p;
     while (*p) {
        if (isspace(*p))
            break;
@@ -314,9 +315,10 @@ static int get_dev_fields(const char *bp, struct interface 
*ife)
 static int if_readlist_proc(const char *target)
 {
     FILE *fh;
-    char buf[512];
     struct interface *ife;
     int err;
+    char *line = NULL;
+    size_t linelen = 0;
 
     fh = fopen(_PATH_PROCNET_DEV, "r");
     if (!fh) {
@@ -324,10 +326,11 @@ static int if_readlist_proc(const char *target)
                        _PATH_PROCNET_DEV, strerror(errno));
                return -2;
        }
-    if (fgets(buf, sizeof buf, fh))
-               /* eat line */;
-    if (fgets(buf, sizeof buf, fh))
-               /* eat line */;
+    if (getline(&line, &linelen, fh) == -1 /* eat line */
+       || getline(&line, &linelen, fh) == -1) {
+               err = -1;
+               goto out;
+    }
 
 #if 0                          /* pretty, but can't cope with missing fields */
     fmt = proc_gen_fmt(_PATH_PROCNET_DEV, 1, fh,
@@ -352,14 +355,14 @@ static int if_readlist_proc(const char *target)
     if (!fmt)
        return -1;
 #else
-    procnetdev_vsn = procnetdev_version(buf);
+    procnetdev_vsn = procnetdev_version(line);
 #endif
 
     err = 0;
-    while (fgets(buf, sizeof buf, fh)) {
+    while (getline(&line, &linelen, fh) != -1) {
        const char *s;
-       char name[IFNAMSIZ];
-       s = get_name(name, buf);
+       char *name;
+       s = get_name(&name, line);
        ife = if_cache_add(name);
        get_dev_fields(s, ife);
        ife->statistics_valid = 1;
@@ -374,6 +377,8 @@ static int if_readlist_proc(const char *target)
 #if 0
     free(fmt);
 #endif
+  out:
+    free(line);
     fclose(fh);
     return err;
 }
-- 
2.13.1

++++++ 0007-Introduce-T-notrim-option-in-netstat.patch ++++++
>From 0e30aa568f29e1626177458cfe1d33b25c6da7a6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Chv=C3=A1tal?= <[email protected]>
Date: Sun, 18 Jun 2017 09:12:33 +0200
Subject: [PATCH 7/7] Introduce T notrim option in netstat

This is the same as wide option but unfortunately SUSE carried
for last 10 years patch using the -T option so we need not to regress
in script usage.
---
 netstat.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/netstat.c b/netstat.c
index fe25e92..401ac3b 100644
--- a/netstat.c
+++ b/netstat.c
@@ -2043,6 +2043,7 @@ int main
        {"fib", 0, 0, 'F'},
        {"groups", 0, 0, 'g'},
        {"context", 0, 0, 'Z'},
+       {"notrim", 0, 0, 'T'},
        {NULL, 0, 0, 0}
     };
 
@@ -2054,7 +2055,7 @@ int main
     getroute_init();           /* Set up AF routing support */
 
     afname[0] = '\0';
-    while ((i = getopt_long(argc, argv, "A:CFMacdeghilnNoprsStuUvVWw2fx64?Z", 
longopts, &lop)) != EOF)
+    while ((i = getopt_long(argc, argv, "A:CFMacdeghilnNoprsStuUvVWw2fx64?ZT", 
longopts, &lop)) != EOF)
        switch (i) {
        case -1:
            break;
@@ -2098,6 +2099,7 @@ int main
        case 'i':
            flag_int++;
            break;
+       case 'T':
        case 'W':
            flag_wide++;
            break;
-- 
2.13.1

++++++ _service ++++++
<services>
  <service mode="disabled" name="tar_scm">
    <param name="url">git://git.code.sf.net/p/net-tools/code</param>
    <param name="scm">git</param>
    <param name="changesgenerate">enable</param>
    <param name="filename">net-tools</param>
    <param name="versionformat">2.0+git%cd.%h</param>
  </service>
  <service mode="disabled" name="recompress">
    <param name="file">*.tar</param>
    <param name="compression">xz</param>
  </service>
  <service mode="disabled" name="set_version"/>
</services>
++++++ net-tools-configure.patch ++++++
Index: Makefile
===================================================================
--- a/Makefile
+++ b/Makefile
@@ -109,7 +109,7 @@ all:                config.h version.h subdirs $(PROGS
 
 config:        cleanconfig config.h
 
-install:       all savebin installbin installdata
+install:       all installbin installdata
 
 update:        all installbin installdata
 
Index: config.in
===================================================================
--- a/config.in
+++ b/config.in
@@ -42,7 +42,7 @@
 * course, welcome.  Answer `n' here if you have no support for
 * internationalization on your system.
 *
-bool 'Does your system support GNU gettext?' I18N n
+bool 'Does your system support GNU gettext?' I18N y
 *
 *
 *             Protocol Families.
@@ -91,10 +91,10 @@ bool 'InfiniBand hardware support' HAVE_
 *
 bool 'IP Masquerading support' HAVE_FW_MASQUERADE y
 bool 'Build arp and rarp' HAVE_ARP_TOOLS y
-bool 'Build hostname' HAVE_HOSTNAME_TOOLS y
-bool 'Install hostname NIS/YP symlinks' HAVE_HOSTNAME_SYMLINKS y
+bool 'Build hostname' HAVE_HOSTNAME_TOOLS n
+bool 'Install hostname NIS/YP symlinks' HAVE_HOSTNAME_SYMLINKS n
 bool 'Build iptunnel and ipmaddr' HAVE_IP_TOOLS y
-bool 'Build mii-tool' HAVE_MII y
+bool 'Build mii-tool' HAVE_MII n
 bool 'Build plipconfig' HAVE_PLIP_TOOLS y
 bool 'Build slattach' HAVE_SERIAL_TOOLS y
 bool 'SELinux support' HAVE_SELINUX n
Index: configure.sh
===================================================================
--- a/configure.sh
+++ b/configure.sh
@@ -66,9 +66,8 @@ config_fd_redir='<&7'
 #
 function readln()
 {
-  echo -n "$1"
-  IFS='@' read ans || exit 1
-  [ -z "$ans" ] && ans=$2
+  echo "$1"
+  ans=$2
 }
 
 # bool processes a boolean argument

Reply via email to