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 - tchvatal@suse.com + +- 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 - tchvatal@suse.com + +- 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 - tchvatal@suse.com + +- 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 - tchvatal@suse.com + +- 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 - tchvatal@suse.com + +- 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 - tchvatal@suse.com + +- 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 - giecrilj@stegny.2a.pl + +- 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 <waltje@uwalt.nl.mugnet.org> - Bernd Eckenfels <net-tools@lina.inka.de> - Fred Baumgarten <dc6iq@insu1.etec.uni-karlsruhe.de> - Peter Tobias <tobias@et-inf.fho-emden.de> - Olaf Kirch <okir@suse.de> - %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?= <tchvatal@suse.com> 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?= <tchvatal@suse.com> 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?= <tchvatal@suse.com> 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?= <tchvatal@suse.com> 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?= <tchvatal@suse.com> 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?= <tchvatal@suse.com> 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?= <tchvatal@suse.com> 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