aboutsummaryrefslogtreecommitdiffstats
path: root/main/net-tools
diff options
context:
space:
mode:
authorNatanael Copa <ncopa@alpinelinux.org>2013-06-17 13:58:59 +0000
committerNatanael Copa <ncopa@alpinelinux.org>2013-06-17 13:58:59 +0000
commit770d5f439f9590a8e2b9a7fb8ba14374037b4a8e (patch)
tree456b8e8c0988b6cb15863ffe5f8180c6624e3f1d /main/net-tools
parent03564c306b51a96133c1291969898abebfde6e6c (diff)
downloadaports-770d5f439f9590a8e2b9a7fb8ba14374037b4a8e.tar.bz2
aports-770d5f439f9590a8e2b9a7fb8ba14374037b4a8e.tar.xz
main/net-tools: moved from testing
we are mostly interested in mii-tool
Diffstat (limited to 'main/net-tools')
-rw-r--r--main/net-tools/APKBUILD91
-rw-r--r--main/net-tools/git.patch25400
2 files changed, 25491 insertions, 0 deletions
diff --git a/main/net-tools/APKBUILD b/main/net-tools/APKBUILD
new file mode 100644
index 0000000000..8779357dde
--- /dev/null
+++ b/main/net-tools/APKBUILD
@@ -0,0 +1,91 @@
+# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
+pkgname=net-tools
+pkgver=1.60_git20130615
+_ver=${pkgver%_git*}
+pkgrel=0
+pkgdesc="Linux networking base tools"
+url="https://sourceforge.net/projects/net-tools/"
+arch="all"
+license="GPLv2"
+depends="mii-tool"
+depends_dev=""
+makedepends="$depends_dev bash"
+install=""
+subpackages="$pkgname-doc mii-tool:mii_tool"
+source="https://downloads.sourceforge.net/project/net-tools/net-tools-$_ver.tar.bz2
+ git.patch"
+
+_builddir="$srcdir"/net-tools-$_ver
+prepare() {
+ local i
+ cd "$_builddir"
+ for i in $source; do
+ case $i in
+ *.patch) msg $i; patch -p1 -i "$srcdir"/$i || return 1;;
+ esac
+ done
+ cat > config.make <<EOF
+# I18N=0
+HAVE_AFUNIX=1
+HAVE_AFINET=1
+HAVE_AFINET6=1
+# HAVE_AFIPX=0
+# HAVE_AFATALK=0
+# HAVE_AFAX25=0
+HAVE_AFNETROM=1
+# HAVE_AFROSE=0
+# HAVE_AFX25=0
+# HAVE_AFECONET=0
+# HAVE_AFDECnet=0
+# HAVE_AFASH=0
+# HAVE_AFBLUETOOTH=0
+HAVE_HWETHER=1
+# HAVE_HWARC=0
+HAVE_HWSLIP=1
+HAVE_HWPPP=1
+HAVE_HWTUNNEL=1
+# HAVE_HWSTRIP=0
+# HAVE_HWTR=0
+# HAVE_HWAX25=0
+# HAVE_HWROSE=0
+HAVE_HWNETROM=1
+# HAVE_HWX25=0
+# HAVE_HWFR=0
+# HAVE_HWSIT=0
+# HAVE_HWFDDI=0
+# HAVE_HWHIPPI=0
+# HAVE_HWASH=0
+# HAVE_HWHDLCLAPB=0
+# HAVE_HWIRDA=0
+# HAVE_HWEC=0
+# HAVE_HWEUI64=0
+# HAVE_HWIB=0
+HAVE_FW_MASQUERADE=1
+HAVE_IP_TOOLS=1
+HAVE_MII=1
+EOF
+ sed -n -e 's/^\(HAVE.*\)=\(.*\)/#define \1 \2/p' config.make > config.h
+}
+
+build() {
+ cd "$_builddir"
+ make || return 1
+}
+
+package() {
+ cd "$_builddir"
+ make DESTDIR="$pkgdir" install || return 1
+}
+
+mii_tool() {
+ pkgdesc="media-independent interface (MII) tool"
+ mkdir -p "$subpkgdir"/sbin
+ mv "$pkgdir"/sbin/mii-tool "$subpkgdir"/sbin/
+}
+
+md5sums="888774accab40217dde927e21979c165 net-tools-1.60.tar.bz2
+6c2b55f5258d23477fa0d9261bd363a5 git.patch"
+sha256sums="7ae4dd6d44d6715f18e10559ffd270511b6e55a8900ca54fbebafe0ae6cf7d7b net-tools-1.60.tar.bz2
+3d27ff819c909c97c515837971f4cdb76744e0a20adefd563b1840cbeafcf789 git.patch"
+sha512sums="8e1ae9bca726ad7d795a06c58388f9e11c1d617d94eebb9ed18bd11e5f34c6541e1ffe631706c407996db86e78df6e5cf1968a2d90b242b473596fda3b6d1eae net-tools-1.60.tar.bz2
+95865c5be07585cc9994a1142a6585f482fdcc8f56a59fb87e71e8e947471af5ac42e99c6bccfa34dbc378449c9fcaad315815636879800950c97a6889e69d4a git.patch"
diff --git a/main/net-tools/git.patch b/main/net-tools/git.patch
new file mode 100644
index 0000000000..920c4fa05c
--- /dev/null
+++ b/main/net-tools/git.patch
@@ -0,0 +1,25400 @@
+new file mode 100644
+index 0000000..9184162
+--- /dev/null
++++ b/.gitignore
+@@ -0,0 +1,36 @@
++*.o
++
++*.diff
++*.patch
++*.rej
++*.orig
++
++.gdb_history
++.gdbinit
++core
++*.gdb
++
++/config.h
++/config.make
++/config.status
++
++/net-tools-*.tar*
++
++/lib/libnet-tools.a
++
++/po/*.mo
++
++/version.h
++
++/arp
++/hostname
++/ifconfig
++/ipmaddr
++/iptunnel
++/mii-tool
++/nameif
++/netstat
++/plipconfig
++/rarp
++/route
++/slattach
+diff --git a/Makefile b/Makefile
+index 8fcc55c..0020202 100644
+--- a/Makefile
++++ b/Makefile
+@@ -5,14 +5,10 @@
+ # NET-3 Networking Distribution for the LINUX operating
+ # system.
+ #
+-# Version: 2001-02-13
+-#
+ # Author: Bernd Eckenfels <net-tools@lina.inka.de>
+ # Copyright 1995-1996 Bernd Eckenfels, Germany
+ #
+-# URLs: ftp://ftp.inka.de/pub/comp/Linux/networking/NetTools/
+-# ftp://ftp.linux.org.uk/pub/linux/Networking/PROGRAMS/NetTools/
+-# http://www.inka.de/sites/lina/linux/NetTools/index_en.html
++# URLs: http://net-tools.sourceforge.net/
+ #
+ # Based on: Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org>
+ # Copyright 1988-1993 MicroWalt Corporation
+@@ -22,55 +18,14 @@
+ # Alan Cox <A.Cox@swansea.ac.uk>
+ # Copyright 1993-1994 Swansea University Computer Society
+ #
+-# Be careful!
++# Be careful!
+ # This Makefile doesn't describe complete dependencies for all include files.
+-# If you change include files you might need to do make clean.
+-#
+-# {1.20} Bernd Eckenfels: Even more modifications for the new
+-# package layout
+-# {1.21} Bernd Eckenfels: Check if config.in is newer than
+-# config.status
+-# {1.22} Bernd Eckenfels: Include ypdomainname and nisdomainame
+-#
+-# 1.3.50-BETA6 private Release
+-#
+-#960125 {1.23} Bernd Eckenfels: Peter Tobias' rewrite for
+-# makefile-based installation
+-# 1.3.50-BETA6a private Release
+-#
+-#960201 {1.24} Bernd Eckenfels: net-features.h added
+-#
+-#960201 1.3.50-BETA6b private Release
+-#
+-#960203 1.3.50-BETA6c private Release
+-#
+-#960204 1.3.50-BETA6d private Release
+-#
+-#960204 {1.25} Bernd Eckenfels: DISTRIBUTION added
+-#
+-#960205 1.3.50-BETA6e private Release
+-#
+-#960206 {1.26} Bernd Eckenfels: afrt.o removed (cleaner solution)
+-#
+-#960215 1.3.50-BETA6f Release
+-#
+-#960216 {1.30} Bernd Eckenfels: net-lib support
+-#960322 {1.31} Bernd Eckenfels: moveable netlib, TOPDIR
+-#960424 {1.32} Bernd Eckenfels: included the URLs in the Comment
+-#
+-#960514 1.31-alpha release
+-#
+-#960518 {1.33} Bernd Eckenfels: -I/usr/src/linux/include comment added
+-#
+-# This program is free software; you can redistribute it
+-# and/or modify it under the terms of the GNU General
+-# Public License as published by the Free Software
+-# Foundation; either version 2 of the License, or (at
+-# your option) any later version.
++# If you change include files you might need to do make clean.
+ #
+
+-# set the base of the Installation
++# set the base of the Installation
+ # BASEDIR = /mnt
++BASEDIR ?= $(DESTDIR)
+
+ # path to the net-lib support library. Default: lib
+ NET_LIB_PATH = lib
+@@ -88,20 +43,26 @@ endif
+
+ # Compiler and Linker Options
+ # You may need to uncomment and edit these if you are using libc5 and IPv6.
+-COPTS = -D_GNU_SOURCE -O2 -Wall -g # -I/usr/inet6/include
+-ifeq ($(origin LOPTS), undefined)
+-LOPTS =
+-endif
++CFLAGS ?= -O2 -g
++CFLAGS += -Wall
++CFLAGS += -fno-strict-aliasing # code needs a lot of work before strict aliasing is safe
++CPPFLAGS += -D_GNU_SOURCE
+ RESLIB = # -L/usr/inet6/lib -linet6
+
+ ifeq ($(HAVE_AFDECnet),1)
+ DNLIB = -ldnet
+ endif
+
++ifeq ($(origin CC), undefined)
++CC = gcc
++endif
++LD = $(CC)
++PKG_CONFIG ?= pkg-config
++
+ # -------- end of user definitions --------
+
+-MAINTAINER = Philip.Blundell@pobox.com
+-RELEASE = 1.60
++MAINTAINER = net-tools-devel@lists.sourceforge.net
++RELEASE = 2.10-alpha
+
+ .EXPORT_ALL_VARIABLES:
+
+@@ -113,22 +74,22 @@ endif
+
+ NET_LIB = $(NET_LIB_PATH)/lib$(NET_LIB_NAME).a
+
+-CFLAGS = $(COPTS) -I. -idirafter ./include/ -I$(NET_LIB_PATH)
+-LDFLAGS = $(LOPTS) -L$(NET_LIB_PATH)
++ifeq ($(HAVE_SELINUX),1)
++SE_PC_CFLAGS := $(shell $(PKG_CONFIG) --cflags libselinux)
++SE_PC_LIBS := $(shell $(PKG_CONFIG) --libs libselinux || echo -lselinux)
++SELIB = $(SE_PC_LIBS)
++CPPFLAGS += $(SE_PC_CFLAGS)
++endif
+
+-SUBDIRS = man/ $(NET_LIB_PATH)/
++CPPFLAGS += -I. -I$(TOPDIR)/include -I$(NET_LIB_PATH)
++LDFLAGS += -L$(NET_LIB_PATH)
+
+-ifeq ($(origin CC), undefined)
+-CC = gcc
+-endif
+-LD = $(CC)
++SUBDIRS = man/ $(NET_LIB_PATH)/
+
+ NLIB = -l$(NET_LIB_NAME)
+
+-MDEFINES = COPTS='$(COPTS)' LOPTS='$(LOPTS)' TOPDIR='$(TOPDIR)'
+-
+-%.o: %.c config.h version.h intl.h net-features.h $<
+- $(CC) $(CFLAGS) -c $<
++%.o: %.c config.h version.h intl.h lib/net-features.h $<
++ $(CC) $(CFLAGS) $(CPPFLAGS) -c $<
+
+ all: config.h version.h subdirs $(PROGS)
+
+@@ -154,12 +115,21 @@ clobber: clean
+ @for i in $(SUBDIRS); do (cd $$i && $(MAKE) clobber) ; done
+
+
+-dist: clobber
+- @echo Creating net-tools-$(RELEASE) in ..
+- @tar -cvz -f ../net-tools-$(RELEASE).tar.gz -C .. net-tools
++dist:
++ rm -rf net-tools-$(RELEASE)
++ git archive --prefix=net-tools-$(RELEASE)/ HEAD | tar xf -
++ $(MAKE) -C net-tools-$(RELEASE)/po $@
++ tar cf - net-tools-$(RELEASE)/ | xz > net-tools-$(RELEASE).tar.xz
++ rm -rf net-tools-$(RELEASE)
+
++distcheck: dist
++ tar xf net-tools-$(RELEASE).tar.xz
++ yes "" | $(MAKE) -C net-tools-$(RELEASE) config
++ $(MAKE) -C net-tools-$(RELEASE)
++ rm -rf net-tools-$(RELEASE)
++ @printf "\nThe tarball is ready to go:\n%s\n" "`du -b net-tools-$(RELEASE).tar.xz`"
+
+-config.h: config.in Makefile
++config.h: config.in Makefile
+ @echo "Configuring the Linux net-tools (NET-3 Base Utilities)..." ; echo
+ @if [ config.status -nt config.in ]; \
+ then ./configure.sh config.status; \
+@@ -175,62 +145,68 @@ $(NET_LIB): config.h version.h intl.h libdir
+
+ i18n.h: i18ndir
+
+-libdir:
+- @$(MAKE) -C $(NET_LIB_PATH) $(MDEFINES)
++libdir: version.h
++ @$(MAKE) -C $(NET_LIB_PATH)
+
+ i18ndir:
+ @$(MAKE) -C po
+
+-subdirs:
+- @for i in $(SUBDIRS); do $(MAKE) -C $$i $(MDEFINES) ; done
++# use libdir target for lib/ to avoid parallel build issues
++subdirs: libdir
++ @for i in $(SUBDIRS:$(NET_LIB_PATH)/=); do $(MAKE) -C $$i || exit $$? ; done
+
+ ifconfig: $(NET_LIB) ifconfig.o
+- $(CC) $(LDFLAGS) -o ifconfig ifconfig.o $(NLIB) $(RESLIB)
+-
+-nameif: nameif.o
+- $(CC) $(LDFLAGS) -o nameif nameif.o
++ $(CC) $(CFLAGS) $(LDFLAGS) -o $@ ifconfig.o $(NLIB) $(RESLIB)
++
++nameif: $(NET_LIB) nameif.o
++ $(CC) $(CFLAGS) $(LDFLAGS) -o $@ nameif.o $(NLIB) $(RESLIB)
+
+ hostname: hostname.o
+- $(CC) $(LDFLAGS) -o hostname hostname.o $(DNLIB)
++ $(CC) $(CFLAGS) $(LDFLAGS) -o $@ hostname.o $(DNLIB)
+
+ route: $(NET_LIB) route.o
+- $(CC) $(LDFLAGS) -o route route.o $(NLIB) $(RESLIB)
++ $(CC) $(CFLAGS) $(LDFLAGS) -o $@ route.o $(NLIB) $(RESLIB)
+
+ arp: $(NET_LIB) arp.o
+- $(CC) $(LDFLAGS) -o arp arp.o $(NLIB) $(RESLIB)
++ $(CC) $(CFLAGS) $(LDFLAGS) -o $@ arp.o $(NLIB) $(RESLIB)
+
+ rarp: $(NET_LIB) rarp.o
+- $(CC) $(LDFLAGS) -o rarp rarp.o $(NLIB)
++ $(CC) $(CFLAGS) $(LDFLAGS) -o $@ rarp.o $(NLIB)
+
+ slattach: $(NET_LIB) slattach.o
+- $(CC) $(LDFLAGS) -o slattach slattach.o $(NLIB)
++ $(CC) $(CFLAGS) $(LDFLAGS) -o $@ slattach.o $(NLIB)
+
+ plipconfig: $(NET_LIB) plipconfig.o
+- $(CC) $(LDFLAGS) -o plipconfig plipconfig.o $(NLIB)
++ $(CC) $(CFLAGS) $(LDFLAGS) -o $@ plipconfig.o $(NLIB)
+
+ netstat: $(NET_LIB) netstat.o statistics.o
+- $(CC) $(LDFLAGS) -o netstat netstat.o statistics.o $(NLIB) $(RESLIB)
++ $(CC) $(CFLAGS) $(LDFLAGS) -o $@ netstat.o statistics.o $(NLIB) $(RESLIB) $(SELIB)
+
+ iptunnel: $(NET_LIB) iptunnel.o
+- $(CC) $(LDFLAGS) -o iptunnel iptunnel.o $(NLIB) $(RESLIB)
++ $(CC) $(CFLAGS) $(LDFLAGS) -o $@ iptunnel.o $(NLIB) $(RESLIB)
+
+ ipmaddr: $(NET_LIB) ipmaddr.o
+- $(CC) $(LDFLAGS) -o ipmaddr ipmaddr.o $(NLIB) $(RESLIB)
++ $(CC) $(CFLAGS) $(LDFLAGS) -o $@ ipmaddr.o $(NLIB) $(RESLIB)
+
+-mii-tool: mii-tool.o
+- $(CC) $(LDFLAGS) -o mii-tool mii-tool.o
++mii-tool: $(NET_LIB) mii-tool.o
++ $(CC) $(CFLAGS) $(LDFLAGS) -o $@ mii-tool.o $(NLIB) $(RESLIB)
+
+ installbin:
++ @echo
++ @echo "######################################################"
++ @echo "Notice: ifconfig and route are now installed into /bin"
++ @echo "######################################################"
++ @echo
+ install -m 0755 -d ${BASEDIR}/sbin
+ install -m 0755 -d ${BASEDIR}/bin
+ install -m 0755 arp ${BASEDIR}/sbin
+ install -m 0755 hostname ${BASEDIR}/bin
+- install -m 0755 ifconfig ${BASEDIR}/sbin
++ install -m 0755 ifconfig ${BASEDIR}/bin
+ install -m 0755 nameif ${BASEDIR}/sbin
+ install -m 0755 netstat ${BASEDIR}/bin
+ install -m 0755 plipconfig $(BASEDIR)/sbin
+ install -m 0755 rarp ${BASEDIR}/sbin
+- install -m 0755 route ${BASEDIR}/sbin
++ install -m 0755 route ${BASEDIR}/bin
+ install -m 0755 slattach $(BASEDIR)/sbin
+ ifeq ($(HAVE_IP_TOOLS),1)
+ install -m 0755 ipmaddr $(BASEDIR)/sbin
+diff --git a/README b/README
+index 4e35868..aa6cc9a 100644
+--- a/README
++++ b/README
+@@ -10,29 +10,35 @@ This package includes the important tools for controlling the network
+ subsystem of the Linux kernel. This includes arp, hostname, ifconfig,
+ netstat, rarp and route. Additionally, this package contains
+ utilities relating to particular network hardware types (plipconfig,
+-slattach) and advanced aspects of IP configuration (iptunnel,
++slattach, mii-tool) and advanced aspects of IP configuration (iptunnel,
+ ipmaddr).
+
+ Please include the output of "program --version" when reporting bugs.
+
+
+ Contents:
+-
++
+ README This file.
+
+ README.ipv6 Notes for people hacking IPv6.
+
+ INSTALLING Installation instructions.
+
+- COPYING Your free copy of the GNU Public License.
++ COPYING Your free copy of the GNU General Public License.
+
+ TODO Some things that need to be done.
+
++The Homepage (including Git repository, release downloads, bug tracker and
++mailing list) is hosted by SourceForge.net. Please consider to
++join the project if you want to contribute:
++
++ https://sourceforge.net/projects/net-tools/
++
+
+ Notes
+ -----
+
+-This is net-tools 1.60.
++This is net-tools 1.6x.
+
+ You need kernel 2.0 or later to use these programs. These programs
+ should compile cleanly with both glibc (version 2.0 or 2.1) and libc5,
+@@ -59,6 +65,8 @@ all common environments but some of the more esoteric hardware and
+ protocol families may be more touchy. Feel free to send patches if
+ you have problems.
+
++For this release, the localized man pages are installed with UTF-8 encoding.
++
+ Phil Blundell
+ philb@gnu.org
+
+diff --git a/RPM/net-tools.spec b/RPM/net-tools.spec
+index 86b45db..b12f785 100644
+--- a/RPM/net-tools.spec
++++ b/RPM/net-tools.spec
+@@ -34,7 +34,7 @@ make BASEDIR=$RPM_BUILD_ROOT install
+ strip arp ifconfig rarp route slattach plipconfig ipmaddr iptunnel
+ cd ../bin
+ strip hostname netstat
+-)
++)
+
+ %clean
+ rm -rf $RPM_BUILD_ROOT
+@@ -92,7 +92,7 @@ rm -rf $RPM_BUILD_ROOT
+ * Fri Feb 27 1998 Jason Spangler <jasons@usemail.com>
+ - changed to net-tools 1.432
+ - removed old glibc 2.1 patch
+-
++
+ * Wed Oct 22 1997 Erik Troan <ewt@redhat.com>
+ - added extra patches for glibc 2.1
+
+diff --git a/TODO b/TODO
+index ec6aae8..c8a10dc 100644
+--- a/TODO
++++ b/TODO
+@@ -23,7 +23,7 @@ TODO for net-tools
+ [ ] supply some informations about new features to HOWTOs
+ [ ] Config file only works with bash not ash.
+ [ ] Token ring is almost totally untested.
+-[ ] additional tools for IPX, AX.25 etc be bundled [ipxripd004, ipx_* tools
++[ ] additional tools for IPX, AX.25 etc be bundled [ipxripd004, ipx_* tools
+ from caldera, axattach] into existing bins
+ [ ] "SIOCAX25OPTRT" [Joerg (DL1BKE)]. 1.3.75
+ [ ] dummy NOARP?! (2. default route for preveting hostunreachables on linedrop)
+diff --git a/arp.c b/arp.c
+index 509a804..5db71a7 100644
+--- a/arp.c
++++ b/arp.c
+@@ -8,7 +8,7 @@
+ * NET-3 Networking Distribution for the LINUX operating
+ * system.
+ *
+- * Version: $Id: arp.c,v 1.20 2001/04/08 17:05:05 pb Exp $
++ * Version: $Id: arp.c,v 1.27 2009/09/06 22:50:11 vapier Exp $
+ *
+ * Maintainer: Bernd 'eckes' Eckenfels, <net-tools@lina.inka.de>
+ *
+@@ -20,14 +20,14 @@
+ * Andrew Tridgell : proxy arp netmasks
+ * Bernd Eckenfels : -n option
+ * Bernd Eckenfels : Use only /proc for display
+- * {1.60} Bernd Eckenfels : new arpcode (-i) for 1.3.42 but works
++ * {1.60} Bernd Eckenfels : new arpcode (-i) for 1.3.42 but works
+ * with 1.2.x, too
+ * {1.61} Bernd Eckenfels : more verbose messages
+ * {1.62} Bernd Eckenfels : check -t for hw adresses and try to
+ * explain EINVAL (jeff)
+ *970125 {1.63} Bernd Eckenfels : -a print hardwarename instead of tiltle
+ *970201 {1.64} Bernd Eckenfels : net-features.h support
+- *970203 {1.65} Bernd Eckenfels : "#define" in "#if",
++ *970203 {1.65} Bernd Eckenfels : "#define" in "#if",
+ * -H|-A additional to -t|-p
+ *970214 {1.66} Bernd Eckenfels : Fix optarg required for -H and -A
+ *970412 {1.67} Bernd Eckenfels : device=""; is default
+@@ -35,7 +35,7 @@
+ *970517 {1.69} Bernd Eckenfels : usage() fixed
+ *970622 {1.70} Bernd Eckenfels : arp -d priv
+ *970106 {1.80} Bernd Eckenfels : new syntax without -D and with "dev <If>",
+- * ATF_MAGIC, ATF_DONTPUB support.
++ * ATF_MAGIC, ATF_DONTPUB support.
+ * Typo fix (Debian Bug#5728 Giuliano Procida)
+ *970803 {1.81} Bernd Eckenfels : removed junk comment line 1
+ *970925 {1.82} Bernd Eckenfels : include fix for libc6
+@@ -80,7 +80,7 @@
+ #define FEATURE_ARP
+ #include "lib/net-features.h"
+
+-char *Release = RELEASE, *Version = "arp 1.88 (2001-04-04)";
++static char *Release = RELEASE;
+
+ int opt_n = 0; /* do not resolve addresses */
+ int opt_N = 0; /* use symbolic names */
+@@ -100,9 +100,10 @@ static int arp_del(char **args)
+ {
+ char host[128];
+ struct arpreq req;
+- struct sockaddr sa;
++ struct sockaddr_storage ss;
++ struct sockaddr *sa;
+ int flags = 0;
+- int err;
++ int deleted = 0;
+
+ memset((char *) &req, 0, sizeof(req));
+
+@@ -112,12 +113,13 @@ static int arp_del(char **args)
+ return (-1);
+ }
+ safe_strncpy(host, *args, (sizeof host));
+- if (ap->input(0, host, &sa) < 0) {
++ sa = (struct sockaddr *)&ss;
++ if (ap->input(0, host, sa) < 0) {
+ ap->herror(host);
+ return (-1);
+ }
+ /* If a host has more than one address, use the correct one! */
+- memcpy((char *) &req.arp_pa, (char *) &sa, sizeof(struct sockaddr));
++ memcpy((char *) &req.arp_pa, (char *) sa, sizeof(struct sockaddr));
+
+ if (hw_set)
+ req.arp_ha.sa_family = hw->type;
+@@ -148,7 +150,7 @@ static int arp_del(char **args)
+ continue;
+ }
+ if (!strcmp(*args, "dontpub")) {
+-#ifdef HAVE_ATF_DONTPUB
++#ifdef ATF_DONTPUB
+ req.arp_flags |= ATF_DONTPUB;
+ #else
+ ENOSUPP("arp", "ATF_DONTPUB");
+@@ -157,7 +159,7 @@ static int arp_del(char **args)
+ continue;
+ }
+ if (!strcmp(*args, "auto")) {
+-#ifdef HAVE_ATF_MAGIC
++#ifdef ATF_MAGIC
+ req.arp_flags |= ATF_MAGIC;
+ #else
+ ENOSUPP("arp", "ATF_MAGIC");
+@@ -176,12 +178,12 @@ static int arp_del(char **args)
+ if (*++args == NULL)
+ usage();
+ if (strcmp(*args, "255.255.255.255") != 0) {
+- strcpy(host, *args);
+- if (ap->input(0, host, &sa) < 0) {
++ safe_strncpy(host, *args, (sizeof host));
++ if (ap->input(0, host, sa) < 0) {
+ ap->herror(host);
+ return (-1);
+ }
+- memcpy((char *) &req.arp_netmask, (char *) &sa,
++ memcpy((char *) &req.arp_netmask, (char *) sa,
+ sizeof(struct sockaddr));
+ req.arp_flags |= ATF_NETMASK;
+ }
+@@ -190,35 +192,41 @@ static int arp_del(char **args)
+ }
+ usage();
+ }
++
++ // if neighter priv nor pub is given, work on both
+ if (flags == 0)
+ flags = 3;
+
+- strcpy(req.arp_dev, device);
++ safe_strncpy(req.arp_dev, device, sizeof(req.arp_dev));
+
+- err = -1;
++ /* unfortuatelly the kernel interface does not allow us to
++ delete private entries anlone, so we need this hack
++ to avoid "not found" errors if we try both. */
++ deleted = 0;
+
+ /* Call the kernel. */
+ if (flags & 2) {
+ if (opt_v)
+- fprintf(stderr, "arp: SIOCDARP(nopub)\n");
+- if ((err = ioctl(sockfd, SIOCDARP, &req) < 0)) {
+- if (errno == ENXIO) {
++ fprintf(stderr, "arp: SIOCDARP(dontpub)\n");
++ if (ioctl(sockfd, SIOCDARP, &req) < 0) {
++ if ((errno == ENXIO) || (errno == ENOENT)) {
+ if (flags & 1)
+- goto nopub;
++ goto dontpub;
+ printf(_("No ARP entry for %s\n"), host);
+ return (-1);
+ }
+- perror("SIOCDARP(priv)");
++ perror("SIOCDARP(dontpub)");
+ return (-1);
+- }
++ } else
++ deleted = 1;
+ }
+- if ((flags & 1) && (err)) {
+- nopub:
++ if (!deleted && (flags & 1)) {
++ dontpub:
+ req.arp_flags |= ATF_PUBL;
+ if (opt_v)
+ fprintf(stderr, "arp: SIOCDARP(pub)\n");
+ if (ioctl(sockfd, SIOCDARP, &req) < 0) {
+- if (errno == ENXIO) {
++ if ((errno == ENXIO) || (errno == ENOENT)) {
+ printf(_("No ARP entry for %s\n"), host);
+ return (-1);
+ }
+@@ -235,7 +243,7 @@ static int arp_getdevhw(char *ifname, struct sockaddr *sa, struct hwtype *hw)
+ struct ifreq ifr;
+ struct hwtype *xhw;
+
+- strcpy(ifr.ifr_name, ifname);
++ safe_strncpy(ifr.ifr_name, ifname, IFNAMSIZ);
+ if (ioctl(sockfd, SIOCGIFHWADDR, &ifr) < 0) {
+ fprintf(stderr, _("arp: cant get HW-Address for `%s': %s.\n"), ifname, strerror(errno));
+ return (-1);
+@@ -260,7 +268,8 @@ static int arp_set(char **args)
+ {
+ char host[128];
+ struct arpreq req;
+- struct sockaddr sa;
++ struct sockaddr_storage ss;
++ struct sockaddr *sa;
+ int flags;
+
+ memset((char *) &req, 0, sizeof(req));
+@@ -271,12 +280,13 @@ static int arp_set(char **args)
+ return (-1);
+ }
+ safe_strncpy(host, *args++, (sizeof host));
+- if (ap->input(0, host, &sa) < 0) {
++ sa = (struct sockaddr *)&ss;
++ if (ap->input(0, host, sa) < 0) {
+ ap->herror(host);
+ return (-1);
+ }
+ /* If a host has more than one address, use the correct one! */
+- memcpy((char *) &req.arp_pa, (char *) &sa, sizeof(struct sockaddr));
++ memcpy((char *) &req.arp_pa, (char *) sa, sizeof(struct sockaddr));
+
+ /* Fetch the hardware address. */
+ if (*args == NULL) {
+@@ -317,7 +327,7 @@ static int arp_set(char **args)
+ continue;
+ }
+ if (!strcmp(*args, "dontpub")) {
+-#ifdef HAVE_ATF_DONTPUB
++#ifdef ATF_DONTPUB
+ flags |= ATF_DONTPUB;
+ #else
+ ENOSUPP("arp", "ATF_DONTPUB");
+@@ -326,7 +336,7 @@ static int arp_set(char **args)
+ continue;
+ }
+ if (!strcmp(*args, "auto")) {
+-#ifdef HAVE_ATF_MAGIC
++#ifdef ATF_MAGIC
+ flags |= ATF_MAGIC;
+ #else
+ ENOSUPP("arp", "ATF_MAGIC");
+@@ -345,12 +355,12 @@ static int arp_set(char **args)
+ if (*++args == NULL)
+ usage();
+ if (strcmp(*args, "255.255.255.255") != 0) {
+- strcpy(host, *args);
+- if (ap->input(0, host, &sa) < 0) {
++ safe_strncpy(host, *args, (sizeof host));
++ if (ap->input(0, host, sa) < 0) {
+ ap->herror(host);
+ return (-1);
+ }
+- memcpy((char *) &req.arp_netmask, (char *) &sa,
++ memcpy((char *) &req.arp_netmask, (char *) sa,
+ sizeof(struct sockaddr));
+ flags |= ATF_NETMASK;
+ }
+@@ -363,7 +373,7 @@ static int arp_set(char **args)
+ /* Fill in the remainder of the request. */
+ req.arp_flags = flags;
+
+- strcpy(req.arp_dev, device);
++ safe_strncpy(req.arp_dev, device, sizeof(req.arp_dev));
+
+ /* Call the kernel. */
+ if (opt_v)
+@@ -424,7 +434,7 @@ static int arp_file(char *name)
+
+
+ /* Print the contents of an ARP request block. */
+-static void arp_disp_2(char *name, int type, int arp_flags, char *hwa, char *mask, char *dev)
++static void arp_disp_2(const char *name, int type, int arp_flags, const char *hwa, const char *mask, const char *dev)
+ {
+ static int title = 0;
+ struct hwtype *xhw;
+@@ -445,11 +455,11 @@ static void arp_disp_2(char *name, int type, int arp_flags, char *hwa, char *mas
+ strcat(flags, "M");
+ if (arp_flags & ATF_PUBL)
+ strcat(flags, "P");
+-#ifdef HAVE_ATF_MAGIC
++#ifdef ATF_MAGIC
+ if (arp_flags & ATF_MAGIC)
+ strcat(flags, "A");
+ #endif
+-#ifdef HAVE_ATF_DONTPUB
++#ifdef ATF_DONTPUB
+ if (arp_flags & ATF_DONTPUB)
+ strcat(flags, "!");
+ #endif
+@@ -463,7 +473,7 @@ static void arp_disp_2(char *name, int type, int arp_flags, char *hwa, char *mas
+
+ if (!(arp_flags & ATF_COM)) {
+ if (arp_flags & ATF_PUBL)
+- printf("%-8.8s%-20.20s", "*", "*");
++ printf("%-8.8s%-20.20s", "*", _("<from_interface>"));
+ else
+ printf("%-8.8s%-20.20s", "", _("(incomplete)"));
+ } else {
+@@ -474,7 +484,7 @@ static void arp_disp_2(char *name, int type, int arp_flags, char *hwa, char *mas
+ }
+
+ /* Print the contents of an ARP request block. */
+-static void arp_disp(char *name, char *ip, int type, int arp_flags, char *hwa, char *mask, char *dev)
++static void arp_disp(const char *name, const char *ip, int type, int arp_flags, const char *hwa, const char *mask, const char *dev)
+ {
+ struct hwtype *xhw;
+
+@@ -486,7 +496,7 @@ static void arp_disp(char *name, char *ip, int type, int arp_flags, char *hwa, c
+
+ if (!(arp_flags & ATF_COM)) {
+ if (arp_flags & ATF_PUBL)
+- printf("* ");
++ printf("<from_interface> ");
+ else
+ printf(_("<incomplete> "));
+ } else {
+@@ -499,12 +509,12 @@ static void arp_disp(char *name, char *ip, int type, int arp_flags, char *hwa, c
+ if (arp_flags & ATF_PERM)
+ printf("PERM ");
+ if (arp_flags & ATF_PUBL)
+- printf("PUP ");
+-#ifdef HAVE_ATF_MAGIC
++ printf("PUB ");
++#ifdef ATF_MAGIC
+ if (arp_flags & ATF_MAGIC)
+ printf("AUTO ");
+ #endif
+-#ifdef HAVE_ATF_DONTPUB
++#ifdef ATF_DONTPUB
+ if (arp_flags & ATF_DONTPUB)
+ printf("DONTPUB ");
+ #endif
+@@ -519,7 +529,8 @@ static void arp_disp(char *name, char *ip, int type, int arp_flags, char *hwa, c
+ static int arp_show(char *name)
+ {
+ char host[100];
+- struct sockaddr sa;
++ struct sockaddr_storage ss;
++ struct sockaddr *sa;
+ char ip[100];
+ char hwa[100];
+ char mask[100];
+@@ -527,19 +538,20 @@ static int arp_show(char *name)
+ char dev[100];
+ int type, flags;
+ FILE *fp;
+- char *hostname;
++ const char *hostname;
+ int num, entries = 0, showed = 0;
+
+ host[0] = '\0';
+
++ sa = (struct sockaddr *)&ss;
+ if (name != NULL) {
+ /* Resolve the host name. */
+ safe_strncpy(host, name, (sizeof host));
+- if (ap->input(0, host, &sa) < 0) {
++ if (ap->input(0, host, sa) < 0) {
+ ap->herror(host);
+ return (-1);
+ }
+- safe_strncpy(host, ap->sprint(&sa, 1), sizeof(host));
++ safe_strncpy(host, ap->sprint(sa, 1), sizeof(host));
+ }
+ /* Open the PROCps kernel table. */
+ if ((fp = fopen(_PATH_PROCNET_ARP, "r")) == NULL) {
+@@ -548,11 +560,11 @@ static int arp_show(char *name)
+ }
+ /* Bypass header -- read until newline */
+ if (fgets(line, sizeof(line), fp) != (char *) NULL) {
+- strcpy(mask, "-");
+- strcpy(dev, "-");
++ safe_strncpy(mask, "-", sizeof(mask));
++ safe_strncpy(dev, "-", sizeof(dev));
+ /* Read the ARP cache entries. */
+ for (; fgets(line, sizeof(line), fp);) {
+- num = sscanf(line, "%s 0x%x 0x%x %100s %100s %100s\n",
++ num = sscanf(line, "%s 0x%x 0x%x %99s %99s %99s\n",
+ ip, &type, &flags, hwa, mask, dev);
+ if (num < 4)
+ break;
+@@ -575,10 +587,10 @@ static int arp_show(char *name)
+ if (opt_n)
+ hostname = "?";
+ else {
+- if (ap->input(0, ip, &sa) < 0)
++ if (ap->input(0, ip, sa) < 0)
+ hostname = ip;
+ else
+- hostname = ap->sprint(&sa, opt_n | 0x8000);
++ hostname = ap->sprint(sa, opt_n | 0x8000);
+ if (strcmp(hostname, ip) == 0)
+ hostname = "?";
+ }
+@@ -605,20 +617,20 @@ static int arp_show(char *name)
+
+ static void version(void)
+ {
+- fprintf(stderr, "%s\n%s\n%s\n", Release, Version, Features);
++ fprintf(stderr, "%s\n%s\n", Release, Features);
+ exit(E_VERSION);
+ }
+
+ static void usage(void)
+ {
+ fprintf(stderr, _("Usage:\n arp [-vn] [<HW>] [-i <if>] [-a] [<hostname>] <-Display ARP cache\n"));
+- fprintf(stderr, _(" arp [-v] [-i <if>] -d <hostname> [pub][nopub] <-Delete ARP entry\n"));
+- fprintf(stderr, _(" arp [-vnD] [<HW>] [-i <if>] -f [<filename>] <-Add entry from file\n"));
+- fprintf(stderr, _(" arp [-v] [<HW>] [-i <if>] -s <hostname> <hwaddr> [temp][nopub] <-Add entry\n"));
+- fprintf(stderr, _(" arp [-v] [<HW>] [-i <if>] -s <hostname> <hwaddr> [netmask <nm>] pub <-''-\n"));
+- fprintf(stderr, _(" arp [-v] [<HW>] [-i <if>] -Ds <hostname> <if> [netmask <nm>] pub <-''-\n\n"));
+-
++ fprintf(stderr, _(" arp [-v] [-i <if>] -d <host> [pub] <-Delete ARP entry\n"));
++ fprintf(stderr, _(" arp [-vnD] [<HW>] [-i <if>] -f [<filename>] <-Add entry from file\n"));
++ fprintf(stderr, _(" arp [-v] [<HW>] [-i <if>] -s <host> <hwaddr> [temp] <-Add entry\n"));
++ fprintf(stderr, _(" arp [-v] [<HW>] [-i <if>] -Ds <host> <if> [netmask <nm>] pub <-''-\n\n"));
++
+ fprintf(stderr, _(" -a display (all) hosts in alternative (BSD) style\n"));
++ fprintf(stderr, _(" -e display (all) hosts in default (Linux) style\n"));
+ fprintf(stderr, _(" -s, --set set a new ARP entry\n"));
+ fprintf(stderr, _(" -d, --delete delete a specified entry\n"));
+ fprintf(stderr, _(" -v, --verbose be verbose\n"));
+diff --git a/config.in b/config.in
+index f3310d6..e080937 100644
+--- a/config.in
++++ b/config.in
+@@ -1,5 +1,5 @@
+ #
+-# config.in Configure.sh source for the net-tools.
++# config.in configure.sh source for the net-tools.
+ # This file contains the definition of what the support
+ # library contains. Most of all, it defines which types
+ # of address families and hardware we know of.
+@@ -46,19 +46,20 @@ bool 'Does your system support GNU gettext?' I18N n
+ *
+ *
+ * Protocol Families.
+-*
++*
+ bool 'UNIX protocol family' HAVE_AFUNIX y
+ bool 'INET (TCP/IP) protocol family' HAVE_AFINET y
+-bool 'INET6 (IPv6) protocol family' HAVE_AFINET6 n
++bool 'INET6 (IPv6) protocol family' HAVE_AFINET6 y
+ bool 'Novell IPX/SPX protocol family' HAVE_AFIPX y
+ bool 'Appletalk DDP protocol family' HAVE_AFATALK y
+ bool 'AX25 (packet radio) protocol family' HAVE_AFAX25 y
+ bool 'NET/ROM (packet radio) protocol family' HAVE_AFNETROM y
+-bool 'Rose (packet radio) protocol family' HAVE_AFROSE n
++bool 'Rose (packet radio) protocol family' HAVE_AFROSE y
+ bool 'X.25 (CCITT) protocol family' HAVE_AFX25 y
+-bool 'Econet protocol family' HAVE_AFECONET n
++bool 'Econet protocol family' HAVE_AFECONET y
+ bool 'DECnet protocol family' HAVE_AFDECnet n
+-bool 'Ash protocol family' HAVE_AFASH n
++bool 'Ash protocol family' HAVE_AFASH y
++bool 'Bluetooth protocol family' HAVE_AFBLUETOOTH n
+ *
+ *
+ * Device Hardware types.
+@@ -68,24 +69,27 @@ bool 'ARCnet support' HAVE_HWARC y
+ bool 'SLIP (serial line) support' HAVE_HWSLIP y
+ bool 'PPP (serial line) support' HAVE_HWPPP y
+ bool 'IPIP Tunnel support' HAVE_HWTUNNEL y
+-bool 'STRIP (Metricom radio) support' HAVE_HWSTRIP y
+-bool 'Token ring (generic) support' HAVE_HWTR y
++bool 'STRIP (Metricom radio) support' HAVE_HWSTRIP n
++bool 'Token ring (generic) support' HAVE_HWTR n
+ bool 'AX25 (packet radio) support' HAVE_HWAX25 y
+-bool 'Rose (packet radio) support' HAVE_HWROSE n
++bool 'Rose (packet radio) support' HAVE_HWROSE y
+ bool 'NET/ROM (packet radio) support' HAVE_HWNETROM y
+ bool 'X.25 (generic) support' HAVE_HWX25 y
+ bool 'DLCI/FRAD (frame relay) support' HAVE_HWFR y
+-bool 'SIT (IPv6-in-IPv4) support' HAVE_HWSIT n
+-bool 'FDDI (generic) support' HAVE_HWFDDI n
+-bool 'HIPPI (generic) support' HAVE_HWHIPPI n
+-bool 'Ash hardware support' HAVE_HWASH n
+-bool '(Cisco)-HDLC/LAPB support' HAVE_HWHDLCLAPB n
++bool 'SIT (IPv6-in-IPv4) support' HAVE_HWSIT y
++bool 'FDDI (generic) support' HAVE_HWFDDI y
++bool 'HIPPI (generic) support' HAVE_HWHIPPI y
++bool 'Ash hardware support' HAVE_HWASH y
++bool '(Cisco)-HDLC/LAPB support' HAVE_HWHDLCLAPB y
+ bool 'IrDA support' HAVE_HWIRDA y
+-bool 'Econet hardware support' HAVE_HWEC n
++bool 'Econet hardware support' HAVE_HWEC y
++bool 'Generic EUI-64 hardware support' HAVE_HWEUI64 y
++bool 'InfiniBand hardware support' HAVE_HWIB y
+ *
+ *
+ * Other Features.
+ *
+-bool 'IP Masquerading support' HAVE_FW_MASQUERADE n
+-bool 'Build iptunnel and ipmaddr' HAVE_IP_TOOLS n
+-bool 'Build mii-tool' HAVE_MII n
++bool 'IP Masquerading support' HAVE_FW_MASQUERADE y
++bool 'Build iptunnel and ipmaddr' HAVE_IP_TOOLS y
++bool 'Build mii-tool' HAVE_MII y
++bool 'SELinux support' HAVE_SELINUX n
+diff --git a/configure.sh b/configure.sh
+index 9859b59..64b594f 100755
+--- a/configure.sh
++++ b/configure.sh
+@@ -1,6 +1,6 @@
+ #!/usr/bin/env bash
+ #
+-# Configure.sh Generates interactively a config.h from config.in
++# configure.sh Generates interactively a config.h from config.in
+ #
+ # net-tools A collection of programs that form the base set of the
+ # NET-3 Networking Distribution for the LINUX operating
+@@ -37,7 +37,15 @@ CONFIG=config.h
+ MAKECONFIG=config.make
+
+
+-[ -z "$BASH" ] && { echo "Configure requires bash" 1>&2; exit 1; }
++[ -z "$BASH" ] && { echo "configure.sh requires bash" 1>&2; exit 1; }
++
++cat <<EOF
++
++######################################################
++Notice: ifconfig and route are now installed into /bin
++######################################################
++
++EOF
+
+ # Disable filename globbing once and for all.
+ # Enable function cacheing.
+@@ -106,7 +114,7 @@ function int()
+ }
+
+ #
+- # Make sure we start out with a clean slate.
++ # Make sure we start out with a clean state.
+ #
+ > config.new
+ > ${CONFIG}
+diff --git a/hostname.c b/hostname.c
+index 8793fb9..3508224 100644
+--- a/hostname.c
++++ b/hostname.c
+@@ -6,23 +6,22 @@
+ * Usage: hostname [-d|-f|-s|-a|-i|-y|-n]
+ * hostname [-h|-V]
+ * hostname {name|-F file}
+- * dnsdmoainname
++ * dnsdmoainname
+ * nisdomainname {name|-F file}
+ *
+- * Version: hostname 1.96 (1996-02-18)
++ * Version: hostname 1.101 (2003-10-11)
+ *
+ * Author: Peter Tobias <tobias@et-inf.fho-emden.de>
+ *
+ * Changes:
+- * {1.90} Peter Tobias : Added -a and -i options.
+- * {1.91} Bernd Eckenfels : -v,-V rewritten, long_opts
+- * (major rewrite), usage.
+- *960120 {1.95} Bernd Eckenfels : -y/nisdomainname - support for get/
+- * setdomainname added
+- *960218 {1.96} Bernd Eckenfels : netinet/in.h added
+- *980629 {1.97} Arnaldo Carvalho de Melo : gettext instead of catgets for i18n
+- *20000213 {1.99} Arnaldo Carvalho de Melo : fixed some i18n strings
++ * {1.90} Peter Tobias : Added -a and -i options.
++ * {1.91} Bernd Eckenfels : -v,-V rewritten, long_opts (major rewrite), usage.
++ *19960120 {1.95} Bernd Eckenfels : -y/nisdomainname - support for get/setdomainname added
++ *19960218 {1.96} Bernd Eckenfels : netinet/in.h added
++ *19980629 {1.97} Arnaldo Carvalho de Melo : gettext instead of catgets for i18n
++ *20000213 {1.99} Arnaldo Carvalho de Melo : fixed some i18n strings
+ *20010404 {1.100} Arnaldo Carvalho de Melo: use setlocale
++ *20031011 {1.101} Maik Broemme: gcc 3.x fixes (default: break)
+ *
+ * This program is free software; you can redistribute it
+ * and/or modify it under the terms of the GNU General
+@@ -31,7 +30,9 @@
+ * your option) any later version.
+ */
+ #include <stdio.h>
++#include <stdlib.h>
+ #include <unistd.h>
++#include <stdlib.h>
+ #include <getopt.h>
+ #include <string.h>
+ #include <netdb.h>
+@@ -41,13 +42,19 @@
+ #include <arpa/inet.h>
+ #include "config.h"
+ #include "version.h"
++#include "net-support.h"
+ #include "../intl.h"
+
++#if HAVE_AFINET6
++#include <sys/socket.h> /* for PF_INET6 */
++#include <sys/types.h> /* for inet_ntop */
++#endif
++
+ #if HAVE_AFDECnet
+ #include <netdnet/dn.h>
+ #endif
+
+-char *Release = RELEASE, *Version = "hostname 1.100 (2001-04-14)";
++static char *Release = RELEASE;
+
+ static char *program_name;
+ static int opt_v;
+@@ -78,6 +85,7 @@ static void setnname(char *nname)
+ fprintf(stderr, _("%s: name too long\n"), program_name);
+ break;
+ default:
++ break;
+ }
+ exit(1);
+ }
+@@ -97,7 +105,6 @@ static void sethname(char *hname)
+ case EINVAL:
+ fprintf(stderr, _("%s: name too long\n"), program_name);
+ break;
+- default:
+ }
+ exit(1);
+ };
+@@ -116,7 +123,6 @@ static void setdname(char *dname)
+ case EINVAL:
+ fprintf(stderr, _("%s: name too long\n"), program_name);
+ break;
+- default:
+ }
+ exit(1);
+ };
+@@ -125,15 +131,23 @@ static void setdname(char *dname)
+ static void showhname(char *hname, int c)
+ {
+ struct hostent *hp;
++#if HAVE_AFINET6
++ struct in6_addr **ip6;
++#endif
+ register char *p, **alias;
+ struct in_addr **ip;
+
+ if (opt_v)
+ fprintf(stderr, _("Resolving `%s' ...\n"), hname);
+- if (!(hp = gethostbyname(hname))) {
++ if (
++#if HAVE_AFINET6
++ !(hp = gethostbyname2(hname, PF_INET6)) &&
++#endif
++ !(hp = gethostbyname(hname))) {
+ herror(program_name);
+ exit(1);
+ }
++
+ if (opt_v) {
+ fprintf(stderr, _("Result: h_name=`%s'\n"),
+ hp->h_name);
+@@ -142,11 +156,28 @@ static void showhname(char *hname, int c)
+ while (alias[0])
+ fprintf(stderr, _("Result: h_aliases=`%s'\n"),
+ *alias++);
+-
+- ip = (struct in_addr **) hp->h_addr_list;
+- while (ip[0])
+- fprintf(stderr, _("Result: h_addr_list=`%s'\n"),
+- inet_ntoa(**ip++));
++#if HAVE_AFINET6
++ if (hp->h_addrtype == PF_INET6) {
++ char addr[INET6_ADDRSTRLEN + 1];
++ addr[INET6_ADDRSTRLEN] = '\0';
++ ip6 = (struct in6_addr **) hp->h_addr_list;
++ while (ip6[0]) {
++ if (inet_ntop(PF_INET6, *ip6++, addr, INET6_ADDRSTRLEN))
++ fprintf(stderr, _("Result: h_addr_list=`%s'\n"), addr);
++ else if (errno == EAFNOSUPPORT)
++ fprintf(stderr, _("%s: protocol family not supported\n"),
++ program_name);
++ else if (errno == ENOSPC)
++ fprintf(stderr, _("%s: name too long\n"), program_name);
++ }
++ } else
++#endif
++ {
++ ip = (struct in_addr **) hp->h_addr_list;
++ while (ip[0])
++ fprintf(stderr, _("Result: h_addr_list=`%s'\n"),
++ inet_ntoa(**ip++));
++ }
+ }
+ if (!(p = strchr(hp->h_name, '.')) && (c == 'd'))
+ return;
+@@ -158,8 +189,29 @@ static void showhname(char *hname, int c)
+ printf("\n");
+ break;
+ case 'i':
+- while (hp->h_addr_list[0])
+- printf("%s ", inet_ntoa(*(struct in_addr *) *hp->h_addr_list++));
++#if HAVE_AFINET6
++ if (hp->h_addrtype == PF_INET6) {
++ char addr[INET6_ADDRSTRLEN + 1];
++ addr[INET6_ADDRSTRLEN] = '\0';
++ while (hp->h_addr_list[0]) {
++ if (inet_ntop(PF_INET6, (struct in6_addr *)*hp->h_addr_list++,
++ addr, INET6_ADDRSTRLEN)) {
++ printf("%s ", addr);
++ } else if (errno == EAFNOSUPPORT) {
++ fprintf(stderr, _("\n%s: protocol family not supported\n"),
++ program_name);
++ exit(1);
++ } else if (errno == ENOSPC) {
++ fprintf(stderr, _("\n%s: name too long\n"), program_name);
++ exit(1);
++ }
++ }
++ } else
++#endif
++ {
++ while (hp->h_addr_list[0])
++ printf("%s ", inet_ntoa(*(struct in_addr *)*hp->h_addr_list++));
++ }
+ printf("\n");
+ break;
+ case 'd':
+@@ -173,7 +225,6 @@ static void showhname(char *hname, int c)
+ *p = '\0';
+ printf("%s\n", hp->h_name);
+ break;
+- default:
+ }
+ }
+
+@@ -215,8 +266,8 @@ static void setfilename(char *name, int what)
+
+ static void version(void)
+ {
+- fprintf(stderr, "%s\n%s\n", Release, Version);
+- exit(5); /* E_VERSION */
++ fprintf(stderr, "%s\n", Release);
++ exit(E_VERSION);
+ }
+
+ static void usage(void)
+@@ -247,7 +298,7 @@ static void usage(void)
+ " FQDN (Fully Qualified Domain Name) and the DNS domain name (which is\n"
+ " part of the FQDN) in the /etc/hosts file.\n"));
+
+- exit(4); /* E_USAGE */
++ exit(E_USAGE);
+ }
+
+
+@@ -326,11 +377,12 @@ int main(int argc, char **argv)
+ break;
+ case 'V':
+ version();
++ break; // not reached
+ case '?':
+ case 'h':
+ default:
+ usage();
+-
++ break; // not reached
+ };
+
+
+@@ -371,7 +423,10 @@ int main(int argc, char **argv)
+ setdname(argv[optind]);
+ break;
+ }
+- getdomainname(myname, sizeof(myname));
++ if (getdomainname(myname, sizeof(myname)) < 0) {
++ perror("getdomainname()");
++ exit(1);
++ }
+ if (opt_v)
+ fprintf(stderr, _("getdomainname()=`%s'\n"), myname);
+ printf("%s\n", myname);
+diff --git a/ifconfig.c b/ifconfig.c
+index 73a4e9b..df9793a 100644
+--- a/ifconfig.c
++++ b/ifconfig.c
+@@ -3,7 +3,7 @@
+ * that either displays or sets the characteristics of
+ * one or more of the system's networking interfaces.
+ *
+- * Version: $Id: ifconfig.c,v 1.50 2001/04/13 18:25:18 pb Exp $
++ * Version: $Id: ifconfig.c,v 1.59 2011-01-01 03:22:31 ecki Exp $
+ *
+ * Author: Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org>
+ * and others. Copyright 1993 MicroWalt Corporation
+@@ -19,8 +19,8 @@
+ *
+ * {1.34} - 19980630 - Arnaldo Carvalho de Melo <acme@conectiva.com.br>
+ * - gettext instead of catgets for i18n
+- * 10/1998 - Andi Kleen. Use interface list primitives.
+- * 20001008 - Bernd Eckenfels, Patch from RH for setting mtu
++ * 10/1998 - Andi Kleen. Use interface list primitives.
++ * 20001008 - Bernd Eckenfels, Patch from RH for setting mtu
+ * (default AF was wrong)
+ * 20010404 - Arnaldo Carvalho de Melo, use setlocale
+ */
+@@ -49,7 +49,7 @@
+ #include <asm/types.h>
+
+
+-#ifdef HAVE_HWSLIP
++#if HAVE_HWSLIP
+ #include <linux/if_slip.h>
+ #endif
+
+@@ -85,19 +85,16 @@ struct in6_ifreq {
+ #include "sockets.h"
+ #include "util.h"
+
+-char *Release = RELEASE, *Version = "ifconfig 1.42 (2001-04-13)";
++static char *Release = RELEASE;
+
+ int opt_a = 0; /* show all interfaces */
+-int opt_i = 0; /* show the statistics */
+ int opt_v = 0; /* debugging output flag */
+
+ int addr_family = 0; /* currently selected AF */
+
+ /* for ipv4 add/del modes */
+-static int get_nmbc_parent(char *parent, unsigned long *nm,
+- unsigned long *bc);
+-static int set_ifstate(char *parent, unsigned long ip,
+- unsigned long nm, unsigned long bc,
++static int get_nmbc_parent(char *parent, in_addr_t *nm, in_addr_t *bc);
++static int set_ifstate(char *parent, in_addr_t ip, in_addr_t nm, in_addr_t bc,
+ int flag);
+
+ static int if_print(char *ifname)
+@@ -105,7 +102,7 @@ static int if_print(char *ifname)
+ int res;
+
+ if (ife_short)
+- printf(_("Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg\n"));
++ printf(_("Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg\n"));
+
+ if (!ifname) {
+ res = for_all_interfaces(do_if_print, &opt_a);
+@@ -113,11 +110,14 @@ static int if_print(char *ifname)
+ struct interface *ife;
+
+ ife = lookup_interface(ifname);
+- res = do_if_fetch(ife);
+- if (res >= 0)
++ if (!ife) {
++ return -1;
++ }
++ res = do_if_fetch(ife);
++ if (res >= 0)
+ ife_print(ife);
+ }
+- return res;
++ return res;
+ }
+
+ /* Set a certain interface flag. */
+@@ -127,7 +127,7 @@ static int set_flag(char *ifname, short flag)
+
+ safe_strncpy(ifr.ifr_name, ifname, IFNAMSIZ);
+ if (ioctl(skfd, SIOCGIFFLAGS, &ifr) < 0) {
+- fprintf(stderr, _("%s: unknown interface: %s\n"),
++ fprintf(stderr, _("%s: ERROR while getting interface flags: %s\n"),
+ ifname, strerror(errno));
+ return (-1);
+ }
+@@ -159,7 +159,7 @@ static int clr_flag(char *ifname, short flag)
+
+ safe_strncpy(ifr.ifr_name, ifname, IFNAMSIZ);
+ if (ioctl(fd, SIOCGIFFLAGS, &ifr) < 0) {
+- fprintf(stderr, _("%s: unknown interface: %s\n"),
++ fprintf(stderr, _("%s: ERROR while getting interface flags: %s\n"),
+ ifname, strerror(errno));
+ return -1;
+ }
+@@ -172,9 +172,35 @@ static int clr_flag(char *ifname, short flag)
+ return (0);
+ }
+
++/** test is a specified flag is set */
++static int test_flag(char *ifname, short flags)
++{
++ struct ifreq ifr;
++ int fd;
++
++ if (strchr(ifname, ':')) {
++ /* This is a v4 alias interface. Downing it via a socket for
++ another AF may have bad consequences. */
++ fd = get_socket_for_af(AF_INET);
++ if (fd < 0) {
++ fprintf(stderr, _("No support for INET on this system.\n"));
++ return -1;
++ }
++ } else
++ fd = skfd;
++
++ safe_strncpy(ifr.ifr_name, ifname, IFNAMSIZ);
++ if (ioctl(fd, SIOCGIFFLAGS, &ifr) < 0) {
++ fprintf(stderr, _("%s: ERROR while testing interface flags: %s\n"),
++ ifname, strerror(errno));
++ return -1;
++ }
++ return (ifr.ifr_flags & flags);
++}
++
+ static void usage(void)
+ {
+- fprintf(stderr, _("Usage:\n ifconfig [-a] [-i] [-v] [-s] <interface> [[<AF>] <address>]\n"));
++ fprintf(stderr, _("Usage:\n ifconfig [-a] [-v] [-s] <interface> [[<AF>] <address>]\n"));
+ #if HAVE_AFINET
+ fprintf(stderr, _(" [add <address>[/<prefixlen>]]\n"));
+ fprintf(stderr, _(" [del <address>[/<prefixlen>]]\n"));
+@@ -184,7 +210,7 @@ static void usage(void)
+ #ifdef SIOCSKEEPALIVE
+ fprintf(stderr, _(" [outfill <NN>] [keepalive <NN>]\n"));
+ #endif
+- fprintf(stderr, _(" [hw <HW> <address>] [metric <NN>] [mtu <NN>]\n"));
++ fprintf(stderr, _(" [hw <HW> <address>] [mtu <NN>]\n"));
+ fprintf(stderr, _(" [[-]trailers] [[-]arp] [[-]allmulti]\n"));
+ fprintf(stderr, _(" [multicast] [[-]promisc]\n"));
+ fprintf(stderr, _(" [mem_start <NN>] [io_addr <NN>] [irq <NN>] [media <type>]\n"));
+@@ -207,38 +233,39 @@ static void usage(void)
+
+ static void version(void)
+ {
+- fprintf(stderr, "%s\n%s\n", Release, Version);
+- exit(0);
++ fprintf(stderr, "%s\n", Release);
++ exit(E_VERSION);
+ }
+
+ static int set_netmask(int skfd, struct ifreq *ifr, struct sockaddr *sa)
+ {
+ int err = 0;
+
+- memcpy((char *) &ifr->ifr_netmask, (char *) sa,
+- sizeof(struct sockaddr));
++ memcpy(&ifr->ifr_netmask, sa, sizeof(struct sockaddr));
+ if (ioctl(skfd, SIOCSIFNETMASK, ifr) < 0) {
+ fprintf(stderr, "SIOCSIFNETMASK: %s\n",
+ strerror(errno));
+ err = 1;
+ }
+- return 0;
++ return err;
+ }
+
+ int main(int argc, char **argv)
+ {
+- struct sockaddr sa;
+- struct sockaddr_in sin;
++ struct sockaddr_storage _sa, _samask;
++ struct sockaddr *sa = (struct sockaddr *)&_sa;
++ struct sockaddr *samask = (struct sockaddr *)&_samask;
++ struct sockaddr_in *sin = (struct sockaddr_in *)sa;
+ char host[128];
+ struct aftype *ap;
+ struct hwtype *hw;
+ struct ifreq ifr;
+- int goterr = 0, didnetmask = 0;
++ int goterr = 0, didnetmask = 0, neednetmask=0;
+ char **spp;
+ int fd;
+ #if HAVE_AFINET6
+ extern struct aftype inet6_aftype;
+- struct sockaddr_in6 sa6;
++ struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)sa;
+ struct in6_ifreq ifr6;
+ unsigned long prefix_len;
+ char *cp;
+@@ -248,7 +275,7 @@ int main(int argc, char **argv)
+ #endif
+
+ #if I18N
+- setlocale (LC_ALL, "");
++ setlocale(LC_ALL, "");
+ bindtextdomain("net-tools", "/usr/share/locale");
+ textdomain("net-tools");
+ #endif
+@@ -265,7 +292,7 @@ int main(int argc, char **argv)
+
+ else if (!strcmp(*argv, "-v"))
+ opt_v = 1;
+-
++
+ else if (!strcmp(*argv, "-V") || !strcmp(*argv, "-version") ||
+ !strcmp(*argv, "--version"))
+ version();
+@@ -275,7 +302,7 @@ int main(int argc, char **argv)
+ usage();
+
+ else {
+- fprintf(stderr, _("ifconfig: option `%s' not recognised.\n"),
++ fprintf(stderr, _("ifconfig: option `%s' not recognised.\n"),
+ argv[0]);
+ fprintf(stderr, _("ifconfig: `--help' gives usage information.\n"));
+ exit(1);
+@@ -309,9 +336,9 @@ int main(int argc, char **argv)
+ /* The next argument is either an address family name, or an option. */
+ if ((ap = get_aftype(*spp)) != NULL)
+ spp++; /* it was a AF name */
+- else
++ else
+ ap = get_aftype(DFLT_AF);
+-
++
+ if (ap) {
+ addr_family = ap->af;
+ skfd = ap->fd;
+@@ -356,7 +383,7 @@ int main(int argc, char **argv)
+ goterr = 1;
+ } else {
+ if (ioctl(skfd, SIOCGIFMAP, &ifr) < 0) {
+- perror("port: SIOCGIFMAP");
++ perror("port: SIOCGIFMAP");
+ goterr = 1;
+ continue;
+ }
+@@ -388,6 +415,8 @@ int main(int argc, char **argv)
+ }
+ if (!strcmp(*spp, "-promisc")) {
+ goterr |= clr_flag(ifr.ifr_name, IFF_PROMISC);
++ if (test_flag(ifr.ifr_name, IFF_PROMISC) > 0)
++ fprintf(stderr, _("Warning: Interface %s still in promisc mode... maybe other application is running?\n"), ifr.ifr_name);
+ spp++;
+ continue;
+ }
+@@ -398,6 +427,8 @@ int main(int argc, char **argv)
+ }
+ if (!strcmp(*spp, "-multicast")) {
+ goterr |= clr_flag(ifr.ifr_name, IFF_MULTICAST);
++ if (test_flag(ifr.ifr_name, IFF_MULTICAST) > 0)
++ fprintf(stderr, _("Warning: Interface %s still in MULTICAST mode.\n"), ifr.ifr_name);
+ spp++;
+ continue;
+ }
+@@ -408,6 +439,8 @@ int main(int argc, char **argv)
+ }
+ if (!strcmp(*spp, "-allmulti")) {
+ goterr |= clr_flag(ifr.ifr_name, IFF_ALLMULTI);
++ if (test_flag(ifr.ifr_name, IFF_ALLMULTI) > 0)
++ fprintf(stderr, _("Warning: Interface %s still in ALLMULTI mode.\n"), ifr.ifr_name);
+ spp++;
+ continue;
+ }
+@@ -430,21 +463,12 @@ int main(int argc, char **argv)
+ if (!strcmp(*spp, "-dynamic")) {
+ goterr |= clr_flag(ifr.ifr_name, IFF_DYNAMIC);
+ spp++;
++ if (test_flag(ifr.ifr_name, IFF_DYNAMIC) > 0)
++ fprintf(stderr, _("Warning: Interface %s still in DYNAMIC mode.\n"), ifr.ifr_name);
+ continue;
+ }
+ #endif
+
+- if (!strcmp(*spp, "metric")) {
+- if (*++spp == NULL)
+- usage();
+- ifr.ifr_metric = atoi(*spp);
+- if (ioctl(skfd, SIOCSIFMETRIC, &ifr) < 0) {
+- fprintf(stderr, "SIOCSIFMETRIC: %s\n", strerror(errno));
+- goterr = 1;
+- }
+- spp++;
+- continue;
+- }
+ if (!strcmp(*spp, "mtu")) {
+ if (*++spp == NULL)
+ usage();
+@@ -460,7 +484,7 @@ int main(int argc, char **argv)
+ if (!strcmp(*spp, "keepalive")) {
+ if (*++spp == NULL)
+ usage();
+- ifr.ifr_data = (caddr_t) atoi(*spp);
++ ifr.ifr_data = (caddr_t) (uintptr_t) atoi(*spp);
+ if (ioctl(skfd, SIOCSKEEPALIVE, &ifr) < 0) {
+ fprintf(stderr, "SIOCSKEEPALIVE: %s\n", strerror(errno));
+ goterr = 1;
+@@ -474,7 +498,7 @@ int main(int argc, char **argv)
+ if (!strcmp(*spp, "outfill")) {
+ if (*++spp == NULL)
+ usage();
+- ifr.ifr_data = (caddr_t) atoi(*spp);
++ ifr.ifr_data = (caddr_t) (uintptr_t) atoi(*spp);
+ if (ioctl(skfd, SIOCSOUTFILL, &ifr) < 0) {
+ fprintf(stderr, "SIOCSOUTFILL: %s\n", strerror(errno));
+ goterr = 1;
+@@ -486,20 +510,24 @@ int main(int argc, char **argv)
+
+ if (!strcmp(*spp, "-broadcast")) {
+ goterr |= clr_flag(ifr.ifr_name, IFF_BROADCAST);
++ if (test_flag(ifr.ifr_name, IFF_BROADCAST) > 0)
++ fprintf(stderr, _("Warning: Interface %s still in BROADCAST mode.\n"), ifr.ifr_name);
+ spp++;
+ continue;
+ }
+ if (!strcmp(*spp, "broadcast")) {
+ if (*++spp != NULL) {
+ safe_strncpy(host, *spp, (sizeof host));
+- if (ap->input(0, host, &sa) < 0) {
+- ap->herror(host);
++ if (ap->input(0, host, sa) < 0) {
++ if (ap->herror)
++ ap->herror(host);
++ else
++ fprintf(stderr, _("ifconfig: Error resolving '%s' for broadcast\n"), host);
+ goterr = 1;
+ spp++;
+ continue;
+ }
+- memcpy((char *) &ifr.ifr_broadaddr, (char *) &sa,
+- sizeof(struct sockaddr));
++ memcpy(&ifr.ifr_broadaddr, sa, sizeof(struct sockaddr));
+ if (ioctl(ap->fd, SIOCSIFBRDADDR, &ifr) < 0) {
+ fprintf(stderr, "SIOCSIFBRDADDR: %s\n",
+ strerror(errno));
+@@ -514,14 +542,16 @@ int main(int argc, char **argv)
+ if (*++spp == NULL)
+ usage();
+ safe_strncpy(host, *spp, (sizeof host));
+- if (ap->input(0, host, &sa) < 0) {
+- ap->herror(host);
++ if (ap->input(0, host, sa) < 0) {
++ if (ap->herror)
++ ap->herror(host);
++ else
++ fprintf(stderr, _("ifconfig: Error resolving '%s' for dstaddr\n"), host);
+ goterr = 1;
+ spp++;
+ continue;
+ }
+- memcpy((char *) &ifr.ifr_dstaddr, (char *) &sa,
+- sizeof(struct sockaddr));
++ memcpy(&ifr.ifr_dstaddr, sa, sizeof(struct sockaddr));
+ if (ioctl(ap->fd, SIOCSIFDSTADDR, &ifr) < 0) {
+ fprintf(stderr, "SIOCSIFDSTADDR: %s\n",
+ strerror(errno));
+@@ -534,14 +564,17 @@ int main(int argc, char **argv)
+ if (*++spp == NULL || didnetmask)
+ usage();
+ safe_strncpy(host, *spp, (sizeof host));
+- if (ap->input(0, host, &sa) < 0) {
+- ap->herror(host);
++ if (ap->input(0, host, sa) < 0) {
++ if (ap->herror)
++ ap->herror(host);
++ else
++ fprintf(stderr, _("ifconfig: Error resolving '%s' for netmask\n"), host);
+ goterr = 1;
+ spp++;
+ continue;
+ }
+ didnetmask++;
+- goterr = set_netmask(ap->fd, &ifr, &sa);
++ goterr |= set_netmask(ap->fd, &ifr, sa);
+ spp++;
+ continue;
+ }
+@@ -563,8 +596,8 @@ int main(int argc, char **argv)
+ if (*++spp == NULL)
+ usage();
+ if (ioctl(skfd, SIOCGIFMAP, &ifr) < 0) {
+- fprintf(stderr, "mem_start: SIOCGIFMAP: %s\n", strerror(errno));
+- spp++;
++ fprintf(stderr, "mem_start: SIOCGIFMAP: %s\n", strerror(errno));
++ spp++;
+ goterr = 1;
+ continue;
+ }
+@@ -580,8 +613,8 @@ int main(int argc, char **argv)
+ if (*++spp == NULL)
+ usage();
+ if (ioctl(skfd, SIOCGIFMAP, &ifr) < 0) {
+- fprintf(stderr, "io_addr: SIOCGIFMAP: %s\n", strerror(errno));
+- spp++;
++ fprintf(stderr, "io_addr: SIOCGIFMAP: %s\n", strerror(errno));
++ spp++;
+ goterr = 1;
+ continue;
+ }
+@@ -597,9 +630,9 @@ int main(int argc, char **argv)
+ if (*++spp == NULL)
+ usage();
+ if (ioctl(skfd, SIOCGIFMAP, &ifr) < 0) {
+- fprintf(stderr, "irq: SIOCGIFMAP: %s\n", strerror(errno));
++ fprintf(stderr, "irq: SIOCGIFMAP: %s\n", strerror(errno));
+ goterr = 1;
+- spp++;
++ spp++;
+ continue;
+ }
+ ifr.ifr_map.irq = atoi(*spp);
+@@ -613,20 +646,24 @@ int main(int argc, char **argv)
+ if (!strcmp(*spp, "-pointopoint")) {
+ goterr |= clr_flag(ifr.ifr_name, IFF_POINTOPOINT);
+ spp++;
++ if (test_flag(ifr.ifr_name, IFF_POINTOPOINT) > 0)
++ fprintf(stderr, _("Warning: Interface %s still in POINTOPOINT mode.\n"), ifr.ifr_name);
+ continue;
+ }
+ if (!strcmp(*spp, "pointopoint")) {
+ if (*(spp + 1) != NULL) {
+ spp++;
+ safe_strncpy(host, *spp, (sizeof host));
+- if (ap->input(0, host, &sa)) {
+- ap->herror(host);
++ if (ap->input(0, host, sa)) {
++ if (ap->herror)
++ ap->herror(host);
++ else
++ fprintf(stderr, _("ifconfig: Error resolving '%s' for pointopoint\n"), host);
+ goterr = 1;
+ spp++;
+ continue;
+ }
+- memcpy((char *) &ifr.ifr_dstaddr, (char *) &sa,
+- sizeof(struct sockaddr));
++ memcpy(&ifr.ifr_dstaddr, sa, sizeof(struct sockaddr));
+ if (ioctl(ap->fd, SIOCSIFDSTADDR, &ifr) < 0) {
+ fprintf(stderr, "SIOCSIFDSTADDR: %s\n",
+ strerror(errno));
+@@ -652,17 +689,20 @@ int main(int argc, char **argv)
+ if (*++spp == NULL)
+ usage();
+ safe_strncpy(host, *spp, (sizeof host));
+- if (hw->input(host, &sa) < 0) {
++ if (hw->input(host, sa) < 0) {
+ fprintf(stderr, _("%s: invalid %s address.\n"), host, hw->name);
+ goterr = 1;
+ spp++;
+ continue;
+ }
+- memcpy((char *) &ifr.ifr_hwaddr, (char *) &sa,
+- sizeof(struct sockaddr));
++ memcpy(&ifr.ifr_hwaddr, sa, sizeof(struct sockaddr));
+ if (ioctl(skfd, SIOCSIFHWADDR, &ifr) < 0) {
+- fprintf(stderr, "SIOCSIFHWADDR: %s\n",
+- strerror(errno));
++ if (errno == EBUSY)
++ fprintf(stderr, "SIOCSIFHWADDR: %s - you may need to down the interface\n",
++ strerror(errno));
++ else
++ fprintf(stderr, "SIOCSIFHWADDR: %s\n",
++ strerror(errno));
+ goterr = 1;
+ }
+ spp++;
+@@ -681,22 +721,23 @@ int main(int argc, char **argv)
+ usage();
+ *cp = 0;
+ } else {
+- prefix_len = 0;
++ prefix_len = 128;
+ }
+ safe_strncpy(host, *spp, (sizeof host));
+- if (inet6_aftype.input(1, host,
+- (struct sockaddr *) &sa6) < 0) {
+- inet6_aftype.herror(host);
++ if (inet6_aftype.input(1, host, sa) < 0) {
++ if (inet6_aftype.herror)
++ inet6_aftype.herror(host);
++ else
++ fprintf(stderr, _("ifconfig: Error resolving '%s' for add\n"), host);
+ goterr = 1;
+ spp++;
+ continue;
+ }
+- memcpy((char *) &ifr6.ifr6_addr, (char *) &sa6.sin6_addr,
+- sizeof(struct in6_addr));
++ memcpy(&ifr6.ifr6_addr, &sin6->sin6_addr, sizeof(struct in6_addr));
+
+ fd = get_socket_for_af(AF_INET6);
+ if (fd < 0) {
+- fprintf(stderr,
++ fprintf(stderr,
+ _("No support for INET6 on this system.\n"));
+ goterr = 1;
+ spp++;
+@@ -718,11 +759,11 @@ int main(int argc, char **argv)
+ continue;
+ }
+ #endif
+-#ifdef HAVE_AFINET
++#if HAVE_AFINET
+ { /* ipv4 address a.b.c.d */
+- unsigned long ip, nm, bc;
++ in_addr_t ip, nm, bc;
+ safe_strncpy(host, *spp, (sizeof host));
+- if (inet_aftype.input(0, host, (struct sockaddr *)&sin) < 0) {
++ if (inet_aftype.input(0, host, sa) < 0) {
+ ap->herror(host);
+ goterr = 1;
+ spp++;
+@@ -730,15 +771,15 @@ int main(int argc, char **argv)
+ }
+ fd = get_socket_for_af(AF_INET);
+ if (fd < 0) {
+- fprintf(stderr,
++ fprintf(stderr,
+ _("No support for INET on this system.\n"));
+ goterr = 1;
+ spp++;
+ continue;
+ }
+
+- memcpy(&ip, &sin.sin_addr.s_addr, sizeof(unsigned long));
+-
++ memcpy(&ip, &sin->sin_addr.s_addr, sizeof(ip));
++
+ if (get_nmbc_parent(ifr.ifr_name, &nm, &bc) < 0) {
+ fprintf(stderr, _("Interface %s not initialized\n"),
+ ifr.ifr_name);
+@@ -747,7 +788,7 @@ int main(int argc, char **argv)
+ continue;
+ }
+ set_ifstate(ifr.ifr_name, ip, nm, bc, 1);
+-
++
+ }
+ spp++;
+ continue;
+@@ -771,22 +812,21 @@ int main(int argc, char **argv)
+ usage();
+ *cp = 0;
+ } else {
+- prefix_len = 0;
++ prefix_len = 128;
+ }
+ safe_strncpy(host, *spp, (sizeof host));
+- if (inet6_aftype.input(1, host,
+- (struct sockaddr *) &sa6) < 0) {
++ if (inet6_aftype.input(1, host, sa) < 0) {
+ inet6_aftype.herror(host);
+ goterr = 1;
+ spp++;
+ continue;
+ }
+- memcpy((char *) &ifr6.ifr6_addr, (char *) &sa6.sin6_addr,
++ memcpy(&ifr6.ifr6_addr, &sin6->sin6_addr,
+ sizeof(struct in6_addr));
+-
++
+ fd = get_socket_for_af(AF_INET6);
+ if (fd < 0) {
+- fprintf(stderr,
++ fprintf(stderr,
+ _("No support for INET6 on this system.\n"));
+ goterr = 1;
+ spp++;
+@@ -800,6 +840,8 @@ int main(int argc, char **argv)
+ }
+ ifr6.ifr6_ifindex = ifr.ifr_ifindex;
+ ifr6.ifr6_prefixlen = prefix_len;
++ if (opt_v)
++ fprintf(stderr, "now deleting: ioctl(SIOCDIFADDR,{ifindex=%d,prefixlen=%ld})\n",ifr.ifr_ifindex,prefix_len);
+ if (ioctl(fd, SIOCDIFADDR, &ifr6) < 0) {
+ fprintf(stderr, "SIOCDIFADDR: %s\n",
+ strerror(errno));
+@@ -809,12 +851,12 @@ int main(int argc, char **argv)
+ continue;
+ }
+ #endif
+-#ifdef HAVE_AFINET
++#if HAVE_AFINET
+ {
+ /* ipv4 address a.b.c.d */
+- unsigned long ip, nm, bc;
++ in_addr_t ip, nm, bc;
+ safe_strncpy(host, *spp, (sizeof host));
+- if (inet_aftype.input(0, host, (struct sockaddr *)&sin) < 0) {
++ if (inet_aftype.input(0, host, sa) < 0) {
+ ap->herror(host);
+ goterr = 1;
+ spp++;
+@@ -827,9 +869,11 @@ int main(int argc, char **argv)
+ spp++;
+ continue;
+ }
+-
+- memcpy(&ip, &sin.sin_addr.s_addr, sizeof(unsigned long));
+-
++
++ /* Clear "ip" in case sizeof(unsigned long) > sizeof(sin.sin_addr.s_addr) */
++ ip = 0;
++ memcpy(&ip, &sin->sin_addr.s_addr, sizeof(ip));
++
+ if (get_nmbc_parent(ifr.ifr_name, &nm, &bc) < 0) {
+ fprintf(stderr, _("Interface %s not initialized\n"),
+ ifr.ifr_name);
+@@ -859,17 +903,16 @@ int main(int argc, char **argv)
+ usage();
+ *cp = 0;
+ } else {
+- prefix_len = 0;
++ prefix_len = 128;
+ }
+ safe_strncpy(host, *spp, (sizeof host));
+- if (inet6_aftype.input(1, host, (struct sockaddr *) &sa6) < 0) {
++ if (inet6_aftype.input(1, host, sa) < 0) {
+ inet6_aftype.herror(host);
+ goterr = 1;
+ spp++;
+ continue;
+ }
+- memcpy((char *) &ifr6.ifr6_addr, (char *) &sa6.sin6_addr,
+- sizeof(struct in6_addr));
++ memcpy(&ifr6.ifr6_addr, &sin6->sin6_addr, sizeof(struct in6_addr));
+
+ fd = get_socket_for_af(AF_INET6);
+ if (fd < 0) {
+@@ -900,10 +943,10 @@ int main(int argc, char **argv)
+ /* If the next argument is a valid hostname, assume OK. */
+ safe_strncpy(host, *spp, (sizeof host));
+
+- /* FIXME: sa is too small for INET6 addresses, inet6 should use that too,
++ /* FIXME: sa is too small for INET6 addresses, inet6 should use that too,
+ broadcast is unexpected */
+ if (ap->getmask) {
+- switch (ap->getmask(host, &sa, NULL)) {
++ switch (ap->getmask(host, samask, NULL)) {
+ case -1:
+ usage();
+ break;
+@@ -911,8 +954,8 @@ int main(int argc, char **argv)
+ if (didnetmask)
+ usage();
+
+- goterr = set_netmask(skfd, &ifr, &sa);
+- didnetmask++;
++ // remeber to set the netmask from samask later
++ neednetmask = 1;
+ break;
+ }
+ }
+@@ -920,12 +963,14 @@ int main(int argc, char **argv)
+ fprintf(stderr, _("ifconfig: Cannot set address for this protocol family.\n"));
+ exit(1);
+ }
+- if (ap->input(0, host, &sa) < 0) {
+- ap->herror(host);
+- fprintf(stderr, _("ifconfig: `--help' gives usage information.\n"));
+- exit(1);
++ if (ap->input(0, host, sa) < 0) {
++ if (ap->herror)
++ ap->herror(host);
++ else
++ fprintf(stderr,_("ifconfig: error resolving '%s' to set address for af=%s\n"), host, ap->name); fprintf(stderr,
++ _("ifconfig: `--help' gives usage information.\n")); exit(1);
+ }
+- memcpy((char *) &ifr.ifr_addr, (char *) &sa, sizeof(struct sockaddr));
++ memcpy(&ifr.ifr_addr, sa, sizeof(struct sockaddr));
+ {
+ int r = 0; /* to shut gcc up */
+ switch (ap->af) {
+@@ -965,14 +1010,14 @@ int main(int argc, char **argv)
+ * end, since it's deleted already! - Roman
+ *
+ * Should really use regex.h here, not sure though how well it'll go
+- * with the cross-platform support etc.
++ * with the cross-platform support etc.
+ */
+ {
+ char *ptr;
+ short int found_colon = 0;
+ for (ptr = ifr.ifr_name; *ptr; ptr++ )
+ if (*ptr == ':') found_colon++;
+-
++
+ if (!(found_colon && *(ptr - 1) == '-'))
+ goterr |= set_flag(ifr.ifr_name, (IFF_UP | IFF_RUNNING));
+ }
+@@ -980,6 +1025,14 @@ int main(int argc, char **argv)
+ spp++;
+ }
+
++ if (neednetmask) {
++ goterr |= set_netmask(skfd, &ifr, samask);
++ didnetmask++;
++ }
++
++ if (opt_v && goterr)
++ fprintf(stderr, _("WARNING: at least one error occured. (%d)\n"), goterr);
++
+ return (goterr);
+ }
+
+@@ -1012,7 +1065,7 @@ static int do_ifcmd(struct interface *x, struct ifcmd *ptr)
+ char *z, *e;
+ struct sockaddr_in *sin;
+ int i;
+-
++
+ if (do_if_fetch(x) < 0)
+ return 0;
+ if (strncmp(x->name, ptr->base, ptr->baselen) != 0)
+@@ -1028,13 +1081,13 @@ static int do_ifcmd(struct interface *x, struct ifcmd *ptr)
+ if (i < 0 || i > 255)
+ abort();
+ searcher[i] = 1;
+-
++
+ /* copy */
+ sin = (struct sockaddr_in *)&x->dstaddr;
+ if (sin->sin_addr.s_addr != ptr->addr) {
+ return 0;
+ }
+-
++
+ if (ptr->flag) {
+ /* turn UP */
+ if (set_flag(x->name, IFF_UP | IFF_RUNNING) == -1)
+@@ -1044,49 +1097,48 @@ static int do_ifcmd(struct interface *x, struct ifcmd *ptr)
+ if (clr_flag(x->name, IFF_UP) == -1)
+ return -1;
+ }
+-
++
+ return 1; /* all done! */
+ }
+
+
+ static int get_nmbc_parent(char *parent,
+- unsigned long *nm, unsigned long *bc)
++ in_addr_t *nm, in_addr_t *bc)
+ {
+ struct interface *i;
+ struct sockaddr_in *sin;
+-
++
+ i = lookup_interface(parent);
+ if (!i)
+ return -1;
+ if (do_if_fetch(i) < 0)
+ return 0;
+ sin = (struct sockaddr_in *)&i->netmask;
+- memcpy(nm, &sin->sin_addr.s_addr, sizeof(unsigned long));
++ memcpy(nm, &sin->sin_addr.s_addr, sizeof(*nm));
+ sin = (struct sockaddr_in *)&i->broadaddr;
+- memcpy(bc, &sin->sin_addr.s_addr, sizeof(unsigned long));
++ memcpy(bc, &sin->sin_addr.s_addr, sizeof(*bc));
+ return 0;
+ }
+
+-static int set_ifstate(char *parent, unsigned long ip,
+- unsigned long nm, unsigned long bc,
++static int set_ifstate(char *parent, in_addr_t ip, in_addr_t nm, in_addr_t bc,
+ int flag)
+ {
+ char buf[IFNAMSIZ];
+ struct ifcmd pt;
+ int i;
+-
++
+ pt.base = parent;
+ pt.baselen = strlen(parent);
+ pt.addr = ip;
+ pt.flag = flag;
+ memset(searcher, 0, sizeof(searcher));
+- i = for_all_interfaces((int (*)(struct interface *,void *))do_ifcmd,
++ i = for_all_interfaces((int (*)(struct interface *,void *))do_ifcmd,
+ &pt);
+ if (i == -1)
+ return -1;
+ if (i == 1)
+ return 0;
+-
++
+ /* add a new interface */
+ for (i = 0; i < 256; i++)
+ if (searcher[i] == 0)
+@@ -1094,7 +1146,7 @@ static int set_ifstate(char *parent, unsigned long ip,
+
+ if (i == 256)
+ return -1; /* FAILURE!!! out of ip addresses */
+-
++
+ if (snprintf(buf, IFNAMSIZ, "%s:%d", parent, i) > IFNAMSIZ)
+ return -1;
+ if (set_ip_using(buf, SIOCSIFADDR, ip) == -1)
+diff --git a/include/interface.h b/include/interface.h
+index f95555c..1b58599 100644
+--- a/include/interface.h
++++ b/include/interface.h
+@@ -28,11 +28,10 @@ struct user_net_device_stats {
+ };
+
+ struct interface {
+- struct interface *next, *prev;
++ struct interface *next, *prev;
+ char name[IFNAMSIZ]; /* interface name */
+ short type; /* if type */
+ short flags; /* various flags */
+- int metric; /* routing metric */
+ int mtu; /* MTU value */
+ int tx_queue_len; /* transmit queue length */
+ struct ifmap map; /* hardware setup */
+@@ -64,13 +63,17 @@ struct interface {
+ extern int if_fetch(struct interface *ife);
+
+ extern int for_all_interfaces(int (*)(struct interface *, void *), void *);
+-extern int free_interface_list(void);
++extern int if_cache_free(void);
+ extern struct interface *lookup_interface(char *name);
+ extern int if_readlist(void);
+
+ extern int do_if_fetch(struct interface *ife);
+ extern int do_if_print(struct interface *ife, void *cookie);
+
++extern int procnetdev_version(char *buf);
++extern int get_dev_fields(char *bp, struct interface *ife);
++extern char * get_name(char *name, char *p);
++
+ extern void ife_print(struct interface *ptr);
+
+ extern int ife_short;
+@@ -84,7 +87,7 @@ extern const char *if_port_text[][4];
+ #endif
+
+ #if !defined(ifr_qlen)
+-/* Actually it is ifru_ivalue, but that is not present in 2.0 kernel headers */
++/* Actually it is ifru_ivalue, but that is not present in 2.0 kernel headers */
+ #define ifr_qlen ifr_ifru.ifru_mtu
+ #endif
+
+diff --git a/include/mii.h b/include/mii.h
+deleted file mode 100644
+index 1ef7ccc..0000000
+--- a/include/mii.h
++++ /dev/null
+@@ -1,86 +0,0 @@
+-/*
+- * mii.h 1.4 2000/04/25 22:06:15
+- *
+- * Media Independent Interface support: register layout and ioctl's
+- *
+- * Copyright (C) 2000 David A. Hinds -- dhinds@pcmcia.sourceforge.org
+- */
+-
+-#ifndef _LINUX_MII_H
+-#define _LINUX_MII_H
+-
+-/* network interface ioctl's for MII commands */
+-#ifndef SIOCGMIIPHY
+-#define SIOCGMIIPHY (SIOCDEVPRIVATE) /* Read from current PHY */
+-#define SIOCGMIIREG (SIOCDEVPRIVATE+1) /* Read any PHY register */
+-#define SIOCSMIIREG (SIOCDEVPRIVATE+2) /* Write any PHY register */
+-#define SIOCGPARAMS (SIOCDEVPRIVATE+3) /* Read operational parameters */
+-#define SIOCSPARAMS (SIOCDEVPRIVATE+4) /* Set operational parameters */
+-#endif
+-
+-#include <linux/types.h>
+-
+-/* This data structure is used for all the MII ioctl's */
+-struct mii_data {
+- __u16 phy_id;
+- __u16 reg_num;
+- __u16 val_in;
+- __u16 val_out;
+-};
+-
+-/* Basic Mode Control Register */
+-#define MII_BMCR 0x00
+-#define MII_BMCR_RESET 0x8000
+-#define MII_BMCR_LOOPBACK 0x4000
+-#define MII_BMCR_100MBIT 0x2000
+-#define MII_BMCR_AN_ENA 0x1000
+-#define MII_BMCR_ISOLATE 0x0400
+-#define MII_BMCR_RESTART 0x0200
+-#define MII_BMCR_DUPLEX 0x0100
+-#define MII_BMCR_COLTEST 0x0080
+-
+-/* Basic Mode Status Register */
+-#define MII_BMSR 0x01
+-#define MII_BMSR_CAP_MASK 0xf800
+-#define MII_BMSR_100BASET4 0x8000
+-#define MII_BMSR_100BASETX_FD 0x4000
+-#define MII_BMSR_100BASETX_HD 0x2000
+-#define MII_BMSR_10BASET_FD 0x1000
+-#define MII_BMSR_10BASET_HD 0x0800
+-#define MII_BMSR_NO_PREAMBLE 0x0040
+-#define MII_BMSR_AN_COMPLETE 0x0020
+-#define MII_BMSR_REMOTE_FAULT 0x0010
+-#define MII_BMSR_AN_ABLE 0x0008
+-#define MII_BMSR_LINK_VALID 0x0004
+-#define MII_BMSR_JABBER 0x0002
+-#define MII_BMSR_EXT_CAP 0x0001
+-
+-#define MII_PHY_ID1 0x02
+-#define MII_PHY_ID2 0x03
+-
+-/* Auto-Negotiation Advertisement Register */
+-#define MII_ANAR 0x04
+-/* Auto-Negotiation Link Partner Ability Register */
+-#define MII_ANLPAR 0x05
+-#define MII_AN_NEXT_PAGE 0x8000
+-#define MII_AN_ACK 0x4000
+-#define MII_AN_REMOTE_FAULT 0x2000
+-#define MII_AN_ABILITY_MASK 0x07e0
+-#define MII_AN_FLOW_CONTROL 0x0400
+-#define MII_AN_100BASET4 0x0200
+-#define MII_AN_100BASETX_FD 0x0100
+-#define MII_AN_100BASETX_HD 0x0080
+-#define MII_AN_10BASET_FD 0x0040
+-#define MII_AN_10BASET_HD 0x0020
+-#define MII_AN_PROT_MASK 0x001f
+-#define MII_AN_PROT_802_3 0x0001
+-
+-/* Auto-Negotiation Expansion Register */
+-#define MII_ANER 0x06
+-#define MII_ANER_MULT_FAULT 0x0010
+-#define MII_ANER_LP_NP_ABLE 0x0008
+-#define MII_ANER_NP_ABLE 0x0004
+-#define MII_ANER_PAGE_RX 0x0002
+-#define MII_ANER_LP_AN_ABLE 0x0001
+-
+-#endif /* _LINUX_MII_H */
+diff --git a/include/util-ank.h b/include/util-ank.h
+index 04ab16c..c8fcd08 100644
+--- a/include/util-ank.h
++++ b/include/util-ank.h
+@@ -75,6 +75,6 @@ extern int do_qdisc(int argc, char **argv);
+ extern int do_class(int argc, char **argv);
+ extern int do_filter(int argc, char **argv);
+
+-extern const char *format_host(int af, void *addr, __u8 *abuf, int alen);
++extern const char *format_host(int af, void *addr, char *abuf, int alen);
+
+ #endif /* __UTILS_H__ */
+diff --git a/ipmaddr.c b/ipmaddr.c
+index 2134e81..e4ed41d 100644
+--- a/ipmaddr.c
++++ b/ipmaddr.c
+@@ -32,6 +32,7 @@
+
+ #include "config.h"
+ #include "intl.h"
++#include "util.h"
+ #include "util-ank.h"
+ #include "net-support.h"
+ #include "version.h"
+@@ -44,13 +45,11 @@ int filter_family;
+ #define NEWADDR 1
+ #define DELADDR 2
+
+-char *Release = RELEASE,
+- *Version = "ipmaddr 1.1",
+- *Signature = "Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>";
++static char *Release = RELEASE, *Signature = "Alexey Kuznetsov";
+
+ static void version(void)
+ {
+- printf("%s\n%s\n%s\n", Release, Version, Signature);
++ printf("%s\n%s\n", Release, Signature);
+ exit(E_VERSION);
+ }
+
+@@ -61,7 +60,7 @@ static void usage(void)
+ fprintf(stderr, _("Usage: ipmaddr [ add | del ] MULTIADDR dev STRING\n"));
+ fprintf(stderr, _(" ipmaddr show [ dev STRING ] [ ipv4 | ipv6 | link | all ]\n"));
+ fprintf(stderr, _(" ipmaddr -V | -version\n"));
+- exit(-1);
++ exit(E_USAGE);
+ }
+
+ static void print_lla(FILE *fp, int len, unsigned char *addr)
+@@ -75,7 +74,7 @@ static void print_lla(FILE *fp, int len, unsigned char *addr)
+ }
+ }
+
+-static int parse_lla(char *str, unsigned char *addr)
++static int parse_lla(char *str, char *addr)
+ {
+ int len=0;
+
+@@ -159,8 +158,7 @@ void read_dev_mcast(struct ma_info **result_p)
+
+ len = parse_hex(hexa, (unsigned char*)&m.addr.data);
+ if (len >= 0) {
+- struct ma_info *ma = malloc(sizeof(m));
+-
++ struct ma_info *ma = xmalloc(sizeof(m));
+ memcpy(ma, &m, sizeof(m));
+ ma->addr.bytelen = len;
+ ma->addr.bitlen = len<<3;
+@@ -174,22 +172,21 @@ void read_dev_mcast(struct ma_info **result_p)
+
+ void read_igmp(struct ma_info **result_p)
+ {
+- struct ma_info m;
++ struct ma_info m, *ma = NULL;
+ char buf[256];
+ FILE *fp = fopen(_PATH_PROCNET_IGMP, "r");
+
+ if (!fp)
+ return;
+ memset(&m, 0, sizeof(m));
+- fgets(buf, sizeof(buf), fp);
++ if (fgets(buf, sizeof(buf), fp))
++ /* eat line */;
+
+ m.addr.family = AF_INET;
+ m.addr.bitlen = 32;
+ m.addr.bytelen = 4;
+
+ while (fgets(buf, sizeof(buf), fp)) {
+- struct ma_info *ma = malloc(sizeof(m));
+-
+ if (buf[0] != '\t') {
+ sscanf(buf, "%d%s", &m.index, m.name);
+ continue;
+@@ -200,7 +197,7 @@ void read_igmp(struct ma_info **result_p)
+
+ sscanf(buf, "%08x%d", (__u32*)&m.addr.data, &m.users);
+
+- ma = malloc(sizeof(m));
++ ma = xmalloc(sizeof(m));
+ memcpy(ma, &m, sizeof(m));
+ maddr_ins(result_p, ma);
+ }
+@@ -231,8 +228,7 @@ void read_igmp6(struct ma_info **result_p)
+
+ len = parse_hex(hexa, (unsigned char*)&m.addr.data);
+ if (len >= 0) {
+- struct ma_info *ma = malloc(sizeof(m));
+-
++ struct ma_info *ma = xmalloc(sizeof(m));
+ memcpy(ma, &m, sizeof(m));
+
+ ma->addr.bytelen = len;
+@@ -291,13 +287,15 @@ static void print_mlist(FILE *fp, struct ma_info *list)
+ static int multiaddr_list(int argc, char **argv)
+ {
+ struct ma_info *list = NULL;
++ size_t l;
+
+ while (argc > 0) {
+ if (strcmp(*argv, "dev") == 0) {
+ NEXT_ARG();
+- if (filter_dev[0])
++ l = strlen(*argv);
++ if (l <= 0 || l >= sizeof(filter_dev))
+ usage();
+- strcpy(filter_dev, *argv);
++ strncpy(filter_dev, *argv, sizeof (filter_dev));
+ } else if (strcmp(*argv, "all") == 0) {
+ filter_family = AF_UNSPEC;
+ } else if (strcmp(*argv, "ipv4") == 0) {
+@@ -307,9 +305,10 @@ static int multiaddr_list(int argc, char **argv)
+ } else if (strcmp(*argv, "link") == 0) {
+ filter_family = AF_PACKET;
+ } else {
+- if (filter_dev[0])
++ l = strlen(*argv);
++ if (l <= 0 || l >= sizeof(filter_dev))
+ usage();
+- strcpy(filter_dev, *argv);
++ strncpy(filter_dev, *argv, sizeof (filter_dev));
+ }
+ argv++; argc--;
+ }
+@@ -401,7 +400,7 @@ int main(int argc, char **argv)
+ basename = argv[0];
+ else
+ basename++;
+-
++
+ while (argc > 1) {
+ if (argv[1][0] != '-')
+ break;
+diff --git a/iptunnel.c b/iptunnel.c
+index 4943d83..2215d68 100644
+--- a/iptunnel.c
++++ b/iptunnel.c
+@@ -68,13 +68,11 @@
+
+ #include "util-ank.h"
+
+-char *Release = RELEASE,
+- *Version = "iptunnel 1.01",
+- *Signature = "Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>";
++static char *Release = RELEASE, *Signature = "Alexey Kuznetsov";
+
+ static void version(void)
+ {
+- printf("%s\n%s\n%s\n", Release, Version, Signature);
++ printf("%s\n%s\n", Release, Signature);
+ exit(E_VERSION);
+ }
+
+@@ -92,7 +90,7 @@ static void usage(void)
+ fprintf(stderr, _(" TOS := { NUMBER | inherit }\n"));
+ fprintf(stderr, _(" TTL := { 1..255 | inherit }\n"));
+ fprintf(stderr, _(" KEY := { DOTTED_QUAD | NUMBER }\n"));
+- exit(-1);
++ exit(E_USAGE);
+ }
+
+ static int do_ioctl_get_ifindex(char *dev)
+@@ -101,11 +99,12 @@ static int do_ioctl_get_ifindex(char *dev)
+ int fd;
+ int err;
+
+- strcpy(ifr.ifr_name, dev);
++ safe_strncpy(ifr.ifr_name, dev, IFNAMSIZ);
+ fd = socket(AF_INET, SOCK_DGRAM, 0);
+ err = ioctl(fd, SIOCGIFINDEX, &ifr);
+ if (err) {
+ perror("ioctl");
++ close(fd);
+ return 0;
+ }
+ close(fd);
+@@ -118,11 +117,12 @@ static int do_ioctl_get_iftype(char *dev)
+ int fd;
+ int err;
+
+- strcpy(ifr.ifr_name, dev);
++ safe_strncpy(ifr.ifr_name, dev, IFNAMSIZ);
+ fd = socket(AF_INET, SOCK_DGRAM, 0);
+ err = ioctl(fd, SIOCGIFHWADDR, &ifr);
+ if (err) {
+ perror("ioctl");
++ close(fd);
+ return -1;
+ }
+ close(fd);
+@@ -141,6 +141,7 @@ static char * do_ioctl_get_ifname(int idx)
+ err = ioctl(fd, SIOCGIFNAME, &ifr);
+ if (err) {
+ perror("ioctl");
++ close(fd);
+ return NULL;
+ }
+ close(fd);
+@@ -155,7 +156,7 @@ static int do_get_ioctl(char *basedev, struct ip_tunnel_parm *p)
+ int fd;
+ int err;
+
+- strcpy(ifr.ifr_name, basedev);
++ safe_strncpy(ifr.ifr_name, basedev, IFNAMSIZ);
+ ifr.ifr_ifru.ifru_data = (void*)p;
+ fd = socket(AF_INET, SOCK_DGRAM, 0);
+ err = ioctl(fd, SIOCGETTUNNEL, &ifr);
+@@ -171,7 +172,7 @@ static int do_add_ioctl(int cmd, char *basedev, struct ip_tunnel_parm *p)
+ int fd;
+ int err;
+
+- strcpy(ifr.ifr_name, basedev);
++ safe_strncpy(ifr.ifr_name, basedev, IFNAMSIZ);
+ ifr.ifr_ifru.ifru_data = (void*)p;
+ fd = socket(AF_INET, SOCK_DGRAM, 0);
+ err = ioctl(fd, cmd, &ifr);
+@@ -187,7 +188,7 @@ static int do_del_ioctl(char *basedev, struct ip_tunnel_parm *p)
+ int fd;
+ int err;
+
+- strcpy(ifr.ifr_name, basedev);
++ safe_strncpy(ifr.ifr_name, basedev, IFNAMSIZ);
+ ifr.ifr_ifru.ifru_data = (void*)p;
+ fd = socket(AF_INET, SOCK_DGRAM, 0);
+ err = ioctl(fd, SIOCDELTUNNEL, &ifr);
+@@ -375,7 +376,7 @@ static int do_add(int cmd, int argc, char **argv)
+ return do_add_ioctl(cmd, "gre0", &p);
+ case IPPROTO_IPV6:
+ return do_add_ioctl(cmd, "sit0", &p);
+- default:
++ default:
+ fprintf(stderr, _("cannot determine tunnel mode (ipip, gre or sit)\n"));
+ return -1;
+ }
+@@ -390,13 +391,13 @@ int do_del(int argc, char **argv)
+ return -1;
+
+ switch (p.iph.protocol) {
+- case IPPROTO_IPIP:
++ case IPPROTO_IPIP:
+ return do_del_ioctl(p.name[0] ? p.name : "tunl0", &p);
+- case IPPROTO_GRE:
++ case IPPROTO_GRE:
+ return do_del_ioctl(p.name[0] ? p.name : "gre0", &p);
+- case IPPROTO_IPV6:
++ case IPPROTO_IPV6:
+ return do_del_ioctl(p.name[0] ? p.name : "sit0", &p);
+- default:
++ default:
+ return do_del_ioctl(p.name, &p);
+ }
+ return -1;
+@@ -476,8 +477,10 @@ static int do_tunnels_list(struct ip_tunnel_parm *p)
+ return -1;
+ }
+
+- fgets(buf, sizeof(buf), fp);
+- fgets(buf, sizeof(buf), fp);
++ if (fgets(buf, sizeof(buf), fp))
++ /* eat line */;
++ if (fgets(buf, sizeof(buf), fp))
++ /* eat line */;
+
+ while (fgets(buf, sizeof(buf), fp) != NULL) {
+ char *ptr;
+@@ -485,6 +488,7 @@ static int do_tunnels_list(struct ip_tunnel_parm *p)
+ if ((ptr = strchr(buf, ':')) == NULL ||
+ (*ptr++ = 0, sscanf(buf, "%s", name) != 1)) {
+ fprintf(stderr, _("Wrong format of /proc/net/dev. Sorry.\n"));
++ fclose(fp);
+ return -1;
+ }
+ if (sscanf(ptr, "%ld%ld%ld%ld%ld%ld%ld%*d%ld%ld%ld%ld%ld%ld%ld",
+@@ -521,6 +525,7 @@ static int do_tunnels_list(struct ip_tunnel_parm *p)
+ tx_packets, tx_bytes, tx_errs, tx_colls, tx_carrier, tx_drops);
+ }
+ }
++ fclose(fp);
+ return 0;
+ }
+
+@@ -533,7 +538,7 @@ static int do_show(int argc, char **argv)
+ return -1;
+
+ switch (p.iph.protocol) {
+- case IPPROTO_IPIP:
++ case IPPROTO_IPIP:
+ err = do_get_ioctl(p.name[0] ? p.name : "tunl0", &p);
+ break;
+ case IPPROTO_GRE:
+@@ -592,7 +597,7 @@ int main(int argc, char **argv)
+ basename = argv[0];
+ else
+ basename++;
+-
++
+ while (argc > 1) {
+ if (argv[1][0] != '-')
+ break;
+diff --git a/lib/Makefile b/lib/Makefile
+index d714b2e..431f258 100644
+--- a/lib/Makefile
++++ b/lib/Makefile
+@@ -16,7 +16,7 @@
+ #
+
+
+-HWOBJS = hw.o loopback.o slip.o ether.o ax25.o ppp.o arcnet.o tr.o tunnel.o frame.o sit.o rose.o ash.o fddi.o hippi.o hdlclapb.o strip.o irda.o ec_hw.o x25.o
++HWOBJS = hw.o loopback.o slip.o ether.o ax25.o ppp.o arcnet.o tr.o tunnel.o frame.o sit.o rose.o ash.o fddi.o hippi.o hdlclapb.o strip.o irda.o ec_hw.o x25.o eui64.o ib.o
+ AFOBJS = unix.o inet.o inet6.o ax25.o ipx.o ddp.o ipx.o netrom.o af.o rose.o econet.o x25.o
+ AFGROBJS = inet_gr.o inet6_gr.o ipx_gr.o ddp_gr.o netrom_gr.o ax25_gr.o rose_gr.o getroute.o x25_gr.o
+ AFSROBJS = inet_sr.o inet6_sr.o netrom_sr.o ipx_sr.o setroute.o x25_sr.o
+@@ -36,7 +36,7 @@ OBJS = $(sort $(VARIA) $(AFOBJS) $(HWOBJS) \
+
+ # This can be overwritten by the TOPLEVEL Makefile
+ TOPDIR=..
+-CFLAGS += -I$(TOPDIR) -idirafter $(TOPDIR)/include # -fPIC
++CFLAGS += -I$(TOPDIR) -I$(TOPDIR)/include # -fPIC
+ SONAME=libnet-tools.so.0
+
+ .SUFFIXES: .a .so
+diff --git a/lib/af.c b/lib/af.c
+index 4f002c4..36bf03c 100644
+--- a/lib/af.c
++++ b/lib/af.c
+@@ -2,7 +2,7 @@
+ * lib/af.c This file contains the top-level part of the protocol
+ * support functions module for the NET-2 base distribution.
+ *
+- * Version: $Id: af.c,v 1.13 2000/05/20 13:38:10 pb Exp $
++ * Version: $Id: af.c,v 1.14 2007/12/01 17:49:35 ecki Exp $
+ *
+ * Author: Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org>
+ * Copyright 1993 MicroWalt Corporation
+@@ -35,8 +35,10 @@ int flag_netrom;
+ int flag_inet;
+ int flag_inet6;
+ int flag_econet;
++int flag_rose;
+ int flag_x25 = 0;
+ int flag_ash;
++int flag_bluetooth;
+
+
+ struct aftrans_t {
+@@ -58,6 +60,9 @@ struct aftrans_t {
+ "ipx", "ipx", &flag_ipx
+ },
+ {
++ "rose", "rose", &flag_rose
++ },
++ {
+ "appletalk", "ddp", &flag_ddp
+ },
+ {
+@@ -88,6 +93,9 @@ struct aftrans_t {
+ "ash", "ash", &flag_ash
+ },
+ {
++ "bluetooth", "bluetooth", &flag_bluetooth
++ },
++ {
+ 0, 0, 0
+ }
+ };
+@@ -193,7 +201,7 @@ void aftrans_def(char *tool, char *argv0, char *dflt)
+ char *tmp;
+ char *buf;
+
+- strcpy(afname, dflt);
++ safe_strncpy(afname, dflt, sizeof(afname));
+
+ if (!(tmp = strrchr(argv0, '/')))
+ tmp = argv0; /* no slash?! */
+@@ -219,7 +227,7 @@ void aftrans_def(char *tool, char *argv0, char *dflt)
+
+ afname[0] = '\0';
+ if (aftrans_opt(buf))
+- strcpy(afname, buf);
++ safe_strncpy(afname, buf, sizeof(afname));
+
+ free(buf);
+ }
+@@ -296,7 +304,6 @@ int aftrans_opt(const char *arg)
+ if (tmp2)
+ *(tmp2++) = '\0';
+
+- paft = aftrans;
+ for (paft = aftrans; paft->alias; paft++) {
+ if (strcmp(tmp1, paft->alias))
+ continue;
+@@ -335,7 +342,7 @@ void print_aflist(int type) {
+ if ((type == 1 && ((*afp)->rprint == NULL)) || ((*afp)->af == 0)) {
+ afp++; continue;
+ }
+- if ((count % 3) == 0) fprintf(stderr,count?"\n ":" ");
++ if ((count % 3) == 0) fprintf(stderr,count?"\n ":" ");
+ txt = (*afp)->name; if (!txt) txt = "..";
+ fprintf(stderr,"%s (%s) ",txt,(*afp)->title);
+ count++;
+diff --git a/lib/arcnet.c b/lib/arcnet.c
+index eb0f46e..9bc3267 100644
+--- a/lib/arcnet.c
++++ b/lib/arcnet.c
+@@ -35,7 +35,7 @@ extern struct hwtype arcnet_hwtype;
+
+
+ /* Display an ARCnet address in readable format. */
+-static char *pr_arcnet(unsigned char *ptr)
++static const char *pr_arcnet(const char *ptr)
+ {
+ static char buff[64];
+
+@@ -43,11 +43,16 @@ static char *pr_arcnet(unsigned char *ptr)
+ return (buff);
+ }
+
++#ifdef DEBUG
++#define _DEBUG 1
++#else
++#define _DEBUG 0
++#endif
+
+ /* Input an ARCnet address and convert to binary. */
+ static int in_arcnet(char *bufp, struct sockaddr *sap)
+ {
+- unsigned char *ptr;
++ char *ptr;
+ char c, *orig;
+ int i, val;
+
+@@ -66,9 +71,8 @@ static int in_arcnet(char *bufp, struct sockaddr *sap)
+ else if (c >= 'A' && c <= 'F')
+ val = c - 'A' + 10;
+ else {
+-#ifdef DEBUG
+- fprintf(stderr, _("in_arcnet(%s): invalid arcnet address!\n"), orig);
+-#endif
++ if (_DEBUG)
++ fprintf(stderr, _("in_arcnet(%s): invalid arcnet address!\n"), orig);
+ errno = EINVAL;
+ return (-1);
+ }
+@@ -81,9 +85,8 @@ static int in_arcnet(char *bufp, struct sockaddr *sap)
+ else if (c >= 'A' && c <= 'F')
+ val |= c - 'A' + 10;
+ else {
+-#ifdef DEBUG
+- fprintf(stderr, _("in_arcnet(%s): invalid arcnet address!\n"), orig);
+-#endif
++ if (_DEBUG)
++ fprintf(stderr, _("in_arcnet(%s): invalid arcnet address!\n"), orig);
+ errno = EINVAL;
+ return (-1);
+ }
+@@ -92,28 +95,21 @@ static int in_arcnet(char *bufp, struct sockaddr *sap)
+
+ /* We might get a semicolon here - not required. */
+ if (*bufp == ':') {
+- if (i == ETH_ALEN) {
+-#ifdef DEBUG
++ if (_DEBUG && i == ETH_ALEN)
+ fprintf(stderr, _("in_arcnet(%s): trailing : ignored!\n"),
+- orig)
+-#endif
+- ; /* nothing */
+- }
++ orig);
+ bufp++;
+ }
+ }
+
+ /* That's it. Any trailing junk? */
+- if ((i == ETH_ALEN) && (*bufp != '\0')) {
+-#ifdef DEBUG
++ if (_DEBUG && (i == ETH_ALEN) && (*bufp != '\0')) {
+ fprintf(stderr, _("in_arcnet(%s): trailing junk!\n"), orig);
+ errno = EINVAL;
+ return (-1);
+-#endif
+ }
+-#ifdef DEBUG
+- fprintf(stderr, "in_arcnet(%s): %s\n", orig, pr_arcnet(sap->sa_data));
+-#endif
++ if (_DEBUG)
++ fprintf(stderr, "in_arcnet(%s): %s\n", orig, pr_arcnet(sap->sa_data));
+
+ return (0);
+ }
+diff --git a/lib/ash.c b/lib/ash.c
+index c64667c..6cfc154 100644
+--- a/lib/ash.c
++++ b/lib/ash.c
+@@ -31,8 +31,8 @@ static unsigned char hamming[16] =
+ };
+
+ /* Display an Ash address in readable format. */
+-static char *
+-pr_ash(unsigned char *ptr)
++static const char *
++pr_ash(const char *ptr)
+ {
+ static char buff[128];
+ char *p = buff;
+@@ -57,10 +57,10 @@ pr_ash(unsigned char *ptr)
+
+ struct hwtype ash_hwtype;
+
+-static int
++static int
+ in_ash(char *bufp, struct sockaddr *sap)
+ {
+- unsigned char *ptr;
++ char *ptr;
+ unsigned int i = 0;
+
+ sap->sa_family = ash_hwtype.type;
+@@ -102,7 +102,7 @@ struct hwtype ash_hwtype =
+ #if HAVE_AFASH
+
+ /* Display an Ash socket address. */
+-static char *
++static const char *
+ pr_sash(struct sockaddr *sap, int numeric)
+ {
+ static char buf[64];
+diff --git a/lib/ax25.c b/lib/ax25.c
+index 11521d2..d57abe7 100644
+--- a/lib/ax25.c
++++ b/lib/ax25.c
+@@ -47,7 +47,7 @@ static char AX25_errmsg[128];
+
+ extern struct aftype ax25_aftype;
+
+-static char *AX25_print(unsigned char *ptr)
++static const char *AX25_print(const char *ptr)
+ {
+ static char buff[8];
+ int i;
+@@ -66,7 +66,7 @@ static char *AX25_print(unsigned char *ptr)
+
+
+ /* Display an AX.25 socket address. */
+-static char *
++static const char *
+ AX25_sprint(struct sockaddr *sap, int numeric)
+ {
+ static char buf[64];
+@@ -76,10 +76,15 @@ static char *
+ return (AX25_print(((struct sockaddr_ax25 *) sap)->sax25_call.ax25_call));
+ }
+
++#ifdef DEBUG
++#define _DEBUG 1
++#else
++#define _DEBUG 0
++#endif
+
+ static int AX25_input(int type, char *bufp, struct sockaddr *sap)
+ {
+- unsigned char *ptr;
++ char *ptr;
+ char *orig, c;
+ int i;
+
+@@ -95,9 +100,8 @@ static int AX25_input(int type, char *bufp, struct sockaddr *sap)
+ c = toupper(c);
+ if (!(isupper(c) || isdigit(c))) {
+ safe_strncpy(AX25_errmsg, _("Invalid callsign"), sizeof(AX25_errmsg));
+-#ifdef DEBUG
+- fprintf(stderr, "ax25_input(%s): %s !\n", AX25_errmsg, orig);
+-#endif
++ if (_DEBUG)
++ fprintf(stderr, "ax25_input(%s): %s !\n", AX25_errmsg, orig);
+ errno = EINVAL;
+ return (-1);
+ }
+@@ -107,10 +111,9 @@ static int AX25_input(int type, char *bufp, struct sockaddr *sap)
+
+ /* Callsign too long? */
+ if ((i == 6) && (*bufp != '-') && (*bufp != '\0')) {
+- strcpy(AX25_errmsg, _("Callsign too long"));
+-#ifdef DEBUG
+- fprintf(stderr, "ax25_input(%s): %s !\n", AX25_errmsg, orig);
+-#endif
++ safe_strncpy(AX25_errmsg, _("Callsign too long"), sizeof(AX25_errmsg));
++ if (_DEBUG)
++ fprintf(stderr, "ax25_input(%s): %s !\n", AX25_errmsg, orig);
+ errno = E2BIG;
+ return (-1);
+ }
+@@ -128,12 +131,12 @@ static int AX25_input(int type, char *bufp, struct sockaddr *sap)
+ }
+
+ /* All done. */
+-#ifdef DEBUG
+- fprintf(stderr, "ax25_input(%s): ", orig);
+- for (i = 0; i < sizeof(ax25_address); i++)
+- fprintf(stderr, "%02X ", sap->sa_data[i] & 0377);
+- fprintf(stderr, "\n");
+-#endif
++ if (_DEBUG) {
++ fprintf(stderr, "ax25_input(%s): ", orig);
++ for (i = 0; i < sizeof(ax25_address); i++)
++ fprintf(stderr, "%02X ", sap->sa_data[i] & 0377);
++ fprintf(stderr, "\n");
++ }
+
+ return (0);
+ }
+diff --git a/lib/ax25_gr.c b/lib/ax25_gr.c
+index 4dce92d..46a67ee 100644
+--- a/lib/ax25_gr.c
++++ b/lib/ax25_gr.c
+@@ -49,7 +49,8 @@ int AX25_rprint(int options)
+ }
+ printf(_("Kernel AX.25 routing table\n")); /* xxx */
+ printf(_("Destination Iface Use\n")); /* xxx */
+- fgets(buffer, 256, f);
++ if (fgets(buffer, 256, f))
++ /* eat line */;
+ while (fgets(buffer, 256, f)) {
+ buffer[9] = 0;
+ buffer[14] = 0;
+diff --git a/lib/ddp.c b/lib/ddp.c
+index 9b5e829..0a08fd2 100644
+--- a/lib/ddp.c
++++ b/lib/ddp.c
+@@ -32,7 +32,7 @@
+ #include "util.h"
+
+ /* Display a ddp domain address. */
+-static char *ddp_print(unsigned char *ptr)
++static const char *ddp_print(const char *ptr)
+ {
+ static char buff[64];
+ struct sockaddr_at *sat = (struct sockaddr_at *) (ptr - 2);
+@@ -42,7 +42,7 @@ static char *ddp_print(unsigned char *ptr)
+
+
+ /* Display a ddp domain address. */
+-static char *ddp_sprint(struct sockaddr *sap, int numeric)
++static const char *ddp_sprint(struct sockaddr *sap, int numeric)
+ {
+ static char buf[64];
+
+diff --git a/lib/ddp_gr.c b/lib/ddp_gr.c
+index 94169f0..d05c431 100644
+--- a/lib/ddp_gr.c
++++ b/lib/ddp_gr.c
+@@ -1,3 +1,20 @@
++/*
++ * lib/ddp_gr.c Prinbting of DDP (AppleTalk) routing table
++ * used by the NET-LIB.
++ *
++ * NET-LIB
++ *
++ * Version: $Id: ddp_gr.c,v 1.4 2002/06/02 05:25:15 ecki Exp $
++ *
++ * Author: Ajax <ajax@firest0rm.org>
++ *
++ * Modification:
++ * 2002-06-02 integrated into main source by Bernd Eckenfels
++ *
++ */
++
++/* TODO: name lookups (/etc/atalk.names? NBP?) */
++
+ #include "config.h"
+
+ #if HAVE_AFATALK
+@@ -16,9 +33,62 @@
+ #include "pathnames.h"
+ #include "intl.h"
+
++/* stolen from inet_gr.c */
++#define flags_decode(i,o) do { \
++ o[0] = '\0'; \
++ if (i & RTF_UP) strcat(o, "U"); \
++ if (i & RTF_GATEWAY) strcat(o, "G"); \
++ if (i & RTF_REJECT) strcat(o, "!"); \
++ if (i & RTF_HOST) strcat(o, "H"); \
++ if (i & RTF_REINSTATE) strcat(o, "R"); \
++ if (i & RTF_DYNAMIC) strcat(o, "D"); \
++ if (i & RTF_MODIFIED) strcat(o, "M"); \
++ if (i & RTF_DEFAULT) strcat(o, "d"); \
++ if (i & RTF_ALLONLINK) strcat(o, "a"); \
++ if (i & RTF_ADDRCONF) strcat(o, "c"); \
++ if (i & RTF_NONEXTHOP) strcat(o, "o"); \
++ if (i & RTF_EXPIRES) strcat(o, "e"); \
++ if (i & RTF_CACHE) strcat(o, "c"); \
++ if (i & RTF_FLOW) strcat(o, "f"); \
++ if (i & RTF_POLICY) strcat(o, "p"); \
++ if (i & RTF_LOCAL) strcat(o, "l"); \
++ if (i & RTF_MTU) strcat(o, "u"); \
++ if (i & RTF_WINDOW) strcat(o, "w"); \
++ if (i & RTF_IRTT) strcat(o, "i"); \
++ if (i & RTF_NOTCACHED) strcat(o, "n"); \
++ } while (0)
++
+ int DDP_rprint(int options)
+ {
+- fprintf(stderr, _("Routing table for `ddp' not yet supported.\n"));
+- return (1);
++ FILE *fp;
++ char *dest, *gw, *dev, *flags;
++ char oflags[32];
++ char *hdr = "Destination Gateway Device Flags";
++
++ fp = fopen(_PATH_PROCNET_ATALK_ROUTE, "r");
++
++ if (!fp) {
++ perror("Error opening " _PATH_PROCNET_ATALK_ROUTE);
++ fprintf(stderr, "DDP (AppleTalk) not configured on this system.\n");
++ return 1;
++ }
++
++ if (fscanf(fp, "%ms %ms %ms %ms\n", &dest, &gw, &flags, &dev))
++ /* eat line */;
++ free(dest); free(gw); free(flags); free(dev);
++
++ printf("%s\n", hdr);
++
++ while (fscanf(fp, "%ms %ms %ms %ms\n", &dest, &gw, &flags, &dev) == 4) {
++ int iflags = atoi(flags);
++ flags_decode(iflags, oflags);
++ printf("%-16s%-16s%-16s%-s\n", dest, gw, dev, oflags);
++ free(dest); free(gw); free(flags); free(dev);
++ }
++
++ fclose(fp);
++
++ return 0;
++
+ }
+ #endif
+diff --git a/lib/ec_hw.c b/lib/ec_hw.c
+index 825e501..088d125 100644
+--- a/lib/ec_hw.c
++++ b/lib/ec_hw.c
+@@ -2,7 +2,7 @@
+ * lib/ec_hw.c This file contains an implementation of the Econet
+ * hardware support functions.
+ *
+- * Version: $Id: ec_hw.c,v 1.2 1999/09/27 11:00:46 philip Exp $
++ * Version: $Id: ec_hw.c,v 1.3 2009/09/06 22:39:20 ecki Exp $
+ *
+ * Author: Philip Blundell <philb@gnu.org>
+ *
+@@ -16,6 +16,7 @@
+
+ #if HAVE_HWEC
+
++#include <stdlib.h>
+ #include <net/if_arp.h>
+ #include "net-support.h"
+
+diff --git a/lib/econet.c b/lib/econet.c
+index 1229a28..6cf8a9a 100644
+--- a/lib/econet.c
++++ b/lib/econet.c
+@@ -32,8 +32,8 @@
+
+
+ /* Display an Econet address */
+-static char *
+-ec_print(unsigned char *ptr)
++static const char *
++ec_print(const char *ptr)
+ {
+ static char buff[64];
+ struct ec_addr *ec = (struct ec_addr *) ptr;
+@@ -43,7 +43,7 @@ ec_print(unsigned char *ptr)
+
+
+ /* Display an Econet socket address */
+-static char *
++static const char *
+ ec_sprint(struct sockaddr *sap, int numeric)
+ {
+ struct sockaddr_ec *sec = (struct sockaddr_ec *) sap;
+@@ -51,10 +51,10 @@ ec_sprint(struct sockaddr *sap, int numeric)
+ if (sap->sa_family != AF_ECONET)
+ return _("[NONE SET]");
+
+- return ec_print((unsigned char *) &sec->addr);
++ return ec_print((const char *) &sec->addr);
+ }
+
+-static int
++static int
+ ec_input(int type, char *bufp, struct sockaddr *sap)
+ {
+ struct sockaddr_ec *sec = (struct sockaddr_ec *) sap;
+diff --git a/lib/ether.c b/lib/ether.c
+index a71aed7..dee9c73 100644
+--- a/lib/ether.c
++++ b/lib/ether.c
+@@ -2,7 +2,7 @@
+ * lib/ether.c This file contains an implementation of the "Ethernet"
+ * support functions.
+ *
+- * Version: $Id: ether.c,v 1.7 1999/09/27 11:00:47 philip Exp $
++ * Version: $Id: ether.c,v 1.8 2002/07/30 05:17:29 ecki Exp $
+ *
+ * Author: Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org>
+ * Copyright 1993 MicroWalt Corporation
+@@ -35,22 +35,27 @@ extern struct hwtype ether_hwtype;
+
+
+ /* Display an Ethernet address in readable format. */
+-static char *pr_ether(unsigned char *ptr)
++static const char *pr_ether(const char *ptr)
+ {
+ static char buff[64];
+
+- snprintf(buff, sizeof(buff), "%02X:%02X:%02X:%02X:%02X:%02X",
++ snprintf(buff, sizeof(buff), "%02x:%02x:%02x:%02x:%02x:%02x",
+ (ptr[0] & 0377), (ptr[1] & 0377), (ptr[2] & 0377),
+ (ptr[3] & 0377), (ptr[4] & 0377), (ptr[5] & 0377)
+ );
+ return (buff);
+ }
+
++#ifdef DEBUG
++#define _DEBUG 1
++#else
++#define _DEBUG 0
++#endif
+
+ /* Input an Ethernet address and convert to binary. */
+ static int in_ether(char *bufp, struct sockaddr *sap)
+ {
+- unsigned char *ptr;
++ char *ptr;
+ char c, *orig;
+ int i;
+ unsigned val;
+@@ -70,9 +75,8 @@ static int in_ether(char *bufp, struct sockaddr *sap)
+ else if (c >= 'A' && c <= 'F')
+ val = c - 'A' + 10;
+ else {
+-#ifdef DEBUG
+- fprintf(stderr, _("in_ether(%s): invalid ether address!\n"), orig);
+-#endif
++ if (_DEBUG)
++ fprintf(stderr, _("in_ether(%s): invalid ether address!\n"), orig);
+ errno = EINVAL;
+ return (-1);
+ }
+@@ -87,9 +91,8 @@ static int in_ether(char *bufp, struct sockaddr *sap)
+ else if (c == ':' || c == 0)
+ val >>= 4;
+ else {
+-#ifdef DEBUG
+- fprintf(stderr, _("in_ether(%s): invalid ether address!\n"), orig);
+-#endif
++ if (_DEBUG)
++ fprintf(stderr, _("in_ether(%s): invalid ether address!\n"), orig);
+ errno = EINVAL;
+ return (-1);
+ }
+@@ -100,28 +103,21 @@ static int in_ether(char *bufp, struct sockaddr *sap)
+
+ /* We might get a semicolon here - not required. */
+ if (*bufp == ':') {
+- if (i == ETH_ALEN) {
+-#ifdef DEBUG
++ if (_DEBUG && i == ETH_ALEN)
+ fprintf(stderr, _("in_ether(%s): trailing : ignored!\n"),
+- orig)
+-#endif
+- ; /* nothing */
+- }
++ orig);
+ bufp++;
+ }
+ }
+
+ /* That's it. Any trailing junk? */
+- if ((i == ETH_ALEN) && (*bufp != '\0')) {
+-#ifdef DEBUG
++ if (_DEBUG && (i == ETH_ALEN) && (*bufp != '\0')) {
+ fprintf(stderr, _("in_ether(%s): trailing junk!\n"), orig);
+ errno = EINVAL;
+ return (-1);
+-#endif
+ }
+-#ifdef DEBUG
+- fprintf(stderr, "in_ether(%s): %s\n", orig, pr_ether(sap->sa_data));
+-#endif
++ if (_DEBUG)
++ fprintf(stderr, "in_ether(%s): %s\n", orig, pr_ether(sap->sa_data));
+
+ return (0);
+ }
+diff --git a/lib/eui64.c b/lib/eui64.c
+new file mode 100644
+index 0000000..94831c0
+--- /dev/null
++++ b/lib/eui64.c
+@@ -0,0 +1,152 @@
++/*
++ * lib/eui64.c This file contains support for generic EUI-64 hw addressing
++ *
++ * Version: $Id: eui64.c,v 1.1 2001/11/12 02:12:05 ecki Exp $
++ *
++ * Author: Daniel Stodden <stodden@in.tum.de>
++ * Copyright 2001 Daniel Stodden
++ *
++ * blueprinted from ether.c
++ * Copyright 1993 MicroWalt Corporation
++ *
++ * This program is free software; you can redistribute it
++ * and/or modify it under the terms of the GNU General
++ * Public License as published by the Free Software
++ * Foundation; either version 2 of the License, or (at
++ * your option) any later version.
++ */
++#include "config.h"
++
++#if HAVE_HWEUI64
++
++#include <sys/types.h>
++#include <sys/ioctl.h>
++#include <sys/socket.h>
++#include <net/if_arp.h>
++#include <stdlib.h>
++#include <stdio.h>
++#include <ctype.h>
++#include <errno.h>
++#include <fcntl.h>
++#include <string.h>
++#include <termios.h>
++#include <unistd.h>
++#include "net-support.h"
++#include "pathnames.h"
++#include "intl.h"
++
++/*
++ * EUI-64 constants
++ */
++
++#define EUI64_ALEN 8
++
++#ifndef ARPHRD_EUI64
++#define ARPHRD_EUI64 27
++#warning "ARPHRD_EUI64 not defined in <net/if_arp.h>. Using private value 27"
++#endif
++
++struct hwtype eui64_hwtype;
++
++/* Display an EUI-64 address in readable format. */
++static const char *pr_eui64(const char *ptr)
++{
++ static char buff[64];
++
++ snprintf(buff, sizeof(buff), "%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X",
++ (ptr[0] & 0377), (ptr[1] & 0377), (ptr[2] & 0377), (ptr[3] & 0377),
++ (ptr[4] & 0377), (ptr[5] & 0377), (ptr[6] & 0377), (ptr[7] & 0377)
++ );
++ return (buff);
++}
++
++#ifdef DEBUG
++#define _DEBUG 1
++#else
++#define _DEBUG 0
++#endif
++
++/* Start the PPP encapsulation on the file descriptor. */
++static int in_eui64( char *bufp, struct sockaddr *sap )
++{
++ char *ptr;
++ char c, *orig;
++ int i;
++ unsigned val;
++
++ sap->sa_family = eui64_hwtype.type;
++ ptr = sap->sa_data;
++
++ i = 0;
++ orig = bufp;
++
++ while ((*bufp != '\0') && (i < EUI64_ALEN)) {
++ val = 0;
++ c = *bufp++;
++ if (isdigit(c))
++ val = c - '0';
++ else if (c >= 'a' && c <= 'f')
++ val = c - 'a' + 10;
++ else if (c >= 'A' && c <= 'F')
++ val = c - 'A' + 10;
++ else {
++ if (_DEBUG)
++ fprintf( stderr, _("in_eui64(%s): invalid eui64 address!\n"),
++ orig );
++ errno = EINVAL;
++ return (-1);
++ }
++
++ val <<= 4;
++ c = *bufp;
++ if (isdigit(c))
++ val |= c - '0';
++ else if (c >= 'a' && c <= 'f')
++ val |= c - 'a' + 10;
++ else if (c >= 'A' && c <= 'F')
++ val |= c - 'A' + 10;
++ else if (c == ':' || c == 0)
++ val >>= 4;
++ else {
++ if (_DEBUG)
++ fprintf( stderr, _("in_eui64(%s): invalid eui64 address!\n"),
++ orig );
++ errno = EINVAL;
++ return (-1);
++ }
++
++ if (c != 0)
++ bufp++;
++
++ *ptr++ = (unsigned char) (val & 0377);
++ i++;
++
++ /* We might get a semicolon here - not required. */
++ if (*bufp == ':') {
++ if (_DEBUG && i == EUI64_ALEN)
++ fprintf(stderr, _("in_eui64(%s): trailing : ignored!\n"),
++ orig);
++ bufp++;
++ }
++ }
++
++ /* That's it. Any trailing junk? */
++ if (_DEBUG && (i == EUI64_ALEN) && (*bufp != '\0')) {
++ fprintf(stderr, _("in_eui64(%s): trailing junk!\n"), orig);
++ errno = EINVAL;
++ return (-1);
++ }
++ if (_DEBUG)
++ fprintf(stderr, "in_eui64(%s): %s\n", orig, pr_eui64(sap->sa_data));
++
++ return (0);
++}
++
++struct hwtype eui64_hwtype =
++{
++ "eui64", NULL, /*"EUI-64 addressing", */ ARPHRD_EUI64, EUI64_ALEN,
++ pr_eui64, in_eui64, NULL, 0
++};
++
++
++#endif /* HAVE_EUI64 */
+diff --git a/lib/fddi.c b/lib/fddi.c
+index f6bf5ca..c18696e 100644
+--- a/lib/fddi.c
++++ b/lib/fddi.c
+@@ -46,7 +46,7 @@ extern struct hwtype fddi_hwtype;
+
+
+ /* Display an FDDI address in readable format. */
+-static char *pr_fddi(unsigned char *ptr)
++static const char *pr_fddi(const char *ptr)
+ {
+ static char buff[64];
+
+@@ -57,11 +57,16 @@ static char *pr_fddi(unsigned char *ptr)
+ return (buff);
+ }
+
++#ifdef DEBUG
++#define _DEBUG 1
++#else
++#define _DEBUG 0
++#endif
+
+ /* Input an FDDI address and convert to binary. */
+ static int in_fddi(char *bufp, struct sockaddr *sap)
+ {
+- unsigned char *ptr;
++ char *ptr;
+ char c, *orig;
+ int i, val;
+
+@@ -80,9 +85,8 @@ static int in_fddi(char *bufp, struct sockaddr *sap)
+ else if (c >= 'A' && c <= 'F')
+ val = c - 'A' + 10;
+ else {
+-#ifdef DEBUG
+- fprintf(stderr, _("in_fddi(%s): invalid fddi address!\n"), orig);
+-#endif
++ if (_DEBUG)
++ fprintf(stderr, _("in_fddi(%s): invalid fddi address!\n"), orig);
+ errno = EINVAL;
+ return (-1);
+ }
+@@ -95,9 +99,8 @@ static int in_fddi(char *bufp, struct sockaddr *sap)
+ else if (c >= 'A' && c <= 'F')
+ val |= c - 'A' + 10;
+ else {
+-#ifdef DEBUG
+- fprintf(stderr, _("in_fddi(%s): invalid fddi address!\n"), orig);
+-#endif
++ if (_DEBUG)
++ fprintf(stderr, _("in_fddi(%s): invalid fddi address!\n"), orig);
+ errno = EINVAL;
+ return (-1);
+ }
+@@ -106,28 +109,21 @@ static int in_fddi(char *bufp, struct sockaddr *sap)
+
+ /* We might get a semicolon here - not required. */
+ if (*bufp == ':') {
+- if (i == FDDI_K_ALEN) {
+-#ifdef DEBUG
++ if (_DEBUG && i == FDDI_K_ALEN)
+ fprintf(stderr, _("in_fddi(%s): trailing : ignored!\n"),
+- orig)
+-#endif
+- ; /* nothing */
+- }
++ orig);
+ bufp++;
+ }
+ }
+
+ /* That's it. Any trailing junk? */
+- if ((i == FDDI_K_ALEN) && (*bufp != '\0')) {
+-#ifdef DEBUG
++ if (_DEBUG && (i == FDDI_K_ALEN) && (*bufp != '\0')) {
+ fprintf(stderr, _("in_fddi(%s): trailing junk!\n"), orig);
+ errno = EINVAL;
+ return (-1);
+-#endif
+ }
+-#ifdef DEBUG
+- fprintf(stderr, "in_fddi(%s): %s\n", orig, pr_fddi(sap->sa_data));
+-#endif
++ if (_DEBUG)
++ fprintf(stderr, "in_fddi(%s): %s\n", orig, pr_fddi(sap->sa_data));
+
+ return (0);
+ }
+diff --git a/lib/frame.c b/lib/frame.c
+index 58d1ad4..ad265d6 100644
+--- a/lib/frame.c
++++ b/lib/frame.c
+@@ -37,7 +37,7 @@
+ #include "net-support.h"
+ #include "pathnames.h"
+
+-char *pr_dlci(unsigned char *ptr)
++static const char *pr_dlci(const char *ptr)
+ {
+ static char buf[12];
+
+diff --git a/lib/getargs.c b/lib/getargs.c
+index 4170097..6952777 100644
+--- a/lib/getargs.c
++++ b/lib/getargs.c
+@@ -24,12 +24,13 @@
+ #include <unistd.h>
+ #include "net-support.h"
+ #include "pathnames.h"
++#include "util.h"
+
+
+ /* Split the input string into multiple fields. */
+ int getargs(char *string, char *arguments[])
+ {
+- int len = strlen(string);
++ int len = strlen(string);
+ char temp[len+1];
+ char *sp, *ptr;
+ int i, argc;
+@@ -41,7 +42,7 @@ int getargs(char *string, char *arguments[])
+ */
+ sp = string;
+ i = 0;
+- strcpy(temp, string);
++ safe_strncpy(temp, string, sizeof(temp));
+ ptr = temp;
+
+ /*
+diff --git a/lib/hdlclapb.c b/lib/hdlclapb.c
+index c4ed074..b7d563e 100644
+--- a/lib/hdlclapb.c
++++ b/lib/hdlclapb.c
+@@ -1,11 +1,11 @@
+ /*
+- * lib/hdlclapb.c
++ * lib/hdlclapb.c
+ * This file contains the HDLC/LAPB support for the NET-2 base
+ * distribution.
+ *
+ * Version: $Id: hdlclapb.c,v 1.5 2000/03/05 11:26:02 philip Exp $
+ *
+- * Original Author:
++ * Original Author:
+ * Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org>
+ * Copyright 1993 MicroWalt Corporation
+ *
+diff --git a/lib/hippi.c b/lib/hippi.c
+index 308db00..43e7a79 100644
+--- a/lib/hippi.c
++++ b/lib/hippi.c
+@@ -46,7 +46,7 @@ extern struct hwtype hippi_hwtype;
+
+
+ /* Display an HIPPI address in readable format. */
+-static char *pr_hippi(unsigned char *ptr)
++static const char *pr_hippi(const char *ptr)
+ {
+ static char buff[64];
+
+@@ -57,11 +57,16 @@ static char *pr_hippi(unsigned char *ptr)
+ return (buff);
+ }
+
++#ifdef DEBUG
++#define _DEBUG 1
++#else
++#define _DEBUG 0
++#endif
+
+ /* Input an HIPPI address and convert to binary. */
+ static int in_hippi(char *bufp, struct sockaddr *sap)
+ {
+- unsigned char *ptr;
++ char *ptr;
+ char c, *orig;
+ int i, val;
+
+@@ -80,9 +85,8 @@ static int in_hippi(char *bufp, struct sockaddr *sap)
+ else if (c >= 'A' && c <= 'F')
+ val = c - 'A' + 10;
+ else {
+-#ifdef DEBUG
+- fprintf(stderr, _("in_hippi(%s): invalid hippi address!\n"), orig);
+-#endif
++ if (_DEBUG)
++ fprintf(stderr, _("in_hippi(%s): invalid hippi address!\n"), orig);
+ errno = EINVAL;
+ return (-1);
+ }
+@@ -95,9 +99,8 @@ static int in_hippi(char *bufp, struct sockaddr *sap)
+ else if (c >= 'A' && c <= 'F')
+ val |= c - 'A' + 10;
+ else {
+-#ifdef DEBUG
+- fprintf(stderr, _("in_hippi(%s): invalid hippi address!\n"), orig);
+-#endif
++ if (_DEBUG)
++ fprintf(stderr, _("in_hippi(%s): invalid hippi address!\n"), orig);
+ errno = EINVAL;
+ return (-1);
+ }
+@@ -106,27 +109,20 @@ static int in_hippi(char *bufp, struct sockaddr *sap)
+
+ /* We might get a semicolon here - not required. */
+ if (*bufp == ':') {
+- if (i == HIPPI_ALEN) {
+-#ifdef DEBUG
+- fprintf(stderr, _("in_hippi(%s): trailing : ignored!\n"), orig)
+-#endif
+- ; /* nothing */
+- }
++ if (_DEBUG && i == HIPPI_ALEN)
++ fprintf(stderr, _("in_hippi(%s): trailing : ignored!\n"), orig);
+ bufp++;
+ }
+ }
+
+ /* That's it. Any trailing junk? */
+- if ((i == HIPPI_ALEN) && (*bufp != '\0')) {
+-#ifdef DEBUG
++ if (_DEBUG && (i == HIPPI_ALEN) && (*bufp != '\0')) {
+ fprintf(stderr, _("in_hippi(%s): trailing junk!\n"), orig);
+ errno = EINVAL;
+ return (-1);
+-#endif
+ }
+-#ifdef DEBUG
+- fprintf(stderr, "in_hippi(%s): %s\n", orig, pr_hippi(sap->sa_data));
+-#endif
++ if (_DEBUG)
++ fprintf(stderr, "in_hippi(%s): %s\n", orig, pr_hippi(sap->sa_data));
+
+ return (0);
+ }
+diff --git a/lib/hw.c b/lib/hw.c
+index 4989748..71dfcf9 100644
+--- a/lib/hw.c
++++ b/lib/hw.c
+@@ -2,7 +2,7 @@
+ * lib/hw.c This file contains the top-level part of the hardware
+ * support functions module.
+ *
+- * Version: $Id: hw.c,v 1.17 2000/05/20 13:38:10 pb Exp $
++ * Version: $Id: hw.c,v 1.19 2008/10/03 01:52:04 ecki Exp $
+ *
+ * Maintainer: Bernd 'eckes' Eckenfels, <net-tools@lina.inka.de>
+ *
+@@ -73,6 +73,10 @@ extern struct hwtype irda_hwtype;
+
+ extern struct hwtype ec_hwtype;
+
++extern struct hwtype ib_hwtype;
++
++extern struct hwtype eui64_hwtype;
++
+ static struct hwtype *hwtypes[] =
+ {
+
+@@ -97,7 +101,7 @@ static struct hwtype *hwtypes[] =
+ #if HAVE_HWTR
+ &tr_hwtype,
+ #ifdef ARPHRD_IEEE802_TR
+- &tr_hwtype1,
++ &tr_hwtype1,
+ #endif
+ #endif
+ #if HAVE_HWAX25
+@@ -144,6 +148,12 @@ static struct hwtype *hwtypes[] =
+ #if HAVE_HWX25
+ &x25_hwtype,
+ #endif
++#if HAVE_HWIB
++ &ib_hwtype,
++#endif
++#if HAVE_HWEUI64
++ &eui64_hwtype,
++#endif
+ &unspec_hwtype,
+ NULL
+ };
+@@ -211,12 +221,18 @@ void hwinit()
+ #if HAVE_HWTR
+ tr_hwtype.title = _("16/4 Mbps Token Ring");
+ #ifdef ARPHRD_IEEE802_TR
+- tr_hwtype1.title = _("16/4 Mbps Token Ring (New)") ;
++ tr_hwtype1.title = _("16/4 Mbps Token Ring (New)") ;
+ #endif
+ #endif
+ #if HAVE_HWEC
+ ec_hwtype.title = _("Econet");
+ #endif
++#if HAVE_HWIB
++ ib_hwtype.title = _("InfiniBand");
++#endif
++#if HAVE_HWEUI64
++ eui64_hwtype.title = _("Generic EUI-64");
++#endif
+ sVhwinit = 1;
+ }
+
+@@ -269,7 +285,7 @@ void print_hwlist(int type) {
+ if (((type == 1) && ((*hwp)->alen == 0)) || ((*hwp)->type == -1)) {
+ hwp++; continue;
+ }
+- if ((count % 3) == 0) fprintf(stderr,count?"\n ":" ");
++ if ((count % 3) == 0) fprintf(stderr,count?"\n ":" ");
+ txt = (*hwp)->name; if (!txt) txt = "..";
+ fprintf(stderr,"%s (%s) ",txt,(*hwp)->title);
+ count++;
+diff --git a/lib/ib.c b/lib/ib.c
+new file mode 100644
+index 0000000..1eeb7f0
+--- /dev/null
++++ b/lib/ib.c
+@@ -0,0 +1,151 @@
++/*
++ * lib/ib.c This file contains an implementation of the "Infiniband"
++ * support functions.
++ *
++ * Version: $Id: ib.c,v 1.1 2008/10/03 01:52:03 ecki Exp $
++ *
++ * Author: Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org>
++ * Copyright 1993 MicroWalt Corporation
++ * Tom Duffy <tduffy@sun.com>
++ *
++ * This program is free software; you can redistribute it
++ * and/or modify it under the terms of the GNU General
++ * Public License as published by the Free Software
++ * Foundation; either version 2 of the License, or (at
++ * your option) any later version.
++ */
++#include "config.h"
++
++#if HAVE_HWIB
++#include <sys/types.h>
++#include <sys/socket.h>
++#include <net/if_arp.h>
++#include <linux/if_infiniband.h>
++#include <stdlib.h>
++#include <stdio.h>
++#include <errno.h>
++#include <ctype.h>
++#include <string.h>
++#include <unistd.h>
++#include "net-support.h"
++#include "pathnames.h"
++#include "intl.h"
++#include "util.h"
++
++extern struct hwtype ib_hwtype;
++
++
++/* Display an InfiniBand address in readable format. */
++static const char *pr_ib(const char *ptr)
++{
++ static char buff[128];
++ char *pos;
++ unsigned int i;
++
++ pos = buff;
++ for (i = 0; i < INFINIBAND_ALEN; i++) {
++ pos += sprintf(pos, "%02X:", (*ptr++ & 0377));
++ }
++ buff[strlen(buff) - 1] = '\0';
++ fprintf(stderr, _("Infiniband hardware address can be incorrect! Please read BUGS section in ifconfig(8).\n"));
++ /* snprintf(buff, sizeof(buff), "%02X:%02X:%02X:%02X:%02X:%02X",
++ (ptr[0] & 0377), (ptr[1] & 0377), (ptr[2] & 0377),
++ (ptr[3] & 0377), (ptr[4] & 0377), (ptr[5] & 0377)
++ );
++ */
++ return (buff);
++}
++
++#ifdef DEBUG
++#define _DEBUG 1
++#else
++#define _DEBUG 0
++#endif
++
++/* Input an Infiniband address and convert to binary. */
++static int in_ib(char *bufp, struct sockaddr *sap)
++{
++ char *ptr;
++ char c, *orig;
++ int i;
++ unsigned val;
++
++ sap->sa_family = ib_hwtype.type;
++ ptr = sap->sa_data;
++
++ i = 0;
++ orig = bufp;
++ while ((*bufp != '\0') && (i < INFINIBAND_ALEN)) {
++ val = 0;
++ c = *bufp++;
++ if (isdigit(c))
++ val = c - '0';
++ else if (c >= 'a' && c <= 'f')
++ val = c - 'a' + 10;
++ else if (c >= 'A' && c <= 'F')
++ val = c - 'A' + 10;
++ else {
++ if (_DEBUG)
++ fprintf(stderr, _("in_ib(%s): invalid infiniband address!\n"), orig);
++ errno = EINVAL;
++ return (-1);
++ }
++ val <<= 4;
++ c = *bufp;
++ if (isdigit(c))
++ val |= c - '0';
++ else if (c >= 'a' && c <= 'f')
++ val |= c - 'a' + 10;
++ else if (c >= 'A' && c <= 'F')
++ val |= c - 'A' + 10;
++ else if (c == ':' || c == 0)
++ val >>= 4;
++ else {
++#ifdef DEBUG
++ fprintf(stderr, _("in_ib(%s): invalid infiniband address!\n"), orig);
++#endif
++ errno = EINVAL;
++ return (-1);
++ }
++ if (c != 0)
++ bufp++;
++ *ptr++ = (unsigned char) (val & 0377);
++ i++;
++
++ /* We might get a semicolon here - not required. */
++ if (*bufp == ':') {
++ if (i == INFINIBAND_ALEN) {
++#ifdef DEBUG
++ fprintf(stderr, _("in_ib(%s): trailing : ignored!\n"),
++ orig)
++#endif
++ ; /* nothing */
++ }
++ bufp++;
++ }
++ }
++
++ /* That's it. Any trailing junk? */
++ if ((i == INFINIBAND_ALEN) && (*bufp != '\0')) {
++#ifdef DEBUG
++ fprintf(stderr, _("in_ib(%s): trailing junk!\n"), orig);
++ errno = EINVAL;
++ return (-1);
++#endif
++ }
++#ifdef DEBUG
++ fprintf(stderr, "in_ib(%s): %s\n", orig, pr_ib(sap->sa_data));
++#endif
++
++ return (0);
++}
++
++
++struct hwtype ib_hwtype =
++{
++ "infiniband", NULL, ARPHRD_INFINIBAND, INFINIBAND_ALEN,
++ pr_ib, in_ib, NULL
++};
++
++
++#endif /* HAVE_HWIB */
+diff --git a/lib/inet.c b/lib/inet.c
+index ae90664..8fd38b7 100644
+--- a/lib/inet.c
++++ b/lib/inet.c
+@@ -3,7 +3,7 @@
+ * support functions for the net-tools.
+ * (NET-3 base distribution).
+ *
+- * Version: $Id: inet.c,v 1.13 1999/12/11 13:35:56 freitag Exp $
++ * Version: $Id: inet.c,v 1.14 2003/10/19 11:57:37 pb Exp $
+ *
+ * Author: Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org>
+ * Copyright 1993 MicroWalt Corporation
+@@ -14,11 +14,11 @@
+ *960203 {1.23} Bernd Eckenfels : net-features support
+ *960217 {1.24} Bernd Eckenfels : get_sname
+ *960219 {1.25} Bernd Eckenfels : extern int h_errno
+- *960329 {1.26} Bernd Eckenfels : resolve 255.255.255.255
++ *960329 {1.26} Bernd Eckenfels : resolve 255.255.255.255
+ *980101 {1.27} Bernd Eckenfels : resolve raw sockets in /etc/protocols
+ *990302 {1.28} Phil Blundell : add netmask to INET_rresolve
+ *991007 Kurt Garloff : rresolve, resolve: may be hosts
+- * <garloff@suse.de> store type (host?) in cache
++ * <garloff@suse.de> store type (host?) in cache
+ *
+ * This program is free software; you can redistribute it
+ * and/or modify it under the terms of the GNU General
+@@ -96,9 +96,9 @@ static int INET_resolve(char *name, struct sockaddr_in *sin, int hostfirst)
+ #ifdef DEBUG
+ if (hostfirst) fprintf (stderr, "gethostbyname (%s)\n", name);
+ #endif
+- if (hostfirst &&
++ if (hostfirst &&
+ (hp = gethostbyname(name)) != (struct hostent *) NULL) {
+- memcpy((char *) &sin->sin_addr, (char *) hp->h_addr_list[0],
++ memcpy((char *) &sin->sin_addr, (char *) hp->h_addr_list[0],
+ sizeof(struct in_addr));
+ return 0;
+ }
+@@ -127,24 +127,24 @@ static int INET_resolve(char *name, struct sockaddr_in *sin, int hostfirst)
+ errno = h_errno;
+ return -1;
+ }
+- memcpy((char *) &sin->sin_addr, (char *) hp->h_addr_list[0],
++ memcpy((char *) &sin->sin_addr, (char *) hp->h_addr_list[0],
+ sizeof(struct in_addr));
+
+ return 0;
+ }
+
+
+-/* numeric: & 0x8000: default instead of *,
+- * & 0x4000: host instead of net,
++/* numeric: & 0x8000: default instead of *,
++ * & 0x4000: host instead of net,
+ * & 0x0fff: don't resolve
+ */
+-static int INET_rresolve(char *name, size_t len, struct sockaddr_in *sin,
++static int INET_rresolve(char *name, size_t len, struct sockaddr_in *sin,
+ int numeric, unsigned int netmask)
+ {
+ struct hostent *ent;
+ struct netent *np;
+ struct addr *pn;
+- unsigned long ad, host_ad;
++ u_int32_t ad, host_ad;
+ int host = 0;
+
+ /* Grmpf. -FvK */
+@@ -155,7 +155,7 @@ static int INET_rresolve(char *name, size_t len, struct sockaddr_in *sin,
+ errno = EAFNOSUPPORT;
+ return (-1);
+ }
+- ad = (unsigned long) sin->sin_addr.s_addr;
++ ad = sin->sin_addr.s_addr;
+ #ifdef DEBUG
+ fprintf (stderr, "rresolve: %08lx, mask %08x, num %08x \n", ad, netmask, numeric);
+ #endif
+@@ -210,12 +210,12 @@ static int INET_rresolve(char *name, size_t len, struct sockaddr_in *sin,
+ }
+ if ((ent == NULL) && (np == NULL))
+ safe_strncpy(name, inet_ntoa(sin->sin_addr), len);
+- pn = (struct addr *) malloc(sizeof(struct addr));
++ pn = (struct addr *) xmalloc(sizeof(struct addr));
+ pn->addr = *sin;
+ pn->next = INET_nn;
+ pn->host = host;
+- pn->name = (char *) malloc(strlen(name) + 1);
+- strcpy(pn->name, name);
++ pn->name = (char *) xmalloc(strlen(name) + 1);
++ safe_strncpy(pn->name, name, sizeof(pn->name));
+ INET_nn = pn;
+
+ return (0);
+@@ -229,35 +229,35 @@ static void INET_reserror(char *text)
+
+
+ /* Display an Internet socket address. */
+-static char *INET_print(unsigned char *ptr)
++static const char *INET_print(const char *ptr)
+ {
+ return (inet_ntoa((*(struct in_addr *) ptr)));
+ }
+
+
+ /* Display an Internet socket address. */
+-static char *INET_sprint(struct sockaddr *sap, int numeric)
++static const char *INET_sprint(struct sockaddr *sap, int numeric)
+ {
+ static char buff[128];
+
+ if (sap->sa_family == 0xFFFF || sap->sa_family == 0)
+ return safe_strncpy(buff, _("[NONE SET]"), sizeof(buff));
+
+- if (INET_rresolve(buff, sizeof(buff), (struct sockaddr_in *) sap,
++ if (INET_rresolve(buff, sizeof(buff), (struct sockaddr_in *) sap,
+ numeric, 0xffffff00) != 0)
+ return (NULL);
+
+ return (buff);
+ }
+
+-char *INET_sprintmask(struct sockaddr *sap, int numeric,
++char *INET_sprintmask(struct sockaddr *sap, int numeric,
+ unsigned int netmask)
+ {
+ static char buff[128];
+
+ if (sap->sa_family == 0xFFFF || sap->sa_family == 0)
+ return safe_strncpy(buff, _("[NONE SET]"), sizeof(buff));
+- if (INET_rresolve(buff, sizeof(buff), (struct sockaddr_in *) sap,
++ if (INET_rresolve(buff, sizeof(buff), (struct sockaddr_in *) sap,
+ numeric, netmask) != 0)
+ return (NULL);
+ return (buff);
+@@ -385,9 +385,7 @@ static int read_services(void)
+ setservent(1);
+ while ((se = getservent())) {
+ /* Allocate a service entry. */
+- item = (struct service *) malloc(sizeof(struct service));
+- if (item == NULL)
+- perror("netstat");
++ item = (struct service *) xmalloc(sizeof(struct service));
+ item->name = strdup(se->s_name);
+ item->number = se->s_port;
+
+@@ -398,15 +396,16 @@ static int read_services(void)
+ add2list(&udp_name, item);
+ } else if (!strcmp(se->s_proto, "raw")) {
+ add2list(&raw_name, item);
++ } else { /* sctp, ddp, dccp */
++ free(item->name);
++ free(item);
+ }
+ }
+ endservent();
+ setprotoent(1);
+ while ((pe = getprotoent())) {
+ /* Allocate a service entry. */
+- item = (struct service *) malloc(sizeof(struct service));
+- if (item == NULL)
+- perror("netstat");
++ item = (struct service *) xmalloc(sizeof(struct service));
+ item->name = strdup(pe->p_name);
+ item->number = htons(pe->p_proto);
+ add2list(&raw_name, item);
+@@ -416,35 +415,38 @@ static int read_services(void)
+ }
+
+
+-char *get_sname(int socknumber, char *proto, int numeric)
++const char *get_sname(int socknumber, const char *proto, int numeric)
+ {
+ static char buffer[64], init = 0;
+ struct service *item;
+
+ if (socknumber == 0)
+ return ("*");
+- if (numeric) {
+- sprintf(buffer, "%d", ntohs(socknumber));
+- return (buffer);
+- }
++ if (numeric)
++ goto do_ntohs;
++
+ if (!init) {
+ (void) read_services();
+ init = 1;
+ }
+ buffer[0] = '\0';
+- if (!strcmp(proto, "tcp")) {
+- if ((item = searchlist(tcp_name, socknumber)) != NULL)
+- sprintf(buffer, "%s", item->name);
+- } else if (!strcmp(proto, "udp")) {
+- if ((item = searchlist(udp_name, socknumber)) != NULL)
+- sprintf(buffer, "%s", item->name);
+- } else if (!strcmp(proto, "raw")) {
+- if ((item = searchlist(raw_name, socknumber)) != NULL)
+- sprintf(buffer, "%s", item->name);
+-
++ if (!strcmp(proto, "tcp"))
++ item = searchlist(tcp_name, socknumber);
++ else if (!strcmp(proto, "udp"))
++ item = searchlist(udp_name, socknumber);
++ else if (!strcmp(proto, "raw"))
++ item = searchlist(raw_name, socknumber);
++ else
++ item = NULL;
++ if (item) {
++ strncpy(buffer, item->name, sizeof(buffer));
++ buffer[sizeof(buffer) - 1] = '\0';
+ }
+- if (!buffer[0])
++
++ if (!buffer[0]) {
++ do_ntohs:
+ sprintf(buffer, "%d", ntohs(socknumber));
++ }
+ return (buffer);
+ }
+
+diff --git a/lib/inet6.c b/lib/inet6.c
+index 1f936b3..0b72dca 100644
+--- a/lib/inet6.c
++++ b/lib/inet6.c
+@@ -3,7 +3,7 @@
+ * support functions for the net-tools.
+ * (most of it copied from lib/inet.c 1.26).
+ *
+- * Version: $Id: inet6.c,v 1.10 2000/10/28 11:04:00 pb Exp $
++ * Version: $Id: inet6.c,v 1.13 2010-07-05 22:52:00 ecki Exp $
+ *
+ * Author: Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org>
+ * Copyright 1993 MicroWalt Corporation
+@@ -44,6 +44,21 @@
+
+ extern int h_errno; /* some netdb.h versions don't export this */
+
++char * fix_v4_address(char *buf, struct in6_addr *in6)
++{
++ if (IN6_IS_ADDR_V4MAPPED(in6->s6_addr)) {
++ char *s =strchr(buf, '.');
++ if (s) {
++ while (s > buf && *s != ':')
++ --s;
++ if (*s == ':') ++s;
++ else s = NULL;
++ }
++ if (s) return s;
++ }
++ return buf;
++}
++
+ static int INET6_resolve(char *name, struct sockaddr_in6 *sin6)
+ {
+ struct addrinfo req, *ai;
+@@ -83,14 +98,14 @@ static int INET6_rresolve(char *name, struct sockaddr_in6 *sin6, int numeric)
+ return (-1);
+ }
+ if (numeric & 0x7FFF) {
+- inet_ntop(AF_INET6, &sin6->sin6_addr, name, 80);
++ inet_ntop( AF_INET6, &sin6->sin6_addr, name, 80);
+ return (0);
+ }
+ if (IN6_IS_ADDR_UNSPECIFIED(&sin6->sin6_addr)) {
+ if (numeric & 0x8000)
+- strcpy(name, "default");
++ safe_strncpy(name, "default", sizeof(name));
+ else
+- strcpy(name, "*");
++ safe_strncpy(name, "[::]", sizeof(name));
+ return (0);
+ }
+
+@@ -109,19 +124,20 @@ static void INET6_reserror(char *text)
+ }
+
+
++
+ /* Display an Internet socket address. */
+-static char *INET6_print(unsigned char *ptr)
++static const char *INET6_print(const char *ptr)
+ {
+ static char name[80];
+
+ inet_ntop(AF_INET6, (struct in6_addr *) ptr, name, 80);
+- return name;
++ return fix_v4_address(name, (struct in6_addr *)ptr);
+ }
+
+
+ /* Display an Internet socket address. */
+ /* dirty! struct sockaddr usually doesn't suffer for inet6 addresses, fst. */
+-static char *INET6_sprint(struct sockaddr *sap, int numeric)
++static const char *INET6_sprint(struct sockaddr *sap, int numeric)
+ {
+ static char buff[128];
+
+@@ -129,21 +145,26 @@ static char *INET6_sprint(struct sockaddr *sap, int numeric)
+ return safe_strncpy(buff, _("[NONE SET]"), sizeof(buff));
+ if (INET6_rresolve(buff, (struct sockaddr_in6 *) sap, numeric) != 0)
+ return safe_strncpy(buff, _("[UNKNOWN]"), sizeof(buff));
+- return (buff);
++ return (fix_v4_address(buff, &((struct sockaddr_in6 *)sap)->sin6_addr));
+ }
+
+
+ static int INET6_getsock(char *bufp, struct sockaddr *sap)
+ {
+ struct sockaddr_in6 *sin6;
++ char *p;
+
+ sin6 = (struct sockaddr_in6 *) sap;
+ sin6->sin6_family = AF_INET6;
+ sin6->sin6_port = 0;
++ sin6->sin6_scope_id = 0;
++ sin6->sin6_flowinfo = 0;
+
+ if (inet_pton(AF_INET6, bufp, sin6->sin6_addr.s6_addr) <= 0)
+ return (-1);
+-
++ p = fix_v4_address(bufp, &sin6->sin6_addr);
++ if (p != bufp)
++ memcpy(bufp, p, strlen(p)+1);
+ return 16; /* ?;) */
+ }
+
+diff --git a/lib/inet6_gr.c b/lib/inet6_gr.c
+index 14f32eb..cd21a66 100644
+--- a/lib/inet6_gr.c
++++ b/lib/inet6_gr.c
+@@ -1,4 +1,4 @@
+-/*
++ /*
+ Modifications:
+ 1998-07-01 - Arnaldo Carvalho de Melo - GNU gettext instead of catgets,
+ snprintf instead of sprintf
+@@ -31,6 +31,7 @@
+ #include "pathnames.h"
+ #include "intl.h"
+ #include "net-features.h"
++#include "util.h"
+
+ /* neighbour discovery from linux-2.4.0/include/net/neighbour.h */
+
+@@ -63,7 +64,7 @@ int rprint_fib6(int ext, int numeric)
+ struct sockaddr_in6 saddr6, snaddr6;
+ int num, iflags, metric, refcnt, use, prefix_len, slen;
+ FILE *fp = fopen(_PATH_PROCNET_ROUTE6, "r");
+-
++
+ char addr6p[8][5], saddr6p[8][5], naddr6p[8][5];
+
+ if (!fp) {
+@@ -71,14 +72,18 @@ int rprint_fib6(int ext, int numeric)
+ printf(_("INET6 (IPv6) not configured in this system.\n"));
+ return 1;
+ }
+- printf(_("Kernel IPv6 routing table\n"));
+
+- printf(_("Destination "
+- "Next Hop "
+- "Flags Metric Ref Use Iface\n"));
++ if (numeric & RTF_CACHE)
++ printf(_("Kernel IPv6 routing cache\n"));
++ else
++ printf(_("Kernel IPv6 routing table\n"));
++
++ printf(_("Destination "
++ "Next Hop "
++ "Flag Met Ref Use If\n"));
+
+ while (fgets(buff, 1023, fp)) {
+- num = sscanf(buff, "%4s%4s%4s%4s%4s%4s%4s%4s %02x %4s%4s%4s%4s%4s%4s%4s%4s %02x %4s%4s%4s%4s%4s%4s%4s%4s %08x %08x %08x %08x %s\n",
++ num = sscanf(buff, "%4s%4s%4s%4s%4s%4s%4s%4s %02x %4s%4s%4s%4s%4s%4s%4s%4s %02x %4s%4s%4s%4s%4s%4s%4s%4s %08x %08x %08x %08x %15s\n",
+ addr6p[0], addr6p[1], addr6p[2], addr6p[3],
+ addr6p[4], addr6p[5], addr6p[6], addr6p[7],
+ &prefix_len,
+@@ -87,13 +92,17 @@ int rprint_fib6(int ext, int numeric)
+ &slen,
+ naddr6p[0], naddr6p[1], naddr6p[2], naddr6p[3],
+ naddr6p[4], naddr6p[5], naddr6p[6], naddr6p[7],
+- &metric, &use, &refcnt, &iflags, iface);
+-#if 0
+- if (num < 23)
+- continue;
+-#endif
+- if (!(iflags & RTF_UP))
++ &metric, &refcnt, &use, &iflags, iface);
++ if (0 && num < 23)
+ continue;
++ if (iflags & RTF_CACHE) {
++ if (!(numeric & RTF_CACHE))
++ continue;
++ } else {
++ if (numeric & RTF_CACHE)
++ continue;
++ }
++
+ /* Fetch and resolve the target address. */
+ snprintf(addr6, sizeof(addr6), "%s:%s:%s:%s:%s:%s:%s:%s",
+ addr6p[0], addr6p[1], addr6p[2], addr6p[3],
+@@ -112,7 +121,12 @@ int rprint_fib6(int ext, int numeric)
+ inet6_aftype.sprint((struct sockaddr *) &snaddr6, 1));
+
+ /* Decode the flags. */
+- strcpy(flags, "U");
++
++ flags[0]=0;
++ if (iflags & RTF_UP)
++ strcat(flags, "U");
++ if (iflags & RTF_REJECT)
++ strcat(flags, "!");
+ if (iflags & RTF_GATEWAY)
+ strcat(flags, "G");
+ if (iflags & RTF_HOST)
+@@ -123,9 +137,19 @@ int rprint_fib6(int ext, int numeric)
+ strcat(flags, "A");
+ if (iflags & RTF_CACHE)
+ strcat(flags, "C");
++ if (iflags & RTF_ALLONLINK)
++ strcat(flags, "a");
++ if (iflags & RTF_EXPIRES)
++ strcat(flags, "e");
++ if (iflags & RTF_MODIFIED)
++ strcat(flags, "m");
++ if (iflags & RTF_NONEXTHOP)
++ strcat(flags, "n");
++ if (iflags & RTF_FLOW)
++ strcat(flags, "f");
+
+ /* Print the info. */
+- printf("%-43s %-39s %-5s %-6d %-2d %7d %-8s\n",
++ printf("%-30s %-26s %-4s %-3d %-1d%6d %s\n",
+ addr6, naddr6, flags, metric, refcnt, use, iface);
+ }
+
+@@ -138,14 +162,13 @@ int rprint_cache6(int ext, int numeric)
+ char buff[4096], iface[16], flags[16];
+ char addr6[128], haddr[20], statestr[20];
+ struct sockaddr_in6 saddr6;
+- int type, num, refcnt, prefix_len, location, state, gc;
++ int type, refcnt, prefix_len, location, state, gc;
+ long tstamp, expire, ndflags, reachable, stale, delete;
+ FILE *fp = fopen(_PATH_PROCNET_NDISC, "r");
+ char addr6p[8][5], haddrp[6][3];
+
+ if (!fp) {
+- ESYSNOT("nd_print", "ND Table");
+- return 1;
++ return rprint_fib6(ext, numeric | RTF_CACHE);
+ }
+ printf(_("Kernel IPv6 Neighbour Cache\n"));
+
+@@ -160,7 +183,7 @@ int rprint_cache6(int ext, int numeric)
+
+
+ while (fgets(buff, 1023, fp)) {
+- num = sscanf(buff, "%4s%4s%4s%4s%4s%4s%4s%4s %02x %02x %02x %02x %08lx %08lx %08lx %04x %04x %04lx %8s %2s%2s%2s%2s%2s%2s\n",
++ sscanf(buff, "%4s%4s%4s%4s%4s%4s%4s%4s %02x %02x %02x %02x %08lx %08lx %08lx %04x %04x %04lx %8s %2s%2s%2s%2s%2s%2s\n",
+ addr6p[0], addr6p[1], addr6p[2], addr6p[3],
+ addr6p[4], addr6p[5], addr6p[6], addr6p[7],
+ &location, &prefix_len, &type, &state, &expire, &tstamp, &reachable, &gc, &refcnt,
+@@ -194,31 +217,31 @@ int rprint_cache6(int ext, int numeric)
+ /* Decode the state */
+ switch (state) {
+ case NUD_NONE:
+- strcpy(statestr, "NONE");
++ safe_strncpy(statestr, "NONE", sizeof(statestr));
+ break;
+ case NUD_INCOMPLETE:
+- strcpy(statestr, "INCOMPLETE");
++ safe_strncpy(statestr, "INCOMPLETE", sizeof(statestr));
+ break;
+ case NUD_REACHABLE:
+- strcpy(statestr, "REACHABLE");
++ safe_strncpy(statestr, "REACHABLE", sizeof(statestr));
+ break;
+ case NUD_STALE:
+- strcpy(statestr, "STALE");
++ safe_strncpy(statestr, "STALE", sizeof(statestr));
+ break;
+ case NUD_DELAY:
+- strcpy(statestr, "DELAY");
++ safe_strncpy(statestr, "DELAY", sizeof(statestr));
+ break;
+ case NUD_PROBE:
+- strcpy(statestr, "PROBE");
++ safe_strncpy(statestr, "PROBE", sizeof(statestr));
+ break;
+ case NUD_FAILED:
+- strcpy(statestr, "FAILED");
++ safe_strncpy(statestr, "FAILED", sizeof(statestr));
+ break;
+ case NUD_NOARP:
+- strcpy(statestr, "NOARP");
++ safe_strncpy(statestr, "NOARP", sizeof(statestr));
+ break;
+ case NUD_PERMANENT:
+- strcpy(statestr, "PERM");
++ safe_strncpy(statestr, "PERM", sizeof(statestr));
+ break;
+ default:
+ snprintf(statestr, sizeof(statestr), "UNKNOWN(%02x)", state);
+diff --git a/lib/inet6_sr.c b/lib/inet6_sr.c
+index fbfe033..1ad9510 100644
+--- a/lib/inet6_sr.c
++++ b/lib/inet6_sr.c
+@@ -33,7 +33,7 @@
+ #include "pathnames.h"
+ #include "intl.h"
+ #include "net-features.h"
+-
++#include "util.h"
+
+
+ extern struct aftype inet6_aftype;
+@@ -63,7 +63,7 @@ static int INET6_setroute(int action, int options, char **args)
+ if (*args == NULL)
+ return (usage());
+
+- strcpy(target, *args++);
++ safe_strncpy(target, *args++, sizeof(target));
+ if (!strcmp(target, "default")) {
+ prefix_len = 0;
+ memset(&sa6, 0, sizeof(sa6));
+@@ -112,7 +112,7 @@ static int INET6_setroute(int action, int options, char **args)
+ return (usage());
+ if (rt.rtmsg_flags & RTF_GATEWAY)
+ return (usage());
+- strcpy(gateway, *args);
++ safe_strncpy(gateway, *args, sizeof(gateway));
+ if (inet6_aftype.input(1, gateway,
+ (struct sockaddr *) &sa6) < 0) {
+ inet6_aftype.herror(gateway);
+@@ -152,7 +152,7 @@ static int INET6_setroute(int action, int options, char **args)
+ }
+ if (devname) {
+ memset(&ifr, 0, sizeof(ifr));
+- strcpy(ifr.ifr_name, devname);
++ safe_strncpy(ifr.ifr_name, devname, sizeof(ifr.ifr_name));
+
+ if (ioctl(skfd, SIOGIFINDEX, &ifr) < 0) {
+ perror("SIOGIFINDEX");
+diff --git a/lib/inet_gr.c b/lib/inet_gr.c
+index d1e5efc..f67e89d 100644
+--- a/lib/inet_gr.c
++++ b/lib/inet_gr.c
+@@ -1,5 +1,5 @@
+ /*
+- $Id: inet_gr.c,v 1.13 2000/10/08 01:00:44 ecki Exp $
++ $Id: inet_gr.c,v 1.14 2009/07/08 00:24:03 ecki Exp $
+
+ Modifications:
+ 1998-07-01 - Arnaldo Carvalho de Melo - GNU gettext instead of catgets
+@@ -31,14 +31,15 @@
+ #include "intl.h"
+ #include "net-features.h"
+ #include "proc.h"
++#include "util.h"
+ extern struct aftype inet_aftype;
+
+-extern char *INET_sprintmask(struct sockaddr *sap, int numeric,
++extern char *INET_sprintmask(struct sockaddr *sap, int numeric,
+ unsigned int netmask);
+
+ int rprint_fib(int ext, int numeric)
+ {
+- char buff[1024], iface[16], flags[64];
++ char buff[1024], iface[17], flags[64];
+ char gate_addr[128], net_addr[128];
+ char mask_addr[128];
+ int num, iflags, metric, refcnt, use, mss, window, irtt;
+@@ -68,19 +69,19 @@ int rprint_fib(int ext, int numeric)
+ mss = 0;
+
+ fmt = proc_gen_fmt(_PATH_PROCNET_ROUTE, 0, fp,
+- "Iface", "%16s",
+- "Destination", "%128s",
+- "Gateway", "%128s",
++ "Iface", "%15s",
++ "Destination", "%127s",
++ "Gateway", "%127s",
+ "Flags", "%X",
+ "RefCnt", "%d",
+ "Use", "%d",
+ "Metric", "%d",
+- "Mask", "%128s",
++ "Mask", "%127s",
+ "MTU", "%d",
+ "Window", "%d",
+ "IRTT", "%d",
+ NULL);
+- /* "%16s %128s %128s %X %d %d %d %128s %d %d %d\n" */
++ /* "%15s %127s %127s %X %d %d %d %127s %d %d %d\n" */
+
+ if (!fmt)
+ return 1;
+@@ -104,18 +105,19 @@ int rprint_fib(int ext, int numeric)
+
+ /* Fetch and resolve the genmask. */
+ (void) inet_aftype.input(1, mask_addr, &snet_mask);
+-
++
+ sin_netmask = (struct sockaddr_in *)&snet_mask;
+- strcpy(net_addr, INET_sprintmask(&snet_target,
++ safe_strncpy(net_addr, INET_sprintmask(&snet_target,
+ (numeric | 0x8000 | (iflags & RTF_HOST? 0x4000: 0)),
+- sin_netmask->sin_addr.s_addr));
+- net_addr[15] = '\0';
++ sin_netmask->sin_addr.s_addr), sizeof(net_addr));
++ net_addr[15] = '\0';
+
+- strcpy(gate_addr, inet_aftype.sprint(&snet_gateway, numeric | 0x4000));
+- gate_addr[15] = '\0';
++ safe_strncpy(gate_addr, inet_aftype.sprint(&snet_gateway, numeric | 0x4000),
++ sizeof(gate_addr));
++ gate_addr[15] = '\0';
+
+- strcpy(mask_addr, inet_aftype.sprint(&snet_mask, 1));
+- mask_addr[15] = '\0';
++ safe_strncpy(mask_addr, inet_aftype.sprint(&snet_mask, 1), sizeof(mask_addr));
++ mask_addr[15] = '\0';
+
+ /* Decode the flags. */
+ flags[0] = '\0';
+@@ -125,7 +127,7 @@ int rprint_fib(int ext, int numeric)
+ strcat(flags, "G");
+ #if HAVE_RTF_REJECT
+ if (iflags & RTF_REJECT)
+- strcpy(flags, "!");
++ safe_strncpy(flags, "!", sizeof(flags));
+ #endif
+ if (iflags & RTF_HOST)
+ strcat(flags, "H");
+@@ -205,7 +207,7 @@ int rprint_fib(int ext, int numeric)
+
+ int rprint_cache(int ext, int numeric)
+ {
+- char buff[1024], iface[16], flags[64];
++ char buff[1024], iface[17], flags[64];
+ char gate_addr[128], dest_addr[128], specdst[128];
+ char src_addr[128];
+ struct sockaddr snet;
+@@ -221,17 +223,17 @@ int rprint_cache(int ext, int numeric)
+ return 1;
+ }
+
+- /* Okay, first thing we need to know is the format of the rt_cache.
++ /* Okay, first thing we need to know is the format of the rt_cache.
+ * I am aware of two possible layouts:
+ * 2.2.0
+ * "Iface\tDestination\tGateway \tFlags\t\tRefCnt\tUse\tMetric\tSource\t\tMTU\tWindow\tIRTT\tTOS\tHHRef\tHHUptod\tSpecDst"
+- * "%s\t%08lX\t%08lX\t%8X\t%d\t%u\t%d\t%08lX\t%d\t%u\t%u\t%02X\t%d\t%1d\t%08X"
++ * "%s\t%08lX\t%08lX\t%8X\t%d\t%u\t%d\t%08lX\t%d\t%u\t%u\t%02X\t%d\t%1d\t%08X"
+ *
+ * 2.0.36
+ * "Iface\tDestination\tGateway \tFlags\tRefCnt\tUse\tMetric\tSource\t\tMTU\tWindow\tIRTT\tHH\tARP"
+ * "%s\t%08lX\t%08lX\t%02X\t%d\t%u\t%d\t%08lX\t%d\t%lu\t%u\t%d\t%1d"
+ */
+-
++
+ format = proc_guess_fmt(_PATH_PROCNET_RTCACHE, fp, "IRTT",1,"TOS",2,"HHRef",4,"HHUptod",8,"SpecDst",16,"HH",32,"ARP",64,NULL);
+
+ printf(_("Kernel IP routing cache\n"));
+@@ -251,7 +253,7 @@ int rprint_cache(int ext, int numeric)
+ printf("ERROR: proc_guess_fmt(%s,... returned: %d\n",_PATH_PROCNET_RTCACHE, format);
+ break;
+ }
+-
++
+ rewind(fp);
+
+ if (ext == 1)
+@@ -268,21 +270,21 @@ int rprint_cache(int ext, int numeric)
+ "MSS Window irtt HH Arp\n"));
+
+ fmt = proc_gen_fmt(_PATH_PROCNET_RTCACHE, 0, fp,
+- "Iface", "%16s",
+- "Destination", "%128s",
+- "Gateway", "%128s",
++ "Iface", "%15s",
++ "Destination", "%127s",
++ "Gateway", "%127s",
+ "Flags", "%X",
+ "RefCnt", "%d",
+ "Use", "%d",
+ "Metric", "%d",
+- "Source", "%128s",
++ "Source", "%127s",
+ "MTU", "%d",
+ "Window", "%d",
+ "IRTT", "%d",
+ "HH", "%d",
+ "ARP", "%d",
+ NULL);
+- /* "%16s %128s %128s %X %d %d %d %128s %d %d %d %d %d\n" */
++ /* "%15s %127s %127s %X %d %d %d %127s %d %d %d %d %d\n" */
+ }
+
+ if (format == 2) {
+@@ -291,23 +293,23 @@ int rprint_cache(int ext, int numeric)
+ "Flags Metric Ref Use Iface "
+ "MSS Window irtt TOS HHRef HHUptod SpecDst\n"));
+ fmt = proc_gen_fmt(_PATH_PROCNET_RTCACHE, 0, fp,
+- "Iface", "%16s",
+- "Destination", "%128s",
+- "Gateway", "%128s",
++ "Iface", "%15s",
++ "Destination", "%127s",
++ "Gateway", "%127s",
+ "Flags", "%X",
+ "RefCnt", "%d",
+ "Use", "%d",
+ "Metric", "%d",
+- "Source", "%128s",
++ "Source", "%127s",
+ "MTU", "%d",
+ "Window", "%d",
+ "IRTT", "%d",
+ "TOS", "%d",
+ "HHRef", "%d",
+ "HHUptod", "%d",
+- "SpecDst", "%128s",
++ "SpecDst", "%127s",
+ NULL);
+- /* "%16s %128s %128s %X %d %d %d %128s %d %d %d %d %d %128s\n" */
++ /* "%15s %127s %127s %X %d %d %d %127s %d %d %d %d %d %127s\n" */
+ }
+
+
+@@ -333,27 +335,23 @@ int rprint_cache(int ext, int numeric)
+ if (num < 12)
+ continue;
+ }
+-
++
+
+ /* Fetch and resolve the target address. */
+ (void) inet_aftype.input(1, dest_addr, &snet);
+- strcpy(dest_addr, inet_aftype.sprint(&snet, numeric));
+- dest_addr[15] = '\0';
++ safe_strncpy(dest_addr, inet_aftype.sprint(&snet, numeric), sizeof(dest_addr));
+
+ /* Fetch and resolve the gateway address. */
+ (void) inet_aftype.input(1, gate_addr, &snet);
+- strcpy(gate_addr, inet_aftype.sprint(&snet, numeric));
+- gate_addr[15] = '\0';
++ safe_strncpy(gate_addr, inet_aftype.sprint(&snet, numeric), sizeof(gate_addr));
+
+ /* Fetch and resolve the source. */
+ (void) inet_aftype.input(1, src_addr, &snet);
+- strcpy(src_addr, inet_aftype.sprint(&snet, numeric));
+- src_addr[15] = '\0';
++ safe_strncpy(src_addr, inet_aftype.sprint(&snet, numeric), sizeof(src_addr));
+
+ /* Fetch and resolve the SpecDst addrerss. */
+ (void) inet_aftype.input(1, specdst, &snet);
+- strcpy(specdst, inet_aftype.sprint(&snet, numeric));
+- specdst[15] = '\0';
++ safe_strncpy(specdst, inet_aftype.sprint(&snet, numeric), sizeof(specdst));
+
+ /* Decode the flags. */
+ flags[0] = '\0';
+@@ -367,7 +365,7 @@ if (format == 1) {
+ strcat(flags, "G");
+ #if HAVE_RTF_REJECT
+ if (iflags & RTF_REJECT)
+- strcpy(flags, "!");
++ safe_strncpy(flags, "!", sizeof(flags));
+ #endif
+ if (iflags & RTF_REINSTATE)
+ strcat(flags, "R");
+diff --git a/lib/inet_sr.c b/lib/inet_sr.c
+index 6d010d5..1a876ae 100644
+--- a/lib/inet_sr.c
++++ b/lib/inet_sr.c
+@@ -3,6 +3,7 @@
+ 1998-07-01 - Arnaldo Carvalho de Melo - GNU gettext instead of catgets
+ 1999-10-07 - Kurt Garloff - for -host and gws: prefer host names
+ over networks (or even reject)
++ 2003-10-11 - Maik Broemme - gcc 3.x warnign fixes (default: break;)
+ */
+
+ #include "config.h"
+@@ -104,7 +105,6 @@ static int INET_setroute(int action, int options, char **args)
+ isnet = 1; break;
+ case 2:
+ isnet = 0; break;
+- default:
+ }
+
+ /* Fill in the other fields. */
+diff --git a/lib/interface.c b/lib/interface.c
+index f4d2a9a..67f0d8f 100644
+--- a/lib/interface.c
++++ b/lib/interface.c
+@@ -1,13 +1,13 @@
+ /* Code to manipulate interface information, shared between ifconfig and
+- netstat.
++ netstat.
+
+- 10/1998 partly rewriten by Andi Kleen to support an interface list.
+- I don't claim that the list operations are efficient @).
++ 10/1998 partly rewriten by Andi Kleen to support an interface list.
++ I don't claim that the list operations are efficient @).
+
+ 8/2000 Andi Kleen make the list operations a bit more efficient.
+ People are crazy enough to use thousands of aliases now.
+
+- $Id: interface.c,v 1.14 2001/02/10 19:31:15 pb Exp $
++ $Id: interface.c,v 1.35 2011-01-01 03:22:31 ecki Exp $
+ */
+
+ #include "config.h"
+@@ -23,6 +23,7 @@
+ #include <string.h>
+ #include <unistd.h>
+ #include <ctype.h>
++#include <string.h>
+
+ #if HAVE_AFIPX
+ #if (__GLIBC__ > 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1)
+@@ -36,7 +37,7 @@
+ #include <neteconet/ec.h>
+ #endif
+
+-#ifdef HAVE_HWSLIP
++#if HAVE_HWSLIP
+ #include <linux/if_slip.h>
+ #include <net/if_arp.h>
+ #endif
+@@ -87,49 +88,58 @@ int procnetdev_vsn = 1;
+
+ int ife_short;
+
++int if_list_all = 0; /* do we have requested the complete proc list, yet? */
++
+ static struct interface *int_list, *int_last;
+
+ static int if_readlist_proc(char *);
+
+-static struct interface *add_interface(char *name)
++static struct interface *if_cache_add(char *name)
+ {
+ struct interface *ife, **nextp, *new;
+
++ if (!int_list)
++ int_last = NULL;
++
++ /* the cache is sorted, so if we hit a smaller if, exit */
+ for (ife = int_last; ife; ife = ife->prev) {
+- int n = nstrcmp(ife->name, name);
+- if (n == 0)
+- return ife;
+- if (n < 0)
+- break;
++ int n = nstrcmp(ife->name, name);
++ if (n == 0)
++ return ife;
++ if (n < 0)
++ break;
+ }
+- new(new);
+- safe_strncpy(new->name, name, IFNAMSIZ);
+- nextp = ife ? &ife->next : &int_list;
++ new(new);
++ safe_strncpy(new->name, name, IFNAMSIZ);
++ nextp = ife ? &ife->next : &int_list; // keep sorting
+ new->prev = ife;
+- new->next = *nextp;
+- if (new->next)
+- new->next->prev = new;
++ new->next = *nextp;
++ if (new->next)
++ new->next->prev = new;
+ else
+- int_last = new;
+- *nextp = new;
+- return new;
++ int_last = new;
++ *nextp = new;
++ return new;
+ }
+
+ struct interface *lookup_interface(char *name)
+ {
+- struct interface *ife = NULL;
++ /* if we have read all, use it */
++ if (if_list_all)
++ return if_cache_add(name);
+
+- if (if_readlist_proc(name) < 0)
+- return NULL;
+- ife = add_interface(name);
+- return ife;
++ /* otherwise we read a limited list */
++ if (if_readlist_proc(name) < 0)
++ return NULL;
++
++ return if_cache_add(name);
+ }
+
+ int for_all_interfaces(int (*doit) (struct interface *, void *), void *cookie)
+ {
+ struct interface *ife;
+
+- if (!int_list && (if_readlist() < 0))
++ if (!if_list_all && (if_readlist() < 0))
+ return -1;
+ for (ife = int_list; ife; ife = ife->next) {
+ int err = doit(ife, cookie);
+@@ -139,13 +149,15 @@ int for_all_interfaces(int (*doit) (struct interface *, void *), void *cookie)
+ return 0;
+ }
+
+-int free_interface_list(void)
++int if_cache_free(void)
+ {
+ struct interface *ife;
+ while ((ife = int_list) != NULL) {
+ int_list = ife->next;
+ free(ife);
+ }
++ int_last = NULL;
++ if_list_all = 0;
+ return 0;
+ }
+
+@@ -158,7 +170,7 @@ static int if_readconf(void)
+ int skfd;
+
+ /* SIOCGIFCONF currently seems to only work properly on AF_INET sockets
+- (as of 2.1.128) */
++ (as of 2.1.128) */
+ skfd = get_socket_for_af(AF_INET);
+ if (skfd < 0) {
+ fprintf(stderr, _("warning: no inet socket available: %s\n"),
+@@ -180,7 +192,7 @@ static int if_readconf(void)
+ }
+ if (ifc.ifc_len == sizeof(struct ifreq) * numreqs) {
+ /* assume it overflowed and try again */
+- numreqs += 10;
++ numreqs *= 2;
+ continue;
+ }
+ break;
+@@ -188,7 +200,7 @@ static int if_readconf(void)
+
+ ifr = ifc.ifc_req;
+ for (n = 0; n < ifc.ifc_len; n += sizeof(struct ifreq)) {
+- add_interface(ifr->ifr_name);
++ if_cache_add(ifr->ifr_name);
+ ifr++;
+ }
+ err = 0;
+@@ -198,7 +210,7 @@ out:
+ return err;
+ }
+
+-static char *get_name(char *name, char *p)
++char *get_name(char *name, char *p)
+ {
+ while (isspace(*p))
+ p++;
+@@ -206,16 +218,19 @@ static char *get_name(char *name, char *p)
+ if (isspace(*p))
+ break;
+ if (*p == ':') { /* could be an alias */
+- char *dot = p, *dotname = name;
+- *name++ = *p++;
+- while (isdigit(*p))
+- *name++ = *p++;
+- if (*p != ':') { /* it wasn't, backup */
+- p = dot;
+- name = dotname;
++ char *dot = p++;
++ while (*p && isdigit(*p)) p++;
++ if (*p == ':') {
++ /* Yes it is, backup and copy it. */
++ p = dot;
++ *name++ = *p++;
++ while (*p && isdigit(*p)) {
++ *name++ = *p++;
++ }
++ } else {
++ /* No, it isn't */
++ p = dot;
+ }
+- if (*p == '\0')
+- return NULL;
+ p++;
+ break;
+ }
+@@ -225,7 +240,7 @@ static char *get_name(char *name, char *p)
+ return p;
+ }
+
+-static int procnetdev_version(char *buf)
++int procnetdev_version(char *buf)
+ {
+ if (strstr(buf, "compressed"))
+ return 3;
+@@ -234,12 +249,12 @@ static int procnetdev_version(char *buf)
+ return 1;
+ }
+
+-static int get_dev_fields(char *bp, struct interface *ife)
++int get_dev_fields(char *bp, struct interface *ife)
+ {
+ switch (procnetdev_vsn) {
+ case 3:
+ sscanf(bp,
+- "%llu %llu %lu %lu %lu %lu %lu %lu %llu %llu %lu %lu %lu %lu %lu %lu",
++ "%Lu %Lu %lu %lu %lu %lu %lu %lu %Lu %Lu %lu %lu %lu %lu %lu %lu",
+ &ife->stats.rx_bytes,
+ &ife->stats.rx_packets,
+ &ife->stats.rx_errors,
+@@ -259,7 +274,7 @@ static int get_dev_fields(char *bp, struct interface *ife)
+ &ife->stats.tx_compressed);
+ break;
+ case 2:
+- sscanf(bp, "%llu %llu %lu %lu %lu %lu %llu %llu %lu %lu %lu %lu %lu",
++ sscanf(bp, "%Lu %Lu %lu %lu %lu %lu %Lu %Lu %lu %lu %lu %lu %lu",
+ &ife->stats.rx_bytes,
+ &ife->stats.rx_packets,
+ &ife->stats.rx_errors,
+@@ -277,7 +292,7 @@ static int get_dev_fields(char *bp, struct interface *ife)
+ ife->stats.rx_multicast = 0;
+ break;
+ case 1:
+- sscanf(bp, "%llu %lu %lu %lu %lu %llu %lu %lu %lu %lu %lu",
++ sscanf(bp, "%Lu %lu %lu %lu %lu %Lu %lu %lu %lu %lu %lu",
+ &ife->stats.rx_packets,
+ &ife->stats.rx_errors,
+ &ife->stats.rx_dropped,
+@@ -300,25 +315,21 @@ static int get_dev_fields(char *bp, struct interface *ife)
+
+ static int if_readlist_proc(char *target)
+ {
+- static int proc_read;
+ FILE *fh;
+ char buf[512];
+ struct interface *ife;
+ int err;
+
+- if (proc_read)
+- return 0;
+- if (!target)
+- proc_read = 1;
+-
+ fh = fopen(_PATH_PROCNET_DEV, "r");
+ if (!fh) {
+ fprintf(stderr, _("Warning: cannot open %s (%s). Limited output.\n"),
+- _PATH_PROCNET_DEV, strerror(errno));
+- return if_readconf();
+- }
+- fgets(buf, sizeof buf, fh); /* eat line */
+- fgets(buf, sizeof buf, fh);
++ _PATH_PROCNET_DEV, strerror(errno));
++ return -2;
++ }
++ if (fgets(buf, sizeof buf, fh))
++ /* eat line */;
++ if (fgets(buf, sizeof buf, fh))
++ /* eat line */;
+
+ #if 0 /* pretty, but can't cope with missing fields */
+ fmt = proc_gen_fmt(_PATH_PROCNET_DEV, 1, fh,
+@@ -349,8 +360,8 @@ static int if_readlist_proc(char *target)
+ err = 0;
+ while (fgets(buf, sizeof buf, fh)) {
+ char *s, name[IFNAMSIZ];
+- s = get_name(name, buf);
+- ife = add_interface(name);
++ s = get_name(name, buf);
++ ife = if_cache_add(name);
+ get_dev_fields(s, ife);
+ ife->statistics_valid = 1;
+ if (target && !strcmp(target,name))
+@@ -359,7 +370,6 @@ static int if_readlist_proc(char *target)
+ if (ferror(fh)) {
+ perror(_PATH_PROCNET_DEV);
+ err = -1;
+- proc_read = 0;
+ }
+
+ #if 0
+@@ -369,13 +379,23 @@ static int if_readlist_proc(char *target)
+ return err;
+ }
+
+-int if_readlist(void)
+-{
+- int err = if_readlist_proc(NULL);
+- if (!err)
+- err = if_readconf();
+- return err;
+-}
++int if_readlist(void)
++{
++ /* caller will/should check not to call this too often
++ * (i.e. only if if_list_all == 0
++ */
++ int proc_err, conf_err;
++
++ proc_err = if_readlist_proc(NULL);
++ conf_err = if_readconf();
++
++ if_list_all = 1;
++
++ if (proc_err < 0 && conf_err < 0)
++ return -1;
++ else
++ return 0;
++}
+
+ /* Support for fetching an IPX address */
+
+@@ -392,14 +412,14 @@ int if_fetch(struct interface *ife)
+ {
+ struct ifreq ifr;
+ int fd;
+- char *ifname = ife->name;
++ char *ifname = ife->name;
+
+- strcpy(ifr.ifr_name, ifname);
++ safe_strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
+ if (ioctl(skfd, SIOCGIFFLAGS, &ifr) < 0)
+ return (-1);
+ ife->flags = ifr.ifr_flags;
+
+- strcpy(ifr.ifr_name, ifname);
++ safe_strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
+ if (ioctl(skfd, SIOCGIFHWADDR, &ifr) < 0)
+ memset(ife->hwaddr, 0, 32);
+ else
+@@ -407,53 +427,47 @@ int if_fetch(struct interface *ife)
+
+ ife->type = ifr.ifr_hwaddr.sa_family;
+
+- strcpy(ifr.ifr_name, ifname);
+- if (ioctl(skfd, SIOCGIFMETRIC, &ifr) < 0)
+- ife->metric = 0;
+- else
+- ife->metric = ifr.ifr_metric;
+-
+- strcpy(ifr.ifr_name, ifname);
++ safe_strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
+ if (ioctl(skfd, SIOCGIFMTU, &ifr) < 0)
+ ife->mtu = 0;
+ else
+ ife->mtu = ifr.ifr_mtu;
+
+-#ifdef HAVE_HWSLIP
++#if HAVE_HWSLIP
+ if (ife->type == ARPHRD_SLIP || ife->type == ARPHRD_CSLIP ||
+ ife->type == ARPHRD_SLIP6 || ife->type == ARPHRD_CSLIP6 ||
+ ife->type == ARPHRD_ADAPT) {
+ #ifdef SIOCGOUTFILL
+- strcpy(ifr.ifr_name, ifname);
++ safe_strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
+ if (ioctl(skfd, SIOCGOUTFILL, &ifr) < 0)
+ ife->outfill = 0;
+ else
+- ife->outfill = (unsigned int) ifr.ifr_data;
++ ife->outfill = (unsigned long) ifr.ifr_data;
+ #endif
+ #ifdef SIOCGKEEPALIVE
+- strcpy(ifr.ifr_name, ifname);
++ safe_strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
+ if (ioctl(skfd, SIOCGKEEPALIVE, &ifr) < 0)
+ ife->keepalive = 0;
+ else
+- ife->keepalive = (unsigned int) ifr.ifr_data;
++ ife->keepalive = (unsigned long) ifr.ifr_data;
+ #endif
+ }
+ #endif
+
+- strcpy(ifr.ifr_name, ifname);
++ safe_strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
+ if (ioctl(skfd, SIOCGIFMAP, &ifr) < 0)
+ memset(&ife->map, 0, sizeof(struct ifmap));
+ else
+ memcpy(&ife->map, &ifr.ifr_map, sizeof(struct ifmap));
+
+- strcpy(ifr.ifr_name, ifname);
++ safe_strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
+ if (ioctl(skfd, SIOCGIFMAP, &ifr) < 0)
+ memset(&ife->map, 0, sizeof(struct ifmap));
+ else
+ ife->map = ifr.ifr_map;
+
+ #ifdef HAVE_TXQUEUELEN
+- strcpy(ifr.ifr_name, ifname);
++ safe_strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
+ if (ioctl(skfd, SIOCGIFTXQLEN, &ifr) < 0)
+ ife->tx_queue_len = -1; /* unknown value */
+ else
+@@ -466,24 +480,24 @@ int if_fetch(struct interface *ife)
+ /* IPv4 address? */
+ fd = get_socket_for_af(AF_INET);
+ if (fd >= 0) {
+- strcpy(ifr.ifr_name, ifname);
++ safe_strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
+ ifr.ifr_addr.sa_family = AF_INET;
+ if (ioctl(fd, SIOCGIFADDR, &ifr) == 0) {
+ ife->has_ip = 1;
+ ife->addr = ifr.ifr_addr;
+- strcpy(ifr.ifr_name, ifname);
++ safe_strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
+ if (ioctl(fd, SIOCGIFDSTADDR, &ifr) < 0)
+ memset(&ife->dstaddr, 0, sizeof(struct sockaddr));
+ else
+ ife->dstaddr = ifr.ifr_dstaddr;
+
+- strcpy(ifr.ifr_name, ifname);
++ safe_strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
+ if (ioctl(fd, SIOCGIFBRDADDR, &ifr) < 0)
+ memset(&ife->broadaddr, 0, sizeof(struct sockaddr));
+ else
+ ife->broadaddr = ifr.ifr_broadaddr;
+
+- strcpy(ifr.ifr_name, ifname);
++ safe_strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
+ if (ioctl(fd, SIOCGIFNETMASK, &ifr) < 0)
+ memset(&ife->netmask, 0, sizeof(struct sockaddr));
+ else
+@@ -497,7 +511,7 @@ int if_fetch(struct interface *ife)
+ /* DDP address maybe ? */
+ fd = get_socket_for_af(AF_APPLETALK);
+ if (fd >= 0) {
+- strcpy(ifr.ifr_name, ifname);
++ safe_strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
+ if (ioctl(fd, SIOCGIFADDR, &ifr) == 0) {
+ ife->ddpaddr = ifr.ifr_addr;
+ ife->has_ddp = 1;
+@@ -509,22 +523,22 @@ int if_fetch(struct interface *ife)
+ /* Look for IPX addresses with all framing types */
+ fd = get_socket_for_af(AF_IPX);
+ if (fd >= 0) {
+- strcpy(ifr.ifr_name, ifname);
++ safe_strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
+ if (!ipx_getaddr(fd, IPX_FRAME_ETHERII, &ifr)) {
+ ife->has_ipx_bb = 1;
+ ife->ipxaddr_bb = ifr.ifr_addr;
+ }
+- strcpy(ifr.ifr_name, ifname);
++ safe_strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
+ if (!ipx_getaddr(fd, IPX_FRAME_SNAP, &ifr)) {
+ ife->has_ipx_sn = 1;
+ ife->ipxaddr_sn = ifr.ifr_addr;
+ }
+- strcpy(ifr.ifr_name, ifname);
++ safe_strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
+ if (!ipx_getaddr(fd, IPX_FRAME_8023, &ifr)) {
+ ife->has_ipx_e3 = 1;
+ ife->ipxaddr_e3 = ifr.ifr_addr;
+ }
+- strcpy(ifr.ifr_name, ifname);
++ safe_strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
+ if (!ipx_getaddr(fd, IPX_FRAME_8022, &ifr)) {
+ ife->has_ipx_e2 = 1;
+ ife->ipxaddr_e2 = ifr.ifr_addr;
+@@ -536,7 +550,7 @@ int if_fetch(struct interface *ife)
+ /* Econet address maybe? */
+ fd = get_socket_for_af(AF_ECONET);
+ if (fd >= 0) {
+- strcpy(ifr.ifr_name, ifname);
++ safe_strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
+ if (ioctl(fd, SIOCGIFADDR, &ifr) == 0) {
+ ife->ecaddr = ifr.ifr_addr;
+ ife->has_econet = 1;
+@@ -548,29 +562,29 @@ int if_fetch(struct interface *ife)
+ }
+
+ int do_if_fetch(struct interface *ife)
+-{
++{
+ if (if_fetch(ife) < 0) {
+- char *errmsg;
+- if (errno == ENODEV) {
+- /* Give better error message for this case. */
+- errmsg = _("Device not found");
+- } else {
+- errmsg = strerror(errno);
++ char *errmsg;
++ if (errno == ENODEV) {
++ /* Give better error message for this case. */
++ errmsg = _("Device not found");
++ } else {
++ errmsg = strerror(errno);
+ }
+ fprintf(stderr, _("%s: error fetching interface information: %s\n"),
+ ife->name, errmsg);
+ return -1;
+ }
+- return 0;
++ return 0;
+ }
+
+ int do_if_print(struct interface *ife, void *cookie)
+ {
+ int *opt_a = (int *) cookie;
+- int res;
++ int res;
+
+- res = do_if_fetch(ife);
+- if (res >= 0) {
++ res = do_if_fetch(ife);
++ if (res >= 0) {
+ if ((ife->flags & IFF_UP) || *opt_a)
+ ife_print(ife);
+ }
+@@ -579,11 +593,11 @@ int do_if_print(struct interface *ife, void *cookie)
+
+ void ife_print_short(struct interface *ptr)
+ {
+- printf("%-5.5s ", ptr->name);
+- printf("%5d %3d", ptr->mtu, ptr->metric);
++ printf("%-8.8s ", ptr->name);
++ printf("%5d ", ptr->mtu);
+ /* If needed, display the interface statistics. */
+ if (ptr->statistics_valid) {
+- printf("%8llu %6lu %6lu %6lu",
++ printf("%8llu %6lu %6lu %-6lu ",
+ ptr->stats.rx_packets, ptr->stats.rx_errors,
+ ptr->stats.rx_dropped, ptr->stats.rx_fifo_errors);
+ printf("%8llu %6lu %6lu %6lu ",
+@@ -636,8 +650,9 @@ void ife_print_long(struct interface *ptr)
+ int hf;
+ int can_compress = 0;
+ unsigned long long rx, tx, short_rx, short_tx;
+- char Rext[5]="b";
+- char Text[5]="b";
++ const char *Rext = "B";
++ const char *Text = "B";
++ static char flags[200];
+
+ #if HAVE_AFIPX
+ static struct aftype *ipxtype = NULL;
+@@ -650,7 +665,7 @@ void ife_print_long(struct interface *ptr)
+ #endif
+ #if HAVE_AFINET6
+ FILE *f;
+- char addr6[40], devname[20];
++ char addr6[40], devname[21];
+ struct sockaddr_in6 sap;
+ int plen, scope, dad_status, if_idx;
+ extern struct aftype inet6_aftype;
+@@ -663,39 +678,79 @@ void ife_print_long(struct interface *ptr)
+
+ hf = ptr->type;
+
++#if HAVE_HWSLIP
+ if (hf == ARPHRD_CSLIP || hf == ARPHRD_CSLIP6)
+ can_compress = 1;
++#endif
+
+ hw = get_hwntype(hf);
+ if (hw == NULL)
+ hw = get_hwntype(-1);
+
+- printf(_("%-9.9s Link encap:%s "), ptr->name, hw->title);
+- /* For some hardware types (eg Ash, ATM) we don't print the
+- hardware address if it's null. */
+- if (hw->print != NULL && (! (hw_null_address(hw, ptr->hwaddr) &&
+- hw->suppress_null_addr)))
+- printf(_("HWaddr %s "), hw->print(ptr->hwaddr));
+-#ifdef IFF_PORTSEL
+- if (ptr->flags & IFF_PORTSEL) {
+- printf(_("Media:%s"), if_port_text[ptr->map.port][0]);
+- if (ptr->flags & IFF_AUTOMEDIA)
+- printf(_("(auto)"));
+- }
++ sprintf(flags, "flags=%d<", ptr->flags);
++ /* DONT FORGET TO ADD THE FLAGS IN ife_print_short, too */
++ if (ptr->flags == 0)
++ strcat(flags,">");
++ if (ptr->flags & IFF_UP)
++ strcat(flags,_("UP,"));
++ if (ptr->flags & IFF_BROADCAST)
++ strcat(flags,_("BROADCAST,"));
++ if (ptr->flags & IFF_DEBUG)
++ strcat(flags,_("DEBUG,"));
++ if (ptr->flags & IFF_LOOPBACK)
++ strcat(flags,_("LOOPBACK,"));
++ if (ptr->flags & IFF_POINTOPOINT)
++ strcat(flags,_("POINTOPOINT,"));
++ if (ptr->flags & IFF_NOTRAILERS)
++ strcat(flags,_("NOTRAILERS,"));
++ if (ptr->flags & IFF_RUNNING)
++ strcat(flags,_("RUNNING,"));
++ if (ptr->flags & IFF_NOARP)
++ strcat(flags,_("NOARP,"));
++ if (ptr->flags & IFF_PROMISC)
++ strcat(flags,_("PROMISC,"));
++ if (ptr->flags & IFF_ALLMULTI)
++ strcat(flags,_("ALLMULTI,"));
++ if (ptr->flags & IFF_SLAVE)
++ strcat(flags,_("SLAVE,"));
++ if (ptr->flags & IFF_MASTER)
++ strcat(flags,_("MASTER,"));
++ if (ptr->flags & IFF_MULTICAST)
++ strcat(flags,_("MULTICAST,"));
++#ifdef HAVE_DYNAMIC
++ if (ptr->flags & IFF_DYNAMIC)
++ strcat(flags,_("DYNAMIC,"));
++#endif
++ /* DONT FORGET TO ADD THE FLAGS IN ife_print_short */
++ if (flags[strlen(flags)-1] == ',')
++ flags[strlen(flags)-1] = '>';
++ else
++ flags[strlen(flags)-1] = 0;
++
++
++ printf(_("%s: %s mtu %d"),
++ ptr->name, flags, ptr->mtu);
++#ifdef SIOCSKEEPALIVE
++ if (ptr->outfill || ptr->keepalive)
++ printf(_(" outfill %d keepalive %d"),
++ ptr->outfill, ptr->keepalive);
+ #endif
+ printf("\n");
+
++
++
+ #if HAVE_AFINET
+ if (ptr->has_ip) {
+- printf(_(" %s addr:%s "), ap->name,
++ printf(_(" %s %s"), ap->name,
+ ap->sprint(&ptr->addr, 1));
+- if (ptr->flags & IFF_POINTOPOINT) {
+- printf(_(" P-t-P:%s "), ap->sprint(&ptr->dstaddr, 1));
+- }
++ printf(_(" netmask %s"), ap->sprint(&ptr->netmask, 1));
+ if (ptr->flags & IFF_BROADCAST) {
+- printf(_(" Bcast:%s "), ap->sprint(&ptr->broadaddr, 1));
++ printf(_(" broadcast %s"), ap->sprint(&ptr->broadaddr, 1));
+ }
+- printf(_(" Mask:%s\n"), ap->sprint(&ptr->netmask, 1));
++ if (ptr->flags & IFF_POINTOPOINT) {
++ printf(_(" destination %s"), ap->sprint(&ptr->dstaddr, 1));
++ }
++ printf("\n");
+ }
+ #endif
+
+@@ -703,7 +758,7 @@ void ife_print_long(struct interface *ptr)
+ /* FIXME: should be integrated into interface.c. */
+
+ if ((f = fopen(_PATH_PROCNET_IFINET6, "r")) != NULL) {
+- while (fscanf(f, "%4s%4s%4s%4s%4s%4s%4s%4s %02x %02x %02x %02x %20s\n",
++ while (fscanf(f, "%4s%4s%4s%4s%4s%4s%4s%4s %08x %02x %02x %02x %20s\n",
+ addr6p[0], addr6p[1], addr6p[2], addr6p[3],
+ addr6p[4], addr6p[5], addr6p[6], addr6p[7],
+ &if_idx, &plen, &scope, &dad_status, devname) != EOF) {
+@@ -712,29 +767,30 @@ void ife_print_long(struct interface *ptr)
+ addr6p[0], addr6p[1], addr6p[2], addr6p[3],
+ addr6p[4], addr6p[5], addr6p[6], addr6p[7]);
+ inet6_aftype.input(1, addr6, (struct sockaddr *) &sap);
+- printf(_(" inet6 addr: %s/%d"),
+- inet6_aftype.sprint((struct sockaddr *) &sap, 1), plen);
+- printf(_(" Scope:"));
+- switch (scope) {
+- case 0:
+- printf(_("Global"));
+- break;
+- case IPV6_ADDR_LINKLOCAL:
+- printf(_("Link"));
+- break;
+- case IPV6_ADDR_SITELOCAL:
+- printf(_("Site"));
+- break;
+- case IPV6_ADDR_COMPATv4:
+- printf(_("Compat"));
+- break;
+- case IPV6_ADDR_LOOPBACK:
+- printf(_("Host"));
+- break;
+- default:
+- printf(_("Unknown"));
++ printf(_(" %s %s prefixlen %d"),
++ inet6_aftype.name,
++ inet6_aftype.sprint((struct sockaddr *) &sap, 1),
++ plen);
++ printf(_(" scopeid 0x%x"), scope);
++
++ flags[0] = '<'; flags[1] = 0;
++ if (scope & IPV6_ADDR_COMPATv4) {
++ strcat(flags, _("compat,"));
++ scope -= IPV6_ADDR_COMPATv4;
+ }
+- printf("\n");
++ if (scope == 0)
++ strcat(flags, _("global,"));
++ if (scope & IPV6_ADDR_LINKLOCAL)
++ strcat(flags, _("link,"));
++ if (scope & IPV6_ADDR_SITELOCAL)
++ strcat(flags, _("site,"));
++ if (scope & IPV6_ADDR_LOOPBACK)
++ strcat(flags, _("host,"));
++ if (flags[strlen(flags)-1] == ',')
++ flags[strlen(flags)-1] = '>';
++ else
++ flags[strlen(flags)-1] = 0;
++ printf("%s\n", flags);
+ }
+ }
+ fclose(f);
+@@ -747,17 +803,17 @@ void ife_print_long(struct interface *ptr)
+
+ if (ipxtype != NULL) {
+ if (ptr->has_ipx_bb)
+- printf(_(" IPX/Ethernet II addr:%s\n"),
+- ipxtype->sprint(&ptr->ipxaddr_bb, 1));
++ printf(_(" %s Ethernet-II %s\n"),
++ ipxtype->name, ipxtype->sprint(&ptr->ipxaddr_bb, 1));
+ if (ptr->has_ipx_sn)
+- printf(_(" IPX/Ethernet SNAP addr:%s\n"),
+- ipxtype->sprint(&ptr->ipxaddr_sn, 1));
++ printf(_(" %s Ethernet-SNAP %s\n"),
++ ipxtype->name, ipxtype->sprint(&ptr->ipxaddr_sn, 1));
+ if (ptr->has_ipx_e2)
+- printf(_(" IPX/Ethernet 802.2 addr:%s\n"),
+- ipxtype->sprint(&ptr->ipxaddr_e2, 1));
++ printf(_(" %s Ethernet802.2 %s\n"),
++ ipxtype->name, ipxtype->sprint(&ptr->ipxaddr_e2, 1));
+ if (ptr->has_ipx_e3)
+- printf(_(" IPX/Ethernet 802.3 addr:%s\n"),
+- ipxtype->sprint(&ptr->ipxaddr_e3, 1));
++ printf(_(" %s Ethernet802.3 %s\n"),
++ ipxtype->name, ipxtype->sprint(&ptr->ipxaddr_e3, 1));
+ }
+ #endif
+
+@@ -766,7 +822,7 @@ void ife_print_long(struct interface *ptr)
+ ddptype = get_afntype(AF_APPLETALK);
+ if (ddptype != NULL) {
+ if (ptr->has_ddp)
+- printf(_(" EtherTalk Phase 2 addr:%s\n"), ddptype->sprint(&ptr->ddpaddr, 1));
++ printf(_(" %s %s\n"), ddptype->name, ddptype->sprint(&ptr->ddpaddr, 1));
+ }
+ #endif
+
+@@ -775,53 +831,30 @@ void ife_print_long(struct interface *ptr)
+ ectype = get_afntype(AF_ECONET);
+ if (ectype != NULL) {
+ if (ptr->has_econet)
+- printf(_(" econet addr:%s\n"), ectype->sprint(&ptr->ecaddr, 1));
++ printf(_(" %s %s\n"), ectype->name, ectype->sprint(&ptr->ecaddr, 1));
+ }
+ #endif
+
+- printf(" ");
+- /* DONT FORGET TO ADD THE FLAGS IN ife_print_short, too */
+- if (ptr->flags == 0)
+- printf(_("[NO FLAGS] "));
+- if (ptr->flags & IFF_UP)
+- printf(_("UP "));
+- if (ptr->flags & IFF_BROADCAST)
+- printf(_("BROADCAST "));
+- if (ptr->flags & IFF_DEBUG)
+- printf(_("DEBUG "));
+- if (ptr->flags & IFF_LOOPBACK)
+- printf(_("LOOPBACK "));
+- if (ptr->flags & IFF_POINTOPOINT)
+- printf(_("POINTOPOINT "));
+- if (ptr->flags & IFF_NOTRAILERS)
+- printf(_("NOTRAILERS "));
+- if (ptr->flags & IFF_RUNNING)
+- printf(_("RUNNING "));
+- if (ptr->flags & IFF_NOARP)
+- printf(_("NOARP "));
+- if (ptr->flags & IFF_PROMISC)
+- printf(_("PROMISC "));
+- if (ptr->flags & IFF_ALLMULTI)
+- printf(_("ALLMULTI "));
+- if (ptr->flags & IFF_SLAVE)
+- printf(_("SLAVE "));
+- if (ptr->flags & IFF_MASTER)
+- printf(_("MASTER "));
+- if (ptr->flags & IFF_MULTICAST)
+- printf(_("MULTICAST "));
+-#ifdef HAVE_DYNAMIC
+- if (ptr->flags & IFF_DYNAMIC)
+- printf(_("DYNAMIC "));
+-#endif
+- /* DONT FORGET TO ADD THE FLAGS IN ife_print_short */
+- printf(_(" MTU:%d Metric:%d"),
+- ptr->mtu, ptr->metric ? ptr->metric : 1);
+-#ifdef SIOCSKEEPALIVE
+- if (ptr->outfill || ptr->keepalive)
+- printf(_(" Outfill:%d Keepalive:%d"),
+- ptr->outfill, ptr->keepalive);
++ /* For some hardware types (eg Ash, ATM) we don't print the
++ hardware address if it's null. */
++ if (hw->print != NULL && (! (hw_null_address(hw, ptr->hwaddr) &&
++ hw->suppress_null_addr)))
++ printf(_(" %s %s"), hw->name, hw->print(ptr->hwaddr));
++ else
++ printf(_(" %s"), hw->name);
++ if (ptr->tx_queue_len != -1)
++ printf(_(" txqueuelen %d"), ptr->tx_queue_len);
++ printf(" (%s)\n", hw->title);
++
++#ifdef IFF_PORTSEL
++ if (ptr->flags & IFF_PORTSEL) {
++ printf(_(" media %s"), if_port_text[ptr->map.port][0]);
++ if (ptr->flags & IFF_AUTOMEDIA)
++ printf(_("autoselect"));
++ printf("\n");
++ }
+ #endif
+- printf("\n");
++
+
+ /* If needed, display the interface statistics. */
+
+@@ -830,55 +863,87 @@ void ife_print_long(struct interface *ptr)
+ * not for the aliases, although strictly speaking they're shared
+ * by all addresses.
+ */
+- printf(" ");
+-
+- printf(_("RX packets:%llu errors:%lu dropped:%lu overruns:%lu frame:%lu\n"),
+- ptr->stats.rx_packets, ptr->stats.rx_errors,
+- ptr->stats.rx_dropped, ptr->stats.rx_fifo_errors,
+- ptr->stats.rx_frame_errors);
+- if (can_compress)
+- printf(_(" compressed:%lu\n"), ptr->stats.rx_compressed);
+-
+- rx = ptr->stats.rx_bytes;
++ rx = ptr->stats.rx_bytes;
++ short_rx = rx * 10;
++ if (rx > 1125899906842624ull) {
++ short_rx /= 1125899906842624ull;
++ Rext = "PiB";
++ } else if (rx > 1099511627776ull) {
++ short_rx /= 1099511627776ull;
++ Rext = "TiB";
++ } else if (rx > 1073741824ull) {
++ short_rx /= 1073741824ull;
++ Rext = "GiB";
++ } else if (rx > 1048576) {
++ short_rx /= 1048576;
++ Rext = "MiB";
++ } else if (rx > 1024) {
++ short_rx /= 1024;
++ Rext = "KiB";
++ }
+ tx = ptr->stats.tx_bytes;
+- short_rx = rx * 10;
+ short_tx = tx * 10;
+- if (rx > 1048576) { short_rx /= 1048576; strcpy(Rext, "Mb"); }
+- else if (rx > 1024) { short_rx /= 1024; strcpy(Rext, "Kb"); }
+- if (tx > 1048576) { short_tx /= 1048576; strcpy(Text, "Mb"); }
+- else if (tx > 1024) { short_tx /= 1024; strcpy(Text, "Kb"); }
++ if (tx > 1125899906842624ull) {
++ short_tx /= 1125899906842624ull;
++ Text = "PiB";
++ } else if (tx > 1099511627776ull) {
++ short_tx /= 1099511627776ull;
++ Text = "TiB";
++ } else if (tx > 1073741824ull) {
++ short_tx /= 1073741824ull;
++ Text = "GiB";
++ } else if (tx > 1048576) {
++ short_tx /= 1048576;
++ Text = "MiB";
++ } else if (tx > 1024) {
++ short_tx /= 1024;
++ Text = "KiB";
++ }
+
+- printf(" ");
+- printf(_("TX packets:%llu errors:%lu dropped:%lu overruns:%lu carrier:%lu\n"),
+- ptr->stats.tx_packets, ptr->stats.tx_errors,
++ printf(" ");
++ printf(_("RX packets %llu bytes %llu (%lu.%lu %s)\n"),
++ ptr->stats.rx_packets,
++ rx, (unsigned long)(short_rx / 10),
++ (unsigned long)(short_rx % 10), Rext);
++ if (can_compress) {
++ printf(" ");
++ printf(_("RX compressed:%lu\n"), ptr->stats.rx_compressed);
++ }
++ printf(" ");
++ printf(_("RX errors %lu dropped %lu overruns %lu frame %lu\n"),
++ ptr->stats.rx_errors, ptr->stats.rx_dropped,
++ ptr->stats.rx_fifo_errors, ptr->stats.rx_frame_errors);
++
++
++ printf(" ");
++ printf(_("TX packets %llu bytes %llu (%lu.%lu %s)\n"),
++ ptr->stats.tx_packets,
++ tx, (unsigned long)(short_tx / 10),
++ (unsigned long)(short_tx % 10), Text);
++ if (can_compress) {
++ printf(" ");
++ printf(_("TX compressed %lu\n"), ptr->stats.tx_compressed);
++ }
++ printf(" ");
++ printf(_("TX errors %lu dropped %lu overruns %lu carrier %lu collisions %lu\n"),
++ ptr->stats.tx_errors,
+ ptr->stats.tx_dropped, ptr->stats.tx_fifo_errors,
+- ptr->stats.tx_carrier_errors);
+- printf(_(" collisions:%lu "), ptr->stats.collisions);
+- if (can_compress)
+- printf(_("compressed:%lu "), ptr->stats.tx_compressed);
+- if (ptr->tx_queue_len != -1)
+- printf(_("txqueuelen:%d "), ptr->tx_queue_len);
+- printf("\n ");
+- printf(_("RX bytes:%llu (%lu.%lu %s) TX bytes:%llu (%lu.%lu %s)\n"),
+- rx, (unsigned long)(short_rx / 10),
+- (unsigned long)(short_rx % 10), Rext,
+- tx, (unsigned long)(short_tx / 10),
+- (unsigned long)(short_tx % 10), Text);
++ ptr->stats.tx_carrier_errors, ptr->stats.collisions);
+ }
+
+ if ((ptr->map.irq || ptr->map.mem_start || ptr->map.dma ||
+- ptr->map.base_addr)) {
+- printf(" ");
++ ptr->map.base_addr >= 0x100)) {
++ printf(" device ");
+ if (ptr->map.irq)
+- printf(_("Interrupt:%d "), ptr->map.irq);
+- if (ptr->map.base_addr >= 0x100) /* Only print devices using it for
++ printf(_("interrupt %d "), ptr->map.irq);
++ if (ptr->map.base_addr >= 0x100) /* Only print devices using it for
+ I/O maps */
+- printf(_("Base address:0x%x "), ptr->map.base_addr);
++ printf(_("base 0x%x "), ptr->map.base_addr);
+ if (ptr->map.mem_start) {
+- printf(_("Memory:%lx-%lx "), ptr->map.mem_start, ptr->map.mem_end);
++ printf(_("memory 0x%lx-%lx "), ptr->map.mem_start, ptr->map.mem_end);
+ }
+ if (ptr->map.dma)
+- printf(_("DMA chan:%x "), ptr->map.dma);
++ printf(_(" dma 0x%x"), ptr->map.dma);
+ printf("\n");
+ }
+ printf("\n");
+diff --git a/lib/ipx.c b/lib/ipx.c
+index 0e760a3..837788c 100644
+--- a/lib/ipx.c
++++ b/lib/ipx.c
+@@ -42,7 +42,7 @@
+ #endif
+
+ /* Display a ipx domain address. */
+-static char *IPX_print(unsigned char *ptr)
++static const char *IPX_print(const char *ptr)
+ {
+ static char buff[64];
+ struct sockaddr_ipx *sipx = (struct sockaddr_ipx *) (ptr - 2);
+@@ -73,7 +73,7 @@ static char *IPX_print(unsigned char *ptr)
+
+
+ /* Display a ipx domain address. */
+-static char *IPX_sprint(struct sockaddr *sap, int numeric)
++static const char *IPX_sprint(struct sockaddr *sap, int numeric)
+ {
+ static char buf[64];
+
+@@ -87,12 +87,10 @@ static int IPX_getsock(char *bufp, struct sockaddr *sap)
+ {
+ char *sp = bufp, *bp;
+ unsigned int i;
+- unsigned char val;
+ struct sockaddr_ipx *sipx = (struct sockaddr_ipx *) sap;
+
+ sipx->sipx_port = 0;
+
+- val = 0;
+ bp = (char *) sipx->sipx_node;
+ for (i = 0; i < sizeof(sipx->sipx_node); i++) {
+ *sp = toupper(*sp);
+@@ -133,6 +131,9 @@ static int IPX_input(int type, char *bufp, struct sockaddr *sap)
+ char *ep;
+ int nbo;
+
++ if (!sai)
++ return (-1);
++
+ sai->sipx_family = AF_IPX;
+ sai->sipx_network = htonl(0);
+ sai->sipx_node[0] = sai->sipx_node[1] = sai->sipx_node[2] =
+diff --git a/lib/ipx_gr.c b/lib/ipx_gr.c
+index 3d7ef1d..09c8dcd 100644
+--- a/lib/ipx_gr.c
++++ b/lib/ipx_gr.c
+@@ -27,6 +27,7 @@
+ #include "net-support.h"
+ #include "pathnames.h"
+ #include "intl.h"
++#include "util.h"
+
+ /* UGLY */
+
+@@ -38,25 +39,32 @@ int IPX_rprint(int options)
+ char net[128], router_net[128];
+ char router_node[128];
+ int num;
+- FILE *fp = fopen(_PATH_PROCNET_IPX_ROUTE, "r");
++ FILE *fp;
+ struct aftype *ap;
+ struct sockaddr sa;
+
+- if ((ap = get_afntype(AF_IPX)) == NULL) {
+- EINTERN("lib/ipx_rt.c", "AF_IPX missing");
+- return (-1);
++ fp = fopen(_PATH_PROCNET_IPX_ROUTE1, "r");
++
++ if (!fp) {
++ fp = fopen(_PATH_PROCNET_IPX_ROUTE2, "r");
+ }
+
+ if (!fp) {
+- perror(_PATH_PROCNET_IPX_ROUTE);
+- printf(_("IPX not configured in this system.\n"));
++ perror(NULL);
++ printf(_("IPX routing not in file %s or %s found.\n"), _PATH_PROCNET_IPX_ROUTE1, _PATH_PROCNET_IPX_ROUTE2);
+ return 1;
+ }
+
++ if ((ap = get_afntype(AF_IPX)) == NULL) {
++ EINTERN("lib/ipx_rt.c", "AF_IPX missing");
++ return (-1);
++ }
++
+ printf(_("Kernel IPX routing table\n")); /* xxx */
+ printf(_("Destination Router Net Router Node\n"));
+
+- fgets(buff, 1023, fp);
++ if (fgets(buff, 1023, fp))
++ /* eat line */;
+
+ while (fgets(buff, 1023, fp)) {
+ num = sscanf(buff, "%s %s %s", net, router_net, router_node);
+@@ -65,15 +73,15 @@ int IPX_rprint(int options)
+
+ /* Fetch and resolve the Destination */
+ (void) ap->input(5, net, &sa);
+- strcpy(net, ap->sprint(&sa, numeric));
++ safe_strncpy(net, ap->sprint(&sa, numeric), sizeof(net));
+
+ /* Fetch and resolve the Router Net */
+ (void) ap->input(5, router_net, &sa);
+- strcpy(router_net, ap->sprint(&sa, numeric));
++ safe_strncpy(router_net, ap->sprint(&sa, numeric), sizeof(router_net));
+
+ /* Fetch and resolve the Router Node */
+ (void) ap->input(2, router_node, &sa);
+- strcpy(router_node, ap->sprint(&sa, numeric));
++ safe_strncpy(router_node, ap->sprint(&sa, numeric), sizeof(router_node));
+
+ printf("%-25s %-25s %-25s\n", net, router_net, router_node);
+ }
+diff --git a/lib/irda.c b/lib/irda.c
+index fa147fe..3658673 100644
+--- a/lib/irda.c
++++ b/lib/irda.c
+@@ -1,29 +1,31 @@
+ /*********************************************************************
+- *
++ *
+ * Filename: irda.c
+- * Version: 0.1
+- * Description: A first attempt to make ifconfig understand IrDA
++ * Version: 0.2
++ * Description: A second attempt to make ifconfig understand IrDA
+ * Status: Experimental.
+ * Author: Dag Brattli <dagb@cs.uit.no>
+ * Created at: Wed Apr 21 09:03:09 1999
+ * Modified at: Wed Apr 21 09:17:05 1999
+ * Modified by: Dag Brattli <dagb@cs.uit.no>
+- *
+- * This program is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU General Public License as
+- * published by the Free Software Foundation; either version 2 of
++ * Modified at: Wed May 1 11:51:44 CEST 2002
++ * Modified by: Christoph Bartelmus <christoph@bartelmus.de>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+- *
++ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+- *
++ *
+ ********************************************************************/
+
+ #include "config.h"
+@@ -57,11 +59,11 @@
+ * Print hardware address of interface
+ *
+ */
+-static char *irda_print(unsigned char *ptr)
++static const char *irda_print(const char *ptr)
+ {
+- static char buff[8];
++ static char buff[12];
+
+- sprintf(&buff[strlen(buff)], "%02x:%02x:%02x:%02x", ptr[3], ptr[2],
++ snprintf(buff, 12, "%02x:%02x:%02x:%02x", ptr[3], ptr[2],
+ ptr[1], ptr[0]);
+
+ return (buff);
+diff --git a/lib/loopback.c b/lib/loopback.c
+index 0f08ac2..1b7e9cc 100644
+--- a/lib/loopback.c
++++ b/lib/loopback.c
+@@ -32,7 +32,7 @@
+ #include "util.h"
+
+ /* Display an UNSPEC address. */
+-static char *pr_unspec(unsigned char *ptr)
++static const char *pr_unspec(const char *ptr)
+ {
+ static char buff[64];
+ char *pos;
+diff --git a/lib/masq_info.c b/lib/masq_info.c
+index 45ca689..3a97a98 100644
+--- a/lib/masq_info.c
++++ b/lib/masq_info.c
+@@ -6,7 +6,7 @@
+ * NET-3 Networking Distribution for the LINUX operating
+ * system. (net-tools, net-drivers)
+ *
+- * Version: $Id: masq_info.c,v 1.7 2000/10/08 01:00:44 ecki Exp $
++ * Version: $Id: masq_info.c,v 1.8 2009/09/06 22:52:01 vapier Exp $
+ *
+ * Author: Bernd 'eckes' Eckenfels <net-tools@lina.inka.de>
+ * Copyright 1999 Bernd Eckenfels, Germany
+@@ -119,7 +119,9 @@ static int read_masqinfo(FILE * f, struct masq *mslist, int nmslist)
+ ms->src.sin_family = AF_INET;
+ ms->dst.sin_family = AF_INET;
+
+- if (strcmp("TCP", buf) == 0)
++ if (strcmp("IP", buf) == 0)
++ ms->proto = "ip";
++ else if (strcmp("TCP", buf) == 0)
+ ms->proto = "tcp";
+ else if (strcmp("UDP", buf) == 0)
+ ms->proto = "udp";
+@@ -206,10 +208,9 @@ int ip_masq_info(int numeric_host, int numeric_port, int ext)
+ }
+ for (i = 0; i < ntotal; i++)
+ print_masq(&(mslist[i]), numeric_host, numeric_port, ext);
+- if (mslist)
+- free(mslist);
+-
+ }
++
++ free(mslist);
+ return 0;
+ }
+ #endif
+diff --git a/lib/net-features.h b/lib/net-features.h
+index 0de2730..569f4a5 100644
+--- a/lib/net-features.h
++++ b/lib/net-features.h
+@@ -20,7 +20,7 @@
+ * your option) any later version.
+ */
+
+-/*
++/*
+ * This needs to be included AFTER the KErnel Header Files
+ * one of the FEATURE_ should be defined to get the Feature Variable
+ * definition included
+@@ -117,6 +117,9 @@ static char *Features =
+ "-I18N"
+ #endif /* I18N */
+
++#if HAVE_SELINUX
++" +SELINUX"
++#endif
+
+ "\nAF: "
+ #ifdef DFLT_AF
+@@ -183,6 +186,12 @@ static char *Features =
+ "-"
+ #endif
+ "ROSE "
++#if HAVE_AFBLUETOOTH
++"+"
++#else
++"-"
++#endif
++"BLUETOOTH"
+
+ "\nHW: "
+
+@@ -295,6 +304,13 @@ static char *Features =
+ "-"
+ #endif
+ "HDLC/LAPB "
++
++#if HAVE_HWEUI64
++"+"
++#else
++"-"
++#endif
++"EUI64 "
+ ;
+
+
+diff --git a/lib/net-support.h b/lib/net-support.h
+index 568fe81..0841170 100644
+--- a/lib/net-support.h
++++ b/lib/net-support.h
+@@ -38,15 +38,15 @@ struct aftype {
+ char *title;
+ int af;
+ int alen;
+- char *(*print) (unsigned char *);
+- char *(*sprint) (struct sockaddr *, int numeric);
++ const char *(*print) (const char *);
++ const char *(*sprint) (struct sockaddr *, int numeric);
+ int (*input) (int type, char *bufp, struct sockaddr *);
+ void (*herror) (char *text);
+ int (*rprint) (int options);
+ int (*rinput) (int typ, int ext, char **argv);
+
+ /* may modify src */
+- int (*getmask) (char *src, struct sockaddr * mask, char *name);
++ int (*getmask) (char *src, struct sockaddr *mask, char *name);
+
+ int fd;
+ char *flag_file;
+@@ -60,7 +60,7 @@ struct hwtype {
+ char *title;
+ int type;
+ int alen;
+- char *(*print) (unsigned char *);
++ const char *(*print) (const char *);
+ int (*input) (char *, struct sockaddr *);
+ int (*activate) (int fd);
+ int suppress_null_addr;
+@@ -119,11 +119,12 @@ extern int IPX_rinput(int action, int flags, char **argv);
+ extern int NETROM_rinput(int action, int flags, char **argv);
+ extern int AX25_rinput(int action, int flags, char **argv);
+ extern int X25_rinput(int action, int flags, char **argv);
++extern int ROSE_rinput(int action, int flags, char **argv);
+
+ extern int aftrans_opt(const char *arg);
+ extern void aftrans_def(char *tool, char *argv0, char *dflt);
+
+-extern char *get_sname(int socknumber, char *proto, int numeric);
++extern const char *get_sname(int socknumber, const char *proto, int numeric);
+
+ extern int flag_unx;
+ extern int flag_ipx;
+@@ -131,14 +132,16 @@ extern int flag_ax25;
+ extern int flag_ddp;
+ extern int flag_netrom;
+ extern int flag_x25;
++extern int flag_rose;
+ extern int flag_inet;
+ extern int flag_inet6;
++extern int flag_bluetooth;
+
+-extern char afname[];
++extern char afname[256];
+
+ #define AFTRANS_OPTS \
+ {"ax25", 0, 0, 1}, \
+- {"x25", 0, 0, 1}, \
++ {"x25", 0, 0, 1}, \
+ {"ip", 0, 0, 1}, \
+ {"ipx", 0, 0, 1}, \
+ {"appletalk", 0, 0, 1}, \
+@@ -146,9 +149,11 @@ extern char afname[];
+ {"inet", 0, 0, 1}, \
+ {"inet6", 0, 0, 1}, \
+ {"ddp", 0, 0, 1}, \
++ {"rose", 0, 0, 1}, \
+ {"unix", 0, 0, 1}, \
++ {"bluetooth", 0, 0, 1}, \
+ {"tcpip", 0, 0, 1}
+-#define AFTRANS_CNT 11
++#define AFTRANS_CNT 12
+
+ #define EINTERN(file, text) fprintf(stderr, \
+ _("%s: Internal Error `%s'.\n"),file,text);
+@@ -163,8 +168,8 @@ extern char afname[];
+ #define E_NOTFOUND 8
+ #define E_SOCK 7
+ #define E_LOOKUP 6
+-#define E_VERSION 5
+-#define E_USAGE 4
++#define E_VERSION EXIT_SUCCESS
++#define E_USAGE EXIT_SUCCESS
+ #define E_OPTERR 3
+ #define E_INTERN 2
+ #define E_NOSUPP 1
+@@ -234,7 +239,7 @@ extern char afname[];
+ /* this is a 2.0.36 flag from /usr/src/linux/include/linux/route.h */
+ #define RTF_NOTCACHED 0x0400 /* this route isn't cached */
+
+-#ifdef HAVE_AFECONET
++#if HAVE_AFECONET
+ #ifndef AF_ECONET
+ #define AF_ECONET 19 /* Acorn Econet */
+ #endif
+diff --git a/lib/netrom.c b/lib/netrom.c
+index 1de9dc3..dfe1ae3 100644
+--- a/lib/netrom.c
++++ b/lib/netrom.c
+@@ -11,7 +11,7 @@
+ *
+ * Author: Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org>
+ * Copyright 1993 MicroWalt Corporation
+- *
++ *
+ * Changes:
+ * 980701 {1.21} Arnaldo Carvalho de Melo - GNU gettext instead of catgets,
+ * strncpy instead of strcpy for
+@@ -52,7 +52,7 @@ static char netrom_errmsg[128];
+
+ extern struct aftype netrom_aftype;
+
+-static char *NETROM_print(unsigned char *ptr)
++static const char *NETROM_print(const char *ptr)
+ {
+ static char buff[8];
+ int i;
+@@ -71,7 +71,7 @@ static char *NETROM_print(unsigned char *ptr)
+
+
+ /* Display an AX.25 socket address. */
+-static char *NETROM_sprint(struct sockaddr *sap, int numeric)
++static const char *NETROM_sprint(struct sockaddr *sap, int numeric)
+ {
+ char buf[64];
+ if (sap->sa_family == 0xFFFF || sap->sa_family == 0)
+@@ -79,10 +79,15 @@ static char *NETROM_sprint(struct sockaddr *sap, int numeric)
+ return (NETROM_print(((struct sockaddr_ax25 *) sap)->sax25_call.ax25_call));
+ }
+
++#ifdef DEBUG
++#define _DEBUG 1
++#else
++#define _DEBUG 0
++#endif
+
+ static int NETROM_input(int type, char *bufp, struct sockaddr *sap)
+ {
+- unsigned char *ptr;
++ char *ptr;
+ char *orig, c;
+ unsigned int i;
+
+@@ -98,9 +103,8 @@ static int NETROM_input(int type, char *bufp, struct sockaddr *sap)
+ c = toupper(c);
+ if (!(isupper(c) || isdigit(c))) {
+ safe_strncpy(netrom_errmsg, _("Invalid callsign"), sizeof(netrom_errmsg));
+-#ifdef DEBUG
+- fprintf(stderr, "netrom_input(%s): %s !\n", netrom_errmsg, orig);
+-#endif
++ if (_DEBUG)
++ fprintf(stderr, "netrom_input(%s): %s !\n", netrom_errmsg, orig);
+ errno = EINVAL;
+ return (-1);
+ }
+@@ -111,9 +115,8 @@ static int NETROM_input(int type, char *bufp, struct sockaddr *sap)
+ /* Callsign too long? */
+ if ((i == 6) && (*bufp != '-') && (*bufp != '\0')) {
+ safe_strncpy(netrom_errmsg, _("Callsign too long"), sizeof(netrom_errmsg));
+-#ifdef DEBUG
+- fprintf(stderr, "netrom_input(%s): %s !\n", netrom_errmsg, orig);
+-#endif
++ if (_DEBUG)
++ fprintf(stderr, "netrom_input(%s): %s !\n", netrom_errmsg, orig);
+ errno = E2BIG;
+ return (-1);
+ }
+@@ -131,12 +134,12 @@ static int NETROM_input(int type, char *bufp, struct sockaddr *sap)
+ }
+
+ /* All done. */
+-#ifdef DEBUG
+- fprintf(stderr, "netrom_input(%s): ", orig);
+- for (i = 0; i < sizeof(ax25_address); i++)
+- fprintf(stderr, "%02X ", sap->sa_data[i] & 0377);
+- fprintf(stderr, "\n");
+-#endif
++ if (_DEBUG) {
++ fprintf(stderr, "netrom_input(%s): ", orig);
++ for (i = 0; i < sizeof(ax25_address); i++)
++ fprintf(stderr, "%02X ", sap->sa_data[i] & 0377);
++ fprintf(stderr, "\n");
++ }
+
+ return (0);
+ }
+diff --git a/lib/netrom_gr.c b/lib/netrom_gr.c
+index adf54b2..ec82fe8 100644
+--- a/lib/netrom_gr.c
++++ b/lib/netrom_gr.c
+@@ -10,7 +10,7 @@
+ *
+ * Changes:
+ * 980701 {0.02} Arnaldo Carvalho de Melo GNU gettext instead of catgets
+- *
++ *
+ *
+ * This program is free software; you can redistribute it
+ * and/or modify it under the terms of the GNU General
+@@ -39,9 +39,7 @@ int NETROM_rprint(int options)
+ /*int ext = options & FLAG_EXT;
+ int numeric = options & FLAG_NUM_HOST; */
+
+- f1 = fopen(_PATH_PROCNET_NR_NODES, "r");
+ if (!f1) perror(_PATH_PROCNET_NR_NODES);
+- f2 = fopen(_PATH_PROCNET_NR_NEIGH, "r");
+ if (!f2) perror(_PATH_PROCNET_NR_NEIGH);
+
+ if (f1 == NULL || f2 == NULL) {
+@@ -50,7 +48,8 @@ int NETROM_rprint(int options)
+ }
+ printf(_("Kernel NET/ROM routing table\n"));
+ printf(_("Destination Mnemonic Quality Neighbour Iface\n"));
+- fgets(buffer, 256, f1);
++ if (fgets(buffer, 256, f1))
++ /* eat line */;
+ while (fgets(buffer, 256, f1)) {
+ buffer[9] = 0;
+ buffer[17] = 0;
+@@ -60,7 +59,8 @@ int NETROM_rprint(int options)
+ qual = atoi(buffer + 24 + 15 * w);
+ n = atoi(buffer + 32 + 15 * w);
+ rewind(f2);
+- fgets(buffer, 256, f2);
++ if (fgets(buffer, 256, f2))
++ /* eat line */;
+ while (fgets(buffer, 256, f2)) {
+ if (atoi(buffer) == n) {
+ buffer[15] = 0;
+diff --git a/lib/nstrcmp.c b/lib/nstrcmp.c
+index 8b1ff30..b1fed12 100644
+--- a/lib/nstrcmp.c
++++ b/lib/nstrcmp.c
+@@ -1,34 +1,157 @@
+ /* Copyright 1998 by Andi Kleen. Subject to the GPL. */
+-/* $Id: nstrcmp.c,v 1.2 1998/11/15 20:11:38 freitag Exp $ */
++/* rewritten by bernd eckenfels because of complicated alias semantic */
++/* $Id: nstrcmp.c,v 1.4 2004/06/03 22:49:17 ecki Exp $ */
+ #include <ctype.h>
+ #include <stdlib.h>
++#include <string.h>
+ #include "util.h"
+
+-/* like strcmp(), but knows about numbers */
+-int nstrcmp(const char *astr, const char *b)
++
++/* return numerical :999 suffix or null. sideeffect: replace ':' with \0 */
++char* cutalias(char* name)
+ {
+- const char *a = astr;
+-
+- while (*a == *b) {
+- if (*a == '\0')
+- return 0;
+- a++;
+- b++;
+- }
+- if (isdigit(*a)) {
+- if (!isdigit(*b))
+- return -1;
+- while (a > astr) {
+- a--;
+- if (!isdigit(*a)) {
+- a++;
+- break;
+- }
+- if (!isdigit(*b))
+- return -1;
+- b--;
++ int digit = 0;
++ int pos;
++
++ for(pos=strlen(name); pos>0; pos--)
++ {
++ if (name[pos-1]==':' && digit)
++ {
++ name[pos-1]='\0';
++ return name+pos;
++ }
++ if (!isdigit(name[pos-1]))
++ break;
++ digit = 1;
+ }
+- return atoi(a) > atoi(b) ? 1 : -1;
+- }
+- return *a - *b;
++ return NULL;
++}
++
++
++/* return index of last non digit or -1 if it does not end with digits */
++int rindex_nondigit(char *name)
++{
++ int pos = strlen(name);
++
++ for(pos=strlen(name); pos>0; pos--)
++ {
++ if (!isdigit(name[pos-1]))
++ return pos;
++ }
++ return 0;
++}
++
++
++/* like strcmp(), but knows about numbers and ':' alias suffix */
++int nstrcmp(const char *ap, const char *bp)
++{
++ char *a = (char*)strdup(ap);
++ char *b = (char*)strdup(bp);
++ char *an, *bn;
++ int av = 0, bv = 0;
++ char *aalias=cutalias(a);
++ char *balias=cutalias(b);
++ int aindex=rindex_nondigit(a);
++ int bindex=rindex_nondigit(b);
++ int complen=(aindex<bindex)?aindex:bindex;
++ int res = strncmp(a, b, complen);
++
++ if (res != 0)
++ { free(a); free(b); return res; }
++
++ if (aindex > bindex)
++ { free(a); free(b); return 1; }
++
++ if (aindex < bindex)
++ { free(a); free(b); return -1; }
++
++ an = a+aindex;
++ bn = b+bindex;
++
++ av = atoi(an);
++ bv = atoi(bn);
++
++ if (av < bv)
++ { free(a); free(b); return -1; }
++
++ if (av > bv)
++ { free(a); free(b); return 1; }
++
++ av = -1;
++ if (aalias != NULL)
++ av = atoi(aalias);
++
++ bv = -1;
++ if (balias != NULL)
++ bv = atoi(balias);
++
++ free(a); free(b);
++
++ if (av < bv)
++ return -1;
++
++ if (av > bv)
++ return 1;
++
++ return 0;
++}
++
++
++#ifdef NSTRCMP_TEST
++
++int cs(int s)
++{
++ if (s < 0) return -1;
++ if (s > 0) return 1;
++ return 0;
++}
++
++
++int dotest(char* a, char* b, int exp)
++{
++ int res = nstrcmp(a, b);
++ int err = (cs(res) != cs(exp));
++ printf("nstrcmp(\"%s\", \"%s\")=%d %d %s\n", a, b, res, exp, err?"WRONG":"OK");
++ return err;
+ }
++
++int main()
++{
++ int err = 0;
++
++ err |= dotest("eth1", "eth1", 0);
++ err |= dotest("eth0:1", "eth0:1", 0);
++ err |= dotest("lan", "lan", 0);
++ err |= dotest("100", "100", 0);
++ err |= dotest("", "", 0);
++ err |= dotest(":", ":", 0);
++ err |= dotest("a:b:c", "a:b:c", 0);
++ err |= dotest("a:", "a:", 0);
++ err |= dotest(":a", ":a", 0);
++
++ err |= dotest("a", "aa", -1);
++ err |= dotest("eth0", "eth1", -1);
++ err |= dotest("eth1", "eth20", -1);
++ err |= dotest("eth20", "eth100", -1);
++ err |= dotest("eth1", "eth13", -1);
++ err |= dotest("eth", "eth2", -1);
++ err |= dotest("eth0:1", "eth0:2", -1);
++ err |= dotest("eth1:10", "eth13:10", -1);
++ err |= dotest("eth1:1", "eth1:13", -1);
++ err |= dotest("a", "a:", -1);
++
++ err |= dotest("aa", "a", 1);
++ err |= dotest("eth2", "eth1", 1);
++ err |= dotest("eth13", "eth1", 1);
++ err |= dotest("eth2", "eth", 1);
++ err |= dotest("eth2:10", "eth2:1", 1);
++ err |= dotest("eth2:5", "eth2:4", 1);
++ err |= dotest("eth3:2", "eth2:3", 1);
++ err |= dotest("eth13:1", "eth1:0", 1);
++ err |= dotest("a:", "a", 1);
++ err |= dotest("a1b12", "a1b2", 1);
++
++ return err;
++}
++
++#endif
+diff --git a/lib/pathnames.h b/lib/pathnames.h
+index 1f7fefb..14b051c 100644
+--- a/lib/pathnames.h
++++ b/lib/pathnames.h
+@@ -1,9 +1,8 @@
+-
+ /*
+- * lib/pathnames.h This file contains the definitions of the path
++ * lib/pathnames.h This file contains the definitions of the path
+ * names used by the NET-LIB.
+ *
+- * NET-LIB
++ * NET-LIB
+ *
+ * Version: lib/pathnames.h 1.37 (1997-08-23)
+ *
+@@ -17,6 +16,12 @@
+ #define _PATH_PROCNET_TCP6 "/proc/net/tcp6"
+ #define _PATH_PROCNET_UDP "/proc/net/udp"
+ #define _PATH_PROCNET_UDP6 "/proc/net/udp6"
++#define _PATH_PROCNET_UDPLITE "/proc/net/udplite"
++#define _PATH_PROCNET_UDPLITE6 "/proc/net/udplite6"
++#define _PATH_PROCNET_SCTPEPTS "/proc/net/sctp/eps"
++#define _PATH_PROCNET_SCTP6EPTS "/proc/net/sctp6/eps"
++#define _PATH_PROCNET_SCTPASSOCS "/proc/net/sctp/assocs"
++#define _PATH_PROCNET_SCTP6ASSOCS "/proc/net/sctp6/assocs"
+ #define _PATH_PROCNET_RAW "/proc/net/raw"
+ #define _PATH_PROCNET_RAW6 "/proc/net/raw6"
+ #define _PATH_PROCNET_UNIX "/proc/net/unix"
+@@ -29,8 +34,10 @@
+ #define _PATH_PROCNET_NR_NODES "/proc/net/nr_nodes"
+ #define _PATH_PROCNET_ARP "/proc/net/arp"
+ #define _PATH_PROCNET_AX25 "/proc/net/ax25"
+-#define _PATH_PROCNET_IPX "/proc/net/ipx"
+-#define _PATH_PROCNET_IPX_ROUTE "/proc/net/ipx_route"
++#define _PATH_PROCNET_IPX_SOCKET1 "/proc/net/ipx/socket"
++#define _PATH_PROCNET_IPX_SOCKET2 "/proc/net/ipx"
++#define _PATH_PROCNET_IPX_ROUTE1 "/proc/net/ipx/route"
++#define _PATH_PROCNET_IPX_ROUTE2 "/proc/net/ipx_route"
+ #define _PATH_PROCNET_ATALK "/proc/net/appletalk"
+ #define _PATH_PROCNET_IP_BLK "/proc/net/ip_block"
+ #define _PATH_PROCNET_IP_FWD "/proc/net/ip_forward"
+@@ -42,9 +49,12 @@
+ #define _PATH_PROCNET_RARP "/proc/net/rarp"
+ #define _PATH_ETHERS "/etc/ethers"
+ #define _PATH_PROCNET_ROSE_ROUTE "/proc/net/rose_routes"
+-#define _PATH_PROCNET_X25 "/proc/net/x25"
+-#define _PATH_PROCNET_X25_ROUTE "/proc/net/x25_routes"
++#define _PATH_PROCNET_X25 "/proc/net/x25"
++#define _PATH_PROCNET_X25_ROUTE "/proc/net/x25/route"
+ #define _PATH_PROCNET_DEV_MCAST "/proc/net/dev_mcast"
++#define _PATH_PROCNET_ATALK_ROUTE "/proc/net/atalk_route"
++#define _PATH_SYS_BLUETOOTH_L2CAP "/sys/class/bluetooth/l2cap"
++#define _PATH_SYS_BLUETOOTH_RFCOMM "/sys/class/bluetooth/rfcomm"
+
+ /* pathname for the netlink device */
+ #define _PATH_DEV_ROUTE "/dev/route"
+diff --git a/lib/ppp.c b/lib/ppp.c
+index 8bf1499..27d660c 100644
+--- a/lib/ppp.c
++++ b/lib/ppp.c
+@@ -8,7 +8,7 @@
+ * Copyright 1993 MicroWalt Corporation
+ *
+ * Modified by Alan Cox, May 94 to cover NET-3
+- *
++ *
+ * Changes:
+ * 980701 {1.12} Arnaldo Carvalho de Melo - GNU gettext instead of catgets
+ *
+diff --git a/lib/proc.c b/lib/proc.c
+index bf34dbe..feea1d1 100644
+--- a/lib/proc.c
++++ b/lib/proc.c
+@@ -1,11 +1,13 @@
+ /* Tolerant /proc file parser. Copyright 1998 Andi Kleen */
+-/* $Id: proc.c,v 1.4 1999/01/05 20:54:00 philip Exp $ */
+-/* Fixme: cannot currently cope with removed fields */
++/* $Id: proc.c,v 1.5 2007/12/01 18:44:57 ecki Exp $ */
++/* Fixme: cannot currently cope with removed fields */
+
+ #include <string.h>
+ #include <stdarg.h>
+ #include <stdio.h>
++#include <stdlib.h>
+ #include <ctype.h>
++#include <unistd.h>
+
+ /* Caller must free return string. */
+
+@@ -49,7 +51,7 @@ char *proc_gen_fmt(char *name, int more, FILE * fh,...)
+ return strdup(format);
+ }
+
+-/*
++/*
+ * this will generate a bitmask of present/missing fields in the header of
+ * a /proc file.
+ */
+@@ -72,3 +74,22 @@ int proc_guess_fmt(char *name, FILE *fh, ...)
+ va_end(ap);
+ return flag;
+ }
++
++
++FILE *proc_fopen(const char *name)
++{
++ static char *buffer;
++ static size_t pagesz;
++ FILE *fd = fopen(name, "r");
++
++ if (fd == NULL)
++ return NULL;
++
++ if (!buffer) {
++ pagesz = getpagesize();
++ buffer = malloc(pagesz);
++ }
++
++ setvbuf(fd, buffer, _IOFBF, pagesz);
++ return fd;
++}
+diff --git a/lib/proc.h b/lib/proc.h
+index 91f803c..379de23 100644
+--- a/lib/proc.h
++++ b/lib/proc.h
+@@ -1,5 +1,7 @@
+-
+-
+-/* Generate a suitable scanf format for a column title line */
++/*
++ * prototypes for proc.c
++ */
+ char *proc_gen_fmt(char *name, int more, FILE * fh,...);
+ int proc_guess_fmt(char *name, FILE* fh,...);
++FILE *proc_fopen(const char *name);
++
+diff --git a/lib/rose.c b/lib/rose.c
+index 381226b..6286cb1 100644
+--- a/lib/rose.c
++++ b/lib/rose.c
+@@ -34,6 +34,7 @@
+ #include "net-support.h"
+ #include "pathnames.h"
+ #include "intl.h"
++#include "util.h"
+
+ #ifndef _NETROSE_ROSE_H
+ #include <linux/ax25.h>
+@@ -53,8 +54,8 @@ static char ROSE_errmsg[128];
+
+ extern struct aftype rose_aftype;
+
+-static char *
+- ROSE_print(unsigned char *ptr)
++static const char *
++ ROSE_print(const char *ptr)
+ {
+ static char buff[12];
+
+@@ -64,7 +65,7 @@ static char *
+ }
+
+ /* Display a ROSE socket address. */
+-static char *
++static const char *
+ ROSE_sprint(struct sockaddr *sap, int numeric)
+ {
+ if (sap->sa_family == 0xFFFF || sap->sa_family == 0)
+@@ -73,7 +74,6 @@ static char *
+ return (ROSE_print(((struct sockaddr_rose *) sap)->srose_addr.rose_addr));
+ }
+
+-
+ static int ROSE_input(int type, char *bufp, struct sockaddr *sap)
+ {
+ char *ptr;
+@@ -84,10 +84,7 @@ static int ROSE_input(int type, char *bufp, struct sockaddr *sap)
+
+ /* Node address the correct length ? */
+ if (strlen(bufp) != 10) {
+- strcpy(ROSE_errmsg, _("Node address must be ten digits"));
+-#ifdef DEBUG
+- fprintf(stderr, "rose_input(%s): %s !\n", ROSE_errmsg, orig);
+-#endif
++ safe_strncpy(ROSE_errmsg, _("Node address must be ten digits"), sizeof(ROSE_errmsg));
+ errno = EINVAL;
+ return (-1);
+ }
+@@ -98,13 +95,6 @@ static int ROSE_input(int type, char *bufp, struct sockaddr *sap)
+ }
+
+ /* All done. */
+-#ifdef DEBUG
+- fprintf(stderr, "rose_input(%s): ", orig);
+- for (i = 0; i < sizeof(rose_address); i++)
+- fprintf(stderr, "%02X ", sap->sa_data[i] & 0377);
+- fprintf(stderr, "\n");
+-#endif
+-
+ return (0);
+ }
+
+diff --git a/lib/rose_gr.c b/lib/rose_gr.c
+index cf0a60a..a0858fd 100644
+--- a/lib/rose_gr.c
++++ b/lib/rose_gr.c
+@@ -53,7 +53,8 @@ int ROSE_rprint(int options)
+ }
+ printf(_("Kernel ROSE routing table\n"));
+ printf(_("Destination Iface Use\n"));
+- fgets(buffer, 256, f);
++ if (fgets(buffer, 256, f))
++ /* eat line */;
+ while (fgets(buffer, 256, f)) {
+ buffer[9] = 0;
+ buffer[14] = 0;
+diff --git a/lib/strip.c b/lib/strip.c
+index fd396ba..ced2325 100644
+--- a/lib/strip.c
++++ b/lib/strip.c
+@@ -38,8 +38,8 @@
+
+ extern struct hwtype strip_hwtype;
+
+-static char *
+-pr_strip(unsigned char *ptr)
++static const char *
++pr_strip(const char *ptr)
+ {
+ static char buff[64];
+ if(ptr[1])
+diff --git a/lib/tr.c b/lib/tr.c
+index 8d86aa7..c5314da 100644
+--- a/lib/tr.c
++++ b/lib/tr.c
+@@ -2,7 +2,7 @@
+ * lib/tr.c This file contains an implementation of the "Tokenring"
+ * support functions.
+ *
+- * Version: $Id: tr.c,v 1.8 2000/02/02 08:56:30 freitag Exp $
++ * Version: $Id: tr.c,v 1.9 2005/05/16 03:15:12 ecki Exp $
+ *
+ * Author: Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org>
+ * Copyright 1993 MicroWalt Corporation
+@@ -30,10 +30,16 @@
+ #include "net-support.h"
+ #include "pathnames.h"
+ #include "intl.h"
++#include "util.h"
+
++
++/* actual definition at the end of file */
+ extern struct hwtype tr_hwtype;
++#ifdef ARPHRD_IEEE802_TR
++extern struct hwtype tr_hwtype1;
++#endif
+
+-static char *pr_tr(unsigned char *ptr)
++static const char *pr_tr(const char *ptr)
+ {
+ static char buff[64];
+
+@@ -42,16 +48,31 @@ static char *pr_tr(unsigned char *ptr)
+ (ptr[3] & 0377), (ptr[4] & 0377), (ptr[5] & 0377)
+ );
+ return (buff);
+-}
++ }
+
++#ifdef DEBUG
++#define _DEBUG 1
++#else
++#define _DEBUG 0
++#endif
+
+ static int in_tr(char *bufp, struct sockaddr *sap)
+ {
+- unsigned char *ptr;
++ char *ptr;
+ char c, *orig;
+ int i, val;
+
++#ifdef ARPHRD_IEEE802_TR
++ if (kernel_version() < KRELEASE(2,3,30)) {
++ sap->sa_family = tr_hwtype.type;
++ } else {
++ sap->sa_family = tr_hwtype1.type;
++ }
++#else
+ sap->sa_family = tr_hwtype.type;
++ #warning "Limited functionality, no support for ARPHRD_IEEE802_TR (old kernel headers?)"
++#endif
++
+ ptr = sap->sa_data;
+
+ i = 0;
+@@ -66,9 +87,8 @@ static int in_tr(char *bufp, struct sockaddr *sap)
+ else if (c >= 'A' && c <= 'F')
+ val = c - 'A' + 10;
+ else {
+-#ifdef DEBUG
+- fprintf(stderr, _("in_tr(%s): invalid token ring address!\n"), orig);
+-#endif
++ if (_DEBUG)
++ fprintf(stderr, _("in_tr(%s): invalid token ring address!\n"), orig);
+ errno = EINVAL;
+ return (-1);
+ }
+@@ -81,9 +101,8 @@ static int in_tr(char *bufp, struct sockaddr *sap)
+ else if (c >= 'A' && c <= 'F')
+ val |= c - 'A' + 10;
+ else {
+-#ifdef DEBUG
+- fprintf(stderr, _("in_tr(%s): invalid token ring address!\n"), orig);
+-#endif
++ if (_DEBUG)
++ fprintf(stderr, _("in_tr(%s): invalid token ring address!\n"), orig);
+ errno = EINVAL;
+ return (-1);
+ }
+@@ -92,28 +111,21 @@ static int in_tr(char *bufp, struct sockaddr *sap)
+
+ /* We might get a semicolon here - not required. */
+ if (*bufp == ':') {
+- if (i == TR_ALEN) {
+-#ifdef DEBUG
++ if (_DEBUG && i == TR_ALEN)
+ fprintf(stderr, _("in_tr(%s): trailing : ignored!\n"),
+- orig)
+-#endif
+- ; /* nothing */
+- }
++ orig);
+ bufp++;
+ }
+ }
+
+ /* That's it. Any trailing junk? */
+- if ((i == TR_ALEN) && (*bufp != '\0')) {
+-#ifdef DEBUG
++ if (_DEBUG && (i == TR_ALEN) && (*bufp != '\0')) {
+ fprintf(stderr, _("in_tr(%s): trailing junk!\n"), orig);
+ errno = EINVAL;
+ return (-1);
+-#endif
+ }
+-#ifdef DEBUG
+- fprintf(stderr, "in_tr(%s): %s\n", orig, pr_tr(sap->sa_data));
+-#endif
++ if (_DEBUG)
++ fprintf(stderr, "in_tr(%s): %s\n", orig, pr_tr(sap->sa_data));
+
+ return (0);
+ }
+diff --git a/lib/tunnel.c b/lib/tunnel.c
+index 19606c1..8a160bf 100644
+--- a/lib/tunnel.c
++++ b/lib/tunnel.c
+@@ -21,7 +21,7 @@
+
+ extern struct hwtype ether_hwtype;
+
+-static char *pr_tunnel(unsigned char *ptr)
++static const char *pr_tunnel(const char *ptr)
+ {
+ return ("");
+ }
+diff --git a/lib/unix.c b/lib/unix.c
+index fb4dcce..936cd48 100644
+--- a/lib/unix.c
++++ b/lib/unix.c
+@@ -32,7 +32,7 @@
+
+
+ /* Display an UNSPEC address. */
+-static char *UNSPEC_print(unsigned char *ptr)
++static const char *UNSPEC_print(const char *ptr)
+ {
+ static char buff[64];
+ char *pos;
+@@ -48,7 +48,7 @@ static char *UNSPEC_print(unsigned char *ptr)
+
+
+ /* Display an UNSPEC socket address. */
+-static char *UNSPEC_sprint(struct sockaddr *sap, int numeric)
++static const char *UNSPEC_sprint(struct sockaddr *sap, int numeric)
+ {
+ static char buf[64];
+
+@@ -61,14 +61,14 @@ static char *UNSPEC_sprint(struct sockaddr *sap, int numeric)
+ #if HAVE_AFUNIX
+
+ /* Display a UNIX domain address. */
+-static char *UNIX_print(unsigned char *ptr)
++static const char *UNIX_print(const char *ptr)
+ {
+ return (ptr);
+ }
+
+
+ /* Display a UNIX domain address. */
+-static char *UNIX_sprint(struct sockaddr *sap, int numeric)
++static const char *UNIX_sprint(struct sockaddr *sap, int numeric)
+ {
+ static char buf[64];
+
+diff --git a/lib/util-ank.c b/lib/util-ank.c
+index 43a7f1c..b077f35 100644
+--- a/lib/util-ank.c
++++ b/lib/util-ank.c
+@@ -293,7 +293,7 @@ int inet_addr_match(inet_prefix *a, inet_prefix *b, int bits)
+ return 0;
+ }
+
+-const char *format_host(int af, void *addr, __u8 *abuf, int alen)
++const char *format_host(int af, void *addr, char *abuf, int alen)
+ {
+ #ifdef RESOLVE_HOSTNAMES
+ if (resolve_hosts) {
+diff --git a/lib/util.c b/lib/util.c
+index ac932f4..705c862 100644
+--- a/lib/util.c
++++ b/lib/util.c
+@@ -1,4 +1,4 @@
+-/* Copyright 1998 by Andi Kleen. Subject to the GPL. */
++/* Copyright 1998 by Andi Kleen. Subject to the GPL. */
+ /* $Id: util.c,v 1.4 1998/11/17 15:17:02 freitag Exp $ */
+ #include <stdio.h>
+ #include <stdlib.h>
+@@ -33,19 +33,19 @@ void *xrealloc(void *oldp, size_t sz)
+ int kernel_version(void)
+ {
+ struct utsname uts;
+- int major, minor, patch;
++ int major, minor, patch=0;
+
+ if (uname(&uts) < 0)
+ return -1;
+- if (sscanf(uts.release, "%d.%d.%d", &major, &minor, &patch) != 3)
++ if (sscanf(uts.release, "%d.%d.%d", &major, &minor, &patch) < 2)
+ return -1;
+ return KRELEASE(major, minor, patch);
+ }
+
+
+-/* Like strncpy but make sure the resulting string is always 0 terminated. */
++/* Like strncpy but make sure the resulting string is always 0 terminated. */
+ char *safe_strncpy(char *dst, const char *src, size_t size)
+-{
++{
+ dst[size-1] = '\0';
+- return strncpy(dst,src,size-1);
++ return strncpy(dst,src,size-1);
+ }
+diff --git a/lib/util.h b/lib/util.h
+index 6acb158..97ce379 100644
+--- a/lib/util.h
++++ b/lib/util.h
+@@ -12,5 +12,8 @@ int kernel_version(void);
+
+ int nstrcmp(const char *, const char *);
+
+-char *safe_strncpy(char *dst, const char *src, size_t size);
++char *safe_strncpy(char *dst, const char *src, size_t size);
+
++
++#define netmin(a,b) ((a)<(b) ? (a) : (b))
++#define netmax(a,b) ((a)>(b) ? (a) : (b))
+diff --git a/lib/x25.c b/lib/x25.c
+index 1ffb569..5c7be2c 100644
+--- a/lib/x25.c
++++ b/lib/x25.c
+@@ -38,6 +38,7 @@
+ #include "net-locale.h"
+ #endif
+ #include "intl.h"
++#include "util.h"
+
+ static char X25_errmsg[128];
+
+@@ -50,8 +51,8 @@ extern struct aftype x25_aftype;
+ #endif
+
+
+-static char *
+-X25_print(unsigned char *ptr)
++static const char *
++X25_print(const char *ptr)
+ {
+ static char buff[X25_ADDR_LEN+1];
+
+@@ -63,7 +64,7 @@ X25_print(unsigned char *ptr)
+
+
+ /* Display an X.25 socket address. */
+-static char *
++static const char *
+ X25_sprint(struct sockaddr *sap, int numeric)
+ {
+ if (sap->sa_family == 0xFFFF || sap->sa_family == 0)
+@@ -78,7 +79,7 @@ X25_sprint(struct sockaddr *sap, int numeric)
+ static int
+ X25_input(int type, char *bufp, struct sockaddr *sap)
+ {
+- unsigned char *ptr;
++ char *ptr;
+ char *p;
+ unsigned int sigdigits;
+
+@@ -88,7 +89,9 @@ X25_input(int type, char *bufp, struct sockaddr *sap)
+
+ /* Address the correct length ? */
+ if (strlen(bufp)>18) {
+- strcpy(X25_errmsg, _("Address can't exceed eighteen digits with sigdigits"));
++ safe_strncpy(X25_errmsg,
++ _("Address can't exceed eighteen digits with sigdigits"),
++ sizeof(X25_errmsg));
+ #ifdef DEBUG
+ fprintf(stderr, "x25_input(%s): %s !\n", X25_errmsg, orig);
+ #endif
+@@ -105,8 +108,9 @@ X25_input(int type, char *bufp, struct sockaddr *sap)
+ }
+
+ if (strlen(bufp) < 1 || strlen(bufp) > 15 || sigdigits > strlen(bufp)) {
+- *p = '/';
+- strcpy(X25_errmsg, _("Invalid address"));
++ if (p != NULL)
++ *p = '/';
++ safe_strncpy(X25_errmsg, _("Invalid address"), sizeof(X25_errmsg));
+ #ifdef DEBUG
+ fprintf(stderr, "x25_input(%s): %s !\n", X25_errmsg, orig);
+ #endif
+@@ -152,7 +156,7 @@ struct hwtype x25_hwtype = {
+ };
+
+ struct aftype x25_aftype =
+-{
++{
+ "x25", NULL, /*"CCITT X.25", */ AF_X25, X25_ADDR_LEN,
+ X25_print, X25_sprint, X25_input, X25_herror,
+ X25_rprint, X25_rinput, NULL /* getmask */,
+diff --git a/lib/x25_gr.c b/lib/x25_gr.c
+index 187fc05..79682e0 100644
+--- a/lib/x25_gr.c
++++ b/lib/x25_gr.c
+@@ -37,6 +37,7 @@
+ #include <string.h>
+ #include "net-support.h"
+ #include "pathnames.h"
++#include "proc.h"
+ #define EXTERN
+ #if 0
+ #include "net-locale.h"
+@@ -48,9 +49,18 @@
+ #define X25_ADDR_LEN 16
+ #endif
+
++static FILE *proc_fopen_x25_route(void)
++{
++ FILE *ret = proc_fopen(_PATH_PROCNET_X25_ROUTE);
++ if (ret)
++ return ret;
++ /* try old linux-2.4 name */
++ return proc_fopen("/proc/net/x25_routes");
++}
++
+ int X25_rprint(int options)
+ {
+- FILE *f=fopen(_PATH_PROCNET_X25_ROUTE, "r");
++ FILE *f=proc_fopen_x25_route();
+ char buffer[256];
+ char *p;
+ int digits;
+@@ -62,7 +72,8 @@ int X25_rprint(int options)
+ }
+ printf( _("Kernel X.25 routing table\n")); /* xxx */
+ printf( _("Destination Iface\n")); /* xxx */
+- fgets(buffer,256,f);
++ if (fgets(buffer,256,f))
++ /* eat line */;
+ while(fgets(buffer,256,f))
+ {
+ p = strchr(buffer,'\n');
+diff --git a/lib/x25_sr.c b/lib/x25_sr.c
+index 8637c98..fde79dc 100644
+--- a/lib/x25_sr.c
++++ b/lib/x25_sr.c
+@@ -38,6 +38,7 @@
+ #include "net-locale.h"
+ #endif
+ #include "intl.h"
++#include "util.h"
+
+ #include "net-features.h"
+
+@@ -64,10 +65,10 @@ static int X25_setroute(int action, int options, char **args)
+ if (*args == NULL)
+ return(usage());
+
+- strcpy(target, *args++);
++ safe_strncpy(target, *args++, sizeof(target));
+
+ /* Clean out the x25_route_struct structure. */
+- memset((char *) &rt, 0, sizeof(struct x25_route_struct));
++ memset((char *) &rt, 0, sizeof(rt));
+
+
+ if ((sigdigits = x25_aftype.input(0, target, (struct sockaddr *)&sx25)) < 0) {
+@@ -76,8 +77,8 @@ static int X25_setroute(int action, int options, char **args)
+ }
+ rt.sigdigits=sigdigits;
+
+- /* x25_route_struct.address isn't type struct sockaddr_x25, Why? */
+- memcpy(&rt.address, &sx25.sx25_addr, sizeof(x25_address));
++ /* this works with 2.4 and 2.6 headers struct x25_address vs. typedef */
++ memcpy(&rt.address, &sx25.sx25_addr, sizeof(sx25.sx25_addr));
+
+ while (*args) {
+ if (!strcmp(*args,"device") || !strcmp(*args,"dev")) {
+@@ -89,7 +90,7 @@ static int X25_setroute(int action, int options, char **args)
+ return(usage());
+ if (rt.device[0])
+ return(usage());
+- strcpy(rt.device, *args);
++ safe_strncpy(rt.device, *args, sizeof(rt.device));
+ args++;
+ }
+ if (rt.device[0]=='\0')
+@@ -111,7 +112,7 @@ static int X25_setroute(int action, int options, char **args)
+ perror("socket");
+ return(E_SOCK);
+ }
+-
++
+ /* Tell the kernel to accept this route. */
+ if (action==RTACTION_DEL) {
+ if (ioctl(skfd, SIOCDELRT, &rt) < 0) {
+@@ -137,14 +138,14 @@ int X25_rinput(int action, int options, char **args)
+ if (action == RTACTION_FLUSH) {
+ fprintf(stderr,"Flushing `x25' routing table not supported\n");
+ return(usage());
+- }
++ }
+ if (options & FLAG_CACHE) {
+ fprintf(stderr,"Modifying `x25' routing cache not supported\n");
+ return(usage());
+- }
++ }
+ if ((*args == NULL) || (action == RTACTION_HELP))
+ return(usage());
+-
++
+ return(X25_setroute(action, options, args));
+ }
+ #endif /* HAVE_AFX25 */
+diff --git a/man/Makefile b/man/Makefile
+index 4ef1af8..23f5468 100644
+--- a/man/Makefile
++++ b/man/Makefile
+@@ -29,9 +29,14 @@ mandir=/usr/share/man
+
+ -include ../config.make
+ ifeq ($(I18N),1)
+-LANGS=`ls -d * | grep -v Makefile`
++ALL_LANGS = $(filter-out Makefile,$(wildcard *))
++ifeq ($(LINGUAS),)
++LANGS = $(ALL_LANGS)
+ else
+-LANGS=en_US
++LANGS = $(sort $(filter $(LINGUAS),$(ALL_LANGS)) en_US)
++endif
++else
++LANGS = en_US
+ endif
+
+ all:
+@@ -43,7 +48,7 @@ clean:
+ clobber: clean
+
+ install:
+- LANGS=$(LANGS) ; \
++ LANGS='$(LANGS)' ; \
+ for LANG in $$LANGS; do \
+ cd $$LANG; \
+ for SECTION in 1 5 8; do \
+diff --git a/man/de_DE/arp.8 b/man/de_DE/arp.8
+index debd879..79abfc7 100644
+--- a/man/de_DE/arp.8
++++ b/man/de_DE/arp.8
+@@ -1,149 +1,145 @@
+-.TH ARP 8 "6. M\(:arz 1999" "net-tools" "Handbuch f\(:ur Linuxprogrammierer"
++.TH ARP 8 "17. Oktober 2012" "net-tools" "Handbuch f\(:ur Linuxprogrammierer"
+ .SH NAME
+ arp \- Manipulation des ARP-Caches
+ .SH SYNOPSIS
+-.B arp
+-.RB [ \-vn ]
+-.RB [ "\-H Typ" ]
+-.RB [ "-i Schnittstelle" ]
+-.B -a
++.B arp
++.RB [ \-vn ]
++.RB [ "\-H Typ" ]
++.RB [ "-i Schnittstelle" ]
++.B -a
+ .RB [ Rechnername ]
+ .PP
+-.B arp
++.B arp
+ .RB [ \-v ]
+-.RB [ "\-i if" ]
++.RB [ "\-i Schnittstelle" ]
+ .B "\-d Rechnername"
+ .RB [ pub ]
+ .PP
+-.B arp
+-.RB [ \-v ]
+-.RB [ "\-H Typ" ]
+-.RB [ "\-i Schnittstelle" ]
++.B arp
++.RB [ \-v ]
++.RB [ "\-H Typ" ]
++.RB [ "\-i Schnittstelle" ]
+ .B -s Rechnername hw_adr
+-.RB [ temp ]
++.RB [ temp ]
+ .PP
+-.B arp
+-.RB [ \-v ]
+-.RB [ "\-H Typ" ]
+-.RB [ "\-i Interface" ]
++.B arp
++.RB [ \-v ]
++.RB [ "\-H Typ" ]
++.RB [ "\-i Interface" ]
+ .B -s Rechnername hw_adr
+-.RB [ "netmask nm" ]
++.RB [ "netmask Maske" ]
+ .B pub
+ .PP
+-.B arp
+-.RB [ \-v ]
+-.RB [ "\-H Typ" ]
+-.RB [ "\-i Schnittstelle" ]
+-.B -Ds Rechnername ifa
+-.RB [ "netmask nm" ]
++.B arp
++.RB [ \-v ]
++.RB [ "\-H Typ" ]
++.RB [ "\-i Schnittstelle" ]
++.B -Ds Rechnername Schnittstelle2
++.RB [ "netmask Maske" ]
+ .B pub
+ .PP
+-.B arp
++.B arp
+ .RB [ \-vnD ]
+-.RB [ "\-H Typ" ]
++.RB [ "\-H Typ" ]
+ .RB [ "-i Schnittstelle" ]
+ .B -f [Dateiname]
+
+ .SH BESCHREIBUNG
+ .B Arp
+ kann den ARP-Cache des Kernels auf verschiedene Arten manipulieren. Die
+-haupts\(:achliche Verwendung ist es Adresszuordnungseintr\(:age zu
++haupts\(:achliche Verwendung ist es, Adresszuordnungseintr\(:age zu
+ l\(:oschen und von Hand neue zu erzeugen. Zum Zweck der Fehlersuche ist
+-moeglich mit dem
+-.B arp
+-Programm den Inhalt des ARP-Caches vollst\(:andig auszugeben.
++es m\(:oglich, mit dem
++.BR arp -Programm
++den Inhalt des ARP-Caches vollst\(:andig auszugeben.
++
++.B ARP
++steht f\(:ur Address Resolution Protocol, welches dazu verwendet wird, \(:uber
++die IPv4-Adresse die MAC-Adresse von Nachbarn im Netzwerk zu finden.
+ .SH OPTIONEN
+ .TP
+ .B "\-v, \-\-verbose"
+ Ausf\(:uhrlichere Ausgaben.
+ .TP
+ .B "\-n, \-\-numeric"
+-macht numerische Adressausgaben anstatt zu versuche, den symbolischen Rechner-,
++Numerische Adressausgaben anstatt zu versuchen, den symbolischen Rechner-,
+ Port- oder Benutzernamen zu ermitteln.
+ .TP
+-.B "\-H type, \-\-hw-type type"
++.B "\-H Typ, \-\-hw-type Typ"
+ Beim Setzen oder Auslesen des ARP-Caches schr\(:ankt diese Option
+-ein, auf welcher Klasse von Eintr\(:agen
++ein, auf welcher Klasse von Eintr\(:agen
+ .B arp
+ operieren soll. Der Standardwert dieses Arguments ist
+ .B ether
+ (d.h. Hardwarecode 0x01 f\(:ur IEEE 802.3 10Mbps Ethernet).
+ Andere m\(:ogliche Werte sind Netzwerkstechnologien so wie z.B.
+-.RB "ARCnet (" arcnet ")"
+-,
+-.RB "PROnet (" pronet ")"
+-,
+-.RB "AX.25 (" ax25 ")"
+-and
+-.RB "NET/ROM (" netrom ")."
++.RB "ARCnet (" arcnet "), PROnet (" pronet "), AX.25 (" ax25 ") und NET/ROM (" netrom ")."
+ .TP
+ .B "\-a [Rechnername], \-\-display [Rechnername]"
+ Zeigt die Eintr\(:age der angegebenen Rechner an. Wird kein
+-.B hostname
+-Argument verwendet, so werden alle Eintr\(:age aufgelistet.
++.BR hostname -Argument
++verwendet, so werden alle Eintr\(:age aufgelistet.
+ .TP
+ .B "\-d Rechnername, \-\-delete Rechnername"
+-Alle Eintr\(:age f\(:ur den angegebenen Host entfernen. Dies kann z.B.
+-benutzt werden, wenn ein System angehalten wird.
++Alle Eintr\(:age f\(:ur den angegebenen Host entfernen. Dies kann z.B. benutzt
++werden, wenn ein System angehalten wird.
+ .TP
+ .B "\-D, \-\-use-device"
+ Die Hardwareadresse der Netzwerksschnittstelle
+-.B ifa
++.B Schnittstelle2
+ verwenden.
+ .TP
+-.B "\-i If, \-\-device Schnittstelle"
++.B "\-i Schnittstelle, \-\-device Schnittstelle"
+ Eine Netzwerksschnittstelle ausw\(:ahlen. Es werden nur Eintr\(:age
+-f\(:ur die angegebene Schnittstelle ausgedruckt. Beim Setzen von von
++f\(:ur die angegebene Schnittstelle ausgegeben. Beim Setzen von
+ permanenten oder tempor\(:aren Eintr\(:agen wird diese Schnittstelle mit
+ dem Eintrag assoziiert. Wird diese Option nicht verwendet, so versucht der
+-Kernel auf Basis der Routentabelle eine Schnittstelle auszuw\(:ahlen. F\(:ur
+-.B pub
+-Eintr\(:age ist die angegebene Schnittstelle diejenige, auf der ARP-Anfragen
++Kernel, auf Basis der Routentabelle eine Schnittstelle auszuw\(:ahlen. F\(:ur
++.BR pub -Eintr\(:age
++ist die angegebene Schnittstelle diejenige, auf der ARP-Anfragen
+ beantwortet werden.
+ .br
+ .B ANMERKUNG:
+-Diese Schnittstelle mu\(ss eine andere sein als die, auf die die IP-Datagramme
++Diese Schnittstelle mu\(ss eine andere sein als die, auf welche die IP-Datagramme
+ weitergeleitet werden.
+ .TP
+-.B "\-s Rechnername hw_addr, \-\-set Rechnername"
+-Erzeugt manuel einen ARP Adresseintrag f\(:ur den Rechner
+-.B Rechnername
++.B "\-s Rechnername hw_addr, \-\-set Rechnername hw_addr"
++Erzeugt manuell einen ARP-Adresseintrag f\(:ur den Rechner
++.BR Rechnername ,
+ in dem die Hardwareadresse auf
+ .B hw_addr
+ gesetzt ist. Das genaue Format der Hardwareadresse ist abh\(:angig von der
+-Hardwareklasse aber f\(:ur die meisten Klassen kann man davon ausgehen, da\(ss
++Hardwareklasse, aber f\(:ur die meisten Klassen kann man davon ausgehen, da\(ss
+ die \(:ubliche Darstellung verwendet wird. F\(:ur die Ethernetklasse sind
+-dies sechs hexadezimale, von Doppelpunkten getrennte Bytes. Beim Zuf\(:ugen
+-von Proxy-ARP-Entr\(:agen (das sind die mit der gesetzten
+-.BR pub lizieren
+-Flagge) kann
+-.B Netmaske
++dies sechs hexadezimale, durch Doppelpunkte getrennte Bytes. Beim Zuf\(:ugen
++von Proxy-ARP-Entr\(:agen (das sind die mit dem gesetzten
++.BR pub lished-Flag)
++kann die
++.B Maske
+ f\(:ur ARP-Eintr\(:age f\(:ur ganze Subnetze angegeben werde. Von dieser
+ Praxis wird abgeraten. Sie wird von \(:alteren Kerneln unterst\(:utzt, da
+-sie gelegentlich n\(:utzlich ist. Wird die
+-If the
+-.B temp
+-Flagge nicht angegeben, so werden die erzeugten Eintr\(:age nicht dauerhaft
+-in den ARP-Cache eingetragen.
++sie gelegentlich n\(:utzlich ist.
++Der Eintrag wird permanent im ARP-Cache gespeichert,
++wenn das \fBtemp\fR-Flag nicht angegeben wird.
+ .br
+ .B ANMERKUNG:
+-Ab der Kernelversion 2.2.0 ist es nicht mehr m\(:oglich ARP-Eintr\(:age f\(:ur
+-ganze Teilnetze zu erzeugen. Statt dessen wird automatisches Proxy ARP
++Ab der Kernelversion 2.2.0 ist es nicht mehr m\(:oglich, ARP-Eintr\(:age f\(:ur
++ganze Teilnetze zu erzeugen. Stattdessen wird automatisches Proxy ARP
+ durchgef\(:uhrt, d.h. wenn eine Route existiert und Forwarding eingeschaltet
+-ist wird automatisch ein tempor\(:arer Proxyarpeintrag erzeugt.
++ist, wird automatisch ein tempor\(:arer Proxyarpeintrag erzeugt.
+ Siehe auch
+ .BR arp (7)
+ f\(:ur mehr Details.
+ .TP
+-.B "\-f Dateiname, \-\-file Dateiname"
++.B "\-f [Dateiname], \-\-file [Dateiname]"
+ \(:Ahnlich der
+ .B \-s
+ Option, au\(sser, da\(ss diesmal die Adressinformation aus der Datei
+ .B Dateiname
+ verwendet wird. Dies kann verwendet werden, wenn ARP-Eintr\(:age f\(:ur
+ etliche Rechner erzeugt werden m\(:ussen. Der Name dieser Datei ist oft
+-.IR /etc/ethers ,
+-aber dies ist nicht offizieil standardisiert. Wenn kein Dateinamen
++.IR /etc/ethers ,
++aber dies ist nicht offizieil standardisiert. Wenn kein Dateinamen
+ angeben ist wird /etc/ethers benutzt.
+ .sp 1
+ Das Format der Datei ist einfach; es enth\(:alt nur ASCII-Textzeilen, die
+@@ -158,16 +154,28 @@ erwartet wird, kann auch eine
+ .B "IP-Adresse"
+ in Form eines durch Punkte getrennten Dezimalquadrupels angegeben werden.
+ .P
+-Aus Kompatiblit\(:atsgr\(:unden k\(:onnen Rechnername und die
++Aus Kompatiblit\(:atsgr\(:unden k\(:onnen Rechnername und die
+ Hardwareadresse auch vertauscht werden.
+-.LP
+-Jeder vollst\(:andige Eintrag wird im ARP-Cache mit der
+-.B C
+-Flagge markiert. Permanente Eintr\(:age werden mit
++.LP
++Jeder vollst\(:andige Eintrag wird im ARP-Cache mit dem
++.BR C -Flag
++markiert. Permanente Eintr\(:age werden mit
+ .B M
+-und zu publizierende Eintr\(:age mit der
++und zu publizierende Eintr\(:age mit
+ .B P
+-Flagge.
++markiert.
++.SH BEISPIELE
++.B /usr/sbin/arp -i eth0 -Ds 10.0.0.2 eth1 pub
++
++Beantwortet ARP-Anfragen f\(:ur 10.0.0.2 die auf der Schnittstelle eth0
++empfangen werden mit der MAC-Adresse f\(:ur eth1.
++
++.B /usr/sbin/arp -i eth1 -d 10.0.0.1
++
++Entfernt den ARP-Eintrag f\(:ur 10.0.0.1 auf der Schnittstelle
++.BR eth1 .
++Dies betrifft sowohl publizierte Proxy-ARP-Einträge als auch auf permanente ARP-Eintr\(:age.
++
+ .SH DATEIEN
+ .I /proc/net/arp,
+ .br
+@@ -176,10 +184,12 @@ Flagge.
+ .I /etc/hosts
+ .br
+ .I /etc/ethers
++
+ .SH SIEHE AUCH
+ ethers(5), rarp(8), route(8), ifconfig(8), netstat(8)
++
+ .SH AUTOREN
+-Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org> mit vielen Verbesserungen vom
+-Verwalter der Net-Tools Bernd Eckenfels <net-tools@lina.inka.de>.
++Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org>, Bernd Eckenfels <net-tools@lina.inka.de>.
++
+ .SH \(:Ubersetzung
+-Ralf B\(:achle <ralf@gnu.org>
++Ralf B\(:achle <ralf@gnu.org>, Simon A. Eugster <simon.eu@gmail.com>
+diff --git a/man/de_DE/ifconfig.8 b/man/de_DE/ifconfig.8
+index aa2a4a0..9713965 100644
+--- a/man/de_DE/ifconfig.8
++++ b/man/de_DE/ifconfig.8
+@@ -73,9 +73,6 @@ Modus. Ist er eingeschaltet, so werden alle Multicastpakete vom Netzwerk
+ empfangen unabh\(:angig davon, ob sie an die Schnittstelle adressiert sind
+ oder nicht.
+ .TP
+-.B "metric N"
+-Dieses Argument setzt den Metrik-Wert f\(:ur die Schnittstelle auf N.
+-.TP
+ .B "mtu N"
+ Dieses Argument setzt die Maximum Transfer Unit (MTU) der Schnittstelle,
+ das ist das gr\(:o\(sste Paket, dass gesendet werden kann.
+@@ -98,7 +95,7 @@ F\(:ugt der Schnittstelle eine IPv6-Adresse zu.
+ .B "del addr/prefixlen"
+ Entfernt eine IPv6-Adresse von der Schnittstelle.
+ .TP
+-.B "tunnel aa.bb.cc.dd"
++.B "tunnel ::aa.bb.cc.dd"
+ Erzeugt ein neues SIT (IPv6-in-IPv4) Ger\(:at, das Pakete zum angegebenen
+ Ziel tunnelt.
+ .TP
+@@ -180,12 +177,10 @@ Seit Kernel Version 2.2 gibt es keine expliziten Statistiken f\(:ur
+ Schnittstellenaliase mehr. Die Statistiken f\(:ur die Originaladresse werden
+ mit allen Aliasen auf das gleiche Ger\(:at geteilt. Um Statistiken per
+ Adresse zu erhalten sollte explizite EIntr\(:age f\(:ur die Adresse mit dem
+-.BR ipchains(8)
++.BR iptables(8)
+ Kommando gemacht werden.
+
+ .SH DATEIEN
+-.I /proc/net/socket
+-.br
+ .I /proc/net/dev
+ .br
+ .I /proc/net/if_inet6
+@@ -193,7 +188,7 @@ Kommando gemacht werden.
+ W\(:ahrend AppleTalk DDP und IPX Adressen angezeigt werden, k\(:onnen sie mit
+ diesem Kommando nicht ge\(:andert werden.
+ .SH SIEHE AUCH
+-route(8), netstat(8), arp(8), rarp(8), ipchains(8)
++route(8), netstat(8), arp(8), rarp(8), iptables(8)
+ .SH AUTOREN
+ Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org>
+ .br
+diff --git a/man/de_DE/netstat.8 b/man/de_DE/netstat.8
+index f59aec0..d6b77ff 100644
+--- a/man/de_DE/netstat.8
++++ b/man/de_DE/netstat.8
+@@ -9,7 +9,7 @@
+ .\" Modified: Tuan Hoang tuan@optimus.mitre.org
+ .\"
+ .\"
+-.TH NETSTAT 8 "6. M\(:arz 1999" "net-tools" "Handbuch f\(:ur Linuxprogrammierer"
++.TH NETSTAT 8 "2007-12-02" "net-tools" "Handbuch f\(:ur Linuxprogrammierer"
+
+ .SH NAME
+ netstat \- Anzeige von Netzwerksverbindungen, Routentabellen, Schnittstellenstatistiken, maskierten Verbindungen, Netlink-Nachrichten und Mitgliedschaft in Multicastgruppen
+@@ -44,7 +44,6 @@ netstat \- Anzeige von Netzwerksverbindungen, Routentabellen, Schnittstellenstat
+ .B netstat
+ .RB [ \-veenpac ]
+ .RB { \-\-interfaces | \-i }
+-.RI [ Schnittstelle ]
+
+ .PP
+
+@@ -68,6 +67,8 @@ netstat \- Anzeige von Netzwerksverbindungen, Routentabellen, Schnittstellenstat
+ .SH BESCHREIBUNG
+ .B Netstat
+ zeigt Informationen des Linux Netzwerkssystems an.
++.PP
++.B Bitte beachten Sie, dass der Inhalt der deutschen man-page nicht vollst\(:andig ist, im Moment.
+
+ .SS "(no option)"
+ Ohne Optionen zeigt
+@@ -103,18 +104,17 @@ benutzt das Ausgabeformat von
+ Wegen Details siehe
+ .BR route (8).
+
+-.SS "\-i, \-\-interface \fISchnittstelle\fI"
++.SS "\-i, \-\-interfaces"
+ Wird die
+ .BR -i ", " --interfaces
+-Option verwendet, so wird eine Tabelle aller (oder der angegebenen
+-.IR Schnittstellen )
++Option verwendet, so wird eine Tabelle aller Schnittstellen
+ ausgedruckt. Die Ausgabe ist im Format von
+ .B "ifconfig -e"
+ und wird in
+ .BR ifconfig (8)
+ beschrieben.
+ .B "netstat -ei"
+-druckt eine Tabelle oder einen Eintrag f\(:ur einen einzelnes Interface wie
++druckt eine Tabelle f\(:ur Interfaces wie
+ .BR ifconfig .
+ Die
+ .B -a
+@@ -182,7 +182,7 @@ Dies hat den gleichen Effekt wie die Langoptionen
+ und
+ .BR \-\-ddp.
+
+-.SS "\-c, \-\-continous"
++.SS "\-c, \-\-continuous"
+ Mit dieser Option wiederholt
+ .B netstat
+ im Sekundenabstand die Ausgabe, bis es abgebrochen wird.
+@@ -414,7 +414,7 @@ werden.)
+ Seit der Kern Version 2.2 zeigt netstat -i keine Schnittstellenstatistiken
+ von Schnittstellenaliasen mehr an. Um Statistiken per Schnittstelle zur
+ erhalten, m\(:ussen jetzt mit dem
+-.BR ipchains(8)
++.BR iptables(8)
+ Befehl explizite Regeln zugef\(:ugt werden.
+
+ .SH DATEIEN
+@@ -477,10 +477,7 @@ Befehl explizite Regeln zugef\(:ugt werden.
+ .SH SIEHE AUCH
+ .BR route (8),
+ .BR ifconfig (8),
+-.BR ipfw (4),
+-.BR ipfw (8),
+-.BR ipfwadm (8)
+-.BR ipchains (8)
++.BR iptables (8)
+
+ .PP
+ .SH PROBLEME
+diff --git a/man/de_DE/route.8 b/man/de_DE/route.8
+index a28c9d1..1a32712 100644
+--- a/man/de_DE/route.8
++++ b/man/de_DE/route.8
+@@ -55,7 +55,7 @@ Schnittstelle]
+ .SH BESCHREIBUNG
+ .B Route
+ wird zum \(:Andern der IP-Routing-Tabelle der Kernels verwendet. Seine
+-prim\(:are Verwendung ist statische Routen f\*:ur bestimmte Rechner oder
++prim\(:are Verwendung ist statische Routen f\(:ur bestimmte Rechner oder
+ Netzwerke \(:uber eine Schnittstelle einzutragen, nachdem diese mit dem
+ Programm
+ .BR ifconfig (8)
+diff --git a/man/en_US/arp.8 b/man/en_US/arp.8
+index d859b46..c065e22 100644
+--- a/man/en_US/arp.8
++++ b/man/en_US/arp.8
+@@ -1,56 +1,111 @@
+-.TH ARP 8 "5 Jan 1999" "net-tools" "Linux Programmer's Manual"
++.TH ARP 8 "2008\-10\-03" "net\-tools" "Linux System Administrator's Manual"
+ .SH NAME
+ arp \- manipulate the system ARP cache
+ .SH SYNOPSIS
+-.B arp
+-.RB [ \-vn ]
+-.RB [ "\-H type" ]
+-.RB [ "-i if" ]
+-.B -a
+-.RB [ hostname ]
++.B arp
++.RB [ \-vn ]
++.RB [ \-H
++.IR type ]
++.RB [ \-i
++.IR if ]
++.RB [ \-ae ]
++.RI [ hostname ]
+ .PP
+-.B arp
++.B arp
+ .RB [ \-v ]
+-.RB [ "\-i if" ]
+-.B "\-d hostname"
++.RB [ \-i
++.IR if ]
++.B \-d
++.I hostname
+ .RB [ pub ]
+ .PP
+-.B arp
+-.RB [ \-v ]
+-.RB [ "\-H type" ]
+-.RB [ "\-i if" ]
+-.B -s hostname hw_addr
+-.RB [ temp ]
++.B arp
++.RB [ \-v ]
++.RB [ \-H
++.IR type ]
++.RB [ \-i
++.IR if ]
++.B \-s
++.I hostname hw_addr
++.RB [ temp ]
+ .PP
+-.B arp
+-.RB [ \-v ]
+-.RB [ "\-H type" ]
+-.RB [ "\-i if" ]
+-.B -s hostname hw_addr
+-.RB [ "netmask nm" ]
++.B arp
++.RB [ \-v ]
++.RB [ \-H
++.IR type ]
++.RB [ \-i
++.IR if ]
++.B \-s
++.I hostname hw_addr
++.RB [ netmask
++.IR nm ]
+ .B pub
+ .PP
+-.B arp
+-.RB [ \-v ]
+-.RB [ "\-H type" ]
+-.RB [ "\-i if" ]
+-.B -Ds hostname ifa
+-.RB [ "netmask nm" ]
++.B arp
++.RB [ \-v ]
++.RB [ \-H
++.IR type ]
++.RB [ \-i
++.IR if ]
++.B \-Ds
++.I hostname
++.I ifname
++.RB [ netmask
++.IR nm ]
+ .B pub
+ .PP
+-.B arp
++.B arp
+ .RB [ \-vnD ]
+-.RB [ "\-H type" ]
+-.RB [ "-i if" ]
+-.B -f [filename]
++.RB [ \-H
++.IR type ]
++.RB [ \-i
++.IR if ]
++.B \-f
++.RI [ filename ]
+
+ .SH DESCRIPTION
+ .B Arp
+-manipulates the kernel's ARP cache in various ways. The primary options
+-are clearing an address mapping entry and manually setting up one. For
+-debugging purposes, the
++manipulates or displays the kernel's IPv4 network neighbour cache. It can add
++entries to the table, delete one or display the current content.
++
++.B ARP
++stands for Address Resolution Protocol, which is used to find the media
++access control address of a network neighbour for a given IPv4 Address.
++.SH MODES
+ .B arp
+-program also allows a complete dump of the ARP cache.
++with no mode specifier will print the current content of the table. It is
++possible to limit the number of entries printed, by specifying an hardware
++address type, interface name or host address.
++
++.B arp -d
++.I address
++will delete a ARP table entry. Root or netadmin privilege is required to do
++this. The entry is found by IP address. If a hostname is given, it will be
++resolved before looking up the entry in the ARP table.
++
++.B arp -s
++.I address hw_addr
++is used to set up a new table entry. The format of the
++.I hw_addr
++parameter is dependent on the hardware class, but for most classes one can
++assume that the usual presentation can be used. For the Ethernet class,
++this is 6 bytes in hexadecimal, separated by colons. When adding proxy arp
++entries (that is those with the
++.BR pub lish
++flag set) a
++.B netmask
++may be specified to proxy arp for entire subnets. This is not good
++practice, but is supported by older kernels because it can be
++useful. If the
++.B temp
++flag is not supplied entries will be permanent stored into the ARP
++cache. To simplify setting up entries for one of your own network interfaces, you can use the
++.B "arp \-Ds"
++.I address ifname
++form. In that case the hardware address is taken from the interface with the
++specified name.
++
++.br
+ .SH OPTIONS
+ .TP
+ .B "\-v, \-\-verbose"
+@@ -60,7 +115,7 @@ Tell the user what is going on by being verbose.
+ shows numerical addresses instead of trying to determine symbolic host, port
+ or user names.
+ .TP
+-.B "\-H type, \-\-hw-type type"
++\fB\-H\fI type\fR, \fB\-\-hw\-type\fI type\fR, \fB\-t\fI type\fR
+ When setting or reading the ARP cache, this optional parameter tells
+ .B arp
+ which class of entries it should check for. The default value of
+@@ -76,23 +131,18 @@ Other values might include network technologies such as
+ and
+ .RB "NET/ROM (" netrom ")."
+ .TP
+-.B "\-a [hostname], \-\-display [hostname]"
+-Shows the entries of the specified hosts. If the
+-.B hostname
+-parameter is not used,
+-.B all
+-entries will be displayed.
++.B \-a
++Use alternate BSD style output format (with no fixed columns).
+ .TP
+-.B "\-d hostname, \-\-delete hostname"
+-Remove any entry for the specified host. This can be used if the
+-indicated host is brought down, for example.
++.B \-e
++Use default Linux style output format (with fixed columns).
+ .TP
+ .B "\-D, \-\-use-device"
+-Use the interface
+-.BR ifa "'s"
+-hardware address.
++Instead of a hw_addr, the given argument is the name of an interface.
++.B arp
++will use the MAC address of that interface for the table entry. This is usually the best option to set up a proxy ARP entry to yourself.
+ .TP
+-.B "\-i If, \-\-device If"
++\fB\-i\fI If\fR, \fB\-\-device\fI If\fR
+ Select an interface. When dumping the ARP cache only entries matching
+ the specified interface will be printed. When setting a permanent or
+ .B temp
+@@ -101,53 +151,36 @@ option is not used, the kernel will guess based on the routing
+ table. For
+ .B pub
+ entries the specified interface is the interface on which ARP requests will
+-be answered.
++be answered.
+ .br
+ .B NOTE:
+ This has to be different from the interface to which the IP
+ datagrams will be routed.
+-.TP
+-.B "\-s hostname hw_addr, \-\-set hostname"
+-Manually create an ARP address mapping entry for host
+-.B hostname
+-with hardware address set to
+-.B hw_addr
+-. The format of the hardware address is dependent on the hardware
+-class, but for most classes one can assume that the usual presentation
+-can be used. For the Ethernet class, this is 6 bytes in hexadecimal,
+-separated by colons. When adding proxy arp entries (that is those with
+-the
+-.BR pub lish
+-flag set a
+-.B netmask
+-may be specified to proxy arp for entire subnets. This is not good
+-practice, but is supported by older kernels because it can be
+-useful. If the
+-.B temp
+-flag is not supplied entries will be permanent stored into the ARP
+-cache.
+-.br
+ .B NOTE:
+-As of kernel 2.2.0 it is no longer possible to set an ARP entry for an
++As of kernel 2.2.0 it is no longer possible to set an ARP entry for an
+ entire subnet. Linux instead does automagic proxy arp when a route
+-exists and it is forwarding. See
++exists and it is forwarding. See
+ .BR arp (7)
+-for details.
++for details. Also the
++.B dontpub
++option which is available for delete and set operations cannot be
++used with 2.4 and newer kernels.
+ .TP
+-.B "\-f filename, \-\-file filename"
++\fB\-f\fI filename\fR, \fB\-\-file\fI filename\fR
+ Similar to the
+ .B \-s
+ option, only this time the address info is taken from file
+-.B filename
+-. This can be used if ARP entries for a lot of hosts have to be
++.IR filename .
++This can be used if ARP entries for a lot of hosts have to be
+ set up. The name of the data file is very often
+-.IR /etc/ethers ,
+-but this is not official. If no filename is specified /etc/ethers
++.IR /etc/ethers ,
++but this is not official. If no filename is specified
++.I /etc/ethers
+ is used as default.
+ .sp 1
+ The format of the file is simple; it
+ only contains ASCII text lines with a hostname, and a hardware
+-address separated by whitespace. Additionally the
++address separated by whitespace. Additionally the
+ .BR "pub" , " temp" " and" " netmask"
+ flags can be used.
+ .LP
+@@ -157,9 +190,9 @@ is expected, one can also enter an
+ .B "IP address"
+ in dotted-decimal notation.
+ .P
+-As a special case for compatibility the order of the hostname and
++As a special case for compatibility the order of the hostname and
+ the hardware address can be exchanged.
+-.LP
++.LP
+ Each complete entry in the ARP cache will be marked with the
+ .B C
+ flag. Permanent entries are marked with
+@@ -167,8 +200,18 @@ flag. Permanent entries are marked with
+ and published entries have the
+ .B P
+ flag.
++.SH EXAMPLES
++.B /usr/sbin/arp -i eth0 -Ds 10.0.0.2 eth1 pub
++
++This will answer ARP requests for 10.0.0.2 on eth0 with the MAC address for
++eth1.
++
++.B /usr/sbin/arp -i eth1 -d 10.0.0.1
++
++Delete the ARP table entry for 10.0.0.1 on interface eth1. This will match
++published proxy ARP entries and permanent entries.
+ .SH FILES
+-.I /proc/net/arp,
++.I /proc/net/arp
+ .br
+ .I /etc/networks
+ .br
+@@ -178,5 +221,4 @@ flag.
+ .SH SEE ALSO
+ rarp(8), route(8), ifconfig(8), netstat(8)
+ .SH AUTHORS
+-Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org> with a lot of improvements
+-from net-tools Maintainer Bernd Eckenfels <net-tools@lina.inka.de>.
++Fred N. van Kempen <waltje@uwalt.nl.mugnet.org>, Bernd Eckenfels <net\-tools@lina.inka.de>.
+diff --git a/man/en_US/ethers.5 b/man/en_US/ethers.5
+index f3ba116..5a02892 100644
+--- a/man/en_US/ethers.5
++++ b/man/en_US/ethers.5
+@@ -1,4 +1,4 @@
+-.TH ETHERS 5 "April 26th, 1996" "" "File formats"
++.TH ETHERS 5 "2008\-10\-03" "net\-tools" "Linux System Administrator's Manual"
+ .SH NAME \"{{{roff}}}\"{{{
+ ethers \- Ethernet address to IP number database
+ .\"}}}
+@@ -7,17 +7,17 @@ ethers \- Ethernet address to IP number database
+ IP numbers, one line for each IP number:
+ .sp
+ .RS
+-\fIEthernet-address\fP \fIIP-number\fP
++\fIEthernet\-address\fP \fIIP\-number\fP
+ .RE
+ .sp
+-The two items are separated by any number of SPACE and/or TAB char
+-acters. A \fB#\fP at the beginning of a line starts a comment
+-which extends to the end of the line. The \fIEthernet-address\fP is
++The two items are separated by any number of SPACE and/or TAB characters.
++A \fB#\fP at the beginning of a line starts a comment
++which extends to the end of the line. The \fIEthernet\-address\fP is
+ written as
+ .IR x : x : x : x : x : x ,
+ where \fIx\fP is a hexadecimal number between \fB0\fP and \fBff\fP
+ which represents one byte of the address, which is in network byte
+-order (big-endian). The \fIIP-number\fP may be a hostname which
++order (big-endian). The \fIIP\-number\fP may be a hostname which
+ can be resolved by DNS or a dot separated number.
+ .\"}}}
+ .SH EXAMPLES \"{{{
+diff --git a/man/en_US/hostname.1 b/man/en_US/hostname.1
+index cea3f6e..9f7dd7f 100644
+--- a/man/en_US/hostname.1
++++ b/man/en_US/hostname.1
+@@ -1,4 +1,4 @@
+-.TH HOSTNAME 1 "28 Jan 1996" "net-tools" "Linux Programmer's Manual"
++.TH HOSTNAME 1 "2008\-10\-03" "net\-tools" "Linux System Administrator's Manual"
+
+ .SH NAME
+ hostname \- show or set the system's host name
+@@ -23,7 +23,7 @@ nodename \- show or set the system's DECnet node name
+ .RB [ \-f ]
+ .RB [ \-\-fqdn ]
+ .RB [ \-i ]
+-.RB [ \-\-ip-address ]
++.RB [ \-\-ip\-address ]
+ .RB [ \-\-long ]
+ .RB [ \-s ]
+ .RB [ \-\-short ]
+@@ -181,7 +181,7 @@ part of the FQDN) in the \fI/etc/hosts\fR file.
+ .I "\-h, \-\-help"
+ Print a usage message and exit.
+ .TP
+-.I "\-i, \-\-ip-address"
++.I "\-i, \-\-ip\-address"
+ Display the IP address(es) of the host.
+ .TP
+ .I "\-n, \-\-node"
+@@ -205,9 +205,9 @@ Display the NIS domain name. If a parameter is given (or
+ .SH FILES
+ .B /etc/hosts
+ .SH AUTHOR
+-Peter Tobias, <tobias@et-inf.fho-emden.de>
++Peter Tobias, <tobias@et\-inf.fho\-emden.de>
+ .br
+-Bernd Eckenfels, <net-tools@lina.inka.de> (NIS and manpage).
++Bernd Eckenfels, <net\-tools@lina.inka.de> (NIS and manpage).
+ .br
+ Steve Whitehouse, <SteveW@ACM.org> (DECnet support and manpage).
+
+diff --git a/man/en_US/ifconfig.8 b/man/en_US/ifconfig.8
+index e75cf59..0243be3 100644
+--- a/man/en_US/ifconfig.8
++++ b/man/en_US/ifconfig.8
+@@ -1,10 +1,10 @@
+-.TH IFCONFIG 8 "14 August 2000" "net-tools" "Linux Programmer's Manual"
++.TH IFCONFIG 8 "2008\-10\-03" "net\-tools" "Linux System Administrator's Manual"
+ .SH NAME
+ ifconfig \- configure a network interface
+ .SH SYNOPSIS
+-.B "ifconfig [interface]"
++.B "ifconfig [-v] [-a] [-s] [interface]"
+ .br
+-.B "ifconfig interface [aftype] options | address ..."
++.B "ifconfig [-v] interface [aftype] options | address ..."
+ .SH DESCRIPTION
+ .B Ifconfig
+ is used to configure the kernel-resident network interfaces. It is
+@@ -18,7 +18,7 @@ a single
+ .B interface
+ argument is given, it displays the status of the given interface
+ only; if a single
+-.B -a
++.B \-a
+ argument is given, it displays the status of all interfaces, even
+ those that are down. Otherwise, it configures an interface.
+
+@@ -39,13 +39,34 @@ supported address families include
+ (Novell IPX) and
+ .B netrom
+ (AMPR Packet radio).
++All numbers supplied as parts in IPv4 dotted decimal notation may be decimal,
++octal, or hexadecimal, as specified in the ISO C standard (that is, a leading 0x
++or 0X implies hexadecimal; otherwise, a leading '0' implies octal; otherwise,
++the number is interpreted as decimal). Use of hexadecimal and octal numbers
++is not RFC-compliant and therefore its use is discouraged.
+ .SH OPTIONS
+ .TP
++.B -a
++display all interfaces which are currently available, even if down
++.TP
++.B -s
++display a short list (like netstat -i)
++.TP
++.B -v
++be more verbose for some error conditions
++.TP
+ .B interface
+ The name of the interface. This is usually a driver name followed by
+ a unit number, for example
+ .B eth0
+-for the first Ethernet interface.
++for the first Ethernet interface. If your kernel supports alias interfaces,
++you can specify them with
++.B eth0:0
++for the first alias of eth0. You can use them to assign a second address. To
++delete an alias interface use
++.BR "ifconfig eth0:0 down" .
++Note: for every scope (i.e. same net with address/netmask combination) all
++aliases are deleted, if you delete the first (primary).
+ .TP
+ .B up
+ This flag causes the interface to be activated. It is implicitly
+@@ -69,9 +90,6 @@ Enable or disable
+ mode. If selected, all multicast packets on the network will be
+ received by the interface.
+ .TP
+-.B "metric N"
+-This parameter sets the interface metric.
+-.TP
+ .B "mtu N"
+ This parameter sets the Maximum Transfer Unit (MTU) of an interface.
+ .TP
+@@ -92,7 +110,7 @@ Add an IPv6 address to an interface.
+ .B "del addr/prefixlen"
+ Remove an IPv6 address from an interface.
+ .TP
+-.B "tunnel aa.bb.cc.dd"
++.B "tunnel ::aa.bb.cc.dd"
+ Create a new SIT (IPv6-in-IPv4) device, tunnelling to the given destination.
+ .TP
+ .B "irq addr"
+@@ -122,13 +140,13 @@ are
+ can be used to tell the driver to auto-sense the media. Again, not
+ all drivers can do this.
+ .TP
+-.B "[-]broadcast [addr]"
++.B "[\-]broadcast [addr]"
+ If the address argument is given, set the protocol broadcast
+ address for this interface. Otherwise, set (or clear) the
+ .B IFF_BROADCAST
+ flag for the interface.
+ .TP
+-.B "[-]pointopoint [addr]"
++.B "[\-]pointopoint [addr]"
+ This keyword enables the
+ .B point-to-point
+ mode of an interface, meaning that it is a direct link between two
+@@ -173,23 +191,40 @@ alias interfaces anymore. The statistics printed for the original address
+ are shared with all alias addresses on the same device. If you want per-address
+ statistics you should add explicit accounting
+ rules for the address using the
+-.BR ipchains(8)
++.BR iptables (8)
+ command.
+ .LP
+-Interrupt problems with Ethernet device drivers fail with EAGAIN. See
+-.I http://cesdis.gsfc.nasa.gov/linux/misc/irq-conflict.html
++Since net\-tools 1.60\-4 ifconfig is printing byte counters and human readable
++counters with IEC 60027-2 units. So 1 KiB are 2^10 byte. Note, the numbers
++are truncated to one decimal (which can by quite a large error if you
++consider 0.1 PiB is 112.589.990.684.262 bytes :)
++.LP
++Interrupt problems with Ethernet device drivers fail with EAGAIN
++.I (SIOCSIIFLAGS: Resource temporarily unavailable)
++it is most likely a interrupt conflict. See
++.I http://www.scyld.com/expert/irq\-conflict.html
+ for more information.
+ .SH FILES
+-.I /proc/net/socket
+-.br
+ .I /proc/net/dev
+ .br
+ .I /proc/net/if_inet6
+ .SH BUGS
++Ifconfig uses the ioctl access method to get the full address information,
++which limits hardware addresses to 8 bytes.
++Because Infiniband hardware address has 20 bytes,
++only the first 8 bytes are displayed correctly.
++Please use
++.B ip link
++command from
++.B iproute2
++package to display link layer informations including the hardware address.
++.LP
+ While appletalk DDP and IPX addresses will be displayed they cannot be
+ altered by this command.
+ .SH SEE ALSO
+-route(8), netstat(8), arp(8), rarp(8), ipchains(8)
++route(8), netstat(8), arp(8), rarp(8), iptables(8), ifup(8), interfaces(5).
++.br
++http://physics.nist.gov/cuu/Units/binary.html - Prefixes for binary multiples
+ .SH AUTHORS
+ Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org>
+ .br
+@@ -198,3 +233,5 @@ Alan Cox, <Alan.Cox@linux.org>
+ Phil Blundell, <Philip.Blundell@pobox.com>
+ .br
+ Andi Kleen
++.br
++Bernd Eckenfels, <net\-tools@lina.inka.de>
+diff --git a/man/en_US/mii-tool.8 b/man/en_US/mii-tool.8
+index 6b773ec..7decaac 100644
+--- a/man/en_US/mii-tool.8
++++ b/man/en_US/mii-tool.8
+@@ -1,13 +1,12 @@
+ .\" Copyright (C) 2000 David A. Hinds -- dhinds@pcmcia.sourceforge.org
+-.\" mii-tool.8 1.5 2000/04/25 22:58:19
+ .\"
+-.TH MII-TOOL 8 "2000/04/25 22:58:19" "net-tools"
++.TH MII\-TOOL 8 "2013\-02\-15" "net\-tools" "Linux System Administrator's Manual"
+
+ .SH NAME
+-mii-tool \- view, manipulate media-independent interface status
++mii\-tool \- view, manipulate media-independent interface status
+
+ .SH SYNOPSIS
+-.B mii-tool
++.B mii\-tool
+ [\fB\-v\fR, \fB\-\-verbose\fR]
+ [\fB\-V\fR, \fB\-\-version\fR]
+ [\fB\-R\fR, \fB\-\-reset\fR]
+@@ -16,7 +15,8 @@ mii-tool \- view, manipulate media-independent interface status
+ [\fB\-l\fR, \fB\-\-log\fR]
+ [\fB\-A\fR, \fB\-\-advertise=\fImedia,...\fR]
+ [\fB\-F\fR, \fB\-\-force=\fImedia\fR]
+-.RI [ "interface\ ..." ]
++[\fB\-p\fR, \fB\-\-phy=\fIaddr\fR]
++.RI "interface\ ..."
+
+ .SH DESCRIPTION
+ This utility checks or sets the status of a network interface's Media
+@@ -32,18 +32,21 @@ single-speed hubs, are unable to autonegotiate. To handle such
+ devices, the MII protocol also allows for establishing a link by
+ simply detecting either a 10baseT or 100baseT link beat. The \fB\-F\fR
+ or \fB\-\-force\fR options can be used to force the MII to operate in
+-one mode, instead of autonegotiating. The \fB\-A\fR and \fB-F\fR
++one mode, instead of autonegotiating. The \fB\-A\fR and \fB\-F\fR
+ options are mutually exclusive.
+ .PP
+ The default short output reports the negotiated link speed and link
+-status for each interface. If an interface or interfaces are not
+-specified on the command line, then \fBmii-tool\fR will check any
+-available interfaces from \fBeth0\fR through \fBeth7\fR.
++status for each interface.
+ .SH OPTIONS
+ .TP
+ \fB\-v\fR, \fB\-\-verbose\fR
+ Display more detailed MII status information. If used twice, also
+ display raw MII register contents.
++.br
++\fBAlert:\fR If used three times, will force reading all MII
++registers, including non standard ones. It's not guaranteed any
++valid answer from PHY while PHY communication can even hang.
++With driver e1000e will fail while reading register 0x07.
+ .TP
+ \fB\-V\fR, \fB\-\-version\fR
+ Display program version information.
+@@ -59,7 +62,7 @@ Watch interface(s) and report changes in link status. The MII
+ interfaces are polled at one second intervals.
+ .TP
+ \fB\-l\fR, \fB\-\-log\fR
+-Used with \fB-w\fR, records link status changes in the system log
++Used with \fB\-w\fR, records link status changes in the system log
+ instead of printing on standard output.
+ .TP
+ \fB\-F\fI media\fR, \fB\-\-force=\fImedia\fR
+@@ -71,8 +74,31 @@ Enable and restart autonegotiation, and advertise only the specified
+ media technologies. Multiple technologies should be separated by
+ commas. Valid media are \fB100baseT4\fR, \fB100baseTx-FD\fR,
+ \fB100baseTx-HD\fR, \fB10baseT-FD\fR, and \fB10baseT-HD\fR.
++.TP
++\fB\-p\fI addr\fR, \fB\-\-phy=\fIaddr\fR
++Override the MII address provided by kernel with value \fBaddr\fR.
++
++.SH DIAGNOSTICS
++.TP
++SIOCGMIIPHY on 'eth?' failed: Invalid argument
++If the interface is not running (up), kernel will refuse to report its link state.
++.TP
++SIOCGMIIPHY on 'eth?' failed: Operation not permitted
++Most kernels restrict access to root.
++.TP
++SIOCGMIIPHY on 'eth?' failed: No such device
++This error is shown, if the kernel does not know about the named device.
++.TP
++SIOCGMIIPHY on 'eth?' failed: Operation not supported
++The interface in question does not support MII queries. Most likely, it does not have
++MII transceivers, at all.
+
+ .SH AUTHORS
+ David Hinds \- dhinds@pcmcia.sourceforge.org
+ .br
+ Donald Becker \- becker@scyld.com
++.br
++Bernd Eckenfels \- net-tools@lina.inka.de
++
++.SH SEE ALSO
++http://net-tools.sourceforge.net \- Homepage of the net-tools project
+diff --git a/man/en_US/nameif.8 b/man/en_US/nameif.8
+index ff2430f..195304d 100644
+--- a/man/en_US/nameif.8
++++ b/man/en_US/nameif.8
+@@ -1,10 +1,10 @@
+-.TH NAMEIF 8 "18 Oct 2000" "net-tools" "Linux's Administrator's Manual"
++.TH NAMEIF 8 "2008\-10\-03" "net\-tools" "Linux System Administrator's Manual"
+ .SH NAME
+ nameif \- name network interfaces based on MAC addresses
+ .SH SYNOPSIS
+-.B "nameif [-c configfile] [-s]"
++.B "nameif [\-c configfile] [\-s]"
+ .br
+-.B "nameif [-c configfile] [-s] {interface macaddress}"
++.B "nameif [\-c configfile] [\-s] {interface macaddress}"
+ .SH DESCRIPTION
+ .B nameif
+ renames network interfaces based on mac addresses. When no arguments are
+@@ -18,11 +18,11 @@ looks for the interface with the given MAC address and renames it to the
+ name given.
+
+ When the
+-.I -s
++.I \-s
+ argument is given all error messages go to the syslog.
+
+ When the
+-.I -c
++.I \-c
+ argument is given with a file name that file is read instead of /etc/mactab.
+
+ .SH NOTES
+diff --git a/man/en_US/netstat.8 b/man/en_US/netstat.8
+index b33996a..1aba23b 100644
+--- a/man/en_US/netstat.8
++++ b/man/en_US/netstat.8
+@@ -6,9 +6,10 @@
+ .\" Modified: Bernd.Eckenfels@inka.de
+ .\" Modified: Andi Kleen ak@muc.de
+ .\" Modified: Tuan Hoang tqhoang@bigfoot.com
++.\" Modified: Brian Micek bmicek@gmail.com
+ .\"
+ .\"
+-.TH NETSTAT 8 "19 December 2000" "net-tools" "Linux Programmer's Manual"
++.TH NETSTAT 8 "2012\-09\-15" "net\-tools" "Linux System Administrator's Manual"
+
+ .SH NAME
+ netstat \- Print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships
+@@ -19,17 +20,19 @@ netstat \- Print network connections, routing tables, interface statistics, masq
+ .RI [ address_family_options ]
+ .RB [ \-\-tcp | \-t ]
+ .RB [ \-\-udp | \-u ]
++.RB [ \-\-udplite | \-U ]
+ .RB [ \-\-raw | \-w ]
+ .RB [ \-\-listening | \-l ]
+ .RB [ \-\-all | \-a ]
+ .RB [ \-\-numeric | \-n ]
+-.RB [ \-\-numeric-hosts ] [ \-\-numeric-ports ] [ \-\-numeric-ports ]
++.RB [ \-\-numeric\-hosts "] [" \-\-numeric\-ports "] [" \-\-numeric\-users ]
+ .RB [ \-\-symbolic | \-N ]
+ .RB [ \-\-extend | \-e [ \-\-extend | \-e] ]
+ .RB [ \-\-timers | \-o ]
+ .RB [ \-\-program | \-p ]
+ .RB [ \-\-verbose | \-v ]
+ .RB [ \-\-continuous | \-c]
++.RB [ \-\-wide | \-W]
+ .P
+ .B netstat
+ .RB { \-\-route | \-r }
+@@ -37,37 +40,37 @@ netstat \- Print network connections, routing tables, interface statistics, masq
+ .RB [ \-\-extend | \-e [ \-\-extend | \-e] ]
+ .RB [ \-\-verbose | \-v ]
+ .RB [ \-\-numeric | \-n ]
+-.RB [ \-\-numeric-hosts ] [ \-\-numeric-ports ] [ \-\-numeric-ports ]
++.RB [ \-\-numeric\-hosts "] [" \-\-numeric\-ports "] [" \-\-numeric\-users ]
+ .RB [ \-\-continuous | \-c]
+ .P
+ .B netstat
+ .RB { \-\-interfaces | \-i }
+-.RI [ iface ]
+ .RB [ \-\-all | \-a ]
+ .RB [ \-\-extend | \-e [ \-\-extend | \-e] ]
+ .RB [ \-\-verbose | \-v ]
+ .RB [ \-\-program | \-p ]
+ .RB [ \-\-numeric | \-n ]
+-.RB [ \-\-numeric-hosts ] [ \-\-numeric-ports ] [ \-\-numeric-ports ]
++.RB [ \-\-numeric-hosts "] [" \-\-numeric-ports "] [" \-\-numeric-users ]
+ .RB [ \-\-continuous | \-c]
+ .P
+ .B netstat
+ .RB { \-\-groups | \-g }
+ .RB [ \-\-numeric | \-n ]
+-.RB [ \-\-numeric-hosts ] [ \-\-numeric-ports ] [ \-\-numeric-ports ]
++.RB [ \-\-numeric\-hosts "] [" \-\-numeric\-ports "] [" \-\-numeric\-users ]
+ .RB [ \-\-continuous | \-c]
+ .P
+ .B netstat
+ .RB { \-\-masquerade | \-M }
+ .RB [ \-\-extend | \-e ]
+ .RB [ \-\-numeric | \-n ]
+-.RB [ \-\-numeric-hosts ] [ \-\-numeric-ports ] [ \-\-numeric-ports ]
++.RB [ \-\-numeric\-hosts "] [" \-\-numeric\-ports "] [" \-\-numeric\-users ]
+ .RB [ \-\-continuous | \-c]
+ .P
+ .B netstat
+ .RB { \-\-statistics | -s }
+ .RB [ \-\-tcp | \-t ]
+ .RB [ \-\-udp | \-u ]
++.RB [ \-\-udplite | \-U ]
+ .RB [ \-\-raw | \-w ]
+ .P
+ .B netstat
+@@ -78,13 +81,26 @@ netstat \- Print network connections, routing tables, interface statistics, masq
+ .P
+ .IR address_family_options :
+ .PP
+-.RB [ \-\-protocol= { inet , unix , ipx , ax25 , netrom , ddp }[, ...] ]
++.RB [ -4 | \-\-inet ]
++.RB [ -6 | \-\-inet6 ]
++.RB [ \-\-protocol= { inet , inet6 , unix , ipx , ax25 , netrom , ddp ", ... } ]"
+ .RB [ \-\-unix | \-x ]
+-.RB [ \-\-inet | \-\-ip ]
++.RB [ \-\-inet | \-\-ip | \-\-tcpip ]
+ .RB [ \-\-ax25 ]
++.RB [ \-\-x25 ]
++.RB [ \-\-rose ]
++.RB [ \-\-ash ]
+ .RB [ \-\-ipx ]
+ .RB [ \-\-netrom ]
+-.RB [ \-\-ddp ]
++.RB [ \-\-ddp | \-\-appletalk ]
++.RB [ \-\-econet | \-\-ec ]
++
++.SH NOTES
++This program is obsolete.
++Replacement for \fBnetstat\fR is \fBss\fR.
++Replacement for \fBnetstat -r\fR is \fBip route\fR.
++Replacement for \fBnetstat -i\fR is \fBip -s link\fR.
++Replacement for \fBnetstat -g\fR is \fBip maddr\fR.
+
+ .SH DESCRIPTION
+ .B Netstat
+@@ -98,12 +114,17 @@ displays a list of open sockets. If you don't specify any
+ address families, then the active sockets of all configured address
+ families will be printed.
+ .SS "\-\-route , \-r"
+-Display the kernel routing tables.
++Display the kernel routing tables. See the description in
++.BR route (8)
++for details.
++.B netstat -r
++and
++.B route -e
++produce the same output.
+ .SS "\-\-groups , \-g"
+ Display multicast group membership information for IPv4 and IPv6.
+-.SS "\-\-interface=\fIiface \fR, \fB\-i"
+-Display a table of all network interfaces, or the specified
+-.IR iface ) .
++.SS "\-\-interfaces, \-i"
++Display a table of all network interfaces.
+ .SS "\-\-masquerade , \-M"
+ Display a list of masqueraded connections.
+ .SS "\-\-statistics , \-s"
+@@ -112,16 +133,19 @@ Display summary statistics for each protocol.
+ .SS "\-\-verbose , \-v"
+ Tell the user what is going on by being verbose. Especially print some
+ useful information about unconfigured address families.
++.SS "\-\-wide , \-W"
++Do not truncate IP addresses by using output as wide as needed. This is
++optional for now to not break existing scripts.
+ .SS "\-\-numeric , \-n"
+ Show numerical addresses instead of trying to determine symbolic host, port
+ or user names.
+-.SS "\-\-numeric-hosts"
++.SS "\-\-numeric\-hosts"
+ shows numerical host addresses but does not affect the resolution of
+ port or user names.
+-.SS "\-\-numeric-ports"
++.SS "\-\-numeric\-ports"
+ shows numerical port numbers but does not affect the resolution of
+ host or user names.
+-.SS "\-\-numeric-users"
++.SS "\-\-numeric\-users"
+ shows numerical user IDs but does not affect the resolution of host or
+ port names.
+
+@@ -131,15 +155,18 @@ protocols) for which connections are to be shown.
+ .I family
+ is a comma (',') separated list of address family keywords like
+ .BR inet ,
++.BR inet6 ,
+ .BR unix ,
+ .BR ipx ,
+ .BR ax25 ,
+ .BR netrom ,
++.BR econet ,
+ and
+ .BR ddp .
+ This has the same effect as using the
+-.BR \-\-inet ,
+-.BR \-\-unix " (" \-x ),
++.BR \-\-inet | -4 ,
++.BR \-\-inet6 | -6 ,
++.BR \-\-unix | -x ,
+ .BR \-\-ipx ,
+ .BR \-\-ax25 ,
+ .BR \-\-netrom ,
+@@ -149,7 +176,7 @@ options.
+ .P
+ The address family
+ .B inet
+-includes raw, udp and tcp protocol sockets.
++(Iv4) includes raw, udp, udplite and tcp protocol sockets.
+ .SS "\-c, \-\-continuous"
+ This will cause
+ .B netstat
+@@ -164,23 +191,24 @@ Show the PID and name of the program to which each socket belongs.
+ Show only listening sockets. (These are omitted by default.)
+ .SS "\-a, \-\-all"
+ Show both listening and non-listening sockets. With the
+-.B --interfaces
+-option, show interfaces that are not marked
++.B \-\-interfaces
++option, show interfaces that are not up
+ .SS "\-F"
+ Print routing information from the FIB. (This is the default.)
+ .SS "\-C"
+ Print routing information from the route cache.
+-.IR UP .
+ .P
+ .SH OUTPUT
+ .P
+-.SS Active Internet connections \fR(TCP, UDP, raw)\fR
++.SS Active Internet connections \fR(TCP, UDP, UDPLite, raw)\fR
+ .SS "Proto"
+-The protocol (tcp, udp, raw) used by the socket.
+-.SS "Recv-Q"
+-The count of bytes not copied by the user program connected to this socket.
+-.SS "Send-Q"
+-The count of bytes not acknowledged by the remote host.
++The protocol (tcp, udp, udpl, raw) used by the socket.
++.SS "Recv\-Q"
++Established: The count of bytes not copied by the user program connected to this socket.
++Listening: Since Kernel 2.6.18 this column contains the current syn backlog.
++.SS "Send\-Q"
++Established: The count of bytes not acknowledged by the remote host.
++Listening: Since Kernel 2.6.18 this column contains the maximum size of the syn backlog.
+ .SS "Local Address"
+ Address and port number of the local end of the socket. Unless the
+ .BR \-\-numeric " (" \-n )
+@@ -192,7 +220,7 @@ Address and port number of the remote end of the socket.
+ Analogous to "Local Address."
+ .SS "State"
+ The state of the socket. Since there are no states in raw mode and usually no
+-states used in UDP, this column may be left blank. Normally this can be one
++states used in UDP and UDPLite, this column may be left blank. Normally this can be one
+ of several values:
+ .TP
+ .I
+@@ -221,7 +249,7 @@ TIME_WAIT
+ The socket is waiting after close to handle packets still in the network.
+ .TP
+ .I
+-CLOSED
++CLOSE
+ The socket is not being used.
+ .TP
+ .I
+@@ -255,7 +283,7 @@ The username or the user id (UID) of the owner of the socket.
+ .SS "PID/Program name"
+ Slash-separated pair of the process id (PID) and process name of the
+ process that owns the socket.
+-.B --program
++.B \-\-program
+ causes this column to be included. You will also need
+ .I superuser
+ privileges to see this information on sockets you don't own. This
+@@ -356,13 +384,6 @@ to the socket.
+ .SS Active AX.25 sockets
+ (this needs to be done by somebody who knows it)
+ .PP
+-.SH NOTES
+-Starting with Linux release 2.2
+-.B netstat -i
+-does not show interface statistics for alias interfaces. To get per
+-alias interface counters you need to setup explicit rules using the
+-.BR ipchains(8)
+-command.
+
+ .SH FILES
+ .ta
+@@ -385,6 +406,9 @@ status information via the following files.
+ .I /proc/net/udp
+ -- UDP socket information
+
++.I /proc/net/udplite
++-- UDPLite socket information
++
+ .I /proc/net/igmp
+ -- IGMP multicast information
+
+@@ -428,9 +452,10 @@ status information via the following files.
+ .SH SEE ALSO
+ .BR route (8),
+ .BR ifconfig (8),
+-.BR ipchains (8),
+ .BR iptables (8),
+ .BR proc (5)
++.BR ss (8)
++.BR ip (8)
+ .P
+ .SH BUGS
+ Occasionally strange information may appear if a socket changes
+@@ -438,12 +463,10 @@ as it is viewed. This is unlikely to occur.
+ .P
+ .SH AUTHORS
+ The netstat user interface was written by Fred Baumgarten
+-<dc6iq@insu1.etec.uni-karlsruhe.de> the man page basically
++<dc6iq@insu1.etec.uni\-karlsruhe.de>, the man page basically
+ by Matt Welsh <mdw@tc.cornell.edu>. It was updated by
+-Alan Cox <Alan.Cox@linux.org> but could do with a bit more
+-work. It was updated again by Tuan Hoang
+-<tqhoang@bigfoot.com>.
+-.br
+-The man page and the command included in the net-tools
+-package is totally rewritten by Bernd Eckenfels
+-<ecki@linux.de>.
++Alan Cox <Alan.Cox@linux.org>, updated again by Tuan Hoang
++<tqhoang@bigfoot.com>. The man page and the command included
++in the net\-tools package is totally rewritten by Bernd Eckenfels
++<ecki@linux.de>. UDPLite options were added by Brian Micek
++<bmicek@gmail.com>
+diff --git a/man/en_US/plipconfig.8 b/man/en_US/plipconfig.8
+index c6d2567..d42a0bc 100644
+--- a/man/en_US/plipconfig.8
++++ b/man/en_US/plipconfig.8
+@@ -1,10 +1,18 @@
+-.TH PLIPCONFIG 8 "17 February 1995" "" ""
++.TH PLIPCONFIG 8 "2008\-10\-03" "net\-tools" "Linux System Administrator's Manual"
+ .SH NAME
+ plipconfig \- fine tune PLIP device parameters
+ .SH SYNOPSIS
+-.B "plipconfig interface"
++.B plipconfig interface
++.RB [ nibble
++.IR NN ]
++.RB [ trigger
++.IR NN ]
+ .br
+-.B "plipconfig interface [nibble NN] [trigger NN] [unit NN]"
++.B plipconfig
++.RB [ \-V ]
++.RB [ \-\-version ]
++.RB [ \-h ]
++.RB [ \-\-help ]
+ .SH DESCRIPTION
+ .B Plipconfig
+ is used to (hopefully) improve PLIP performance by changing the default
+diff --git a/man/en_US/rarp.8 b/man/en_US/rarp.8
+index e462799..d9d31f9 100644
+--- a/man/en_US/rarp.8
++++ b/man/en_US/rarp.8
+@@ -1,20 +1,20 @@
+-.TH RARP 8 "4 August 1997" "net-tools" "Linux Programmer's Manual"
++.TH RARP 8 "2008\-10\-03" "net\-tools" "Linux System Administrator's Manual"
+ .SH NAME
+ rarp \- manipulate the system RARP table
+ .SH SYNOPSIS
+-.B "rarp [-V] [--version] [-h] [--help]"
++.B "rarp [\-V] [\-\-version] [\-h] [\-\-help]"
+ .br
+-.B "rarp -a"
++.B "rarp \-a"
+ .br
+-.B "rarp [-v] -d hostname ..."
++.B "rarp [\-v] \-d hostname ..."
+ .br
+-.B "rarp [-v] [-t type] -s hostname hw_addr"
++.B "rarp [\-v] [\-t type] \-s hostname hw_addr"
+ .SH NOTE
+ .P
+ This program is obsolete. From version 2.3, the Linux kernel
+ no longer contains RARP support. For a replacement RARP daemon, see
+ .I
+-ftp://ftp.dementia.org/pub/net-tools
++ftp://ftp.dementia.org/pub/net\-tools
+ .SH DESCRIPTION
+ .B Rarp
+ manipulates the kernel's RARP table in various ways. The primary options
+@@ -61,8 +61,8 @@ Remove all RARP entries for the specified host.
+ Create a RARP address mapping entry for host
+ .B hostname
+ with hardware address set to
+-.B hw_addr
+-. The format of the hardware address is dependent on the hardware
++.BR hw_addr .
++The format of the hardware address is dependent on the hardware
+ class, but for most classes one can assume that the usual presentation
+ can be used. For the Ethernet class, this is 6 bytes in hexadecimal,
+ separated by colons.
+diff --git a/man/en_US/route.8 b/man/en_US/route.8
+index f59c074..3d97077 100644
+--- a/man/en_US/route.8
++++ b/man/en_US/route.8
+@@ -1,14 +1,18 @@
+-.TH ROUTE 8 "2 January 2000" "net-tools" "Linux Programmer's Manual"
++.TH ROUTE 8 "2013\-06\-15" "net\-tools" "Linux System Administrator's Manual"
+ .SH NAME
+ route \- show / manipulate the IP routing table
+ .SH SYNOPSIS
+ .B route
+-.RB [ \-CFvnee ]
++.RB [ \-CFvnNee ]
++.RB [ \-A
++family
++.RB | \-4 | \-6 ]
+ .TP
+ .B route
+ .RB [ \-v ]
+ .RB [ \-A
+-family]
++family
++.RB | \-4 | \-6 ]
+ .B add
+ .RB [ \-net | \-host ]
+ target
+@@ -34,7 +38,8 @@ If]
+ .B route
+ .RB [ \-v ]
+ .RB [ \-A
+-family]
++family
++.RB | \-4 | \-6 ]
+ .B del
+ .RB [ \-net | \-host ]
+ target
+@@ -51,7 +56,7 @@ If]
+ .RB [ \-V ]
+ .RB [ \-\-version ]
+ .RB [ \-h ]
+-.RB [ \--help ]
++.RB [ \-\-help ]
+ .SH DESCRIPTION
+ .B Route
+ manipulates the kernel's IP routing tables. Its primary use is to set
+@@ -73,16 +78,25 @@ displays the current contents of the routing tables.
+ .SH OPTIONS
+ .TP
+ .B \-A family
+-use the specified address family (eg `inet'; use `route --help' for a full
+-list).
++use the specified address family (eg `inet'). Use
++.B route \-\-help
++for a full list. You can use
++.B \-6
++as an alias for
++.B \-\-inet6
++and
++.B \-4
++as an alias for
++.B -A inet
++.
+
+ .TP
+-.B -F
++.B \-F
+ operate on the kernel's FIB (Forwarding Information Base) routing
+ table.
+ This is the default.
+ .TP
+-.B -C
++.B \-C
+ operate on the kernel's routing cache.
+
+ .TP
+@@ -96,7 +110,7 @@ nameserver has vanished.
+ .TP
+ .B \-e
+ use
+-.BR netstat (8)-format
++.BR netstat (8)\-format
+ for displaying the routing table.
+ .B \-ee
+ will generate a very long line with all parameters from the routing table.
+@@ -117,7 +131,7 @@ the
+ .B target
+ is a network.
+ .TP
+-.B -host
++.B \-host
+ the
+ .B target
+ is a host.
+@@ -138,12 +152,9 @@ compatibility hack.
+ set the metric field in the routing table (used by routing daemons) to M.
+ .TP
+ .B mss M
+-set the TCP Maximum Segment Size (MSS) for connections over this route
+-to M bytes.
+-The default is the device MTU minus headers, or a lower MTU when path mtu
+-discovery occured. This setting can be used to force smaller TCP packets on the
+-other end when path mtu discovery does not work (usually because of
+-misconfigured firewalls that block ICMP Fragmentation Needed)
++sets MTU (Maximum Transmission Unit) of the route to M bytes.
++Note that the current implementation of the route command does not allow
++the option to set the Maximum Segment Size (MSS).
+ .TP
+ .B window W
+ set the TCP window size for connections over this route to W
+@@ -179,24 +190,27 @@ modifiers (metric - netmask - gw - dev) doesn't matter.
+
+ .SH EXAMPLES
+ .TP
+-.B route add -net 127.0.0.0
+-adds the normal loopback entry, using netmask 255.0.0.0 (class A net,
+-determined from the destination address) and associated with the
+-"lo" device (assuming this device was prviously set up correctly with
++.B route add \-net 127.0.0.0 netmask 255.0.0.0 dev lo
++adds the normal loopback entry, using netmask 255.0.0.0 and associated with the
++"lo" device (assuming this device was previously set up correctly with
+ .BR ifconfig (8)).
+
+ .TP
+-.B route add -net 192.56.76.0 netmask 255.255.255.0 dev eth0
+-adds a route to the network 192.56.76.x via
+-"eth0". The Class C netmask modifier is not really necessary here because
+-192.* is a Class C IP address. The word "dev" can be omitted here.
++.B route add \-net 192.56.76.0 netmask 255.255.255.0 dev eth0
++adds a route to the local network 192.56.76.x via
++"eth0". The word "dev" can be omitted here.
++
++.TP
++.B route del default
++deletes the current default route, which is labeled "default" or 0.0.0.0
++in the destination field of the current routing table.
+
+ .TP
+-.B route add default gw mango-gw
++.B route add default gw mango\-gw
+ adds a default route (which will be used if no other route matches).
+-All packets using this route will be gatewayed through "mango-gw". The
++All packets using this route will be gatewayed through "mango\-gw". The
+ device which will actually be used for that route depends on how we
+-can reach "mango-gw" - the static route to "mango-gw" will have to be
++can reach "mango\-gw" - the static route to "mango\-gw" will have to be
+ set up before.
+
+ .TP
+@@ -205,18 +219,18 @@ Adds the route to the "ipx4" host via the SLIP interface (assuming that
+ "ipx4" is the SLIP host).
+
+ .TP
+-.B route add -net 192.57.66.0 netmask 255.255.255.0 gw ipx4
++.B route add \-net 192.57.66.0 netmask 255.255.255.0 gw ipx4
+ This command adds the net "192.57.66.x" to be gatewayed through the former
+ route to the SLIP interface.
+
+ .TP
+-.B route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0
++.B route add \-net 224.0.0.0 netmask 240.0.0.0 dev eth0
+ This is an obscure one documented so people know how to do it. This sets
+ all of the class D (multicast) IP routes to go via "eth0". This is the
+ correct normal configuration line with a multicasting kernel.
+
+ .TP
+-.B route add -net 10.0.0.0 netmask 255.0.0.0 reject
++.B route add \-net 10.0.0.0 netmask 255.0.0.0 reject
+ This installs a rejecting route for the private network "10.x.x.x."
+
+ .LP
+@@ -282,14 +296,14 @@ recent kernels, but may be needed by routing daemons.
+ Number of references to this route. (Not used in the Linux kernel.)
+ .TP
+ .B Use
+-Count of lookups for the route. Depending on the use of -F and -C this will
+-be either route cache misses (-F) or hits (-C).
++Count of lookups for the route. Depending on the use of \-F and \-C this will
++be either route cache misses (\-F) or hits (\-C).
+ .TP
+ .B Iface
+ Interface to which packets for this route will be sent.
+ .TP
+ .B MSS
+-Default maximum segement size for TCP connections over this route.
++Default maximum segment size for TCP connections over this route.
+ .TP
+ .B Window
+ Default window size for TCP connections over this route.
+@@ -323,4 +337,4 @@ for Linux was originally written by Fred N. van Kempen,
+ Linus Torvalds for pl15. Alan Cox added the mss and window options for
+ Linux 1.1.22. irtt support and merged with netstat from Bernd Eckenfels.
+ .SH AUTHOR
+-Currently maintained by Phil Blundell <Philip.Blundell@pobox.com>.
++Currently maintained by Phil Blundell <Philip.Blundell@pobox.com> and Bernd Eckenfels <net-tools@lina.inka.de>.
+diff --git a/man/en_US/slattach.8 b/man/en_US/slattach.8
+index 0c4c863..0e2cfcc 100644
+--- a/man/en_US/slattach.8
++++ b/man/en_US/slattach.8
+@@ -1,8 +1,8 @@
+-.TH SLATTACH 8 "12 Feb 1994" "" ""
++.TH SLATTACH 8 "2011\-12\-31" "net\-tools" "Linux System Administrator's Manual"
+ .SH NAME
+ slattach \- attach a network interface to a serial line
+ .SH SYNOPSIS
+-.B "slattach [-dehlLmnqv] [-c command] [-p proto] [-s speed] [tty]"
++.B "slattach [\-dehlLmnqv] [\-c command] [\-p proto] [\-s speed] [tty]"
+ .br
+ .SH DESCRIPTION
+ .B Slattach
+@@ -11,47 +11,53 @@ is a tiny little program that can be used to put a normal terminal
+ you to use it for point-to-point links to other computers.
+ .SH OPTIONS
+ .TP
+-.B "[-c command]"
++.B tty
++Path to a serial device like
++.IR /dev/ttyS* ", " /dev/cua* " or " /dev/ptmx
++to spawn a new pseudo tty.
++.TP
++.B "[\-c command]"
+ Execute
+ .B command
+ when the line is hung up. This can be used to run scripts or re-establish
+ connections when a link goes down.
+ .TP
+-.B "[-d]"
++.B "[\-d]"
+ Enable debugging output. Useful when determining why a given
+ setup doesn't work.
+ .TP
+-.B "[-h]"
++.B "[\-h]"
+ Exit when the carrier is lost. This works on both /dev/tty and /dev/cua
+ devices by directly monitoring the carrier status every 15 seconds.
+-.B "[-v]"
++.TP
++.B "[\-v]"
+ Enable verbose output. Useful in shell scripts.
+ .TP
+-.B "[-q]"
++.B "[\-q]"
+ Operate in quiet mode - no messages at all.
+ .TP
+-.B "[-l]"
++.B "[\-l]"
+ Create an UUCP-style lockfile for the device in /var/lock.
+ .TP
+-.B "[-n]"
++.B "[\-n]"
+ Equivalent to the "mesg n" command.
+ .TP
+-.B "[-m]"
++.B "[\-m]"
+ Do \fBnot\fP initialize the line into 8 bits raw mode.
+ .TP
+-.B "[-e]"
++.B "[\-e]"
+ Exit right after initializing device, instead of waiting for the
+-line to hangup.
++line to hang up.
+ .TP
+-.B "[-L]"
++.B "[\-L]"
+ Enable 3 wire operation. The terminal is moved into CLOCAL mode,
+ carrier watching is disabled.
+ .TP
+-.B "[-p proto]"
++.B "[\-p proto]"
+ Set a specific kind of protocol to use on the line. The default
+ is set to
+-.B "cslip"
+-, i.e. compressed SLIP. Other possible values are
++.BR "cslip" ,
++i.e. compressed SLIP. Other possible values are
+ .B "slip"
+ (normal SLIP),
+ .B "adaptive"
+@@ -70,14 +76,14 @@ to be active on the line. For kiss connections the
+ .B axattach
+ program should be used.
+ .TP
+-.B "[-s speed]"
++.B "[\-s speed]"
+ Set a specific line speed, other than the default.
+ .PP
+ If no arguments are given, the current terminal line (usually: the
+ login device) is used. Otherwise, an attempt is made to claim the
+ indicated terminal port, lock it, and open it.
+ .SH FILES
+-.I /dev/cua* /var/lock/LCK.*
++.I /dev/cua* /var/lock/LCK.* /dev/ttyS* /dev/ptmx
+ .SH BUGS
+ None known.
+ .SH SEE ALSO
+diff --git a/man/fr_FR/arp.8 b/man/fr_FR/arp.8
+index df37e8b..a669469 100644
+--- a/man/fr_FR/arp.8
++++ b/man/fr_FR/arp.8
+@@ -1,32 +1,32 @@
+-.TH ARP 8 "5 Jan 1999" "net-tools" "Linux Programmer's Manual"
++.TH ARP 8 "5 Jan 1999" "net-tools" "Linux Administrator's Manual"
+ .SH NOM
+-arp \- manipule la table ARP du système
++arp \- manipule la table ARP du système
+ .SH SYNOPSIS
+ .B arp
+ .RB [ \-vn ]
+ .RB [ "\-H type" ]
+ .RB [ "-i if" ]
+ .B -a
+-.RB [ nom_hôte ]
++.RB [ nom_hôte ]
+ .PP
+ .B arp
+ .RB [ \-v ]
+ .RB [ "\-i if" ]
+-.B "\-d nom_hôte"
++.B "\-d nom_hôte"
+ .RB [ pub ]
+ .PP
+ .B arp
+ .RB [ \-v ]
+ .RB [ "\-H type" ]
+ .RB [ "\-i if" ]
+-.B -s nom_hôte hw_addr
++.B -s nom_hôte hw_addr
+ .RB [ temp ]
+ .PP
+ .B arp
+ .RB [ \-v ]
+ .RB [ "\-H type" ]
+ .RB [ "\-i if" ]
+-.B -s nom_hôte hw_addr
++.B -s nom_hôte hw_addr
+ .RB [ "netmask nm" ]
+ .B pub
+ .PP
+@@ -34,7 +34,7 @@ arp \- manipule la table ARP du syst
+ .RB [ \-v ]
+ .RB [ "\-H type" ]
+ .RB [ "\-i if" ]
+-.B -Ds nom_hôte ifa
++.B -Ds nom_hôte ifa
+ .RB [ "netmask nm" ]
+ .B pub
+ .PP
+@@ -46,33 +46,33 @@ arp \- manipule la table ARP du syst
+
+ .SH DESCRIPTION
+ .B Arp
+-manipule la table ARP du noyau de différentes façons. Les options principales
+-permettent d'effacer une correspondance d'adresses et d'en définir
++manipule la table ARP du noyau de différentes façons. Les options principales
++permettent d'effacer une correspondance d'adresses et d'en définir
+ une manuellement.
+-Pour les besoins de débogage, le programme
++Pour les besoins de débogage, le programme
+ .B arp
+ permet aussi d'effectuer un dump complet de la table ARP.
+ .SH OPTIONS
+ .TP
+ .B "\-v, \-\-verbose"
+-Dit à l'utilisateur ce qui se passe en étant verbeux.
++Dit à l'utilisateur ce qui se passe en étant verbeux.
+ .TP
+ .B "\-n, \-\-numeric"
+-Affiche les adresses numériques au lieu d'essayer de déterminer les nom
+-d'hôtes symboliques.
++Affiche les adresses numériques au lieu d'essayer de déterminer les nom
++d'hôtes symboliques.
+ .TP
+ .B "\-H type, \-\-hw-type type"
+-En positionnant ou lisant les entrées ARP, ce paramètre optionnel indique
+-à
++En positionnant ou lisant les entrées ARP, ce paramètre optionnel indique
++à
+ .B arp
+-les classes d'entrées qu'il doit contrôler. La valeur par défaut de
+-ce paramètre est
++les classes d'entrées qu'il doit contrôler. La valeur par défaut de
++ce paramètre est
+ .B ether
+-(i.e. code de matériel
++(i.e. code de matériel
+ .B 0x01
+ pour
+ .B "IEEE 802.3 10Mbps Ethernet".
+-D'autres valeurs doivent correspondre à des technologies réseaux telles que
++D'autres valeurs doivent correspondre à des technologies réseaux telles que
+ .RB "ARCnet (" arcnet ")"
+ ,
+ .RB "PROnet (" pronet ")"
+@@ -81,89 +81,89 @@ D'autres valeurs doivent correspondre
+ and
+ .RB "NET/ROM (" netrom ")."
+ .TP
+-.B "\-a [nom_d_hôte], \-\-display [nom_d_hôte]"
+-Affiche les entrées concernant l'hôte spécifié. Si le paramètre
+-.B nom_d_hôte
+-n'est pas utilisé,
++.B "\-a [nom_d_hôte], \-\-display [nom_d_hôte]"
++Affiche les entrées concernant l'hôte spécifié. Si le paramètre
++.B nom_d_hôte
++n'est pas utilisé,
+ .B toutes
+-les entrées seront affichées.
++les entrées seront affichées.
+ .TP
+-.B "\-d nom_d_hôte, \-\-delete nom_d_hôte"
+-Enlève une entrée pour l'hôte spécifié. Ceci peut être
+-utilisé si l'hôte concerné ne fonctionne plus, par exemple.
++.B "\-d nom_d_hôte, \-\-delete nom_d_hôte"
++Enlève une entrée pour l'hôte spécifié. Ceci peut être
++utilisé si l'hôte concerné ne fonctionne plus, par exemple.
+ .TP
+ .B "\-D, \-\-use-device"
+-Utilise l'adresse matérielle de l'interface
++Utilise l'adresse matérielle de l'interface
+ .BR ifa
+ .
+ .TP
+ .B "\-i If, \-\-device If"
+-Sélectionne une interface. Lors du dump du cache ARP, seules les entrées
+-correspondant à l'interface spécifiée seront affichées. Lorsque l'on définit
+-une entrée permanente ou une entrée
++Sélectionne une interface. Lors du dump du cache ARP, seules les entrées
++correspondant à l'interface spécifiée seront affichées. Lorsque l'on définit
++une entrée permanente ou une entrée
+ .B temp
+-, cette interface lui sera associée; si cette option n'est pas utilisée,
+-le noyau fera des tentatives de résolution selon la table de routage. Pour
+-les entrées
++, cette interface lui sera associée; si cette option n'est pas utilisée,
++le noyau fera des tentatives de résolution selon la table de routage. Pour
++les entrées
+ .B pub
+-l'interface spécifiée est celle pour laquelle les requêtes ARP auront trouvé
+-une réponse.
++l'interface spécifiée est celle pour laquelle les requêtes ARP auront trouvé
++une réponse.
+ .br
+ .B NOTE:
+-Ceci est différent de l'interface vers laquelle les datagrammes IP seront routés.
++Ceci est différent de l'interface vers laquelle les datagrammes IP seront routés.
+ .TP
+-.B "\-s nom_d_hôte hw_addr, \-\-set hostname hw_addr"
+-Crée manuellement une correspondance d'adresses ARP pour l'hôte
+-.B nom_d_hôte
+-avec l'adresse matérielle positionnée à
++.B "\-s nom_d_hôte hw_addr, \-\-set hostname hw_addr"
++Crée manuellement une correspondance d'adresses ARP pour l'hôte
++.B nom_d_hôte
++avec l'adresse matérielle positionnée à
+ .B hw_addr.
+-Le format de l'adresse matérielle est dépendant de la classe du matériel,
+-mais pour la plupart on peut considérer que la présentation classique
+-peut être utilisée. Pour la classe Ethernet, c'est 6 octets en hexadécimal,
+-séparés par des double-points. Pour ajouter des entrées proxy-arp
++Le format de l'adresse matérielle est dépendant de la classe du matériel,
++mais pour la plupart on peut considérer que la présentation classique
++peut être utilisée. Pour la classe Ethernet, c'est 6 octets en hexadécimal,
++séparés par des double-points. Pour ajouter des entrées proxy-arp
+ (Ce sont celles avec l'indicateur
+ .BR pub lish
+-positionné)
+-un masque réseau (
++positionné)
++un masque réseau (
+ .B netmask
+-) peut être spécifié au proxy-arp pour le
+-sous-réseau entier. Ceci n'est pas très recommandé, mais est supporté par
++) peut être spécifié au proxy-arp pour le
++sous-réseau entier. Ceci n'est pas très recommandé, mais est supporté par
+ les anciens noyaux, car c'est utile dans certains cas. Si l'indicateur
+ .B temp
+-n'est pas fourni, les entrées ARP seront permanentes.
++n'est pas fourni, les entrées ARP seront permanentes.
+ .br
+ .B NOTE:
+-A partir du noyau 2.2.0 il n'est plus possible de définir des entrées ARP
+-pour un sous réseau entier.
++A partir du noyau 2.2.0 il n'est plus possible de définir des entrées ARP
++pour un sous réseau entier.
+ .TP
+ .B "\-f nom_de_fichier, \-\-file nom_de_fichier"
+-Similaire à l'option
++Similaire à l'option
+ .B \-s
+ , mais cette fois les informations d'adresses sont prises dans le fichier
+-.B nom_de_fichier
+-. Ceci peut être utilisé si les entrées ARP à configurer sont
+-nombreuses. Le nom du fichier de données est très souvent nommé
++.BR nom_de_fichier .
++Ceci peut être utilisé si les entrées ARP à configurer sont
++nombreuses. Le nom du fichier de données est très souvent nommé
+ .B /etc/ethers
+ , mais ce n'est pas officiel.
+ .sp 1
+ Le format du fichier est simple; Il contient
+-seulement des lignes de texte ASCII avec sur chaque ligne un nom d'hôte et
+-une adresse matérielle, séparés par des espaces. Les indicateurs
++seulement des lignes de texte ASCII avec sur chaque ligne un nom d'hôte et
++une adresse matérielle, séparés par des espaces. Les indicateurs
+ .BR "pub" , " temp" " et" " netmask"
+-peuvent également être utilisés.
++peuvent également être utilisés.
+ .LP
+-A tous les endroits où un
+-.B nom d'hôte
++A tous les endroits où un
++.B nom d'hôte
+ est attendu, on peut aussi entrer une
+ .B "addresse IP"
+-en notation décimale pointée.
++en notation décimale pointée.
+ .LP
+-Chaque entrée complète se trouvant dans le cache ARP est marquée de
++Chaque entrée complète se trouvant dans le cache ARP est marquée de
+ l'indicateur
+-.B C
+-. Les entrées permanentes sont marquées de l'indicateur
++.BR C .
++Les entrées permanentes sont marquées de l'indicateur
+ .B M
+-et les entrées 'pub' ont l'indicateur
++et les entrées 'pub' ont l'indicateur
+ .B P
+ .
+ .SH FICHIERS
+@@ -177,8 +177,8 @@ et les entr
+ .SH VOIR AUSSI
+ rarp(8), route(8), ifconfig(8), netstat(8)
+ .SH AUTEUR
+-Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org> avec les améliorations
+-apportées par le mainteneur des net-tools Bernd Eckenfels
++Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org> avec les améliorations
++apportées par le mainteneur des net-tools Bernd Eckenfels
+ <net-tools@lina.inka.de>.
+ .SH TRADUCTION
+ Jean Michel VANSTEENE (vanstee@worldnet.fr)
+diff --git a/man/fr_FR/ethers.5 b/man/fr_FR/ethers.5
+index 5e70929..030fdf6 100644
+--- a/man/fr_FR/ethers.5
++++ b/man/fr_FR/ethers.5
+@@ -5,7 +5,7 @@
+ .\"
+ .TH ETHERS 5 "26 Avril 1996" "" "Formats de fichiers"
+ .SH NOM \"{{{roff}}}\"{{{
+-ethers \- Base de données adresses Ethernet - adresses IP
++ethers \- Base de données adresses Ethernet - adresses IP
+ .\"}}}
+ .SH DESCRIPTION \"{{{
+ \fB/etc/ethers\fP contient des adresses Ethernet sur 48 bits et leur
+@@ -15,14 +15,14 @@ adresse IP correspondante, une ligne par adresses IP:
+ \fIAdresse-Ethernet\fP \fIAdresse-IP\fP
+ .RE
+ .sp
+-Les deux items sont séparés par un ou plusieurs espaces et/ou tabulations.
+-Un \fB#\fP en début de ligne est un commentaire pour tout le reste de la ligne.
+-L'\fIadresse-Ethernet\fP est écrite sous la forme
++Les deux items sont séparés par un ou plusieurs espaces et/ou tabulations.
++Un \fB#\fP en début de ligne est un commentaire pour tout le reste de la ligne.
++L'\fIadresse-Ethernet\fP est écrite sous la forme
+ .IR x : x : x : x : x : x ,
+-où \fIx\fP est une valeur héxadecimale comprise entre \fB0\fP et \fBff\fP
+-représentant un octet de l'adresse, dans l'ordre du réseau (big-endian).
+-L'\fIAdresse-IP\fP peut être soit un nom d'hôte résolu par DNS ou une adresse
+-en notation décimale pointée.
++où \fIx\fP est une valeur héxadecimale comprise entre \fB0\fP et \fBff\fP
++représentant un octet de l'adresse, dans l'ordre du réseau (big-endian).
++L'\fIAdresse-IP\fP peut être soit un nom d'hôte résolu par DNS ou une adresse
++en notation décimale pointée.
+ .\"}}}
+ .SH EXEMPLES \"{{{
+ 08:00:20:00:61:CA pal
+diff --git a/man/fr_FR/hostname.1 b/man/fr_FR/hostname.1
+index c4cd412..3adaf4b 100644
+--- a/man/fr_FR/hostname.1
++++ b/man/fr_FR/hostname.1
+@@ -1,16 +1,16 @@
+ .TH HOSTNAME 1 "15 Mars 1999" "net-tools" "Linux Programmer's Manual"
+ .SH NOM
+-hostname \- affiche ou définit le nom d'hôte du système
++hostname \- affiche ou définit le nom d'hôte du système
+ .br
+-domainname \- affiche le nom de domaine NIS/YP du système
++domainname \- affiche le nom de domaine NIS/YP du système
+ .br
+-dnsdomainname \- affiche le nom de domaine du système
++dnsdomainname \- affiche le nom de domaine du système
+ .br
+-nisdomainname \- affiche ou définit le nom de domaine NIS/YP du système
++nisdomainname \- affiche ou définit le nom de domaine NIS/YP du système
+ .br
+-ypdomainname \- affiche ou définit le nom de domaine NIS/YP du système
++ypdomainname \- affiche ou définit le nom de domaine NIS/YP du système
+ .br
+-nodename \- affiche ou définit le nom de domaine DECnet du système
++nodename \- affiche ou définit le nom de domaine DECnet du système
+
+ .SH SYNOPSIS
+ .B hostname
+@@ -73,45 +73,45 @@ nodename \- affiche ou d
+
+ .SH DESCRIPTION
+ .B Hostname
+-est le programme utilisé soit pour définir le nom d'hôte, soit
+-pour visualiser le nom d'hôte ou de domaine du système. Ce nom est
+-utilisé par différents programmes réseaux pour identifier la machine. Le
+-nom de domaine est également utilisé par les NIS/YP.
++est le programme utilisé soit pour définir le nom d'hôte, soit
++pour visualiser le nom d'hôte ou de domaine du système. Ce nom est
++utilisé par différents programmes réseaux pour identifier la machine. Le
++nom de domaine est également utilisé par les NIS/YP.
+
+ .SS "OBTENTION DU NOM"
+-Appelé sans argument, le programme affiche les noms courants:
++Appelé sans argument, le programme affiche les noms courants:
+
+ .LP
+ .B hostname
+-fournit le nom du système tel qu'il est retourné par la fonction
+-.BR getdomainname (2)
+-. Ceci est connu comme nom de domaine YP/NIS du système.
++fournit le nom du système tel qu'il est retourné par la fonction
++.BR getdomainname (2).
++Ceci est connu comme nom de domaine YP/NIS du système.
+
+
+ .LP
+ .B nodename
+-fournit le nom de noeud DECnet du système tel qu'il est retourné par la
++fournit le nom de noeud DECnet du système tel qu'il est retourné par la
+ fonction
+ .BR getnodename (2)
+ .
+
+ .LP
+ .B dnsdomainname
+-fournit la partie domaine du nom complètement qualifié - FQDN (Fully
+-Qualified Domain Name). Le nom FQDN du système est retourné par la commande
++fournit la partie domaine du nom complètement qualifié - FQDN (Fully
++Qualified Domain Name). Le nom FQDN du système est retourné par la commande
+ .BR "hostname \-\-fqdn" .
+
+ .SS "SET NAME"
+-Appelé avec un argument ou avec l'option
++Appelé avec un argument ou avec l'option
+ .B \-\-file
+-, la commande définit le nom d'hôte, le nom de domaine NIS/YP ou
++, la commande définit le nom d'hôte, le nom de domaine NIS/YP ou
+ le nom de noeud.
+
+ .LP
+ Notez que seul le super-utilisateur peut changer les noms.
+
+ .LP
+-Il n'est pas possible de définir le nom FQDN ou le nom de domaine DNS avec
++Il n'est pas possible de définir le nom FQDN ou le nom de domaine DNS avec
+ la commande
+ .B dnsdomainname
+ (voir
+@@ -119,8 +119,8 @@ la commande
+ ci-dessous).
+
+ .LP
+-Le nom d'hôte est générallement définit une seule fois, au
+-démarrage du système, par le script de configuration
++Le nom d'hôte est générallement définit une seule fois, au
++démarrage du système, par le script de configuration
+ .I /etc/rc.d/rc.inet1.
+ ou
+ .I /etc/init.d/boot
+@@ -132,45 +132,45 @@ Vous pouvez modifier le FQDN (tel que fourni par la commande
+ .BR "hostname \-\-fqdn" )
+ ou le nom de domaine DNS (tel que fourni par la commande
+ .BR "dnsdomainname" )
+-avec cette commande. Le FQDN du système est le nom que le resolveur (
++avec cette commande. Le FQDN du système est le nom que le resolveur (
+ .BR resolver (3)
+- ) retourne comme nom d'hôte.
++ ) retourne comme nom d'hôte.
+
+ .LP
+ Techniquement: Le FQDN est le nom fourni par
+ .BR gethostbyname (2)
+-à partir du nom d'hôte retourné par
++à partir du nom d'hôte retourné par
+ .BR gethostname (2).
+ Le nom de domaine DNS est la partie suivant le premier point.
+ .LP
+-La façon dont vous pouvez le changer dépend de la configuration
++La façon dont vous pouvez le changer dépend de la configuration
+ (habituellement dans
+-.IR /etc/host.conf )
+-. Si le fichier 'hosts' est analysé avant d'interroger le DNS ou
++.IR /etc/host.conf ).
++Si le fichier 'hosts' est analysé avant d'interroger le DNS ou
+ NIS) vous pouvez le changer dans le fichier
+ .IR /etc/hosts .
+
+ .SH OPTIONS
+ .TP
+ .I "\-a, \-\-alias"
+-Affiche l'alias de l'hôte (si utilisé).
++Affiche l'alias de l'hôte (si utilisé).
+ .TP
+ .I "\-d, \-\-domain"
+ Affiche le nom du domaine DNS. Ne pas utiliser la commande
+ .B domainname
+-pour obtenir le nom de domaine DNS car vous obtiendrez en réalité le
+-nom de domaine NIS. Utilisez plutôt la commande
++pour obtenir le nom de domaine DNS car vous obtiendrez en réalité le
++nom de domaine NIS. Utilisez plutôt la commande
+ .B dnsdomainname
+ .
+ .TP
+ .I "\-F, \-\-file nom_fichier"
+-Lit le nom d'hôte à partir du fichier spécifié. Les commentaires (lignes commençant
+-par un `#') sont ignorés.
++Lit le nom d'hôte à partir du fichier spécifié. Les commentaires (lignes commençant
++par un `#') sont ignorés.
+ .TP
+ .I "\-f, \-\-fqdn, \-\-long"
+-Affiche le nom pleinement qualifié - FQDN (Fully Qualified Domain Name). un
+-FQDN consiste en un nom d'hôte court et un nom de domaine. A moins que vous
+-utilisiez 'bind' ou les NIS pour la recherche d'hôtes, vous pouvez changer
++Affiche le nom pleinement qualifié - FQDN (Fully Qualified Domain Name). un
++FQDN consiste en un nom d'hôte court et un nom de domaine. A moins que vous
++utilisiez 'bind' ou les NIS pour la recherche d'hôtes, vous pouvez changer
+ le nom FQDN et le nom de domaine (qui fait partie du FQDN) dans le fichier
+ \fI/etc/hosts\fR.
+ .TP
+@@ -178,15 +178,15 @@ le nom FQDN et le nom de domaine (qui fait partie du FQDN) dans le fichier
+ Affiche un message d'aide et se termine.
+ .TP
+ .I "\-i, \-\-ip-address"
+-Affiche la (les) adresse(s) IP de l'hôte.
++Affiche la (les) adresse(s) IP de l'hôte.
+ .TP
+ .I "\-n, \-\-node"
+-Affiche le nom de noeud DECnet. Si un paramètre est fourni (ou
++Affiche le nom de noeud DECnet. Si un paramètre est fourni (ou
+ .B \-\-file nom_fichier
+-) le super-utilisateur peut également définir un nouveau nom de neud.
++) le super-utilisateur peut également définir un nouveau nom de neud.
+ .TP
+ .I "\-s, \-\-short"
+-Affiche le nom d'hôte en format court. Il s'agit du nom d'hôte coupé au
++Affiche le nom d'hôte en format court. Il s'agit du nom d'hôte coupé au
+ premier point.
+ .TP
+ .I "\-V, \-\-version"
+@@ -197,9 +197,9 @@ termine correctement.
+ Mode verbeux.
+ .TP
+ .I "\-y, \-\-yp, \-\-nis"
+-Affiche le nom de domaine NIS. Si un paramètre est fourni (ou
++Affiche le nom de domaine NIS. Si un paramètre est fourni (ou
+ .B \-\-file nom_fichier
+-) le super-utilisateur peut également définir un nouveau nom de domaine NIS.
++) le super-utilisateur peut également définir un nouveau nom de domaine NIS.
+ .SH FICHIERS
+ .B /etc/hosts
+ .SH AUTEURS
+diff --git a/man/fr_FR/ifconfig.8 b/man/fr_FR/ifconfig.8
+index 0c29eb0..821f164 100644
+--- a/man/fr_FR/ifconfig.8
++++ b/man/fr_FR/ifconfig.8
+@@ -1,160 +1,178 @@
+-.TH IFCONFIG 8 "4 August 1997" "net-tools" "Linux Programmer's Manual"
++.\"
++.\" Traduction : Jean Michel VANSTEENE <vanstee@worldnet.fr>
++.\" zz/08/1997
++.\" Màj zz/08/2004 net-tools-1.60 Guillaume Audirac
++.\" Màj 17/08/2006 net-tools-1.65 Alain Portal
++.\"
++.TH IFCONFIG 8 "30 juin 2005" "net-tools" "Manuel de l'administrateur Linux"
+ .SH NOM
+-ifconfig \- configure une interface réseau
++ifconfig \- Configurer une interface réseau.
+ .SH SYNOPSIS
+-.B "ifconfig [interface]"
++.B "ifconfig [\-v] [\-a] [\-s] [interface]"
+ .br
+-.B "ifconfig interface [aftype] options | adresse ..."
++.B "ifconfig [\-v] interface [aftype] options | adresse ..."
+ .SH DESCRIPTION
+-.B Ifconfig
+-est utilisé pour configurer (et maintenir ensuite) les interfaces
+-réseau résidentes dans le noyau. Il est utilisé lors du boot pour
+-configurer la plupart d'entre-elles et ainsi rendre le système
+-opérationnel. Après, ce n'est quasiment plus utilisé que pour
+-le débogage ou pour des réglages si nécessaire.
++.B ifconfig
++permet de configurer les interfaces réseau présentes dans le noyau.
++On peut les configurer lors du démarrage quand c'est nécessaire. Ensuite,
++on l'utilise généralement pour le débogage ou pour d'éventuels réglages.
+ .LP
+-Si aucun argument n'est donné,
++Si aucun argument n'est donné,
+ .B ifconfig
+-affiche simplement l'état des interfaces actuellement définies. Si
+-seul le paramètre
++affiche l'état des interfaces actives. Si seul le paramètre
+ .B interface
+-est donné, il affiche seulement l'état de l'interface correspondante;
+-si seul le paramètre
+-.B -a
+-est fourni, il affiche l'état de toutes les interfaces, même celles qui
+-ne sont pas actives.
+-Autrement, il considère qu'il faut positionner de nouvelles valeurs.
+-
+-.SH Familles d'adresses
+-Si le premier argument après le nom de l'interface est reconnu comme
+-étant un nom de famille d'adresses supporté, cette famille d'adresses
+-est utilisée pour décoder et afficher toutes les adresses
+-protocolaires. Les familles d'adresses actuellement supportées comprennent
++est donné, il affiche seulement l'état de l'interface correspondante\ ;
++si seul le paramètre
++.B \-a
++est fourni, il affiche l'état de toutes les interfaces, même celles
++qui sont inactives. Autrement, il permet de configurer une interface.
++.SH Familles d'Adresses
++Si le premier argument après le nom d'interface est reconnu comme
++le nom d'une famille d'adresses prise en charge, alors cette famille
++d'adresses est utilisée pour décoder et afficher toutes les adresses
++du protocole. Les familles d'adresses actuellement prises en charge
++comprennent
+ .B inet
+-(TCP/IP, default)
++(TCP/IP, par défaut),
++.B inet6
++(IPv6),
+ .B ax25
+-(AMPR Packet Radio.)
++(AMPR Packet Radio),
+ .B ddp
+-(Appletalk Phase 2) and
++(Appletalk Phase 2),
+ .B ipx
+-(Novell IPX).
++(Novell IPX) et
++.B netrom
++(AMPR Packet Radio).
+ .SH OPTIONS
+ .TP
++.B \-a
++Afficher toutes les interfaces actuellement disponibles, même celles
++qui sont inactives.
++.TP
++.B \-s
++Afficher un résumé (comme netstat \-i).
++.TP
++.B \-v
++Mode volubile pour certains types d'erreurs.
++.TP
+ .B interface
+-Le nom de l'interface réseau. C'est généralement un nom de pilote suivi
+-d'un numéro d'ordre comme
++Correspond au nom de l'interface de réseau. C'est généralement un nom de
++pilote suivi d'un chiffre, comme
+ .B eth0
+-pour la première interface Ethernet.
++pour la première interface Ethernet. Si votre noyau accepte les alias
++d'interfaces, vous pouvez les spécifier avec
++.B eth0:0
++pour le premier alias de eth0. On peut les utiliser pour les affecter
++à une seconde adresse. Pour supprimer un alias d'interface, utilisez
++.BR "ifconfig eth0:0 down" .
++Note\ : pour chaque groupe (un même noeud donné par une combinaison
++adresse/masque de réseau), si vous supprimez le premier alias (le
++principal), tous les alias sont supprimés.
+ .TP
+ .B up
+-Cette option active l'interface. Elle est implicitement spécifiée
+-si une nouvelle adresse est affectée à l'interface (voir plus loin).
++Activer l'interface donnée. Cette option est implicite si une adresse est
++affectée à l'interface.
+ .TP
+ .B down
+-Cette option arrête le fonctionnement du pilote pour cette interface, et
+-est utilisée lorsque les choses commencent à aller mal.
++Désactiver le pilote pour l'interface donnée.
+ .TP
+ .B "[\-]arp"
+-Valide ou invalide l'utilisation du protocole ARP sur cette interface. Si
+-le signe moins (\-) est présent, l'option est invalidée.
++Activer ou désactiver l'utilisation du protocole ARP sur une interface.
+ .TP
+ .B "[\-]promisc"
+-Valide ou invalide le mode
+-.B promiscuous
+-. S'il est validé, tous les paquets circulant sur le réseau
+-seront reçus sur cette interface.
++Activer ou désactiver le mode
++.BR promiscuous .
++S'il est activé, tous les paquets circulant sur le réseau seront reçus
++par l'interface.
+ .TP
+ .B "[\-]allmulti"
+-Valide ou invalide le fonctionnement de l'interface en mode
+-.B all-multicast
+-. S'il est validé, tous les paquets multicast circulant sur le réseau
+-seront reçus sur cette interface.
++Activer ou désactiver le mode
++.BR all-multicast .
++S'il est activé, l'interface recevra tous les paquets de multidiffusion
++circulant sur le réseau.
+ .TP
+ .B "metric N"
+-Ce paramètre définit la métrique de l'interface. Il n'est pour
+-l'instant pas implémenté, mais le sera prochainement.
++Définir la métrique de l'interface.
+ .TP
+ .B "mtu N"
+-Ce paramètre définit le MTU (Maximum Transfer Unit) d'une
+-interface.
++Définir l'unité de transfert maximum ou MTU («\ Maximum Transfer Unit\ »)
++d'une interface.
+ .TP
+-.B "dstaddr adr"
+-Définit l'adresse IP de "l'autre bout" dans le cas d'un lien
+-point-à-point, comme PPP. Ce paramètre est obsolète; utilisez plutôt
+-le paramètre
+-.B pointopoint.
++.B "dstaddr adresse"
++Définir l'adresse IP distante dans le cas d'un lien point-à-point
++(comme PPP). Cette option est obsolète\ ; utilisez à la place l'option
++.BR pointopoint .
+ .TP
+-.B "netmask adr"
+-Définit le masque de réseau IP pour cette interface. La valeur par
+-défaut de cette valeur correspond au masque réseau usuel pour les
+-classes A, B ou C (déduite de l'adresse IP), mais toute autre valeur peut
+-être définie selon les besoins en sous-réseaux.
++.B "netmask adresse"
++Définir le masque de réseau IP pour cette interface. La valeur par
++défaut correspond au masque de réseau usuel pour les classes A, B ou C
++(déduite de l'adresse IP), mais une autre valeur peut être définie.
+ .TP
+-.B "add adr/lg_prefix"
+-Ajoute une adresse IPv6 à une interface.
++.B "add adresse/long_préfixe"
++Ajouter une adresse IPv6 à une interface.
+ .TP
+-.B "del adr/lg_prefix"
+-Supprime une adresse IPv6 d'une interface.
++.B "del adresse/long_préfixe"
++Supprimer une adresse IPv6 d'une interface.
+ .TP
+ .B "tunnel aa.bb.cc.dd"
+-Crée un nouveau périphérique SIT (IPv6-dans-IPv4), en mode
+-tunnel jusqu'à la destination.
++Créer un nouveau périphérique SIT (IPv6-dans-IPv4), fonctionnant en mode
++tunnel jusqu'à la destination donnée.
+ .TP
+-.B "irq adr"
+-Définit la ligne d'interruption utilisée par ce
+-périphérique. Certains périphériques ne supportent pas le
+-changement dynamique de l'IRQ.
++.B "irq adresse"
++Définir la ligne d'interruption utilisée par un périphérique.
++Certains périphériques ne sont pas capables de changer
++dynamiquement d'IRQ.
+ .TP
+-.B "io_addr adr"
+-Définit pour ce périphérique, l'adresse de début dans l'espace
+-d'entrée-sortie I/O.
++.B "io_addr adresse"
++Définir l'adresse de début dans l'espace d'entrée-sortie pour un
++périphérique.
+ .TP
+-.B "mem_start adr"
+-Définit l'adresse de début de mémoire partagée pour ce périphérique. Seuls
+-quelques périphériques ont besoin de ce paramètre.
++.B "mem_start adresse"
++Définir l'adresse de début de la mémoire partagée utilisée par un
++périphérique. Peu de périphériques ont besoin de ce paramètre.
+ .TP
+ .B "media type"
+-Définit le port physique ou le type de medium utilisé par ce périphérique.
+-Tous les périphériques ne peuvent pas changer de configuration et les
+-valeurs supportées varient de l'un à l'autre. Les valeur typiques sont
++Définir le port physique ou le type de médium utilisé par le périphérique.
++Tous les périphériques ne peuvent pas changer cette configuration et les
++types acceptés varient de l'un à l'autre. Les valeurs habituelles du
++.B type
++sont
+ .B 10base2
+ (Ethernet fin),
+ .B 10baseT
+-(10Mbps Ethernet paire torsadée),
+-.B AUI
+-(transceiver externe) etc. Le type
++(Ethernet 10Mbps en paire torsadée),
++.B AUI
++(émetteur-récepteur externe), etc. Le médium spécial de type
+ .B auto
+-permet d'indiquer au pilote de détecter automatiquement le medium
+-utilisé. Une fois de plus, tous les périphériques ne supportent pas cette
+-option.
+-.TP
+-.B "[-]broadcast [adr]"
+-Si l'adresse est également donnée, définit l'adresse broadcast
+-protocolaire pour cette interface. Autrement, il permet d'armer (ou désarmer)
+-l'indicateur
++permet d'indiquer au pilote de détecter automatiquement le médium utilisé.
++Une fois de plus, tous les pilotes n'acceptent pas cette option.
++.TP
++.B "[\-]broadcast [adresse]"
++Si l'adresse est donnée, elle définit l'adresse de diffusion du
++protocole pour cette interface. Autrement, on arme
++(ou désarme) l'indicateur
+ .B IFF_BROADCAST
+ de l'interface.
+ .TP
+-.B "[-]pointopoint [adr]"
+-Ce mot clé valide le mode
+-.B point-à-point
+-d'une interface, signifiant qu'il existe un lien direct entre 2 machines,
+-sans que personne d'autre ne puisse être à l'écoute.
++.B "[\-]pointopoint [adresse]"
++Valider le mode
++.B point-à-point
++d'une interface, signifiant qu'il existe un lien direct entre 2\ machines,
++sans que personne d'autre ne puisse être à l'écoute.
+ .br
+-Si l'argument d'adresse est également donné, il définit l'adresse
+-de l'autre machine, de la même manière que le paramètre obsolète
+-.B dstaddr
+-.
+-Autrement il arme (ou désarme) l'indicateur
++Si l'adresse est également donnée, cela définit l'adresse de
++protocole de l'autre machine, de la même manière que l'option obsolète
++.BR dstaddr .
++Autrement, il arme (ou désarme) l'indicateur
+ .B IFF_POINTOPOINT
+ de l'interface.
+ .TP
+ .B hw classe adresse
+-Définit l'adresse matérielle de l'interface, si le pilote du
+-périphérique supporte cette opération. Le mot clé doit être
+-suivi du nom de la classe matérielle et de l'adresse matérielle en
+-caractères imprimables ASCII. Les classes matérielles actuellement
+-supportées comprennent
++Définir l'adresse matérielle de l'interface, si le pilote du périphérique
++accepte cette opération. L'option doit être suivie du nom de la classe
++matérielle et de l'adresse matérielle en caractères ASCII affichables.
++Les classes matérielles actuellement prises en charge comprennent
+ .B ether
+ (Ethernet),
+ .B ax25
+@@ -165,45 +183,82 @@ et
+ (AMPR NET/ROM).
+ .TP
+ .B multicast
+-Positionne l'indicateur multicast sur l'interface. Elle n'est
+-généralement pas nécessaire puisque les pilotes positionnent
+-l'option correcte eux même.
++Positionner l'indicateur de multidiffusion sur l'interface. Ce n'est
++généralement pas nécessaire puisque les pilotes positionnent correctement
++l'option eux-mêmes.
+ .TP
+ .B adresse
+-L'adresse IP de cette interface.
++Correspond à l'adresse IP affectée à cette interface.
+ .TP
+-.B txqueuelen length
+-Set the length of the transmit queue of the device. It is useful to set this
+-to small values for slower devices with a high latency (modem links, ISDN)
+-to prevent fast bulk transfers from disturbing interactive traffic like
+-telnet too much.
++.B txqueuelen longueur
++Définir la longueur de la file d'attente de transmission du périphérique.
++Il est utile de la fixer à des valeurs faibles pour les périphériques
++lents avec un temps d'attente important (modems, ISDN), pour empêcher
++d'être perturbé par de rapides transferts de masse issus des trafics
++interactifs, comme
++.BR telnet .
+ .SH NOTES
+-Depuis le noyau 2.2 il n'y a plus de statistiques d'interface explicite
+-pour les interfaces en alias. Les statistiques affichées pour la véritable
+-adresse sont partagées avec toutes les adresses alias du même périphérique.
+-Si vous voulez des adresses par interface, vous devez ajouter des règles de
+-comptabilité particulières pour l'adresse en utilisant la commande
+-.BR ipchains(8)
+-.
+-
++Depuis la version 2.2 du noyau, il n'y a plus de statistiques d'interface
++explicites pour les alias d'interfaces. Les statistiques affichées pour la
++véritable adresse sont partagées avec toutes les adresses d'alias du même
++périphérique. Pour avoir des statistiques par adresse, il faut ajouter
++des règles de comptabilité particulières pour l'adresse en utilisant
++la commande
++.BR ipchains (8)
++ou
++.BR iptables (8).
++.LP
++Depuis net-tools 1.61,
++.B ifconfig
++affiche les compteurs d'octets et ceux lisibles par un utilisateur en
++unités IEC\ 60027-2. Ainsi, 1\ KiB vaut 2^10 octets. Notez que les nombres
++sont tronqués à la première décimale (ce qui peut être une erreur importante
++si vous considérez que 0,1\ PiB vaut 112.589.990.684.262\ octets\ :)
++.LP
++Des problèmes d'interruption avec les pilotes de périphériques Ethernet
++apparaissent avec EAGAIN
++(\fISIOCSIIFLAGS\ : Ressource temporairement indisponible\fR)
++il s'agit sûrement d'un conflit d'interruptions. Voir
++.I http://www.scyld.com/expert/irq-conflict.html
++pour plus d'informations.
+ .SH FICHIERS
+-.I /proc/net/socket
++.I /proc/net/socket
+ .br
+ .I /proc/net/dev
+ .br
+ .I /proc/net/if_inet6
+-.SH BUGS
+-Même si les adresses appletalk DDP et IPX peuvent être affichées,
+-elles ne peuvent être modifiées avec cette commande.
++.SH BOGUES
++Même si les adresses appletalk DDP et IPX peuvent être affichées,
++elles ne peuvent être modifiées avec cette commande.
+ .SH VOIR AUSSI
+-route(8), netstat(8), arp(8), rarp(8), ipchains(8)
+-.SH AUTHORS
++.BR route (8),
++.BR netstat (8),
++.BR arp (8),
++.BR rarp (8),
++.BR ipchains (8),
++.BR iptables (8)
++.br
++http://physics.nist.gov/cuu/Units/binary.html \- Préfixes
++pour les multiples binaires.
++.SH AUTEURS
+ Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org>
+ .br
+ Alan Cox, <Alan.Cox@linux.org>
+ .br
+ Phil Blundell, <Philip.Blundell@pobox.com>
+ .br
+-Andi Kleen,
++Andi Kleen,
++.br
++Bernd Eckenfels, <net-tools@lina.inka.de>
+ .SH TRADUCTION
+-Jean-Michel VANSTEENE (vanstee@worldnet.fr)
++.PP
++Ce document est une traduction réalisée par Jean Michel Vansteene
++<vanstee\ AT\ worldnet\ DOT\ fr> en août\ 1997,
++mise à jour par Guillaume Audirac en août 2004
++et révisée le 17\ août\ 2006.
++.PP
++L'équipe de traduction a fait le maximum pour réaliser une adaptation
++française de qualité. La version anglaise la plus à jour de ce document est
++toujours consultable via la commande\ : «\ \fBLANG=C\ man\ 8\ ifconfig\fR\ ».
++N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute
++erreur dans cette page de manuel.
+diff --git a/man/fr_FR/netstat.8 b/man/fr_FR/netstat.8
+index bf16bc6..fedbe4f 100644
+--- a/man/fr_FR/netstat.8
++++ b/man/fr_FR/netstat.8
+@@ -8,11 +8,11 @@
+ .\" Modified: Tuan Hoang tuan@optimus.mitre.org
+ .\"
+ .\"
+-.TH NETSTAT 8 "25 Fév 1999" "net-tools" "Linux Programmer's Manual"
++.TH NETSTAT 8 "2007-12-02" "net-tools" "Linux Administrator's Manual"
+
+ .SH NAME
+-netstat \- Affiche les connexions réseau, les tables de routage, les
+-statistiques des interfaces, les connexions masquées, les messages netlink,
++netstat \- Affiche les connexions réseau, les tables de routage, les
++statistiques des interfaces, les connexions masquées, les messages netlink,
+ et les membres multicast.
+
+ .SH SYNOPSIS
+@@ -68,34 +68,34 @@ et les membres multicast.
+ .PP
+ .SH DESCRIPTION
+ .B Netstat
+-affiche les informations du sous-système réseau de Linux
++affiche les informations du sous-système réseau de Linux
+
+ .SS "(no option)"
+-Vous pouvez voir l'état des connexions réseau en listant les sockets
+-ouvertes. C'est l'option par défaut : si vous ne spécifiez aucune famille
++Vous pouvez voir l'état des connexions réseau en listant les sockets
++ouvertes. C'est l'option par défaut : si vous ne spécifiez aucune famille
+ d'adresses, les sockets actives de toutes les familles d'adresses seront
+-affichées.
+-Avec le paramètre
++affichées.
++Avec le paramètre
+ .B -e
+-vous obtenez quelques informations supplémentaires (userid). Avec le paramètre
++vous obtenez quelques informations supplémentaires (userid). Avec le paramètre
+ .B -v
+-vous pouvez demander à netstat de signaler des familles d'adresses connues
+-non supportées par le noyau. Le paramètre
++vous pouvez demander à netstat de signaler des familles d'adresses connues
++non supportées par le noyau. Le paramètre
+ .B -o
+-affiche des informations supplémentaires sur les timers réseau. En donnant
+-le paramètre
++affiche des informations supplémentaires sur les timers réseau. En donnant
++le paramètre
+ .B -p
+-vous verrez le PID et le nom du processus à qui appartient la socket. Le paramètre
++vous verrez le PID et le nom du processus à qui appartient la socket. Le paramètre
+ .B -a
+-affiche toutes les sockets, y compris les sockets d'écoute des serveurs. La famille
++affiche toutes les sockets, y compris les sockets d'écoute des serveurs. La famille
+ d'adresses
+ .B inet
+ affiche les sockets raw, udp et tcp.
+
+ .SS "\-r, \-\-route"
+-Avec le paramètre
++Avec le paramètre
+ .BR \-r ", " \-\-route
+-vous pouvez visualiser les tables de routage dans le même format qu'avec la
++vous pouvez visualiser les tables de routage dans le même format qu'avec la
+ commande
+ .B "route -e"
+ .
+@@ -104,44 +104,44 @@ utilisera le format de la commande
+ .BR route .
+ Veuillez consulter
+ .BR route (8)
+-pour plus de détails.
++pour plus de détails.
+
+-.SS "\-i, \-\-interface \fIiface\fI"
++.SS "\-i, \-\-interfaces \fIiface\fI"
+ Si vous utilisez l'option
+ .BR -i ", " --interfaces
+ , une table de toutes (ou de l'interface
+ .IR iface
+-spécifiée) les interfaces réseau sera affichée. Le format de sortie est le
+-même que celui de la commande
++spécifiée) les interfaces réseau sera affichée. Le format de sortie est le
++même que celui de la commande
+ .B "ifconfig -e"
+-, et est décrit dans
++, et est décrit dans
+ .BR ifconfig (8).
+ .B "netstat -ei"
+-affiche une table ou une seule entrée d'interface comme la commande
+-.B ifconfig
+-. Avec le paramètre
++affiche une table ou une seule entrée d'interface comme la commande
++.BR ifconfig .
++Avec le paramètre
+ .B -a
+-, vous pouvez inclure les interfaces qui ne sont pas configurées (c.a.d qui
++, vous pouvez inclure les interfaces qui ne sont pas configurées (c.a.d qui
+ n'ont pas l'indicateur
+ .BR U = UP
+-armé).
++armé).
+
+ .SS "\-M, \-\-masquerade"
+
+-Permet de voir les sessions ayant de l'IP-masquerade. Avec le paramètre
++Permet de voir les sessions ayant de l'IP-masquerade. Avec le paramètre
+ .B -e
+-vous pouvez inclure quelques informations concernant les numéros de
+-séquence et les deltas causés par des réécritures de données sur des
+-sessions FTP (commande PORT). Le support de l'IP-Masquerade est utilisé
+-pour cacher au monde extérieur des hôtes appartenant à un réseau (et ayant
+-des adresses) non officiel, tel que décrit dans
+-.BR ipfw (4), ipfwadm "(8) et " ipfw (8).
++vous pouvez inclure quelques informations concernant les numéros de
++séquence et les deltas causés par des réécritures de données sur des
++sessions FTP (commande PORT). Le support de l'IP-Masquerade est utilisé
++pour cacher au monde extérieur des hôtes appartenant à un réseau (et ayant
++des adresses) non officiel, tel que décrit dans
++.BR iptables (8).
+
+ .SS "\-N, \-\-netlink"
+
+-Les noyaux récents supportent une communication avec l'utilisateur appelée
+-netlink. Vous pouvez obtenir des messages relatifs à la création, la
+-suppression d'interfaces ou de routes à partir de
++Les noyaux récents supportent une communication avec l'utilisateur appelée
++netlink. Vous pouvez obtenir des messages relatifs à la création, la
++suppression d'interfaces ou de routes à partir de
+ .I /dev/route
+ (36,0).
+
+@@ -149,23 +149,23 @@ suppression d'interfaces ou de routes
+ .SH OPTIONS
+ .SS "\-v, \-\-verbose"
+ active le mode verbeux. Affiche quelques informations utiles concernant les
+-familles d'adresses non configurées.
++familles d'adresses non configurées.
+
+ .SS "\-n, \-\-numeric"
+-affiche les adresses en format numérique au lieu d'essayer de déterminer le
+-nom symbolique d'hôte, de port ou d'utilisateur.
++affiche les adresses en format numérique au lieu d'essayer de déterminer le
++nom symbolique d'hôte, de port ou d'utilisateur.
+
+ .SS "\-p, \-\-programs"
+-affiche le nom et le PID des processus propriétaires de chaque socket
+-décrite. Vous devez être le propriétaire d'un processus pour visualiser les
+-sockets qui lui appartiennent ou être l'utilisateur
++affiche le nom et le PID des processus propriétaires de chaque socket
++décrite. Vous devez être le propriétaire d'un processus pour visualiser les
++sockets qui lui appartiennent ou être l'utilisateur
+ .B root
+ pour disposer de toutes les informations.
+
+ .SS "\-A, \-\-af \fIfamille\fI"
+-utilise une méthode différente pour affecter les familles d'adresses.
++utilise une méthode différente pour affecter les familles d'adresses.
+ .I famille
+-est une liste de familles d'adresses séparées par des (',') telles que
++est une liste de familles d'adresses séparées par des (',') telles que
+ .BR inet ,
+ .BR unix ,
+ .BR ipx ,
+@@ -173,7 +173,7 @@ est une liste de familles d'adresses s
+ .B netrom
+ et
+ .BR ddp .
+-L'utilisation des options longues suivantes a le même effet
++L'utilisation des options longues suivantes a le même effet
+ .BR \-\-inet ,
+ .BR \-\-unix ,
+ .BR \-\-ipx ,
+@@ -183,9 +183,9 @@ et
+ .BR \-\-ddp.
+
+ .SS "\-c, \-\-continous"
+-Demandera à
++Demandera à
+ .B netstat
+-d'afficher la table sélectionnée chaque seconde jusqu'à ce que vous
++d'afficher la table sélectionnée chaque seconde jusqu'à ce que vous
+ l'interrompiez.
+
+ .PP
+@@ -195,102 +195,102 @@ l'interrompiez.
+ .SS Connexions Internet actives \fR(TCP, UDP, RAW)\fR
+
+ .SS "Proto"
+-Le protocole (TCP, UDP, RAW) utilisé par la socket.
++Le protocole (TCP, UDP, RAW) utilisé par la socket.
+
+ .SS "Recv-Q"
+-Le nombre d'octets non encore lus par le programme utilisateur connecté
+-à cette socket.
++Le nombre d'octets non encore lus par le programme utilisateur connecté
++à cette socket.
+
+ .SS "Send-Q"
+-Le nombre d'octets non encore acquittés par l'hôte distant.
++Le nombre d'octets non encore acquittés par l'hôte distant.
+
+ .SS "Local Address (Adresse locale)"
+-L'adresse locale (nom d'hôte local) et numéro de port de la
++L'adresse locale (nom d'hôte local) et numéro de port de la
+ socket. Sauf si l'option
+ .B -n
+-est donnée, l'adresse de la prise est traduite en nom d'hôte,
+-et le numéro de port est traduit en nom de service correspondant.
++est donnée, l'adresse de la prise est traduite en nom d'hôte,
++et le numéro de port est traduit en nom de service correspondant.
+
+ .SS "Foreign Address (Adresse distante)"
+-L'adresse distante (nom d'hôte distant) et le numéro de port de
+-la prise. Comme pour l'adresse locale et le numéro de port, l'option
++L'adresse distante (nom d'hôte distant) et le numéro de port de
++la prise. Comme pour l'adresse locale et le numéro de port, l'option
+ .B -n
+-invalide la traduction du nom d'hôte et de service.
++invalide la traduction du nom d'hôte et de service.
+
+ .SS "State (Etat)"
+-L'état de la socket. Puisqu'il n'y a pas d'état dans le mode RAW
+-et généralement pas d'état utilisé en UDP, cette colonne
++L'état de la socket. Puisqu'il n'y a pas d'état dans le mode RAW
++et généralement pas d'état utilisé en UDP, cette colonne
+ peut se trouver vierge. Normalement, on trouvera une des valeur suivante:
+
+ .TP
+ .I
+ ESTABLISHED
+-La socket a une connexion établie.
++La socket a une connexion établie.
+ .TP
+ .I
+ SYN_SENT
+-La socket attend activement d'établir une connexion.
++La socket attend activement d'établir une connexion.
+ .TP
+ .I
+ SYN_RECV
+-Une requête de connexion a été reçue du réseau.
++Une requête de connexion a été reçue du réseau.
+ .TP
+ .I
+ FIN_WAIT1
+-La socket est fermée, et la connexion est en cours de terminaison.
++La socket est fermée, et la connexion est en cours de terminaison.
+ .TP
+ .I
+ FIN_WAIT2
+-La connexion est fermée, et la socket attend une terminaison du distant.
++La connexion est fermée, et la socket attend une terminaison du distant.
+ .TP
+ .I
+ TIME_WAIT
+-La socket attend le traitement de tous les paquets encore sur le réseau
++La socket attend le traitement de tous les paquets encore sur le réseau
+ avant d'entreprendre la fermeture.
+ .TP
+ .I
+-CLOSED
+-La socket n'est pas utilisée.
++CLOSE
++La socket n'est pas utilisée.
+ .TP
+ .I
+ CLOSE_WAIT
+-Le distant a arrêté, attendant la fermeture de la socket.
++Le distant a arrêté, attendant la fermeture de la socket.
+ .TP
+ .I
+ LAST_ACK
+-Le distant termine, et la socket est fermée. Attente d'acquittement.
++Le distant termine, et la socket est fermée. Attente d'acquittement.
+ .TP
+ .I
+ LISTEN
+-La socket est à l'écoute de connexions entrantes. Ces sockets ne sont
+-affichées que si le paramètre
++La socket est à l'écoute de connexions entrantes. Ces sockets ne sont
++affichées que si le paramètre
+ .BR -a , --listening
+ est fourni.
+ .TP
+ .I
+ CLOSING
+-Les deux prises sont arrêtées mais toutes les données locales n'ont
+-pas encore été envoyées.
++Les deux prises sont arrêtées mais toutes les données locales n'ont
++pas encore été envoyées.
+ .TP
+ .I
+ UNKNOWN
+-L'état de la prise est inconnu.
++L'état de la prise est inconnu.
+
+ .SS "User (Utilisateur)"
+-Le nom d'utilisateur ou l'UID du propriétaire de la socket.
++Le nom d'utilisateur ou l'UID du propriétaire de la socket.
+
+ .SS "PID/Program name (PID/Nom de Programme)"
+-Le PID et le nom du programme (séparés par un slash) propriétaire de la
+-socket. Le paramètre
++Le PID et le nom du programme (séparés par un slash) propriétaire de la
++socket. Le paramètre
+ .B -p
+ active l'affichage de cette colonne. Vous devez avoir les droits de
+ .B root
+-puisque vous devez avoir les droits d'accès aux processus pour visualiser
++puisque vous devez avoir les droits d'accès aux processus pour visualiser
+ les sockets qui lui correspondent. Ces informations ne sont pas disponibles
+ avec les sockets IPX.
+
+ .SS "Timer"
+-(Ceci doit être rédigé)
++(Ceci doit être rédigé)
+
+
+ .PP
+@@ -298,28 +298,28 @@ avec les sockets IPX.
+
+
+ .SS "Proto"
+-Le protocole (habituellement UNIX) utilisé par la socket.
++Le protocole (habituellement UNIX) utilisé par la socket.
+
+ .SS "RefCnt"
+-Le nombre de références (i.e. processus attachés via cette socket).
++Le nombre de références (i.e. processus attachés via cette socket).
+
+ .SS "Flags (indicateurs)"
+-Les indicateurs affichée sont SO_ACCEPTON (affiché
++Les indicateurs affichée sont SO_ACCEPTON (affiché
+ .BR ACC ),
+ SO_WAITDATA
+ .RB ( W )
+ ou SO_NOSPACE
+ .RB ( N ).
+-SO_ACCECPTON est utilisé pour les sockets
+-non-connectées si les processus correspondant sont en attente de
+-demande de connexion. Les autres indicateurs sont d'un intérêt limité.
++SO_ACCECPTON est utilisé pour les sockets
++non-connectées si les processus correspondant sont en attente de
++demande de connexion. Les autres indicateurs sont d'un intérêt limité.
+
+ .SS "Type"
+-Il y a différents types d'accès aux sockets :
++Il y a différents types d'accès aux sockets :
+ .TP
+ .I
+ SOCK_DGRAM
+-La prise est utilisée en mode Datagram (sans connexion).
++La prise est utilisée en mode Datagram (sans connexion).
+ .TP
+ .I
+ SOCK_STREAM
+@@ -327,90 +327,89 @@ C'est une socket `stream' (connexion).
+ .TP
+ .I
+ SOCK_RAW
+-La prise est utilisée en mode `raw'.
++La prise est utilisée en mode `raw'.
+ .TP
+ .I
+ SOCK_RDM
+-Celle-ci est utilisée pour les messages délivrée de manière fiable.
++Celle-ci est utilisée pour les messages délivrée de manière fiable.
+ .TP
+ .I
+ SOCK_SEQPACKET
+-C'est une socket en mode paquets séquentiels.
++C'est une socket en mode paquets séquentiels.
+ .TP
+ .I
+ SOCK_PACKET
+-Prise d'accès à l'interface RAW.
++Prise d'accès à l'interface RAW.
+ .TP
+ .I
+ UNKNOWN
+-Qui sait ce que l'avenir nous réserve - Juste à remplir ici :-)
++Qui sait ce que l'avenir nous réserve - Juste à remplir ici :-)
+
+ .PP
+ .SS "State (Etat)"
+-Ce champ contient un des mots clés suivants :
++Ce champ contient un des mots clés suivants :
+ .TP
+ .I
+ FREE
+-La socket n'est pas allouée
++La socket n'est pas allouée
+ .TP
+ .I
+ LISTENING
+-La socket est à l'écoute de demandes de connexions. Ces sockets ne sont
+-affichées que si le paramètre
++La socket est à l'écoute de demandes de connexions. Ces sockets ne sont
++affichées que si le paramètre
+ .BR -a , --listening
+ est fourni.
+ .TP
+ .I
+ CONNECTING
+-La prise est en cours d'établissement de connexion.
++La prise est en cours d'établissement de connexion.
+ .TP
+ .I
+ CONNECTED
+-La socket est connectée.
++La socket est connectée.
+ .TP
+ .I
+ DISCONNECTING
+-La socket est en cours de déconnexion.
++La socket est en cours de déconnexion.
+ .TP
+ .I
+ (empty)
+-La socket n'est connectée à aucune autre.
++La socket n'est connectée à aucune autre.
+ .TP
+ .I
+ UNKNOWN
+-Cet état ne devrait pas apparaître.
++Cet état ne devrait pas apparaître.
+
+ .SS "PID/Program name (PID/Nom de programme"
+-Le PID et le nom du programme propriétaire de la socket. Plus
++Le PID et le nom du programme propriétaire de la socket. Plus
+ d'informations sont disponibles dans la section
+ .B "Connexions Internet actives"
+ ci-dessus.
+
+ .SS "Path (chemin)"
+-Affiche le chemin correspondant à l'attachement des processus à la socket.
++Affiche le chemin correspondant à l'attachement des processus à la socket.
+
+ .PP
+ .SS Sockets IPX actives
+
+-(à faire par quelqu'un qui connaît)
++(à faire par quelqu'un qui connaît)
+
+ .PP
+ .SS Sockets NET/ROM actives
+
+-(à faire par quelqu'un qui connaît)
++(à faire par quelqu'un qui connaît)
+
+ .PP
+ .SS Sockets AX.25 actives
+
+-(à faire par quelqu'un qui connaît)
++(à faire par quelqu'un qui connaît)
+
+ .PP
+ .SH NOTES
+ Depuis la version 2.2 du noyau, netstat -i n'affiche plus les statistiques
+ des interfaces alias. Pour obtenir les compteurs par interface alias, vous
+-devez définir des règles spécifiques à l'aide de la commande
+-.BR ipchains(8)
+-.
++devez définir des règles spécifiques à l'aide de la commande
++.BR iptables(8).
+
+ .SH FICHIERS
+ .ta
+@@ -418,7 +417,7 @@ devez d
+ -- Le fichier de correspondance des services
+
+ .I /proc/net/dev
+--- informations périphériques
++-- informations périphériques
+
+ .I /proc/net/raw
+ -- informations sockets RAW
+@@ -471,31 +470,28 @@ devez d
+ .SH VOIR AUSSI
+ .BR route (8),
+ .BR ifconfig (8),
+-.BR ipfw (4),
+-.BR ipfw (8),
+-.BR ipfwadm (8)
+-.BR ipchains (8)
++.BR iptables (8)
+
+ .PP
+ .SH BUGS
+-Des informations étranges peuvent apparaitre occasionnellement
+-si une socket change d'état au moment ou elle est visualisée.
++Des informations étranges peuvent apparaitre occasionnellement
++si une socket change d'état au moment ou elle est visualisée.
+ Ceci est peut probable.
+ .br
+-Le paramètre
++Le paramètre
+ .B netstat -i
+-est décrit tel qu'il fonctionnera lorsque le code de la version BETA du
+-paquetage net-tools aura été nettoyé.
++est décrit tel qu'il fonctionnera lorsque le code de la version BETA du
++paquetage net-tools aura été nettoyé.
+
+ .PP
+ .SH AUTEURS
+-L'interface utilisateur de netstat a été développée par
++L'interface utilisateur de netstat a été développée par
+ Fred Baumgarten <dc6iq@insu1.etec.uni-karlsruhe.de>. Les pages du
+-manuel essentiellement écrites par Matt Welsh
+-<mdw@tc.cornell.edu>. Mis à jour par Alan Cox <Alan.Cox@linux.org>.
++manuel essentiellement écrites par Matt Welsh
++<mdw@tc.cornell.edu>. Mis à jour par Alan Cox <Alan.Cox@linux.org>.
+ .br
+ La page de manuel et la commande incluse dans le paquetage net-tools
+-a été totallement réécrite par Bernd Eckenfels
++a été totallement réécrite par Bernd Eckenfels
+ <ecki@linux.de>.
+ .SH TRADUCTION
+ Jean Michel VANSTEENE (vanstee@worldnet.fr)
+diff --git a/man/fr_FR/plipconfig.8 b/man/fr_FR/plipconfig.8
+index cd44449..4d17ea2 100644
+--- a/man/fr_FR/plipconfig.8
++++ b/man/fr_FR/plipconfig.8
+@@ -1,44 +1,44 @@
+ .TH PLIPCONFIG 8 "17 February 1995" "" ""
+ .SH NOM
+-plipconfig \- réglage fin des paramètres du périphérique PLIP
++plipconfig \- réglage fin des paramètres du périphérique PLIP
+ .SH SYNOPSIS
+ .B "plipconfig interface"
+ .br
+ .B "plipconfig interface [nibble NN] [trigger NN] [unit NN]"
+ .SH DESCRIPTION
+ .B Plipconfig
+-est utilisé pour améliorer (espérons-le) les performances PLIP
+-en changeant les timings par défaut utilisés par le protocole PLIP. Les
+-résultats dépendent du port parallèle
+-utilisé, du cable, et de la vitesse CPU de chaque machine
+-à chaque bout du lien PLIP.
++est utilisé pour améliorer (espérons-le) les performances PLIP
++en changeant les timings par défaut utilisés par le protocole PLIP. Les
++résultats dépendent du port parallèle
++utilisé, du cable, et de la vitesse CPU de chaque machine
++à chaque bout du lien PLIP.
+ .LP
+ Si le seul argument est l'
+ .B interface
+ ,
+ .B plipconfig
+-affiche seulement l'état de cette interface. Autrement, il essaiera de
+-positionner les options données.
++affiche seulement l'état de cette interface. Autrement, il essaiera de
++positionner les options données.
+ .SH OPTIONS
+ .TP
+ .B "nibble NN"
+-Définit la valeur d'attente des digits en microsecondes. Par défault : 3000.
++Définit la valeur d'attente des digits en microsecondes. Par défault : 3000.
+ .TP
+ .B "trigger NN"
+-Définit le délai de déclenchement en microsecondes. Par défault : 500.
++Définit le délai de déclenchement en microsecondes. Par défault : 500.
+ .LP
+-La vitesse de PLIP peut, dans certains cas, être améliorée en
+-diminuant les valeurs par défaut.
++La vitesse de PLIP peut, dans certains cas, être améliorée en
++diminuant les valeurs par défaut.
+ Les valeurs trop petites peuvent engendrer une utilisation excessive de CPU,
+-et un temps de réponse aux interruptions mauvais, dont le résultat est
+-la perte de caractères lus sur le port, ou de paquets PLIP.
++et un temps de réponse aux interruptions mauvais, dont le résultat est
++la perte de caractères lus sur le port, ou de paquets PLIP.
+ La modification du MTU PLIP peut aussi affecter la vitesse PLIP.
+ .SH NOTE
+-Si vous n'obtenez aucune réponse, il est fort probable que l'IRQ configurée
+-soit mauvaise, et qu'elle nécessite une configuration avec ifconfig.
+-Les quelques cas pour lesquels les timings par défaut sont trop courts,
+-arrivent lorque l'on utilise de longs cables. Quelque chose à ne pas faire,
+-puisque le port parallèle n'est pas fait pour fonctionner avec de longs cables.
++Si vous n'obtenez aucune réponse, il est fort probable que l'IRQ configurée
++soit mauvaise, et qu'elle nécessite une configuration avec ifconfig.
++Les quelques cas pour lesquels les timings par défaut sont trop courts,
++arrivent lorque l'on utilise de longs cables. Quelque chose à ne pas faire,
++puisque le port parallèle n'est pas fait pour fonctionner avec de longs cables.
+ .SH VOIR AUSSI
+ .I ifconfig(8)
+ .SH BUGS
+diff --git a/man/fr_FR/rarp.8 b/man/fr_FR/rarp.8
+index 73e9328..e68730f 100644
+--- a/man/fr_FR/rarp.8
++++ b/man/fr_FR/rarp.8
+@@ -1,6 +1,6 @@
+-.TH RARP 8 "4 Août 1997" "net-tools" "Linux Programmer's Manual"
++.TH RARP 8 "4 Août 1997" "net-tools" "Linux Administrator's Manual"
+ .SH NOM
+-rarp \- manipule la table système RARP
++rarp \- manipule la table système RARP
+ .SH SYNOPSIS
+ .B "rarp [-V] [--version] [-h] [--help]"
+ .br
+@@ -11,30 +11,30 @@ rarp \- manipule la table syst
+ .B "rarp [-v] [-t type] -s nom_d_hote adr_materiel"
+ .SH DESCRIPTION
+ .B Rarp
+-manipule la table RARP du noyau de différentes façons. Les options de base
+-permettent d'effacer une entrée de correspondance d'adresses et d'en
+-redéfinir une manuellement. Pour des besoins de débogage, le programme
++manipule la table RARP du noyau de différentes façons. Les options de base
++permettent d'effacer une entrée de correspondance d'adresses et d'en
++redéfinir une manuellement. Pour des besoins de débogage, le programme
+ .B rarp
+-permet aussi de vider complètement la table RARP.
++permet aussi de vider complètement la table RARP.
+ .SH OPTIONS
+ .TP
+ .B \-V
+-Affiche la version de RARP utilisé.
++Affiche la version de RARP utilisé.
+ .TP
+ .B \-v
+-Dit à l'utilisateur ce qui se passe, en étant verbeux.
++Dit à l'utilisateur ce qui se passe, en étant verbeux.
+ .TP
+ .B "\-t type"
+-En définissant ou lisant la table RARP, ce paramètre optionnel dit à
++En définissant ou lisant la table RARP, ce paramètre optionnel dit à
+ .B rarp
+-quelles classes d'entrées il doit contrôler. La valeur par défaut de
+-ce paramètre est
++quelles classes d'entrées il doit contrôler. La valeur par défaut de
++ce paramètre est
+ .B ether
+-(i.e. code matériel
++(i.e. code matériel
+ .B 0x01
+ pour
+ .B "IEEE 802.3 10Mbps Ethernet".
+-D'autres valeurs doivent correspondre à des technologies réseaux telles que
++D'autres valeurs doivent correspondre à des technologies réseaux telles que
+ .B AX.25 (ax25).
+ et
+ .B NET/ROM (netrom).
+@@ -42,31 +42,31 @@ et
+ .B "\-a"
+ .TP
+ .B "\-\-list"
+-Liste les entrées de la table RARP.
++Liste les entrées de la table RARP.
+ .TP
+ .B "\-d nom_d_hote"
+ .TP
+ .B "\-\-delete nom_d_hote"
+-Supprime toutes les entrées RARP relatives à l'hôte spécifié.
++Supprime toutes les entrées RARP relatives à l'hôte spécifié.
+ .TP
+ .B "\-s nom_d_hote adr_materielle"
+ .TP
+ .B "\-\-set nom_d_hote adr_materielle"
+-Crée manuellement une correspondance d'adresses RARP pour l'hôte
+-.B nom_d_hôte
+-avec l'adresse matérielle
+-.B adr_materielle
+-. Le format de l'adresse matérielle est dépendant du matériel,
+-mais pour la plupart on peut considérer que la présentation classique
+-peut être utilisée. Pour la classe Ethernet, c'est 6 octets en hexadécimal,
+-séparés par des double-points.
++Crée manuellement une correspondance d'adresses RARP pour l'hôte
++.B nom_d_hôte
++avec l'adresse matérielle
++.BR adr_materielle .
++Le format de l'adresse matérielle est dépendant du matériel,
++mais pour la plupart on peut considérer que la présentation classique
++peut être utilisée. Pour la classe Ethernet, c'est 6 octets en hexadécimal,
++séparés par des double-points.
+
+ .SH ATTENTION
+-Certains systèmes (notamment des vieux Sun's) supposent que l'hôte
+-répondant à une requête RARP peut aussi fournir d'autres services
+-de boot à distance. Par conséquent n'ajoutez jamais
+-d'entrées RARP à la légère à moins que vous souhaitiez affronter la
+-colère de votre administrateur réseau.
++Certains systèmes (notamment des vieux Sun's) supposent que l'hôte
++répondant à une requête RARP peut aussi fournir d'autres services
++de boot à distance. Par conséquent n'ajoutez jamais
++d'entrées RARP à la légère à moins que vous souhaitiez affronter la
++colère de votre administrateur réseau.
+ .SH FICHIERS
+ .I /proc/net/rarp,
+ .SH VOIR AUSSI
+diff --git a/man/fr_FR/route.8 b/man/fr_FR/route.8
+index 9109e8d..986faf9 100644
+--- a/man/fr_FR/route.8
++++ b/man/fr_FR/route.8
+@@ -1,4 +1,4 @@
+-.TH ROUTE 8 "8 Août 1997" "net-tools" "Linux Programmer's Manual"
++.TH ROUTE 8 "8 Août 1997" "net-tools" "Linux Administrator's Manual"
+ .SH NAME
+ route \- affiche / manipule la table de routage IP
+ .SH SYNOPSIS
+@@ -54,9 +54,9 @@ If]
+ .RB [ \--help ]
+ .SH DESCRIPTION
+ .B Route
+-manipule la table de routage IP du noyau. Son utilisation première
+-consiste à configurer des routes statiques vers des hôtes ou des réseaux
+-via une interface, après sa configuration par le programme
++manipule la table de routage IP du noyau. Son utilisation première
++consiste à configurer des routes statiques vers des hôtes ou des réseaux
++via une interface, après sa configuration par le programme
+ .B ifconfig(8).
+
+ .SH OPTIONS
+@@ -66,12 +66,12 @@ Active le mode verbeux.
+
+ .TP
+ .B \-A famille
+-Utilise la famille d'adresses spécifiée (p.ex. `inet', `inet6').
++Utilise la famille d'adresses spécifiée (p.ex. `inet', `inet6').
+
+ .TP
+ .B \-n
+-Affiche les adresses numériques, au lieu
+-d'essayer de déterminer les noms d'hôtes. C'est utile si vous essayer de
++Affiche les adresses numériques, au lieu
++d'essayer de déterminer les noms d'hôtes. C'est utile si vous essayer de
+ savoir pourquoi la route vers votre serveur de nom a disparu.
+
+ .TP
+@@ -80,24 +80,24 @@ utilise
+ .BR netstat (8)-format
+ pour l'affichage de la table de routage.
+ .B \-ee
+-Génère une très longue ligne avec tous les paramètres à partir de la table
++Génère une très longue ligne avec tous les paramètres à partir de la table
+ de routage.
+
+ .TP
+ .B \-net
+ la
+ .B cible
+-est un réseau.
++est un réseau.
+
+ .TP
+ .B -host
+ la
+ .B cible
+-est un hôte.
++est un hôte.
+
+ .TP
+ .B -F
+-affiche la table de routage FIB du noyau. L'organisation peut être changée avec
++affiche la table de routage FIB du noyau. L'organisation peut être changée avec
+ .B \-e
+ et
+ .B \-ee
+@@ -117,131 +117,131 @@ ajoute une route.
+
+ .TP
+ .B cible
+-L'hôte ou le réseau destination. Vous pouvez fournir une adresse IP en
+-notation décimale pointée ou un nom d'hôte ou de réseau.
++L'hôte ou le réseau destination. Vous pouvez fournir une adresse IP en
++notation décimale pointée ou un nom d'hôte ou de réseau.
+
+ .TP
+ .B netmask Nm
+-spécifie le masque réseau de la route à ajouter.
++spécifie le masque réseau de la route à ajouter.
+
+ .TP
+ .B gw Gw
+-signifie que tout paquet IP envoyé à cette adresse sera routé par
+-la passerelle spécifiée.
++signifie que tout paquet IP envoyé à cette adresse sera routé par
++la passerelle spécifiée.
+ .B NOTE:
+-La passerelle concernée doit pouvoir être atteinte. Ceci signifie
+-qu'une route statique vers cette passerelle doit préalablement exister.
+-Si vous spécifiez l'adresse de l'une de vos interfaces locales, elle sera
+-utilisée pour décider de l'interface vers laquelle les paquets seront
+-envoyés. Ceci est une bidouille permettant d'être compatible BSD.
++La passerelle concernée doit pouvoir être atteinte. Ceci signifie
++qu'une route statique vers cette passerelle doit préalablement exister.
++Si vous spécifiez l'adresse de l'une de vos interfaces locales, elle sera
++utilisée pour décider de l'interface vers laquelle les paquets seront
++envoyés. Ceci est une bidouille permettant d'être compatible BSD.
+
+ .TP
+ .B metric M
+-Affecte la valeur M au champ métrique de la table de routage (utilisé par
+-les démons de routage).
++Affecte la valeur M au champ métrique de la table de routage (utilisé par
++les démons de routage).
+
+ .TP
+ .B mss M
+-Spécifie le MSS (Maximum Segment Size, Taille maximum de segment) de TCP,
+-pour les connexions empreintant cette route. Ce n'est normalement utilisé
++Spécifie le MSS (Maximum Segment Size, Taille maximum de segment) de TCP,
++pour les connexions empreintant cette route. Ce n'est normalement utilisé
+ que pour des optimisations fines des configurations de routage.
+
+
+ .TP
+ .B window W
+-Définit la taille de fenêtre TCP à W octets pour les connexions relatives
+-à cette route. C'est en général uniquement utilisé sur les réseaux AX.25 et
+-avec les pilotes incapables de manipuler les trames dos à dos.
++Définit la taille de fenêtre TCP à W octets pour les connexions relatives
++à cette route. C'est en général uniquement utilisé sur les réseaux AX.25 et
++avec les pilotes incapables de manipuler les trames dos à dos.
+
+ .TP
+ .B irtt I
+-Définit le iRTT initial (round trip time) pour les connexions TCP sur cette
+-route à I millisecondes (1-12000). C'est en général uniquement utilisé sur
+-les réseaux AX.25. Si omis, la valeur par défaut (300 ms selon le RFC 1122)
+-est utilisée.
++Définit le iRTT initial (round trip time) pour les connexions TCP sur cette
++route à I millisecondes (1-12000). C'est en général uniquement utilisé sur
++les réseaux AX.25. Si omis, la valeur par défaut (300 ms selon le RFC 1122)
++est utilisée.
+
+ .TP
+ .B reject
+-Installe une route bloquante, qui forcera l'échec d'une recherche.
+-C'est par exemple utilisé pour masquer les réseaux avant d'utiliser la
+-route par défaut. Ce n'est pas une fonction de pare-feu.
++Installe une route bloquante, qui forcera l'échec d'une recherche.
++C'est par exemple utilisé pour masquer les réseaux avant d'utiliser la
++route par défaut. Ce n'est pas une fonction de pare-feu.
+
+ .TP
+ .B mod, dyn, reinstate
+-Installe une route dynamique ou modifiée. Les deux indicateurs ne sont en
+-général positionnés que par le démon de routage. Cela ne sert que pour des
++Installe une route dynamique ou modifiée. Les deux indicateurs ne sont en
++général positionnés que par le démon de routage. Cela ne sert que pour des
+ besoins de diagnostics.
+
+ .TP
+ .B dev If
+-Force la route à être associée au périphérique spécifié, sinon le noyau
+-tentera de le déterminer par lui-même (en consultant les routes existantes
+-et les spécifications de périphériques). Dans la plupart des réseaux
++Force la route à être associée au périphérique spécifié, sinon le noyau
++tentera de le déterminer par lui-même (en consultant les routes existantes
++et les spécifications de périphériques). Dans la plupart des réseaux
+ normaux, vous n'aurez pas besoin de ceci.
+
+ If
+ .B dev If
+-est la dernière option de la ligne de commande, le mot
++est la dernière option de la ligne de commande, le mot
+ .B dev
+-peut être omis, puisque c'est la valeur par défaut. Autrement l'ordre des
++peut être omis, puisque c'est la valeur par défaut. Autrement l'ordre des
+ modificateurs de route (metric - netmask - gw - dev) n'a pas d'importance.
+
+ .SH EXEMPLES
+ .TP
+ .B route add -net 127.0.0.0
+-ajoute l'entrée loopback normale, en utilisant le masque 255.0.0.0 (réseau
+-de classe A, selon l'adresse de destination) et associée avec l'interface
+-"lo" (en supposant que ce périphérique a été correctement configuré avec
++ajoute l'entrée loopback normale, en utilisant le masque 255.0.0.0 (réseau
++de classe A, selon l'adresse de destination) et associée avec l'interface
++"lo" (en supposant que ce périphérique a été correctement configuré avec
+ .BR ifconfig (8)).
+
+ .TP
+ .B route add -net 192.56.76.0 netmask 255.255.255.0 dev eth0
+-ajoute une route vers le réseau 192.56.76.x via
+-"eth0". Le masque de classe C n'est pas vraiment nécessaire ici car
+-192.* est une adresse IP de classe C. Le mot "dev" peut être omis.
++ajoute une route vers le réseau 192.56.76.x via
++"eth0". Le masque de classe C n'est pas vraiment nécessaire ici car
++192.* est une adresse IP de classe C. Le mot "dev" peut être omis.
+
+ .TP
+ .B route add default gw mango-gw
+-ajoute une route par défaut (qui sera utilisée si aucune autre route ne
++ajoute une route par défaut (qui sera utilisée si aucune autre route ne
+ convient). Tous les paquets empreintant cette route passeront par
+-"mango-gw". Le périphérique qui sera effectivement utilisé pour cette route
+-dépend de la façon dont on atteint "mango-gw" - la route statique vers
+-"mango-gw" devra être préalablement configurée.
++"mango-gw". Le périphérique qui sera effectivement utilisé pour cette route
++dépend de la façon dont on atteint "mango-gw" - la route statique vers
++"mango-gw" devra être préalablement configurée.
+
+ .TP
+ .B route add ipx4 sl0
+-ajoute une route vers l'hôte "ipx4" via l'interface SLIP (en supposant que
+-"ipx4" est l'hôte SLIP).
++ajoute une route vers l'hôte "ipx4" via l'interface SLIP (en supposant que
++"ipx4" est l'hôte SLIP).
+
+ .TP
+ .B route add -net 192.57.66.0 netmask 255.255.255.0 gw ipx4
+-Cette commande route le réseau "192.57.66.x" par l'ancienne route vers l'interface SLIP.
++Cette commande route le réseau "192.57.66.x" par l'ancienne route vers l'interface SLIP.
+
+ .TP
+ .B route add 224.0.0.0 netmask 240.0.0.0 dev eth0
+-Ceci est une commande mal documentée et les gens savent ce qu'il faut
+-faire? Ceci force toutes les routes IP des classes D (multicast) à
++Ceci est une commande mal documentée et les gens savent ce qu'il faut
++faire? Ceci force toutes les routes IP des classes D (multicast) à
+ passer par "eth0". C'est la configuration correcte, normale pour un noyau
+ supportant le multicast.
+
+ .TP
+ .B route add 10.0.0.0 netmask 255.0.0.0 reject
+-Installe une route 'rejetée' pour le réseau privé "10.x.x.x."
++Installe une route 'rejetée' pour le réseau privé "10.x.x.x."
+
+ .LP
+ .SH RESULTATS
+-Le contenu des tables de routage du noyaus est affiché en colonnes comme
++Le contenu des tables de routage du noyaus est affiché en colonnes comme
+ suit
+ .TP
+ .B Destination
+-Le réseau ou hôte destination.
++Le réseau ou hôte destination.
+ .TP
+ .B Gateway
+-L'adresse de la passerelle ou '*' si indéfini.
++L'adresse de la passerelle ou '*' si indéfini.
+ .TP
+ .B Genmask
+-Le masque de réseau pour le réseau destinataire; '255.255.255.255' pour un hôte
+-et '0.0.0.0' pour la route par défaut (
++Le masque de réseau pour le réseau destinataire; '255.255.255.255' pour un hôte
++et '0.0.0.0' pour la route par défaut (
+ .B default
+ ).
+ .TP
+@@ -254,63 +254,63 @@ Les indicateurs possibles sont
+ .br
+ .B H
+ (la cible est un
+-.BR hôte )
++.BR hôte )
+ .br
+ .B G
+ (utilise comme
+ .BR passerelle )
+ .br
+ .B R
+-.RB ( rétablit
++.RB ( rétablit
+ la route pour le routage dynamique)
+ .br
+ .B D
+ .RB ( dynamiquement
+-configurée par le démon ou par redirect)
++configurée par le démon ou par redirect)
+ .br
+ .B M
+-.RB ( modifiée
+-par le démon de routage ou par redirect)
++.RB ( modifiée
++par le démon de routage ou par redirect)
+ .br
+ .B !
+-.RB ( rejète
++.RB ( rejète
+ la route)
+ .TP
+ .B Metric
+-La 'distance' à la cible (habituellement comptée en hops). Ce n'est pas
+-utilisé par les noyaux récents, mais peut-être requis par certains démons
++La 'distance' à la cible (habituellement comptée en hops). Ce n'est pas
++utilisé par les noyaux récents, mais peut-être requis par certains démons
+ de routage.
+ .TP
+ .B Ref
+-Nombre de références à cette route. (Pas utilisé dans le noyau Linux.)
++Nombre de références à cette route. (Pas utilisé dans le noyau Linux.)
+ .TP
+ .B Use
+ Count of lookups for the route. Depending on the use of -F and -C this will
+ be either route cache misses (-F) or hits (-C).
+ .TP
+ .B Iface
+-Interface vers laquelle les paquets empruntant cette route seront envoyés.
++Interface vers laquelle les paquets empruntant cette route seront envoyés.
+ .TP
+ .B MSS
+-Taille de segment maximum par défaut pour les connexions TCP sur cette
++Taille de segment maximum par défaut pour les connexions TCP sur cette
+ route.
+ .TP
+ .B Window
+-Taille de fenêtre par défaut pour les connexions TCP sur cette route.
++Taille de fenêtre par défaut pour les connexions TCP sur cette route.
+ .TP
+ .B irtt
+ RTT Initial (Round Trip Time). Le noyau utilise ceci pour essayer les
+-meilleurs paramètres protocolaires TCP sans attendre de réponse
+-(éventuellement tardive).
++meilleurs paramètres protocolaires TCP sans attendre de réponse
++(éventuellement tardive).
+ .TP
+-.B HH (seulement caché)
+-Le nombre d'entrées ARP et de routes cachées faisant référence au cache
+-d'en-tête matériel pour la route en cache. Ce sera la valeur \-1 si aucune adresse
+-matérielle n'est nécessaire pour l'interface de la route cachée (p.ex. lo).
++.B HH (seulement caché)
++Le nombre d'entrées ARP et de routes cachées faisant référence au cache
++d'en-tête matériel pour la route en cache. Ce sera la valeur \-1 si aucune adresse
++matérielle n'est nécessaire pour l'interface de la route cachée (p.ex. lo).
+ .TP
+-.B Arp (seulement caché)
+-Indique si oui ou non l'adresse matérielle pour la route en cache est encore
+-à jour.
++.B Arp (seulement caché)
++Indique si oui ou non l'adresse matérielle pour la route en cache est encore
++à jour.
+ .LP
+ .SH FICHIERS
+ .I /proc/net/ipv6_route
+@@ -324,11 +324,11 @@ Indique si oui ou non l'adresse mat
+ .LP
+ .SH HISTORIQUE
+ .B Route
+-pour Linux a été originellement écrit par Fred N. van Kempen,
+-<waltje@uwalt.nl.mugnet.org> puis modifié par Johannes Stille et
+-Linus Torvalds pour pl15. Alan Cox a ajouté les options concernant
+-la gestion des fenêtres et MSS pour Linux 1.1.22. Le support de irtt
+-et la fusion avec netstat ont été réalisés par Bernd Eckenfels.
++pour Linux a été originellement écrit par Fred N. van Kempen,
++<waltje@uwalt.nl.mugnet.org> puis modifié par Johannes Stille et
++Linus Torvalds pour pl15. Alan Cox a ajouté les options concernant
++la gestion des fenêtres et MSS pour Linux 1.1.22. Le support de irtt
++et la fusion avec netstat ont été réalisés par Bernd Eckenfels.
+ .SH AUTEUR
+ Maintenu par Phil Blundell <Philip.Blundell@pobox.com>.
+ .SH TRADUCTION
+diff --git a/man/fr_FR/slattach.8 b/man/fr_FR/slattach.8
+index 512d514..d21d0d7 100644
+--- a/man/fr_FR/slattach.8
++++ b/man/fr_FR/slattach.8
+@@ -1,87 +1,87 @@
+ .TH SLATTACH 8 "12 Feb 1994" "" ""
+ .SH NOM
+-slattach \- attache une interface réseau à une ligne série
++slattach \- attache une interface réseau à une ligne série
+ .SH SYNOPSIS
+ .B "slattach [-dehlLmnqv] [-c commande] [-p proto] [-s vitesse] [tty]"
+ .br
+ .SH DESCRIPTION
+ .B Slattach
+-est un minuscule programme qui peut être utilisé pour attacher
+-un terminal normal ("série") dans un des différents modes "réseau",
+-ceci vous permettant de l'utiliser pour des liaisons point-à-point
+-vers d'autres systèmes.
++est un minuscule programme qui peut être utilisé pour attacher
++un terminal normal ("série") dans un des différents modes "réseau",
++ceci vous permettant de l'utiliser pour des liaisons point-à-point
++vers d'autres systèmes.
+ .SH OPTIONS
+ .TP
+ .B "[-c commande]"
+-Exécute
++Exécute
+ .B `commande'
+-lorsque la ligne est suspendue. Ceci peut être utilisé pour lancer
+-des scripts ou réétablir des connexions quand un lien tombe.
++lorsque la ligne est suspendue. Ceci peut être utilisé pour lancer
++des scripts ou réétablir des connexions quand un lien tombe.
+ .TP
+ .B "[-d]"
+-Valide le débogage. Utile pour déterminer pourquoi une configuration
++Valide le débogage. Utile pour déterminer pourquoi une configuration
+ ne fonctionne pas.
+ .TP
+ .B "[-h]"
+-Termine lorsque la porteuse est perdue. Ceci fonctionne à la fois sur
+-les périphériques /dev/tty et /dev/cua en contrôlant directement
+-l'état de la porteuse toutes les 15 secondes.
++Termine lorsque la porteuse est perdue. Ceci fonctionne à la fois sur
++les périphériques /dev/tty et /dev/cua en contrôlant directement
++l'état de la porteuse toutes les 15 secondes.
+ .TP
+ .B "[-v]"
+ Valide le mode verbeux. Utile pour les shell scripts.
+ .TP
+ .B "[-q]"
+-Opère en mode silencieux - pas de messages du tout.
++Opère en mode silencieux - pas de messages du tout.
+ .TP
+ .B "[-l]"
+-Crée un fichier de vérouillage pour le périphérique comme
++Crée un fichier de vérouillage pour le périphérique comme
+ pour UUCP dans /var/lock.
+ .TP
+ .B "[-n]"
+-Equivalent à la commande "mesg n".
++Equivalent à la commande "mesg n".
+ .TP
+ .B "[-m]"
+ \fBn'\fPinitialise \fBpas\fP la ligne en mode raw 8 bits.
+ .TP
+ .B "[-e]"
+-Termine correctement après l'initialisation du périphérique,
++Termine correctement après l'initialisation du périphérique,
+ au lieu d'attendre que la ligne soit suspendue.
+ .TP
+ .B "[-L]"
+-Valide les opérations 3 lignes. Le terminal est mis en mode CLOCAL,
+-la surveillance de porteuse est invalidée.
++Valide les opérations 3 lignes. Le terminal est mis en mode CLOCAL,
++la surveillance de porteuse est invalidée.
+ .TP
+ .B "[-p proto]"
+-Définit le protocole spécifique à utiliser sur la ligne.
+-La valeur par défaut est
++Définit le protocole spécifique à utiliser sur la ligne.
++La valeur par défaut est
+ .B "cslip"
+-, c'est-à-dire SLIP compressé. Les autres valeurs possibles sont :
++, c'est-à-dire SLIP compressé. Les autres valeurs possibles sont :
+ .B "slip"
+ (SLIP normal),
+ .B "adaptive"
+ (CSLIP/SLIP adaptatifs),
+ .B "ppp"
+-(Protocole Point-à-Point)
++(Protocole Point-à-Point)
+ et
+ .B "kiss"
+-(un protocole utilisé pour communiquer avec des controleurs AX.25 paquets radios).
+-L'argument spécifique
++(un protocole utilisé pour communiquer avec des controleurs AX.25 paquets radios).
++L'argument spécifique
+ .B "tty"
+-peut être utilisé pour refaire passer le périphérique en
+-fonctionnement série normal. L'utilisation du mode 'ppp' n'est en
+-principe pas utile puisque ppp nécessite le démon additionnel
++peut être utilisé pour refaire passer le périphérique en
++fonctionnement série normal. L'utilisation du mode 'ppp' n'est en
++principe pas utile puisque ppp nécessite le démon additionnel
+ .B pppd
+-pour être actif sur la ligne. Pour les connexions `kiss', le programme
++pour être actif sur la ligne. Pour les connexions `kiss', le programme
+ .B axattach
+-doit être utilisé.
++doit être utilisé.
+ .TP
+ .B "[-s vitesse]"
+-Définit la vitesse de la ligne, différente de la valeur par défaut.
++Définit la vitesse de la ligne, différente de la valeur par défaut.
+ .PP
+-Si aucun argument n'est donné, la ligne courante du terminal
+-(habituellement liée au login) est utilisée. Autrement, une tentative
+-est effectuée pour obtenir le port du terminal indiqué, puis il est
+-vérouillé et ouvert.
++Si aucun argument n'est donné, la ligne courante du terminal
++(habituellement liée au login) est utilisée. Autrement, une tentative
++est effectuée pour obtenir le port du terminal indiqué, puis il est
++vérouillé et ouvert.
+ .SH FICHIERS
+ .I /dev/cua* /var/lock/LCK.*
+ .SH BUGS
+diff --git a/man/pt_BR/arp.8 b/man/pt_BR/arp.8
+index 41c8fd6..6c1e7f7 100644
+--- a/man/pt_BR/arp.8
++++ b/man/pt_BR/arp.8
+@@ -7,12 +7,12 @@ arp \- manipula o cache ARP do sistema
+ .RB [ "\-H tipo" ]
+ .RB [ "-i if" ]
+ .B -a
+-.RB [ máquina ]
++.RB [ máquina ]
+ .PP
+ .B arp
+ .RB [ \-v ]
+ .RB [ "\-i if" ]
+-.B "\-d máquina"
++.B "\-d máquina"
+ .RB [ pub ]
+ .RB [ nopub ]
+ .PP
+@@ -20,7 +20,7 @@ arp \- manipula o cache ARP do sistema
+ .RB [ \-v ]
+ .RB [ "\-H tipo" ]
+ .RB [ "\-i if" ]
+-.B -s máquina endereço_hardware
++.B -s máquina endereço_hardware
+ .RB [ temp ]
+ .RB [ nopub ]
+ .PP
+@@ -28,7 +28,7 @@ arp \- manipula o cache ARP do sistema
+ .RB [ \-v ]
+ .RB [ "\-H tipo" ]
+ .RB [ "\-i if" ]
+-.B -s máquina endereço_hardware
++.B -s máquina endereço_hardware
+ .RB [ "netmask nm" ]
+ .B pub
+ .PP
+@@ -36,7 +36,7 @@ arp \- manipula o cache ARP do sistema
+ .RB [ \-v ]
+ .RB [ "\-H tipo" ]
+ .RB [ "\-i if" ]
+-.B -Ds máquina ifa
++.B -Ds máquina ifa
+ .RB [ "netmask nm" ]
+ .B pub
+ .PP
+@@ -46,28 +46,28 @@ arp \- manipula o cache ARP do sistema
+ .RB [ "-i if" ]
+ .B -f arquivo
+
+-.SH DESCRIÇÃO
++.SH DESCRIÇÃO
+ .B arp
+-manipula o cache ARP do kernel de várias maneiras. As principais opções
+-são remoção de uma entrada de mapeamento de endereço e configuração manual
+-de um endereço. Para propósitos de depuração, o programa
++manipula o cache ARP do kernel de várias maneiras. As principais opções
++são remoção de uma entrada de mapeamento de endereço e configuração manual
++de um endereço. Para propósitos de depuração, o programa
+ .B arp
+-também permite um dump completo do cache ARP.
+-.SH OPÇÕES
++também permite um dump completo do cache ARP.
++.SH OPÇÕES
+ .TP
+ .B "\-v, \-\-verbose"
+-Mostra ao usuário o que está acontecendo, de modo detalhado.
++Mostra ao usuário o que está acontecendo, de modo detalhado.
+ .TP
+ .B "\-n, \-\-numeric"
+-mostra endereços numéricos, ao invés de tentar determinar os nomes simbólicos da
+-máquina, porta e usuário.
++mostra endereços numéricos, ao invés de tentar determinar os nomes simbólicos da
++máquina, porta e usuário.
+ .TP
+ .B "\-H type, \-\-hw-type type"
+-Quando configurando ou lendo o cache ARP, este parâmetro opcional informa ao
++Quando configurando ou lendo o cache ARP, este parâmetro opcional informa ao
+ .B arp
+-que classe de entradas devem ser verificadas. O valor padrão deste parâmetro é
++que classe de entradas devem ser verificadas. O valor padrão deste parâmetro é
+ .B ether
+-(i.e. código de hardware 0x01 para Ethernet IEEE 802.3 10Mbps).
++(i.e. código de hardware 0x01 para Ethernet IEEE 802.3 10Mbps).
+ Outros valores podem incluir tecnologias de rede como
+ .RB "ARCnet (" arcnet ")"
+ ,
+@@ -77,86 +77,86 @@ Outros valores podem incluir tecnologias de rede como
+ e
+ .RB "NET/ROM (" netrom ")."
+ .TP
+-.B "\-a [máquina], \-\-display [máquina]"
+-Mostra as entradas das máquinas especificadas. Se o parâmetro
+-.B máquina
+-não for usado,
++.B "\-a [máquina], \-\-display [máquina]"
++Mostra as entradas das máquinas especificadas. Se o parâmetro
++.B máquina
++não for usado,
+ .B todas
+-as entradas serão mostradas.
++as entradas serão mostradas.
+ .TP
+-.B "\-d máquina, \-\-delete máquina"
+-Remove quaisquer entradas para a máquina especificada. Isto pode ser
+-usado se a máquina indicada for desligada, por exemplo. Nos kernels
++.B "\-d máquina, \-\-delete máquina"
++Remove quaisquer entradas para a máquina especificada. Isto pode ser
++usado se a máquina indicada for desligada, por exemplo. Nos kernels
+ mais recentes o
+ .BR arp (1)
+-suporta a especificação de
++suporta a especificação de
+ .B pub
+ ou
+ .B nopub
+-para decidir se uma entrada pública ou privada deve ser removida. Se você
+-não informar uma destas flags as duas entradas serão removidas.
++para decidir se uma entrada pública ou privada deve ser removida. Se você
++não informar uma destas flags as duas entradas serão removidas.
+ .TP
+ .B "\-D, \-\-use-device"
+-Usa o endereço de hardware da interface
++Usa o endereço de hardware da interface
+ .BR ifa
+ .TP
+ .B "\-i If, \-\-device If"
+ Seleciona uma interface. Quando mostrando o cache ARP somente entradas iguais
+-à interface serão mostradas. Configura uma entrada ARP permanente ou
+-temporária que será usada no dispositivo especificado. Se nenhum dispositivo for
++à interface serão mostradas. Configura uma entrada ARP permanente ou
++temporária que será usada no dispositivo especificado. Se nenhum dispositivo for
+ informado, o kernel descobre o dispositivo a partir da tabela de roteamento.
+ Para entradas
+ .B pub
+-a interface especificada é a interface na qual as requisições ARP serão
++a interface especificada é a interface na qual as requisições ARP serão
+ respondidas.
+ .br
+ .B NOTA:
+-Deve ser diferente da interface para a qual os pacotes IP serão roteados.
++Deve ser diferente da interface para a qual os pacotes IP serão roteados.
+ .TP
+-.B "\-s máquina endereço_hardware, \-\-set máquina"
+-Cria manualmente uma entrada de mapeamento de endereço ARP para a máquina
+-.B máquina
+-com endereço de hardware configurado para
+-.B endereço_hardware.
+-O formato do endereço de hardware depende da classe de hardware, mas
+-para a maioria das classes pode-se assumir que a apresentação usual pode
+-ser usada. Para a classe Ethernet, são 6 bytes em hexadecimal, separados
+-por dois pontos (:). Quando adicionando entradas proxy arp (isto é, aquelas
++.B "\-s máquina endereço_hardware, \-\-set máquina"
++Cria manualmente uma entrada de mapeamento de endereço ARP para a máquina
++.B máquina
++com endereço de hardware configurado para
++.B endereço_hardware.
++O formato do endereço de hardware depende da classe de hardware, mas
++para a maioria das classes pode-se assumir que a apresentação usual pode
++ser usada. Para a classe Ethernet, são 6 bytes em hexadecimal, separados
++por dois pontos (:). Quando adicionando entradas proxy arp (isto é, aquelas
+ com a flag
+-.BR púb lico
++.BR púb lico
+ setadas) uma
+ .B netmask
+ pode ser especificada para o proxy arp de uma subrede inteira.
+-Proxy arp para rotear redes inteiras não é um bom protocolo, mas algumas
+-vezes é útil, então é suportado. Se a flag
++Proxy arp para rotear redes inteiras não é um bom protocolo, mas algumas
++vezes é útil, então é suportado. Se a flag
+ .B temp
+-não for fornecida, as entradas serão permanentemente armazenadas no cache ARP.
++não for fornecida, as entradas serão permanentemente armazenadas no cache ARP.
+ .TP
+ .B "\-f arquivo, \-\-file arquivo"
+-Similar à opção
++Similar à opção
+ .B \-s
+-só que desta vez as informações de endereços são obtidas a partir do arquivo
++só que desta vez as informações de endereços são obtidas a partir do arquivo
+ .B arquivo.
+-Isto pode ser usado se entradas ARP para muitas máquinas tiverem que ser
+-configuradas. O nome do arquivo de dados é freqüentemente
++Isto pode ser usado se entradas ARP para muitas máquinas tiverem que ser
++configuradas. O nome do arquivo de dados é freqüentemente
+ .IR /etc/ethers ,
+-mas isto não é oficial.
++mas isto não é oficial.
+ .sp 1
+-O formato deste arquivo é simples; ele somente contém linhas de texto ASCII com
+-um nome de máquina e um endereço de hardware separados por um espaço em branco.
++O formato deste arquivo é simples; ele somente contém linhas de texto ASCII com
++um nome de máquina e um endereço de hardware separados por um espaço em branco.
+ Adicionalmente as flags
+ .BR "pub" , " nopub" , " temp" " and" " netmask"
+ podem ser usadas.
+ .LP
+ Em todos os lugares onde uma
+-.B máquina
+-é esperada, você também pode informar um
+-.B "endereço IP"
+-em notação decimal separada por pontos.
++.B máquina
++é esperada, você também pode informar um
++.B "endereço IP"
++em notação decimal separada por pontos.
+ .LP
+-Cada entrada completa no cache ARP será marcada com uma flag
++Cada entrada completa no cache ARP será marcada com uma flag
+ .BR C .
+-Entradas permanentes são marcadas com um
++Entradas permanentes são marcadas com um
+ .B M
+ e entradas publicadas tem uma flag
+ .BR P .
+@@ -171,7 +171,7 @@ e entradas publicadas tem uma flag
+ .SH AUTOR
+ Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org> com muitas melhorias
+ feitas pelo mantenedor do net-tools, Bernd Eckenfels <net-tools@lina.inka.de>.
+-Tradução para a língua portuguesa feita por
++Tradução para a língua portuguesa feita por
+ Arnaldo Carvalho de Melo <acme@conectiva.com.br> em 11/abril/1998.
+ Revisado por
+ Jorge Luiz Godoy Filho <jorge@bestway.com.br> em 15/abril/1998.
+diff --git a/man/pt_BR/hostname.1 b/man/pt_BR/hostname.1
+index fe00879..5880fc8 100644
+--- a/man/pt_BR/hostname.1
++++ b/man/pt_BR/hostname.1
+@@ -1,15 +1,15 @@
+ .TH HOSTNAME 1 "28 de janeiro de 1996" "net-tools" "Manual do Programador Linux"
+
+ .SH NOME
+-hostname \- mostra ou configura o nome da máquina
++hostname \- mostra ou configura o nome da máquina
+ .BR
+-domainname \- mostra ou configura o nome do domínio NIS/YP
++domainname \- mostra ou configura o nome do domínio NIS/YP
+ .BR
+-dnsdomainname \- mostra o nome do domínio DNS
++dnsdomainname \- mostra o nome do domínio DNS
+ .BR
+-nisdomainname \- mostra ou configura o nome do domínio NIS/YP
++nisdomainname \- mostra ou configura o nome do domínio NIS/YP
+ .BR
+-ypdomainname \- mostra ou configura o nome do domínio NIS/YP
++ypdomainname \- mostra ou configura o nome do domínio NIS/YP
+
+ .SH SINOPSE
+ .B hostname
+@@ -34,7 +34,7 @@ ypdomainname \- mostra ou configura o nome do dom
+ .RB [ \-v ]
+ .RB [ \-F\ arquivo ]
+ .RB [ \-\-file\ arquivo ]
+-.RB [ máquina ]
++.RB [ máquina ]
+
+ .PP
+ .B domainname
+@@ -61,11 +61,11 @@ ypdomainname \- mostra ou configura o nome do dom
+ .B ypdomainname
+ .RB [ \-v ]
+
+-.SH DESCRIÇÃO
++.SH DESCRIÇÃO
+ .B hostname
+-é o programa usado para configurar ou mostrar o nome corrente da máquina
+-ou o domínio do sistema. Este nome é usado por muitos dos programas de
+-rede para identificar a máquina. O nome do domínio também é usado pelo
++é o programa usado para configurar ou mostrar o nome corrente da máquina
++ou o domínio do sistema. Este nome é usado por muitos dos programas de
++rede para identificar a máquina. O nome do domínio também é usado pelo
+ NIS/YP.
+
+ .SS "OBTER NOME"
+@@ -73,119 +73,119 @@ Quando chamado sem argumentos o programa mostra os nomes correntes:
+
+ .LP
+ .B hostname
+-mostrará o nome do sistema conforme retornado pela função
++mostrará o nome do sistema conforme retornado pela função
+ .BR gethostname (2).
+
+
+ .LP
+ .B "domainname, nisdomainname, ypdomainname"
+-mostrará o nome do sistema conforme retornado pela função
++mostrará o nome do sistema conforme retornado pela função
+ .BR getdomainname (2).
+-Isto também é conhecido como o nome de domínio YP/NIS do sistema.
++Isto também é conhecido como o nome de domínio YP/NIS do sistema.
+
+ .LP
+ .B dnsdomainname
+-mostrara a parte do domínio do FQDN (Nome de domínio completamente qualificado).
+-O FQDN do sistema é retornado pelo comando
++mostrara a parte do domínio do FQDN (Nome de domínio completamente qualificado).
++O FQDN do sistema é retornado pelo comando
+ .BR "hostname \-\-fqdn" .
+
+ .SS "CONFIGURAR NOME"
+-Quando chamado com um argumento ou com a opção
++Quando chamado com um argumento ou com a opção
+ .B \-\-file
+-, o comando configura o nome da máquina ou do domínio NIS/YP.
++, o comando configura o nome da máquina ou do domínio NIS/YP.
+
+ .LP
+-Note que somente o super usuário pode mudar os nomes.
++Note que somente o super usuário pode mudar os nomes.
+
+ .LP
+-Nao é possível configurar o FQDN ou o nome do domínio DNS com o comando
++Nao é possível configurar o FQDN ou o nome do domínio DNS com o comando
+ .B dnsdomainname
+ (veja
+ .B "O FQDN"
+ abaixo).
+
+ .LP
+-O nome da máquina é normalmente configurado durante a inicialização do sistema,
++O nome da máquina é normalmente configurado durante a inicialização do sistema,
+ em
+ .I /etc/rc.d/rc.inet1
+ ou
+ .I /etc/init.d/boot
+-(normalmente lendo o conteúdo de um arquivo que contém o nome da máquina, ex.:
++(normalmente lendo o conteúdo de um arquivo que contém o nome da máquina, ex.:
+ .IR /etc/hostname ).
+
+ .SS O FQDN
+-Você não pode mudar o FQDN (conforme retornado por
++Você não pode mudar o FQDN (conforme retornado por
+ .BR "hostname \-\-fqdn" )
+-ou o nome do domínio DNS (conforme retornado por
++ou o nome do domínio DNS (conforme retornado por
+ .BR "dnsdomainname" )
+-com este comando. O FQDN do sistema é o nome que o
++com este comando. O FQDN do sistema é o nome que o
+ .BR resolver (3)
+-retorna para o nome da máquina.
++retorna para o nome da máquina.
+
+ .LP
+-Tecnicamente: O FQDN é o nome retornado pelo
++Tecnicamente: O FQDN é o nome retornado pelo
+ .BR gethostbyname (2)
+ para o nome retornado pelo
+ .BR gethostname (2).
+-O nome do domínio DNS é a parte após o primeiro ponto.
++O nome do domínio DNS é a parte após o primeiro ponto.
+ .LP
+-Portanto isto depende da configuração (normalmente em
++Portanto isto depende da configuração (normalmente em
+ .IR /etc/host.conf )
+-para que você possa mudá-lo. Normalmente (se o arquivo hosts for lido antes
+-do DNS ou NIS) você pode mudá-lo em
++para que você possa mudá-lo. Normalmente (se o arquivo hosts for lido antes
++do DNS ou NIS) você pode mudá-lo em
+ .IR /etc/hosts .
+
+
+-.SH OPÇÕES
++.SH OPÇÕES
+ .TP
+ .I "\-a, \-\-alias"
+-Mostra o alias da máquina (se usado).
++Mostra o alias da máquina (se usado).
+ .TP
+ .I "\-d, \-\-domain"
+-Mostra o nome do domínio DNS. Não use o comando
++Mostra o nome do domínio DNS. Não use o comando
+ .B domainname
+-para obter o nome do domínio DNS porque ele mostrará o nome do domínio NIS e
+-não o nome do domínio DNS. Use
++para obter o nome do domínio DNS porque ele mostrará o nome do domínio NIS e
++não o nome do domínio DNS. Use
+ .BR dnsdomainname .
+ .TP
+ .I "\-F, \-\-file arquivo"
+-Leia o nome da máquina a partir do arquivo especificado. Comentários (linhas
+-começando com um `#') são ignorados.
++Leia o nome da máquina a partir do arquivo especificado. Comentários (linhas
++começando com um `#') são ignorados.
+ .TP
+ .I "\-f, \-\-fqdn, \-\-long"
+-Mostra o FQDN (Nome de Domínio Completamente Qualificado). Um FQDN consiste de
+-um nome curto de máquina e do nome do domínio DNS. A menos que você esteja
+-usando bind ou NIS para resolução de nomes você pode mudar o FQDN e o nome
+-do domínio DNS (que é parte do FQDN) no arquivo \fI/etc/hosts\fR.
++Mostra o FQDN (Nome de Domínio Completamente Qualificado). Um FQDN consiste de
++um nome curto de máquina e do nome do domínio DNS. A menos que você esteja
++usando bind ou NIS para resolução de nomes você pode mudar o FQDN e o nome
++do domínio DNS (que é parte do FQDN) no arquivo \fI/etc/hosts\fR.
+ .TP
+ .I "\-h, \-\-help"
+ Mostra uma mensagem sobre como utilizar o comando e termina.
+ .TP
+ .I "\-i, \-\-ip-address"
+-Mostra o(s) endereço(s) IP da máquina.
++Mostra o(s) endereço(s) IP da máquina.
+ .TP
+ .I "\-s, \-\-short"
+-Mostra o nome curto da máquina. É o nome da máquina até o primeiro ponto.
++Mostra o nome curto da máquina. É o nome da máquina até o primeiro ponto.
+ .TP
+ .I "\-V, \-\-version"
+-Mostra informação de versão na saída padrão e termina com sucesso.
++Mostra informação de versão na saída padrão e termina com sucesso.
+ .TP
+ .I "\-v, \-\-verbose"
+-Mostra uma saída detalhada do que está acontecendo.
++Mostra uma saída detalhada do que está acontecendo.
+ .TP
+ .I "\-y, \-\-yp, \-\-nis"
+-Mostra o nome do domínio NIS. Se um parâmetro for especificado (ou
++Mostra o nome do domínio NIS. Se um parâmetro for especificado (ou
+ .B \-\-file arquivo
+-) então o root também pode configurar um novo domínio NIS.
++) então o root também pode configurar um novo domínio NIS.
+ .SH ARQUIVOS
+ .B /etc/hosts
+ .SH AUTOR
+ Peter Tobias, <tobias@et-inf.fho-emden.de>
+ .BR
+-Bernd Eckenfels, <net-tools@lina.inka.de> (NIS e página man).
++Bernd Eckenfels, <net-tools@lina.inka.de> (NIS e página man).
+ .BR
+-Arnaldo Carvalho de Melo, <acme@conectiva.com.br> Tradução para a língua
++Arnaldo Carvalho de Melo, <acme@conectiva.com.br> Tradução para a língua
+ portuguesa.
+ .BR
+-Jorge Luiz Godoy Filho, <jorge@bestway.com.br> Revisão.
++Jorge Luiz Godoy Filho, <jorge@bestway.com.br> Revisão.
+ .BR
+diff --git a/man/pt_BR/ifconfig.8 b/man/pt_BR/ifconfig.8
+index 0a97683..1432dc5 100644
+--- a/man/pt_BR/ifconfig.8
++++ b/man/pt_BR/ifconfig.8
+@@ -4,13 +4,13 @@ ifconfig \- configura uma interface de rede
+ .SH SINOPSE
+ .B "ifconfig [interface]"
+ .br
+-.B "ifconfig interface [aftype] opções | endereços ..."
+-.SH DESCRIÇÃO
++.B "ifconfig interface [aftype] opções | endereços ..."
++.SH DESCRIÇÃO
+ .B ifconfig
+-é usado para configurar (e posteriormente manter) as interfaces de
+-rede. É usado durante o boot para configurar a maioria delas para
+-um estado usável. Depois disto, é normalmente somente necessário
+-durante depurações ou quando for necessária uma configuração fina
++é usado para configurar (e posteriormente manter) as interfaces de
++rede. É usado durante o boot para configurar a maioria delas para
++um estado usável. Depois disto, é normalmente somente necessário
++durante depurações ou quando for necessária uma configuração fina
+ do sistema.
+ .LP
+ Se nenhum argumento for informado,
+@@ -19,12 +19,12 @@ somente mostra o estado das interfaces correntemente definidas. Se
+ um argumento
+ .B interface
+ for informado, ele mostra somente o estado da interface informada. De
+-outra forma ele assume que os parâmetros devem ser configurados.
+-.SH Famílias de Endereçamento
+-Se o primeiro argumento após o nome da interface for reconhecido
+-como um nome de uma família de endereçamento suportada, esta família
+-de endereçamento é usada na decodificação e apresentação de todos
+-os endereços de protocolos. Atualmente as famílias de endereçamento
++outra forma ele assume que os parâmetros devem ser configurados.
++.SH Famílias de Endereçamento
++Se o primeiro argumento após o nome da interface for reconhecido
++como um nome de uma família de endereçamento suportada, esta família
++de endereçamento é usada na decodificação e apresentação de todos
++os endereços de protocolos. Atualmente as famílias de endereçamento
+ suportadas incluem
+ .B inet
+ (TCP/IP, default)
+@@ -36,95 +36,91 @@ suportadas incluem
+ (Novell IPX) and
+ .B netrom
+ (AMPR Packet radio).
+-.SH OPÇÕES
++.SH OPÇÕES
+ .TP
+ .B interface
+-O nome da interface de rede. Usualmente é um nome como
++O nome da interface de rede. Usualmente é um nome como
+ .B eth0
+ ,
+ .B sl3
+ ou algo parecido: um nome de driver de dispositivo seguido por um
+-número.
++número.
+ .TP
+ .B up
+-Esta flag causa a ativação da interface. É especificada
+-implicitamente se a interface receber um novo endereço (veja
++Esta flag causa a ativação da interface. É especificada
++implicitamente se a interface receber um novo endereço (veja
+ abaixo).
+ .TP
+ .B down
+-Esta flag desativa o driver desta interface, é útil quando alguma
+-coisa começar a ter problemas.
++Esta flag desativa o driver desta interface, é útil quando alguma
++coisa começar a ter problemas.
+ .TP
+ .B "[\-]arp"
+ Habilita ou desabilita o uso do protocolo ARP para esta interface. Se
+-o sinal de menos (\-) estiver presente a opção é desligada.
++o sinal de menos (\-) estiver presente a opção é desligada.
+ .TP
+ .B "[\-]trailers"
+-Habilita ou desabilita o uso de trailer em frames Ethernet. Não é
+-utilizada na implementação atual do pacote net-tools.
++Habilita ou desabilita o uso de trailer em frames Ethernet. Não é
++utilizada na implementação atual do pacote net-tools.
+ .TP
+ .B "[\-]allmulti"
+ Habilita ou desabilita o modo
+ .B promiscuous
+-da interface. Isto significa que todos os frames passarão pela camada
+-de rede do kernel, permitindo monitoração da rede.
+-.TP
+-.B "metric N"
+-Este parâmetro configura a métrica da interface. Não é usado atualmente,
+-mas será implementado no futuro.
++da interface. Isto significa que todos os frames passarão pela camada
++de rede do kernel, permitindo monitoração da rede.
+ .TP
+ .B "mtu N"
+-Este parâmetro configura a Unidade Máxima de Transferência (MTU) de uma
+-interface. Para Ethernet é um número entre 1000-2000 (o padrão é
+-1500). Para SLIP, use algo entre 200 e 4096. Note que a implementação
+-atual não manipula fragmentação IP ainda, então é melhor configurar
++Este parâmetro configura a Unidade Máxima de Transferência (MTU) de uma
++interface. Para Ethernet é um número entre 1000-2000 (o padrão é
++1500). Para SLIP, use algo entre 200 e 4096. Note que a implementação
++atual não manipula fragmentação IP ainda, então é melhor configurar
+ a MTU com um tamanho adequado!
+ .TP
+ .B "dstaddr addr"
+-Configura o endereço IP do "outro lado" no caso de um link Ponto-A-Ponto,
++Configura o endereço IP do "outro lado" no caso de um link Ponto-A-Ponto,
+ como PPP. Esta palavra-chave tornou-se obsoleta e deve ser usada a nova
+ palavra-chave
+ .BR pointopoint .
+ .TP
+ .B "netmask addr"
+-Configura a máscara de rede IP para esta interface. Este valor assume o
+-padrão usual das classes A, B ou C (deduzindo-o a partir do endereço
++Configura a máscara de rede IP para esta interface. Este valor assume o
++padrão usual das classes A, B ou C (deduzindo-o a partir do endereço
+ IP da interface), mas pode ser configurado para qualquer valor para o
+ uso de sub-redes.
+
+ .TP
+ .B "irq addr"
+-Configura a linha de interrupção (IRQ) usada por este dispositivo. Muitos
+-dispositivos não suportam configuração dinâmica de IRQ.
++Configura a linha de interrupção (IRQ) usada por este dispositivo. Muitos
++dispositivos não suportam configuração dinâmica de IRQ.
+ .TP
+-.B "[-]broadcast [endereço]"
+-Se o argumento endereço for informado, configura o endereço de protocolo
++.B "[-]broadcast [endereço]"
++Se o argumento endereço for informado, configura o endereço de protocolo
+ broadcast para esta interface. De outra forma ele somente configura a flag
+ .B IFF_BROADCAST
+ da interface. Se a palavra-chave for precedida por um sinal de menos
+ .B (-)
+-, então a flag é removida.
++, então a flag é removida.
+ .TP
+-.B "[-]pointopoint [endereço]"
++.B "[-]pointopoint [endereço]"
+ Esta palavra-chave habilita o modo
+ .B ponto-a-ponto
+-da interface, significando que ela é um link direto entre duas máquinas
+-sem ninguém ouvindo (ou, pelo menos nós esperamos que este seja o caso
++da interface, significando que ela é um link direto entre duas máquinas
++sem ninguém ouvindo (ou, pelo menos nós esperamos que este seja o caso
+ :-)
+ .BR
+-Se o argumento endereço for informado, configura o endereço de protocolo
++Se o argumento endereço for informado, configura o endereço de protocolo
+ do outro lado do link, exatamente como a palavra-chave obsoleta
+ .B dstaddr
+ faz. De outra forma, ela somente configura a flag
+ .B IFF_POINTOPOINT
+ da interface. Se a palavra-chave for precedida por um sinal de menos
+ .B (-)
+-, então a flag é removida.
++, então a flag é removida.
+ .TP
+ .B "hw"
+-Configura o endereço de hardware para esta interface, se o driver do
+-dispositivo suportar esta operação. A palavra-chave deve ser seguida
+-pelo nome da classe do hardware e o equivalente em ASCII do endereço
++Configura o endereço de hardware para esta interface, se o driver do
++dispositivo suportar esta operação. A palavra-chave deve ser seguida
++pelo nome da classe do hardware e o equivalente em ASCII do endereço
+ de hardware. As classes de hardware atualmente suportadas incluem
+ .B ether
+ (Ethernet),
+@@ -136,45 +132,34 @@ e
+ (AMPR NET/ROM).
+ .TP
+ .B multicast
+-Inicializa a flag de multicast para a interface. Normalmente, isto não será
+-necessário já que os drivers ajustam as flags corretas por si só.
++Inicializa a flag de multicast para a interface. Normalmente, isto não será
++necessário já que os drivers ajustam as flags corretas por si só.
+ .TP
+-.B endereço
+-O nome ou endereço IP da máquina (um nome de máquina será traduzido para
+-um endereço IP) da interface. Este parâmetro é necessário, apesar
+-da sintaxe atualmente não requisitá-lo.
++.B endereço
++O nome ou endereço IP da máquina (um nome de máquina será traduzido para
++um endereço IP) da interface. Este parâmetro é necessário, apesar
++da sintaxe atualmente não requisitá-lo.
+ .SH NOTAS
+-
+-+Since kernel release 2.2 there are no explicit interface statistics for
+-+alias interfaces anymore. The statistics printed for the original address
+-+are shared with all alias addresses on the same device. If you want per-address
+-+statistics you should add explicit accounting
+-+rules for the address using the
+-+.BR ipchains(8)
+-+command.
+-
+-Deste o kernel 2.2 não existem mais estatísticas explícitas para os apelidos (aliases)
+-de interfaces. As estatísticas mostradas para o endereço original são compartilhadas
+-como todos os endereços associados ao mesmo dispositivo. Se desejar estatísticas
+-por endereço você deve explicitamente adicionar regras de contabilização para os
+-endereços usando o comando
+-.BR ipchains(8)
++Deste o kernel 2.2 não existem mais estatísticas explícitas para os apelidos (aliases)
++de interfaces. As estatísticas mostradas para o endereço original são compartilhadas
++como todos os endereços associados ao mesmo dispositivo. Se desejar estatísticas
++por endereço você deve explicitamente adicionar regras de contabilização para os
++endereços usando o comando
++.BR iptables(8)
+ .
+
+ .SH ARQUIVOS
+-.I /proc/net/socket
+-.br
+ .I /proc/net/dev
+ .SH BUGS
+-Os endereços appletalk DDP e IPX serão mostrados, mas não podem ser alterados
++Os endereços appletalk DDP e IPX serão mostrados, mas não podem ser alterados
+ com este comando.
+-.SH VEJA TAMBÉM
+-route(8), netstat(8), arp(8), rarp(8), ipchains(8)
++.SH VEJA TAMBÉM
++route(8), netstat(8), arp(8), rarp(8), iptables(8)
+ .SH AUTORES
+ Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org>
+ Alan Cox, <Alan.Cox@linux.org>
+-.SH TRADUÇÃO E REVISÃO PARA A LÍNGUA PORTUGUESA
+-Arnaldo Carvalho de Melo <acme@conectiva.com.br> (tradução)
++.SH TRADUÇÃO E REVISÃO PARA A LÃNGUA PORTUGUESA
++Arnaldo Carvalho de Melo <acme@conectiva.com.br> (tradução)
+ .BR
+-Jorge Luiz Godoy Filho <jorge@bestway.com.br> (revisão)
++Jorge Luiz Godoy Filho <jorge@bestway.com.br> (revisão)
+
+diff --git a/man/pt_BR/netstat.8 b/man/pt_BR/netstat.8
+index b9b359a..1903bbb 100644
+--- a/man/pt_BR/netstat.8
++++ b/man/pt_BR/netstat.8
+@@ -5,13 +5,13 @@
+ .\"
+ .\" Modificado por: Bernd.Eckenfels@inka.de
+ .\" Modificado por: Andi Kleen ak@muc.de
+-.\" Traduzido para português por Arnaldo Carvalho de Melo <acme@conectiva.com.br>
++.\" Traduzido para português por Arnaldo Carvalho de Melo <acme@conectiva.com.br>
+ .\" Revisado por Jorge Luiz Godoy Filho <jorge@bestway.com.br>
+ .\"
+-.TH NETSTAT 8 "19 de maio de 1997" "net-tools" "Manual do Programador Linux"
++.TH NETSTAT 8 "2007-12-02" "net-tools" "Manual do Programador Linux"
+
+ .SH NOME
+-netstat \- Mostra conexões de rede, tabelas de roteamento, estatísticas de interface e conexões
++netstat \- Mostra conexões de rede, tabelas de roteamento, estatísticas de interface e conexões
+ mascaradas.
+ .SH SINOPSE
+
+@@ -63,90 +63,90 @@ mascaradas.
+ .RB { \-h | \-\-help }
+
+ .PP
+-.SH DESCRIÇÃO
++.SH DESCRIÇÃO
+ .B netstat
+-mostra informações do subsistema de rede do Linux.
++mostra informações do subsistema de rede do Linux.
+
+-.SS "(sem opções)"
+-Você pode ver o estado das conexões de rede através da listagem dos sockets
+-abertos. Esta é a operação padrão: se você não especificar nenhuma
+-família de endereços, os sockets ativos de todas as famílias de endereços
+-configuradas serão mostrados. Com
++.SS "(sem opções)"
++Você pode ver o estado das conexões de rede através da listagem dos sockets
++abertos. Esta é a operação padrão: se você não especificar nenhuma
++família de endereços, os sockets ativos de todas as famílias de endereços
++configuradas serão mostrados. Com
+ .B -e
+-você obterá informações adicionais (userid). Com a chave
++você obterá informações adicionais (userid). Com a chave
+ .B -v
+-você poderá fazer com que o netstat reclame sobre famílias de endereços
+-conhecidas que não sejam suportadas pelo kernel. A opção
++você poderá fazer com que o netstat reclame sobre famílias de endereços
++conhecidas que não sejam suportadas pelo kernel. A opção
+ .B -o
+-mostra algumas informações adicionais sobre temporizadores de rede.
++mostra algumas informações adicionais sobre temporizadores de rede.
+ .B -a
+-mostra todos os sockets, incluindo sockets de servidores. A família de
+-endereços
++mostra todos os sockets, incluindo sockets de servidores. A família de
++endereços
+ .B inet
+-mostrará sockets raw, udp e tcp.
++mostrará sockets raw, udp e tcp.
+
+ .SS "\-r, \-\-route"
+-Com a opção
++Com a opção
+ .BR \-r ", " \-\-route
+-você obterá as tabelas de roteamento do kernel no mesmo formato usado por
++você obterá as tabelas de roteamento do kernel no mesmo formato usado por
+ .BR "route -e" .
+ .B "netstat -er"
+-usará o formato de apresentação do comando
++usará o formato de apresentação do comando
+ .BR route .
+ Por favor veja
+ .BR route (8)
+ para maiores detalhes.
+
+-.SS "\-i, \-\-interface \fIiface\fI"
+-Se você usar a opção
++.SS "\-i, \-\-interfaces \fIiface\fI"
++Se você usar a opção
+ .BR -i ", " --interfaces
+ , uma tabela de todas (ou da
+ .IR iface
+-especificada) as interfaces de rede será mostrada. A saída usa o formato
++especificada) as interfaces de rede será mostrada. A saída usa o formato
+ .B "ifconfig -e"
+-, e é descrita em
++, e é descrita em
+ .BR ifconfig (8).
+ .B "netstat -ei"
+-mostrará uma tabela ou uma entrada de interface como
++mostrará uma tabela ou uma entrada de interface como
+ .B ifconfig
+ mostra. Com a chave
+ .B -a
+-, você pode incluir interfaces que não estejam configuradas (i.e. não tem
++, você pode incluir interfaces que não estejam configuradas (i.e. não tem
+ a flag
+ .BR U = UP
+ configurada).
+
+ .SS "\-M, \-\-masquerade"
+
+-Uma lista de todas as sessões mascaradas também pode ser vista. Com a chave
++Uma lista de todas as sessões mascaradas também pode ser vista. Com a chave
+ .B -e
+-você pode incluir mais algumas informações sobre numeração sequencial e deltas
+-, causados por reescritas de dados em sessões FTP (comando PORT).
+-O suporte a mascaramento é usado para esconder máquinas em endereços de
+-rede não oficiais do resto do mundo, como descrito em
+-.BR ipfw (4), ipfwadm "(8) e ipfw (8).
++você pode incluir mais algumas informações sobre numeração sequencial e deltas
++, causados por reescritas de dados em sessões FTP (comando PORT).
++O suporte a mascaramento é usado para esconder máquinas em endereços de
++rede não oficiais do resto do mundo, como descrito em
++.BR iptables (8).
+
+ .SS "\-s, \-\-statistics"
+
+-Mostra estatísticas sobre o subsistema de rede do kernel do Linux, que
+-são lidas a partir de
++Mostra estatísticas sobre o subsistema de rede do kernel do Linux, que
++são lidas a partir de
+ .IR /proc/net/snmp .
+
+ .PP
+-.SH OPÇÕES
++.SH OPÇÕES
+ .SS "\-v, \-\-verbose"
+-Informa ao usuário o que está ocorrendo, sendo detalhado. Especialmente
+-mostra algumas informações úteis sobre famílias de endereços não
++Informa ao usuário o que está ocorrendo, sendo detalhado. Especialmente
++mostra algumas informações úteis sobre famílias de endereços não
+ configuradas.
+
+ .SS "\-n, \-\-numeric"
+-Mostra endereços numéricos, sem tentar resolver os nomes da máquina, porta ou
+-usuário.
++Mostra endereços numéricos, sem tentar resolver os nomes da máquina, porta ou
++usuário.
+
+-.SS "\-A, \-\-af \fIfamília\fI"
+-Usa um método diferente para configurar as famílias de endereços.
+-.I família
+-é uma lista de palavras-chave de famílias de endereços separadas por vírgulas
++.SS "\-A, \-\-af \fIfamília\fI"
++Usa um método diferente para configurar as famílias de endereços.
++.I família
++é uma lista de palavras-chave de famílias de endereços separadas por vírgulas
+ (',') como
+ .BR inet ,
+ .BR unix ,
+@@ -155,7 +155,7 @@ Usa um m
+ .B netrom
+ e
+ .BR ddp .
+-Tem o mesmo efeito de usar as opções longas
++Tem o mesmo efeito de usar as opções longas
+ .BR \-\-inet ,
+ .BR \-\-unix ,
+ .BR \-\-ipx ,
+@@ -165,99 +165,99 @@ e
+ .BR \-\-ddp.
+
+ .SS "\-c, \-\-continuous"
+-Isto fará com que
++Isto fará com que
+ .B netstat
+-mostre a tabela selecionada a cada segundo, continuamente na tela até que
+-você o interrompa.
++mostre a tabela selecionada a cada segundo, continuamente na tela até que
++você o interrompa.
+
+ .PP
+-.SH SAÍDA
++.SH SAÃDA
+
+ .PP
+-.SS Conexões Internet Ativas \fR(TCP, UDP, RAW)\fR
++.SS Conexões Internet Ativas \fR(TCP, UDP, RAW)\fR
+
+ .SS "Proto"
+ O protocolo (tcp, udp, raw) usado pelo socket.
+
+ .SS "Recv-Q"
+-O contador de bytes não copiados pelo programa conectado a este socket.
++O contador de bytes não copiados pelo programa conectado a este socket.
+
+ .SS "Send-Q"
+-O contador de bytes não confirmados pela máquina remota.
++O contador de bytes não confirmados pela máquina remota.
+
+-.SS "Endereço Local"
+-O endereço local (nome da máquina local) e o numero da porta do socket. A menos
++.SS "Endereço Local"
++O endereço local (nome da máquina local) e o numero da porta do socket. A menos
+ que a chave
+ .B -n
+-seja especificada o endereço do socket será resolvido para seu nome de máquina
+-canônico e o número da porta será traduzido para o serviço correspondente.
++seja especificada o endereço do socket será resolvido para seu nome de máquina
++canônico e o número da porta será traduzido para o serviço correspondente.
+
+-.SS "Endereço Remoto"
+-O endereço remoto (nome da máquina remota) e o número da porta do socket. Como
+-com o endereço local, a chave
++.SS "Endereço Remoto"
++O endereço remoto (nome da máquina remota) e o número da porta do socket. Como
++com o endereço local, a chave
+ .B -n
+-desliga a resolução do nome da máquina e do serviço.
++desliga a resolução do nome da máquina e do serviço.
+
+ .SS "Estado"
+-O estado do socket. Uma vez que não existem estados no modo RAW e normalmente
+-nenhum estado é usado em UDP, esta linha pode ser deixada em branco. Normalmente
+-ele pode assumir um de vários valores:
++O estado do socket. Uma vez que não existem estados no modo RAW e normalmente
++nenhum estado é usado em UDP, esta linha pode ser deixada em branco. Normalmente
++ele pode assumir um de vários valores:
+ .TP
+ .I
+ ESTABELECIDO
+-O socket tem uma conexão estabelecida.
++O socket tem uma conexão estabelecida.
+ .TP
+ .I
+ SYN_SENT
+-O socket está ativamente tentando estabelecer uma conexão.
++O socket está ativamente tentando estabelecer uma conexão.
+ .TP
+ .I
+ SYN_RECV
+-Uma requisição de conexão foi recebida da rede.
++Uma requisição de conexão foi recebida da rede.
+ .TP
+ .I
+ FIN_WAIT1
+-O socket está fechado e a conexão está terminando.
++O socket está fechado e a conexão está terminando.
+ .TP
+ .I
+ FIN_WAIT2
+-A conexão está fechada e o socket está esperando por uma terminação pela
+-máquina remota.
++A conexão está fechada e o socket está esperando por uma terminação pela
++máquina remota.
+ .TP
+ .I
+ TIME_WAIT
+-O socket está esperando após o fechamento para tratar os pacotes ainda na rede.
++O socket está esperando após o fechamento para tratar os pacotes ainda na rede.
+ .TP
+ .I
+ FECHADO
+-O socket não está sendo usado.
++O socket não está sendo usado.
+ .TP
+ .I
+ CLOSE_WAIT
+ O lado remoto terminou, esperando pelo fechamento do socket.
+ .TP
+ .I
+-ÚLTIMO_ACK
+-O lado remoto terminou, e o socket está fechado. Esperando por uma
+-confirmação.
++ÚLTIMO_ACK
++O lado remoto terminou, e o socket está fechado. Esperando por uma
++confirmação.
+ .TP
+ .I
+ OUVINDO
+-O socket está ouvindo por conexões. Estes socket são somente mostrados se
++O socket está ouvindo por conexões. Estes socket são somente mostrados se
+ a chave
+ .BR -a , --listening
+ for especificada.
+ .TP
+ .I
+ FECHANDO
+-Ambos os sockets estão terminados mas nós ainda não enviamos todos os nossos
++Ambos os sockets estão terminados mas nós ainda não enviamos todos os nossos
+ dados.
+ .TP
+ .I
+ DESCONHECIDO
+-O estado do socket é desconhecido.
++O estado do socket é desconhecido.
+
+-.SS "Usuário"
++.SS "Usuário"
+ O nome ou UID do dono do socket.
+
+ .SS "Temporizador"
+@@ -272,198 +272,195 @@ O nome ou UID do dono do socket.
+ O protocolo (normalmente unix) usado pelo socket.
+
+ .SS "CntRef"
+-O contador de referências (i.e. processos conectados via este socket).
++O contador de referências (i.e. processos conectados via este socket).
+
+ .SS "Flags"
+-As flags mostradas são SO_ACCEPTON (mostrada como
++As flags mostradas são SO_ACCEPTON (mostrada como
+ .BR ACC ),
+ SO_WAITDATA
+ .RB ( W )
+ ou SO_NOSPACE
+ .RB ( N ).
+ SO_ACCECPTON
+-é usada para sockets não-conectados se seus processos correspondentes
+-estiverem esperando por uma solicitação de conexão. As demais flags não
+-são de interesse comum.
++é usada para sockets não-conectados se seus processos correspondentes
++estiverem esperando por uma solicitação de conexão. As demais flags não
++são de interesse comum.
+
+ .SS "Tipos"
+-Há diversos tipos de acesso a sockets:
++Há diversos tipos de acesso a sockets:
+ .TP
+ .I
+ SOCK_DGRAM
+-O socket é usado no modo de Datagramas (sem conexão).
++O socket é usado no modo de Datagramas (sem conexão).
+ .TP
+ .I
+ SOCK_STREAM
+-É um socket usado quando há conexões (stream socket).
++É um socket usado quando há conexões (stream socket).
+ .TP
+ .I
+ SOCK_RAW
+-É usado como o socket básico (raw socket).
++É usado como o socket básico (raw socket).
+ .TP
+ .I
+ SOCK_RDM
+-Este é usado para confirmação de entrega de mensagens.
++Este é usado para confirmação de entrega de mensagens.
+ .TP
+ .I
+ SOCK_SEQPACKET
+-É um socket para um pacote sequencial.
++É um socket para um pacote sequencial.
+ .TP
+ .I
+ SOCK_PACKET
+-Socket para acesso da interface BÁSICA.
++Socket para acesso da interface BÃSICA.
+ .TP
+ .I
+ UNKNOWN
+-Quem sabe o que nos trará o futuro? Preencha aqui :-)
++Quem sabe o que nos trará o futuro? Preencha aqui :-)
+
+ .PP
+ .SS "Estados"
+-Este campo conterá uma das seguintes palavras-chave:
++Este campo conterá uma das seguintes palavras-chave:
+ .TP
+ .I
+ FREE
+-Este socket não está alocado.
++Este socket não está alocado.
+ .TP
+ .I
+ LISTENING
+-O socket está aguardando por uma solicitação de conexão. São mostrados
+-apenas se as opções
++O socket está aguardando por uma solicitação de conexão. São mostrados
++apenas se as opções
+ .BR -a , --listening
+ forem selecionadas.
+ .TP
+ .I
+ CONNECTING
+-O socket está por estabelecer uma conexão.
++O socket está por estabelecer uma conexão.
+ .TP
+ .I
+ CONNECTED
+-O socket está conectado.
++O socket está conectado.
+ .TP
+ .I
+ DISCONNECTING
+-O socket está desconectado.
++O socket está desconectado.
+ .TP
+ .I
+ (nada)
+-O socket não está conectado a nenhum outro.
++O socket não está conectado a nenhum outro.
+ .TP
+ .I
+ UNKNOWN
+-Isto não deve acontecer nunca.
++Isto não deve acontecer nunca.
+
+ .SS "Path"
+-Mostra o caminho (path) do processo do qual está tratando esse socket.
++Mostra o caminho (path) do processo do qual está tratando esse socket.
+
+ .PP
+ .SS Sockets IPX ativos
+
+-(Isso precisa ser feito por alguém que saiba fazê-lo.)
++(Isso precisa ser feito por alguém que saiba fazê-lo.)
+
+ .PP
+ .SS Sockets NET/ROM ativos
+
+-(Isso precisa ser feito por alguém que saiba fazê-lo.)
++(Isso precisa ser feito por alguém que saiba fazê-lo.)
+
+ .PP
+ .SS Sockets AX.25 ativos
+
+-(Isso precisa ser feito por alguém que saiba fazê-lo.)
++(Isso precisa ser feito por alguém que saiba fazê-lo.)
+
+ .PP
+ .SH NOTAS
+-Desde o kernel 2.2 o netstat -i não mostra estatísticas para apelidos (aliases)
+-de interfaces. Para obter contadores por apelido de interface você precisa
+-configurar regras explícitas usando o comando
+-+.BR ipchains(8)
++Desde o kernel 2.2 o netstat -i não mostra estatísticas para apelidos (aliases)
++de interfaces. Para obter contadores por apelido de interface você precisa
++configurar regras explícitas usando o comando
+++.BR iptables(8)
+ .
+ .SH FILES
+ .ta
+ .I /etc/services
+--- O arquivo de "tradução" (correspondência) entre socket e serviço.
++-- O arquivo de "tradução" (correspondência) entre socket e serviço.
+
+ .I /proc/net/dev
+--- Informações de dispositivos.
++-- Informações de dispositivos.
+
+ .I /proc/net/snmp
+--- Estatísticas da rede.
++-- Estatísticas da rede.
+
+ .I /proc/net/raw
+--- Informação sobre o socket BÁSICO (RAW).
++-- Informação sobre o socket BÃSICO (RAW).
+
+ .I /proc/net/tcp
+--- Informação sobre o socket TCP.
++-- Informação sobre o socket TCP.
+
+ .I /proc/net/udp
+--- Informação sobre o socket UDP.
++-- Informação sobre o socket UDP.
+
+ .I /proc/net/unix
+--- Informação sobre o socket de domínio Unix.
++-- Informação sobre o socket de domínio Unix.
+
+ .I /proc/net/ipx
+--- Informação sobre o socket IPX.
++-- Informação sobre o socket IPX.
+
+ .I /proc/net/ax25
+--- Informação sobre o socket AX25.
++-- Informação sobre o socket AX25.
+
+ .I /proc/net/appletalk
+--- Informação sobre o socket DDP (Appletalk).
++-- Informação sobre o socket DDP (Appletalk).
+
+ .I /proc/net/nr
+--- Informação sobre o socket NET/ROM.
++-- Informação sobre o socket NET/ROM.
+
+ .I /proc/net/route
+--- Informação sobre os roteamentos IP realizados pelo kernel
++-- Informação sobre os roteamentos IP realizados pelo kernel
+
+ .I /proc/net/ax25_route
+--- Informação sobre os roteamentos AX25 realizados pelo kernel
++-- Informação sobre os roteamentos AX25 realizados pelo kernel
+
+ .I /proc/net/ipx_route
+--- Informação sobre os roteamentos IPX realizados pelo kernel
++-- Informação sobre os roteamentos IPX realizados pelo kernel
+
+ .I /proc/net/nr_nodes
+--- Lista de nós NET/ROM do kernel
++-- Lista de nós NET/ROM do kernel
+
+ .I /proc/net/nr_neigh
+ -- "Vizinhos" NET/ROM do kernel
+
+ .I /proc/net/ip_masquerade
+--- Conexões mascaradas do kernel
++-- Conexões mascaradas do kernel
+
+ .fi
+
+ .PP
+-.SH VEJA TAMBÉM
++.SH VEJA TAMBÉM
+ .BR route (8),
+ .BR ifconfig (8),
+-.BR ipfw (4),
+-.BR ipfw (8),
+-.BR ipfwadm (8)
+-.BR ipchains (8)
++.BR iptables (8)
+
+ .PP
+ .SH BUGS
+-Ocasionalmente informações estranhas podem surgir se um socket mudar
+-enquanto é visualizado. Isso é incomum.
++Ocasionalmente informações estranhas podem surgir se um socket mudar
++enquanto é visualizado. Isso é incomum.
+ .br
+-As opções descritas para
++As opções descritas para
+ .B netstat -i
+-foram descritas como deverão funcionar após alguma limpeza da liberação
++foram descritas como deverão funcionar após alguma limpeza da liberação
+ BETA do pacote net-tools.
+
+ .PP
+ .SH AUTORES
+-A interface com o usuário foi escrita por Fred Baumgarten
+-<dc6iq@insu1.etec.uni-karlsruhe.de> a página do manual basicamente
++A interface com o usuário foi escrita por Fred Baumgarten
++<dc6iq@insu1.etec.uni-karlsruhe.de> a página do manual basicamente
+ por Matt Welsh <mdw@tc.cornell.edu>. Foi atualizada por
+ Alan Cox <Alan.Cox@linux.org> mas poderia ter sido feita com um pouco
+ mais de trabalho.
+ .BR
+ .LP
+-A página do manual e os comandos incluídos no pacote net-tools
++A página do manual e os comandos incluídos no pacote net-tools
+ foram totalmente reescritos desde Bernd Eckenfels
+ <ecki@linux.de>.
+ .BR
+-.SH TRADUÇÃO E REVISÃO PARA PORTUGUÊS
+-Traduzido para o português por Arnaldo Carvalho de Melo
++.SH TRADUÇÃO E REVISÃO PARA PORTUGUÊS
++Traduzido para o português por Arnaldo Carvalho de Melo
+ <acme@conectiva.com.br> e Jorge Luiz Godoy Filho <jorge@bestway.com.br>.
+diff --git a/man/pt_BR/rarp.8 b/man/pt_BR/rarp.8
+index de31931..b19f1b7 100644
+--- a/man/pt_BR/rarp.8
++++ b/man/pt_BR/rarp.8
+@@ -2,30 +2,30 @@
+ .SH NOME
+ rarp \- manipula a tabela RARP do sistema
+ .SH SINOPSE
+-.B "rarp [-v] [-t tipo] -a [máquina]"
++.B "rarp [-v] [-t tipo] -a [máquina]"
+ .br
+-.B "rarp [-v] -d máquina ..."
++.B "rarp [-v] -d máquina ..."
+ .br
+-.B "rarp [-v] [-t tipo] -s máquina endereço_hardware"
+-.SH DESCRIÇÃO
++.B "rarp [-v] [-t tipo] -s máquina endereço_hardware"
++.SH DESCRIÇÃO
+ .B Rarp
+-manipula as tabelas RARP do kernel de varias formas. As opções principais
+-são limpar uma entrada de mapeamento de endereços e manualmente configurar uma.
+-Para propósitos de depuração, o programa
++manipula as tabelas RARP do kernel de varias formas. As opções principais
++são limpar uma entrada de mapeamento de endereços e manualmente configurar uma.
++Para propósitos de depuração, o programa
+ .B rarp
+-também permite um dump completo da tabela RARP.
+-.SH OPÇÕES
++também permite um dump completo da tabela RARP.
++.SH OPÇÕES
+ .TP
+ .B \-v
+-Informe o usuário o que esta acontecendo, sendo detalhado.
++Informe o usuário o que esta acontecendo, sendo detalhado.
+ .TP
+ .B "\-t tipo"
+-quando configurando ou lendo a tabela RARP, este parâmetro opcional informa ao
++quando configurando ou lendo a tabela RARP, este parâmetro opcional informa ao
+ .B rarp
+-que classe de entradas devem ser verificadas. O valor default para este parâmetro
+-é
++que classe de entradas devem ser verificadas. O valor default para este parâmetro
++é
+ .B ether
+-(i.e. código de hardware
++(i.e. código de hardware
+ .B 0x01
+ para
+ .B "IEEE 802.3 10Mbps Ethernet".
+@@ -34,31 +34,31 @@ Outros valores podem incluir tecnologias de rede como
+ e
+ .B NET/ROM (netrom).
+ .TP
+-.B "\-a [máquina]"
+-Mostra as entradas dos máquinas especificadas. Se o
+-Mostra as entradas das máquinas especificadas. Se o parâmetro
+-.B máquina
+-não for usado
++.B "\-a [máquina]"
++Mostra as entradas dos máquinas especificadas. Se o
++Mostra as entradas das máquinas especificadas. Se o parâmetro
++.B máquina
++não for usado
+ .B todas
+-as entradas serão mostradas.
++as entradas serão mostradas.
+ .TP
+-.B "\-d máquina"
+-Remove a(s) entrada(s) para a máquina especificada. Isto pode ser usado se a
+-máquina indicada for desligada, por exemplo.
++.B "\-d máquina"
++Remove a(s) entrada(s) para a máquina especificada. Isto pode ser usado se a
++máquina indicada for desligada, por exemplo.
+ .TP
+-.B "\-s máquina endereço_hardware"
+-Cria um mapeamento de endereços RARP para a máquina
+-.B máquina
+-com endereço de hardware configurado para
+-.B endereço_hardware
+-. O formato do endereço de hardware depende da classe do hardware, mas
+-para a maioria das classes você pode assumir que a apresentação usual pode
+-ser usada. Para a classe Ethernet, são 6 bytes em hexadecimal, separados
++.B "\-s máquina endereço_hardware"
++Cria um mapeamento de endereços RARP para a máquina
++.B máquina
++com endereço de hardware configurado para
++.B endereço_hardware.
++O formato do endereço de hardware depende da classe do hardware, mas
++para a maioria das classes você pode assumir que a apresentação usual pode
++ser usada. Para a classe Ethernet, são 6 bytes em hexadecimal, separados
+ por dois pontos (:).
+-.SH ATENÇÃO
+-Alguns arquivos (principalmente Suns velhas) assumem que a máquina respondendo
+-ao query ARP também podem oferecer outros serviços de boot remoto. Portanto
+-nunca adiciona gratuitamente entradas rarp a menos que deseje encontrar a fúria
++.SH ATENÇÃO
++Alguns arquivos (principalmente Suns velhas) assumem que a máquina respondendo
++ao query ARP também podem oferecer outros serviços de boot remoto. Portanto
++nunca adiciona gratuitamente entradas rarp a menos que deseje encontrar a fúria
+ do administrador da rede.
+ .SH ARQUIVOS
+ .I /proc/net/rarp,
+@@ -66,5 +66,5 @@ do administrador da rede.
+ Ross D. Martin, <martin@trcsun3.eas.asu.edu>
+ .br
+ Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org>
+-.SH TRADUÇÃO
++.SH TRADUÇÃO
+ Arnaldo Carvalho de Melo <acme@conectiva.com.br> - 13/04/1998
+diff --git a/man/pt_BR/route.8 b/man/pt_BR/route.8
+index c440974..eb152e2 100644
+--- a/man/pt_BR/route.8
++++ b/man/pt_BR/route.8
+@@ -50,44 +50,44 @@ If]
+ .RB [ \--help ]
+ .SH DESCRICAO
+ .B Route
+-manipula a tabela de roteamento IP do kernel. Seu principal uso é
+-configurar rotas estáticas para hosts ou redes especificadas através de
+-uma interface, após a mesma ter sido configurada com o programa
++manipula a tabela de roteamento IP do kernel. Seu principal uso é
++configurar rotas estáticas para hosts ou redes especificadas através de
++uma interface, após a mesma ter sido configurada com o programa
+ .BR ifconfig (8)
+ .
+
+-.SH OPÇÕES
++.SH OPÇÕES
+ .TP
+ .B \-v
+-flag para detalhamento (não usada).
++flag para detalhamento (não usada).
+
+ .TP
+ .B \-n
+-mostra endereços numéricos, sem tentar resolver o nomes simbólicos das
+-máquinas. Útil se você esta tentando determinar por que a rota para o seu
++mostra endereços numéricos, sem tentar resolver o nomes simbólicos das
++máquinas. Útil se você esta tentando determinar por que a rota para o seu
+ servidor de nomes sumiu.
+
+ .TP
+ .B \-e
+ use o formato
+ .BR netstat (8)
+-na apresentação da tabela de roteamento.
++na apresentação da tabela de roteamento.
+ .B \-ee
+-produzira uma linha bem grande com todos os parâmetros da tabela de roteamento.
++produzira uma linha bem grande com todos os parâmetros da tabela de roteamento.
+
+ .TP
+ .B \-net
+ o
+ .B Alvo
+-é o endereço de uma rede (encontrado no arquivo
++é o endereço de uma rede (encontrado no arquivo
+ .I /etc/networks
+-pela função
++pela função
+ .BR getnetbyname (2)
+ ).
+
+ .TP
+ .B -host
+-é o endereço de uma máquina (descoberto com a função
++é o endereço de uma máquina (descoberto com a função
+ .BR gethostbyname (2)
+ ).
+
+@@ -110,150 +110,150 @@ adiciona uma rota.
+
+ .TP
+ .B Alvo
+-A máquina ou rede destino. Você pode fornecer endereços IP em formato
+-decimal separado por pontos ou nomes de máquinas/redes.
++A máquina ou rede destino. Você pode fornecer endereços IP em formato
++decimal separado por pontos ou nomes de máquinas/redes.
+
+ .TP
+ .B netmask Nm
+ modificador para especificar a mascara de rede da rota a ser adicionada.
+-Somente faz sentido para uma rota para uma rede e quanto o endereço
++Somente faz sentido para uma rota para uma rede e quanto o endereço
+ .B Alvo
+-é valido com relação a mascara especificada. Se nenhuma mascara de rede
++é valido com relação a mascara especificada. Se nenhuma mascara de rede
+ for especificada, o comando
+ .B route
+-descobre-a, desta forma, para a maioria das configurações normais você não
++descobre-a, desta forma, para a maioria das configurações normais você não
+ precisa especificar uma mascara de rede.
+
+ .TP
+ .B gw Gw
+-Quaisquer pacotes IP para a rede/máquina destino serão roteadas através
++Quaisquer pacotes IP para a rede/máquina destino serão roteadas através
+ do gateway/roteador especificado.
+ .B NOTA:
+-O gateway especificado deve ser alcançável antes deste comando. Isto
+-normalmente significa que você terá que configurar uma rota estática para
+-o gateway antes de emitir este comando. Se você especificar o endereço
+-de uma de suas interfaces locais, isto será usado para decidir sobre
+-qual interface deve ser usada para rotear os pacotes. Isto esta disponível
++O gateway especificado deve ser alcançável antes deste comando. Isto
++normalmente significa que você terá que configurar uma rota estática para
++o gateway antes de emitir este comando. Se você especificar o endereço
++de uma de suas interfaces locais, isto será usado para decidir sobre
++qual interface deve ser usada para rotear os pacotes. Isto esta disponível
+ para manter compatibilidade com os sistemas baseados em BSD.
+
+ .TP
+ .B metric M
+-Configura o campo de métrica na tabela de roteamento, usado em daemons
+-para roteamento dinâmico.
++Configura o campo de métrica na tabela de roteamento, usado em daemons
++para roteamento dinâmico.
+
+ .TP
+ .B mss M
+-Especifica o Tamanho Máximo do Segmento TCP em Bytes (MSS) para conexões
+-TCP através desta rota. Isto é normalmente usado somente para otimização
+-fina de configurações de roteamento.
++Especifica o Tamanho Máximo do Segmento TCP em Bytes (MSS) para conexões
++TCP através desta rota. Isto é normalmente usado somente para otimização
++fina de configurações de roteamento.
+
+ .TP
+ .B window W
+-Especifica o tamanho da janela TCP para conexões TCP através desta rota.
++Especifica o tamanho da janela TCP para conexões TCP através desta rota.
+ Tipicamente somente usado para redes AX.25 e em drivers incapazes de
+ de tratar frames back to back.
+
+ .TP
+ .B irtt I
+-Especifica o tempo de ida e volta inicial (irtt) para conexões TCP através
+-desta rota. Tipicamente usado somente em redes AX.25. O numero é especificado
+-em milisegundos (1-12000). Se omitido o default da RFC 1122 de 300ms é usado.
++Especifica o tempo de ida e volta inicial (irtt) para conexões TCP através
++desta rota. Tipicamente usado somente em redes AX.25. O numero é especificado
++em milisegundos (1-12000). Se omitido o default da RFC 1122 de 300ms é usado.
+
+ .TP
+ .B reject
+-Instala uma rota de bloqueio, que forçará falha na procura por esta rota.
+-Exemplo de utilização: bloquear rotas antes do uso da rota default.
+-Isto não é firewalling.
++Instala uma rota de bloqueio, que forçará falha na procura por esta rota.
++Exemplo de utilização: bloquear rotas antes do uso da rota default.
++Isto não é firewalling.
+
+ .TP
+ .B mod, dyn, reinstate
+-Instala uma rota modificada ou dinâmica. Ambas as flags são geralmente somente
+-configuradas por um daemon de roteamento. Somente para propósitos de diagnostico.
++Instala uma rota modificada ou dinâmica. Ambas as flags são geralmente somente
++configuradas por um daemon de roteamento. Somente para propósitos de diagnostico.
+
+ .TP
+ .B dev If
+-Força a associação da rota com o dispositivo especificado, pois o kernel
+-de outra forma tentara determinar o dispositivo por conta própria
+-(através da checagem de rotas e especificações de dispositivos já existentes
++Força a associação da rota com o dispositivo especificado, pois o kernel
++de outra forma tentara determinar o dispositivo por conta própria
++(através da checagem de rotas e especificações de dispositivos já existentes
+ e onde a rota esta adicionada).
+
+ If
+ .B dev If
+-é a última opção na linha de comando, a palavra
++é a última opção na linha de comando, a palavra
+ .B dev
+-pode ser omitida, pois é o default. De outra forma a ordem dos outros
+-modificadores do route (metric - netmask - gw - dev) não importa.
++pode ser omitida, pois é o default. De outra forma a ordem dos outros
++modificadores do route (metric - netmask - gw - dev) não importa.
+
+ .SH EXEMPLOS
+ .TP
+ .B route add -net 127.0.0.0
+ Adiciona a entrada para a interface loopback normal, usando mascara igual
+-a 255.0.0.0 (rede classe A, determinada a partir do endereço de destino),
++a 255.0.0.0 (rede classe A, determinada a partir do endereço de destino),
+ associada ao dispositivo "lo" (assumindo que este dispositivo tenha sido
+ previamente configurado com o
+ .BR ifconfig (8)).
+
+ .TP
+ .B route add -net 192.56.76.0 netmask 255.255.255.0 dev eth0
+-Adiciona uma rota para a rede 192.56.76.x através da interface "eth0". O
+-modificador de mascara classe C não é realmente necessário aqui por que
+-192.* é um endereço IP de classe C. A palavra "dev" pode ser omitida aqui.
++Adiciona uma rota para a rede 192.56.76.x através da interface "eth0". O
++modificador de mascara classe C não é realmente necessário aqui por que
++192.* é um endereço IP de classe C. A palavra "dev" pode ser omitida aqui.
+
+ .TP
+ .B route add default gw mango-gw
+-Adiciona uma rota default (que será usada se nenhuma outra rota for encontrada).
+-Todos os pacotes que usarem esta rota serão passados para a máquina "mango-gw".
+-O dispositivo que será utilizado para esta rota depende de como é possível
+-alcançar "mango-gw" - a rota estática para "mango-gw" terá que ser configurada
++Adiciona uma rota default (que será usada se nenhuma outra rota for encontrada).
++Todos os pacotes que usarem esta rota serão passados para a máquina "mango-gw".
++O dispositivo que será utilizado para esta rota depende de como é possível
++alcançar "mango-gw" - a rota estática para "mango-gw" terá que ser configurada
+ previamente.
+
+ .TP
+ .B route add ipx4 sl0
+-Adiciona uma rota para a máquina "ipx4" através da interface SLIP (assumindo
+-que "ipx4" é a máquina SLIP).
++Adiciona uma rota para a máquina "ipx4" através da interface SLIP (assumindo
++que "ipx4" é a máquina SLIP).
+
+ .TP
+ .B route add -net 192.57.66.0 netmask 255.255.255.0 gw ipx4
+-Este comando adiciona a rede "192.57.66.x" para ser alcançada através da
+-rota anterior através da interface SLIP.
++Este comando adiciona a rede "192.57.66.x" para ser alcançada através da
++rota anterior através da interface SLIP.
+
+ .TP
+ .B route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0
+-Isto é bem obscura, documentada para que as pessoas saibam como usá-la.
+-Configura para que todas as rotas IP classe D (multicast) vão através da
+-interface "eth0". Esta é a linha de configuração normal a ser usada com
++Isto é bem obscura, documentada para que as pessoas saibam como usá-la.
++Configura para que todas as rotas IP classe D (multicast) vão através da
++interface "eth0". Esta é a linha de configuração normal a ser usada com
+ um kernel multicast.
+
+ .TP
+ .B route add 10.0.0.0 netmask 255.0.0.0 reject
+-Esta instala uma rota de rejeição para a rede privada "10.x.x.x"
++Esta instala uma rota de rejeição para a rede privada "10.x.x.x"
+
+ .LP
+-.SH SAÍDA
+-A saída da tabela de roteamento do kernel é organizada nas seguintes colunas
++.SH SAÃDA
++A saída da tabela de roteamento do kernel é organizada nas seguintes colunas
+ .TP
+ .B Destino
+-A rede ou máquina de destino.
++A rede ou máquina de destino.
+ .TP
+ .B Roteador
+-A máquina roteador ou '*' se nenhuma estiver configurada.
++A máquina roteador ou '*' se nenhuma estiver configurada.
+ .TP
+-.B Mascara Genérica
+-A mascara para a rede destino. '255.255.255.255' para uma máquina de destino,
+-'0.0.0.0' para a rota
++.B Mascara Genérica
++A mascara para a rede destino. '255.255.255.255' para uma máquina de
++destino, '0.0.0.0' para a rota
+ .B default
+ .
+ .TP
+ .B Flags
+-Os flags possíveis são
++Os flags possíveis são
+ .br
+ .B U
+ (rota esta
+ .BR Up )
+ .br
+ .B H
+-(alvo é uma
+-.BR máquina )
++(alvo é uma
++.BR máquina )
+ .br
+ .B G
+ (use
+@@ -261,7 +261,7 @@ Os flags poss
+ .br
+ .B R
+ .RB ( reinstate
+-rota para roteamento dinâmico)
++rota para roteamento dinâmico)
+ .br
+ .B D
+ Instalada
+@@ -278,29 +278,29 @@ Rota
+ )
+ .TP
+ .B Metric
+-A 'distância' até o alvo (geralmente contada em hops). Não é utilizada pelos
++A 'distância' até o alvo (geralmente contada em hops). Não é utilizada pelos
+ kernels recentes, somente daemons de roteamento podem usa-la.
+ .TP
+ .B Ref
+-Numero de referências a esta rota. Não usado no kernel do Linux, sempre 0.
++Numero de referências a esta rota. Não usado no kernel do Linux, sempre 0.
+ .TP
+ .B Uso
+-Contagem de procuras por esta rota. Nos kernels recentes estes números são
+-bem baixos, pois os sockets tem seu próprio cache e não precisam procurar
++Contagem de procuras por esta rota. Nos kernels recentes estes números são
++bem baixos, pois os sockets tem seu próprio cache e não precisam procurar
+ por rotas.
+ .TP
+ .B Iface
+-Interface através da qual os pacotes IP serão enviados.
++Interface através da qual os pacotes IP serão enviados.
+ .TP
+ .B MSS
+-Tamanho máximo de segmento default para conexões TCP através desta rota.
++Tamanho máximo de segmento default para conexões TCP através desta rota.
+ .TP
+ .B Window
+-Tamanho de janela default para conexões TCP através desta rota.
++Tamanho de janela default para conexões TCP através desta rota.
+ .TP
+ .B irtt
+ RTT (Tempo de Ida e Volta) Inicial. O kernel usa isto para inferir os melhores
+-parâmetros do protocolo TCP sem esperar por respostas (possivelmente lentas).
++parâmetros do protocolo TCP sem esperar por respostas (possivelmente lentas).
+ .LP
+ .SH ARQUIVOS
+ .I /proc/net/route
+@@ -311,17 +311,17 @@ par
+ .br
+ .I /etc/init.d/network
+ .LP
+-.SH VEJA TAMBÉM
++.SH VEJA TAMBÉM
+ .I ifconfig(8), netstat(8), arp(8)
+ .LP
+-.SH HISTÓRICO
++.SH HISTÓRICO
+ .B Route
+ para o linux foi originalmente escrito por Fred N. van Kempen,
+ <waltje@uwalt.nl.mugnet.org> e depois modificado por Johannes Stille e
+-Linus Torvalds para a versão pl15. Alan Cox adicionou as opções para
++Linus Torvalds para a versão pl15. Alan Cox adicionou as opções para
+ mss e window no kernel 1.1.22. O suporte a irtt (compartilhado com o
+ netstat) foi feito por Bernd Eckenfels.
+-.SH TRADUÇÃO
++.SH TRADUÇÃO
+ Arnaldo Carvalho de Melo <acme@conectiva.com.br> - 13/04/1998
+ .SH BUGS
+ nenhum :)
+diff --git a/mii-tool.c b/mii-tool.c
+index ef2d48a..1cfecc2 100644
+--- a/mii-tool.c
++++ b/mii-tool.c
+@@ -29,8 +29,6 @@
+ http://www.national.com/pf/DP/DP83840.html
+ */
+
+-static char version[] =
+-"mii-tool.c 1.9 2000/04/28 00:56:08 (David Hinds)\n";
+
+ #include <unistd.h>
+ #include <stdlib.h>
+@@ -46,16 +44,25 @@ static char version[] =
+ #include <sys/socket.h>
+ #include <sys/ioctl.h>
+ #include <net/if.h>
++#include <linux/sockios.h>
++
+ #ifndef __GLIBC__
+ #include <linux/if_arp.h>
+ #include <linux/if_ether.h>
+ #endif
+-#include "mii.h"
++#include <linux/mii.h>
++#include <linux/sockios.h>
++#include "version.h"
++#include "net-support.h"
++#include "util.h"
++
++static char *Release = RELEASE, *Signature = "David Hinds based on Donald Becker's mii-diag";
+
+ #define MAX_ETH 8 /* Maximum # of interfaces */
++#define LPA_ABILITY_MASK 0x07e0
+
+ /* Table of known MII's */
+-static struct {
++static const struct {
+ u_short id1, id2;
+ char *name;
+ } mii_id[] = {
+@@ -64,16 +71,25 @@ static struct {
+ { 0x0000, 0x6b90, "AMD 79C901A HomePNA" },
+ { 0x0000, 0x6b70, "AMD 79C901A 10baseT" },
+ { 0x0181, 0xb800, "Davicom DM9101" },
+- { 0x0043, 0x7411, "Enable EL40-331" },
++ { 0x0043, 0x7410, "Enable EL40-331" },
++ { 0x0243, 0x0c50, "ICPlus IP101A" },
+ { 0x0015, 0xf410, "ICS 1889" },
+ { 0x0015, 0xf420, "ICS 1890" },
+ { 0x0015, 0xf430, "ICS 1892" },
+ { 0x02a8, 0x0150, "Intel 82555" },
+ { 0x7810, 0x0000, "Level One LXT970/971" },
++ { 0x0022, 0x1510, "Micrel KSZ8041" },
++ { 0x0022, 0x1610, "Micrel KSZ9021" },
+ { 0x2000, 0x5c00, "National DP83840A" },
++ { 0x2000, 0x5c70, "National DP83865" },
+ { 0x0181, 0x4410, "Quality QS6612" },
+ { 0x0282, 0x1c50, "SMSC 83C180" },
++ { 0x0203, 0x8460, "STMicroelectronics ST802RT" },
++ { 0x1c04, 0x0010, "STMicroelectronics STE100P" },
+ { 0x0300, 0xe540, "TDK 78Q2120" },
++ { 0x0141, 0x0c20, "Yukon 88E1011" },
++ { 0x0141, 0x0cc0, "Yukon-EC 88E1111" },
++ { 0x0141, 0x0c90, "Yukon-2 88E1112" },
+ };
+ #define NMII (sizeof(mii_id)/sizeof(mii_id[0]))
+
+@@ -81,10 +97,10 @@ static struct {
+
+ struct option longopts[] = {
+ /* { name has_arg *flag val } */
+- {"advertise", 1, 0, 'A'}, /* Change capabilities advertised. */
+- {"force", 1, 0, 'F'}, /* Change capabilities advertised. */
++ {"advertise", 1, 0, 'A'}, /* Advertise only specified media. */
++ {"force", 1, 0, 'F'}, /* Force specified media technology. */
+ {"phy", 1, 0, 'p'}, /* Set PHY (MII address) to report. */
+- {"log", 0, 0, 'l'}, /* Set PHY (MII address) to report. */
++ {"log", 0, 0, 'l'}, /* With --watch, write events to syslog. */
+ {"restart", 0, 0, 'r'}, /* Restart link negotiation */
+ {"reset", 0, 0, 'R'}, /* Reset the transceiver. */
+ {"verbose", 0, 0, 'v'}, /* Report each action taken. */
+@@ -112,7 +128,7 @@ static struct ifreq ifr;
+
+ static int mdio_read(int skfd, int location)
+ {
+- struct mii_data *mii = (struct mii_data *)&ifr.ifr_data;
++ struct mii_ioctl_data *mii = (struct mii_ioctl_data *)&ifr.ifr_data;
+ mii->reg_num = location;
+ if (ioctl(skfd, SIOCGMIIREG, &ifr) < 0) {
+ fprintf(stderr, "SIOCGMIIREG on %s failed: %s\n", ifr.ifr_name,
+@@ -124,7 +140,7 @@ static int mdio_read(int skfd, int location)
+
+ static void mdio_write(int skfd, int location, int value)
+ {
+- struct mii_data *mii = (struct mii_data *)&ifr.ifr_data;
++ struct mii_ioctl_data *mii = (struct mii_ioctl_data *)&ifr.ifr_data;
+ mii->reg_num = location;
+ mii->val_in = value;
+ if (ioctl(skfd, SIOCSMIIREG, &ifr) < 0) {
+@@ -137,40 +153,48 @@ static void mdio_write(int skfd, int location, int value)
+
+ const struct {
+ char *name;
+- u_short value;
++ u_short value[2];
+ } media[] = {
+ /* The order through 100baseT4 matches bits in the BMSR */
+- { "10baseT-HD", MII_AN_10BASET_HD },
+- { "10baseT-FD", MII_AN_10BASET_FD },
+- { "100baseTx-HD", MII_AN_100BASETX_HD },
+- { "100baseTx-FD", MII_AN_100BASETX_FD },
+- { "100baseT4", MII_AN_100BASET4 },
+- { "100baseTx", MII_AN_100BASETX_FD | MII_AN_100BASETX_HD },
+- { "10baseT", MII_AN_10BASET_FD | MII_AN_10BASET_HD },
++ { "10baseT-HD", {LPA_10HALF} },
++ { "10baseT-FD", {LPA_10FULL} },
++ { "100baseTx-HD", {LPA_100HALF} },
++ { "100baseTx-FD", {LPA_100FULL} },
++ { "100baseT4", {LPA_100BASE4} },
++ { "100baseTx", {LPA_100FULL | LPA_100HALF} },
++ { "10baseT", {LPA_10FULL | LPA_10HALF} },
++
++ { "1000baseT-HD", {0, ADVERTISE_1000HALF} },
++ { "1000baseT-FD", {0, ADVERTISE_1000FULL} },
++ { "1000baseT", {0, ADVERTISE_1000HALF|ADVERTISE_1000FULL} },
+ };
+ #define NMEDIA (sizeof(media)/sizeof(media[0]))
+-
++
+ /* Parse an argument list of media types */
+-static int parse_media(char *arg)
++static int parse_media(char *arg, unsigned *bmcr2)
+ {
+ int mask, i;
+ char *s;
+ mask = strtoul(arg, &s, 16);
+ if ((*arg != '\0') && (*s == '\0')) {
+- if ((mask & MII_AN_ABILITY_MASK) &&
+- !(mask & ~MII_AN_ABILITY_MASK))
+- return mask;
++ if ((mask & LPA_ABILITY_MASK) &&
++ !(mask & ~LPA_ABILITY_MASK)) {
++ *bmcr2 = 0;
++ return mask;
++ }
+ goto failed;
+- } else {
+- mask = 0;
+- s = strtok(arg, ", ");
+- do {
++ }
++ mask = 0;
++ *bmcr2 = 0;
++ s = strtok(arg, ", ");
++ do {
+ for (i = 0; i < NMEDIA; i++)
+- if (strcasecmp(media[i].name, s) == 0) break;
++ if (s && strcasecmp(media[i].name, s) == 0) break;
+ if (i == NMEDIA) goto failed;
+- mask |= media[i].value;
+- } while ((s = strtok(NULL, ", ")) != NULL);
+- }
++ mask |= media[i].value[0];
++ *bmcr2 |= media[i].value[1];
++ } while ((s = strtok(NULL, ", ")) != NULL);
++
+ return mask;
+ failed:
+ fprintf(stderr, "Invalid media specification '%s'.\n", arg);
+@@ -179,11 +203,25 @@ failed:
+
+ /*--------------------------------------------------------------------*/
+
+-static char *media_list(int mask, int best)
++static const char *media_list(unsigned mask, unsigned mask2, int best)
+ {
+ static char buf[100];
+ int i;
+ *buf = '\0';
++
++ if (mask & BMCR_SPEED1000) {
++ if (mask2 & ADVERTISE_1000HALF) {
++ strcat(buf, " ");
++ strcat(buf, "1000baseT-HD");
++ if (best) goto out;
++ }
++ if (mask2 & ADVERTISE_1000FULL) {
++ strcat(buf, " ");
++ strcat(buf, "1000baseT-FD");
++ if (best) goto out;
++ }
++ }
++
+ mask >>= 5;
+ for (i = 4; i >= 0; i--) {
+ if (mask & (1<<i)) {
+@@ -192,6 +230,7 @@ static char *media_list(int mask, int best)
+ if (best) break;
+ }
+ }
++ out:
+ if (mask & (1<<5))
+ strcat(buf, " flow-control");
+ return buf;
+@@ -199,49 +238,82 @@ static char *media_list(int mask, int best)
+
+ int show_basic_mii(int sock, int phy_id)
+ {
+- char buf[100];
++ char buf[200];
+ int i, mii_val[32];
+- int bmcr, bmsr, advert, lkpar;
++ unsigned bmcr, bmsr, advert, lkpar, bmcr2, lpa2;
+
+ /* Some bits in the BMSR are latched, but we can't rely on being
+ the only reader, so only the current values are meaningful */
+ mdio_read(sock, MII_BMSR);
+- for (i = 0; i < ((verbose > 1) ? 32 : 8); i++)
+- mii_val[i] = mdio_read(sock, i);
++ for (i = 0; i < ((verbose > 1) ? 32 : (MII_STAT1000+1)); i++)
++ switch (i & 0x1F) {
++ case MII_BMCR:
++ case MII_BMSR:
++ case MII_PHYSID1:
++ case MII_PHYSID2:
++ case MII_ADVERTISE:
++ case MII_LPA:
++ case MII_EXPANSION:
++ case MII_CTRL1000:
++ case MII_STAT1000:
++ case MII_ESTATUS:
++ case MII_DCOUNTER:
++ case MII_FCSCOUNTER:
++ case MII_NWAYTEST:
++ case MII_RERRCOUNTER:
++ case MII_SREVISION:
++ case MII_RESV1:
++ case MII_LBRERROR:
++ case MII_PHYADDR:
++ case MII_RESV2:
++ case MII_TPISTATUS:
++ case MII_NCONFIG:
++ mii_val[i] = mdio_read(sock, i);
++ break;
++ default:
++ if (verbose > 2)
++ mii_val[i] = mdio_read(sock, i);
++ else
++ mii_val[i] = 0;
++ break;
++ }
+
+- if (mii_val[MII_BMCR] == 0xffff) {
++ if (mii_val[MII_BMCR] == 0xffff || mii_val[MII_BMSR] == 0x0000) {
+ fprintf(stderr, " No MII transceiver present!.\n");
+ return -1;
+ }
+
+ /* Descriptive rename. */
+ bmcr = mii_val[MII_BMCR]; bmsr = mii_val[MII_BMSR];
+- advert = mii_val[MII_ANAR]; lkpar = mii_val[MII_ANLPAR];
++ advert = mii_val[MII_ADVERTISE]; lkpar = mii_val[MII_LPA];
++ bmcr2 = mii_val[MII_CTRL1000]; lpa2 = mii_val[MII_STAT1000];
+
+ sprintf(buf, "%s: ", ifr.ifr_name);
+- if (bmcr & MII_BMCR_AN_ENA) {
+- if (bmsr & MII_BMSR_AN_COMPLETE) {
++ if (bmcr & BMCR_ANENABLE) {
++ if (bmsr & BMSR_ANEGCOMPLETE) {
+ if (advert & lkpar) {
+- strcat(buf, (lkpar & MII_AN_ACK) ?
++ strcat(buf, (lkpar & LPA_LPACK) ?
+ "negotiated" : "no autonegotiation,");
+- strcat(buf, media_list(advert & lkpar, 1));
++ strcat(buf, media_list(advert & lkpar, bmcr2 & lpa2>>2, 1));
+ strcat(buf, ", ");
+ } else {
+ strcat(buf, "autonegotiation failed, ");
+ }
+- } else if (bmcr & MII_BMCR_RESTART) {
++ } else if (bmcr & BMCR_ANRESTART) {
+ strcat(buf, "autonegotiation restarted, ");
+ }
+ } else {
+ sprintf(buf+strlen(buf), "%s Mbit, %s duplex, ",
+- (bmcr & MII_BMCR_100MBIT) ? "100" : "10",
+- (bmcr & MII_BMCR_DUPLEX) ? "full" : "half");
++ ((bmcr2 & (ADVERTISE_1000HALF | ADVERTISE_1000FULL)) & lpa2 >> 2)
++ ? "1000"
++ : (bmcr & BMCR_SPEED100) ? "100" : "10",
++ (bmcr & BMCR_FULLDPLX) ? "full" : "half");
+ }
+- strcat(buf, (bmsr & MII_BMSR_LINK_VALID) ? "link ok" : "no link");
++ strcat(buf, (bmsr & BMSR_LSTATUS) ? "link ok" : "no link");
+
+ if (opt_watch) {
+ if (opt_log) {
+- syslog(LOG_INFO, buf);
++ syslog(LOG_INFO, "%s", buf);
+ } else {
+ char s[20];
+ time_t t = time(NULL);
+@@ -273,35 +345,36 @@ int show_basic_mii(int sock, int phy_id)
+ ((mii_val[2]<<6)|(mii_val[3]>>10))&0xff,
+ (mii_val[3]>>4)&0x3f, mii_val[3]&0x0f);
+ printf(" basic mode: ");
+- if (bmcr & MII_BMCR_RESET)
++ if (bmcr & BMCR_RESET)
+ printf("software reset, ");
+- if (bmcr & MII_BMCR_LOOPBACK)
++ if (bmcr & BMCR_LOOPBACK)
+ printf("loopback, ");
+- if (bmcr & MII_BMCR_ISOLATE)
++ if (bmcr & BMCR_ISOLATE)
+ printf("isolate, ");
+- if (bmcr & MII_BMCR_COLTEST)
++ if (bmcr & BMCR_CTST)
+ printf("collision test, ");
+- if (bmcr & MII_BMCR_AN_ENA) {
++ if (bmcr & BMCR_ANENABLE) {
+ printf("autonegotiation enabled\n");
+ } else {
+ printf("%s Mbit, %s duplex\n",
+- (bmcr & MII_BMCR_100MBIT) ? "100" : "10",
+- (bmcr & MII_BMCR_DUPLEX) ? "full" : "half");
++ (bmcr & BMCR_SPEED100) ? "100" : "10",
++ (bmcr & BMCR_FULLDPLX) ? "full" : "half");
+ }
+ printf(" basic status: ");
+- if (bmsr & MII_BMSR_AN_COMPLETE)
++ if (bmsr & BMSR_ANEGCOMPLETE)
+ printf("autonegotiation complete, ");
+- else if (bmcr & MII_BMCR_RESTART)
++ else if (bmcr & BMCR_ANRESTART)
+ printf("autonegotiation restarted, ");
+- if (bmsr & MII_BMSR_REMOTE_FAULT)
++ if (bmsr & BMSR_RFAULT)
+ printf("remote fault, ");
+- printf((bmsr & MII_BMSR_LINK_VALID) ? "link ok" : "no link");
+- printf("\n capabilities:%s", media_list(bmsr >> 6, 0));
+- printf("\n advertising: %s", media_list(advert, 0));
+- if (lkpar & MII_AN_ABILITY_MASK)
+- printf("\n link partner:%s", media_list(lkpar, 0));
++ printf((bmsr & BMSR_LSTATUS) ? "link ok" : "no link");
++ printf("\n capabilities:%s", media_list(bmsr >> 6, bmcr2, 0));
++ printf("\n advertising: %s", media_list(advert, bmcr2, 0));
++ if (lkpar & LPA_ABILITY_MASK)
++ printf("\n link partner:%s", media_list(lkpar, lpa2 >> 2, 0));
+ printf("\n");
+ }
++ fflush(stdout);
+ return 0;
+ }
+
+@@ -309,10 +382,10 @@ int show_basic_mii(int sock, int phy_id)
+
+ static int do_one_xcvr(int skfd, char *ifname, int maybe)
+ {
+- struct mii_data *mii = (struct mii_data *)&ifr.ifr_data;
++ struct mii_ioctl_data *mii = (struct mii_ioctl_data *)&ifr.ifr_data;
+
+ /* Get the vitals from the interface. */
+- strncpy(ifr.ifr_name, ifname, IFNAMSIZ);
++ safe_strncpy(ifr.ifr_name, ifname, IFNAMSIZ);
+ if (ioctl(skfd, SIOCGMIIPHY, &ifr) < 0) {
+ if (!maybe || (errno != ENODEV))
+ fprintf(stderr, "SIOCGMIIPHY on '%s' failed: %s\n",
+@@ -327,23 +400,23 @@ static int do_one_xcvr(int skfd, char *ifname, int maybe)
+
+ if (opt_reset) {
+ printf("resetting the transceiver...\n");
+- mdio_write(skfd, MII_BMCR, MII_BMCR_RESET);
++ mdio_write(skfd, MII_BMCR, BMCR_RESET);
+ }
+- if (nway_advertise) {
+- mdio_write(skfd, MII_ANAR, nway_advertise | 1);
++ if (nway_advertise > 0) {
++ mdio_write(skfd, MII_ADVERTISE, nway_advertise | 1);
+ opt_restart = 1;
+ }
+ if (opt_restart) {
+ printf("restarting autonegotiation...\n");
+ mdio_write(skfd, MII_BMCR, 0x0000);
+- mdio_write(skfd, MII_BMCR, MII_BMCR_AN_ENA|MII_BMCR_RESTART);
++ mdio_write(skfd, MII_BMCR, BMCR_ANENABLE|BMCR_ANRESTART);
+ }
+ if (fixed_speed) {
+ int bmcr = 0;
+- if (fixed_speed & (MII_AN_100BASETX_FD|MII_AN_100BASETX_HD))
+- bmcr |= MII_BMCR_100MBIT;
+- if (fixed_speed & (MII_AN_100BASETX_FD|MII_AN_10BASET_FD))
+- bmcr |= MII_BMCR_DUPLEX;
++ if (fixed_speed & (LPA_100FULL|LPA_100HALF))
++ bmcr |= BMCR_SPEED100;
++ if (fixed_speed & (LPA_100FULL|LPA_10FULL))
++ bmcr |= BMCR_FULLDPLX;
+ mdio_write(skfd, MII_BMCR, bmcr);
+ }
+
+@@ -357,12 +430,12 @@ static int do_one_xcvr(int skfd, char *ifname, int maybe)
+
+ static void watch_one_xcvr(int skfd, char *ifname, int index)
+ {
+- struct mii_data *mii = (struct mii_data *)&ifr.ifr_data;
++ struct mii_ioctl_data *mii = (struct mii_ioctl_data *)&ifr.ifr_data;
+ static int status[MAX_ETH] = { 0, /* ... */ };
+ int now;
+
+ /* Get the vitals from the interface. */
+- strncpy(ifr.ifr_name, ifname, IFNAMSIZ);
++ safe_strncpy(ifr.ifr_name, ifname, IFNAMSIZ);
+ if (ioctl(skfd, SIOCGMIIPHY, &ifr) < 0) {
+ if (errno != ENODEV)
+ fprintf(stderr, "SIOCGMIIPHY on '%s' failed: %s\n",
+@@ -379,27 +452,38 @@ static void watch_one_xcvr(int skfd, char *ifname, int index)
+ /*--------------------------------------------------------------------*/
+
+ const char *usage =
+-"usage: %s [-VvRrwl] [-A media,... | -F media] [interface ...]
+- -V, --version display version information
+- -v, --verbose more verbose output
+- -R, --reset reset MII to poweron state
+- -r, --restart restart autonegotiation
+- -w, --watch monitor for link status changes
+- -l, --log with -w, write events to syslog
+- -A, --advertise=media,... advertise only specified media
+- -F, --force=media force specified media technology
+-media: 100baseT4, 100baseTx-FD, 100baseTx-HD, 10baseT-FD, 10baseT-HD,
+- (to advertise both HD and FD) 100baseTx, 10baseT\n";
++"usage: %s [-VvRrwl] [-A media,... | -F media] [-p addr] <interface ...>\n"
++" -V, --version display version information\n"
++" -v, --verbose more verbose output\n"
++" -R, --reset reset MII to poweron state\n"
++" -r, --restart restart autonegotiation\n"
++" -w, --watch monitor for link status changes\n"
++" -l, --log with -w, write events to syslog\n"
++" -A, --advertise=media,... advertise only specified media\n"
++" -F, --force=media force specified media technology\n"
++" -p, --phy=addr set PHY (MII address) to report\n"
++"media: 1000baseTx-HD, 1000baseTx-FD,\n"
++" 100baseT4, 100baseTx-FD, 100baseTx-HD,\n"
++" 10baseT-FD, 10baseT-HD,\n"
++" (to advertise both HD and FD) 1000baseTx, 100baseTx, 10baseT\n";
++
++
++static void version(void)
++{
++ fprintf(stderr, "%s\n%s\n", Release, Signature);
++ exit(E_VERSION);
++}
++
+
+ int main(int argc, char **argv)
+ {
+ int i, c, ret, errflag = 0;
+- char s[6];
+-
++ unsigned ctrl1000 = 0;
++
+ while ((c = getopt_long(argc, argv, "A:F:p:lrRvVw?", longopts, 0)) != EOF)
+ switch (c) {
+- case 'A': nway_advertise = parse_media(optarg); break;
+- case 'F': fixed_speed = parse_media(optarg); break;
++ case 'A': nway_advertise = parse_media(optarg, &ctrl1000); break;
++ case 'F': fixed_speed = parse_media(optarg, &ctrl1000); break;
+ case 'p': override_phy = atoi(optarg); break;
+ case 'r': opt_restart++; break;
+ case 'R': opt_reset++; break;
+@@ -411,6 +495,10 @@ int main(int argc, char **argv)
+ }
+ /* Check for a few inappropriate option combinations */
+ if (opt_watch) verbose = 0;
++
++ if ((nway_advertise < 0) || (fixed_speed < 0))
++ return 2;
++
+ if (errflag || (fixed_speed & (fixed_speed-1)) ||
+ (fixed_speed && (opt_restart || nway_advertise))) {
+ fprintf(stderr, usage, argv[0]);
+@@ -418,7 +506,7 @@ int main(int argc, char **argv)
+ }
+
+ if (opt_version)
+- printf(version);
++ version();
+
+ /* Open a basic socket. */
+ if ((skfd = socket(AF_INET, SOCK_DGRAM,0)) < 0) {
+@@ -426,15 +514,15 @@ int main(int argc, char **argv)
+ exit(-1);
+ }
+
++ if (verbose > 1)
++ printf("Using SIOCGMIIPHY=0x%x\n", SIOCGMIIPHY);
++
+ /* No remaining args means show all interfaces. */
+ if (optind == argc) {
+- ret = 1;
+- for (i = 0; i < MAX_ETH; i++) {
+- sprintf(s, "eth%d", i);
+- ret &= do_one_xcvr(skfd, s, 1);
+- }
+- if (ret)
+- fprintf(stderr, "no MII interfaces found\n");
++ fprintf(stderr, "No interface specified\n");
++ fprintf(stderr, usage, argv[0]);
++ close(skfd);
++ return 2;
+ } else {
+ ret = 0;
+ for (i = optind; i < argc; i++) {
+@@ -445,15 +533,8 @@ int main(int argc, char **argv)
+ if (opt_watch && (ret == 0)) {
+ while (1) {
+ sleep(1);
+- if (optind == argc) {
+- for (i = 0; i < MAX_ETH; i++) {
+- sprintf(s, "eth%d", i);
+- watch_one_xcvr(skfd, s, i);
+- }
+- } else {
+- for (i = optind; i < argc; i++)
++ for (i = optind; i < argc; i++)
+ watch_one_xcvr(skfd, argv[i], i-optind);
+- }
+ }
+ }
+
+diff --git a/nameif.c b/nameif.c
+index 8d79b50..b280e59 100644
+--- a/nameif.c
++++ b/nameif.c
+@@ -1,11 +1,11 @@
+-/*
++/*
+ * Name Interfaces based on MAC address.
+ * Writen 2000 by Andi Kleen.
+- * Subject to the Gnu Public License, version 2.
++ * Subject to the Gnu Public License, version 2.
+ * TODO: make it support token ring etc.
+- * $Id: nameif.c,v 1.1 2000/10/18 17:26:29 ak Exp $
+- */
+-#ifndef _GNU_SOURCE
++ * $Id: nameif.c,v 1.4 2003/09/11 03:46:49 ak Exp $
++ */
++#ifndef _GNU_SOURCE
+ #define _GNU_SOURCE
+ #endif
+ #include <stdio.h>
+@@ -21,73 +21,68 @@
+ #include <net/if.h>
+ #include <linux/sockios.h>
+ #include <errno.h>
+-#include "intl.h"
+-
+-const char default_conf[] = "/etc/mactab";
+-const char *fname = default_conf;
+-int use_syslog;
+-int ctl_sk = -1;
+-
+-void err(char *msg)
+-{
+- if (use_syslog) {
+- syslog(LOG_ERR,"%s: %m", msg);
+- } else {
+- perror(msg);
+- }
+- exit(1);
++#include "intl.h"
++#include "net-support.h"
++#include "util.h"
++
++const char default_conf[] = "/etc/mactab";
++const char *fname = default_conf;
++int use_syslog;
++int ctl_sk = -1;
++
++void err(char *msg)
++{
++ if (use_syslog) {
++ syslog(LOG_ERR,"%s: %m", msg);
++ } else {
++ perror(msg);
++ }
++ exit(1);
+ }
+
+-void complain(char *fmt, ...)
+-{
++void complain(char *fmt, ...)
++{
+ va_list ap;
+ va_start(ap,fmt);
+- if (use_syslog) {
++ if (use_syslog) {
+ vsyslog(LOG_ERR,fmt,ap);
+ } else {
+ vfprintf(stderr,fmt,ap);
+- fputc('\n',stderr);
++ fputc('\n',stderr);
+ }
+- va_end(ap);
++ va_end(ap);
+ exit(1);
+-}
++}
+
+-void warning(char *fmt, ...)
+-{
++void warning(char *fmt, ...)
++{
+ va_list ap;
+ va_start(ap,fmt);
+- if (use_syslog) {
++ if (use_syslog) {
+ vsyslog(LOG_ERR,fmt,ap);
+ } else {
+ vfprintf(stderr,fmt,ap);
+- fputc('\n',stderr);
++ fputc('\n',stderr);
+ }
+- va_end(ap);
+-}
++ va_end(ap);
++}
+
+ int parsemac(char *str, unsigned char *mac)
+-{
+- char *s;
+- while ((s = strsep(&str, ":")) != NULL) {
++{
++ char *s;
++ while ((s = strsep(&str, ":")) != NULL) {
+ unsigned byte;
+- if (sscanf(s,"%x", &byte)!=1 || byte > 0xff)
++ if (sscanf(s,"%x", &byte)!=1 || byte > 0xff)
+ return -1;
+- *mac++ = byte;
+- }
++ *mac++ = byte;
++ }
+ return 0;
+-}
+-
+-void *xmalloc(unsigned sz)
+-{
+- void *p = calloc(sz,1);
+- if (!p) errno=ENOMEM, err("xmalloc");
+- return p;
+-}
++}
+
+ void opensock(void)
+ {
+- if (ctl_sk < 0)
+- ctl_sk = socket(PF_INET,SOCK_DGRAM,0);
++ if (ctl_sk < 0)
++ ctl_sk = socket(PF_INET,SOCK_DGRAM,0);
+ }
+
+ #ifndef ifr_newname
+@@ -97,10 +92,10 @@ void opensock(void)
+ int setname(char *oldname, char *newname)
+ {
+ struct ifreq ifr;
+- opensock();
++ opensock();
+ memset(&ifr,0,sizeof(struct ifreq));
+- strcpy(ifr.ifr_name, oldname);
+- strcpy(ifr.ifr_newname, newname);
++ safe_strncpy(ifr.ifr_name, oldname, IFNAMSIZ);
++ safe_strncpy(ifr.ifr_newname, newname, IFNAMSIZ);
+ return ioctl(ctl_sk, SIOCSIFNAME, &ifr);
+ }
+
+@@ -108,118 +103,118 @@ int getmac(char *name, unsigned char *mac)
+ {
+ int r;
+ struct ifreq ifr;
+- opensock();
++ opensock();
+ memset(&ifr,0,sizeof(struct ifreq));
+- strcpy(ifr.ifr_name, name);
++ safe_strncpy(ifr.ifr_name, name, IFNAMSIZ);
+ r = ioctl(ctl_sk, SIOCGIFHWADDR, &ifr);
+- memcpy(mac, ifr.ifr_hwaddr.sa_data, 6);
+- return r;
++ memcpy(mac, ifr.ifr_hwaddr.sa_data, 6);
++ return r;
+ }
+
+-struct change {
+- struct change *next,**pprev;
++struct change {
++ struct change *next;
++ int found;
+ char ifname[IFNAMSIZ+1];
+ unsigned char mac[6];
+-};
++};
+ struct change *clist;
+
+-struct change *lookupmac(unsigned char *mac)
+-{
++struct change *lookupmac(unsigned char *mac)
++{
+ struct change *ch;
+- for (ch = clist;ch;ch = ch->next)
++ for (ch = clist;ch;ch = ch->next)
+ if (!memcmp(ch->mac, mac, 6))
+ return ch;
+- return NULL;
+-}
++ 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 (clist)
+- clist->pprev = &ch->next;
++ 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);
+ ch->next = clist;
+- ch->pprev = &clist;
+ clist = ch;
+- return 0;
++ return 0;
+ }
+
+ void readconf(void)
+ {
+- char *line;
+- size_t linel;
+- int linenum;
++ char *line;
++ size_t linel;
++ int linenum;
+ FILE *ifh;
+ char *p;
+ int n;
++ struct change *ch = NULL;
+
+ ifh = fopen(fname, "r");
+- if (!ifh)
+- complain(_("opening configuration file %s: %s"),fname,strerror(errno));
++ if (!ifh)
++ complain(_("opening configuration file %s: %s"),fname,strerror(errno));
+
+- line = NULL;
++ line = NULL;
+ linel = 0;
+- linenum = 1;
++ linenum = 1;
+ while (getdelim(&line, &linel, '\n', ifh) > 0) {
+- struct change *ch = xmalloc(sizeof(struct change));
+- char pos[20];
++ char pos[20];
+
+- sprintf(pos, _("line %d"), linenum);
++ sprintf(pos, _("line %d"), linenum);
+
+ if ((p = strchr(line,'#')) != NULL)
+ *p = '\0';
+- p = line;
++ p = line;
+ while (isspace(*p))
+- ++p;
++ ++p;
+ if (*p == '\0')
+- continue;
+- n = strcspn(p, " \t");
+- if (n > IFNAMSIZ)
+- complain(_("interface name too long at line %d"), line);
+- memcpy(ch->ifname, p, n);
+- ch->ifname[n] = 0;
+- p += n;
+- p += strspn(p, " \t");
+- n = strspn(p, "0123456789ABCDEFabcdef:");
+- p[n] = 0;
++ continue;
++ n = strcspn(p, " \t");
++ 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;
++ p += n;
++ p += strspn(p, " \t");
++ n = strspn(p, "0123456789ABCDEFabcdef:");
++ p[n] = 0;
+ addchange(p, ch, pos);
+ linenum++;
+- }
+- fclose(ifh);
++ }
++ fclose(ifh);
+ }
+
+-struct option lopt[] = {
++struct option lopt[] = {
+ {"syslog", 0, NULL, 's' },
+ {"config-file", 1, NULL, 'c' },
+- {"help", 0, NULL, '?' },
+- {NULL},
+-};
++ {"help", 0, NULL, '?' },
++ {NULL},
++};
+
+ void usage(void)
+ {
+- fprintf(stderr, _("usage: nameif [-c configurationfile] [-s] {ifname macaddress}"));
+- exit(1);
++ fprintf(stderr, _("usage: nameif [-c configurationfile] [-s] {ifname macaddress}\n"));
++ exit(E_USAGE);
+ }
+
+-int main(int ac, char **av)
+-{
+- FILE *ifh;
++int main(int ac, char **av)
++{
++ FILE *ifh;
+ char *p;
+ int n;
+- int linenum;
++ int linenum;
+ char *line = NULL;
+ size_t linel = 0;
++ int ret = 0;
+
+ for (;;) {
+ int c = getopt_long(ac,av,"c:s",lopt,NULL);
+ if (c == -1) break;
+- switch (c) {
++ switch (c) {
+ default:
+ case '?':
+- usage();
++ usage();
+ case 'c':
+ fname = optarg;
+ break;
+@@ -229,74 +224,76 @@ int main(int ac, char **av)
+ }
+ }
+
+- if (use_syslog)
++ if (use_syslog)
+ openlog("nameif",0,LOG_LOCAL0);
+-
+- while (optind < ac) {
+- struct change *ch = xmalloc(sizeof(struct change));
++
++ while (optind < ac) {
++ struct change *ch = xmalloc(sizeof(struct change));
+ char pos[30];
+
+- if ((ac-optind) & 1)
++ if ((ac-optind) & 1)
+ usage();
+- if (strlen(av[optind])+1>IFNAMSIZ)
++ if (strlen(av[optind])+1>IFNAMSIZ)
+ complain(_("interface name `%s' too long"), av[optind]);
+- strcpy(ch->ifname, av[optind]);
+- optind++;
+- sprintf(pos,_("argument %d"),optind);
+- addchange(av[optind], ch, pos);
+- optind++;
+- }
++ safe_strncpy(ch->ifname, av[optind], sizeof(ch->ifname));
++ optind++;
++ sprintf(pos,_("argument %d"),optind);
++ addchange(av[optind], ch, pos);
++ optind++;
++ }
+
+- if (!clist || fname != default_conf)
+- readconf();
++ if (!clist || fname != default_conf)
++ readconf();
+
+- ifh = fopen("/proc/net/dev", "r");
+- if (!ifh) complain(_("open of /proc/net/dev: %s"), strerror(errno));
++ ifh = fopen("/proc/net/dev", "r");
++ if (!ifh) complain(_("open of /proc/net/dev: %s"), strerror(errno));
+
+
+ linenum = 0;
+ while (getdelim(&line, &linel, '\n', ifh) > 0) {
+- struct change *ch;
++ struct change *ch;
+ unsigned char mac[6];
+
+- if (linenum++ < 2)
++ if (linenum++ < 2)
+ continue;
+-
+- p = line;
+- while (isspace(*p))
++
++ p = line;
++ while (isspace(*p))
+ ++p;
+- n = strcspn(p, ": \t");
+- p[n] = 0;
+-
+- if (n > IFNAMSIZ-1)
+- complain(_("interface name `%s' too long"), p);
+-
+- if (getmac(p, mac) < 0)
++ n = strcspn(p, ": \t");
++ p[n] = 0;
++
++ if (n > IFNAMSIZ-1)
++ complain(_("interface name `%s' too long"), p);
++
++ if (getmac(p, mac) < 0)
+ continue;
+-
+- ch = lookupmac(mac);
+- if (!ch)
++
++ ch = lookupmac(mac);
++ if (!ch)
+ continue;
+-
+- *ch->pprev = ch->next;
+- if (strcmp(p, ch->ifname)) {
+- if (setname(p, ch->ifname) < 0)
++
++ ch->found = 1;
++ if (strcmp(p, ch->ifname)) {
++ if (setname(p, ch->ifname) < 0)
+ complain(_("cannot change name of %s to %s: %s"),
+- p, ch->ifname, strerror(errno));
+- }
+- free(ch);
+- }
+- fclose(ifh);
+-
+- while (clist) {
++ p, ch->ifname, strerror(errno));
++ }
++ }
++ fclose(ifh);
++
++ while (clist) {
+ struct change *ch = clist;
+ clist = clist->next;
+- warning(_("interface '%s' not found"), ch->ifname);
+- free(ch);
++ if (!ch->found){
++ warning(_("interface '%s' not found"), ch->ifname);
++ ret = 1;
++ }
++ free(ch);
+ }
+
+ if (use_syslog)
+ closelog();
+- return 0;
+-}
++ return ret;
++}
+
+diff --git a/netstat.c b/netstat.c
+index 1ef790e..4f62e87 100644
+--- a/netstat.c
++++ b/netstat.c
+@@ -6,7 +6,7 @@
+ * NET-3 Networking Distribution for the LINUX operating
+ * system.
+ *
+- * Version: $Id: netstat.c,v 1.43 2001/04/15 14:41:17 pb Exp $
++ * Version: $Id: netstat.c,v 1.73 2011-04-20 01:35:22 ecki Exp $
+ *
+ * Authors: Fred Baumgarten, <dc6iq@insu1.etec.uni-karlsruhe.de>
+ * Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org>
+@@ -23,24 +23,24 @@
+ * Modified:
+ *
+ *960116 {1.01} Bernd Eckenfels: verbose, cleanups
+- *960204 {1.10} Bernd Eckenfels: aftrans, usage, new route_info,
++ *960204 {1.10} Bernd Eckenfels: aftrans, usage, new route_info,
+ * DLFT_AF
+ *960204 {1.11} Bernd Eckenfels: netlink support
+ *960204 {1.12} Bernd Eckenfels: route_init()
+ *960215 {1.13} Bernd Eckenfels: netlink_print honors HAVE_
+- *960217 {1.14} Bernd Eckenfels: masq_info from Jos Vos and
++ *960217 {1.14} Bernd Eckenfels: masq_info from Jos Vos and
+ * ax25_info from Jonathan Naylor.
+ *960218 {1.15} Bernd Eckenfels: ipx_info rewritten, -e for tcp/ipx
+ *960220 {1.16} Bernd Eckenfels: minor output reformats, -a for -x
+ *960221 {1.17} Bernd Eckenfels: route_init->getroute_init
+ *960426 {1.18} Bernd Eckenfels: new RTACTION, SYM/NUM, FIB/CACHE
+- *960517 {1.19} Bernd Eckenfels: usage() spelling fix and --unix inode,
++ *960517 {1.19} Bernd Eckenfels: usage() spelling fix and --unix inode,
+ * ':' is part of sock_addr for --inet
+ *960822 {x.xx} Frank Strauss: INET6 support
+ *
+ *970406 {1.33} Philip Copeland Added snmp reporting support module -s
+ * code provided by Andi Kleen
+- * (relly needs to be kernel hooked but
++ * (relly needs to be kernel hooked but
+ * this will do in the meantime)
+ * minor header file misplacement tidy up.
+ *980815 {1.xx} Stephane Fillod: X.25 support
+@@ -58,6 +58,8 @@
+ *
+ *990420 {1.38} Tuan Hoang removed a useless assignment from igmp_do_one()
+ *20010404 {1.39} Arnaldo Carvalho de Melo - use setlocale
++ *20081201 {1.42} Brian Micek added -L|--udplite options for RFC 3828
++ *20020722 {1.51} Thomas Preusser added SCTP over IPv4 support
+ *
+ * This program is free software; you can redistribute it
+ * and/or modify it under the terms of the GNU General
+@@ -83,6 +85,7 @@
+ #include <arpa/inet.h>
+ #include <netinet/in.h>
+ #include <sys/ioctl.h>
++#include <sys/stat.h>
+ #include <net/if.h>
+ #include <dirent.h>
+
+@@ -94,8 +97,18 @@
+ #include "sockets.h"
+ #include "interface.h"
+ #include "util.h"
++#include "proc.h"
++
++#if HAVE_SELINUX
++#include <selinux/selinux.h>
++#endif
++
++#if HAVE_AFBLUETOOTH
++#include <bluetooth/bluetooth.h>
++#endif
+
+ #define PROGNAME_WIDTH 20
++#define SELINUX_WIDTH 50
+
+ #if !defined(s6_addr32) && defined(in6a_words)
+ #define s6_addr32 in6a_words /* libinet6 */
+@@ -104,6 +117,8 @@
+ /* prototypes for statistics.c */
+ void parsesnmp(int, int, int);
+ void inittab(void);
++void parsesnmp6(int, int, int);
++void inittab6(void);
+
+ typedef enum {
+ SS_FREE = 0, /* not allocated */
+@@ -122,7 +137,7 @@ typedef enum {
+ #define FEATURE_NETSTAT
+ #include "lib/net-features.h"
+
+-char *Release = RELEASE, *Version = "netstat 1.42 (2001-04-15)", *Signature = "Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang and others";
++static char *Release = RELEASE, *Signature = "Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others";
+
+
+ #define E_READ -1
+@@ -142,18 +157,24 @@ int flag_cf = 0;
+ int flag_opt = 0;
+ int flag_raw = 0;
+ int flag_tcp = 0;
++int flag_sctp= 0;
+ int flag_udp = 0;
++int flag_udplite = 0;
+ int flag_igmp= 0;
+ int flag_rom = 0;
+ int flag_exp = 1;
++int flag_wide= 0;
+ int flag_prg = 0;
+ int flag_arg = 0;
+ int flag_ver = 0;
++int flag_l2cap = 0;
++int flag_rfcomm = 0;
++int flag_selinux = 0;
+
+ FILE *procinfo;
+
+-#define INFO_GUTS1(file,name,proc) \
+- procinfo = fopen((file), "r"); \
++#define INFO_GUTS1(file,name,proc,prot) \
++ procinfo = proc_fopen((file)); \
+ if (procinfo == NULL) { \
+ if (errno != ENOENT) { \
+ perror((file)); \
+@@ -166,58 +187,63 @@ FILE *procinfo;
+ } else { \
+ do { \
+ if (fgets(buffer, sizeof(buffer), procinfo)) \
+- (proc)(lnr++, buffer); \
++ (proc)(lnr++, buffer,prot); \
+ } while (!feof(procinfo)); \
+ fclose(procinfo); \
+ }
+
+ #if HAVE_AFINET6
+-#define INFO_GUTS2(file,proc) \
++#define INFO_GUTS2(file,proc,prot) \
+ lnr = 0; \
+- procinfo = fopen((file), "r"); \
++ procinfo = proc_fopen((file)); \
+ if (procinfo != NULL) { \
+ do { \
+ if (fgets(buffer, sizeof(buffer), procinfo)) \
+- (proc)(lnr++, buffer); \
++ (proc)(lnr++, buffer,prot); \
+ } while (!feof(procinfo)); \
+ fclose(procinfo); \
+ }
+ #else
+-#define INFO_GUTS2(file,proc)
++#define INFO_GUTS2(file,proc,prot)
+ #endif
+
+ #define INFO_GUTS3 \
+ return rc;
+
+-#define INFO_GUTS6(file,file6,name,proc) \
++#define INFO_GUTS6(file,file6,name,proc,prot4,prot6) \
+ char buffer[8192]; \
+ int rc = 0; \
+ int lnr = 0; \
+ if (!flag_arg || flag_inet) { \
+- INFO_GUTS1(file,name,proc) \
++ INFO_GUTS1(file,name,proc,prot4) \
+ } \
+ if (!flag_arg || flag_inet6) { \
+- INFO_GUTS2(file6,proc) \
++ INFO_GUTS2(file6,proc,prot6) \
+ } \
+ INFO_GUTS3
+
+-#define INFO_GUTS(file,name,proc) \
++#define INFO_GUTS(file,name,proc,prot) \
+ char buffer[8192]; \
+ int rc = 0; \
+ int lnr = 0; \
+- INFO_GUTS1(file,name,proc) \
++ INFO_GUTS1(file,name,proc,prot) \
+ INFO_GUTS3
+
+ #define PROGNAME_WIDTHs PROGNAME_WIDTH1(PROGNAME_WIDTH)
+ #define PROGNAME_WIDTH1(s) PROGNAME_WIDTH2(s)
+ #define PROGNAME_WIDTH2(s) #s
+
++#define SELINUX_WIDTHs SELINUX_WIDTH1(SELINUX_WIDTH)
++#define SELINUX_WIDTH1(s) SELINUX_WIDTH2(s)
++#define SELINUX_WIDTH2(s) #s
++
+ #define PRG_HASH_SIZE 211
+
+ static struct prg_node {
+ struct prg_node *next;
+- int inode;
++ unsigned long inode;
+ char name[PROGNAME_WIDTH];
++ char scon[SELINUX_WIDTH];
+ } *prg_hash[PRG_HASH_SIZE];
+
+ static char prg_cache_loaded = 0;
+@@ -225,8 +251,11 @@ static char prg_cache_loaded = 0;
+ #define PRG_HASHIT(x) ((x) % PRG_HASH_SIZE)
+
+ #define PROGNAME_BANNER "PID/Program name"
++#define SELINUX_BANNER "Security Context"
++
++#define print_progname_banner() do { if (flag_prg) printf(" %-" PROGNAME_WIDTHs "s",PROGNAME_BANNER); } while (0)
+
+-#define print_progname_banner() do { if (flag_prg) printf("%-" PROGNAME_WIDTHs "s"," " PROGNAME_BANNER); } while (0)
++#define print_selinux_banner() do { if (flag_selinux) printf("%-" SELINUX_WIDTHs "s"," " SELINUX_BANNER); } while (0)
+
+ #define PRG_LOCAL_ADDRESS "local_address"
+ #define PRG_INODE "inode"
+@@ -246,40 +275,57 @@ static char prg_cache_loaded = 0;
+ #define PATH_PROC_X_FD PATH_PROC "/%s/" PATH_FD_SUFF
+ #define PATH_CMDLINE "cmdline"
+ #define PATH_CMDLINEl strlen(PATH_CMDLINE)
+-/* NOT working as of glibc-2.0.7: */
+-#undef DIRENT_HAVE_D_TYPE_WORKS
+
+-static void prg_cache_add(int inode, char *name)
++static void prg_cache_add(unsigned long inode, char *name, const char *scon)
+ {
+ unsigned hi = PRG_HASHIT(inode);
+ struct prg_node **pnp,*pn;
+
+- prg_cache_loaded=2;
+- for (pnp=prg_hash+hi;(pn=*pnp);pnp=&pn->next) {
+- if (pn->inode==inode) {
++ prg_cache_loaded = 2;
++ for (pnp = prg_hash + hi; (pn = *pnp); pnp = &pn->next) {
++ if (pn->inode == inode) {
+ /* Some warning should be appropriate here
+ as we got multiple processes for one i-node */
+ return;
+ }
+ }
+- if (!(*pnp=malloc(sizeof(**pnp))))
++ if (!(*pnp = malloc(sizeof(**pnp))))
+ return;
+- pn=*pnp;
+- pn->next=NULL;
+- pn->inode=inode;
+- if (strlen(name)>sizeof(pn->name)-1)
+- name[sizeof(pn->name)-1]='\0';
+- strcpy(pn->name,name);
++ pn = *pnp;
++ pn->next = NULL;
++ pn->inode = inode;
++ safe_strncpy(pn->name, name, sizeof(pn->name));
++
++ {
++ int len = (strlen(scon) - sizeof(pn->scon)) + 1;
++ if (len > 0)
++ safe_strncpy(pn->scon, &scon[len + 1], sizeof(pn->scon));
++ else
++ safe_strncpy(pn->scon, scon, sizeof(pn->scon));
++ }
++
++}
++
++static const char *prg_cache_get(unsigned long inode)
++{
++ unsigned hi = PRG_HASHIT(inode);
++ struct prg_node *pn;
++
++ for (pn = prg_hash[hi]; pn; pn = pn->next)
++ if (pn->inode == inode)
++ return (pn->name);
++ return ("-");
+ }
+
+-static const char *prg_cache_get(int inode)
++static const char *prg_cache_get_con(unsigned long inode)
+ {
+- unsigned hi=PRG_HASHIT(inode);
++ unsigned hi = PRG_HASHIT(inode);
+ struct prg_node *pn;
+
+- for (pn=prg_hash[hi];pn;pn=pn->next)
+- if (pn->inode==inode) return(pn->name);
+- return("-");
++ for (pn = prg_hash[hi]; pn; pn = pn->next)
++ if (pn->inode == inode)
++ return (pn->scon);
++ return ("-");
+ }
+
+ static void prg_cache_clear(void)
+@@ -287,143 +333,164 @@ static void prg_cache_clear(void)
+ struct prg_node **pnp,*pn;
+
+ if (prg_cache_loaded == 2)
+- for (pnp=prg_hash;pnp<prg_hash+PRG_HASH_SIZE;pnp++)
+- while ((pn=*pnp)) {
+- *pnp=pn->next;
++ for (pnp = prg_hash; pnp < prg_hash + PRG_HASH_SIZE; pnp++)
++ while ((pn = *pnp)) {
++ *pnp = pn->next;
+ free(pn);
+ }
+- prg_cache_loaded=0;
++ prg_cache_loaded = 0;
++}
++
++static void wait_continous(void)
++{
++ fflush(stdout);
++ sleep(1);
+ }
+
+-static void extract_type_1_socket_inode(const char lname[], long * inode_p) {
++static int extract_type_1_socket_inode(const char lname[], unsigned long * inode_p) {
+
+ /* If lname is of the form "socket:[12345]", extract the "12345"
+ as *inode_p. Otherwise, return -1 as *inode_p.
+ */
+
+- if (strlen(lname) < PRG_SOCKET_PFXl+3) *inode_p = -1;
+- else if (memcmp(lname, PRG_SOCKET_PFX, PRG_SOCKET_PFXl)) *inode_p = -1;
+- else if (lname[strlen(lname)-1] != ']') *inode_p = -1;
+- else {
++ if (strlen(lname) < PRG_SOCKET_PFXl+3) return(-1);
++
++ if (memcmp(lname, PRG_SOCKET_PFX, PRG_SOCKET_PFXl)) return(-1);
++ if (lname[strlen(lname)-1] != ']') return(-1);
++
++ {
+ char inode_str[strlen(lname + 1)]; /* e.g. "12345" */
+ const int inode_str_len = strlen(lname) - PRG_SOCKET_PFXl - 1;
+ char *serr;
+
+ strncpy(inode_str, lname+PRG_SOCKET_PFXl, inode_str_len);
+ inode_str[inode_str_len] = '\0';
+- *inode_p = strtol(inode_str,&serr,0);
+- if (!serr || *serr || *inode_p < 0 || *inode_p >= INT_MAX)
+- *inode_p = -1;
++ *inode_p = strtoul(inode_str, &serr, 0);
++ if (!serr || *serr || *inode_p == ~0)
++ return(-1);
+ }
++ return(0);
+ }
+
+
+
+-static void extract_type_2_socket_inode(const char lname[], long * inode_p) {
++static int extract_type_2_socket_inode(const char lname[], unsigned long * inode_p) {
+
+ /* If lname is of the form "[0000]:12345", extract the "12345"
+ as *inode_p. Otherwise, return -1 as *inode_p.
+ */
+
+- if (strlen(lname) < PRG_SOCKET_PFX2l+1) *inode_p = -1;
+- else if (memcmp(lname, PRG_SOCKET_PFX2, PRG_SOCKET_PFX2l)) *inode_p = -1;
+- else {
++ if (strlen(lname) < PRG_SOCKET_PFX2l+1) return(-1);
++ if (memcmp(lname, PRG_SOCKET_PFX2, PRG_SOCKET_PFX2l)) return(-1);
++
++ {
+ char *serr;
+
+- *inode_p=strtol(lname + PRG_SOCKET_PFX2l,&serr,0);
+- if (!serr || *serr || *inode_p < 0 || *inode_p >= INT_MAX)
+- *inode_p = -1;
++ *inode_p = strtoul(lname + PRG_SOCKET_PFX2l, &serr, 0);
++ if (!serr || *serr || *inode_p == ~0)
++ return(-1);
+ }
++ return(0);
+ }
+
+
+
++
+ static void prg_cache_load(void)
+ {
+- char line[LINE_MAX],eacces=0;
+- int procfdlen,fd,cmdllen,lnamelen;
+- char lname[30],cmdlbuf[512],finbuf[PROGNAME_WIDTH];
+- long inode;
+- const char *cs,*cmdlp;
+- DIR *dirproc=NULL,*dirfd=NULL;
+- struct dirent *direproc,*direfd;
++ char line[LINE_MAX], eacces=0;
++ int procfdlen, fd, cmdllen, lnamelen;
++ char lname[30], cmdlbuf[512], finbuf[PROGNAME_WIDTH];
++ unsigned long inode;
++ const char *cs, *cmdlp;
++ DIR *dirproc = NULL, *dirfd = NULL;
++ struct dirent *direproc, *direfd;
++#if HAVE_SELINUX
++ security_context_t scon = NULL;
++#endif
+
+ if (prg_cache_loaded || !flag_prg) return;
+- prg_cache_loaded=1;
+- cmdlbuf[sizeof(cmdlbuf)-1]='\0';
++ prg_cache_loaded = 1;
++ cmdlbuf[sizeof(cmdlbuf) - 1] = '\0';
+ if (!(dirproc=opendir(PATH_PROC))) goto fail;
+- while (errno=0,direproc=readdir(dirproc)) {
+-#ifdef DIRENT_HAVE_D_TYPE_WORKS
+- if (direproc->d_type!=DT_DIR) continue;
+-#endif
+- for (cs=direproc->d_name;*cs;cs++)
+- if (!isdigit(*cs))
++ while (errno = 0, direproc = readdir(dirproc)) {
++ for (cs = direproc->d_name; *cs; cs++)
++ if (!isdigit(*cs))
+ break;
+- if (*cs)
++ if (*cs)
+ continue;
+- procfdlen=snprintf(line,sizeof(line),PATH_PROC_X_FD,direproc->d_name);
+- if (procfdlen<=0 || procfdlen>=sizeof(line)-5)
++ procfdlen = snprintf(line,sizeof(line),PATH_PROC_X_FD,direproc->d_name);
++ if (procfdlen <= 0 || procfdlen >= sizeof(line) - 5)
+ continue;
+- errno=0;
+- dirfd=opendir(line);
++ errno = 0;
++ dirfd = opendir(line);
+ if (! dirfd) {
+- if (errno==EACCES)
+- eacces=1;
++ if (errno == EACCES)
++ eacces = 1;
+ continue;
+ }
+ line[procfdlen] = '/';
+ cmdlp = NULL;
+ while ((direfd = readdir(dirfd))) {
+-#ifdef DIRENT_HAVE_D_TYPE_WORKS
+- if (direfd->d_type!=DT_LNK)
+- continue;
+-#endif
+- if (procfdlen+1+strlen(direfd->d_name)+1>sizeof(line))
++ /* Skip . and .. */
++ if (!isdigit(direfd->d_name[0]))
++ continue;
++ if (procfdlen + 1 + strlen(direfd->d_name) + 1 > sizeof(line))
+ continue;
+ memcpy(line + procfdlen - PATH_FD_SUFFl, PATH_FD_SUFF "/",
+- PATH_FD_SUFFl+1);
+- strcpy(line + procfdlen + 1, direfd->d_name);
+- lnamelen=readlink(line,lname,sizeof(lname)-1);
++ PATH_FD_SUFFl + 1);
++ safe_strncpy(line + procfdlen + 1, direfd->d_name,
++ sizeof(line) - procfdlen - 1);
++ lnamelen = readlink(line, lname, sizeof(lname) - 1);
++ if (lnamelen == -1)
++ continue;
+ lname[lnamelen] = '\0'; /*make it a null-terminated string*/
+
+- extract_type_1_socket_inode(lname, &inode);
+-
+- if (inode < 0) extract_type_2_socket_inode(lname, &inode);
+-
+- if (inode < 0) continue;
++ if (extract_type_1_socket_inode(lname, &inode) < 0)
++ if (extract_type_2_socket_inode(lname, &inode) < 0)
++ continue;
+
+ if (!cmdlp) {
+- if (procfdlen - PATH_FD_SUFFl + PATH_CMDLINEl >=
+- sizeof(line) - 5)
++ if (procfdlen - PATH_FD_SUFFl + PATH_CMDLINEl >=
++ sizeof(line) - 5)
+ continue;
+- strcpy(line + procfdlen-PATH_FD_SUFFl, PATH_CMDLINE);
++ safe_strncpy(line + procfdlen - PATH_FD_SUFFl, PATH_CMDLINE,
++ sizeof(line) - procfdlen + PATH_FD_SUFFl);
+ fd = open(line, O_RDONLY);
+- if (fd < 0)
++ if (fd < 0)
+ continue;
+ cmdllen = read(fd, cmdlbuf, sizeof(cmdlbuf) - 1);
+- if (close(fd))
++ if (close(fd))
+ continue;
+- if (cmdllen == -1)
++ if (cmdllen == -1)
+ continue;
+- if (cmdllen < sizeof(cmdlbuf) - 1)
++ if (cmdllen < sizeof(cmdlbuf) - 1)
+ cmdlbuf[cmdllen]='\0';
+- if ((cmdlp = strrchr(cmdlbuf, '/')))
++ if (cmdlbuf[0] == '/' && (cmdlp = strrchr(cmdlbuf, '/')))
+ cmdlp++;
+- else
++ else
+ cmdlp = cmdlbuf;
+ }
+
+ snprintf(finbuf, sizeof(finbuf), "%s/%s", direproc->d_name, cmdlp);
+- prg_cache_add(inode, finbuf);
++#if HAVE_SELINUX
++ if (getpidcon(atoi(direproc->d_name), &scon) == -1) {
++ scon=strdup("-");
++ }
++ prg_cache_add(inode, finbuf, scon);
++ freecon(scon);
++#else
++ prg_cache_add(inode, finbuf, "-");
++#endif
+ }
+- closedir(dirfd);
++ closedir(dirfd);
+ dirfd = NULL;
+ }
+- if (dirproc)
++ if (dirproc)
+ closedir(dirproc);
+- if (dirfd)
++ if (dirfd)
+ closedir(dirfd);
+- if (!eacces)
++ if (!eacces)
+ return;
+ if (prg_cache_loaded == 1) {
+ fail:
+@@ -450,7 +517,7 @@ static int netrom_info(void)
+ char buffer[256], dev[16];
+ int st, vs, vr, sendq, recvq, ret;
+
+- f = fopen(_PATH_PROCNET_NR, "r");
++ f = proc_fopen(_PATH_PROCNET_NR);
+ if (f == NULL) {
+ if (errno != ENOENT) {
+ perror(_PATH_PROCNET_NR);
+@@ -465,7 +532,8 @@ static int netrom_info(void)
+ }
+ printf(_("Active NET/ROM sockets\n"));
+ printf(_("User Dest Source Device State Vr/Vs Send-Q Recv-Q\n"));
+- fgets(buffer, 256, f);
++ if (fgets(buffer, 256, f))
++ /* eat line */;
+
+ while (fgets(buffer, 256, f)) {
+ buffer[9] = 0;
+@@ -527,19 +595,22 @@ static void finish_this_one(int uid, unsigned long inode, const char *timers)
+
+ if (flag_exp > 1) {
+ if (!(flag_not & FLAG_NUM_USER) && ((pw = getpwuid(uid)) != NULL))
+- printf("%-10s ", pw->pw_name);
++ printf(" %-10s ", pw->pw_name);
+ else
+- printf("%-10d ", uid);
+- printf("%-10ld ",inode);
++ printf(" %-10d ", uid);
++ printf("%-10lu",inode);
+ }
+ if (flag_prg)
+- printf("%-" PROGNAME_WIDTHs "s",prg_cache_get(inode));
++ printf(" %-" PROGNAME_WIDTHs "s",prg_cache_get(inode));
++ if (flag_selinux)
++ printf(" %-" SELINUX_WIDTHs "s",prg_cache_get_con(inode));
++
+ if (flag_opt)
+- printf("%s", timers);
++ printf(" %s", timers);
+ putchar('\n');
+ }
+
+-static void igmp_do_one(int lnr, const char *line)
++static void igmp_do_one(int lnr, const char *line,const char *prot)
+ {
+ char mcast_addr[128];
+ #if HAVE_AFINET6
+@@ -598,8 +669,8 @@ static void igmp_do_one(int lnr, const char *line)
+ ((struct sockaddr *) &mcastaddr)->sa_family);
+ return;
+ }
+- safe_strncpy(mcast_addr, ap->sprint((struct sockaddr *) &mcastaddr,
+- flag_not), sizeof(mcast_addr));
++ safe_strncpy(mcast_addr, ap->sprint((struct sockaddr *) &mcastaddr,
++ flag_not & FLAG_NUM_HOST), sizeof(mcast_addr));
+ printf("%-15s %-6d %s\n", device, refcnt, mcast_addr);
+ #endif
+ } else { /* IPV4 */
+@@ -630,14 +701,14 @@ static void igmp_do_one(int lnr, const char *line)
+ fprintf(stderr, _("warning, got bogus igmp line %d.\n"), lnr);
+ return;
+ }
+-
++
+ if ((ap = get_afntype(((struct sockaddr *) &mcastaddr)->sa_family)) == NULL) {
+ fprintf(stderr, _("netstat: unsupported address family %d !\n"),
+ ((struct sockaddr *) &mcastaddr)->sa_family);
+ return;
+ }
+- safe_strncpy(mcast_addr, ap->sprint((struct sockaddr *) &mcastaddr,
+- flag_not), sizeof(mcast_addr));
++ safe_strncpy(mcast_addr, ap->sprint((struct sockaddr *) &mcastaddr,
++ flag_not & FLAG_NUM_HOST), sizeof(mcast_addr));
+ printf("%-15s %-6d %s\n", device, refcnt, mcast_addr );
+ #endif
+ } /* IPV4 */
+@@ -646,7 +717,7 @@ static void igmp_do_one(int lnr, const char *line)
+ #if HAVE_AFX25
+ static int x25_info(void)
+ {
+- FILE *f=fopen(_PATH_PROCNET_X25, "r");
++ FILE *f=proc_fopen(_PATH_PROCNET_X25);
+ char buffer[256],dev[16];
+ int st,vs,vr,sendq,recvq,lci;
+ static char *x25_state[5]=
+@@ -657,7 +728,7 @@ static int x25_info(void)
+ "ESTABLISHED",
+ "RECOVERY"
+ };
+- if(!(f=fopen(_PATH_PROCNET_X25, "r")))
++ if(!f)
+ {
+ if (errno != ENOENT) {
+ perror(_PATH_PROCNET_X25);
+@@ -673,7 +744,8 @@ static int x25_info(void)
+ printf( _("Active X.25 sockets\n"));
+ /* IMHO, Vr/Vs is not very usefull --SF */
+ printf( _("Dest Source Device LCI State Vr/Vs Send-Q Recv-Q\n"));
+- fgets(buffer,256,f);
++ if (fgets(buffer,256,f))
++ /* eat line */;
+ while(fgets(buffer,256,f))
+ {
+ buffer[10]=0;
+@@ -690,21 +762,206 @@ static int x25_info(void)
+ vr,vs,sendq,recvq);
+ }
+ fclose(f);
+- return 0;
++ return 0;
+ }
+ #endif
+
+ static int igmp_info(void)
+ {
+ INFO_GUTS6(_PATH_PROCNET_IGMP, _PATH_PROCNET_IGMP6, "AF INET (igmp)",
+- igmp_do_one);
++ igmp_do_one, "igmp", "igmp6");
++}
++
++static int ip_parse_dots(uint32_t *addr, char const *src) {
++ unsigned a, b, c, d;
++ unsigned ret = 4-sscanf(src, "%u.%u.%u.%u", &a, &b, &c, &d);
++ *addr = htonl((a << 24)|(b << 16)|(c << 8)|d);
++ return ret;
++}
++
++static void print_ip_service(struct sockaddr_in *addr, char const *protname,
++ char *buf, unsigned size) {
++ struct aftype *ap;
++
++ if(size == 0) return;
++
++ /* print host */
++ if((ap = get_afntype(addr->sin_family)) == NULL) {
++ fprintf(stderr, _("netstat: unsupported address family %d !\n"),
++ addr->sin_family);
++ return;
++ }
++ safe_strncpy(buf, ap->sprint((struct sockaddr*)addr, flag_not), size);
++
++ /* print service */
++ if(flag_all || (flag_lst && !addr->sin_port) || (!flag_lst && addr->sin_port)) {
++ char bfs[32];
++
++ snprintf(bfs, sizeof(bfs), "%s",
++ get_sname(addr->sin_port, (char*)protname, flag_not & FLAG_NUM_PORT));
++
++ /* check if we must cut on host and/or service name */
++ {
++ unsigned const bufl = strlen(buf);
++ unsigned const bfsl = strlen(bfs);
++
++ if(bufl+bfsl+2 > size) {
++ unsigned const half = (size-2)>>1;
++ if(bufl > half) {
++ if(bfsl > half) {
++ buf[size-2-half] = '\0';
++ bfs[half+1] = '\0';
++ }
++ else buf[size-2-bfsl] = '\0';
++ }
++ else bfs[size-2-bufl] = '\0';
++ }
++ }
++ strcat(buf, ":");
++ strcat(buf, bfs);
++ }
++}
++
++/* process single SCTP endpoint */
++static void sctp_do_ept(int lnr, char const *line, const char *prot)
++{
++ struct sockaddr_in laddr, raddr;
++ unsigned uid, inode;
++
++ char l_addr[23], r_addr[23];
++
++ /* fill sockaddr_in structures */
++ {
++ unsigned lport;
++ unsigned ate;
++
++ if(lnr == 0) return;
++ if(sscanf(line, "%*X %*X %*u %*u %*u %u %u %u %n",
++ &lport, &uid, &inode, &ate) < 3) goto err;
++
++ /* decode IP address */
++ if(ip_parse_dots(&laddr.sin_addr.s_addr, line+ate)) goto err;
++ raddr.sin_addr.s_addr = htonl(0);
++ laddr.sin_family = raddr.sin_family = AF_INET;
++ laddr.sin_port = htons(lport);
++ raddr.sin_port = htons(0);
++ }
++
++ /* print IP:service to l_addr and r_addr */
++ print_ip_service(&laddr, prot, l_addr, sizeof(l_addr));
++ print_ip_service(&raddr, prot, r_addr, sizeof(r_addr));
++
++ /* Print line */
++ printf("%-4s %6d %6d %-*s %-*s %-11s",
++ prot, 0, 0,
++ (int)netmax(23,strlen(l_addr)), l_addr,
++ (int)netmax(23,strlen(r_addr)), r_addr,
++ _(tcp_state[TCP_LISTEN]));
++ finish_this_one(uid, inode, "");
++ return;
++ err:
++ fprintf(stderr, "SCTP error in line: %d\n", lnr);
++}
++
++/* process single SCTP association */
++static void sctp_do_assoc(int lnr, char const *line, const char *prot)
++{
++ struct sockaddr_in laddr, raddr;
++ unsigned long rxq, txq;
++ unsigned uid, inode;
++
++ char l_addr[23], r_addr[23];
++
++ /* fill sockaddr_in structures */
++ {
++ unsigned lport, rport;
++ unsigned ate;
++ char const *addr;
++
++ if(lnr == 0) return;
++ if(sscanf(line, "%*X %*X %*u %*u %*u %*u %*u %lu %lu %u %u %u %u %n",
++ &txq, &rxq, &uid, &inode, &lport, &rport, &ate) < 6) goto err;
++
++ /* decode IP addresses */
++ addr = strchr(line+ate, '*');
++ if(addr == 0) goto err;
++ if(ip_parse_dots(&laddr.sin_addr.s_addr, ++addr)) goto err;
++ addr = strchr(addr, '*');
++ if(addr == 0) goto err;
++ if(ip_parse_dots(&raddr.sin_addr.s_addr, ++addr)) goto err;
++
++ /* complete sockaddr_in structures */
++ laddr.sin_family = raddr.sin_family = AF_INET;
++ laddr.sin_port = htons(lport);
++ raddr.sin_port = htons(rport);
++ }
++
++ /* print IP:service to l_addr and r_addr */
++ print_ip_service(&laddr, prot, l_addr, sizeof(l_addr));
++ print_ip_service(&raddr, prot, r_addr, sizeof(r_addr));
++
++ /* Print line */
++ printf("%-4s %6ld %6ld %-*s %-*s %-11s",
++ prot, rxq, txq,
++ (int)netmax(23,strlen(l_addr)), l_addr,
++ (int)netmax(23,strlen(r_addr)), r_addr,
++ _(tcp_state[TCP_ESTABLISHED]));
++ finish_this_one(uid, inode, "");
++ return;
++ err:
++ fprintf(stderr, "SCTP error in line: %d\n", lnr);
++}
++
++static int sctp_info_epts(void) {
++ INFO_GUTS6(_PATH_PROCNET_SCTPEPTS, _PATH_PROCNET_SCTP6EPTS, "AF INET (sctp)",
++ sctp_do_ept, "sctp", "sctp6");
++}
++
++static int sctp_info_assocs(void) {
++ INFO_GUTS6(_PATH_PROCNET_SCTPASSOCS, _PATH_PROCNET_SCTP6ASSOCS, "AF INET (sctp)",
++ sctp_do_assoc, "sctp", "sctp6");
++}
++
++static int sctp_info(void) {
++ int res;
++ res = sctp_info_epts();
++ if(res) return res;
++ return sctp_info_assocs();
++}
++
++static void addr_do_one(char *buf, size_t buf_len, size_t short_len, struct aftype *ap,
++#if HAVE_AFINET6
++ struct sockaddr_in6 *addr,
++#else
++ struct sockaddr_in *addr,
++#endif
++ int port, const char *proto
++)
++{
++ const char *sport, *saddr;
++ size_t port_len, addr_len;
++
++ saddr = ap->sprint((struct sockaddr *)addr, flag_not & FLAG_NUM_HOST);
++ sport = get_sname(htons(port), proto, flag_not & FLAG_NUM_PORT);
++ addr_len = strlen(saddr);
++ port_len = strlen(sport);
++ if (!flag_wide && (addr_len + port_len > short_len)) {
++ /* Assume port name is short */
++ port_len = netmin(port_len, short_len - 4);
++ addr_len = short_len - port_len;
++ strncpy(buf, saddr, addr_len);
++ buf[addr_len] = '\0';
++ strcat(buf, ":");
++ strncat(buf, sport, port_len);
++ } else
++ snprintf(buf, buf_len, "%s:%s", saddr, sport);
+ }
+
+-static void tcp_do_one(int lnr, const char *line)
++static void tcp_do_one(int lnr, const char *line, const char *prot)
+ {
+ unsigned long rxq, txq, time_len, retr, inode;
+ int num, local_port, rem_port, d, state, uid, timer_run, timeout;
+- char rem_addr[128], local_addr[128], timers[64], buffer[1024], more[512];
++ char rem_addr[128], local_addr[128], timers[64];
+ struct aftype *ap;
+ #if HAVE_AFINET6
+ struct sockaddr_in6 localaddr, remaddr;
+@@ -719,9 +976,17 @@ static void tcp_do_one(int lnr, const char *line)
+ return;
+
+ num = sscanf(line,
+- "%d: %64[0-9A-Fa-f]:%X %64[0-9A-Fa-f]:%X %X %lX:%lX %X:%lX %lX %d %d %ld %512s\n",
++ "%d: %64[0-9A-Fa-f]:%X %64[0-9A-Fa-f]:%X %X %lX:%lX %X:%lX %lX %d %d %lu %*s\n",
+ &d, local_addr, &local_port, rem_addr, &rem_port, &state,
+- &txq, &rxq, &timer_run, &time_len, &retr, &uid, &timeout, &inode, more);
++ &txq, &rxq, &timer_run, &time_len, &retr, &uid, &timeout, &inode);
++
++ if (num < 11) {
++ fprintf(stderr, _("warning, got bogus tcp line.\n"));
++ return;
++ }
++
++ if (!flag_all && ((flag_lst && rem_port) || (!flag_lst && !rem_port)))
++ return;
+
+ if (strlen(local_addr) > 8) {
+ #if HAVE_AFINET6
+@@ -748,45 +1013,16 @@ static void tcp_do_one(int lnr, const char *line)
+ ((struct sockaddr *) &remaddr)->sa_family = AF_INET;
+ }
+
+- if (num < 11) {
+- fprintf(stderr, _("warning, got bogus tcp line.\n"));
+- return;
+- }
+ if ((ap = get_afntype(((struct sockaddr *) &localaddr)->sa_family)) == NULL) {
+ fprintf(stderr, _("netstat: unsupported address family %d !\n"),
+ ((struct sockaddr *) &localaddr)->sa_family);
+ return;
+ }
+- if (state == TCP_LISTEN) {
+- time_len = 0;
+- retr = 0L;
+- rxq = 0L;
+- txq = 0L;
+- }
+- safe_strncpy(local_addr, ap->sprint((struct sockaddr *) &localaddr,
+- flag_not), sizeof(local_addr));
+- safe_strncpy(rem_addr, ap->sprint((struct sockaddr *) &remaddr, flag_not),
+- sizeof(rem_addr));
+- if (flag_all || (flag_lst && !rem_port) || (!flag_lst && rem_port)) {
+- snprintf(buffer, sizeof(buffer), "%s",
+- get_sname(htons(local_port), "tcp",
+- flag_not & FLAG_NUM_PORT));
+-
+- if ((strlen(local_addr) + strlen(buffer)) > 22)
+- local_addr[22 - strlen(buffer)] = '\0';
+-
+- strcat(local_addr, ":");
+- strcat(local_addr, buffer);
+- snprintf(buffer, sizeof(buffer), "%s",
+- get_sname(htons(rem_port), "tcp", flag_not & FLAG_NUM_PORT));
+-
+- if ((strlen(rem_addr) + strlen(buffer)) > 22)
+- rem_addr[22 - strlen(buffer)] = '\0';
+-
+- strcat(rem_addr, ":");
+- strcat(rem_addr, buffer);
+- timers[0] = '\0';
+
++ addr_do_one(local_addr, sizeof(local_addr), 22, ap, &localaddr, local_port, "tcp");
++ addr_do_one(rem_addr, sizeof(rem_addr), 22, ap, &remaddr, rem_port, "tcp");
++
++ timers[0] = '\0';
+ if (flag_opt)
+ switch (timer_run) {
+ case 0:
+@@ -813,23 +1049,23 @@ static void tcp_do_one(int lnr, const char *line)
+ timer_run, (double) time_len / HZ, retr, timeout);
+ break;
+ }
+- printf("tcp %6ld %6ld %-23s %-23s %-12s",
+- rxq, txq, local_addr, rem_addr, _(tcp_state[state]));
++
++ printf("%-4s %6ld %6ld %-*s %-*s %-11s",
++ prot, rxq, txq, (int)netmax(23,strlen(local_addr)), local_addr, (int)netmax(23,strlen(rem_addr)), rem_addr, _(tcp_state[state]));
+
+ finish_this_one(uid,inode,timers);
+- }
+ }
+
+ static int tcp_info(void)
+ {
+ INFO_GUTS6(_PATH_PROCNET_TCP, _PATH_PROCNET_TCP6, "AF INET (tcp)",
+- tcp_do_one);
++ tcp_do_one, "tcp", "tcp6");
+ }
+
+-static void udp_do_one(int lnr, const char *line)
++static void udp_do_one(int lnr, const char *line,const char *prot)
+ {
+- char buffer[8192], local_addr[64], rem_addr[64];
+- char *udp_state, timers[64], more[512];
++ char local_addr[64], rem_addr[64];
++ char *udp_state, timers[64];
+ int num, local_port, rem_port, d, state, timer_run, uid, timeout;
+ #if HAVE_AFINET6
+ struct sockaddr_in6 localaddr, remaddr;
+@@ -845,12 +1081,16 @@ static void udp_do_one(int lnr, const char *line)
+ if (lnr == 0)
+ return;
+
+- more[0] = '\0';
+ num = sscanf(line,
+- "%d: %64[0-9A-Fa-f]:%X %64[0-9A-Fa-f]:%X %X %lX:%lX %X:%lX %lX %d %d %ld %512s\n",
++ "%d: %64[0-9A-Fa-f]:%X %64[0-9A-Fa-f]:%X %X %lX:%lX %X:%lX %lX %d %d %lu %*s\n",
+ &d, local_addr, &local_port,
+ rem_addr, &rem_port, &state,
+- &txq, &rxq, &timer_run, &time_len, &retr, &uid, &timeout, &inode, more);
++ &txq, &rxq, &timer_run, &time_len, &retr, &uid, &timeout, &inode);
++
++ if (num < 10) {
++ fprintf(stderr, _("warning, got bogus udp line.\n"));
++ return;
++ }
+
+ if (strlen(local_addr) > 8) {
+ #if HAVE_AFINET6
+@@ -877,13 +1117,7 @@ static void udp_do_one(int lnr, const char *line)
+ }
+
+ retr = 0L;
+- if (!flag_opt)
+- more[0] = '\0';
+
+- if (num < 10) {
+- fprintf(stderr, _("warning, got bogus udp line.\n"));
+- return;
+- }
+ if ((ap = get_afntype(((struct sockaddr *) &localaddr)->sa_family)) == NULL) {
+ fprintf(stderr, _("netstat: unsupported address family %d !\n"),
+ ((struct sockaddr *) &localaddr)->sa_family);
+@@ -917,24 +1151,8 @@ static void udp_do_one(int lnr, const char *line)
+
+ if (flag_all || (notnull(remaddr) && !flag_lst) || (!notnull(remaddr) && flag_lst))
+ {
+- safe_strncpy(local_addr, ap->sprint((struct sockaddr *) &localaddr,
+- flag_not), sizeof(local_addr));
+- snprintf(buffer, sizeof(buffer), "%s",
+- get_sname(htons(local_port), "udp",
+- flag_not & FLAG_NUM_PORT));
+- if ((strlen(local_addr) + strlen(buffer)) > 22)
+- local_addr[22 - strlen(buffer)] = '\0';
+- strcat(local_addr, ":");
+- strcat(local_addr, buffer);
+-
+- snprintf(buffer, sizeof(buffer), "%s",
+- get_sname(htons(rem_port), "udp", flag_not & FLAG_NUM_PORT));
+- safe_strncpy(rem_addr, ap->sprint((struct sockaddr *) &remaddr,
+- flag_not), sizeof(rem_addr));
+- if ((strlen(rem_addr) + strlen(buffer)) > 22)
+- rem_addr[22 - strlen(buffer)] = '\0';
+- strcat(rem_addr, ":");
+- strcat(rem_addr, buffer);
++ addr_do_one(local_addr, sizeof(local_addr), 22, ap, &localaddr, local_port, "udp");
++ addr_do_one(rem_addr, sizeof(rem_addr), 22, ap, &remaddr, rem_port, "udp");
+
+ timers[0] = '\0';
+ if (flag_opt)
+@@ -953,8 +1171,8 @@ static void udp_do_one(int lnr, const char *line)
+ retr, timeout);
+ break;
+ }
+- printf("udp %6ld %6ld %-23s %-23s %-12s",
+- rxq, txq, local_addr, rem_addr, udp_state);
++ printf("%-5s %6ld %6ld %-23s %-23s %-11s",
++ prot, rxq, txq, local_addr, rem_addr, udp_state);
+
+ finish_this_one(uid,inode,timers);
+ }
+@@ -963,13 +1181,19 @@ static void udp_do_one(int lnr, const char *line)
+ static int udp_info(void)
+ {
+ INFO_GUTS6(_PATH_PROCNET_UDP, _PATH_PROCNET_UDP6, "AF INET (udp)",
+- udp_do_one);
++ udp_do_one, "udp", "udp6");
+ }
+
+-static void raw_do_one(int lnr, const char *line)
++static int udplite_info(void)
+ {
+- char buffer[8192], local_addr[64], rem_addr[64];
+- char timers[64], more[512];
++ INFO_GUTS6(_PATH_PROCNET_UDPLITE, _PATH_PROCNET_UDPLITE6,
++ "AF INET (udplite)", udp_do_one, "udpl", "udpl6" );
++}
++
++static void raw_do_one(int lnr, const char *line,const char *prot)
++{
++ char local_addr[64], rem_addr[64];
++ char timers[64];
+ int num, local_port, rem_port, d, state, timer_run, uid, timeout;
+ #if HAVE_AFINET6
+ struct sockaddr_in6 localaddr, remaddr;
+@@ -985,11 +1209,15 @@ static void raw_do_one(int lnr, const char *line)
+ if (lnr == 0)
+ return;
+
+- more[0] = '\0';
+ num = sscanf(line,
+- "%d: %64[0-9A-Fa-f]:%X %64[0-9A-Fa-f]:%X %X %lX:%lX %X:%lX %lX %d %d %ld %512s\n",
++ "%d: %64[0-9A-Fa-f]:%X %64[0-9A-Fa-f]:%X %X %lX:%lX %X:%lX %lX %d %d %lu %*s\n",
+ &d, local_addr, &local_port, rem_addr, &rem_port, &state,
+- &txq, &rxq, &timer_run, &time_len, &retr, &uid, &timeout, &inode, more);
++ &txq, &rxq, &timer_run, &time_len, &retr, &uid, &timeout, &inode);
++
++ if (num < 10) {
++ fprintf(stderr, _("warning, got bogus raw line.\n"));
++ return;
++ }
+
+ if (strlen(local_addr) > 8) {
+ #if HAVE_AFINET6
+@@ -1026,34 +1254,10 @@ static void raw_do_one(int lnr, const char *line)
+ }
+ #endif
+
+- if (!flag_opt)
+- more[0] = '\0';
+-
+- if (num < 10) {
+- fprintf(stderr, _("warning, got bogus raw line.\n"));
+- return;
+- }
+-
+ if (flag_all || (notnull(remaddr) && !flag_lst) || (!notnull(remaddr) && flag_lst))
+ {
+- snprintf(buffer, sizeof(buffer), "%s",
+- get_sname(htons(local_port), "raw",
+- flag_not & FLAG_NUM_PORT));
+- safe_strncpy(local_addr, ap->sprint((struct sockaddr *) &localaddr,
+- flag_not), sizeof(local_addr));
+- if ((strlen(local_addr) + strlen(buffer)) > 22)
+- local_addr[22 - strlen(buffer)] = '\0';
+- strcat(local_addr, ":");
+- strcat(local_addr, buffer);
+-
+- snprintf(buffer, sizeof(buffer), "%s",
+- get_sname(htons(rem_port), "raw", flag_not & FLAG_NUM_PORT));
+- safe_strncpy(rem_addr, ap->sprint((struct sockaddr *) &remaddr,
+- flag_not), sizeof(rem_addr));
+- if ((strlen(rem_addr) + strlen(buffer)) > 22)
+- rem_addr[22 - strlen(buffer)] = '\0';
+- strcat(rem_addr, ":");
+- strcat(rem_addr, buffer);
++ addr_do_one(local_addr, sizeof(local_addr), 22, ap, &localaddr, local_port, "raw");
++ addr_do_one(rem_addr, sizeof(rem_addr), 22, ap, &remaddr, rem_port, "raw");
+
+ timers[0] = '\0';
+ if (flag_opt)
+@@ -1074,8 +1278,8 @@ static void raw_do_one(int lnr, const char *line)
+ retr, timeout);
+ break;
+ }
+- printf("raw %6ld %6ld %-23s %-23s %-12d",
+- rxq, txq, local_addr, rem_addr, state);
++ printf("%-4s %6ld %6ld %-23s %-23s %-11d",
++ prot, rxq, txq, local_addr, rem_addr, state);
+
+ finish_this_one(uid,inode,timers);
+ }
+@@ -1084,7 +1288,7 @@ static void raw_do_one(int lnr, const char *line)
+ static int raw_info(void)
+ {
+ INFO_GUTS6(_PATH_PROCNET_RAW, _PATH_PROCNET_RAW6, "AF INET (raw)",
+- raw_do_one);
++ raw_do_one, "raw", "raw6");
+ }
+
+ #endif
+@@ -1094,14 +1298,14 @@ static int raw_info(void)
+
+ #define HAS_INODE 1
+
+-static void unix_do_one(int nr, const char *line)
++static void unix_do_one(int nr, const char *line, const char *prot)
+ {
+ static int has = 0;
+ char path[MAXPATHLEN], ss_flags[32];
+ char *ss_proto, *ss_state, *ss_type;
+- int num, state, type, inode;
++ int num, state, type;
+ void *d;
+- unsigned long refcnt, proto, flags;
++ unsigned long refcnt, proto, flags, inode;
+
+ if (nr == 0) {
+ if (strstr(line, "Inode"))
+@@ -1109,14 +1313,14 @@ static void unix_do_one(int nr, const char *line)
+ return;
+ }
+ path[0] = '\0';
+- num = sscanf(line, "%p: %lX %lX %lX %X %X %d %s",
++ num = sscanf(line, "%p: %lX %lX %lX %X %X %lu %s",
+ &d, &refcnt, &proto, &flags, &type, &state, &inode, path);
+ if (num < 6) {
+ fprintf(stderr, _("warning, got bogus unix line.\n"));
+ return;
+ }
+ if (!(has & HAS_INODE))
+- snprintf(path,sizeof(path),"%d",inode);
++ snprintf(path,sizeof(path),"%lu",inode);
+
+ if (!flag_all) {
+ if ((state == SS_UNCONNECTED) && (flags & SO_ACCEPTCON)) {
+@@ -1195,7 +1399,7 @@ static void unix_do_one(int nr, const char *line)
+ ss_state = _("UNKNOWN");
+ }
+
+- strcpy(ss_flags, "[ ");
++ safe_strncpy(ss_flags, "[ ", sizeof(ss_flags));
+ if (flags & SO_ACCEPTCON)
+ strcat(ss_flags, "ACC ");
+ if (flags & SO_WAITDATA)
+@@ -1208,12 +1412,15 @@ static void unix_do_one(int nr, const char *line)
+ printf("%-5s %-6ld %-11s %-10s %-13s ",
+ ss_proto, refcnt, ss_flags, ss_type, ss_state);
+ if (has & HAS_INODE)
+- printf("%-6d ",inode);
++ printf("%-8lu",inode);
+ else
+- printf("- ");
++ printf("- ");
+ if (flag_prg)
+- printf("%-" PROGNAME_WIDTHs "s",(has & HAS_INODE?prg_cache_get(inode):"-"));
+- puts(path);
++ printf(" %-" PROGNAME_WIDTHs "s",(has & HAS_INODE?prg_cache_get(inode):"-"));
++ if (flag_selinux)
++ printf(" %-" SELINUX_WIDTHs "s",(has & HAS_INODE?prg_cache_get_con(inode):"-"));
++
++ printf(" %s\n", path);
+ }
+
+ static int unix_info(void)
+@@ -1229,12 +1436,13 @@ static int unix_info(void)
+ printf(_("(w/o servers)"));
+ }
+
+- printf(_("\nProto RefCnt Flags Type State I-Node"));
++ printf(_("\nProto RefCnt Flags Type State I-Node "));
+ print_progname_banner();
++ print_selinux_banner();
+ printf(_(" Path\n")); /* xxx */
+
+ {
+- INFO_GUTS(_PATH_PROCNET_UNIX, "AF UNIX", unix_do_one);
++ INFO_GUTS(_PATH_PROCNET_UNIX, "AF UNIX", unix_do_one, "unix");
+ }
+ }
+ #endif
+@@ -1256,7 +1464,7 @@ static int ax25_info(void)
+ N_("ESTABLISHED"),
+ N_("RECOVERY")
+ };
+- if (!(f = fopen(_PATH_PROCNET_AX25, "r"))) {
++ if (!(f = proc_fopen(_PATH_PROCNET_AX25))) {
+ if (errno != ENOENT) {
+ perror(_PATH_PROCNET_AX25);
+ return (-1);
+@@ -1350,18 +1558,37 @@ static int ipx_info(void)
+ char sad[50], dad[50];
+ struct sockaddr sa;
+ unsigned sport = 0, dport = 0;
+-
+- if (!(f = fopen(_PATH_PROCNET_IPX, "r"))) {
+- if (errno != ENOENT) {
+- perror(_PATH_PROCNET_IPX);
+- return (-1);
+- }
+- if (flag_arg || flag_ver)
+- ESYSNOT("netstat", "AF IPX");
+- if (flag_arg)
+- return (1);
+- else
+- return (0);
++ struct stat s;
++
++ f = proc_fopen(_PATH_PROCNET_IPX_SOCKET1);
++ if (!f) {
++ if (errno != ENOENT) {
++ perror(_PATH_PROCNET_IPX_SOCKET1);
++ return (-1);
++ }
++ f = proc_fopen(_PATH_PROCNET_IPX_SOCKET2);
++
++ /* We need to check for directory */
++ if (f) {
++ if (fstat (fileno(f), &s) == -1 ||
++ !S_ISREG(s.st_mode)) {
++ fclose(f);
++ f=NULL;
++ }
++ }
++
++ if (!f) {
++ if (errno != ENOENT) {
++ perror(_PATH_PROCNET_IPX_SOCKET2);
++ return (-1);
++ }
++ if (flag_arg || flag_ver)
++ ESYSNOT("netstat", "AF IPX");
++ if (flag_arg)
++ return (1);
++ else
++ return (0);
++ }
+ }
+ printf(_("Active IPX sockets\nProto Recv-Q Send-Q Local Address Foreign Address State")); /* xxx */
+ if (flag_exp > 1)
+@@ -1369,9 +1596,11 @@ static int ipx_info(void)
+ printf("\n");
+ if ((ap = get_afntype(AF_IPX)) == NULL) {
+ EINTERN("netstat.c", "AF_IPX missing");
++ fclose(f);
+ return (-1);
+ }
+- fgets(buf, 255, f);
++ if (fgets(buf, 255, f))
++ /* eat line */;
+
+ while (fgets(buf, 255, f) != NULL) {
+ sscanf(buf, "%s %s %lX %lX %d %d",
+@@ -1381,7 +1610,8 @@ static int ipx_info(void)
+ sscanf(st, "%X", &sport); /* net byt order */
+ sport = ntohs(sport);
+ } else {
+- EINTERN("netstat.c", _PATH_PROCNET_IPX " sport format error");
++ EINTERN("netstat.c", "ipx socket format error in source port");
++ fclose(f);
+ return (-1);
+ }
+ nc = 0;
+@@ -1391,7 +1621,8 @@ static int ipx_info(void)
+ sscanf(st, "%X", &dport); /* net byt order */
+ dport = ntohs(dport);
+ } else {
+- EINTERN("netstat.c", _PATH_PROCNET_IPX " dport format error");
++ EINTERN("netstat.c", "ipx soket format error in destination port");
++ fclose(f);
+ return (-1);
+ }
+ } else
+@@ -1413,16 +1644,16 @@ static int ipx_info(void)
+
+ /* Fetch and resolve the Source */
+ (void) ap->input(4, sad, &sa);
+- safe_strncpy(buf, ap->sprint(&sa, flag_not), sizeof(buf));
++ safe_strncpy(buf, ap->sprint(&sa, flag_not & FLAG_NUM_HOST), sizeof(buf));
+ snprintf(sad, sizeof(sad), "%s:%04X", buf, sport);
+
+ if (!nc) {
+ /* Fetch and resolve the Destination */
+ (void) ap->input(4, dad, &sa);
+- safe_strncpy(buf, ap->sprint(&sa, flag_not), sizeof(buf));
++ safe_strncpy(buf, ap->sprint(&sa, flag_not & FLAG_NUM_HOST), sizeof(buf));
+ snprintf(dad, sizeof(dad), "%s:%04X", buf, dport);
+ } else
+- strcpy(dad, "-");
++ safe_strncpy(dad, "-", sizeof(dad));
+
+ printf("IPX %6ld %6ld %-26s %-26s %-5s", txq, rxq, sad, dad, st);
+ if (flag_exp > 1) {
+@@ -1438,6 +1669,116 @@ static int ipx_info(void)
+ }
+ #endif
+
++#if HAVE_AFBLUETOOTH
++const char *bluetooth_state(int state)
++{
++ switch (state) {
++ case BT_CONNECTED:
++ return _("CONNECTED");
++ case BT_OPEN:
++ return _("OPEN");
++ case BT_BOUND:
++ return _("BOUND");
++ case BT_LISTEN:
++ return _("LISTEN");
++ case BT_CONNECT:
++ return _("CONNECT");
++ case BT_CONNECT2:
++ return _("CONNECT2");
++ case BT_CONFIG:
++ return _("CONFIG");
++ case BT_DISCONN:
++ return _("DISCONN");
++ case BT_CLOSED:
++ return _("CLOSED");
++ default:
++ return _("UNKNOWN");
++ }
++}
++
++static void l2cap_do_one(int nr, const char *line, const char *prot)
++{
++ char daddr[18], saddr[18];
++ unsigned state, psm, dcid, scid, imtu, omtu, sec_level;
++ int num;
++ const char *bt_state, *bt_sec_level;
++
++ num = sscanf(line, "%17s %17s %d %d 0x%04x 0x%04x %d %d %d",
++ daddr, saddr, &state, &psm, &dcid, &scid, &imtu, &omtu, &sec_level);
++
++ if (num < 9) {
++ fprintf(stderr, _("warning, got bogus l2cap line.\n"));
++ return;
++ }
++
++ if (flag_lst && !(state == BT_LISTEN || state == BT_BOUND))
++ return;
++ if (!(flag_all || flag_lst) && (state == BT_LISTEN || state == BT_BOUND))
++ return;
++
++ bt_state = bluetooth_state(state);
++ switch (sec_level) {
++ case BT_SECURITY_SDP:
++ bt_sec_level = _("SDP");
++ break;
++ case BT_SECURITY_LOW:
++ bt_sec_level = _("LOW");
++ break;
++ case BT_SECURITY_MEDIUM:
++ bt_sec_level = _("MEDIUM");
++ break;
++ case BT_SECURITY_HIGH:
++ bt_sec_level = _("HIGH");
++ break;
++ default:
++ bt_sec_level = _("UNKNOWN");
++ }
++
++ printf("l2cap %-17s %-17s %-9s %7d 0x%04x 0x%04x %7d %7d %-7s\n",
++ (strcmp (daddr, "00:00:00:00:00:00") == 0 ? "*" : daddr),
++ (strcmp (saddr, "00:00:00:00:00:00") == 0 ? "*" : saddr),
++ bt_state, psm, dcid, scid, imtu, omtu, bt_sec_level);
++}
++
++static int l2cap_info(void)
++{
++ printf("%-6s %-17s %-17s %-9s %7s %-6s %-6s %7s %7s %-7s\n",
++ "Proto", "Destination", "Source", "State", "PSM", "DCID", "SCID", "IMTU", "OMTU", "Security");
++ INFO_GUTS(_PATH_SYS_BLUETOOTH_L2CAP, "AF BLUETOOTH", l2cap_do_one, "l2cap");
++}
++
++static void rfcomm_do_one(int nr, const char *line, const char *prot)
++{
++ char daddr[18], saddr[18];
++ unsigned state, channel;
++ int num;
++ const char *bt_state;
++
++ num = sscanf(line, "%17s %17s %d %d", daddr, saddr, &state, &channel);
++ if (num < 4) {
++ fprintf(stderr, _("warning, got bogus rfcomm line.\n"));
++ return;
++ }
++
++ if (flag_lst && !(state == BT_LISTEN || state == BT_BOUND))
++ return;
++ if (!(flag_all || flag_lst) && (state == BT_LISTEN || state == BT_BOUND))
++ return;
++
++ bt_state = bluetooth_state(state);
++ printf("rfcomm %-17s %-17s %-9s %7d\n",
++ (strcmp (daddr, "00:00:00:00:00:00") == 0 ? "*" : daddr),
++ (strcmp (saddr, "00:00:00:00:00:00") == 0 ? "*" : saddr),
++ bt_state, channel);
++}
++
++static int rfcomm_info(void)
++{
++ printf("%-6s %-17s %-17s %-9s %7s\n", "Proto", "Destination", "Source", "State", "Channel");
++ INFO_GUTS(_PATH_SYS_BLUETOOTH_RFCOMM, "AF BLUETOOTH", rfcomm_do_one, "rfcomm");
++}
++#endif
++
+ static int iface_info(void)
+ {
+ if (skfd < 0) {
+@@ -1449,7 +1790,7 @@ static int iface_info(void)
+ }
+ if (flag_exp < 2) {
+ ife_short = 1;
+- printf(_("Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg\n"));
++ printf(_("Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg\n"));
+ }
+
+ if (for_all_interfaces(do_if_print, &flag_all) < 0) {
+@@ -1457,7 +1798,7 @@ static int iface_info(void)
+ exit(1);
+ }
+ if (flag_cnt)
+- free_interface_list();
++ if_cache_free();
+ else {
+ close(skfd);
+ skfd = -1;
+@@ -1469,16 +1810,16 @@ static int iface_info(void)
+
+ static void version(void)
+ {
+- printf("%s\n%s\n%s\n%s\n", Release, Version, Signature, Features);
++ printf("%s\n%s\n%s\n", Release, Signature, Features);
+ exit(E_VERSION);
+ }
+
+
+ static void usage(void)
+ {
+- fprintf(stderr, _("usage: netstat [-veenNcCF] [<Af>] -r netstat {-V|--version|-h|--help}\n"));
+- fprintf(stderr, _(" netstat [-vnNcaeol] [<Socket> ...]\n"));
+- fprintf(stderr, _(" netstat { [-veenNac] -i | [-cnNe] -M | -s }\n\n"));
++ fprintf(stderr, _("usage: netstat [-vWeenNcCF] [<Af>] -r netstat {-V|--version|-h|--help}\n"));
++ fprintf(stderr, _(" netstat [-vWnNcaeol] [<Socket> ...]\n"));
++ fprintf(stderr, _(" netstat { [-vWeenNac] -i | [-cnNe] -M | -s [-6tuw] }\n\n"));
+
+ fprintf(stderr, _(" -r, --route display routing table\n"));
+ fprintf(stderr, _(" -i, --interfaces display interface table\n"));
+@@ -1487,7 +1828,9 @@ static void usage(void)
+ #if HAVE_FW_MASQUERADE
+ fprintf(stderr, _(" -M, --masquerade display masqueraded connections\n\n"));
+ #endif
++
+ fprintf(stderr, _(" -v, --verbose be verbose\n"));
++ fprintf(stderr, _(" -W, --wide don't truncate IP addresses\n"));
+ fprintf(stderr, _(" -n, --numeric don't resolve names\n"));
+ fprintf(stderr, _(" --numeric-hosts don't resolve host names\n"));
+ fprintf(stderr, _(" --numeric-ports don't resolve port names\n"));
+@@ -1495,15 +1838,19 @@ static void usage(void)
+ fprintf(stderr, _(" -N, --symbolic resolve hardware names\n"));
+ fprintf(stderr, _(" -e, --extend display other/more information\n"));
+ fprintf(stderr, _(" -p, --programs display PID/Program name for sockets\n"));
++ fprintf(stderr, _(" -o, --timers display timers\n"));
+ fprintf(stderr, _(" -c, --continuous continuous listing\n\n"));
+ fprintf(stderr, _(" -l, --listening display listening server sockets\n"));
+- fprintf(stderr, _(" -a, --all, --listening display all sockets (default: connected)\n"));
+- fprintf(stderr, _(" -o, --timers display timers\n"));
++ fprintf(stderr, _(" -a, --all display all sockets (default: connected)\n"));
+ fprintf(stderr, _(" -F, --fib display Forwarding Information Base (default)\n"));
+- fprintf(stderr, _(" -C, --cache display routing cache instead of FIB\n\n"));
++ fprintf(stderr, _(" -C, --cache display routing cache instead of FIB\n"));
++#if HAVE_SELINUX
++ fprintf(stderr, _(" -Z, --context display SELinux security context for sockets\n"));
++#endif
+
+- fprintf(stderr, _(" <Socket>={-t|--tcp} {-u|--udp} {-w|--raw} {-x|--unix} --ax25 --ipx --netrom\n"));
+- fprintf(stderr, _(" <AF>=Use '-A <af>' or '--<af>'; default: %s\n"), DFLT_AF);
++ fprintf(stderr, _("\n <Socket>={-t|--tcp} {-u|--udp} {-U|--udplite} {-w|--raw} {-x|--unix}\n"));
++ fprintf(stderr, _(" --ax25 --ipx --netrom\n"));
++ fprintf(stderr, _(" <AF>=Use '-6|-4' or '-A <af>' or '--<af>'; default: %s\n"), DFLT_AF);
+ fprintf(stderr, _(" List of possible address families (which support routing):\n"));
+ print_aflist(1); /* 1 = routeable */
+ exit(E_USAGE);
+@@ -1514,7 +1861,7 @@ int main
+ (int argc, char *argv[]) {
+ int i;
+ int lop;
+- struct option longopts[] =
++ static struct option longopts[] =
+ {
+ AFTRANS_OPTS,
+ {"version", 0, 0, 'V'},
+@@ -1526,9 +1873,13 @@ int main
+ #endif
+ {"protocol", 1, 0, 'A'},
+ {"tcp", 0, 0, 't'},
++ {"sctp", 0, 0, 'S'},
+ {"udp", 0, 0, 'u'},
++ {"udplite", 0, 0, 'U'},
+ {"raw", 0, 0, 'w'},
+ {"unix", 0, 0, 'x'},
++ {"l2cap", 0, 0, '2'},
++ {"rfcomm", 0, 0, 'f'},
+ {"listening", 0, 0, 'l'},
+ {"all", 0, 0, 'a'},
+ {"timers", 0, 0, 'o'},
+@@ -1537,6 +1888,7 @@ int main
+ {"programs", 0, 0, 'p'},
+ {"verbose", 0, 0, 'v'},
+ {"statistics", 0, 0, 's'},
++ {"wide", 0, 0, 'W'},
+ {"numeric", 0, 0, 'n'},
+ {"numeric-hosts", 0, 0, '!'},
+ {"numeric-ports", 0, 0, '@'},
+@@ -1545,6 +1897,7 @@ int main
+ {"cache", 0, 0, 'C'},
+ {"fib", 0, 0, 'F'},
+ {"groups", 0, 0, 'g'},
++ {"context", 0, 0, 'Z'},
+ {NULL, 0, 0, 0}
+ };
+
+@@ -1556,7 +1909,7 @@ int main
+ getroute_init(); /* Set up AF routing support */
+
+ afname[0] = '\0';
+- while ((i = getopt_long(argc, argv, "MCFA:acdegphinNorstuVv?wxl", longopts, &lop)) != EOF)
++ while ((i = getopt_long(argc, argv, "A:CFMacdeghilnNoprsStuUvVWwx64?Z", longopts, &lop)) != EOF)
+ switch (i) {
+ case -1:
+ break;
+@@ -1600,6 +1953,9 @@ int main
+ case 'i':
+ flag_int++;
+ break;
++ case 'W':
++ flag_wide++;
++ break;
+ case 'n':
+ flag_not |= FLAG_NUM;
+ break;
+@@ -1624,6 +1980,14 @@ int main
+ case 'o':
+ flag_opt++;
+ break;
++ case '6':
++ if (aftrans_opt("inet6"))
++ exit(1);
++ break;
++ case '4':
++ if (aftrans_opt("inet"))
++ exit(1);
++ break;
+ case 'V':
+ version();
+ /*NOTREACHED */
+@@ -1633,21 +1997,45 @@ int main
+ case 'r':
+ flag_rou++;
+ break;
+-
+ case 't':
+ flag_tcp++;
+ break;
+-
++ case 'S':
++ flag_sctp++;
++ break;
+ case 'u':
+ flag_udp++;
+ break;
++ case 'U':
++ flag_udplite++;
++ break;
+ case 'w':
+ flag_raw++;
+ break;
++ case '2':
++ flag_l2cap++;
++ break;
++ case 'f':
++ flag_rfcomm++;
++ break;
+ case 'x':
+ if (aftrans_opt("unix"))
+ exit(1);
+ break;
++ case 'Z':
++#if HAVE_SELINUX
++ if (is_selinux_enabled() <= 0) {
++ fprintf(stderr, _("SELinux is not enabled on this machine.\n"));
++ exit(1);
++ }
++ flag_prg++;
++ flag_selinux++;
++#else
++ fprintf(stderr, _("SELinux is not enabled for this application.\n"));
++ exit(1);
++#endif
++
++ break;
+ case '?':
+ case 'h':
+ usage();
+@@ -1658,46 +2046,71 @@ int main
+ if (flag_int + flag_rou + flag_mas + flag_sta > 1)
+ usage();
+
+- if ((flag_inet || flag_inet6 || flag_sta) && !(flag_tcp || flag_udp || flag_raw))
+- flag_tcp = flag_udp = flag_raw = 1;
++ if ((flag_inet || flag_inet6 || flag_sta) &&
++ !(flag_tcp || flag_sctp || flag_udp || flag_udplite || flag_raw))
++ flag_tcp = flag_sctp = flag_udp = flag_udplite = flag_raw = 1;
+
+- if ((flag_tcp || flag_udp || flag_raw || flag_igmp) && !(flag_inet || flag_inet6))
++ if ((flag_tcp || flag_sctp || flag_udp || flag_udplite || flag_raw || flag_igmp) &&
++ !(flag_inet || flag_inet6))
+ flag_inet = flag_inet6 = 1;
+
+- flag_arg = flag_tcp + flag_udp + flag_raw + flag_unx + flag_ipx
+- + flag_ax25 + flag_netrom + flag_igmp + flag_x25;
++ if (flag_bluetooth && !(flag_l2cap || flag_rfcomm))
++ flag_l2cap = flag_rfcomm = 1;
++
++ flag_arg = flag_tcp + flag_sctp + flag_udplite + flag_udp + flag_raw + flag_unx
++ + flag_ipx + flag_ax25 + flag_netrom + flag_igmp + flag_x25 + flag_rose
++ + flag_l2cap + flag_rfcomm;
+
+ if (flag_mas) {
+ #if HAVE_FW_MASQUERADE && HAVE_AFINET
+ #if MORE_THAN_ONE_MASQ_AF
+ if (!afname[0])
+- strcpy(afname, DFLT_AF);
++ safe_strncpy(afname, DFLT_AF, sizeof(afname));
+ #endif
+ for (;;) {
+ i = ip_masq_info(flag_not & FLAG_NUM_HOST,
+ flag_not & FLAG_NUM_PORT, flag_exp);
+ if (i || !flag_cnt)
+ break;
+- sleep(1);
++ wait_continous();
+ }
+ #else
+- ENOSUPP("netstat.c", "FW_MASQUERADE");
++ ENOSUPP("netstat", "FW_MASQUERADE");
+ i = -1;
+ #endif
+ return (i);
+ }
+
+ if (flag_sta) {
+- inittab();
+- parsesnmp(flag_raw, flag_tcp, flag_udp);
+- exit(0);
++ if (!afname[0])
++ safe_strncpy(afname, DFLT_AF, sizeof(afname));
++
++ if (!strcmp(afname, "inet")) {
++#if HAVE_AFINET
++ inittab();
++ parsesnmp(flag_raw, flag_tcp, flag_udp);
++#else
++ ENOSUPP("netstat", "AF INET");
++#endif
++ } else if(!strcmp(afname, "inet6")) {
++#if HAVE_AFINET6
++ inittab6();
++ parsesnmp6(flag_raw, flag_tcp, flag_udp);
++#else
++ ENOSUPP("netstat", "AF INET6");
++#endif
++ } else {
++ printf(_("netstat: No statistics support for specified address family: %s\n"), afname);
++ exit(1);
++ }
++ exit(0);
+ }
+-
++
+ if (flag_rou) {
+ int options = 0;
+
+ if (!afname[0])
+- strcpy(afname, DFLT_AF);
++ safe_strncpy(afname, DFLT_AF, sizeof(afname));
+
+ if (flag_exp == 2)
+ flag_exp = 1;
+@@ -1712,7 +2125,7 @@ int main
+ i = route_info(afname, options);
+ if (i || !flag_cnt)
+ break;
+- sleep(1);
++ wait_continous();
+ }
+ return (i);
+ }
+@@ -1721,12 +2134,12 @@ int main
+ i = iface_info();
+ if (!flag_cnt || i)
+ break;
+- sleep(1);
++ wait_continous();
+ }
+ return (i);
+ }
+ for (;;) {
+- if (!flag_arg || flag_tcp || flag_udp || flag_raw) {
++ if (!flag_arg || flag_tcp || flag_sctp || flag_udp || flag_udplite || flag_raw) {
+ #if HAVE_AFINET
+ prg_cache_load();
+ printf(_("Active Internet connections ")); /* xxx */
+@@ -1743,6 +2156,7 @@ int main
+ if (flag_exp > 1)
+ printf(_(" User Inode "));
+ print_progname_banner();
++ print_selinux_banner();
+ if (flag_opt)
+ printf(_(" Timer")); /* xxx */
+ printf("\n");
+@@ -1759,11 +2173,25 @@ int main
+ if (i)
+ return (i);
+ }
++
++ if (!flag_arg || flag_sctp) {
++ i = sctp_info();
++ if (i)
++ return (i);
++ }
++
+ if (!flag_arg || flag_udp) {
+ i = udp_info();
+ if (i)
+ return (i);
+ }
++
++ if (!flag_arg || flag_udplite) {
++ i = udplite_info();
++ if (i)
++ return (i);
++ }
++
+ if (!flag_arg || flag_raw) {
+ i = raw_info();
+ if (i)
+@@ -1845,9 +2273,55 @@ int main
+ }
+ #endif
+ }
++ if (!flag_arg || flag_rose) {
++#if 0 && HAVE_AFROSE
++ i = rose_info();
++ if (i)
++ return (i);
++#else
++ if (flag_arg) {
++ i = 1;
++ ENOSUPP("netstat", "AF ROSE");
++ }
++#endif
++ }
++
++ if (!flag_arg || flag_l2cap || flag_rfcomm) {
++#if HAVE_AFBLUETOOTH
++ printf(_("Active Bluetooth connections ")); /* xxx */
++
++ if (flag_all)
++ printf(_("(servers and established)"));
++ else {
++ if (flag_lst)
++ printf(_("(only servers)"));
++ else
++ printf(_("(w/o servers)"));
++ }
++ printf("\n");
++#else
++ if (flag_arg) {
++ i = 1;
++ ENOSUPP("netstat", "AF BLUETOOTH");
++ }
++#endif
++ }
++#if HAVE_AFBLUETOOTH
++ if (!flag_arg || flag_l2cap) {
++ i = l2cap_info();
++ if (i)
++ return (i);
++ }
++ if (!flag_arg || flag_rfcomm) {
++ i = rfcomm_info();
++ if (i)
++ return (i);
++ }
++#endif
++
+ if (!flag_cnt || i)
+ break;
+- sleep(1);
++ wait_continous();
+ prg_cache_clear();
+ }
+ return (i);
+diff --git a/plipconfig.c b/plipconfig.c
+index 1f972a7..86fa890 100644
+--- a/plipconfig.c
++++ b/plipconfig.c
+@@ -4,7 +4,7 @@
+ Copyright (c) 1994 John Paul Morrison (VE7JPM).
+
+ version 0.2
+-
++
+ Changed by Alan Cox, to reflect the way SIOCDEVPRIVATE is meant to work
+ and for the extra parameter added by Niibe.
+
+@@ -42,31 +42,27 @@
+ #include "intl.h"
+ #include "net-support.h"
+ #include "version.h"
++#include "util.h"
+
+-int opt_a = 0;
+-int opt_i = 0;
+-int opt_v = 0;
+ int skfd = -1;
+
+ struct ifreq ifr;
+ struct plipconf *plip;
+
+-char *Release = RELEASE,
+- *Version = "plipconfig 0.2",
+- *Signature = "John Paul Morrison, Alan Cox et al.";
++static char *Release = RELEASE, *Signature = "John Paul Morrison, Alan Cox et al.";
+
+ static void version(void)
+ {
+- printf("%s\n%s\n%s\n", Release, Version, Signature);
++ printf("%s\n%s\n", Release, Signature);
+ exit(E_VERSION);
+ }
+
+ void usage(void)
+ {
+- fprintf(stderr, _("Usage: plipconfig [-a] [-i] [-v] interface\n"));
+- fprintf(stderr, _(" [nibble NN] [trigger NN]\n"));
++ fprintf(stderr, _("Usage: plipconfig interface [nibble NN] [trigger NN]\n"));
+ fprintf(stderr, _(" plipconfig -V | --version\n"));
+- exit(-1);
++ fprintf(stderr, _(" plipconfig -h | --help\n"));
++ exit(E_USAGE);
+ }
+
+ void print_plip(void)
+@@ -93,12 +89,10 @@ int main(int argc, char **argv)
+ argc--;
+ argv++;
+ while (argv[0] && *argv[0] == '-') {
+- if (!strcmp(*argv, "-a"))
+- opt_a = 1;
+- if (!strcmp(*argv, "-v"))
+- opt_v = 1;
+ if (!strcmp(*argv, "-V") || !strcmp(*argv, "--version"))
+ version();
++ else
++ usage();
+ argv++;
+ argc--;
+ }
+@@ -107,7 +101,7 @@ int main(int argc, char **argv)
+ usage();
+
+ spp = argv;
+- strncpy(ifr.ifr_name, *spp++, IFNAMSIZ);
++ safe_strncpy(ifr.ifr_name, *spp++, IFNAMSIZ);
+ plip=(struct plipconf *)&ifr.ifr_data;
+
+ plip->pcmd = PLIP_GET_TIMEOUT; /* get current settings for device */
+diff --git a/po/Makefile b/po/Makefile
+index 0fdf82d..c7f27fb 100644
+--- a/po/Makefile
++++ b/po/Makefile
+@@ -3,16 +3,24 @@ INSTALL_PROGRAM= ${INSTALL}
+ INSTALL_DATA= ${INSTALL} -m 644
+ INSTALLNLSDIR=${BASEDIR}/usr/share/locale
+
+-TUPDATE = tupdate
++TUPDATE = msgmerge
+
+ NLSPACKAGE = net-tools
+
+ -include ../config.make
++ALL_POS = $(wildcard *.po)
++ALL_LANGS = $(ALL_POS:%.po=%)
++ALL_CATALOGS = $(ALL_LANGS:%=%.mo)
+ ifeq ($(I18N),1)
+-CATALOGS = de.mo fr.mo pt_BR.mo et_EE.mo cs.mo
++ifeq ($(LINGUAS),)
++LANGS = $(ALL_LANGS)
+ else
+-CATALOGS =
++LANGS = $(filter $(LINGUAS),$(ALL_LANGS))
+ endif
++else
++LANGS =
++endif
++CATALOGS = $(LANGS:%=%.mo)
+
+ POTFILES=../arp.c ../hostname.c ../ifconfig.c ../netstat.c ../rarp.c \
+ ../route.c ../plipconfig.c ../iptunnel.c ../statistics.c \
+@@ -44,12 +52,12 @@ $(NLSPACKAGE).pot: $(POTFILES)
+
+ update-po: Makefile
+ $(MAKE) $(NLSPACKAGE).pot
+- catalogs='$(CATALOGS)'; \
+- for cat in $$catalogs; do \
+- lang=`echo $$cat | sed 's/.mo//'`; \
++ langs='$(ALL_LANGS)'; \
++ for lang in $$langs; do \
++ cat=$$lang.mo; \
+ mv $$lang.po $$lang.old.po; \
+ echo "$$lang:"; \
+- if $(TUPDATE) $(NLSPACKAGE).pot $$lang.old.po > $$lang.po; then \
++ if $(TUPDATE) $$lang.old.po $(NLSPACKAGE).pot > $$lang.po; then \
+ rm -f $$lang.old.po; \
+ else \
+ echo "tupdate for $$cat failed!"; \
+@@ -61,18 +69,19 @@ update-po: Makefile
+ clean:
+ rm -f *mo
+
++dist: $(ALL_CATALOGS)
++
+ distclean: clean
+ rm -f .depend Makefile
+
+ depend:
+
+ install: $(CATALOGS)
+- catalogs='$(CATALOGS)'; \
+- for n in $$catalogs; do \
+- l=`basename $$n .mo`; \
++ langs='$(LANGS)'; \
++ for l in $$langs; do \
+ $(INSTALL) -m 755 -d $(INSTALLNLSDIR)/$$l; \
+ $(INSTALL) -m 755 -d $(INSTALLNLSDIR)/$$l/LC_MESSAGES; \
+- $(INSTALL) -m 644 $$n $(INSTALLNLSDIR)/$$l/LC_MESSAGES/net-tools.mo; \
++ $(INSTALL) -m 644 $$l.mo $(INSTALLNLSDIR)/$$l/LC_MESSAGES/net-tools.mo; \
+ done
+
+ %.mo: %.po
+diff --git a/po/cs.po b/po/cs.po
+index b4b66a1..c1d6a8a 100644
+--- a/po/cs.po
++++ b/po/cs.po
+@@ -1,359 +1,385 @@
+ # Czech translation of net-tools
+ # Copyright (C) 1999 Free Software Foundation, Inc.
+-# Jiøí Pavlovský <pavlovsk@ffcuni.cz>, 1999.
++# Jiří Pavlovský <pavlovsk@ffcuni.cz>, 1999.
++# Petr Pisar <petr.pisar@atlas.cz>, 2009.
+ #
+ msgid ""
+ msgstr ""
+-"Project-Id-Version: net-tools-1.51\n"
+-"POT-Creation-Date: 2000-02-14 02:31+0100\n"
+-"PO-Revision-Date: 1999-08-29 23:20+0200\n"
+-"Last-Translator: Jiøí Pavlovský <pavlovsk@ff.cuni.cz>\n"
+-"Language-Team: Czech <cs@li.org>\n"
++"Project-Id-Version: net-tools cvs-20090825\n"
++"Report-Msgid-Bugs-To: \n"
++"POT-Creation-Date: 2009-08-25 18:34+0200\n"
++"PO-Revision-Date: 2009-08-26 22:18+0200\n"
++"Last-Translator: Petr Pisar <petr.pisar@atlas.cz>\n"
++"Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n"
+ "MIME-Version: 1.0\n"
+-"Content-Type: text/plain; charset=iso-8859-2\n"
++"Content-Type: text/plain; charset=UTF-8\n"
+ "Content-Transfer-Encoding: 8bit\n"
+
+-#: ../arp.c:110 ../arp.c:269
++#: ../arp.c:112 ../arp.c:279
++#, c-format
+ msgid "arp: need host name\n"
+-msgstr "arp: je tøeba jméno poèítaèe\n"
++msgstr "arp: je tÅ™eba jméno poÄítaÄe\n"
+
+-#: ../arp.c:207 ../arp.c:221
++#: ../arp.c:215 ../arp.c:230
+ #, c-format
+ msgid "No ARP entry for %s\n"
+-msgstr "Pro %s neexistuje ARP polo¾ka\n"
++msgstr "Pro %s neexistuje ARP položka\n"
+
+-#: ../arp.c:239
++#: ../arp.c:248
+ #, c-format
+ msgid "arp: cant get HW-Address for `%s': %s.\n"
+ msgstr "arp: HW adresu `%s' nelze zjistit: %s\n"
+
+-#: ../arp.c:243
++#: ../arp.c:252
++#, c-format
+ msgid "arp: protocol type mismatch.\n"
+-msgstr "arp: chybnì zadaný typ protokolu\n"
++msgstr "arp: chybně zadaný typ protokolu\n"
+
+-#: ../arp.c:252
++#: ../arp.c:261
+ #, c-format
+ msgid "arp: device `%s' has HW address %s `%s'.\n"
+-msgstr "arp: zaøízení `%s' má Hw adresu %s `%s'.\n"
++msgstr "arp: zařízení `%s' má Hw adresu %s `%s'.\n"
+
+-#: ../arp.c:282
++#: ../arp.c:293
++#, c-format
+ msgid "arp: need hardware address\n"
+-msgstr "arp: je tøeba hardwarová adresa\n"
++msgstr "arp: je třeba hardwarová adresa\n"
+
+-#: ../arp.c:290
++#: ../arp.c:301
++#, c-format
+ msgid "arp: invalid hardware address\n"
+-msgstr "arp: nesprávná hardwarová adresa\n"
++msgstr "arp: nesprávná hardwarová adresa\n"
+
+-#: ../arp.c:387
++#: ../arp.c:398
+ #, c-format
+ msgid "arp: cannot open etherfile %s !\n"
+-msgstr "arp: databázi ethernetových adres %s nelze otevøít!\n"
++msgstr "arp: databázi ethernetových adres %s nelze otevřít!\n"
+
+-#: ../arp.c:403
++#: ../arp.c:414
+ #, c-format
+ msgid "arp: format error on line %u of etherfile %s !\n"
+-msgstr "arp: syntaktická chyba na øádku %u databáze ethernetových adres %s!\n"
++msgstr "arp: syntaktická chyba na řádku %u databáze ethernetových adres %s!\n"
+
+-#: ../arp.c:416
++#: ../arp.c:427
+ #, c-format
+ msgid "arp: cannot set entry on line %u of etherfile %s !\n"
+ msgstr ""
+-"arp: polo¾ku na øádku %u databáze ethernetových adres %s nelze nastavit!\n"
++"arp: položku na řádku %u databáze ethernetových adres %s nelze nastavit!\n"
++
++#: ../arp.c:448
++#, c-format
++msgid ""
++"Address HWtype HWaddress Flags Mask "
++"Iface\n"
++msgstr ""
++"Adresa HWtyp HWadresa Příz. Maska "
++"Rozhr\n"
+
+-#: ../arp.c:437
+-msgid "Address\t\t\tHWtype\tHWaddress\t Flags Mask\t\t Iface\n"
+-msgstr "Adresa\t\t\t HWtyp\t HWadresa\t Pøíz Maska\t\t Rozhraní\n"
++#: ../arp.c:476
++msgid "<from_interface>"
++msgstr "<z_rozhraní>"
+
+-#: ../arp.c:467
++#: ../arp.c:478
+ msgid "(incomplete)"
+-msgstr "(nekompletní)"
++msgstr "(nekompletní)"
+
+-#: ../arp.c:484
++#: ../arp.c:495
+ #, c-format
+ msgid "%s (%s) at "
+ msgstr "%s (%s) na "
+
+-#: ../arp.c:490
++#: ../arp.c:501
++#, c-format
+ msgid "<incomplete> "
+-msgstr "<nekompletní>"
++msgstr "<nekompletní>"
+
+-#: ../arp.c:496
++#: ../arp.c:507
+ #, c-format
+ msgid "netmask %s "
+-msgstr "sí»ová maska %s "
++msgstr "síťová maska %s "
+
+-#: ../arp.c:513
++#: ../arp.c:524
+ #, c-format
+ msgid "on %s\n"
+ msgstr "na %s\n"
+
+-#: ../arp.c:592
++#: ../arp.c:605
+ #, c-format
+ msgid "Entries: %d\tSkipped: %d\tFound: %d\n"
+-msgstr "Polo¾ky: %d\tVynecháno: %d\tNalezeno: %d\n"
++msgstr "Položky: %d\tVynecháno: %d\tNalezeno: %d\n"
+
+-#: ../arp.c:596
++#: ../arp.c:609
+ #, c-format
+ msgid "%s (%s) -- no entry\n"
+-msgstr "%s (%s) -- ¾ádná polo¾ka\n"
++msgstr "%s (%s) -- žádná položka\n"
+
+-#: ../arp.c:598
++#: ../arp.c:611
+ #, c-format
+ msgid "arp: in %d entries no match found.\n"
+-msgstr "arp: ¾ádná z polo¾ek (%d) nevyhovuje.\n"
++msgstr "arp: žádná z položek (%d) nevyhovuje.\n"
+
+-#: ../arp.c:613
++#: ../arp.c:626
++#, c-format
+ msgid ""
+ "Usage:\n"
+ " arp [-vn] [<HW>] [-i <if>] [-a] [<hostname>] <-Display ARP "
+ "cache\n"
+ msgstr ""
+-"Pou¾ití:\n"
+-" arp [-vn] [<HW>] [-i <if> [-a] [<poèítaè>] <-Zobrazí ARP "
++"Použití:\n"
++" arp [-vn] [<HW>] [-i <rozhraní>] [-a] [<poÄítaÄ>] <-Zobrazí ARP "
+ "cache\n"
+
+-#: ../arp.c:614
++#: ../arp.c:627
++#, c-format
+ msgid ""
+-" arp [-v] [-i <if>] -d <hostname> [pub][nopub] <-Delete ARP "
++" arp [-v] [-i <if>] -d <host> [pub] <-Delete ARP "
+ "entry\n"
+ msgstr ""
+-" arp [-v] [-i <if>] -d <poèítaè> [pub][nopub] <-Sma¾e polo¾ku "
++" arp [-v] [-i <rozhraní>] -d <poÄítaÄ> [pub] <-Smaže položku "
+ "ARP\n"
+
+-#: ../arp.c:615
+-#, fuzzy
++#: ../arp.c:628
++#, c-format
+ msgid ""
+-" arp [-vnD] [<HW>] [-i <if>] -f [<filename>] <-Add entry from "
++" arp [-vnD] [<HW>] [-i <if>] -f [<filename>] <-Add entry from "
+ "file\n"
+ msgstr ""
+-" arp [-vnD] [<HW>] [-i <if>] -f <soubor> <-Pøidá polo¾ku "
+-"ze\n"
+-" souboru\n"
++" arp [-vnD] [<HW>] [-i <rozhraní>] -f [<soubor>] <-Přidá položku ze "
++"souboru\n"
+
+-#: ../arp.c:616
++#: ../arp.c:629
++#, c-format
+ msgid ""
+-" arp [-v] [<HW>] [-i <if>] -s <hostname> <hwaddr> [temp][nopub] <-Add "
++" arp [-v] [<HW>] [-i <if>] -s <host> <hwaddr> [temp] <-Add "
+ "entry\n"
+ msgstr ""
+-" arp [-v] [<HW> [-i <if> -s <poèítaè> <hwadr> [temp][nopub] <-Pøidá "
+-"polo¾ku\n"
+-
+-#: ../arp.c:617
+-msgid ""
+-" arp [-v] [<HW>] [-i <if>] -s <hostname> <hwaddr> [netmask <nm>] pub "
+-"<-''-\n"
+-msgstr ""
+-" arp [-v] [<HW>] [-i <if>] -s <soubor> <hwadr> [sí»mask <èís>] <-''-\n"
++" arp [-v] [<HW>] [-i <rozhraní>] -s <poÄítaÄ> <hwadr> [temp] <-PÅ™idá "
++"položku\n"
+
+-#: ../arp.c:618
++#: ../arp.c:630
++#, c-format
+ msgid ""
+-" arp [-v] [<HW>] [-i <if>] -Ds <hostname> <if> [netmask <nm>] pub "
++" arp [-v] [<HW>] [-i <if>] -Ds <host> <if> [netmask <nm>] pub "
+ "<-''-\n"
+ "\n"
+ msgstr ""
+-" arp [-v] [<HW> [-i <if> -Ds <poèítaè> <if> [sí»mask <èís>] pub "
+-"<-''-\n"
++" arp [-v] [<HW>] [-i <rozhraní>] -Ds <poÄítaÄ> <rozhraní> [síťmask <Äís>] "
++"pub\n"
++" <-Totéž\n"
+
+-#: ../arp.c:620
++#: ../arp.c:632
++#, c-format
+ msgid ""
+ " -a display (all) hosts in alternative (BSD) "
+ "style\n"
+ msgstr ""
+-" -a zobrazí jmna v¹ech poèítaèù alternativním\n"
+-" (BSD) zpùsobem\n"
++" -a zobrazí jména vÅ¡ech poÄítaÄů alternativním\n"
++" (BSD) způsobem\n"
+
+-#: ../arp.c:621
++#: ../arp.c:633
++#, c-format
+ msgid " -s, --set set a new ARP entry\n"
+-msgstr " -s, --set nastaví novou ARP polo¾ku\n"
++msgstr " -s, --set nastaví novou ARP položku\n"
+
+-#: ../arp.c:622
++#: ../arp.c:634
++#, c-format
+ msgid " -d, --delete delete a specified entry\n"
+-msgstr " -d, --delete sma¾e zadanou ARP polo¾ku\n"
++msgstr " -d, --delete smaže zadanou ARP položku\n"
+
+-#: ../arp.c:623 ../netstat.c:1436 ../route.c:85
++#: ../arp.c:635 ../netstat.c:1520 ../route.c:86
++#, c-format
+ msgid " -v, --verbose be verbose\n"
+ msgstr ""
+-" -v, --verbose bude vypisovat podrobné zprávy\n"
+-" o èinnosti\n"
++" -v, --verbose bude vypisovat podrobné zprávy o Äinnosti\n"
+
+-#: ../arp.c:624 ../netstat.c:1437 ../route.c:86
+-msgid " -n, --numeric dont resolve names\n"
+-msgstr ""
+-" -n, --numeric nebude pøevádìt èíselné adresy\n"
+-" na kanonická jména\n"
++#: ../arp.c:636 ../netstat.c:1522 ../route.c:87
++#, c-format
++msgid " -n, --numeric don't resolve names\n"
++msgstr " -n, --numeric nebude převádět jména\n"
+
+-#: ../arp.c:625
++#: ../arp.c:637
++#, c-format
+ msgid ""
+ " -i, --device specify network interface (e.g. eth0)\n"
+-msgstr " -i, --device zadává sí»ové rozhraní (napø. eth0)\n"
++msgstr " -i, --device zadává síťové rozhraní (např. eth0)\n"
+
+-#: ../arp.c:626
++#: ../arp.c:638
++#, c-format
+ msgid " -D, --use-device read <hwaddr> from given device\n"
+-msgstr " -D, --use-device ète <hwadr> ze zadaného zaøízení\n"
++msgstr " -D, --use-device Äte <hwadr> ze zadaného zařízení\n"
+
+-#: ../arp.c:627
+-#, fuzzy
++#: ../arp.c:639
++#, c-format
+ msgid " -A, -p, --protocol specify protocol family\n"
+-msgstr " -r, --route vypí¹e smìrovací tabulku\n"
++msgstr " -A, -p, --protocol urÄuje rodinu protokolů\n"
+
+-#: ../arp.c:628
+-#, fuzzy
++#: ../arp.c:640
++#, c-format
+ msgid ""
+-" -f, --file read new entries from file or from "
+-"/etc/ethers\n"
++" -f, --file read new entries from file or from /etc/"
++"ethers\n"
+ "\n"
+ msgstr ""
+-" -f, --file ète nové polo¾ky ze souboru\n"
+-"\n"
++" -f, --file Äte nové položky ze souboru nebo z /etc/"
++"ethers\n"
+
+-#: ../arp.c:630 ../rarp.c:181
++#: ../arp.c:642 ../rarp.c:183
+ #, c-format
+ msgid " <HW>=Use '-H <hw>' to specify hardware address type. Default: %s\n"
+ msgstr ""
+-" <HW>=Pou¾ijte '-H <hw> pro zadání hardwarového typu adresy.\n"
+-" Implicitnì: %s\n"
++" <HW>=Použijte '-H <hw> pro zadání hardwarového typu adresy.\n"
++" ImplicitnÄ›: %s\n"
+
+-#: ../arp.c:631 ../rarp.c:182
++#: ../arp.c:643 ../rarp.c:184
++#, c-format
+ msgid " List of possible hardware types (which support ARP):\n"
+-msgstr " Seznam mo¾ných hardwarových typù (podporujících ARP):\n"
++msgstr " Seznam možných hardwarových typů (podporujících ARP):\n"
+
+-#: ../arp.c:664
++#: ../arp.c:677 ../arp.c:762
+ #, c-format
+ msgid "%s: hardware type not supported!\n"
+-msgstr "hardwarový typ %s není podporován!\n"
++msgstr "hardwarový typ %s není podporován!\n"
+
+-#: ../arp.c:668
++#: ../arp.c:681
+ #, c-format
+ msgid "%s: address family not supported!\n"
+-msgstr "tøída adres %s není podporována!\n"
++msgstr "třída adres %s není podporována!\n"
+
+-#: ../arp.c:703
++#: ../arp.c:716
++#, c-format
+ msgid "arp: -N not yet supported.\n"
+-msgstr "arp: pøepínaè -N není zatím podporován\n"
++msgstr "arp: pÅ™epínaÄ -N není zatím podporován\n"
+
+-#: ../arp.c:713
++#: ../arp.c:726
+ #, c-format
+ msgid "arp: %s: unknown address family.\n"
+-msgstr "arp: neznámá tøída adres %s.\n"
++msgstr "arp: neznámá třída adres %s.\n"
+
+-#: ../arp.c:722
++#: ../arp.c:735
+ #, c-format
+ msgid "arp: %s: unknown hardware type.\n"
+-msgstr "arp: neznámý hardwarový typ %s.\n"
++msgstr "arp: neznámý hardwarový typ %s.\n"
+
+-#: ../arp.c:741
++#: ../arp.c:754
+ #, c-format
+ msgid "arp: %s: kernel only supports 'inet'.\n"
+-msgstr "arp: %s: jádro podporuje pouze 'inet'.\n"
++msgstr "arp: %s: jádro podporuje pouze 'inet'.\n"
+
+-#: ../arp.c:746
++#: ../arp.c:767
+ #, c-format
+ msgid "arp: %s: hardware type without ARP support.\n"
+-msgstr "arp: hardwarový typ %s nepodporuje ARP.\n"
++msgstr "arp: hardwarový typ %s nepodporuje ARP.\n"
+
+-#: ../hostname.c:69
++#: ../hostname.c:71
+ #, c-format
+ msgid "Setting nodename to `%s'\n"
+-msgstr "Nastavuji jméno uzlu na `%s'\n"
++msgstr "Nastavuji jméno uzlu na `%s'\n"
+
+-#: ../hostname.c:74
++#: ../hostname.c:76
+ #, c-format
+ msgid "%s: you must be root to change the node name\n"
+-msgstr "%s: jméno uzlu mù¾e zmìnit pouze superu¾ivatel\n"
++msgstr "%s: jméno uzlu může změnit pouze superuživatel\n"
+
+-#: ../hostname.c:77 ../hostname.c:97 ../hostname.c:116
++#: ../hostname.c:79 ../hostname.c:100 ../hostname.c:118
+ #, c-format
+ msgid "%s: name too long\n"
+-msgstr "jméno %s je pøíli¹ dlouhé\n"
++msgstr "jméno %s je příliš dlouhé\n"
+
+-#: ../hostname.c:89
++#: ../hostname.c:92
+ #, c-format
+ msgid "Setting hostname to `%s'\n"
+-msgstr "Nastavuji jméno poèítaèe na `%s'\n"
++msgstr "Nastavuji jméno poÄítaÄe na `%s'\n"
+
+-#: ../hostname.c:94
++#: ../hostname.c:97
+ #, c-format
+ msgid "%s: you must be root to change the host name\n"
+-msgstr "%s: jméno poèítaèe mù¾e zmìnit pouze superu¾ivatel\n"
++msgstr "%s: jméno poÄítaÄe může zmÄ›nit pouze superuživatel\n"
+
+-#: ../hostname.c:108
++#: ../hostname.c:110
+ #, c-format
+ msgid "Setting domainname to `%s'\n"
+-msgstr "Nastavuji jméno domény na `%s'\n"
++msgstr "Nastavuji jméno domény na `%s'\n"
+
+-#: ../hostname.c:113
++#: ../hostname.c:115
+ #, c-format
+ msgid "%s: you must be root to change the domain name\n"
+-msgstr "%s: jméno domény mù¾e zmìnit pouze superu¾ivatel\n"
++msgstr "%s: jméno domény může změnit pouze superuživatel\n"
+
+-#: ../hostname.c:131
++#: ../hostname.c:132
+ #, c-format
+ msgid "Resolving `%s' ...\n"
+-msgstr "Vyhledávám `%s' ...\n"
++msgstr "Vyhledávám `%s' ...\n"
+
+-#: ../hostname.c:137
++#: ../hostname.c:138
+ #, c-format
+ msgid "Result: h_name=`%s'\n"
+-msgstr "Výsledek: h_name=`%s'\n"
++msgstr "Výsledek: h_name=`%s'\n"
+
+-#: ../hostname.c:142
++#: ../hostname.c:143
+ #, c-format
+ msgid "Result: h_aliases=`%s'\n"
+-msgstr "Výsledek: h_aliases=`%s'\n"
++msgstr "Výsledek: h_aliases=`%s'\n"
+
+-#: ../hostname.c:147
++#: ../hostname.c:148
+ #, c-format
+ msgid "Result: h_addr_list=`%s'\n"
+-msgstr "Výsledek: h_addr_list=`%s'\n"
++msgstr "Výsledek: h_addr_list=`%s'\n"
+
+ #: ../hostname.c:209
+ #, c-format
+ msgid "%s: can't open `%s'\n"
+-msgstr "%s: `%s' nelze otevøít\n"
++msgstr "%s: `%s' nelze otevřít\n"
+
+ #: ../hostname.c:223
++#, c-format
+ msgid "Usage: hostname [-v] {hostname|-F file} set hostname (from file)\n"
+ msgstr ""
+-"Pou¾ití:\n"
+-" hostname [-v] {jméno|-F soubor} nastaví jméno poèítaèe (ze "
++"Použití:\n"
++" hostname [-v] {jméno|-F soubor} nastaví jméno poÄítaÄe (ze "
+ "souboru)\n"
+
+ #: ../hostname.c:224
++#, c-format
+ msgid ""
+ " domainname [-v] {nisdomain|-F file} set NIS domainname (from file)\n"
+ msgstr ""
+-" domainname [-v] {jméno|-F soubor} nastaví jméno NIS domény (ze\n"
++" domainname [-v] {jméno|-F soubor} nastaví jméno NIS domény (ze\n"
+ " souboru)\n"
+
+ #: ../hostname.c:226
++#, c-format
+ msgid ""
+ " nodename [-v] {nodename|-F file} set DECnet node name (from "
+ "file)\n"
+ msgstr ""
+-" nodename [-v] {jméno|-F soubor} nastaví jméno DECnet uzlu (ze\n"
++" nodename [-v] {jméno|-F soubor} nastaví jméno DECnet uzlu (ze\n"
+ " souboru)\n"
+
+ #: ../hostname.c:228
++#, c-format
+ msgid " hostname [-v] [-d|-f|-s|-a|-i|-y|-n] display formatted name\n"
+-msgstr " hostname [-v] [-d|-f|-s|-a|-i|-y|-n] vypí¹e formátované jméno\n"
++msgstr " hostname [-v] [-d|-f|-s|-a|-i|-y|-n] vypíše formátované jméno\n"
+
+ #: ../hostname.c:229
++#, c-format
+ msgid ""
+ " hostname [-v] display hostname\n"
+ "\n"
+ msgstr ""
+-" hostname [-v] vypí¹e jméno poèítaèe\n"
++" hostname [-v] vypíše jméno poÄítaÄe\n"
+ "\n"
+
+ #: ../hostname.c:230
++#, c-format
+ msgid ""
+ " hostname -V|--version|-h|--help print info and exit\n"
+ "\n"
+ msgstr ""
+-" hostname -V|--version|-h|--help vypí¹e informace a skonèí\n"
++" hostname -V|--version|-h|--help vypíše informace a skonÄí\n"
+ "\n"
+
+ #: ../hostname.c:231
++#, c-format
+ msgid ""
+ " dnsdomainname=hostname -d, {yp,nis,}domainname=hostname -y\n"
+ "\n"
+@@ -362,42 +388,51 @@ msgstr ""
+ "\n"
+
+ #: ../hostname.c:232
++#, c-format
+ msgid " -s, --short short host name\n"
+-msgstr " -s, --short krátké jméno poèítaèe\n"
++msgstr " -s, --short krátké jméno poÄítaÄe\n"
+
+ #: ../hostname.c:233
++#, c-format
+ msgid " -a, --alias alias names\n"
+-msgstr " -a, --alias pøezdívky\n"
++msgstr " -a, --alias přezdívky\n"
+
+ #: ../hostname.c:234
++#, c-format
+ msgid " -i, --ip-address addresses for the hostname\n"
+-msgstr " -i, --ip-address adresy odpovídající jménu poèítaèe\n"
++msgstr " -i, --ip-address adresy odpovídající jménu poÄítaÄe\n"
+
+ #: ../hostname.c:235
++#, c-format
+ msgid " -f, --fqdn, --long long host name (FQDN)\n"
+-msgstr " -f, --fqdn, --long dlouhé jméno poèítaèe (kanonické)\n"
++msgstr " -f, --fqdn, --long dlouhé jméno poÄítaÄe (kanonické)\n"
+
+ #: ../hostname.c:236
++#, c-format
+ msgid " -d, --domain DNS domain name\n"
+-msgstr " -d, --domain jméno DNS domény\n"
++msgstr " -d, --domain jméno DNS domény\n"
+
+ #: ../hostname.c:237
++#, c-format
+ msgid " -y, --yp, --nis NIS/YP domainname\n"
+-msgstr " -y, --yp, --nis jméno NIS/YP domény\n"
++msgstr " -y, --yp, --nis jméno NIS/YP domény\n"
+
+ #: ../hostname.c:239
++#, c-format
+ msgid " -n, --node DECnet node name\n"
+-msgstr " -n, --node jméno DECnet uzlu\n"
++msgstr " -n, --node jméno DECnet uzlu\n"
+
+ #: ../hostname.c:241
++#, c-format
+ msgid ""
+ " -F, --file read hostname or NIS domainname from given file\n"
+ "\n"
+ msgstr ""
+-" -F, --file ète jméno poèítaèe èi nis domény ze souboru\n"
++" -F, --file Äte jméno poÄítaÄe Äi nis domény ze souboru\n"
+ "\n"
+
+ #: ../hostname.c:243
++#, c-format
+ msgid ""
+ " This command can read or set the hostname or the NIS domainname. You can\n"
+ " also read the DNS domain or the FQDN (fully qualified domain name).\n"
+@@ -405,931 +440,929 @@ msgid ""
+ " FQDN (Fully Qualified Domain Name) and the DNS domain name (which is\n"
+ " part of the FQDN) in the /etc/hosts file.\n"
+ msgstr ""
++" Tento příkaz může pÅ™eÄíst nebo nastavit název stroje nebo doménové jméno\n"
++" NIS. NaÄíst lze rovněž DNS doménu nebo FQDN (plnÄ› kvalifikované doménové\n"
++" jméno). Pokud pro vyhledávání strojů nepoužíváte bind nebo NIS, můžete\n"
++" změnit FQDN (Fully Qualified Domain Name) a doménové jméno DNS (což je\n"
++" Äást FQDN) v souboru /etc/hosts.\n"
+
+-#: ../hostname.c:338
++#: ../hostname.c:340
+ #, c-format
+ msgid "%s: You can't change the DNS domain name with this command\n"
+-msgstr "%s: Tímto pøíkazem nelze DNS jméno domény zmìnit\n"
++msgstr "%s: Tímto příkazem nelze DNS jméno domény změnit\n"
+
+-#: ../hostname.c:339
++#: ../hostname.c:341
++#, c-format
+ msgid ""
+ "\n"
+ "Unless you are using bind or NIS for host lookups you can change the DNS\n"
+ msgstr ""
+ "\n"
+-"Pokud nepou¾íváte bind èi NIS pro vyhledávání jmen poèítaèù, pak mù¾ete "
+-"zmìnit\n"
++"Pokud nepoužíváte bind Äi NIS pro vyhledávání jmen poÄítaÄů, pak můžete "
++"změnit\n"
+
+-#: ../hostname.c:340
++#: ../hostname.c:342
++#, c-format
+ msgid "domain name (which is part of the FQDN) in the /etc/hosts file.\n"
+ msgstr ""
+-"DNS jméno domény (je souèástí kanonického jména poèítaèe) v souboru\n"
++"DNS jméno domény (je souÄástí kanonického jména poÄítaÄe) v souboru\n"
+ "/etc/hosts\n"
+
+-#: ../hostname.c:357
++#: ../hostname.c:359
+ #, c-format
+ msgid "gethostname()=`%s'\n"
+ msgstr "gethostname()=`%s'\n"
+
+-#: ../hostname.c:374
++#: ../hostname.c:376
+ #, c-format
+ msgid "getdomainname()=`%s'\n"
+ msgstr "getdomainname()=`%s'\n"
+
+-#: ../hostname.c:389
++#: ../hostname.c:391
+ #, c-format
+ msgid "getnodename()=`%s'\n"
+ msgstr "getnodename()=`%s'\n"
+
+-#: ../ifconfig.c:159
+-#, c-format
+-msgid "%-9.9s Link encap:%s "
+-msgstr "%-9.9s Zapouzdøení:%s "
+-
+-#: ../ifconfig.c:164
++#: ../ifconfig.c:107 ../netstat.c:1482
+ #, c-format
+-msgid "HWaddr %s "
+-msgstr "HWadr %s "
++msgid ""
++"Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR "
++"Flg\n"
++msgstr ""
++"Rozhr MTU Met PŘ-OK PŘ-CHYB PŘ-ZAH PŘ-PŘT OD-OK OD-CHYB OD-ZAH OD-PŘT "
++"Přízn\n"
+
+-#: ../ifconfig.c:167
++#: ../ifconfig.c:132 ../ifconfig.c:164
+ #, c-format
+-msgid "Media:%s"
+-msgstr "Médium:%s"
++msgid "%s: ERROR while getting interface flags: %s\n"
++msgstr "%s: CHYBA při získávání příznaků rozhraní: %s\n"
+
+-#: ../ifconfig.c:169
+-msgid "(auto)"
+-msgstr "(auto)"
+-
+-#: ../ifconfig.c:176
++#: ../ifconfig.c:156 ../ifconfig.c:188 ../ifconfig.c:794 ../ifconfig.c:887
++#: ../ifconfig.c:1000
+ #, c-format
+-msgid " %s addr:%s "
+-msgstr " %s adr:%s "
++msgid "No support for INET on this system.\n"
++msgstr "Tento systém nepodporuje INET.\n"
+
+-#: ../ifconfig.c:179
++#: ../ifconfig.c:196
+ #, c-format
+-msgid " P-t-P:%s "
+-msgstr " P-t-P:%s "
++msgid "%s: ERROR while testing interface flags: %s\n"
++msgstr "%s: CHYBA při zkoušení příznaků rozhraní: %s\n"
+
+-# V ostatních katalozích se pøekládá Broadcast -> v¹esmìrové vysílání.
+-# Tudi¾ bcast -> V¹esmìr :)
+-#: ../ifconfig.c:182
++#: ../ifconfig.c:205
+ #, c-format
+-msgid " Bcast:%s "
+-msgstr " V¹esmìr:%s "
++msgid ""
++"Usage:\n"
++" ifconfig [-a] [-v] [-s] <interface> [[<AF>] <address>]\n"
++msgstr ""
++"Použití:\n"
++" ifconfig [-a] [-v] [-s] <rozhraní> [[<AF>] <adresa>]\n"
+
+-#: ../ifconfig.c:184
++#: ../ifconfig.c:207
+ #, c-format
+-msgid " Mask:%s\n"
+-msgstr "Maska:%s\n"
++msgid " [add <address>[/<prefixlen>]]\n"
++msgstr " [add <adresa>[/<délka prefixu>]]\n"
+
+-#: ../ifconfig.c:201
++#: ../ifconfig.c:208
+ #, c-format
+-msgid " inet6 addr: %s/%d"
+-msgstr " inet6-adr: %s/%d"
+-
+-#: ../ifconfig.c:203
+-msgid " Scope:"
+-msgstr " Rozsah:"
+-
+-#: ../ifconfig.c:206
+-msgid "Global"
+-msgstr "Globál"
++msgid " [del <address>[/<prefixlen>]]\n"
++msgstr " [del <adresa>[/<délka prefixu>]]\n"
+
+ #: ../ifconfig.c:209
+-msgid "Link"
+-msgstr "Linka"
+-
+-#: ../ifconfig.c:212
+-msgid "Site"
+-msgstr "Stanovi¹tì"
+-
+-#: ../ifconfig.c:215
+-msgid "Compat"
+-msgstr "Kompatibilita"
+-
+-#: ../ifconfig.c:218
+-msgid "Host"
+-msgstr "Poèítaè"
+-
+-#: ../ifconfig.c:221
+-msgid "Unknown"
+-msgstr "Neznám."
+-
+-#: ../ifconfig.c:236
+-#, c-format
+-msgid " IPX/Ethernet II addr:%s\n"
+-msgstr " IPX/Ethernet II adr: %s\n"
+-
+-#: ../ifconfig.c:239
+ #, c-format
+-msgid " IPX/Ethernet SNAP addr:%s\n"
+-msgstr " IPX/Ethernet SNAP adr:%s\n"
+-
+-#: ../ifconfig.c:242
+-#, c-format
+-msgid " IPX/Ethernet 802.2 addr:%s\n"
+-msgstr " IPX/Ethernet 802.2 adr:%s\n"
++msgid " [[-]broadcast [<address>]] [[-]pointopoint [<address>]]\n"
++msgstr " [[-]broadcast [<adresa>]] [[-]pointopoint [<adresa>]]\n"
+
+-#: ../ifconfig.c:245
++#: ../ifconfig.c:210
+ #, c-format
+-msgid " IPX/Ethernet 802.3 addr:%s\n"
+-msgstr " IPX/Ethernet 802.3 adr:%s\n"
++msgid " [netmask <address>] [dstaddr <address>] [tunnel <address>]\n"
++msgstr " [netmask <adresa>] [dstaddr <adresa>] [tunnel <adresa>]\n"
+
+-#: ../ifconfig.c:255
++#: ../ifconfig.c:213
+ #, c-format
+-msgid " EtherTalk Phase 2 addr:%s\n"
+-msgstr " EtherTalk Phase 2 adr:%s\n"
++msgid " [outfill <NN>] [keepalive <NN>]\n"
++msgstr " [outfill <NN>] [keepalive <NN>]\n"
+
+-#: ../ifconfig.c:264
++#: ../ifconfig.c:215
+ #, c-format
+-msgid " econet addr:%s\n"
+-msgstr " econet adr:%s\n"
+-
+-# Hic sunt leones ...
+-#: ../ifconfig.c:270
+-msgid "[NO FLAGS] "
+-msgstr "[®ÁDNÉ PØÍZNAKY]"
+-
+-#: ../ifconfig.c:272
+-msgid "UP "
+-msgstr "AKTIVOVÁNO "
+-
+-#: ../ifconfig.c:274
+-msgid "BROADCAST "
+-msgstr "V©ESMÌROVÉ_VYSÍLÁNÍ "
+-
+-#: ../ifconfig.c:276
+-msgid "DEBUG "
+-msgstr "DEBUG "
+-
+-#: ../ifconfig.c:278
+-msgid "LOOPBACK "
+-msgstr "SMYÈKA "
+-
+-#: ../ifconfig.c:280
+-msgid "POINTOPOINT "
+-msgstr "POINTOPOINT "
+-
+-# ??
+-#: ../ifconfig.c:282
+-msgid "NOTRAILERS "
+-msgstr "NOTRAILERS "
+-
+-#: ../ifconfig.c:284
+-msgid "RUNNING "
+-msgstr "BÌ®Í "
+-
+-#: ../ifconfig.c:286
+-msgid "NOARP "
+-msgstr "NEARP "
+-
+-#: ../ifconfig.c:288
+-msgid "PROMISC "
+-msgstr "PROMISK "
+-
+-#: ../ifconfig.c:290
+-msgid "ALLMULTI "
+-msgstr "ALLMULTI "
+-
+-#: ../ifconfig.c:292
+-msgid "SLAVE "
+-msgstr "SLAVE "
+-
+-#: ../ifconfig.c:294
+-msgid "MASTER "
+-msgstr "MASTER "
+-
+-#: ../ifconfig.c:296
+-msgid "MULTICAST "
+-msgstr "MULTICAST "
+-
+-#: ../ifconfig.c:299
+-msgid "DYNAMIC "
+-msgstr "DYNAMIC "
++msgid " [hw <HW> <address>] [metric <NN>] [mtu <NN>]\n"
++msgstr " [hw <HW> <adresa>] [metric <NN>] [mtu <NN>]\n"
+
+-#: ../ifconfig.c:302
++#: ../ifconfig.c:216
+ #, c-format
+-msgid " MTU:%d Metric:%d"
+-msgstr " MTU:%d Metrika:%d"
++msgid " [[-]trailers] [[-]arp] [[-]allmulti]\n"
++msgstr " [[-]trailers] [[-]arp] [[-]allmulti]\n"
+
+-#: ../ifconfig.c:306
++#: ../ifconfig.c:217
+ #, c-format
+-msgid " Outfill:%d Keepalive:%d"
+-msgstr " Outfill:%d Keepalive:%d"
++msgid " [multicast] [[-]promisc]\n"
++msgstr " [multicast] [[-]promisc]\n"
+
+-#: ../ifconfig.c:320
++#: ../ifconfig.c:218
+ #, c-format
+-msgid "RX packets:%lu errors:%lu dropped:%lu overruns:%lu frame:%lu\n"
+-msgstr "pøijmutých paketù:%lu chyb:%lu zahozeno:%lu pøeteèení:%lu rámcù:%lu\n"
++msgid " [mem_start <NN>] [io_addr <NN>] [irq <NN>] [media <type>]\n"
++msgstr " [mem_start <NN>] [io_addr <NN>] [irq <NN>] [media <typ>]\n"
+
+-#: ../ifconfig.c:325
++#: ../ifconfig.c:220
+ #, c-format
+-msgid " compressed:%lu\n"
+-msgstr " komprimováno:%lu\n"
++msgid " [txqueuelen <NN>]\n"
++msgstr " [txqueuelen délka]\n"
+
+-# carrier?
+-#: ../ifconfig.c:329
++#: ../ifconfig.c:223
+ #, c-format
+-msgid "TX packets:%lu errors:%lu dropped:%lu overruns:%lu carrier:%lu\n"
+-msgstr "odeslaných paketù:%lu chyb:%lu zahozeno:%lu pøeteèení:%lu pøenos:%lu\n"
++msgid " [[-]dynamic]\n"
++msgstr " [[-]dynamic]\n"
+
+-#: ../ifconfig.c:333
++#: ../ifconfig.c:225
+ #, c-format
+-msgid " collisions:%lu "
+-msgstr " kolizí:%lu "
++msgid ""
++" [up|down] ...\n"
++"\n"
++msgstr ""
++" [up|down] ...\n"
++"\n"
+
+-#: ../ifconfig.c:335
++#: ../ifconfig.c:227
+ #, c-format
+-msgid "compressed:%lu "
+-msgstr "komprimováno:%lu "
++msgid " <HW>=Hardware Type.\n"
++msgstr " <HW> = Hardwarový Typ.\n"
+
+-#: ../ifconfig.c:337
++#: ../ifconfig.c:228
+ #, c-format
+-msgid "txqueuelen:%d "
+-msgstr "délka odchozí fronty:%d "
++msgid " List of possible hardware types:\n"
++msgstr " Seznam možných hardwarových typů:\n"
+
+-#: ../ifconfig.c:345
++#. 1 = ARPable
++#: ../ifconfig.c:230
+ #, c-format
+-msgid "Interrupt:%d "
+-msgstr "Pøeru¹ení:%d "
++msgid " <AF>=Address family. Default: %s\n"
++msgstr " <AF> = Třída adres. Implicitní: %s\n"
+
+-#. Only print devices using it for
+-#. I/O maps
+-#: ../ifconfig.c:348
++#: ../ifconfig.c:231
+ #, c-format
+-msgid "Base address:0x%x "
+-msgstr "Vstupnì/Výstupní port:0x%x "
++msgid " List of possible address families:\n"
++msgstr " Seznam možných tříd adres:\n"
+
+-#: ../ifconfig.c:350
++#: ../ifconfig.c:307
+ #, c-format
+-msgid "Memory:%lx-%lx "
+-msgstr "Pamì»:%lx-%lx "
++msgid "ifconfig: option `%s' not recognised.\n"
++msgstr "ifconfig: pÅ™epínaÄ â€ž%s“ nebyl rozpoznán.\n"
+
+-#: ../ifconfig.c:353
++#: ../ifconfig.c:309 ../ifconfig.c:990
+ #, c-format
+-msgid "DMA chan:%x "
+-msgstr "Kanál DMA:%x "
++msgid "ifconfig: `--help' gives usage information.\n"
++msgstr "ifconfig: návod na použití lze získat pomocí „--help“\n"
+
+-#: ../ifconfig.c:384 ../ifconfig.c:405
++#: ../ifconfig.c:384
+ #, c-format
+-msgid "%s: unknown interface: %s\n"
+-msgstr "%s: rozhraní %s není známo\n"
++msgid "Unknown media type.\n"
++msgstr "Neznámý typ média.\n"
+
+ #: ../ifconfig.c:421
++#, c-format
+ msgid ""
+-"Usage:\n"
+-" ifconfig [-a] [-i] [-v] <interface> [[<AF>] <address>]\n"
++"Warning: Interface %s still in promisc mode... maybe other application is "
++"running?\n"
+ msgstr ""
+-"Pou¾ití:\n"
+-" ifconfig [-a] [-i] [-v] <rozhraní> [[<AF>] <adresa>]\n"
+-
+-#: ../ifconfig.c:425
+-msgid " [add <address>[/<prefixlen>]]\n"
+-msgstr " [add <adresa>[/<délka prefixu>]]\n"
+-
+-#: ../ifconfig.c:427
+-msgid " [del <address>[/<prefixlen>]]\n"
+-msgstr " [del <adresa>[/<délka prefixu>]]\n"
+-
+-#: ../ifconfig.c:432
+-msgid " [[-]broadcast [<address>]] [[-]pointopoint [<address>]]\n"
+-msgstr " [[-]broadcast [<adresa>]] [[-]pointopoint [<adresa>]]\n"
++"Pozor: Rozhraní %s je stále v promiskuitním režimu. Neběží jiná aplikace?\n"
+
+ #: ../ifconfig.c:433
+-msgid " [netmask <address>] [dstaddr <address>] [tunnel <address>]\n"
+-msgstr " [netmask <adresa>] [dstaddr <adresa>] [tunnel <adresa>]\n"
+-
+-#: ../ifconfig.c:436
+-msgid " [outfill <NN>] [keepalive <NN>]\n"
+-msgstr " [outfill <NN>] [keepalive <NN>]\n"
++#, c-format
++msgid "Warning: Interface %s still in MULTICAST mode.\n"
++msgstr "Pozor: Rozhraní %s je stále v režimu MULTICAST.\n"
+
+-#: ../ifconfig.c:438
+-msgid " [hw <HW> <address>] [metric <NN>] [mtu <NN>]\n"
+-msgstr " [hw <HW> <adresa>] [metric <NN>] [mtu <NN>]\n"
++#: ../ifconfig.c:445
++#, c-format
++msgid "Warning: Interface %s still in ALLMULTI mode.\n"
++msgstr "Pozor: Rozhraní %s je stále v režimu ALLMULTI.\n"
+
+-#: ../ifconfig.c:439
+-msgid " [[-]trailers] [[-]arp] [[-]allmulti]\n"
+-msgstr " [[-]trailers] [[-]arp] [[-]allmulti]\n"
++#: ../ifconfig.c:469
++#, c-format
++msgid "Warning: Interface %s still in DYNAMIC mode.\n"
++msgstr "Pozor: Rozhraní %s je stále v režimu DYNAMIC.\n"
+
+-#: ../ifconfig.c:440
+-msgid " [multicast] [[-]promisc]\n"
+-msgstr " [multicast] [[-]promisc]\n"
++#: ../ifconfig.c:527
++#, c-format
++msgid "Warning: Interface %s still in BROADCAST mode.\n"
++msgstr "Pozor: Rozhraní %s je stále v režimu VŠESMĚR.\n"
+
+-#: ../ifconfig.c:441
+-msgid " [mem_start <NN>] [io_addr <NN>] [irq <NN>] [media <type>]\n"
+-msgstr " [mem_start <NN>] [io_addr <NN>] [irq <NN>] [media <typ>]\n"
++#: ../ifconfig.c:538
++#, c-format
++msgid "ifconfig: Error resolving '%s' for broadcast\n"
++msgstr "ifconfig: Chyba při překládání „%s“ pro všesměr\n"
+
+-#: ../ifconfig.c:443
+-msgid " [txqueuelen <NN>]\n"
+-msgstr " [txqueuelen délka]\n"
++#: ../ifconfig.c:563
++#, c-format
++msgid "ifconfig: Error resolving '%s' for dstaddr\n"
++msgstr "ifconfig: Chyba při překládání „%s“ pro adresu cíle\n"
+
+-#: ../ifconfig.c:446
+-msgid " [[-]dynamic]\n"
+-msgstr " [[-]dynamic]\n"
++#: ../ifconfig.c:586
++#, c-format
++msgid "ifconfig: Error resolving '%s' for netmask\n"
++msgstr "ifconfig: Chyba při překládání „%s“ pro masku sítě\n"
+
+-#: ../ifconfig.c:448
+-msgid ""
+-" [up|down] ...\n"
+-"\n"
+-msgstr ""
+-" [up|down] ...\n"
+-"\n"
++#: ../ifconfig.c:665
++#, c-format
++msgid "Warning: Interface %s still in POINTOPOINT mode.\n"
++msgstr "Pozor: Rozhraní %s je stále v DVOUBODOVÉM režimu.\n"
+
+-#: ../ifconfig.c:450
+-msgid " <HW>=Hardware Type.\n"
+-msgstr " <HW>=Hardwarový Typ.\n"
++#: ../ifconfig.c:676
++#, c-format
++msgid "ifconfig: Error resolving '%s' for pointopoint\n"
++msgstr "ifconfig: Chyba při překládání „%s“ pro dvoubodové nastavení\n"
+
+-#: ../ifconfig.c:451
+-msgid " List of possible hardware types:\n"
+-msgstr " Seznam mo¾ných hardwarových typù:\n"
++#: ../ifconfig.c:700
++#, c-format
++msgid "hw address type `%s' has no handler to set address. failed.\n"
++msgstr ""
++"Pro typ hardwarové adresy „%s“ neexistuje obsluha na nastavování adresy.\n"
++"Operace selhala.\n"
+
+-#. 1 = ARPable
+-#: ../ifconfig.c:453
++#: ../ifconfig.c:709
+ #, c-format
+-msgid " <AF>=Address family. Default: %s\n"
+-msgstr " <AF>=tøída adres. Implicitní: %s\n"
++msgid "%s: invalid %s address.\n"
++msgstr "%s: adresa %s je nesprávná.\n"
+
+-#: ../ifconfig.c:454
+-msgid " List of possible address families:\n"
+-msgstr " Seznam mo¾ných tøíd adres:\n"
++#: ../ifconfig.c:749
++#, c-format
++msgid "ifconfig: Error resolving '%s' for add\n"
++msgstr "ifconfig: Chyba při překládání „%s“ pro adresu\n"
+
+-#: ../ifconfig.c:593
+-msgid "Unknown media type.\n"
+-msgstr "Neznámý typ média.\n"
++#: ../ifconfig.c:760 ../ifconfig.c:850 ../ifconfig.c:938
++#, c-format
++msgid "No support for INET6 on this system.\n"
++msgstr "Tento systém nepodporuje INET6.\n"
+
+-#: ../ifconfig.c:881
++#: ../ifconfig.c:803 ../ifconfig.c:896
+ #, c-format
+-msgid "%s: invalid %s address.\n"
+-msgstr "%s: adresa %s je nesprávná.\n"
++msgid "Interface %s not initialized\n"
++msgstr "Rozhraní %s není inicializováno\n"
+
+-#: ../ifconfig.c:920 ../ifconfig.c:963 ../ifconfig.c:1011
+-msgid "No support for INET6 on this system.\n"
+-msgstr "Tento systém nepodporuje INET6.\n"
++#: ../ifconfig.c:815 ../ifconfig.c:907
++#, c-format
++msgid "Bad address.\n"
++msgstr "Chybná adresa.\n"
+
+-#: ../ifconfig.c:983
++#: ../ifconfig.c:910
++#, c-format
+ msgid "Address deletion not supported on this system.\n"
+-msgstr "Tento systém nepodporuje mazání adres.\n"
++msgstr "Tento systém nepodporuje mazání adres.\n"
+
+-#: ../ifconfig.c:1066
+-msgid "No support for INET on this system.\n"
+-msgstr "Tento systém nepodporuje INET.\n"
++#: ../ifconfig.c:982
++#, c-format
++msgid "ifconfig: Cannot set address for this protocol family.\n"
++msgstr "ifconfig: Pro tuto rodinu protokolů nelze nastavit adresu.\n"
++
++#: ../ifconfig.c:989
++#, c-format
++msgid "ifconfig: error resolving '%s' to set address for af=%s\n"
++msgstr "ifconfig: chyba pÅ™i pÅ™ekládání „%s“ za úÄelem nastavení adresy AF=%s\n"
+
+-#: ../ifconfig.c:1076
++#: ../ifconfig.c:1010
++#, c-format
+ msgid "No support for ECONET on this system.\n"
+-msgstr "Tento systém nepodporuje ECONET.\n"
++msgstr "Tento systém nepodporuje ECONET.\n"
+
+-#: ../ifconfig.c:1084
++#: ../ifconfig.c:1018
+ #, c-format
+ msgid "Don't know how to set addresses for family %d.\n"
+-msgstr "Nevím, jak nastavit adresu tøídy %d.\n"
++msgstr "Nevím, jak nastavit adresu třídy %d.\n"
++
++#: ../ifconfig.c:1053
++#, c-format
++msgid "WARNING: at least one error occured. (%d)\n"
++msgstr "POZOR: Vyskytla se alespoň jedna chyba. (%d)\n"
+
+-#: ../netstat.c:383
++#: ../netstat.c:434
+ #, c-format
+ msgid ""
+ "(No info could be read for \"-p\": geteuid()=%d but you should be root.)\n"
+ msgstr ""
+-"(Pro \"-p\" nelze získat ¾ádné informace: geteuid()=%d, ale je tøeba, aby "
++"(Pro \"-p\" nelze získat žádné informace: geteuid()=%d, ale je třeba, aby "
+ "jste\n"
+-"byl superu¾ivatelem)\n"
++"byl superuživatelem)\n"
+
+-#: ../netstat.c:387
++#: ../netstat.c:438
++#, c-format
+ msgid ""
+ "(Not all processes could be identified, non-owned process info\n"
+ " will not be shown, you would have to be root to see it all.)\n"
+ msgstr ""
+-"(V¹echny procesy nemohly být identifikovány. Budou vypsaány informace\n"
+-"pouze o procesech, jich¾ jste vlastníkem. Aby jste mohl vidìt v¹e, musel\n"
+-"byste být superu¾ivatelem.)\n"
++"(Všechny procesy nemohly být identifikovány. Budou vypsány informace\n"
++"pouze o procesech, jichž jste vlastníkem. Aby jste mohl vidět vše, musel\n"
++"byste být superuživatelem.)\n"
+
+-#: ../netstat.c:394 ../netstat.c:1089 ../netstat.c:1166
++#: ../netstat.c:445 ../netstat.c:1186 ../netstat.c:1264
+ msgid "LISTENING"
+-msgstr "NASLOUCHÁ"
++msgstr "NASLOUCHÃ"
+
+-#: ../netstat.c:395
++#: ../netstat.c:446
+ msgid "CONN SENT"
+-msgstr "CONN ODESLÁN"
++msgstr "CONN ODESLÃN"
+
+-#: ../netstat.c:396 ../netstat.c:1168
++#: ../netstat.c:447 ../netstat.c:1266
+ msgid "DISC SENT"
+-msgstr "DISC ODESLÁN"
++msgstr "DISC ODESLÃN"
+
+-#: ../netstat.c:397 ../netstat.c:464 ../netstat.c:809 ../netstat.c:1169
++#: ../netstat.c:448 ../netstat.c:515 ../netstat.c:898 ../netstat.c:1267
+ msgid "ESTABLISHED"
+ msgstr "SPOJENO"
+
+-#: ../netstat.c:419
++#: ../netstat.c:470
++#, c-format
+ msgid "Active NET/ROM sockets\n"
+-msgstr "Aktivní NET/ROM sokety\n"
++msgstr "Aktivní NET/ROM sokety\n"
+
+-#: ../netstat.c:420
++#: ../netstat.c:471
++#, c-format
+ msgid ""
+-"User Dest Source Device State Vr/Vs Send-Q "
+-"Recv-Q\n"
++"User Dest Source Device State Vr/Vs Send-Q Recv-"
++"Q\n"
+ msgstr ""
+-"U¾ivatel Cíl Zdroj Zaøízení Stav Vr/Vs Odch-F "
+-"Pøích-F\n"
++"Uživatel Cíl Zdroj Zařízení Stav Vr/Vs Odch-F Přích-"
++"F\n"
+
+-#: ../netstat.c:430 ../netstat.c:1208
++#: ../netstat.c:481 ../netstat.c:1306
+ #, c-format
+ msgid "Problem reading data from %s\n"
+-msgstr "Chyba pøi ètení dat z %s\n"
++msgstr "Chyba pÅ™i Ätení dat z %s\n"
+
+-# následující radìji ponechat v originále ?!
+-#: ../netstat.c:465
++# následující raději ponechat v originále ?!
++#: ../netstat.c:516
+ msgid "SYN_SENT"
+ msgstr "SYN_SENT"
+
+-#: ../netstat.c:466
++#: ../netstat.c:517
+ msgid "SYN_RECV"
+ msgstr "SYN_RECV"
+
+-#: ../netstat.c:467
++#: ../netstat.c:518
+ msgid "FIN_WAIT1"
+ msgstr "FIN_WAIT1"
+
+-#: ../netstat.c:468
++#: ../netstat.c:519
+ msgid "FIN_WAIT2"
+ msgstr "FIN_WAIT2"
+
+-#: ../netstat.c:469
++#: ../netstat.c:520
+ msgid "TIME_WAIT"
+ msgstr "TIME_WAIT"
+
+-#: ../netstat.c:470
++#: ../netstat.c:521
+ msgid "CLOSE"
+-msgstr "ZAVØEN"
++msgstr "ZAVŘEN"
+
+-#: ../netstat.c:471
++#: ../netstat.c:522
+ msgid "CLOSE_WAIT"
+ msgstr "CLOSE_WAIT"
+
+-#: ../netstat.c:472
++#: ../netstat.c:523
+ msgid "LAST_ACK"
+-msgstr "POSLEDNÍ ACK"
++msgstr "POSLEDNÃ ACK"
+
+-#: ../netstat.c:473
++#: ../netstat.c:524
+ msgid "LISTEN"
+-msgstr "LISTEN"
++msgstr "NASLOUCHÃ"
+
+-#: ../netstat.c:474
++#: ../netstat.c:525
+ msgid "CLOSING"
+-msgstr "ZAVíRÁ"
++msgstr "ZAVíRÃ"
+
+-#: ../netstat.c:544
++#: ../netstat.c:596
+ #, c-format
+ msgid "warning, got bogus igmp6 line %d.\n"
+-msgstr "varování, nesmyslný igmp6 øádek %d.\n"
++msgstr "varování, nesmyslný igmp6 řádek %d.\n"
+
+-#: ../netstat.c:549 ../netstat.c:587 ../netstat.c:670 ../netstat.c:803
+-#: ../netstat.c:935 ../netstat.c:940
++#: ../netstat.c:601 ../netstat.c:639 ../netstat.c:763 ../netstat.c:892
++#: ../netstat.c:1029 ../netstat.c:1034
+ #, c-format
+ msgid "netstat: unsupported address family %d !\n"
+-msgstr "netstat: tøída adres %d není podporována !\n"
++msgstr "netstat: třída adres %d není podporována !\n"
+
+-#: ../netstat.c:562 ../netstat.c:567 ../netstat.c:575 ../netstat.c:582
++#: ../netstat.c:614 ../netstat.c:619 ../netstat.c:627 ../netstat.c:634
+ #, c-format
+ msgid "warning, got bogus igmp line %d.\n"
+-msgstr "varování, nesmyslný igmp øádek %d.\n"
++msgstr "varování, nesmyslný igmp řádek %d.\n"
++
++#: ../netstat.c:677
++#, c-format
++msgid "Active X.25 sockets\n"
++msgstr "Aktivní X.25 sokety\n"
++
++#. IMHO, Vr/Vs is not very usefull --SF
++#: ../netstat.c:679
++#, c-format
++msgid ""
++"Dest Source Device LCI State Vr/Vs Send-Q Recv-"
++"Q\n"
++msgstr ""
++"Cíl Zdroj Zaříz LCI Stav Vr/Vs Odhod-F Přích-"
++"F\n"
+
+-#: ../netstat.c:666
++#: ../netstat.c:759
++#, c-format
+ msgid "warning, got bogus tcp line.\n"
+-msgstr "varování, nesmyslný tcp øádek.\n"
++msgstr "varování, nesmyslný tcp řádek.\n"
+
+-#: ../netstat.c:704 ../netstat.c:855 ../netstat.c:975
++#: ../netstat.c:798 ../netstat.c:947 ../netstat.c:1072
+ #, c-format
+ msgid "off (0.00/%ld/%d)"
+ msgstr "vyp (0.00/%ld/%d)"
+
+-#: ../netstat.c:708
+-#, fuzzy, c-format
++#: ../netstat.c:802
++#, c-format
+ msgid "on (%2.2f/%ld/%d)"
+-msgstr "zap%d (%2.2f/%ld/%d)"
++msgstr "zapnut (%2.2f/%ld/%d)"
+
+-#: ../netstat.c:713
+-#, fuzzy, c-format
++#: ../netstat.c:807
++#, c-format
+ msgid "keepalive (%2.2f/%ld/%d)"
+-msgstr "zap%d (%2.2f/%ld/%d)"
++msgstr "keepalive (%2.2f/%ld/%d)"
+
+-#: ../netstat.c:718
+-#, fuzzy, c-format
++#: ../netstat.c:812
++#, c-format
+ msgid "timewait (%2.2f/%ld/%d)"
+-msgstr "zap%d (%2.2f/%ld/%d)"
++msgstr "timewait (%2.2f/%ld/%d)"
+
+-#: ../netstat.c:723 ../netstat.c:864 ../netstat.c:985
++#: ../netstat.c:817 ../netstat.c:956 ../netstat.c:1082
+ #, c-format
+ msgid "unkn-%d (%2.2f/%ld/%d)"
+ msgstr "nezn-%d (%2.2f/%ld/%d)"
+
+-#: ../netstat.c:799
++#: ../netstat.c:888
++#, c-format
+ msgid "warning, got bogus udp line.\n"
+-msgstr "varování, nesmyslný udp øádek.\n"
++msgstr "varování, nesmyslný udp řádek.\n"
+
+-#: ../netstat.c:817 ../netstat.c:1075 ../netstat.c:1108
++#: ../netstat.c:906 ../netstat.c:1172 ../netstat.c:1205
+ msgid "UNKNOWN"
+-msgstr "NEZNÁM"
++msgstr "NEZNÃM"
+
+-#: ../netstat.c:860 ../netstat.c:980
++#: ../netstat.c:952 ../netstat.c:1077
+ #, c-format
+ msgid "on%d (%2.2f/%ld/%d)"
+ msgstr "zap%d (%2.2f/%ld/%d)"
+
+-#: ../netstat.c:949
++#: ../netstat.c:1043
++#, c-format
+ msgid "warning, got bogus raw line.\n"
+-msgstr "varování, nesmyslný 'raw' øádek.\n"
++msgstr "varování, nesmyslný 'raw' řádek.\n"
+
+-#: ../netstat.c:1028
++#: ../netstat.c:1125
++#, c-format
+ msgid "warning, got bogus unix line.\n"
+-msgstr "varování, netstat 'unix' øádek.\n"
++msgstr "varování, netstat 'unix' řádek.\n"
+
+-#: ../netstat.c:1055
++#: ../netstat.c:1152
+ msgid "STREAM"
+ msgstr "STREAM"
+
+-#: ../netstat.c:1059
++#: ../netstat.c:1156
+ msgid "DGRAM"
+ msgstr "DGRAM"
+
+-#: ../netstat.c:1063
++#: ../netstat.c:1160
+ msgid "RAW"
+ msgstr "RAW"
+
+-#: ../netstat.c:1067
++#: ../netstat.c:1164
+ msgid "RDM"
+ msgstr "RDM"
+
+-#: ../netstat.c:1071
++#: ../netstat.c:1168
+ msgid "SEQPACKET"
+ msgstr "SEQPACKET"
+
+-#: ../netstat.c:1080
++#: ../netstat.c:1177
+ msgid "FREE"
+-msgstr "NEALOKOVÁN"
++msgstr "NEALOKOVÃN"
+
+-#: ../netstat.c:1096
++#: ../netstat.c:1193
+ msgid "CONNECTING"
+ msgstr "SPOJUJE"
+
+-#: ../netstat.c:1100
++#: ../netstat.c:1197
+ msgid "CONNECTED"
+ msgstr "SPOJEN"
+
+-#: ../netstat.c:1104
++#: ../netstat.c:1201
+ msgid "DISCONNECTING"
+ msgstr "ODPOJUJE"
+
+-#: ../netstat.c:1135
++#: ../netstat.c:1233
++#, c-format
+ msgid "Active UNIX domain sockets "
+-msgstr "Aktivní sokety domény UNIX "
++msgstr "Aktivní sokety domény UNIX "
+
+-#: ../netstat.c:1137 ../netstat.c:1666
++#: ../netstat.c:1235 ../netstat.c:1801
++#, c-format
+ msgid "(servers and established)"
+-msgstr "(servery a navázaná spojení)"
++msgstr "(servery a navázaná spojení)"
+
+-#: ../netstat.c:1140 ../netstat.c:1669
++#: ../netstat.c:1238 ../netstat.c:1804
++#, c-format
+ msgid "(only servers)"
+ msgstr "(pouze servery)"
+
+-#: ../netstat.c:1142 ../netstat.c:1671
++#: ../netstat.c:1240 ../netstat.c:1806
++#, c-format
+ msgid "(w/o servers)"
+ msgstr "(w/o servery)"
+
+-#: ../netstat.c:1145
++#: ../netstat.c:1243
++#, c-format
+ msgid ""
+ "\n"
+-"Proto RefCnt Flags Type State I-Node"
++"Proto RefCnt Flags Type State I-Node "
+ msgstr ""
+ "\n"
+-"Proto Èítaè Pøíznaky Typ Stav I-Uzel"
++"Proto ČítaÄ Příznaky Typ Stav I-Uzel "
+
+-#: ../netstat.c:1147
++#: ../netstat.c:1245
++#, c-format
+ msgid " Path\n"
+ msgstr " Cesta\n"
+
+-#: ../netstat.c:1167
++#: ../netstat.c:1265
+ msgid "SABM SENT"
+-msgstr "SABM ODESLÁN"
++msgstr "SABM ODESLÃN"
+
+-#: ../netstat.c:1170
++#: ../netstat.c:1268
+ msgid "RECOVERY"
+ msgstr "OBNOVA"
+
+-#: ../netstat.c:1184
++#: ../netstat.c:1282
++#, c-format
+ msgid "Active AX.25 sockets\n"
+-msgstr "Aktivní AX.25 sokety\n"
++msgstr "Aktivní AX.25 sokety\n"
+
+-#: ../netstat.c:1185
++#: ../netstat.c:1283
++#, c-format
+ msgid "Dest Source Device State Vr/Vs Send-Q Recv-Q\n"
+-msgstr "Cíl Zdroj Zaøíz Stav Vr/Vs Odhod-F Pøích-F\n"
++msgstr "Cíl Zdroj Zaříz Stav Vr/Vs Odhod-F Přích-F\n"
+
+-#: ../netstat.c:1228
++#: ../netstat.c:1326
+ #, c-format
+ msgid "problem reading data from %s\n"
+-msgstr "chyba pøi ètení dat z %s\n"
++msgstr "chyba pÅ™i Ätení dat z %s\n"
+
+-#: ../netstat.c:1279
++#: ../netstat.c:1396
++#, c-format
+ msgid ""
+ "Active IPX sockets\n"
+ "Proto Recv-Q Send-Q Local Address Foreign Address "
+ "State"
+ msgstr ""
+-"Aktivní IPX sokety\n"
+-"Proto Pøích-F Odch-F Lokál adresa Vzdálená adresa "
+-" Stav"
++"Aktivní IPX sokety\n"
++"Proto Přích-F Odch-F Lokál adresa Vzdálená "
++"adresa Stav"
+
+-#: ../netstat.c:1281
++#: ../netstat.c:1398
++#, c-format
+ msgid " User"
+-msgstr " U¾ivatel"
++msgstr " Uživatel"
+
+-#: ../netstat.c:1315
++#: ../netstat.c:1432
+ msgid "ESTAB"
+ msgstr "SPOJEN"
+
+-#: ../netstat.c:1323
++#: ../netstat.c:1440
+ msgid "UNK."
+ msgstr "NEZ."
+
+-#: ../netstat.c:1367
+-msgid " - no statistics available -"
+-msgstr " - statistická data nejsou dostupná -"
+-
+-#: ../netstat.c:1370
+-msgid "[NO FLAGS]"
+-msgstr "[®ÁDNÉ PØÍZNAKY]"
+-
+-#: ../netstat.c:1400
++#: ../netstat.c:1478
++#, c-format
+ msgid "Kernel Interface table\n"
+-msgstr "Tabulka rozhraní v jádru\n"
++msgstr "Tabulka rozhraní v jádru\n"
+
+-#: ../netstat.c:1401
+-msgid ""
+-"Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR "
+-"Flg\n"
+-msgstr ""
+-"Rozhr MTU Met PØ-OK PØ-CHYB PØ-ZAH PØ-PØT OD-OK OD-CHYB OD-ZAH OD-PØT "
+-"PØZ\n"
+-
+-#: ../netstat.c:1404
++#: ../netstat.c:1486
+ msgid "missing interface information"
+-msgstr "chybí informace o rozhraní"
++msgstr "chybí informace o rozhraní"
+
+-#: ../netstat.c:1425
++#: ../netstat.c:1509
++#, c-format
+ msgid ""
+-"usage: netstat [-veenNcCF] [<Af>] -r netstat "
+-"{-V|--version|-h|--help}\n"
++"usage: netstat [-vWeenNcCF] [<Af>] -r netstat {-V|--version|-h|--"
++"help}\n"
+ msgstr ""
+-"Pou¾ití: netstat [--veenNcCF] [<TA>] -r netstat "
+-"{-V|--version|-h|--help}\n"
++"Použití: netstat [-vWeenNcCF] [<AF>] -r netstat {-V|--version|-h|--"
++"help}\n"
+
+-#: ../netstat.c:1426
+-msgid " netstat [-vnNcaeol] [<Socket> ...]\n"
+-msgstr " netstat [-vnNcaeol] [<Soket> ...]\n"
++#: ../netstat.c:1510
++#, c-format
++msgid " netstat [-vWnNcaeol] [<Socket> ...]\n"
++msgstr " netstat [-vWnNcaeol] [<Socket>…]\n"
+
+-#: ../netstat.c:1427
++#: ../netstat.c:1511
++#, c-format
+ msgid ""
+-" netstat { [-veenNac] -i | [-cnNe] -M | -s }\n"
++" netstat { [-vWeenNac] -i | [-cnNe] -M | -s [-6tuw] }\n"
+ "\n"
+ msgstr ""
+-" netstat { [-veenNac] -i | [-cnNe] -M | -s }\n"
++" netstat { [-vWeenNac] -i | [-cnNe] -M | -s [-6tuw] }\n"
+ "\n"
+
+-#: ../netstat.c:1429
++#: ../netstat.c:1513
++#, c-format
+ msgid " -r, --route display routing table\n"
+-msgstr " -r, --route vypí¹e smìrovací tabulku\n"
++msgstr " -r, --route vypíše směrovací tabulku\n"
+
+-#: ../netstat.c:1430
++#: ../netstat.c:1514
++#, c-format
+ msgid " -i, --interfaces display interface table\n"
+-msgstr " -i, --interfaces vypí¹e tabulku rozhraní\n"
++msgstr " -i, --interfaces vypíše tabulku rozhraní\n"
+
+-#: ../netstat.c:1431
++#: ../netstat.c:1515
++#, c-format
+ msgid " -g, --groups display multicast group memberships\n"
+ msgstr ""
+-" -g, --groups vypí¹e èlenství v multicast skupinách\n"
++" -g, --groups vypíše Älenství v multicast skupinách\n"
+
+-#: ../netstat.c:1432
++#: ../netstat.c:1516
++#, c-format
+ msgid ""
+ " -s, --statistics display networking statistics (like SNMP)\n"
+ msgstr ""
+-" -s, --statistics vypí¹e statistiku sí»ové aktivity (jako "
++" -s, --statistics vypíše statistiku síťové aktivity (jako "
+ "SNMP)\n"
+
+-#: ../netstat.c:1434
++#: ../netstat.c:1518
++#, c-format
+ msgid ""
+ " -M, --masquerade display masqueraded connections\n"
+ "\n"
+ msgstr ""
+-" -M, --masquerade vypí¹e maskovaná spojení\n"
++" -M, --masquerade vypíše maskovaná spojení\n"
+ "\n"
+
+-#: ../netstat.c:1438 ../route.c:87
++#: ../netstat.c:1521
++#, c-format
++msgid " -W, --wide don't truncate IP addresses\n"
++msgstr " -W, --wide nezkracuje IP adresy\n"
++
++#: ../netstat.c:1523
++#, c-format
++msgid " --numeric-hosts don't resolve host names\n"
++msgstr " --numeric-hosts nepřekládá názvy strojů\n"
++
++#: ../netstat.c:1524
++#, c-format
++msgid " --numeric-ports don't resolve port names\n"
++msgstr " --numeric-ports nepřekládá názvy portů\n"
++
++#: ../netstat.c:1525
++#, c-format
++msgid " --numeric-users don't resolve user names\n"
++msgstr " --numeric-users nepřekládá uživatelské jména\n"
++
++#: ../netstat.c:1526
++#, c-format
+ msgid " -N, --symbolic resolve hardware names\n"
+-msgstr " -N, --symbolic pøevede hw jména\n"
++msgstr " -N, --symbolic převede hw jména\n"
+
+-#: ../netstat.c:1439 ../route.c:88
++#: ../netstat.c:1527 ../route.c:88
++#, c-format
+ msgid " -e, --extend display other/more information\n"
+-msgstr " -e, --extend vypí¹e podrobnìj¹í informace\n"
++msgstr " -e, --extend vypíše podrobnější informace\n"
+
+-#: ../netstat.c:1440
++#: ../netstat.c:1528
++#, c-format
+ msgid " -p, --programs display PID/Program name for sockets\n"
+ msgstr ""
+-" -p, --programs vypí¹e PID/jméno programu pro sokety\n"
++" -p, --programs vypíše PID/jméno programu pro sokety\n"
+
+-#: ../netstat.c:1441
++#: ../netstat.c:1529
++#, c-format
+ msgid ""
+ " -c, --continuous continuous listing\n"
+ "\n"
+ msgstr ""
+-" -c, --continuous nepøeru¹ovaný výpis\n"
++" -c, --continuous nepřerušovaný výpis\n"
+ "\n"
+
+-#: ../netstat.c:1442
++#: ../netstat.c:1530
++#, c-format
+ msgid " -l, --listening display listening server sockets\n"
+ msgstr ""
+-" -l, --listening vypí¹e sokety, na nich¾ je nasloucháno\n"
++" -l, --listening vypíše sokety, na nichž je nasloucháno\n"
+
+-#: ../netstat.c:1443
++#: ../netstat.c:1531
++#, c-format
+ msgid ""
+ " -a, --all, --listening display all sockets (default: connected)\n"
+ msgstr ""
+-" -a, --all, --listening vypí¹e v¹echny sokety (implicitnì: "
+-"spojené)\n"
++" -a, --all, --listening vypíše všechny sokety (implicitně: "
++"spojené)\n"
+
+-#: ../netstat.c:1444
++#: ../netstat.c:1532
++#, c-format
+ msgid " -o, --timers display timers\n"
+-msgstr " -o, --timers zobrazí èasovaèe\n"
++msgstr " -o, --timers zobrazí ÄasovaÄe\n"
+
+-#: ../netstat.c:1445 ../route.c:89
++#: ../netstat.c:1533 ../route.c:89
++#, c-format
+ msgid ""
+ " -F, --fib display Forwarding Information Base "
+ "(default)\n"
+ msgstr ""
+-" -F, --fib zobrazí Forwarding Infomation Base\n"
+-" (implicitní)\n"
++" -F, --fib zobrazí Forwarding Information Base\n"
++" (implicitní)\n"
+
+-#: ../netstat.c:1446 ../route.c:90
++#: ../netstat.c:1534 ../route.c:90
++#, c-format
+ msgid ""
+ " -C, --cache display routing cache instead of FIB\n"
+ "\n"
+-msgstr " -C, --cache místo FIB zobrazí smìrovací cache\n"
++msgstr " -C, --cache místo FIB zobrazí směrovací cache\n"
+
+-#: ../netstat.c:1448
++#: ../netstat.c:1536
++#, c-format
+ msgid ""
+-" <Socket>={-t|--tcp} {-u|--udp} {-w|--raw} {-x|--unix} --ax25 --ipx "
+-"--netrom\n"
++" <Socket>={-t|--tcp} {-u|--udp} {-U|--udplite} {-w|--raw} {-x|--unix} --"
++"ax25 --ipx --netrom\n"
+ msgstr ""
+-" <Soket>={-t|--tcp} {-u|--udp} {-w|--raw} {-x|--unix} --ax25 --ipx "
+-"--netrom\n"
++" <Socket>={-t|--tcp} {-u|--udp} {-U|--udplite} {-w|--raw} {-x|--unix} --"
++"ax25 --ipx --netrom\n"
+
+-#: ../netstat.c:1449 ../route.c:92
++#: ../netstat.c:1537
+ #, c-format
+-msgid " <AF>=Use '-A <af>' or '--<af>' Default: %s\n"
+-msgstr " <AF>=Pou¾ijte '-A <af>' or '--<af>' Implicitní: %s\n"
++msgid " <AF>=Use '-6|-4' or '-A <af>' or '--<af>'; default: %s\n"
++msgstr " <AF>=Použijte „-6|-4“ nebo „-A <af>“ nebo „--<af>“. Implicitní: %s\n"
+
+-#: ../netstat.c:1450 ../route.c:93
++#: ../netstat.c:1538 ../route.c:93
++#, c-format
+ msgid " List of possible address families (which support routing):\n"
+-msgstr " Seznam mo¾ných tøíd adres (podporujících smìrování):\n"
++msgstr " Seznam možných tříd adres (podporujících směrování):\n"
++
++#: ../netstat.c:1756
++#, c-format
++msgid "netstat: No statistics support for specified address family: %s\n"
++msgstr "netstat: Pro zadanou rodinu adres není podporována statistika: %s\n"
+
+-#: ../netstat.c:1663
++#: ../netstat.c:1798
++#, c-format
+ msgid "Active Internet connections "
+-msgstr "Aktivní Internetová spojení "
++msgstr "Aktivní Internetová spojení "
+
+-#: ../netstat.c:1673
++#: ../netstat.c:1808
++#, c-format
+ msgid ""
+ "\n"
+-"Proto Recv-Q Send-Q Local Address Foreign Address State "
+-" "
++"Proto Recv-Q Send-Q Local Address Foreign Address "
++"State "
+ msgstr ""
+ "\n"
+-"Proto Pøích-F Odch-F Místní Adresa Vzdálená Adresa Stav "
++"Proto Přích-F Odch-F Místní Adresa Vzdálená Adresa Stav "
+
+-#: ../netstat.c:1675
++#: ../netstat.c:1810
++#, c-format
+ msgid " User Inode "
+-msgstr " U¾ivatel I-uzel "
++msgstr " Uživatel I-uzel "
+
+-#: ../netstat.c:1678
++#: ../netstat.c:1813
++#, c-format
+ msgid " Timer"
+-msgstr " Èasovaè"
++msgstr " ÄŒasovaÄ"
+
+-#: ../netstat.c:1708
++#: ../netstat.c:1851
++#, c-format
+ msgid "IPv4 Group Memberships\n"
+-msgstr "Èlenství v IPv4 skupinách\n"
++msgstr "Členství v IPv4 skupinách\n"
+
+-#: ../netstat.c:1709
++#: ../netstat.c:1852
++#, c-format
+ msgid "Interface RefCnt Group\n"
+-msgstr "Rozhraní Èítaè Skupina\n"
++msgstr "Rozhraní ČítaÄ Skupina\n"
+
+-#: ../rarp.c:43
++#: ../rarp.c:45
+ msgid "This kernel does not support RARP.\n"
+-msgstr "Toto jádro nepodporuje RARP.\n"
++msgstr "Toto jádro nepodporuje RARP.\n"
+
+-#: ../rarp.c:82
++#: ../rarp.c:84
+ #, c-format
+ msgid "no RARP entry for %s.\n"
+-msgstr "pro %s neexistuje RARP polo¾ka.\n"
++msgstr "pro %s neexistuje RARP položka.\n"
+
+-#: ../rarp.c:95
++#: ../rarp.c:97
+ #, c-format
+ msgid "%s: bad hardware address\n"
+-msgstr "hardwarová adresa %s je nesprávná\n"
++msgstr "hardwarová adresa %s je nesprávná\n"
+
+-#: ../rarp.c:127
++#: ../rarp.c:129
+ #, c-format
+ msgid "rarp: cannot open file %s:%s.\n"
+-msgstr "rarp: soubor %s:%s nelze otevøít.\n"
++msgstr "rarp: soubor %s:%s nelze otevřít.\n"
+
+-#: ../rarp.c:139
++#: ../rarp.c:141
+ #, c-format
+ msgid "rarp: format error at %s:%u\n"
+-msgstr "rarp: syntaktická chyba na øádku %2$u souboru %1$s\n"
++msgstr "rarp: syntaktická chyba na řádku %2$u souboru %1$s\n"
+
+-#: ../rarp.c:143 ../rarp.c:287
++#: ../rarp.c:145 ../rarp.c:290
+ #, c-format
+ msgid "rarp: %s: unknown host\n"
+-msgstr "rarp: poèítaè %s není znám\n"
++msgstr "rarp: poÄítaÄ %s není znám\n"
+
+-#: ../rarp.c:146
++#: ../rarp.c:148
+ #, c-format
+ msgid "rarp: cannot set entry from %s:%u\n"
+-msgstr "rarp: nelze nastavit polo¾ku z øádku %2$u souboru %1$s\n"
++msgstr "rarp: nelze nastavit položku z řádku %2$u souboru %1$s\n"
+
+-#: ../rarp.c:175
++#: ../rarp.c:177
++#, c-format
+ msgid "Usage: rarp -a list entries in cache.\n"
+-msgstr "Pou¾ití: rarp -a vypí¹e polo¾ky z cache.\n"
++msgstr "Použití: rarp -a vypíše položky z cache.\n"
+
+-#: ../rarp.c:176
++#: ../rarp.c:178
++#, c-format
+ msgid " rarp -d <hostname> delete entry from cache.\n"
+-msgstr " rarp -d <jméno> sma¾e polo¾ku z cache.\n"
++msgstr " rarp -d <jméno> smaže položku z cache.\n"
+
+-#: ../rarp.c:177
++#: ../rarp.c:179
++#, c-format
+ msgid " rarp [<HW>] -s <hostname> <hwaddr> add entry to cache.\n"
+ msgstr ""
+-" rarp [<HW>] -s <jméno> <hwadr> pøidá polo¾ku do cache.\n"
++" rarp [<HW>] -s <jméno> <hwadr> přidá položku do cache.\n"
+
+-#: ../rarp.c:178
++#: ../rarp.c:180
++#, c-format
+ msgid ""
+ " rarp -f add entries from /etc/ethers.\n"
+ msgstr ""
+-" rarp -f pøidá polo¾ky z /etc/ethers.\n"
++" rarp -f přidá položky z /etc/ethers.\n"
+
+-#: ../rarp.c:179
++#: ../rarp.c:181
++#, c-format
+ msgid ""
+ " rarp -V display program version.\n"
+ "\n"
+ msgstr ""
+-" rarp -V vypí¹e oznaèení verze "
++" rarp -V vypíše oznaÄení verze "
+ "programu.\n"
+ "\n"
+
+-#: ../rarp.c:236
++#: ../rarp.c:239
+ #, c-format
+ msgid "%s: illegal option mix.\n"
+-msgstr "Kombinace pøepínaèù %s je nesprávná.\n"
++msgstr "Kombinace pÅ™epínaÄů %s je nesprávná.\n"
+
+-#: ../rarp.c:267
++#: ../rarp.c:270
+ #, c-format
+ msgid "rarp: %s: unknown hardware type.\n"
+-msgstr "rarp: hardwarový typ %s není znám.\n"
++msgstr "rarp: hardwarový typ %s není znám.\n"
+
+-#: ../route.c:79
++#: ../route.c:80
++#, c-format
+ msgid ""
+ "Usage: route [-nNvee] [-FC] [<AF>] List kernel routing tables\n"
+ msgstr ""
+-"Pou¾ití: route [-nNvee] [-FC] [<AF>] Zobrazí smìrovací tabulky v "
+-"jádru\n"
++"Použití: route [-nNvee] [-FC] [<AF>] Zobrazí směrovací tabulky v "
++"jádru\n"
+
+-#: ../route.c:80
++#: ../route.c:81
++#, c-format
+ msgid ""
+ " route [-v] [-FC] {add|del|flush} ... Modify routing table for AF.\n"
+ "\n"
+ msgstr ""
+-" route [-v] [-FC] {add|del|flush} ... Zmìní smìrovací tabulku pro "
++" route [-v] [-FC] {add|del|flush} ... Změní směrovací tabulku pro "
+ "AF.\n"
+ "\n"
+
+-#: ../route.c:82
++#: ../route.c:83
++#, c-format
+ msgid ""
+ " route {-h|--help} [<AF>] Detailed usage syntax for "
+ "specified AF.\n"
+ msgstr ""
+-" route {-h|--help [<AF>] Nápovìda pro pou¾ití s AF.\n"
++" route {-h|--help [<AF>] Nápověda pro použití s AF.\n"
+
+-#: ../route.c:83
++#: ../route.c:84
++#, c-format
+ msgid ""
+ " route {-V|--version} Display version/author and "
+ "exit.\n"
+ "\n"
+ msgstr ""
+-" route {-V|--version} Vypí¹e oznaèení verze a autora\n"
++" route {-V|--version} Vypíše oznaÄení verze a autora\n"
+ " programu.\n"
+
++#: ../route.c:92
++#, c-format
++msgid " <AF>=Use '-A <af>' or '--<af>'; default: %s\n"
++msgstr " <AF>=Použijte „-A <af>“ nebo „--<af>“. Implicitní: %s\n"
++
+ #: ../plipconfig.c:66
++#, c-format
+ msgid "Usage: plipconfig [-a] [-i] [-v] interface\n"
+-msgstr "Pou¾ití: plipconfig [-a] [-i] [-v] rozhraní\n"
++msgstr "Použití: plipconfig [-a] [-i] [-v] rozhraní\n"
+
+ #: ../plipconfig.c:67
++#, c-format
+ msgid " [nibble NN] [trigger NN]\n"
+ msgstr " [nibble NN] [trigger NN]\n"
+
+ #: ../plipconfig.c:68
++#, c-format
+ msgid " plipconfig -V | --version\n"
+ msgstr " plipconfig -V | --version\n"
+
+@@ -1338,25 +1371,30 @@ msgstr " plipconfig -V | --version\n"
+ msgid "%s\tnibble %lu trigger %lu\n"
+ msgstr "%s\tnibble %lu trigger %lu\n"
+
+-#: ../iptunnel.c:79
++#: ../iptunnel.c:85
++#, c-format
+ msgid "Usage: iptunnel { add | change | del | show } [ NAME ]\n"
+-msgstr "Pou¾ití: iptunnel { add | change | del | show } [ JMÉNO ]\n"
++msgstr "Použití: iptunnel { add | change | del | show } [ JMÉNO ]\n"
+
+-#: ../iptunnel.c:80
++#: ../iptunnel.c:86
++#, c-format
+ msgid ""
+ " [ mode { ipip | gre | sit } ] [ remote ADDR ] [ local ADDR ]\n"
+ msgstr ""
+-" [ mode { ipip | gre | sit } ] [ vzdálená ADR ] [ místní ADR ]\n"
++" [ mode { ipip | gre | sit } ] [ vzdálená ADR ] [ místní ADR ]\n"
+
+-#: ../iptunnel.c:81
++#: ../iptunnel.c:87
++#, c-format
+ msgid " [ [i|o]seq ] [ [i|o]key KEY ] [ [i|o]csum ]\n"
+-msgstr " [ [i|o]seq ] [ [i|o]key KLÍÈ ] [ [i|o]csum ]\n"
++msgstr " [ [i|o]seq ] [ [i|o]key KL̀Π] [ [i|o]csum ]\n"
+
+-#: ../iptunnel.c:82
++#: ../iptunnel.c:88
++#, c-format
+ msgid " [ ttl TTL ] [ tos TOS ] [ nopmtudisc ] [ dev PHYS_DEV ]\n"
+-msgstr " [ ttl TTL ] [ tos TOS ] [ nopmtudisc ] [ dev ZAØÍZENÍ ]\n"
++msgstr " [ ttl TTL ] [ tos TOS ] [ nopmtudisc ] [ dev ZAŘÃZENà ]\n"
+
+-#: ../iptunnel.c:83
++#: ../iptunnel.c:89
++#, c-format
+ msgid ""
+ " iptunnel -V | --version\n"
+ "\n"
+@@ -1364,1068 +1402,1781 @@ msgstr ""
+ " iptunnel -V | --version\n"
+ "\n"
+
+-#: ../iptunnel.c:84
++#: ../iptunnel.c:90
++#, c-format
+ msgid "Where: NAME := STRING\n"
+-msgstr "Kde: JMÉNO := ØETÌZEC\n"
++msgstr "Kde: JMÉNO := ŘETĚZEC\n"
+
+-#: ../iptunnel.c:85
++#: ../iptunnel.c:91
++#, c-format
+ msgid " ADDR := { IP_ADDRESS | any }\n"
+ msgstr " ADR := { IP-ADRESA | any }\n"
+
+-#: ../iptunnel.c:86
++#: ../iptunnel.c:92
++#, c-format
+ msgid " TOS := { NUMBER | inherit }\n"
+-msgstr " TOS := { ÈÍSLO | inherit }\n"
++msgstr " TOS := { ÄŒÃSLO | inherit }\n"
+
+-#: ../iptunnel.c:87
++#: ../iptunnel.c:93
++#, c-format
+ msgid " TTL := { 1..255 | inherit }\n"
+ msgstr " TTL := { 1..255 | inherit }\n"
+
+-#: ../iptunnel.c:88
++#: ../iptunnel.c:94
++#, c-format
+ msgid " KEY := { DOTTED_QUAD | NUMBER }\n"
+-msgstr " KLÍÈ := { DOTTED_QUAD | ÈÍSLO }\n"
++msgstr " KLÃÄŒ := { DOTTED_QUAD | ÄŒÃSLO }\n"
+
+-#: ../iptunnel.c:326
++#: ../iptunnel.c:332
++#, c-format
+ msgid "Keys are not allowed with ipip and sit.\n"
+-msgstr "S ipip a sit nejsou klíèe povoleny.\n"
++msgstr "S ipip a sit nejsou klíÄe povoleny.\n"
+
+-#: ../iptunnel.c:346
++#: ../iptunnel.c:352
++#, c-format
+ msgid "Broadcast tunnel requires a source address.\n"
+-msgstr "Tunel se v¹esmìrovým vysíláním vy¾aduje zdrojovou adresu.\n"
++msgstr "Tunel se všesměrovým vysíláním vyžaduje zdrojovou adresu.\n"
+
+-#: ../iptunnel.c:361
++#: ../iptunnel.c:367
++#, c-format
+ msgid "ttl != 0 and noptmudisc are incompatible\n"
+-msgstr "ttl != 0 a noptmudisc se navzájem vyluèují\n"
++msgstr "ttl != 0 a noptmudisc se navzájem vyluÄují\n"
+
+-#: ../iptunnel.c:373
++#: ../iptunnel.c:379
++#, c-format
+ msgid "cannot determine tunnel mode (ipip, gre or sit)\n"
+-msgstr "re¾im tunelu (ipip, gre èi sit) nelze zjistit\n"
++msgstr "režim tunelu (ipip, gre Äi sit) nelze zjistit\n"
+
+-#: ../iptunnel.c:411
++#: ../iptunnel.c:417
+ #, c-format
+ msgid "%s: %s/ip remote %s local %s "
+-msgstr "%s: %s/ip vzdálený %s místní %s "
++msgstr "%s: %s/ip vzdálený %s místní %s "
+
+-#: ../iptunnel.c:415
++#: ../iptunnel.c:421
+ msgid "unknown"
+-msgstr "Neznám."
++msgstr "Neznám."
+
+-#: ../iptunnel.c:447
++#: ../iptunnel.c:453
++#, c-format
+ msgid " Drop packets out of sequence.\n"
+-msgstr " Zahazuje pakety mimo poøadí.\n"
++msgstr " Zahazuje pakety mimo pořadí.\n"
+
+-#: ../iptunnel.c:449
++#: ../iptunnel.c:455
++#, c-format
+ msgid " Checksum in received packet is required.\n"
+-msgstr " Pøijímané pakety musí mít kontrolní souèet.\n"
++msgstr " PÅ™ijímané pakety musí mít kontrolní souÄet.\n"
+
+ # ???
+-#: ../iptunnel.c:451
++#: ../iptunnel.c:457
++#, c-format
+ msgid " Sequence packets on output.\n"
+-msgstr " Øadí odchozí pakety.\n"
++msgstr " Řadí odchozí pakety.\n"
+
+-#: ../iptunnel.c:453
++#: ../iptunnel.c:459
++#, c-format
+ msgid " Checksum output packets.\n"
+-msgstr " Odchozí pakety budou mít kontrolní souèet.\n"
++msgstr " Odchozí pakety budou mít kontrolní souÄet.\n"
+
+-#: ../iptunnel.c:481
++#: ../iptunnel.c:487
++#, c-format
+ msgid "Wrong format of /proc/net/dev. Sorry.\n"
+-msgstr "Lituji, formát /proc/net/dev je chybný.\n"
++msgstr "Lituji, formát /proc/net/dev je chybný.\n"
+
+-#: ../iptunnel.c:494
++#: ../iptunnel.c:500
+ #, c-format
+ msgid "Failed to get type of [%s]\n"
+-msgstr "Typ [%s] se nepodaøilo zjistit.\n"
++msgstr "Typ [%s] se nepodařilo zjistit.\n"
+
+-#: ../iptunnel.c:510
++#: ../iptunnel.c:516
++#, c-format
+ msgid "RX: Packets Bytes Errors CsumErrs OutOfSeq Mcasts\n"
+-msgstr "RX: Pakety Bajty Chyby CsumChyb MimoPoø Mcasts\n"
++msgstr "RX: Pakety Bajty Chyby CsumChyb MimoPoÅ™ Mcasts\n"
+
+-#: ../iptunnel.c:513
++#: ../iptunnel.c:519
++#, c-format
+ msgid "TX: Packets Bytes Errors DeadLoop NoRoute NoBufs\n"
+ msgstr "TX: Pakety Bajty Chyby DeadLoop NoRoute NoBufs\n"
+
+-#: ../statistics.c:45
++#: ../statistics.c:48
+ msgid "ICMP input histogram:"
+-msgstr "histogram ICMP vstupu:"
++msgstr "Histogram ICMP vstupu:"
+
+-#: ../statistics.c:46
++#: ../statistics.c:49
+ msgid "ICMP output histogram:"
+-msgstr "histogram ICMP výstupu:"
++msgstr "Histogram ICMP výstupu:"
++
++#: ../statistics.c:66
++#, c-format
++msgid "Forwarding is %s"
++msgstr "Předávání je %s"
++
++#: ../statistics.c:67
++#, c-format
++msgid "Default TTL is %u"
++msgstr "Implicitní TTL je %u"
++
++#: ../statistics.c:68 ../statistics.c:89
++#, c-format
++msgid "%u total packets received"
++msgstr "Celkem přijatých paketů: %u"
++
++#: ../statistics.c:69 ../statistics.c:90
++#, c-format
++msgid "%u with invalid headers"
++msgstr "S nesprávnými hlaviÄkami: %u"
++
++#: ../statistics.c:70 ../statistics.c:93
++#, c-format
++msgid "%u with invalid addresses"
++msgstr "S nesprávnými adresami: %u"
++
++#: ../statistics.c:71 ../statistics.c:98
++#, c-format
++msgid "%u forwarded"
++msgstr "Přeposláno: %u"
++
++#: ../statistics.c:72 ../statistics.c:94
++#, c-format
++msgid "%u with unknown protocol"
++msgstr "S neznámým protokolem: %u"
++
++#: ../statistics.c:73 ../statistics.c:96
++#, c-format
++msgid "%u incoming packets discarded"
++msgstr "PoÄet zahozených příchozích paketů: %u"
++
++#: ../statistics.c:74 ../statistics.c:97
++#, c-format
++msgid "%u incoming packets delivered"
++msgstr "PoÄet doruÄených příchozích paketů: %u"
++
++#: ../statistics.c:75 ../statistics.c:99
++#, c-format
++msgid "%u requests sent out"
++msgstr "PoÄet požadavků na odeslání: %u"
++
++#. ?
++#: ../statistics.c:76 ../statistics.c:100
++#, c-format
++msgid "%u outgoing packets dropped"
++msgstr "PoÄet zahozených odchozích paketů: %u"
++
++#: ../statistics.c:77 ../statistics.c:101
++#, c-format
++msgid "%u dropped because of missing route"
++msgstr "Zahozeno kvůli chybějící cestě: %u"
++
++#: ../statistics.c:78 ../statistics.c:102
++#, c-format
++msgid "%u fragments dropped after timeout"
++msgstr "PoÄet fragmentů zahozených po vyprÅ¡ení Äasu: %u"
++
++#: ../statistics.c:79 ../statistics.c:103
++#, c-format
++msgid "%u reassemblies required"
++msgstr "PoÄet nutných znovusestavení: %u"
++
++#. ?
++#: ../statistics.c:80 ../statistics.c:104
++#, c-format
++msgid "%u packets reassembled ok"
++msgstr "PoÄet v pořádku znovu sestavených paketů: %u"
++
++#: ../statistics.c:81 ../statistics.c:105
++#, c-format
++msgid "%u packet reassembles failed"
++msgstr "PoÄet paketů, jež se nepodaÅ™ilo znovu sestavit: %u"
++
++#: ../statistics.c:82 ../statistics.c:106
++#, c-format
++msgid "%u fragments received ok"
++msgstr "PoÄet v pořádku pÅ™ijatých fragmentů: %u"
++
++#: ../statistics.c:83 ../statistics.c:107
++#, c-format
++msgid "%u fragments failed"
++msgstr "PoÄet chybných fragmentů: %u"
++
++#: ../statistics.c:84 ../statistics.c:108
++#, c-format
++msgid "%u fragments created"
++msgstr "PoÄet vytvoÅ™ených fragmentů: %u"
++
++#: ../statistics.c:91
++#, c-format
++msgid "%u with packets too big"
++msgstr "PoÄet příliÅ¡ velkých packetů: %u"
++
++#: ../statistics.c:92
++#, c-format
++msgid "%u incoming packets with no route"
++msgstr "PoÄet příchozích paketů bez odpovídající cesty: %u"
++
++#: ../statistics.c:95
++#, c-format
++msgid "%u with truncated packets"
++msgstr "PoÄet zkrácených packetů: %u"
++
++#: ../statistics.c:109
++#, c-format
++msgid "%u incoming multicast packets"
++msgstr "PoÄet příchozích multicastových paketů: %u"
++
++#: ../statistics.c:110
++#, c-format
++msgid "%u outgoing multicast packets"
++msgstr "PoÄet odchozích multicastových paketů: %u"
++
++#: ../statistics.c:115 ../statistics.c:145
++#, c-format
++msgid "%u ICMP messages received"
++msgstr "PoÄet pÅ™ijatých ICMP zpráv: %u"
++
++#: ../statistics.c:116 ../statistics.c:146
++#, c-format
++msgid "%u input ICMP message failed."
++msgstr "PoÄet chybných příchozích ICMP zpráv: %u"
++
++#: ../statistics.c:117 ../statistics.c:130 ../statistics.c:147
++#: ../statistics.c:162
++#, c-format
++msgid "destination unreachable: %u"
++msgstr "Adresát nedostupný: %u"
++
++#: ../statistics.c:118
++#, c-format
++msgid "timeout in transit: %u"
++msgstr "VyprÅ¡el Äas pÅ™i pÅ™enosu: %u"
++
++#: ../statistics.c:119 ../statistics.c:132
++#, c-format
++msgid "wrong parameters: %u"
++msgstr "Chybné parametry: %u"
++
++#. ?
++#: ../statistics.c:120
++#, c-format
++msgid "source quenches: %u"
++msgstr "Zahlcení zdroje: %u"
++
++#: ../statistics.c:121 ../statistics.c:160 ../statistics.c:175
++#, c-format
++msgid "redirects: %u"
++msgstr "PoÄet pÅ™esmÄ›rování: %u"
++
++#: ../statistics.c:122 ../statistics.c:151 ../statistics.c:166
++#, c-format
++msgid "echo requests: %u"
++msgstr "Žádost o echo: %u"
++
++#: ../statistics.c:123 ../statistics.c:136 ../statistics.c:152
++#: ../statistics.c:167
++#, c-format
++msgid "echo replies: %u"
++msgstr "OdpovÄ›Ä na žádost o echo: %u"
++
++#: ../statistics.c:124
++#, c-format
++msgid "timestamp request: %u"
++msgstr "Žádost o Äas: %u"
++
++#: ../statistics.c:125
++#, c-format
++msgid "timestamp reply: %u"
++msgstr "OdpovÄ›Ä na žádost o Äas: %u"
++
++#: ../statistics.c:126
++#, c-format
++msgid "address mask request: %u"
++msgstr "Žádost o masku podsítě: %u"
++
++#. ?
++#: ../statistics.c:127 ../statistics.c:140
++#, c-format
++msgid "address mask replies: %u"
++msgstr "OdpovÄ›Ä na žádost o masku podsítÄ›: %u"
++
++#. ?
++#: ../statistics.c:128 ../statistics.c:161
++#, c-format
++msgid "%u ICMP messages sent"
++msgstr "PoÄet odeslaných ICMP zpráv: %u"
++
++#: ../statistics.c:129
++#, c-format
++msgid "%u ICMP messages failed"
++msgstr "PoÄet chybných ICMP zpráv: %u"
++
++#: ../statistics.c:131
++#, c-format
++msgid "time exceeded: %u"
++msgstr "Vypršení životnosti: %u"
++
++#. ?
++#: ../statistics.c:133
++#, c-format
++msgid "source quench: %u"
++msgstr "Zahlcení zdroje: %u"
++
++#: ../statistics.c:134
++#, c-format
++msgid "redirect: %u"
++msgstr "PoÄet pÅ™esmÄ›rování: %u"
++
++#: ../statistics.c:135
++#, c-format
++msgid "echo request: %u"
++msgstr "Žádost o echo: %u"
++
++#: ../statistics.c:137
++#, c-format
++msgid "timestamp requests: %u"
++msgstr "žádost o Äas: %u"
++
++#: ../statistics.c:138
++#, c-format
++msgid "timestamp replies: %u"
++msgstr "OdpovÄ›Ä na žádost o Äas: %u"
++
++#: ../statistics.c:139
++#, c-format
++msgid "address mask requests: %u"
++msgstr "Žádost o masku podsítě: %u"
++
++#: ../statistics.c:148 ../statistics.c:163
++#, c-format
++msgid "packets too big: %u"
++msgstr "Příliš velkých packetů: %u"
++
++#: ../statistics.c:149
++#, c-format
++msgid "received ICMPv6 time exceeded: %u"
++msgstr "Přijato ICMPv6 vypršení životnosti: %u"
++
++#: ../statistics.c:150 ../statistics.c:165
++#, c-format
++msgid "parameter problem: %u"
++msgstr "Problém s parametrem: %u"
++
++#: ../statistics.c:153 ../statistics.c:168
++#, c-format
++msgid "group member queries: %u"
++msgstr "Dotazů na Älenství ve skupinÄ›: %u"
++
++#: ../statistics.c:154 ../statistics.c:169
++#, c-format
++msgid "group member responses: %u"
++msgstr "OdpovÄ›dí na Älenství ve skupinÄ›: %u"
++
++#: ../statistics.c:155 ../statistics.c:170
++#, c-format
++msgid "group member reductions: %u"
++msgstr "PoÄet snížení Älenů skupiny: %u"
++
++#: ../statistics.c:156 ../statistics.c:171
++#, c-format
++msgid "router solicits: %u"
++msgstr "PoÄet výzev smÄ›rovaÄi: %u"
++
++#: ../statistics.c:157 ../statistics.c:172
++#, c-format
++msgid "router advertisement: %u"
++msgstr "PoÄet oznámení smÄ›rovaÄe: %u"
++
++#: ../statistics.c:158
++#, c-format
++msgid "neighbour solicits: %u"
++msgstr "PoÄet výzev sousedovi: %u"
++
++#: ../statistics.c:159
++#, c-format
++msgid "neighbour advertisement: %u"
++msgstr "PoÄet oznámení souseda: %u"
++
++#: ../statistics.c:164
++#, c-format
++msgid "sent ICMPv6 time exceeded: %u"
++msgstr "PoÄet odeslaných ICMPv6 vyprÅ¡ení životnosti: %u"
++
++#: ../statistics.c:173
++#, c-format
++msgid "neighbor solicits: %u"
++msgstr "PoÄet výzev sousedovi: %u"
++
++#: ../statistics.c:174
++#, c-format
++msgid "neighbor advertisements: %u"
++msgstr "PoÄet oznámení souseda: %u"
++
++#: ../statistics.c:180
++#, c-format
++msgid "RTO algorithm is %s"
++msgstr "RTO algoritmus je %s"
++
++#: ../statistics.c:184
++#, c-format
++msgid "%u active connections openings"
++msgstr "PoÄet aktivnÄ› navázaných spojení: %u"
++
++#: ../statistics.c:185
++#, c-format
++msgid "%u passive connection openings"
++msgstr "PoÄet pasivnÄ› navázaných spojení: %u"
++
++#: ../statistics.c:186
++#, c-format
++msgid "%u failed connection attempts"
++msgstr "PoÄet neúspěšných pokusů o spojení: %u"
++
++#: ../statistics.c:187
++#, c-format
++msgid "%u connection resets received"
++msgstr "PoÄet pÅ™ijatých resetů spojení: %u"
++
++#: ../statistics.c:188
++#, c-format
++msgid "%u connections established"
++msgstr "PoÄet navázaných spojení: %u"
++
++#: ../statistics.c:189
++#, c-format
++msgid "%u segments received"
++msgstr "PoÄet pÅ™ijatých segmentů: %u"
++
++#: ../statistics.c:190
++#, c-format
++msgid "%u segments send out"
++msgstr "PoÄet odeslaných segmentů: %u"
++
++#: ../statistics.c:191
++#, c-format
++msgid "%u segments retransmited"
++msgstr "PoÄet pÅ™enesených segmentů: %u"
++
++#: ../statistics.c:192
++#, c-format
++msgid "%u bad segments received."
++msgstr "PoÄet chybných příchozích segmentů: %u"
++
++#: ../statistics.c:193
++#, c-format
++msgid "%u resets sent"
++msgstr "PoÄet odeslaných resetů: %u"
++
++#: ../statistics.c:198 ../statistics.c:206
++#, c-format
++msgid "%u packets received"
++msgstr "PoÄet pÅ™ijatých paketů: %u"
++
++#: ../statistics.c:199 ../statistics.c:207
++#, c-format
++msgid "%u packets to unknown port received."
++msgstr "PoÄet paketů pÅ™ijatých pro neznámý port: %u"
++
++#: ../statistics.c:200 ../statistics.c:208
++#, c-format
++msgid "%u packet receive errors"
++msgstr "PoÄet chyb pÅ™i příjmu paketů: %u"
++
++#: ../statistics.c:201 ../statistics.c:209
++#, c-format
++msgid "%u packets sent"
++msgstr "PoÄet odeslaných paketů: %u"
++
++#: ../statistics.c:214
++#, c-format
++msgid "%u SYN cookies sent"
++msgstr "PoÄet odeslaných SYN cookies: %u"
+
+-#: ../statistics.c:63
++#: ../statistics.c:215
+ #, c-format
+-msgid "Forwarding is %s"
+-msgstr "Pøedávání je %s"
++msgid "%u SYN cookies received"
++msgstr "PoÄet pÅ™ijatých SYN cookies: %u"
+
+-#: ../statistics.c:64
++#: ../statistics.c:216
+ #, c-format
+-msgid "Default TTL is %d"
+-msgstr "Implicitní TTL je %d"
++msgid "%u invalid SYN cookies received"
++msgstr "PoÄet chybných příchozích SYN cookies: %u"
+
+-#: ../statistics.c:65
++#: ../statistics.c:218
+ #, c-format
+-msgid "%d total packets received"
+-msgstr "celkem pøijmutých paketù: %d"
++msgid "%u resets received for embryonic SYN_RECV sockets"
++msgstr "PoÄet resetů pÅ™ijatých pro sokety v zárodeÄném stavu SYN_PŘÃCH: %u"
+
+-#: ../statistics.c:66
++#: ../statistics.c:220
+ #, c-format
+-msgid "%d with invalid headers"
+-msgstr "s nesprávnými hlavièkami: %d"
++msgid "%u packets pruned from receive queue because of socket buffer overrun"
++msgstr ""
++"PoÄet packetů odstranÄ›ných z pÅ™ijímací fronty kvůli pÅ™eteÄení bufferu "
++"socketu: %u"
+
+-#: ../statistics.c:67
++#. obsolete: 2.2.0 doesn't do that anymore
++#: ../statistics.c:223
+ #, c-format
+-msgid "%d with invalid addresses"
+-msgstr "s nesprávnými adresami: %d"
++msgid "%u packets pruned from receive queue"
++msgstr "PoÄet packetů odstranÄ›ných z pÅ™ijímací fronty: %u"
+
+-#: ../statistics.c:68
++#: ../statistics.c:224
+ #, c-format
+-msgid "%d forwarded"
+-msgstr "pøedáno: %d"
++msgid ""
++"%u packets dropped from out-of-order queue because of socket buffer overrun"
++msgstr ""
++"PoÄet packetů zahozených z fronty mimo-poÅ™adí kvůli pÅ™eteÄení bufferu "
++"socketu: %u"
+
+-#: ../statistics.c:69
++#: ../statistics.c:226
+ #, c-format
+-msgid "%d with unknown protocol"
+-msgstr "s neznámým protokolem: %d"
++msgid "%u ICMP packets dropped because they were out-of-window"
++msgstr "PoÄet ICMP packetů zahozených, protože byly mimo okno: %u"
+
+-#: ../statistics.c:70
++#: ../statistics.c:228
+ #, c-format
+-msgid "%d incoming packets discarded"
+-msgstr "poèet zahozených pøíchozích paketù: %d"
++msgid "%u ICMP packets dropped because socket was locked"
++msgstr "PoÄet ICMP packetů zahozených kvůli zamÄenému socketu: %u"
+
+-#: ../statistics.c:71
++#: ../statistics.c:230
+ #, c-format
+-msgid "%d incoming packets delivered"
+-msgstr "poèet doruèených pøíchozích paketù: %d"
++msgid "%u TCP sockets finished time wait in fast timer"
++msgstr ""
++"PoÄet TCP socketů, které ukonÄily fázi time-wait uvnitÅ™ rychlého ÄasovaÄe: %u"
+
+-#: ../statistics.c:72
++#: ../statistics.c:231
+ #, c-format
+-msgid "%d requests sent out"
+-msgstr "poèet odeslaných po¾adavkù: %d"
++msgid "%u time wait sockets recycled by time stamp"
++msgstr ""
++"PoÄet socketů ve fázi time-wait, které byly znovu použity díky Äasovému "
++"razítku: %u"
+
+-#. ?
+-#: ../statistics.c:73
++#: ../statistics.c:232
+ #, c-format
+-msgid "%d outgoing packets dropped"
+-msgstr "poèet zahozených odchozích paketù: %d"
++msgid "%u TCP sockets finished time wait in slow timer"
++msgstr ""
++"PoÄet TCP socketů, které ukonÄily fázi time-wait uvnitÅ™ pomalého ÄasovaÄe: %u"
+
+-#: ../statistics.c:74
++#: ../statistics.c:233
+ #, c-format
+-msgid "%d dropped because of missing route"
+-msgstr "zahozeno kvùli chybìjící cestì: %d"
++msgid "%u passive connections rejected because of time stamp"
++msgstr "PoÄet odmítnutých pasivních spojení kvůli Äasovému razítku: %u"
+
+-#: ../statistics.c:75
++#: ../statistics.c:235
+ #, c-format
+-msgid "%d fragments dropped after timeout"
+-msgstr "poèet fragmentù zahozených po vypr¹ení èasu: %d"
++msgid "%u active connections rejected because of time stamp"
++msgstr "PoÄet odmítnutých aktivních spojení kvůli Äasovému razítku: %u"
+
+-#: ../statistics.c:76
++#: ../statistics.c:237
+ #, c-format
+-msgid "%d reassemblies required"
+-msgstr "poèet nutných znovusestavení: %d"
++msgid "%u packets rejects in established connections because of timestamp"
++msgstr ""
++"PoÄet odmítnutých packetů uvnitÅ™ navázaného spojení kvůli Äasovému razítku: %"
++"u"
+
+-#. ?
+-#: ../statistics.c:77
++#: ../statistics.c:239
+ #, c-format
+-msgid "%d packets reassembled ok"
+-msgstr "poèet v poøádku znovu sestavených paketù: %d"
++msgid "%u delayed acks sent"
++msgstr "PoÄet odeslaných zpoždÄ›ných potvrzení: %u"
+
+-#: ../statistics.c:78
++#: ../statistics.c:240
+ #, c-format
+-msgid "%d packet reassembles failed"
+-msgstr "poèet paketù, je¾ se nepodaøilo znovu sestavit: %d"
++msgid "%u delayed acks further delayed because of locked socket"
++msgstr ""
++"PoÄet zpoždÄ›ných potvrzení dále pozdržených kvůli zamÄenému socketu: %u"
+
+-#: ../statistics.c:79
++#: ../statistics.c:242
+ #, c-format
+-msgid "%d fragments received ok"
+-msgstr "poèet v poøádku pøijmutých fragmentù: %d"
++msgid "Quick ack mode was activated %u times"
++msgstr "PoÄet aktivovaní rychlého potvrzovacího režimu: %u"
+
+-#: ../statistics.c:80
++#: ../statistics.c:243
+ #, c-format
+-msgid "%d fragments failed"
+-msgstr "poèet chybných fragmentù: %d"
++msgid "%u times the listen queue of a socket overflowed"
++msgstr "PoÄet pÅ™eteÄení naslouchací fronty socketu: %u"
+
+-#: ../statistics.c:81
++#: ../statistics.c:245
+ #, c-format
+-msgid "%d fragments created"
+-msgstr "poèet vytvoøených fragmentù: %d"
++msgid "%u SYNs to LISTEN sockets dropped"
++msgstr "PoÄet zahozených SYN packetů urÄených naslouchajícímu socketu: %u"
+
+-#: ../statistics.c:86
++#: ../statistics.c:246
+ #, c-format
+-msgid "%d ICMP messages received"
+-msgstr "poèet pøijmutých ICMP zpráv: %d"
++msgid "%u packets directly queued to recvmsg prequeue."
++msgstr "PoÄet packetů přímo zaÅ™azených do pÅ™edfronty recvmsg: %u"
+
+-#: ../statistics.c:87
++#: ../statistics.c:248
+ #, c-format
+-msgid "%d input ICMP message failed."
+-msgstr "poèet chybných pøíchozích ICMP zpráv: %d"
++msgid "%u bytes directly in process context from backlog"
++msgstr "PoÄet bajtů pÅ™edaných přímo z backlogu do kontextu procesu: %u"
+
+-#: ../statistics.c:88 ../statistics.c:101
++#: ../statistics.c:249
+ #, c-format
+-msgid "destination unreachable: %d"
+-msgstr "adresát nedostupný: %d"
++msgid "%u bytes directly received in process context from prequeue"
++msgstr "PoÄet bajtů přímo pÅ™ijatých do kontextu procesu z pÅ™edfronty: %u"
+
+-#: ../statistics.c:89
++#: ../statistics.c:251
+ #, c-format
+-msgid "timeout in transit: %d"
+-msgstr "vypr¹el èas pøi pøenosu: %d"
++msgid "%u packets dropped from prequeue"
++msgstr "PoÄet paketů odstranÄ›ných z pÅ™edfronty: %u"
+
+-#: ../statistics.c:90 ../statistics.c:103
++#: ../statistics.c:252
+ #, c-format
+-msgid "wrong parameters: %d"
+-msgstr "chybné parametry: %d"
++msgid "%u packet headers predicted"
++msgstr "PoÄet pÅ™edpovÄ›zených hlaviÄek packetů: %u"
+
+-#. ?
+-#: ../statistics.c:91
++#: ../statistics.c:253
+ #, c-format
+-msgid "source quenchs: %d"
+-msgstr "øízení toku dat: %d"
++msgid "%u packets header predicted and directly queued to user"
++msgstr "PoÄet hlaviÄek packetů pÅ™edpovÄ›zených a přímo pÅ™edaných uživateli: %u"
+
+-#: ../statistics.c:92
++#: ../statistics.c:255
+ #, c-format
+-msgid "redirects: %d"
+-msgstr "zmìna cesty: %d"
++msgid "Ran %u times out of system memory during packet sending"
++msgstr "Kolikrát systému došla paměť při odesílání packetu: %u"
+
+-#: ../statistics.c:93
++#: ../statistics.c:257
+ #, c-format
+-msgid "echo requests: %d"
+-msgstr "¾ádost o echo: %d"
++msgid "%u acknowledgments not containing data payload received"
++msgstr "PoÄet pÅ™ijatých potvrzení neobsahující data: %u"
+
+-#: ../statistics.c:94 ../statistics.c:107
++#: ../statistics.c:258
+ #, c-format
+-msgid "echo replies: %d"
+-msgstr "odpovìï na ¾ádost o echo: %d"
++msgid "%u predicted acknowledgments"
++msgstr "PoÄet pÅ™edpovÄ›zených potvrzení: %u"
+
+-#: ../statistics.c:95
++#: ../statistics.c:259
+ #, c-format
+-msgid "timestamp request: %d"
+-msgstr "¾ádost o èas: %d"
++msgid "%u times recovered from packet loss due to fast retransmit"
++msgstr "PoÄet zotavení ze ztráty packetu kvůli rychle opakovanému odeslání: %u"
+
+-#: ../statistics.c:96
++#: ../statistics.c:260
+ #, c-format
+-msgid "timestamp reply: %d"
+-msgstr "odpovìï na ¾ádost o èas: %d"
++msgid "%u times recovered from packet loss by selective acknowledgements"
++msgstr "PoÄet zotavení ze ztráty packetu pomocí vybÄ›rových potvrzení: %u"
+
+-#: ../statistics.c:97
++#: ../statistics.c:261
+ #, c-format
+-msgid "address mask request: %d"
+-msgstr "¾ádost o masku podsítì: %d"
++msgid "%u bad SACK blocks received"
++msgstr "PoÄet pÅ™ijatých chybných SACK bloků: %u"
+
+-#. ?
+-#: ../statistics.c:98
+-msgid "address mask replies"
+-msgstr "odpovìdi na ¾ádost o masku podsítì"
++#: ../statistics.c:262
++#, c-format
++msgid "Detected reordering %u times using FACK"
++msgstr "Kolikrát byla nalezena změna pořadí pomocí FACK: %u"
+
+-#. ?
+-#: ../statistics.c:99
++#: ../statistics.c:263
+ #, c-format
+-msgid "%d ICMP messages sent"
+-msgstr "poèet odeslaných ICMP zpráv: %d"
++msgid "Detected reordering %u times using SACK"
++msgstr "Kolikrát byla nalezena změna pořadí pomocí SACK: %u"
+
+-#: ../statistics.c:100
++#: ../statistics.c:264
+ #, c-format
+-msgid "%d ICMP messages failed"
+-msgstr "poèet chybných ICMP zpráv: %d"
++msgid "Detected reordering %u times using time stamp"
++msgstr "Kolikrát byla nalezena zmÄ›na poÅ™adí pomocí Äasového razítka: %u"
+
+-#: ../statistics.c:102
++#: ../statistics.c:265
+ #, c-format
+-msgid "time exceeded: %d"
+-msgstr "vypr¹ení ¾ivotnosti: %d"
++msgid "Detected reordering %u times using reno fast retransmit"
++msgstr ""
++"Kolikrát byla nalezena změna pořadí kvůli rychlému znovuodeslání Reno: %u"
+
+-#. ?
+-#: ../statistics.c:104
++#: ../statistics.c:266
+ #, c-format
+-msgid "source quench: %d"
+-msgstr "øízení toku dat: %d"
++msgid "%u congestion windows fully recovered without slow start"
++msgstr "PoÄet plných zotavení ze zahlcení okna bez pomalého startu: %u"
+
+-#: ../statistics.c:105
++#: ../statistics.c:267
+ #, c-format
+-msgid "redirect: %d"
+-msgstr "zmìna cesty: %d"
++msgid "%u congestion windows partially recovered using Hoe heuristic"
++msgstr "PoÄet ÄásteÄných zotavení ze zahlcení okna pomocí heuristiky Hoe: %u"
+
+-#: ../statistics.c:106
++#: ../statistics.c:268
+ #, c-format
+-msgid "echo request: %d"
+-msgstr "¾ádost o echo: %d"
++msgid "%u congestion window recovered without slow start using DSACK"
++msgstr "PoÄet zotavení ze zahlceného okna bez pomalého startu pomocí DSACK: %u"
+
+-#: ../statistics.c:108
++#: ../statistics.c:269
+ #, c-format
+-msgid "timestamp requests: %d"
+-msgstr "¾ádost o èas: %d"
++msgid "%u congestion windows recovered without slow start after partial ack"
++msgstr ""
++"PoÄet zotavení ze zahlcení okna bez pomalého startu po ÄásteÄném potvrzení: %"
++"u"
+
+-#: ../statistics.c:109
++#: ../statistics.c:270
+ #, c-format
+-msgid "timestamp replies: %d"
+-msgstr "odpovìï na ¾ádost o èas: %d"
++msgid "%u retransmits lost"
++msgstr "PoÄet ztracených opakovaných odeslání: %u"
+
+-#: ../statistics.c:110
++#: ../statistics.c:271
+ #, c-format
+-msgid "address mask requests: %d"
+-msgstr "¾ádost o masku podsítì: %d"
++msgid "%u timeouts after reno fast retransmit"
++msgstr "PoÄet vyprÅ¡ení Äasu po rychlém opakovaném odeslání Reno: %u"
+
+-#: ../statistics.c:111
++#: ../statistics.c:272
+ #, c-format
+-msgid "address mask replies: %d"
+-msgstr "odpovìï na ¾ádost o masku podsítì: %d"
++msgid "%u timeouts after SACK recovery"
++msgstr "PoÄet vyprÅ¡ení Äasu po zotavení pomocí SACK: %u"
+
+-#: ../statistics.c:116
++#: ../statistics.c:273
+ #, c-format
+-msgid "RTO algorithm is %s"
+-msgstr "RTO algoritmus je %s"
++msgid "%u timeouts in loss state"
++msgstr "PoÄet vyprÅ¡ení Äasu ve stavu ztráty: %u"
+
+-#: ../statistics.c:120
++#: ../statistics.c:274
+ #, c-format
+-msgid "%d active connections openings"
+-msgstr "poèet aktivnì navázaných spojení: %d"
++msgid "%u fast retransmits"
++msgstr "PoÄet rychlých opakování odeslání: %u"
+
+-#: ../statistics.c:121
++#: ../statistics.c:275
+ #, c-format
+-msgid "%d passive connection openings"
+-msgstr "poèet pasivnì navázaných spojení: %d"
++msgid "%u forward retransmits"
++msgstr "PoÄet dopÅ™edných opakovaných odeslání: %u"
+
+-#: ../statistics.c:122
++#: ../statistics.c:276
+ #, c-format
+-msgid "%d failed connection attempts"
+-msgstr "poèet neúspì¹ných pokusù o spojení: %d"
++msgid "%u retransmits in slow start"
++msgstr "PoÄet opakovaných odeslání v pomalém startu: %u"
+
+-#: ../statistics.c:123
++#: ../statistics.c:277
+ #, c-format
+-msgid "%d connection resets received"
+-msgstr "poèet pøijmutých resetù: %d"
++msgid "%u other TCP timeouts"
++msgstr "PoÄet jiných vyprÅ¡ení ÄasovaÄe TCP: %u"
+
+-#: ../statistics.c:124
++#: ../statistics.c:278
+ #, c-format
+-msgid "%d connections established"
+-msgstr "poèet navázaných spojení: %d"
++msgid "%u reno fast retransmits failed"
++msgstr "PoÄet selhání rychlých opakovaných odeslání Reno: %u"
+
+-#: ../statistics.c:125
++#: ../statistics.c:279
+ #, c-format
+-msgid "%d segments received"
+-msgstr "poèet pøijmutých segmentù: %d"
++msgid "%u SACK retransmits failed"
++msgstr "PoÄet selhání opakovaných odeslání SACK: %u"
+
+-#: ../statistics.c:126
++#: ../statistics.c:280
+ #, c-format
+-msgid "%d segments send out"
+-msgstr "poèet odeslaných segmentù: %d"
++msgid "%u times receiver scheduled too late for direct processing"
++msgstr "Kolikrát byl pÅ™ijímaÄ naplánován příliÅ¡ pozdÄ› na přímé zpracovaní: %u"
+
+-#: ../statistics.c:127
++#: ../statistics.c:281
+ #, c-format
+-msgid "%d segments retransmited"
+-msgstr "poèet pøenesených segmentù: %d"
++msgid "%u packets collapsed in receive queue due to low socket buffer"
++msgstr ""
++"PoÄet packetů slouÄených v pÅ™ijímací frontÄ› kvůli malému bufferu socketu: %u"
+
+-#: ../statistics.c:128
++#: ../statistics.c:282
+ #, c-format
+-msgid "%d bad segments received."
+-msgstr "poèet chybných pøíchozích segmentù: %d."
++msgid "%u DSACKs sent for old packets"
++msgstr "PoÄet packetů DSACK odeslaných kvůli starým packetům: %u"
+
+-#: ../statistics.c:129
++#: ../statistics.c:283
+ #, c-format
+-msgid "%d resets sent"
+-msgstr "poèet odeslaných resetù: %d"
++msgid "%u DSACKs sent for out of order packets"
++msgstr "PoÄet packetů DSCACK odeslaných kvůli packetům mimo poÅ™adí: %u"
+
+-#: ../statistics.c:134
++#: ../statistics.c:284
+ #, c-format
+-msgid "%d packets received"
+-msgstr "poèet pøijmutých paketù: %d"
++msgid "%u DSACKs received"
++msgstr "PoÄet pÅ™ijatých paketů DSACK: %u"
+
+-#: ../statistics.c:135
++#: ../statistics.c:285
+ #, c-format
+-msgid "%d packets to unknown port received."
+-msgstr "poèet paketù pøijmutých pro neznámý port: %d."
++msgid "%u DSACKs for out of order packets received"
++msgstr "PoÄet packetů DSACK pÅ™ijatých kvůli packetům mimo poÅ™adí: %u"
+
+-#: ../statistics.c:136
++#: ../statistics.c:286
+ #, c-format
+-msgid "%d packet receive errors"
+-msgstr "poèet chyb pøi pøíjmu paketù: %d"
++msgid "%u connections reset due to unexpected SYN"
++msgstr "PoÄet resetů spojení kvůli neoÄekávanému SYN: %u"
+
+-#: ../statistics.c:137
++#: ../statistics.c:287
+ #, c-format
+-msgid "%d packets sent"
+-msgstr "poèet odeslaných paketù: %d"
++msgid "%u connections reset due to unexpected data"
++msgstr "PoÄet resetů spojení kvůli neoÄekávaným datům: %u"
+
+-#: ../statistics.c:142
++#: ../statistics.c:288
+ #, c-format
+-msgid "%d SYN cookies sent"
+-msgstr "poèet odeslaných SYN cookies: %d"
++msgid "%u connections reset due to early user close"
++msgstr "PoÄet resetů spojení kvůli Äasnému uzavÅ™ení uživatelem: %u"
+
+-#: ../statistics.c:143
++#: ../statistics.c:289
+ #, c-format
+-msgid "%d SYN cookies received"
+-msgstr "poèet pøijmutých SYN cookies: %d"
++msgid "%u connections aborted due to memory pressure"
++msgstr "PoÄet zruÅ¡ených spojení kvůli paměťové tísni: %u"
+
+-#: ../statistics.c:144
++#: ../statistics.c:290
+ #, c-format
+-msgid "%d invalid SYN cookies received"
+-msgstr "poèet chybných pøíchozích SYN cookies: %d"
++msgid "%u connections aborted due to timeout"
++msgstr "PoÄet zruÅ¡ených spojení kvůli vyprÅ¡ení ÄasovaÄe: %u"
+
+-#: ../statistics.c:146
++#: ../statistics.c:291
+ #, c-format
+-msgid "%d resets received for embryonic SYN_RECV sockets"
+-msgstr "poèet resetù pøijmutých pro sokety ve stavu SYN_PØÍCH: %d"
++msgid "%u connections aborted after user close in linger timeout"
++msgstr ""
++"PoÄet zruÅ¡ených spojení po té, co je uživatel uzavÅ™el ve fázi dožití: %u"
+
+-#: ../statistics.c:148
++#: ../statistics.c:292
+ #, c-format
+-msgid "%d packets pruned from receive queue because of socket buffer overrun"
+-msgstr "poèet paketù odstranìných z fronty kvùli pøeteèení bufferu soketu: %d"
++msgid "%u times unabled to send RST due to no memory"
++msgstr "Kolikrát nebylo možné odeslat RST kvůli nedostatku paměti: %u"
+
+-#. obsolete: 2.2.0 doesn't do that anymore
+-#: ../statistics.c:151
++#: ../statistics.c:293
+ #, c-format
+-msgid "%d packets pruned from out-of-order queue"
+-msgstr "poèet paketù odstranìných z fronty mimo-poøadí: %d"
++msgid "TCP ran low on memory %u times"
++msgstr "Kolikrát TCP zpomalilo kvůli paměti: %u"
+
+-#: ../statistics.c:152
++#: ../statistics.c:294
+ #, c-format
+-msgid ""
+-"%d packets dropped from out-of-order queue because of socket buffer overrun"
+-msgstr ""
+-"poèet paketù zahozených z fronty mimo-poøadí kvùli pøeteèení bufferu soketu: "
+-"%d"
++msgid "%u TCP data loss events"
++msgstr "PoÄet ztrát dat TCP: %u"
+
+-#: ../statistics.c:154
++#: ../statistics.c:295
+ #, c-format
+-msgid "%d ICMP packets dropped because they were out-of-window"
+-msgstr "poèet ICMP paketù zahozených, proto¾e byly mimo-okno: %d"
++msgid "%u congestion windows recovered without slow start by DSACK"
++msgstr "PoÄet zotavení ze zahlcení okna bez pomalého startu pomocí DSACK: %u"
+
+-#: ../statistics.c:156
++#: ../statistics.c:297
+ #, c-format
+-msgid "%d ICMP packets dropped because socket was locked"
+-msgstr "poèet ICMP paketù zahozených kvùli zamèenému soketu: %d"
++msgid "%u classic Reno fast retransmits failed"
++msgstr "PoÄet selhání klasického rychlého opakovaného odeslání Reno: %u"
+
+-#: ../statistics.c:222
++#: ../statistics.c:373
+ msgid "enabled"
+ msgstr "zapnuto"
+
+-#: ../statistics.c:222
++#: ../statistics.c:373
+ msgid "disabled"
+ msgstr "vypnuto"
+
+-#: ../statistics.c:272
++#: ../statistics.c:511 ../statistics.c:555
++msgid "cannot open /proc/net/snmp"
++msgstr "/proc/net/snmp nelze otevřít"
++
++#: ../statistics.c:516
+ #, c-format
+-msgid "unknown title %s\n"
+-msgstr "titulek %s je neznámý\n"
++msgid "Problem while parsing /proc/net/snmp\n"
++msgstr "Potíže při při zpracování /proc/net/snmp\n"
+
+-#: ../statistics.c:298
+-msgid "error parsing /proc/net/snmp"
+-msgstr "chyba pøi zpracování /proc/net/snmp"
++#: ../statistics.c:527
++#, c-format
++msgid "Problem while parsing /proc/net/netstat\n"
++msgstr "Potíže při při zpracování /proc/net/netstat\n"
+
+-#: ../statistics.c:311
+-msgid "cannot open /proc/net/snmp"
+-msgstr "/proc/net/snmp nelze otevøít"
++#: ../statistics.c:545
++msgid "cannot open /proc/net/snmp6"
++msgstr "/proc/net/snmp6 nelze otevřít"
+
+ #: ../lib/activate.c:69
+ #, c-format
+ msgid "Hardware type `%s' not supported.\n"
+-msgstr "Hardwarový typ `%s' není podporován.\n"
++msgstr "Hardwarový typ „%s“ není podporován.\n"
+
+ #: ../lib/activate.c:73
+ #, c-format
+ msgid "Cannot change line discipline to `%s'.\n"
+-msgstr "Linkovou disciplínu nelze na `%s' zmìnit.\n"
++msgstr "Linkovou disciplínu nelze na „%s“ změnit.\n"
+
+-#: ../lib/af.c:145 ../lib/hw.c:148
++#: ../lib/af.c:157 ../lib/hw.c:166
+ msgid "UNSPEC"
+-msgstr "NEZNÁM"
++msgstr "NEZNÃM"
+
+-#: ../lib/af.c:147
++#: ../lib/af.c:159
+ msgid "UNIX Domain"
+-msgstr "Doména UNIX"
++msgstr "Doména UNIX"
+
+-#: ../lib/af.c:150
++#: ../lib/af.c:162
+ msgid "DARPA Internet"
+ msgstr "DARPA Internet"
+
+-#: ../lib/af.c:153
++#: ../lib/af.c:165
+ msgid "IPv6"
+ msgstr "IPv6"
+
+-#: ../lib/af.c:156 ../lib/hw.c:169
++#: ../lib/af.c:168 ../lib/hw.c:187
+ msgid "AMPR AX.25"
+ msgstr "AMPR AX.25"
+
+-#: ../lib/af.c:159 ../lib/hw.c:175
++#: ../lib/af.c:171 ../lib/hw.c:193
+ msgid "AMPR NET/ROM"
+ msgstr "AMPR NET/ROM"
+
+-#: ../lib/af.c:162
++#: ../lib/af.c:174
+ msgid "Novell IPX"
+ msgstr "Novell IPX"
+
+-#: ../lib/af.c:165
++#: ../lib/af.c:177
+ msgid "Appletalk DDP"
+ msgstr "Appletalk DDP"
+
+-#: ../lib/af.c:168 ../lib/hw.c:207
++#: ../lib/af.c:180 ../lib/hw.c:228
+ msgid "Econet"
+ msgstr "Econet"
+
+-#: ../lib/af.c:171 ../lib/hw.c:172
++#: ../lib/af.c:183
++msgid "CCITT X.25"
++msgstr "CCITT X.25"
++
++#: ../lib/af.c:186 ../lib/hw.c:190
+ msgid "AMPR ROSE"
+ msgstr "AMPR ROSE"
+
+-#: ../lib/af.c:174 ../lib/hw.c:160
++#: ../lib/af.c:189 ../lib/hw.c:178
+ msgid "Ash"
+ msgstr "Ash"
+
+-#: ../lib/af.c:232
++#: ../lib/af.c:247
++#, c-format
+ msgid "Please don't supply more than one address family.\n"
+-msgstr "Nezadávejte více ne¾ jednu tøídu adres.\n"
++msgstr "Nezadávejte více než jednu třídu adres.\n"
+
+-#: ../lib/af.c:293
++#: ../lib/af.c:308
++#, c-format
+ msgid "Too much address family arguments.\n"
+-msgstr "Bylo zadáno pøíli¹ mnoho tøíd adres.\n"
++msgstr "Bylo zadáno příliš mnoho tříd adres.\n"
+
+-#: ../lib/af.c:304
++#: ../lib/af.c:319
+ #, c-format
+ msgid "Unknown address family `%s'.\n"
+-msgstr "Tøída adres `%s' není známa.\n"
+-
+-#: ../lib/arcnet.c:53 ../lib/ax25.c:75 ../lib/ddp.c:50 ../lib/econet.c:52
+-#: ../lib/fddi.c:67 ../lib/hippi.c:68 ../lib/inet.c:244 ../lib/inet.c:259
+-#: ../lib/inet6.c:129 ../lib/ipx.c:81 ../lib/netrom.c:78 ../lib/rose.c:71
+-#: ../lib/rose.c:126 ../lib/unix.c:56 ../lib/unix.c:76
+-msgid "[NONE SET]"
+-msgstr "[NENASTAVENO]"
++msgstr "Třída adres `%s' není známa.\n"
+
+-#: ../lib/arcnet.c:81 ../lib/arcnet.c:96
++#: ../lib/arcnet.c:70 ../lib/arcnet.c:85
+ #, c-format
+ msgid "in_arcnet(%s): invalid arcnet address!\n"
+-msgstr "in_arcnet(%s): chybná arcnet adresa!\n"
++msgstr "in_arcnet(%s): chybná arcnet adresa!\n"
+
+-#: ../lib/arcnet.c:108
++#: ../lib/arcnet.c:97
+ #, c-format
+ msgid "in_arcnet(%s): trailing : ignored!\n"
+-msgstr "in_arcnet(%s): nadbyteèné : ignorováno!\n"
++msgstr "in_arcnet(%s): nadbyteÄné : ignorováno!\n"
+
+-#: ../lib/arcnet.c:120
++#: ../lib/arcnet.c:109
+ #, c-format
+ msgid "in_arcnet(%s): trailing junk!\n"
+-msgstr "in_arcnet(%s): nadbyteèné znaky!\n"
++msgstr "in_arcnet(%s): nadbyteÄné znaky!\n"
+
+ #: ../lib/ash.c:81
++#, c-format
+ msgid "Malformed Ash address"
+-msgstr "Chybná Ash adresa"
++msgstr "Chybná Ash adresa"
++
++#: ../lib/ax25.c:75 ../lib/ddp.c:50 ../lib/econet.c:52 ../lib/inet.c:244
++#: ../lib/inet.c:259 ../lib/inet6.c:145 ../lib/ipx.c:81 ../lib/netrom.c:78
++#: ../lib/rose.c:71 ../lib/unix.c:56 ../lib/unix.c:76
++msgid "[NONE SET]"
++msgstr "[NENASTAVENO]"
+
+ #: ../lib/ax25.c:97 ../lib/netrom.c:100
+ msgid "Invalid callsign"
+-msgstr "Nesprávný volací znak"
++msgstr "Nesprávný volací znak"
+
+ #: ../lib/ax25.c:110 ../lib/netrom.c:113
+ msgid "Callsign too long"
+-msgstr "Volací znak je pøíli¹ dlouhý."
++msgstr "Volací znak je příliš dlouhý."
+
+ #: ../lib/ax25_gr.c:47
++#, c-format
+ msgid "AX.25 not configured in this system.\n"
+-msgstr "AX.25 není na tomto systému nakonfigurováno.\n"
++msgstr "AX.25 není na tomto systému nakonfigurováno.\n"
+
+ #: ../lib/ax25_gr.c:50
++#, c-format
+ msgid "Kernel AX.25 routing table\n"
+-msgstr "Smìrovací tabulka v jádru pro AX.25\n"
++msgstr "Směrovací tabulka v jádru pro AX.25\n"
+
+ #. xxx
+ #: ../lib/ax25_gr.c:51 ../lib/rose_gr.c:55
++#, c-format
+ msgid "Destination Iface Use\n"
+-msgstr "Adresát Rozhraní U¾ití\n"
+-
+-#: ../lib/ddp_gr.c:21
+-msgid "Routing table for `ddp' not yet supported.\n"
+-msgstr "Smìrovací tabulka pro `ddp' není zatím podporována.\n"
++msgstr "Adresát Rozhraní Užití\n"
+
+ #: ../lib/ether.c:74 ../lib/ether.c:91
+ #, c-format
+ msgid "in_ether(%s): invalid ether address!\n"
+-msgstr "in_ether(%s): chybná ethernetová adresa!\n"
++msgstr "in_ether(%s): chybná ethernetová adresa!\n"
+
+ #: ../lib/ether.c:105
+ #, c-format
+ msgid "in_ether(%s): trailing : ignored!\n"
+-msgstr "in_ether(%s): nadbyteèné : ignorováno!\n"
++msgstr "in_ether(%s): nadbyteÄné : ignorováno!\n"
+
+ #: ../lib/ether.c:117
+ #, c-format
+ msgid "in_ether(%s): trailing junk!\n"
+-msgstr "in_ether(%s): nadbyteèné znaky!\n"
++msgstr "in_ether(%s): nadbyteÄné znaky!\n"
+
+-#: ../lib/fddi.c:95 ../lib/fddi.c:110
++#: ../lib/fddi.c:84 ../lib/fddi.c:99
+ #, c-format
+ msgid "in_fddi(%s): invalid fddi address!\n"
+-msgstr "in_fddi(%s): chybná fddi adresa!\n"
++msgstr "in_fddi(%s): chybná fddi adresa!\n"
+
+-#: ../lib/fddi.c:122
++#: ../lib/fddi.c:111
+ #, c-format
+ msgid "in_fddi(%s): trailing : ignored!\n"
+-msgstr "in_fddi(%s): nadbyteèné : ignorováno!\n"
++msgstr "in_fddi(%s): nadbyteÄné : ignorováno!\n"
+
+-#: ../lib/fddi.c:134
++#: ../lib/fddi.c:123
+ #, c-format
+ msgid "in_fddi(%s): trailing junk!\n"
+-msgstr "in_fddi(%s): nadbyteèné znaky!\n"
++msgstr "in_fddi(%s): nadbyteÄné znaky!\n"
+
+-#: ../lib/getroute.c:97 ../lib/setroute.c:76
++#: ../lib/getroute.c:101 ../lib/setroute.c:80
+ #, c-format
+ msgid "Address family `%s' not supported.\n"
+-msgstr "Tøída adres `%s' není podporována.\n"
++msgstr "Třída adres `%s' není podporována.\n"
+
+-#: ../lib/getroute.c:103 ../lib/setroute.c:80
++#: ../lib/getroute.c:107 ../lib/setroute.c:84
+ #, c-format
+ msgid "No routing for address family `%s'.\n"
+-msgstr "Pro tøídu adres `%s' není ¾ádné smìrování.\n"
++msgstr "Pro třídu adres `%s' není žádné směrování.\n"
+
+-#: ../lib/hippi.c:96 ../lib/hippi.c:111
++#: ../lib/hippi.c:84 ../lib/hippi.c:99
+ #, c-format
+ msgid "in_hippi(%s): invalid hippi address!\n"
+-msgstr "in_hippi(%s): chybná hippi adresa!\n"
++msgstr "in_hippi(%s): chybná hippi adresa!\n"
+
+-#: ../lib/hippi.c:123
++#: ../lib/hippi.c:111
+ #, c-format
+ msgid "in_hippi(%s): trailing : ignored!\n"
+-msgstr "in_hippi(%s): nadbyteèné : ignorováno!\n"
++msgstr "in_hippi(%s): nadbyteÄné : ignorováno!\n"
+
+-#: ../lib/hippi.c:134
++#: ../lib/hippi.c:122
+ #, c-format
+ msgid "in_hippi(%s): trailing junk!\n"
+-msgstr "in_hippi(%s): nadbyteèné znaky!\n"
++msgstr "in_hippi(%s): nadbyteÄné znaky!\n"
+
+-#: ../lib/hw.c:147
++#: ../lib/hw.c:165
+ msgid "Local Loopback"
+-msgstr "Místní smyèka"
++msgstr "Místní smyÄka"
+
+-#: ../lib/hw.c:150
++#: ../lib/hw.c:168
+ msgid "Serial Line IP"
+-msgstr "IP po sériové lince"
++msgstr "IP po sériové lince"
+
+-#: ../lib/hw.c:151
++#: ../lib/hw.c:169
+ msgid "VJ Serial Line IP"
+-msgstr "Vj IP po sériové lince"
++msgstr "VJ IP po sériové lince"
+
+-#: ../lib/hw.c:152
++#: ../lib/hw.c:170
+ msgid "6-bit Serial Line IP"
+-msgstr "6bitový IP po sériové lince"
++msgstr "6bitový IP po sériové lince"
+
+-#: ../lib/hw.c:153
++#: ../lib/hw.c:171
+ msgid "VJ 6-bit Serial Line IP"
+-msgstr "6bitový VJ IP po sériové lince"
++msgstr "6bitový VJ IP po sériové lince"
+
+-#: ../lib/hw.c:154
++#: ../lib/hw.c:172
+ msgid "Adaptive Serial Line IP"
+-msgstr "Adaptivní IP po sériové lince"
++msgstr "Adaptivní IP po sériové lince"
+
+-#: ../lib/hw.c:157
++#: ../lib/hw.c:175
+ msgid "Ethernet"
+ msgstr "Ethernet"
+
+-#: ../lib/hw.c:163
++#: ../lib/hw.c:181
+ msgid "Fiber Distributed Data Interface"
+ msgstr "Fiber Distributed Data Interface"
+
+-#: ../lib/hw.c:166
++#: ../lib/hw.c:184
+ msgid "HIPPI"
+ msgstr "HIPPI"
+
+-#: ../lib/hw.c:178
++#: ../lib/hw.c:196
++msgid "generic X.25"
++msgstr "obecné X.25"
++
++#: ../lib/hw.c:199
+ msgid "IPIP Tunnel"
+ msgstr "IPIP Tunnel"
+
+-#: ../lib/hw.c:181
++#: ../lib/hw.c:202
+ msgid "Point-to-Point Protocol"
+-msgstr "Point-to-Point Protokol"
++msgstr "Dvoubodový protokol"
+
+-#: ../lib/hw.c:184
++#: ../lib/hw.c:205
+ msgid "(Cisco)-HDLC"
+ msgstr "(Cisco)-HDLC"
+
+-#: ../lib/hw.c:185
++#: ../lib/hw.c:206
+ msgid "LAPB"
+ msgstr "LAPB"
+
+-#: ../lib/hw.c:188
++#: ../lib/hw.c:209
+ msgid "ARCnet"
+ msgstr "ARCnet"
+
+-#: ../lib/hw.c:191
++#: ../lib/hw.c:212
+ msgid "Frame Relay DLCI"
+ msgstr "Frame Relay DLCI"
+
+-#: ../lib/hw.c:192
++#: ../lib/hw.c:213
+ msgid "Frame Relay Access Device"
+-msgstr "Pøístupové zaøízení Frame Relay"
++msgstr "Přístupové zařízení Frame Relay"
+
+-#: ../lib/hw.c:195
++#: ../lib/hw.c:216
+ msgid "IPv6-in-IPv4"
+ msgstr "IPv6-in-IPv4"
+
+-#: ../lib/hw.c:198
++#: ../lib/hw.c:219
+ msgid "IrLAP"
+ msgstr "IrLAP"
+
+-#: ../lib/hw.c:201
++#: ../lib/hw.c:222
+ msgid "16/4 Mbps Token Ring"
+ msgstr "Token Ring 16/4 Mb/s"
+
+-#: ../lib/hw.c:203
+-#, fuzzy
++#: ../lib/hw.c:224
+ msgid "16/4 Mbps Token Ring (New)"
+-msgstr "Token Ring 16/4 Mb/s"
++msgstr "Token Ring 16/4 Mb/s (Nový)"
+
+-#: ../lib/inet.c:153 ../lib/inet6.c:79
++#: ../lib/hw.c:231
++msgid "InfiniBand"
++msgstr "InfiniBand"
++
++#: ../lib/hw.c:234
++msgid "Generic EUI-64"
++msgstr "Obecné EUI-64"
++
++#: ../lib/inet.c:153 ../lib/inet6.c:94
+ #, c-format
+ msgid "rresolve: unsupport address family %d !\n"
+-msgstr "rresolve: tøída adres %d není podporována!\n"
++msgstr "rresolve: třída adres %d není podporována!\n"
+
+-#: ../lib/inet6_gr.c:79
++#: ../lib/inet6.c:147
++msgid "[UNKNOWN]"
++msgstr "[NEZNÃMÃ]"
++
++#: ../lib/inet6_gr.c:71
++#, c-format
+ msgid "INET6 (IPv6) not configured in this system.\n"
+-msgstr "INET6 (IPv6) není na tomto systému nakonfigurováno.\n"
++msgstr "INET6 (IPv6) není na tomto systému nakonfigurováno.\n"
+
+-#: ../lib/inet6_gr.c:82
++#: ../lib/inet6_gr.c:76
++#, c-format
++msgid "Kernel IPv6 routing cache\n"
++msgstr "Směrovací cache v jádru pro IPv6\n"
++
++#: ../lib/inet6_gr.c:78
++#, c-format
+ msgid "Kernel IPv6 routing table\n"
+-msgstr "Smìrovací tabulka v jádru pro IPv6\n"
++msgstr "Směrovací tabulka v jádru pro IPv6\n"
+
+-#: ../lib/inet6_gr.c:84
++#: ../lib/inet6_gr.c:80
++#, c-format
+ msgid ""
+-"Destination Next Hop "
+-" Flags Metric Ref Use Iface\n"
++"Destination Next Hop Flag Met Ref Use "
++"If\n"
+ msgstr ""
+-"Adresát Dal¹í Smìrovaè "
+-" Pøízn Metrika Odkaz U¾it Rozhraní\n"
++"Adresát Další smÄ›rovaÄ Příz Met Odk Užt "
++"Rozhr\n"
+
+-#: ../lib/inet6_gr.c:158
++#: ../lib/inet6_gr.c:174
++#, c-format
+ msgid "Kernel IPv6 Neighbour Cache\n"
+-msgstr "Cache sousedù v jádru pro IPv6\n"
++msgstr "Cache sousedů v jádru pro IPv6\n"
+
+-#: ../lib/inet6_gr.c:161
++#: ../lib/inet6_gr.c:177
++#, c-format
+ msgid ""
+ "Neighbour HW Address Iface Flags "
+ "Ref State\n"
+ msgstr ""
+-"Soused HW Adresa Rozhraní Pøízn "
++"Soused HW Adresa Rozhraní Přízn "
+ "Odkazy Stav\n"
+
+-#: ../lib/inet6_gr.c:165
++#: ../lib/inet6_gr.c:181
++#, c-format
+ msgid ""
+ "Neighbour HW Address Iface Flags "
+ "Ref State Stale(sec) Delete(sec)\n"
+ msgstr ""
+-"Soused HW Adresa Rozhraní "
+-"Pøíznaky Odkazy Stav Pro¹lý(sec) Smazat(sec)\n"
++"Soused HW Adresa Rozhraní "
++"Příznaky Odkazy Stav Prošlý(sec) Smazat(sec)\n"
+
+ #: ../lib/inet6_sr.c:46
++#, c-format
+ msgid "Usage: inet6_route [-vF] del Target\n"
+-msgstr "Pou¾ití: inet6_route [-vF] del Cíl\n"
++msgstr "Použití: inet6_route [-vF] del Cíl\n"
+
+ #: ../lib/inet6_sr.c:47
++#, c-format
+ msgid " inet6_route [-vF] add Target [gw Gw] [metric M] [[dev] If]\n"
+-msgstr " inet6_route [-vF] add Cíl [gw Gw] [metrika M] [[dev] If]\n"
++msgstr " inet6_route [-vF] add Cíl [gw Gw] [metrika M] [[dev] If]\n"
+
+ #: ../lib/inet6_sr.c:48
++#, c-format
+ msgid " inet6_route [-FC] flush NOT supported\n"
+-msgstr " inet6_route [-FC] flush NENÍ podporováno\n"
++msgstr " inet6_route [-FC] flush NENà podporováno\n"
+
+-#: ../lib/inet6_sr.c:182
++#: ../lib/inet6_sr.c:188
++#, c-format
+ msgid "Flushing `inet6' routing table not supported\n"
+-msgstr "Smìrovací tabulku `inet6' nelze vyprazdòovat\n"
++msgstr "Směrovací tabulku `inet6' nelze vyprazdňovat\n"
+
+ #: ../lib/inet_gr.c:50 ../lib/inet_gr.c:220
++#, c-format
+ msgid "INET (IPv4) not configured in this system.\n"
+-msgstr "INET (IPv4) není na tomto systému nakonfigurováno.\n"
++msgstr "INET (IPv4) není na tomto systému nakonfigurováno.\n"
+
+ #: ../lib/inet_gr.c:53
++#, c-format
+ msgid "Kernel IP routing table\n"
+-msgstr "Smìrovací tabulka v jádru pro IP\n"
++msgstr "Směrovací tabulka v jádru pro IP\n"
+
+ #: ../lib/inet_gr.c:56
++#, c-format
+ msgid ""
+ "Destination Gateway Genmask Flags Metric Ref Use "
+ "Iface\n"
+ msgstr ""
+-"Adresát Brána Maska Pøízn Metrik Odkaz U¾t "
+-"Rozhraní\n"
++"Adresát Brána Maska Přízn Metrik Odkazů Užt "
++"Rozhraní\n"
+
+ #: ../lib/inet_gr.c:59
++#, c-format
+ msgid ""
+ "Destination Gateway Genmask Flags MSS Window irtt "
+ "Iface\n"
+ msgstr ""
+-"Adresát Brána Maska Pøízn MSS Okno irtt "
+-"Rozhraní\n"
++"Adresát Brána Maska Přízn MSS Okno irtt "
++"Rozhraní\n"
+
+ #: ../lib/inet_gr.c:62
++#, c-format
+ msgid ""
+ "Destination Gateway Genmask Flags Metric Ref Use "
+ "Iface MSS Window irtt\n"
+ msgstr ""
+-"Adresát Brána Maska Pøízn Metrik Odkazy U¾t "
+-"Rozhraní MSS Okno irtt\n"
++"Adresát Brána Maska Přízn Metrik Odkazy Užt "
++"Rozhraní MSS Okno irtt\n"
+
+ #: ../lib/inet_gr.c:237
++#, c-format
+ msgid "Kernel IP routing cache\n"
+-msgstr "Smìrovací cache v jádru pro IP\n"
++msgstr "Směrovací cache v jádru pro IP\n"
+
+ #: ../lib/inet_gr.c:258
++#, c-format
+ msgid ""
+ "Source Destination Gateway Flags Metric Ref Use "
+ "Iface\n"
+ msgstr ""
+-"Odesílatel Adresát Maska Pøízn Metrik Odkazy U¾t "
+-"Rozhraní\n"
++"Odesílatel Adresát Maska Přízn Metrik Odkazy Užt "
++"Rozhraní\n"
+
+ #: ../lib/inet_gr.c:261
++#, c-format
+ msgid ""
+ "Source Destination Gateway Flags MSS Window irtt "
+ "Iface\n"
+ msgstr ""
+-"Odesílatel Adresát Maska Pøízn MSS Okno irtt "
+-"Rozhraní\n"
++"Odesílatel Adresát Maska Přízn MSS Okno irtt "
++"Rozhraní\n"
+
+ #: ../lib/inet_gr.c:266
++#, c-format
+ msgid ""
+ "Source Destination Gateway Flags Metric Ref Use "
+ "Iface MSS Window irtt HH Arp\n"
+ msgstr ""
+-"Odesílatel Adresát Maska Pøízn Metrik Odkazy U¾t "
+-"Rozhraní MSS Okno irtt HH Arp\n"
++"Odesílatel Adresát Maska Přízn Metrik Odkazy Užt "
++"Rozhraní MSS Okno irtt HH Arp\n"
+
+ #: ../lib/inet_gr.c:290
++#, c-format
+ msgid ""
+ "Source Destination Gateway Flags Metric Ref Use "
+ "Iface MSS Window irtt TOS HHRef HHUptod SpecDst\n"
+ msgstr ""
+-"Odesílatel Adresát Maska Pøízn Metrik Odkazy U¾t "
+-"Rozhraní MSS Okno irtt TOS HHOdk HHAktuál Zvlá¹tCíl\n"
++"Odesílatel Adresát Maska Přízn Metrik Odkazy Užt "
++"Rozhraní MSS Okno irtt TOS HHOdk HHAktuál ZvláštCíl\n"
+
+-#: ../lib/inet_sr.c:50
++#: ../lib/inet_sr.c:51
++#, c-format
+ msgid ""
+ "Usage: inet_route [-vF] del {-host|-net} Target[/prefix] [gw Gw] [metric M] "
+ "[[dev] If]\n"
+ msgstr ""
+-"Pou¾ití: inet_route [-vF] del {-host|-net} Cíl[/prefix] [gw Gw] [metrika M] "
++"Použití: inet_route [-vF] del {-host|-net} Cíl[/prefix] [gw Gw] [metrika M] "
+ "[[dev] If]\n"
+
+-#: ../lib/inet_sr.c:51
++#: ../lib/inet_sr.c:52
++#, c-format
+ msgid ""
+ " inet_route [-vF] add {-host|-net} Target[/prefix] [gw Gw] [metric M]\n"
+ msgstr ""
+-" inet_route [-vF] add {-host|-net} Cíl[/prefix] [gw Gw] [metrika M]\n"
++" inet_route [-vF] add {-host|-net} Cíl[/prefix] [gw Gw] [metrika M]\n"
+
+-#: ../lib/inet_sr.c:52
++#: ../lib/inet_sr.c:53
++#, c-format
+ msgid ""
+ " [netmask N] [mss Mss] [window W] [irtt I]\n"
+ msgstr ""
+ " [netmask N] [mss Mss] [window W] [irtt I]\n"
+
+-#: ../lib/inet_sr.c:53
++#: ../lib/inet_sr.c:54
++#, c-format
+ msgid " [mod] [dyn] [reinstate] [[dev] If]\n"
+ msgstr " [mod] [dyn] [reinstate] [[dev] If]\n"
+
+-#: ../lib/inet_sr.c:54
++#: ../lib/inet_sr.c:55
++#, c-format
+ msgid ""
+ " inet_route [-vF] add {-host|-net} Target[/prefix] [metric M] reject\n"
+ msgstr ""
+-" inet_route [-vF] add {-host|-net} Cíl/[prefix] [metrika M] reject\n"
++" inet_route [-vF] add {-host|-net} Cíl/[prefix] [metrika M] reject\n"
+
+-#: ../lib/inet_sr.c:55
++#: ../lib/inet_sr.c:56
++#, c-format
+ msgid " inet_route [-FC] flush NOT supported\n"
+-msgstr " inet_route [-FC] flush NENÍ podporováno\n"
++msgstr " inet_route [-FC] flush NENà podporováno\n"
+
+ #: ../lib/inet_sr.c:158
+ #, c-format
+ msgid "route: %s: cannot use a NETWORK as gateway!\n"
+-msgstr "route: %s: sí» nelze pou¾ít jako bránu!\n"
++msgstr "route: %s: síť nelze použít jako bránu!\n"
+
+ #: ../lib/inet_sr.c:174
+-#, fuzzy
++#, c-format
+ msgid "route: Invalid MSS/MTU.\n"
+-msgstr "route: Nesprávné NSS.\n"
++msgstr "route: Neplatné MSS/MTU.\n"
+
+ #: ../lib/inet_sr.c:187
++#, c-format
+ msgid "route: Invalid window.\n"
+-msgstr "route: Nesprávné okno.\n"
++msgstr "route: Nesprávné okno.\n"
+
+ #: ../lib/inet_sr.c:203
++#, c-format
+ msgid "route: Invalid initial rtt.\n"
+-msgstr "route: Nesprávné zahajovací rtt.\n"
++msgstr "route: Nesprávné zahajovací rtt.\n"
+
+ #: ../lib/inet_sr.c:261
+ #, c-format
+ msgid "route: netmask %.8x doesn't make sense with host route\n"
+-msgstr "route: sí»ová maska %.8x nedává smysl, kdy¾ cílem je cesty poèítaè\n"
++msgstr "route: síťová maska %.8x nedává smysl, když cílem je cesty poÄítaÄ\n"
+
+ #: ../lib/inet_sr.c:265
+ #, c-format
+ msgid "route: bogus netmask %s\n"
+-msgstr "route: sí»ová maska %s je nesprávná\n"
++msgstr "route: síťová maska %s je nesprávná\n"
+
+ #: ../lib/inet_sr.c:270
++#, c-format
+ msgid "route: netmask doesn't match route address\n"
+-msgstr "route: sí»ová maska nevyhovuje adrese cesty\n"
++msgstr "route: síťová maska nevyhovuje adrese cesty\n"
+
+ #: ../lib/inet_sr.c:306
++#, c-format
+ msgid "Flushing `inet' routing table not supported\n"
+-msgstr "Smìrovací cache `inet' nelze vyprazdòovat\n"
++msgstr "Směrovací cache `inet' nelze vyprazdňovat\n"
+
+ #: ../lib/inet_sr.c:310
++#, c-format
+ msgid "Modifying `inet' routing cache not supported\n"
+-msgstr "Smìrovací cache `inet' nelze mìnit\n"
++msgstr "Směrovací cache `inet' nelze měnit\n"
+
+-#: ../lib/ipx_gr.c:52
+-msgid "IPX not configured in this system.\n"
+-msgstr "IPX není na tomto systému nakonfigurováno.\n"
++#: ../lib/ipx_gr.c:53
++#, c-format
++msgid "IPX routing not in file %s or %s found.\n"
++msgstr "Směrování IPX nenalezeno v souboru %s nebo %s.\n"
+
+-#: ../lib/ipx_gr.c:56
++#: ../lib/ipx_gr.c:62
++#, c-format
+ msgid "Kernel IPX routing table\n"
+-msgstr "Smìrovací tabulka v jádru pro IPX\n"
++msgstr "Směrovací tabulka v jádru pro IPX\n"
+
+ #. xxx
+-#: ../lib/ipx_gr.c:57
++#: ../lib/ipx_gr.c:63
++#, c-format
+ msgid "Destination Router Net Router Node\n"
+-msgstr "Cíl Smìrovaè Sí» Smìrovaè Uzel\n"
++msgstr "Cíl SmÄ›rovaÄ Síť SmÄ›rovaÄ Uzel\n"
+
+ #: ../lib/ipx_sr.c:33
++#, c-format
+ msgid "IPX: this needs to be written\n"
+-msgstr "IPX: toto je tøeba ulo¾it\n"
++msgstr "IPX: toto je třeba uložit\n"
+
+-#: ../lib/masq_info.c:197
++#: ../lib/masq_info.c:198
++#, c-format
+ msgid "IP masquerading entries\n"
+-msgstr "IP maskovací polo¾ky\n"
++msgstr "IP maskovací položky\n"
+
+-#: ../lib/masq_info.c:200
++#: ../lib/masq_info.c:201
++#, c-format
+ msgid "prot expire source destination ports\n"
+-msgstr "prot ¾ivot zdroj cíl porty\n"
++msgstr "prot život zdroj cíl porty\n"
+
+-#: ../lib/masq_info.c:203
++#: ../lib/masq_info.c:204
++#, c-format
+ msgid ""
+-"prot expire initseq delta prevd source destination "
+-" ports\n"
++"prot expire initseq delta prevd source "
++"destination ports\n"
+ msgstr ""
+-"prot ¾ivot zahajsek delta pøedchd zdroj cíl "
+-" porty\n"
++"prot život zahajsek delta předchd zdroj "
++"cíl porty\n"
+
+ #: ../lib/netrom_gr.c:48
++#, c-format
+ msgid "NET/ROM not configured in this system.\n"
+-msgstr "NET/ROM není na tomto systému nakonfigurováno.\n"
++msgstr "NET/ROM není na tomto systému nakonfigurováno.\n"
+
+ #: ../lib/netrom_gr.c:51
++#, c-format
+ msgid "Kernel NET/ROM routing table\n"
+-msgstr "Smìrovací tabulka v jádru pro NET/ROM\n"
++msgstr "Směrovací tabulka v jádru pro NET/ROM\n"
+
+ #: ../lib/netrom_gr.c:52
++#, c-format
+ msgid "Destination Mnemonic Quality Neighbour Iface\n"
+-msgstr "Cíl Mnemonika Kvalita Soused Rozhraní\n"
++msgstr "Cíl Mnemonika Kvalita Soused Rozhraní\n"
+
+ #: ../lib/netrom_sr.c:34
++#, c-format
+ msgid "netrom usage\n"
+-msgstr "pou¾ití netrom\n"
++msgstr "použití netrom\n"
+
+ #: ../lib/netrom_sr.c:44
++#, c-format
+ msgid "NET/ROM: this needs to be written\n"
+-msgstr "NET/ROM: toto je potøeba ulo¾it\n"
++msgstr "NET/ROM: toto je potřeba uložit\n"
+
+ #: ../lib/ppp.c:44
++#, c-format
+ msgid "You cannot start PPP with this program.\n"
+-msgstr "Tímto programem nelze PPP spustit.\n"
++msgstr "Tímto programem nelze PPP spustit.\n"
+
+ #: ../lib/ppp_ac.c:38
++#, c-format
+ msgid "Sorry, use pppd!\n"
+-msgstr "Lituji, pou¾ijte pppd!\n"
++msgstr "Lituji, použijte pppd!\n"
+
+ #: ../lib/rose.c:87
+ msgid "Node address must be ten digits"
+-msgstr "Adresa uzlu musí mít 10 èíslic"
++msgstr "Adresa uzlu musí mít 10 Äíslic"
+
+ #: ../lib/rose_gr.c:51
++#, c-format
+ msgid "ROSE not configured in this system.\n"
+-msgstr "ROSE není na tomto systému nakonfigurováno.\n"
++msgstr "ROSE není na tomto systému nakonfigurováno.\n"
+
+ #: ../lib/rose_gr.c:54
++#, c-format
+ msgid "Kernel ROSE routing table\n"
+-msgstr "Smìrovací tabulka v jádru pro ROSE\n"
++msgstr "Směrovací tabulka v jádru pro ROSE\n"
+
+-#: ../lib/tr.c:70 ../lib/tr.c:85
++#: ../lib/tr.c:86 ../lib/tr.c:101
+ #, c-format
+ msgid "in_tr(%s): invalid token ring address!\n"
+-msgstr "in_tr(%s): nesprávná token ring adresa!\n"
++msgstr "in_tr(%s): nesprávná token ring adresa!\n"
+
+-#: ../lib/tr.c:97
++#: ../lib/tr.c:113
+ #, c-format
+ msgid "in_tr(%s): trailing : ignored!\n"
+-msgstr "in_tr(%s): nadbyteèné: ignorováno!\n"
++msgstr "in_tr(%s): nadbyteÄné: ignorováno!\n"
+
+-#: ../lib/tr.c:109
++#: ../lib/tr.c:125
+ #, c-format
+ msgid "in_tr(%s): trailing junk!\n"
+-msgstr "in_tr(%s): nadbyteèné znaky!\n"
++msgstr "in_tr(%s): nadbyteÄné znaky!\n"
+
+-#: ../lib/interface.c:124
++#: ../lib/interface.c:176
+ #, c-format
+ msgid "warning: no inet socket available: %s\n"
+-msgstr "varování: není dostupný ¾ádný inet soket: %s\n"
++msgstr "varování: není dostupný žádný inet soket: %s\n"
+
+-#: ../lib/interface.c:270
++#: ../lib/interface.c:325
+ #, c-format
+ msgid "Warning: cannot open %s (%s). Limited output.\n"
+-msgstr ""
++msgstr "Pozor: %s nelze otevřít (%s). Výstup omezen.\n"
+
+ #. Give better error message for this case.
+-#: ../lib/interface.c:504
++#: ../lib/interface.c:571
+ msgid "Device not found"
+-msgstr "Zaøízení nebylo nalezeno"
++msgstr "Zařízení nebylo nalezeno"
+
+-#: ../lib/interface.c:508
++#: ../lib/interface.c:575
+ #, c-format
+ msgid "%s: error fetching interface information: %s\n"
+-msgstr "%s: chyba pøi získávání informací o rozhraní %s\n"
++msgstr "%s: chyba při získávání informací o rozhraní %s\n"
++
++#: ../lib/interface.c:608
++msgid " - no statistics available -"
++msgstr " - statistická data nejsou dostupná -"
++
++#: ../lib/interface.c:612
++#, c-format
++msgid "[NO FLAGS]"
++msgstr "[ŽÃDNÉ PŘÃZNAKY]"
++
++#: ../lib/interface.c:694
++msgid "UP,"
++msgstr "AKTIVOVÃNO,"
++
++#: ../lib/interface.c:696
++msgid "BROADCAST,"
++msgstr "VÅ ESMÄšR,"
++
++#: ../lib/interface.c:698
++msgid "DEBUG,"
++msgstr "LADÄšNÃ,"
++
++#: ../lib/interface.c:700
++msgid "LOOPBACK,"
++msgstr "SMYÄŒKA,"
++
++#: ../lib/interface.c:702
++msgid "POINTOPOINT,"
++msgstr "DVOUBODOVÉ,"
++
++# ??
++#: ../lib/interface.c:704
++msgid "NOTRAILERS,"
++msgstr "ŽÃDNÉ_TRAILERS"
++
++#: ../lib/interface.c:706
++msgid "RUNNING,"
++msgstr "BĚŽÃ,"
++
++#: ../lib/interface.c:708
++msgid "NOARP,"
++msgstr "NEARP,"
++
++#: ../lib/interface.c:710
++msgid "PROMISC,"
++msgstr "PROMISK,"
++
++#: ../lib/interface.c:712
++msgid "ALLMULTI,"
++msgstr "ALLMULTI,"
++
++#: ../lib/interface.c:714
++msgid "SLAVE,"
++msgstr "PODŘÃZENÃ,"
++
++#: ../lib/interface.c:716
++msgid "MASTER,"
++msgstr "NADŘÃZENÃ,"
++
++#: ../lib/interface.c:718
++msgid "MULTICAST,"
++msgstr "MULTICAST,"
++
++#: ../lib/interface.c:721
++msgid "DYNAMIC,"
++msgstr "DYNAMIC,"
++
++#: ../lib/interface.c:730
++#, c-format
++msgid "%s: %s mtu %d metric %d"
++msgstr "%s: %s mtu %d metrika %d"
++
++#: ../lib/interface.c:734
++#, c-format
++msgid " outfill %d keepalive %d"
++msgstr " outfill %d keepalive %d"
++
++#: ../lib/interface.c:743 ../lib/interface.c:841
++#, c-format
++msgid " %s %s"
++msgstr " %s %s"
++
++#: ../lib/interface.c:745
++#, c-format
++msgid " netmask %s"
++msgstr " síťová_maska %s"
++
++#: ../lib/interface.c:747
++#, c-format
++msgid " broadcast %s"
++msgstr " všesměr %s"
++
++#: ../lib/interface.c:750
++#, c-format
++msgid " destination %s"
++msgstr " cíl %s"
++
++#: ../lib/interface.c:769
++#, c-format
++msgid " %s %s prefixlen %d"
++msgstr " %s %s délka_prefixu %d"
++
++#: ../lib/interface.c:773
++#, c-format
++msgid " scopeid 0x%x"
++msgstr " scopeid 0x%x"
++
++#: ../lib/interface.c:777
++msgid "compat,"
++msgstr "kompat,"
++
++#: ../lib/interface.c:781
++msgid "global,"
++msgstr "globální,"
++
++#: ../lib/interface.c:783
++msgid "link,"
++msgstr "linka,"
++
++#: ../lib/interface.c:785
++msgid "site,"
++msgstr "oblast,"
++
++#: ../lib/interface.c:787
++msgid "host,"
++msgstr "stroj,"
++
++#: ../lib/interface.c:805
++#, c-format
++msgid " %s Ethernet-II %s\n"
++msgstr " %s Ethernet-II %s\n"
++
++#: ../lib/interface.c:808
++#, c-format
++msgid " %s Ethernet-SNAP %s\n"
++msgstr " %s Ethernet-SNAP %s\n"
++
++#: ../lib/interface.c:811
++#, c-format
++msgid " %s Ethernet802.2 %s\n"
++msgstr " %s Ethernet802.2 %s\n"
++
++#: ../lib/interface.c:814
++#, c-format
++msgid " %s Ethernet802.3 %s\n"
++msgstr " %s Ethernet802.3 %s\n"
++
++#: ../lib/interface.c:824 ../lib/interface.c:833
++#, c-format
++msgid " %s %s\n"
++msgstr " %s %s\n"
++
++#: ../lib/interface.c:843
++#, c-format
++msgid " %s"
++msgstr " %s"
++
++#: ../lib/interface.c:845
++#, c-format
++msgid " txqueuelen %d"
++msgstr " délka_odchozí_fronty %d"
++
++#: ../lib/interface.c:850
++#, c-format
++msgid " media %s"
++msgstr " médium %s"
++
++#: ../lib/interface.c:852
++#, c-format
++msgid "autoselect"
++msgstr "automatika"
++
++#: ../lib/interface.c:903
++#, c-format
++msgid "RX packets %llu bytes %llu (%lu.%lu %s)\n"
++msgstr "RX packetů %llu bajtů %llu (%lu,%lu %s)\n"
++
++#: ../lib/interface.c:909
++#, c-format
++msgid "RX compressed:%lu\n"
++msgstr "RX komprimováno %lu\n"
++
++#: ../lib/interface.c:912
++#, c-format
++msgid "RX errors %lu dropped %lu overruns %lu frame %lu\n"
++msgstr "RX chyb %lu zahozeno %lu pÅ™eteÄení %lu rámců %lu\n"
++
++#: ../lib/interface.c:918
++#, c-format
++msgid "TX packets %llu bytes %llu (%lu.%lu %s)\n"
++msgstr "TX packetů %llu bajtů %llu (%lu,%lu %s)\n"
++
++#: ../lib/interface.c:924
++#, c-format
++msgid "TX compressed %lu\n"
++msgstr "TX komprimováno %lu\n"
++
++# carrier?
++#: ../lib/interface.c:927
++#, c-format
++msgid "TX errors %lu dropped %lu overruns %lu carrier %lu collisions %lu\n"
++msgstr "TX chyb %lu zahozeno %lu pÅ™eteÄení %lu pÅ™enos %lu kolizí %lu\n"
+
+-#: ../lib/sockets.c:59
++#: ../lib/interface.c:937
++#, c-format
++msgid "interrupt %d "
++msgstr "přerušení %d "
++
++#. Only print devices using it for
++#. I/O maps
++#: ../lib/interface.c:940
++#, c-format
++msgid "base 0x%x "
++msgstr "základ 0x%x "
++
++#: ../lib/interface.c:942
++#, c-format
++msgid "memory 0x%lx-%lx "
++msgstr "paměť 0x%lx–%lx "
++
++#: ../lib/interface.c:945
++#, c-format
++msgid " dma 0x%x"
++msgstr " DMA 0x%x"
++
++#: ../lib/sockets.c:63
++#, c-format
+ msgid "No usable address families found.\n"
+-msgstr "Nebyla nalezena ¾ádná pou¾itelná tøída adres.\n"
++msgstr "Nebyla nalezena žádná použitelná třída adres.\n"
+
+ #: ../lib/util-ank.c:229
+ #, c-format
+ msgid "ip: %s is invalid inet address\n"
+-msgstr "ip: %s není platnou inet adresou\n"
++msgstr "ip: %s není platnou inet adresou\n"
+
+ #: ../lib/util-ank.c:238
+ #, c-format
+ msgid "ip: %s is invalid inet prefix\n"
+-msgstr "ip: %s není platným inet prefixem\n"
++msgstr "ip: %s není platným inet prefixem\n"
+
+ #: ../lib/util-ank.c:248
+ #, c-format
+ msgid "ip: %s is invalid IPv4 address\n"
+-msgstr "ip: %s není platnou IPv4 adresou\n"
++msgstr "ip: %s není platnou IPv4 adresou\n"
+
+ #: ../lib/util-ank.c:256
+ #, c-format
+ msgid "ip: argument is wrong: %s\n"
+-msgstr "ip: argument %s je nesprávný\n"
++msgstr "ip: argument %s je nesprávný\n"
+
+-#: ../ipmaddr.c:56
++#: ../ipmaddr.c:61
++#, c-format
+ msgid "Usage: ipmaddr [ add | del ] MULTIADDR dev STRING\n"
+-msgstr " Usage: ipmaddr [ add | del ] MULTIADR dev ØETÌZEC\n"
++msgstr " Usage: ipmaddr [ add | del ] MULTIADR dev ŘETĚZEC\n"
+
+-#: ../ipmaddr.c:57
++#: ../ipmaddr.c:62
++#, c-format
+ msgid " ipmaddr show [ dev STRING ] [ ipv4 | ipv6 | link | all ]\n"
+-msgstr " ipmaddr show [ dev ØETÌZEC ] [ ipv4 | ipv6 | link | all ]\n"
++msgstr " ipmaddr show [ dev ŘETĚZEC ] [ ipv4 | ipv6 | link | all ]\n"
+
+-#: ../ipmaddr.c:58
++#: ../ipmaddr.c:63
++#, c-format
+ msgid " ipmaddr -V | -version\n"
+ msgstr " ipmaddr -V | -version\n"
+
+-#: ../ipmaddr.c:258
++#: ../ipmaddr.c:263
+ #, c-format
+ msgid "family %d "
+-msgstr "tøída %d "
++msgstr "třída %d "
+
+-#: ../ipmaddr.c:267
++#: ../ipmaddr.c:272
+ #, c-format
+ msgid " users %d"
+-msgstr " u¾ivatelé %d"
++msgstr " uživatelé %d"
+
+-#: ../ipmaddr.c:353
++#: ../ipmaddr.c:361
+ msgid "Cannot create socket"
+-msgstr "Soket nelze vytvoøit"
++msgstr "Soket nelze vytvořit"
+
+ #: ../slattach.c:180
+ #, c-format
+ msgid "slattach: /dev/%s already locked!\n"
+-msgstr "slattach: zaøízení /dev/%s je ji¾ zamèeno!\n"
++msgstr "slattach: zařízení /dev/%s je již zamÄeno!\n"
+
+ #: ../slattach.c:186
+ #, c-format
+@@ -2433,80 +3184,169 @@ msgid "slattach: tty_lock: (%s): %s\n"
+ msgstr "slattach: tty_lock: (%s): %s\n"
+
+ #: ../slattach.c:192
++#, c-format
+ msgid "slattach: cannot write PID file\n"
+ msgstr "slattach: do PID souboru nelze zapisovat\n"
+
+ #: ../slattach.c:202
+ #, c-format
+ msgid "slattach: tty_lock: UUCP user %s unknown!\n"
+-msgstr "slattach: tty_lock: u¾ivatel UUCP %s není znám!\n"
++msgstr "slattach: tty_lock: uživatel UUCP %s není znám!\n"
+
+-#: ../slattach.c:430
++#: ../slattach.c:432
+ #, c-format
+ msgid "slattach: tty_hangup(DROP): %s\n"
+ msgstr "slattach: tty_hangup(DROP): %s\n"
+
+-#: ../slattach.c:437
++#: ../slattach.c:439
+ #, c-format
+ msgid "slattach: tty_hangup(RAISE): %s\n"
+ msgstr "slattach: tty_hangup(RAISE): %s\n"
+
+-#: ../slattach.c:486
++#: ../slattach.c:470
++#, c-format
++msgid "slattach: tty name too long\n"
++msgstr "slattach: název TTY je příliš dlouhý\n"
++
++#: ../slattach.c:500
++#, c-format
+ msgid "slattach: tty_open: cannot get current state!\n"
+-msgstr "slattach: tty_open: aktuální stav nelze zjistit!\n"
++msgstr "slattach: tty_open: aktuální stav nelze zjistit!\n"
+
+-#: ../slattach.c:493
++#: ../slattach.c:507
++#, c-format
+ msgid "slattach: tty_open: cannot get current line disc!\n"
+-msgstr "slattach: tty_open: aktuální linkovou disciplínu nelze zjistit!\n"
++msgstr "slattach: tty_open: aktuální linkovou disciplínu nelze zjistit!\n"
+
+-#: ../slattach.c:501
++#: ../slattach.c:515
++#, c-format
+ msgid "slattach: tty_open: cannot set RAW mode!\n"
+-msgstr "slattach: tty_open: re¾im RAW nelze nastavit!\n"
++msgstr "slattach: tty_open: režim RAW nelze nastavit!\n"
+
+-#: ../slattach.c:508
++#: ../slattach.c:522
+ #, c-format
+ msgid "slattach: tty_open: cannot set %s bps!\n"
+ msgstr "slattach: tty_open: %s bps nelze nastavit!\n"
+
+-#: ../slattach.c:518
++#: ../slattach.c:532
++#, c-format
+ msgid "slattach: tty_open: cannot set 8N1 mode!\n"
+-msgstr "slattach: tty_open: re¾im 8N1 nelze nastavit!\n"
++msgstr "slattach: tty_open: režim 8N1 nelze nastavit!\n"
++
++#: ../slattach.c:674
++#, c-format
++msgid "slattach: setvbuf(stdout,0,_IOLBF,0) : %s\n"
++msgstr "slattach: setvbuf(stdout, 0, _IOLBF, 0): %s\n"
+
+-#: ../slattach.c:686
++#: ../slattach.c:706
+ #, c-format
+ msgid "%s started"
+-msgstr "protokol %s spu¹tìn"
++msgstr "protokol %s spuštěn"
+
+-#: ../slattach.c:687
++#: ../slattach.c:707
+ #, c-format
+ msgid " on %s"
+ msgstr " na %s"
+
+-#: ../slattach.c:688
++#: ../slattach.c:708
+ #, c-format
+ msgid " interface %s\n"
+-msgstr " rozhraní %s\n"
++msgstr " rozhraní %s\n"
++
++#~ msgid ""
++#~ " arp [-v] [<HW>] [-i <if>] -s <hostname> <hwaddr> [netmask <nm>] pub "
++#~ "<-''-\n"
++#~ msgstr ""
++#~ " arp [-v] [<HW>] [-i <if>] -s <soubor> <hwadr> [síťmask <Äís>] <-''-\n"
++
++#~ msgid "%-9.9s Link encap:%s "
++#~ msgstr "%-9.9s Zapouzdření:%s "
++
++#~ msgid "HWaddr %s "
++#~ msgstr "HWadr %s "
++
++#~ msgid "Media:%s"
++#~ msgstr "Médium:%s"
++
++#~ msgid "(auto)"
++#~ msgstr "(auto)"
++
++#~ msgid " P-t-P:%s "
++#~ msgstr " P-t-P:%s "
++
++# V ostatních katalozích se překládá Broadcast -> všesměrové vysílání.
++# Tudiž bcast -> Všesměr :)
++#~ msgid " Bcast:%s "
++#~ msgstr " Všesměr:%s "
++
++#~ msgid " Mask:%s\n"
++#~ msgstr "Maska:%s\n"
++
++#~ msgid " Scope:"
++#~ msgstr " Rozsah:"
++
++#~ msgid "Unknown"
++#~ msgstr "Neznám."
++
++#~ msgid " EtherTalk Phase 2 addr:%s\n"
++#~ msgstr " EtherTalk Phase 2 adr:%s\n"
++
++#~ msgid " econet addr:%s\n"
++#~ msgstr " econet adr:%s\n"
++
++# Hic sunt leones ...
++#~ msgid "[NO FLAGS] "
++#~ msgstr "[ŽÃDNÉ PŘÃZNAKY]"
++
++#~ msgid " MTU:%d Metric:%d"
++#~ msgstr " MTU:%d Metrika:%d"
++
++#~ msgid " compressed:%lu\n"
++#~ msgstr " komprimováno:%lu\n"
++
++#~ msgid " collisions:%lu "
++#~ msgstr " kolizí:%lu "
++
++#~ msgid "DMA chan:%x "
++#~ msgstr "Kanál DMA:%x "
++
++#~ msgid "%s: unknown interface: %s\n"
++#~ msgstr "%s: rozhraní %s není známo\n"
++
++#~ msgid "address mask replies"
++#~ msgstr "odpovědi na žádost o masku podsítě"
++
++#~ msgid "unknown title %s\n"
++#~ msgstr "titulek %s je neznámý\n"
++
++#~ msgid "Routing table for `ddp' not yet supported.\n"
++#~ msgstr "Směrovací tabulka pro `ddp' není zatím podporována.\n"
++
++#~ msgid "IPX not configured in this system.\n"
++#~ msgstr "IPX není na tomto systému nakonfigurováno.\n"
+
+ #~ msgid ""
+-#~ " This comand can read or set the hostname or the NIS domainname. You can\n"
++#~ " This comand can read or set the hostname or the NIS domainname. You "
++#~ "can\n"
+ #~ msgstr ""
+-#~ " Tento program zji¹»uje a nastavuje jméno poèítaèe èi NIS domény. Mù¾e "
+-#~ "také\n"
++#~ " Tento program zjiÅ¡Å¥uje a nastavuje jméno poÄítaÄe Äi NIS domény. Může "
++#~ "také\n"
+
+ #~ msgid ""
+ #~ " also read the DNS domain or the FQDN (fully qualified domain name).\n"
+-#~ msgstr " zjistit DNS doménu èi kanonické jméno poèítaèe.\n"
++#~ msgstr " zjistit DNS doménu Äi kanonické jméno poÄítaÄe.\n"
+
+ #~ msgid ""
+ #~ " Unless you are using bind or NIS for host lookups you can change the\n"
+ #~ msgstr ""
+-#~ " Pokud nepou¾íváte bind èi NIS pro vyhledávání jmen poèítaèù, pak mù¾ete\n"
++#~ " Pokud nepoužíváte bind Äi NIS pro vyhledávání jmen poÄítaÄů, pak "
++#~ "můžete\n"
+
+ #~ msgid ""
+ #~ " FQDN (Fully Qualified Domain Name) and the DNS domain name (which is\n"
+ #~ msgstr ""
+-#~ " zmìnit kanonické jméno poèítaèe a jméno DNS domény (je souèástí "
+-#~ "kanonického\n"
++#~ " zmÄ›nit kanonické jméno poÄítaÄe a jméno DNS domény (je souÄástí "
++#~ "kanonického\n"
+
+ #~ msgid " part of the FQDN) in the /etc/hosts file.\n"
+-#~ msgstr " jména poèítaèe) v souboru /etc/hosts.\n"
++#~ msgstr " jména poÄítaÄe) v souboru /etc/hosts.\n"
+diff --git a/po/de.po b/po/de.po
+index f884dd9..309829a 100644
+--- a/po/de.po
++++ b/po/de.po
+@@ -1,4 +1,4 @@
+-# $Id: de.po,v 1.10 2000/08/01 03:19:48 ecki Exp $
++# $Id: de.po,v 1.11 2003/10/25 21:15:09 ecki Exp $
+ # German translation for net-tools 1.51
+ # Copyright (C) 1999 Ralf Bächle <ralf@gnu.org>
+ msgid ""
+@@ -9,7 +9,7 @@ msgstr ""
+ "Last-Translator: Ralf Bächle <ralf@gnu.org>\n"
+ "Language-Team:\n"
+ "MIME-Version: 1.0\n"
+-"Content-Type: text/plain; charset=iso8859-1\n"
++"Content-Type: text/plain; charset=iso-8859-1\n"
+ "Content-Transfer-Encoding: 8bit\n"
+
+ #: ../arp.c:110 ../arp.c:269
+@@ -64,7 +64,7 @@ msgstr "Adresse\t\t\tHWTyp\tHWAdresse\t Flags Maske\t\t Iface\n"
+
+ #: ../arp.c:467
+ msgid "(incomplete)"
+-msgstr "(unvollsändig)"
++msgstr "(unvollständig)"
+
+ #: ../arp.c:484
+ #, c-format
+diff --git a/po/et_EE.po b/po/et_EE.po
+index d748410..827406d 100644
+--- a/po/et_EE.po
++++ b/po/et_EE.po
+@@ -1,66 +1,65 @@
+ # Estonian translations for net-tools
+-# Copyright (C) 1999 Free Software Foundation, Inc.
+-# Meelis Roos <Meelis.Roos@mail.ee>, 1999.
++# Copyright (C) 1999-2001 Free Software Foundation, Inc.
++# Meelis Roos <mroos@linux.ee>, 1999-2001.
+ #
+-#, fuzzy
+ msgid ""
+ msgstr ""
+-"Project-Id-Version: net-tools 1.58\n"
+-"POT-Creation-Date: 2001-02-15 21:28+0200\n"
+-"PO-Revision-Date: 2001-02-15 18:00+0300\n"
++"Project-Id-Version: net-tools 1.60\n"
++"POT-Creation-Date: 2001-04-16 20:24+0200\n"
++"PO-Revision-Date: 2001-04-16 20:30+0200\n"
+ "Last-Translator: Meelis Roos <mroos@linux.ee>\n"
+ "Language-Team: Estonian <linux-ee@eenet.ee>\n"
+ "MIME-Version: 1.0\n"
+ "Content-Type: text/plain; charset=iso-8859-15\n"
+ "Content-Transfer-Encoding: 8bit\n"
+
+-#: ../arp.c:110 ../arp.c:269
++#: ../arp.c:111 ../arp.c:270
+ msgid "arp: need host name\n"
+ msgstr "arp: puudub hosti nimi\n"
+
+-#: ../arp.c:207 ../arp.c:221
++#: ../arp.c:208 ../arp.c:222
+ #, c-format
+ msgid "No ARP entry for %s\n"
+ msgstr "%s jaoks pole ARP kirjet\n"
+
+-#: ../arp.c:239
++#: ../arp.c:240
+ #, c-format
+ msgid "arp: cant get HW-Address for `%s': %s.\n"
+ msgstr "arp: ei saa riistvaralist aadressi `%s' jaoks: %s\n"
+
+-#: ../arp.c:243
++#: ../arp.c:244
+ msgid "arp: protocol type mismatch.\n"
+ msgstr "arp: vale protokolli tüüp\n"
+
+-#: ../arp.c:252
++#: ../arp.c:253
+ #, c-format
+ msgid "arp: device `%s' has HW address %s `%s'.\n"
+ msgstr "arp: seadmel `%s' on riistvaraline aadress %s `%s'\n"
+
+-#: ../arp.c:282
++#: ../arp.c:283
+ msgid "arp: need hardware address\n"
+ msgstr "arp: puudub riistvaraline aadress\n"
+
+-#: ../arp.c:290
++#: ../arp.c:291
+ msgid "arp: invalid hardware address\n"
+ msgstr "arp: vigane riistvaraline aadress\n"
+
+-#: ../arp.c:387
++#: ../arp.c:388
+ #, c-format
+ msgid "arp: cannot open etherfile %s !\n"
+ msgstr "arp: ei saa avada faili %s\n"
+
+-#: ../arp.c:403
++#: ../arp.c:404
+ #, c-format
+ msgid "arp: format error on line %u of etherfile %s !\n"
+ msgstr "arp: formaadiviga real %u failis %s\n"
+
+-#: ../arp.c:416
++#: ../arp.c:417
+ #, c-format
+ msgid "arp: cannot set entry on line %u of etherfile %s !\n"
+ msgstr "arp: ei saa kehtestada ARP kirjet real %u failis %s\n"
+
+-#: ../arp.c:437
++#: ../arp.c:438
+ msgid ""
+ "Address HWtype HWaddress Flags Mask "
+ "Iface\n"
+@@ -68,45 +67,45 @@ msgstr ""
+ "Aadress HWtüüp HWaadress Lipud Mask "
+ "Liides\n"
+
+-#: ../arp.c:467
++#: ../arp.c:468
+ msgid "(incomplete)"
+ msgstr "(mittetäielik)"
+
+-#: ../arp.c:484
++#: ../arp.c:485
+ #, c-format
+ msgid "%s (%s) at "
+ msgstr "%s (%s) aadressil "
+
+-#: ../arp.c:490
++#: ../arp.c:491
+ msgid "<incomplete> "
+ msgstr "<mittetäielik>"
+
+-#: ../arp.c:496
++#: ../arp.c:497
+ #, c-format
+ msgid "netmask %s "
+ msgstr "võrgumask %s "
+
+-#: ../arp.c:513
++#: ../arp.c:514
+ #, c-format
+ msgid "on %s\n"
+ msgstr "liides %s\n"
+
+-#: ../arp.c:592
++#: ../arp.c:593
+ #, c-format
+ msgid "Entries: %d\tSkipped: %d\tFound: %d\n"
+ msgstr "ARP kirjeid kokku: %s\tignoreerisin: %d\tleidsin: %d\n"
+
+-#: ../arp.c:596
++#: ../arp.c:597
+ #, c-format
+ msgid "%s (%s) -- no entry\n"
+ msgstr "%s (%s) -- pole kirjet\n"
+
+-#: ../arp.c:598
++#: ../arp.c:599
+ #, c-format
+ msgid "arp: in %d entries no match found.\n"
+ msgstr "arp: ei leidnud %d kirje hulgast sobivat\n"
+
+-#: ../arp.c:613
++#: ../arp.c:614
+ msgid ""
+ "Usage:\n"
+ " arp [-vn] [<HW>] [-i <if>] [-a] [<hostname>] <-Display ARP "
+@@ -116,7 +115,7 @@ msgstr ""
+ "ARP cache vaatamine:\n"
+ " arp [-vn] [<HW>] [-i <if>] [-a] [<hosti nimi>]\n"
+
+-#: ../arp.c:614
++#: ../arp.c:615
+ msgid ""
+ " arp [-v] [-i <if>] -d <hostname> [pub][nopub] <-Delete ARP "
+ "entry\n"
+@@ -124,7 +123,7 @@ msgstr ""
+ "ARP kirje kustutamine:\n"
+ " arp [-v] [-i <if>] -d <hosti nimi> [pub] [nopub]\n"
+
+-#: ../arp.c:615
++#: ../arp.c:616
+ msgid ""
+ " arp [-vnD] [<HW>] [-i <if>] -f [<filename>] <-Add entry from "
+ "file\n"
+@@ -132,7 +131,7 @@ msgstr ""
+ "ARP kirjete lisamine failist:\n"
+ " arp [-vnD] [<HW>] [-i <if>] -f [<failinimi>]\n"
+
+-#: ../arp.c:616
++#: ../arp.c:617
+ msgid ""
+ " arp [-v] [<HW>] [-i <if>] -s <hostname> <hwaddr> [temp][nopub] <-Add "
+ "entry\n"
+@@ -140,14 +139,14 @@ msgstr ""
+ "ARP kirje lisamine:\n"
+ " arp [-v] [<HW>] [-i <if>] -s <hosti nimi> <hwaddr> [temp] [nopub]\n"
+
+-#: ../arp.c:617
++#: ../arp.c:618
+ msgid ""
+ " arp [-v] [<HW>] [-i <if>] -s <hostname> <hwaddr> [netmask <nm>] pub "
+ "<-''-\n"
+ msgstr ""
+ " arp [-v] [<HW>] [-i <if>] -s <hosti nimi> <hwaddr> [netmask <nm>] pub\n"
+
+-#: ../arp.c:618
++#: ../arp.c:619
+ msgid ""
+ " arp [-v] [<HW>] [-i <if>] -Ds <hostname> <if> [netmask <nm>] pub "
+ "<-''-\n"
+@@ -156,7 +155,7 @@ msgstr ""
+ " arp [-v] [<HW>] [-i <if>] -Ds <hosti nimi> <if> [netmask <nm>] pub\n"
+ "\n"
+
+-#: ../arp.c:620
++#: ../arp.c:621
+ msgid ""
+ " -a display (all) hosts in alternative (BSD) "
+ "style\n"
+@@ -164,37 +163,37 @@ msgstr ""
+ " -a näita kõiki hoste alternatiivsel (BSD) "
+ "kujul\n"
+
+-#: ../arp.c:621
++#: ../arp.c:622
+ msgid " -s, --set set a new ARP entry\n"
+ msgstr " -s, --set uue ARP kirje seadmine\n"
+
+-#: ../arp.c:622
++#: ../arp.c:623
+ msgid " -d, --delete delete a specified entry\n"
+ msgstr " -d, --delete määratud kirje kustutamine\n"
+
+-#: ../arp.c:623 ../netstat.c:1485 ../route.c:85
++#: ../arp.c:624 ../netstat.c:1490 ../route.c:86
+ msgid " -v, --verbose be verbose\n"
+ msgstr " -v, --verbose jutukas väljund\n"
+
+-#: ../arp.c:624
++#: ../arp.c:625 ../netstat.c:1491 ../route.c:87
+ msgid " -n, --numeric don't resolve names\n"
+ msgstr " -n, --numeric mitte lahendada nimesid\n"
+
+-#: ../arp.c:625
++#: ../arp.c:626
+ msgid ""
+ " -i, --device specify network interface (e.g. eth0)\n"
+ msgstr ""
+ " -i, --device võrguliidese täpsustamine (näiteks eth0)\n"
+
+-#: ../arp.c:626
++#: ../arp.c:627
+ msgid " -D, --use-device read <hwaddr> from given device\n"
+ msgstr " -D, --use-device lugeda <hwaddr> vastavalt liideselt\n"
+
+-#: ../arp.c:627
++#: ../arp.c:628
+ msgid " -A, -p, --protocol specify protocol family\n"
+ msgstr " -A, -p, --protocol protokollipere määramine\n"
+
+-#: ../arp.c:628
++#: ../arp.c:629
+ msgid ""
+ " -f, --file read new entries from file or from "
+ "/etc/ethers\n"
+@@ -204,125 +203,125 @@ msgstr ""
+ "/etc/ethers'st\n"
+ "\n"
+
+-#: ../arp.c:630 ../rarp.c:181
++#: ../arp.c:631 ../rarp.c:182
+ #, c-format
+ msgid " <HW>=Use '-H <hw>' to specify hardware address type. Default: %s\n"
+ msgstr ""
+ " <HW>=kasutage '-H <hw>' riistvaralise aadressi määramiseks.\n"
+ " Vaikimisi: %s\n"
+
+-#: ../arp.c:631 ../rarp.c:182
++#: ../arp.c:632 ../rarp.c:183
+ msgid " List of possible hardware types (which support ARP):\n"
+ msgstr " Võimalike ARP-i toetavate riistvara tüüpide nimekiri:\n"
+
+-#: ../arp.c:664 ../arp.c:749
++#: ../arp.c:666 ../arp.c:751
+ #, c-format
+ msgid "%s: hardware type not supported!\n"
+ msgstr "arp: riistvara tüüpi %s ei toetata\n"
+
+-#: ../arp.c:668
++#: ../arp.c:670
+ #, c-format
+ msgid "%s: address family not supported!\n"
+ msgstr "arp: aadressiperekonda %s ei toetata\n"
+
+-#: ../arp.c:703
++#: ../arp.c:705
+ msgid "arp: -N not yet supported.\n"
+ msgstr "arp: -N toetust pole veel\n"
+
+-#: ../arp.c:713
++#: ../arp.c:715
+ #, c-format
+ msgid "arp: %s: unknown address family.\n"
+ msgstr "arp: tundmatu aadressiperekond %s\n"
+
+-#: ../arp.c:722
++#: ../arp.c:724
+ #, c-format
+ msgid "arp: %s: unknown hardware type.\n"
+ msgstr "arp: tundmatu riistvara tüüp %s\n"
+
+-#: ../arp.c:741
++#: ../arp.c:743
+ #, c-format
+ msgid "arp: %s: kernel only supports 'inet'.\n"
+ msgstr "arp: tuumas on ainult 'inet' aadressiperekonna toetus\n"
+
+-#: ../arp.c:754
++#: ../arp.c:756
+ #, c-format
+ msgid "arp: %s: hardware type without ARP support.\n"
+ msgstr "arp: riistvara tüübil %s pole ARP toetust\n"
+
+-#: ../hostname.c:69
++#: ../hostname.c:70
+ #, c-format
+ msgid "Setting nodename to `%s'\n"
+ msgstr "Sean sõlme nimeks `%s'\n"
+
+-#: ../hostname.c:74
++#: ../hostname.c:75
+ #, c-format
+ msgid "%s: you must be root to change the node name\n"
+ msgstr "%s: ainult root saab sõlme nime muuta\n"
+
+-#: ../hostname.c:77 ../hostname.c:97 ../hostname.c:116
++#: ../hostname.c:78 ../hostname.c:98 ../hostname.c:117
+ #, c-format
+ msgid "%s: name too long\n"
+ msgstr "%s: nimi on liiga pikk\n"
+
+-#: ../hostname.c:89
++#: ../hostname.c:90
+ #, c-format
+ msgid "Setting hostname to `%s'\n"
+ msgstr "Sean hosti nimeks `%s'\n"
+
+-#: ../hostname.c:94
++#: ../hostname.c:95
+ #, c-format
+ msgid "%s: you must be root to change the host name\n"
+ msgstr "%s: ainult root saab hosti nime muuta\n"
+
+-#: ../hostname.c:108
++#: ../hostname.c:109
+ #, c-format
+ msgid "Setting domainname to `%s'\n"
+ msgstr "Sean domeeni nimeks `%s'\n"
+
+-#: ../hostname.c:113
++#: ../hostname.c:114
+ #, c-format
+ msgid "%s: you must be root to change the domain name\n"
+ msgstr "%s: ainult root saab domeeni nime muuta\n"
+
+-#: ../hostname.c:131
++#: ../hostname.c:132
+ #, c-format
+ msgid "Resolving `%s' ...\n"
+ msgstr "Lahendan `%s' ...\n"
+
+-#: ../hostname.c:137
++#: ../hostname.c:138
+ #, c-format
+ msgid "Result: h_name=`%s'\n"
+ msgstr "Tulemus: h_name=`%s'\n"
+
+-#: ../hostname.c:142
++#: ../hostname.c:143
+ #, c-format
+ msgid "Result: h_aliases=`%s'\n"
+ msgstr "Tulemus: h_aliases=`%s'\n"
+
+-#: ../hostname.c:147
++#: ../hostname.c:148
+ #, c-format
+ msgid "Result: h_addr_list=`%s'\n"
+ msgstr "Tulemus: h_addr_list=`%s'\n"
+
+-#: ../hostname.c:209
++#: ../hostname.c:210
+ #, c-format
+ msgid "%s: can't open `%s'\n"
+ msgstr "%s: ei saa avada faili `%s'\n"
+
+-#: ../hostname.c:223
++#: ../hostname.c:224
+ msgid "Usage: hostname [-v] {hostname|-F file} set hostname (from file)\n"
+ msgstr ""
+ "Kasutamine:\n"
+ " hostname [-v] {hosti nimi|-F fail} hosti nime seadmine (ka "
+ "failist)\n"
+
+-#: ../hostname.c:224
++#: ../hostname.c:225
+ msgid ""
+ " domainname [-v] {nisdomain|-F file} set NIS domainname (from file)\n"
+ msgstr ""
+ " domainname [-v] {nisdomeen|-F fail} NIS domeeni nime seadmine\n"
+
+-#: ../hostname.c:226
++#: ../hostname.c:227
+ msgid ""
+ " nodename [-v] {nodename|-F file} set DECnet node name (from "
+ "file)\n"
+@@ -330,18 +329,18 @@ msgstr ""
+ " nodename [-v] {nodename|-F fail} DECneti võrgusõlme nime "
+ "seadmine\n"
+
+-#: ../hostname.c:228
++#: ../hostname.c:229
+ msgid " hostname [-v] [-d|-f|-s|-a|-i|-y|-n] display formatted name\n"
+ msgstr ""
+ " hostname [-v] [-d|-f|-s|-a|-i|-y|-n] nime näitamine antud formaadis\n"
+
+-#: ../hostname.c:229
++#: ../hostname.c:230
+ msgid ""
+ " hostname [-v] display hostname\n"
+ "\n"
+ msgstr " hostname [-v] hosti nime näitamine\n"
+
+-#: ../hostname.c:230
++#: ../hostname.c:231
+ msgid ""
+ " hostname -V|--version|-h|--help print info and exit\n"
+ "\n"
+@@ -350,7 +349,7 @@ msgstr ""
+ " hostname -h|--help seesama abiinfo\n"
+ "\n"
+
+-#: ../hostname.c:231
++#: ../hostname.c:232
+ msgid ""
+ " dnsdomainname=hostname -d, {yp,nis,}domainname=hostname -y\n"
+ "\n"
+@@ -358,36 +357,36 @@ msgstr ""
+ " dnsdomainname=hostname -d, {yp,nis,}domainname=hostname -y\n"
+ "\n"
+
+-#: ../hostname.c:232
++#: ../hostname.c:233
+ msgid " -s, --short short host name\n"
+ msgstr " -s, --short lühike hosti nimi\n"
+
+-#: ../hostname.c:233
++#: ../hostname.c:234
+ msgid " -a, --alias alias names\n"
+ msgstr " -a, --alias alias-nimed\n"
+
+-#: ../hostname.c:234
++#: ../hostname.c:235
+ msgid " -i, --ip-address addresses for the hostname\n"
+ msgstr " -i, --ip-address hosti IP aadressid\n"
+
+-#: ../hostname.c:235
++#: ../hostname.c:236
+ msgid " -f, --fqdn, --long long host name (FQDN)\n"
+ msgstr ""
+ " -f, --fqdn, --long pikk hosti nimi (FQDN - täielik süsteeminimi)\n"
+
+-#: ../hostname.c:236
++#: ../hostname.c:237
+ msgid " -d, --domain DNS domain name\n"
+ msgstr " -d, --domain DNS domeeni nimi\n"
+
+-#: ../hostname.c:237
++#: ../hostname.c:238
+ msgid " -y, --yp, --nis NIS/YP domainname\n"
+ msgstr " -y, --yp, --nis NIS/YP domeeni nimi\n"
+
+-#: ../hostname.c:239
++#: ../hostname.c:240
+ msgid " -n, --node DECnet node name\n"
+ msgstr " -n, --node DECneti võrgusõlme nimi\n"
+
+-#: ../hostname.c:241
++#: ../hostname.c:242
+ msgid ""
+ " -F, --file read hostname or NIS domainname from given file\n"
+ "\n"
+@@ -395,7 +394,7 @@ msgstr ""
+ " -F, --file lugeda hosti või NIS domeeni nimi failist\n"
+ "\n"
+
+-#: ../hostname.c:243
++#: ../hostname.c:244
+ msgid ""
+ " This command can read or set the hostname or the NIS domainname. You can\n"
+ " also read the DNS domain or the FQDN (fully qualified domain name).\n"
+@@ -409,12 +408,12 @@ msgstr ""
+ " täielikku süsteeminime (FQDN) ja DNS domeeni nime (mis on täieliku nime\n"
+ " osa) muuta failist /etc/hosts.\n"
+
+-#: ../hostname.c:338
++#: ../hostname.c:340
+ #, c-format
+ msgid "%s: You can't change the DNS domain name with this command\n"
+ msgstr "%s: selle käsuga ei saa muuta DNS domeeni nime\n"
+
+-#: ../hostname.c:339
++#: ../hostname.c:341
+ msgid ""
+ "\n"
+ "Unless you are using bind or NIS for host lookups you can change the DNS\n"
+@@ -422,26 +421,26 @@ msgstr ""
+ "\n"
+ "Kui Te EI kasuta bind'i ega NIS'i nimede lahendamiseks, saate DNS domeeni\n"
+
+-#: ../hostname.c:340
++#: ../hostname.c:342
+ msgid "domain name (which is part of the FQDN) in the /etc/hosts file.\n"
+ msgstr "(mis on täieliku nime osa) nime muuta failist /etc/hosts.\n"
+
+-#: ../hostname.c:357
++#: ../hostname.c:359
+ #, c-format
+ msgid "gethostname()=`%s'\n"
+ msgstr "gethostname()=`%s'\n"
+
+-#: ../hostname.c:374
++#: ../hostname.c:376
+ #, c-format
+ msgid "getdomainname()=`%s'\n"
+ msgstr "getdomainname()=`%s'\n"
+
+-#: ../hostname.c:389
++#: ../hostname.c:391
+ #, c-format
+ msgid "getnodename()=`%s'\n"
+ msgstr "getnodename()=`%s'\n"
+
+-#: ../ifconfig.c:110
++#: ../ifconfig.c:108
+ msgid ""
+ "Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR "
+ "Flg\n"
+@@ -449,16 +448,16 @@ msgstr ""
+ "Liides MTU Meetr. RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR "
+ "Lip\n"
+
+-#: ../ifconfig.c:132 ../ifconfig.c:164
++#: ../ifconfig.c:130 ../ifconfig.c:162
+ #, c-format
+ msgid "%s: unknown interface: %s\n"
+ msgstr "ifconfig: tundmatu liides %s: %s\n"
+
+-#: ../ifconfig.c:156 ../ifconfig.c:740 ../ifconfig.c:831 ../ifconfig.c:937
++#: ../ifconfig.c:154 ../ifconfig.c:734 ../ifconfig.c:825 ../ifconfig.c:936
+ msgid "No support for INET on this system.\n"
+ msgstr "Antud süsteem ei toeta INET aadressiperekonda\n"
+
+-#: ../ifconfig.c:179
++#: ../ifconfig.c:177
+ msgid ""
+ "Usage:\n"
+ " ifconfig [-a] [-i] [-v] [-s] <interface> [[<AF>] <address>]\n"
+@@ -466,51 +465,51 @@ msgstr ""
+ "Kasutamine:\n"
+ " ifconfig [-a] [-i] [-v] [-s] <liides> [[<AF>] <aadress>]\n"
+
+-#: ../ifconfig.c:181
++#: ../ifconfig.c:179
+ msgid " [add <address>[/<prefixlen>]]\n"
+ msgstr " [add <aadress>[/<prefiksi pikkus>]]\n"
+
+-#: ../ifconfig.c:182
++#: ../ifconfig.c:180
+ msgid " [del <address>[/<prefixlen>]]\n"
+ msgstr " [del <aadress>[/<prefiksi pikkus>]]\n"
+
+-#: ../ifconfig.c:183
++#: ../ifconfig.c:181
+ msgid " [[-]broadcast [<address>]] [[-]pointopoint [<address>]]\n"
+ msgstr " [[-]broadcast [<aadress>]] [[-]pointopoint [<aadress>]]\n"
+
+-#: ../ifconfig.c:184
++#: ../ifconfig.c:182
+ msgid " [netmask <address>] [dstaddr <address>] [tunnel <address>]\n"
+ msgstr " [netmask <aadress>] [dstaddr <aadress>] [tunnel <aadress>]\n"
+
+-#: ../ifconfig.c:187
++#: ../ifconfig.c:185
+ msgid " [outfill <NN>] [keepalive <NN>]\n"
+ msgstr " [outfill <NN>] [keepalive <NN>]\n"
+
+-#: ../ifconfig.c:189
++#: ../ifconfig.c:187
+ msgid " [hw <HW> <address>] [metric <NN>] [mtu <NN>]\n"
+ msgstr " [hw <HW> <aadress>] [metric <NN>] [mtu <NN>]\n"
+
+-#: ../ifconfig.c:190
++#: ../ifconfig.c:188
+ msgid " [[-]trailers] [[-]arp] [[-]allmulti]\n"
+ msgstr " [[-]trailers] [[-]arp] [[-]allmulti]\n"
+
+-#: ../ifconfig.c:191
++#: ../ifconfig.c:189
+ msgid " [multicast] [[-]promisc]\n"
+ msgstr " [multicast] [[-]promisc]\n"
+
+-#: ../ifconfig.c:192
++#: ../ifconfig.c:190
+ msgid " [mem_start <NN>] [io_addr <NN>] [irq <NN>] [media <type>]\n"
+ msgstr " [mem_start <NN>] [io_addr <NN>] [irq <NN>] [media <tüüp>]\n"
+
+-#: ../ifconfig.c:194
++#: ../ifconfig.c:192
+ msgid " [txqueuelen <NN>]\n"
+ msgstr " [txqueuelen <NN>]\n"
+
+-#: ../ifconfig.c:197
++#: ../ifconfig.c:195
+ msgid " [[-]dynamic]\n"
+ msgstr " [[-]dynamic]\n"
+
+-#: ../ifconfig.c:199
++#: ../ifconfig.c:197
+ msgid ""
+ " [up|down] ...\n"
+ "\n"
+@@ -518,73 +517,86 @@ msgstr ""
+ " [up|down] ...\n"
+ "\n"
+
+-#: ../ifconfig.c:201
++#: ../ifconfig.c:199
+ msgid " <HW>=Hardware Type.\n"
+ msgstr " <HW>=riistvara tüüp\n"
+
+-#: ../ifconfig.c:202
++#: ../ifconfig.c:200
+ msgid " List of possible hardware types:\n"
+ msgstr " Võimalike riistvara tüüpide nimekiri:\n"
+
+ #. 1 = ARPable
+-#: ../ifconfig.c:204
++#: ../ifconfig.c:202
+ #, c-format
+ msgid " <AF>=Address family. Default: %s\n"
+ msgstr " <AF>=aadressiperekond, vaikimisi %s\n"
+
+-#: ../ifconfig.c:205
++#: ../ifconfig.c:203
+ msgid " List of possible address families:\n"
+ msgstr " Võimalike aadressiperekondade nimekiri:\n"
+
+-#: ../ifconfig.c:361
++#: ../ifconfig.c:278
++#, c-format
++msgid "ifconfig: option `%s' not recognised.\n"
++msgstr ""
++
++#: ../ifconfig.c:280 ../ifconfig.c:925
++msgid "ifconfig: `--help' gives usage information.\n"
++msgstr ""
++
++#: ../ifconfig.c:355
+ msgid "Unknown media type.\n"
+ msgstr "Tundmatu meedia tüüp\n"
+
+-#: ../ifconfig.c:653
++#: ../ifconfig.c:647
+ #, c-format
+ msgid "hw address type `%s' has no handler to set address. failed.\n"
+ msgstr ""
+ "riistvara aadressi tüübil `%s' pole käsitlejat aadressi seadmiseks - ebaõnn\n"
+
+-#: ../ifconfig.c:662
++#: ../ifconfig.c:656
+ #, c-format
+ msgid "%s: invalid %s address.\n"
+ msgstr "%s: vigane %s aadress\n"
+
+-#: ../ifconfig.c:706 ../ifconfig.c:796 ../ifconfig.c:882
++#: ../ifconfig.c:700 ../ifconfig.c:790 ../ifconfig.c:876
+ msgid "No support for INET6 on this system.\n"
+ msgstr "Antud süsteem ei toeta INET6 aadressiperekonda\n"
+
+-#: ../ifconfig.c:749 ../ifconfig.c:840
++#: ../ifconfig.c:743 ../ifconfig.c:834
+ #, c-format
+ msgid "Interface %s not initialized\n"
+ msgstr "Liides %s pole initsialiseeritud\n"
+
+-#: ../ifconfig.c:761 ../ifconfig.c:851
++#: ../ifconfig.c:755 ../ifconfig.c:845
+ msgid "Bad address.\n"
+ msgstr "Vigane aadress\n"
+
+-#: ../ifconfig.c:854
++#: ../ifconfig.c:848
+ msgid "Address deletion not supported on this system.\n"
+ msgstr "Antud süsteem ei toeta aadresside kustutamist\n"
+
+-#: ../ifconfig.c:947
++#: ../ifconfig.c:920
++msgid "ifconfig: Cannot set address for this protocol family.\n"
++msgstr "Ei oska seada aadresse selle aadressiperekonna jaoks\n"
++
++#: ../ifconfig.c:946
+ msgid "No support for ECONET on this system.\n"
+ msgstr "Antud süsteem ei toeta ECONET aadressiperekonda\n"
+
+-#: ../ifconfig.c:955
++#: ../ifconfig.c:954
+ #, c-format
+ msgid "Don't know how to set addresses for family %d.\n"
+ msgstr "Ei oska seada aadresse aadressiperekonna %d jaoks\n"
+
+-#: ../netstat.c:429
++#: ../netstat.c:430
+ #, c-format
+ msgid ""
+ "(No info could be read for \"-p\": geteuid()=%d but you should be root.)\n"
+ msgstr ""
+ "(\"-p\" jaoks ei saanud infot lugeda: geteuid()=%d, aga vaja oleks root'u)\n"
+
+-#: ../netstat.c:433
++#: ../netstat.c:434
+ msgid ""
+ "(Not all processes could be identified, non-owned process info\n"
+ " will not be shown, you would have to be root to see it all.)\n"
+@@ -592,27 +604,27 @@ msgstr ""
+ "(Mõnesid protsesse ei saanud identifitseerida, teiste kasutajate\n"
+ "info lugemiseks peab olema root)\n"
+
+-#: ../netstat.c:440 ../netstat.c:1171 ../netstat.c:1248
++#: ../netstat.c:441 ../netstat.c:1176 ../netstat.c:1253
+ msgid "LISTENING"
+ msgstr "LISTENING"
+
+-#: ../netstat.c:441
++#: ../netstat.c:442
+ msgid "CONN SENT"
+ msgstr "CONN SENT"
+
+-#: ../netstat.c:442 ../netstat.c:1250
++#: ../netstat.c:443 ../netstat.c:1255
+ msgid "DISC SENT"
+ msgstr "DISC SENT"
+
+-#: ../netstat.c:443 ../netstat.c:510 ../netstat.c:889 ../netstat.c:1251
++#: ../netstat.c:444 ../netstat.c:511 ../netstat.c:894 ../netstat.c:1256
+ msgid "ESTABLISHED"
+ msgstr "ESTABLISHED"
+
+-#: ../netstat.c:465
++#: ../netstat.c:466
+ msgid "Active NET/ROM sockets\n"
+ msgstr "Aktiivsed NET/ROM soklid\n"
+
+-#: ../netstat.c:466
++#: ../netstat.c:467
+ msgid ""
+ "User Dest Source Device State Vr/Vs Send-Q "
+ "Recv-Q\n"
+@@ -620,182 +632,182 @@ msgstr ""
+ "Kasutaja Sihtpunkt Lähtepunkt Liides Olek Vr/Vs SaatJrk "
+ "VvJrk\n"
+
+-#: ../netstat.c:476 ../netstat.c:1290
++#: ../netstat.c:477 ../netstat.c:1295
+ #, c-format
+ msgid "Problem reading data from %s\n"
+ msgstr "Probleem andmete lugemisel failist %s\n"
+
+-#: ../netstat.c:511
++#: ../netstat.c:512
+ msgid "SYN_SENT"
+ msgstr "SYN_SENT"
+
+-#: ../netstat.c:512
++#: ../netstat.c:513
+ msgid "SYN_RECV"
+ msgstr "SYN_RECV"
+
+-#: ../netstat.c:513
++#: ../netstat.c:514
+ msgid "FIN_WAIT1"
+ msgstr "FIN_WAIT1"
+
+-#: ../netstat.c:514
++#: ../netstat.c:515
+ msgid "FIN_WAIT2"
+ msgstr "FIN_WAIT2"
+
+-#: ../netstat.c:515
++#: ../netstat.c:516
+ msgid "TIME_WAIT"
+ msgstr "TIME_WAIT"
+
+-#: ../netstat.c:516
++#: ../netstat.c:517
+ msgid "CLOSE"
+ msgstr "CLOSE"
+
+-#: ../netstat.c:517
++#: ../netstat.c:518
+ msgid "CLOSE_WAIT"
+ msgstr "CLOSE_WAIT"
+
+-#: ../netstat.c:518
++#: ../netstat.c:519
+ msgid "LAST_ACK"
+ msgstr "LAST_ACK"
+
+-#: ../netstat.c:519
++#: ../netstat.c:520
+ msgid "LISTEN"
+ msgstr "LISTEN"
+
+-#: ../netstat.c:520
++#: ../netstat.c:521
+ msgid "CLOSING"
+ msgstr "CLOSING"
+
+-#: ../netstat.c:587
++#: ../netstat.c:592
+ #, c-format
+ msgid "warning, got bogus igmp6 line %d.\n"
+ msgstr "Hoiatus - sain imeliku igmp6 rea (nr. %d)\n"
+
+-#: ../netstat.c:592 ../netstat.c:630 ../netstat.c:751 ../netstat.c:883
+-#: ../netstat.c:1014 ../netstat.c:1019
++#: ../netstat.c:597 ../netstat.c:635 ../netstat.c:756 ../netstat.c:888
++#: ../netstat.c:1019 ../netstat.c:1024
+ #, c-format
+ msgid "netstat: unsupported address family %d !\n"
+ msgstr "netstat: aadressiperekonda %d ei toetata\n"
+
+-#: ../netstat.c:605 ../netstat.c:610 ../netstat.c:618 ../netstat.c:625
++#: ../netstat.c:610 ../netstat.c:615 ../netstat.c:623 ../netstat.c:630
+ #, c-format
+ msgid "warning, got bogus igmp line %d.\n"
+ msgstr "Hoiatus - sain imeliku igmp rea (nr. %d)\n"
+
+-#: ../netstat.c:668
++#: ../netstat.c:673
+ msgid "Active X.25 sockets\n"
+ msgstr "Aktiivsed X.25 soklid\n"
+
+ #. IMHO, Vr/Vs is not very usefull --SF
+-#: ../netstat.c:670
++#: ../netstat.c:675
+ msgid ""
+ "Dest Source Device LCI State Vr/Vs Send-Q "
+ "Recv-Q\n"
+ msgstr ""
+ "Sihtpunkt Lähtepunkt Liides LCI Olek Vr/Vs SaatJrk VvJrk\n"
+
+-#: ../netstat.c:747
++#: ../netstat.c:752
+ msgid "warning, got bogus tcp line.\n"
+ msgstr "Hoiatus - sain imeliku tcp rea\n"
+
+-#: ../netstat.c:788 ../netstat.c:938 ../netstat.c:1057
++#: ../netstat.c:793 ../netstat.c:943 ../netstat.c:1062
+ #, c-format
+ msgid "off (0.00/%ld/%d)"
+ msgstr "eikäi ((0.00/%ld/%d)"
+
+-#: ../netstat.c:792
++#: ../netstat.c:797
+ #, c-format
+ msgid "on (%2.2f/%ld/%d)"
+ msgstr "käib (%2.2f/%ld/%d)"
+
+-#: ../netstat.c:797
++#: ../netstat.c:802
+ #, c-format
+ msgid "keepalive (%2.2f/%ld/%d)"
+ msgstr "keepalive (%2.2f/%ld/%d)"
+
+-#: ../netstat.c:802
++#: ../netstat.c:807
+ #, c-format
+ msgid "timewait (%2.2f/%ld/%d)"
+ msgstr "timewait (%2.2f/%ld/%d)"
+
+-#: ../netstat.c:807 ../netstat.c:947 ../netstat.c:1067
++#: ../netstat.c:812 ../netstat.c:952 ../netstat.c:1072
+ #, c-format
+ msgid "unkn-%d (%2.2f/%ld/%d)"
+ msgstr "eitea-%d (%2.2f/%ld/%d)"
+
+-#: ../netstat.c:879
++#: ../netstat.c:884
+ msgid "warning, got bogus udp line.\n"
+ msgstr "Hoiatus - sain imeliku udp rea\n"
+
+-#: ../netstat.c:897 ../netstat.c:1157 ../netstat.c:1190
++#: ../netstat.c:902 ../netstat.c:1162 ../netstat.c:1195
+ msgid "UNKNOWN"
+ msgstr "TUNDMATU"
+
+-#: ../netstat.c:943 ../netstat.c:1062
++#: ../netstat.c:948 ../netstat.c:1067
+ #, c-format
+ msgid "on%d (%2.2f/%ld/%d)"
+ msgstr "käib-%d (%2.2f/%ld/%d)"
+
+-#: ../netstat.c:1028
++#: ../netstat.c:1033
+ msgid "warning, got bogus raw line.\n"
+ msgstr "Hoiatus - sain imeliku raw rea\n"
+
+-#: ../netstat.c:1110
++#: ../netstat.c:1115
+ msgid "warning, got bogus unix line.\n"
+ msgstr "Hoiatus - sain imeliku unix rea\n"
+
+-#: ../netstat.c:1137
++#: ../netstat.c:1142
+ msgid "STREAM"
+ msgstr "STREAM"
+
+-#: ../netstat.c:1141
++#: ../netstat.c:1146
+ msgid "DGRAM"
+ msgstr "DGRAM"
+
+-#: ../netstat.c:1145
++#: ../netstat.c:1150
+ msgid "RAW"
+ msgstr "RAW"
+
+-#: ../netstat.c:1149
++#: ../netstat.c:1154
+ msgid "RDM"
+ msgstr "RDM"
+
+-#: ../netstat.c:1153
++#: ../netstat.c:1158
+ msgid "SEQPACKET"
+ msgstr "SEQPACKET"
+
+-#: ../netstat.c:1162
++#: ../netstat.c:1167
+ msgid "FREE"
+ msgstr "VABA"
+
+-#: ../netstat.c:1178
++#: ../netstat.c:1183
+ msgid "CONNECTING"
+ msgstr "ÜHENDUMAS"
+
+-#: ../netstat.c:1182
++#: ../netstat.c:1187
+ msgid "CONNECTED"
+ msgstr "ÜHENDATUD"
+
+-#: ../netstat.c:1186
++#: ../netstat.c:1191
+ msgid "DISCONNECTING"
+ msgstr "LAHTIÜHENDUMAS"
+
+-#: ../netstat.c:1217
++#: ../netstat.c:1222
+ msgid "Active UNIX domain sockets "
+ msgstr "Aktiivsed UNIX domeeni soklid "
+
+-#: ../netstat.c:1219 ../netstat.c:1729
++#: ../netstat.c:1224 ../netstat.c:1735
+ msgid "(servers and established)"
+ msgstr "(serverid ja ühendatud)"
+
+-#: ../netstat.c:1222 ../netstat.c:1732
++#: ../netstat.c:1227 ../netstat.c:1738
+ msgid "(only servers)"
+ msgstr "(ainult serverid)"
+
+-#: ../netstat.c:1224 ../netstat.c:1734
++#: ../netstat.c:1229 ../netstat.c:1740
+ msgid "(w/o servers)"
+ msgstr "(ilma serveriteta)"
+
+-#: ../netstat.c:1227
++#: ../netstat.c:1232
+ msgid ""
+ "\n"
+ "Proto RefCnt Flags Type State I-Node"
+@@ -803,32 +815,32 @@ msgstr ""
+ "\n"
+ "Proto Mitu Lipud Tüüp Olek I-kirje "
+
+-#: ../netstat.c:1229
++#: ../netstat.c:1234
+ msgid " Path\n"
+ msgstr "Tee\n"
+
+-#: ../netstat.c:1249
++#: ../netstat.c:1254
+ msgid "SABM SENT"
+ msgstr "SABM SENT"
+
+-#: ../netstat.c:1252
++#: ../netstat.c:1257
+ msgid "RECOVERY"
+ msgstr "RECOVERY"
+
+-#: ../netstat.c:1266
++#: ../netstat.c:1271
+ msgid "Active AX.25 sockets\n"
+ msgstr "Aktiivsed AX.25 soklid\n"
+
+-#: ../netstat.c:1267
++#: ../netstat.c:1272
+ msgid "Dest Source Device State Vr/Vs Send-Q Recv-Q\n"
+ msgstr "Sihtpunkt Lähtepunkt Liides Olek Vr/Vs SaatJrk VvJrk\n"
+
+-#: ../netstat.c:1310
++#: ../netstat.c:1315
+ #, c-format
+ msgid "problem reading data from %s\n"
+ msgstr "Probleem andmete lugemisel failist %s\n"
+
+-#: ../netstat.c:1361
++#: ../netstat.c:1366
+ msgid ""
+ "Active IPX sockets\n"
+ "Proto Recv-Q Send-Q Local Address Foreign Address "
+@@ -838,23 +850,23 @@ msgstr ""
+ "Proto VvJrk SaatJrk Kohalik aadress Väline aadress "
+ "Olek "
+
+-#: ../netstat.c:1363
++#: ../netstat.c:1368
+ msgid " User"
+ msgstr " Kasutaja"
+
+-#: ../netstat.c:1397
++#: ../netstat.c:1402
+ msgid "ESTAB"
+ msgstr "ESTAB"
+
+-#: ../netstat.c:1405
++#: ../netstat.c:1410
+ msgid "UNK."
+ msgstr "UNK."
+
+-#: ../netstat.c:1443
++#: ../netstat.c:1448
+ msgid "Kernel Interface table\n"
+ msgstr "Tuuma liideste tabel\n"
+
+-#: ../netstat.c:1447
++#: ../netstat.c:1452
+ msgid ""
+ "Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR "
+ "Flg\n"
+@@ -862,11 +874,11 @@ msgstr ""
+ "Liides MTU Meetr RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR "
+ "Lip\n"
+
+-#: ../netstat.c:1451
++#: ../netstat.c:1456
+ msgid "missing interface information"
+ msgstr "Puudulik informatsioon liideste kohta"
+
+-#: ../netstat.c:1474
++#: ../netstat.c:1479
+ msgid ""
+ "usage: netstat [-veenNcCF] [<Af>] -r netstat "
+ "{-V|--version|-h|--help}\n"
+@@ -874,11 +886,11 @@ msgstr ""
+ "Kasutamine: netstat [-veenNcCF] [<Af>] -r\n"
+ " netstat {-V|--version|-h|--help}\n"
+
+-#: ../netstat.c:1475
++#: ../netstat.c:1480
+ msgid " netstat [-vnNcaeol] [<Socket> ...]\n"
+ msgstr " netstat [-vnNcaeol] [<Sokkel> ...]\n"
+
+-#: ../netstat.c:1476
++#: ../netstat.c:1481
+ msgid ""
+ " netstat { [-veenNac] -i | [-cnNe] -M | -s }\n"
+ "\n"
+@@ -886,25 +898,25 @@ msgstr ""
+ " netstat { [-veenNac] -i | [-cnNe] -M | -s }\n"
+ "\n"
+
+-#: ../netstat.c:1478
++#: ../netstat.c:1483
+ msgid " -r, --route display routing table\n"
+ msgstr " -r, --route ruutingutabeli näitamine\n"
+
+-#: ../netstat.c:1479
++#: ../netstat.c:1484
+ msgid " -i, --interfaces display interface table\n"
+ msgstr " -i, --interfaces liideste tabeli näitamine\n"
+
+-#: ../netstat.c:1480
++#: ../netstat.c:1485
+ msgid " -g, --groups display multicast group memberships\n"
+ msgstr " -g, --groups multiedastuse gruppide näitamine\n"
+
+-#: ../netstat.c:1481
++#: ../netstat.c:1486
+ msgid ""
+ " -s, --statistics display networking statistics (like SNMP)\n"
+ msgstr ""
+ " -s, --statistics võrgu statistika näitamine (SNMP stiilis)\n"
+
+-#: ../netstat.c:1483
++#: ../netstat.c:1488
+ msgid ""
+ " -M, --masquerade display masqueraded connections\n"
+ "\n"
+@@ -912,36 +924,32 @@ msgstr ""
+ " -M, --masquerade maskeeritavate ühenduste näitamine\n"
+ "\n"
+
+-#: ../netstat.c:1486 ../route.c:86
+-msgid " -n, --numeric dont resolve names\n"
+-msgstr " -n, --numeric mitte lahendada numbreid nimedeks\n"
+-
+-#: ../netstat.c:1487
+-msgid " --numeric-hosts dont resolve host names\n"
++#: ../netstat.c:1492
++msgid " --numeric-hosts don't resolve host names\n"
+ msgstr " --numeric-hosts mitte lahendada hostinimesid\n"
+
+-#: ../netstat.c:1488
+-msgid " --numeric-ports dont resolve port names\n"
++#: ../netstat.c:1493
++msgid " --numeric-ports don't resolve port names\n"
+ msgstr " --numeric-ports mitte lahendada pordinimesid\n"
+
+-#: ../netstat.c:1489
+-msgid " --numeric-users dont resolve user names\n"
++#: ../netstat.c:1494
++msgid " --numeric-users don't resolve user names\n"
+ msgstr " --numeric-users mitte lahendada kasutajanimesid\n"
+
+-#: ../netstat.c:1490
++#: ../netstat.c:1495
+ msgid " -N, --symbolic resolve hardware names\n"
+ msgstr " -N, --symbolic lahendada riistvara aadressid\n"
+
+-#: ../netstat.c:1491 ../route.c:87
++#: ../netstat.c:1496 ../route.c:88
+ msgid " -e, --extend display other/more information\n"
+ msgstr " -e, --extend muu info/lisainfo näitamine\n"
+
+-#: ../netstat.c:1492
++#: ../netstat.c:1497
+ msgid " -p, --programs display PID/Program name for sockets\n"
+ msgstr ""
+ " -p, --programs soklite kohta PID/protsessi nime näitamine\n"
+
+-#: ../netstat.c:1493
++#: ../netstat.c:1498
+ msgid ""
+ " -c, --continuous continuous listing\n"
+ "\n"
+@@ -949,22 +957,22 @@ msgstr ""
+ " -c, --continuous pidevalt uuenev nimekiri\n"
+ "\n"
+
+-#: ../netstat.c:1494
++#: ../netstat.c:1499
+ msgid " -l, --listening display listening server sockets\n"
+ msgstr " -l, --listening kuulavate serversoklite näitamine\n"
+
+-#: ../netstat.c:1495
++#: ../netstat.c:1500
+ msgid ""
+ " -a, --all, --listening display all sockets (default: connected)\n"
+ msgstr ""
+ " -a, --all, --listening kõigi soklite näitamine (vaikimisi "
+ "ühendatud)\n"
+
+-#: ../netstat.c:1496
++#: ../netstat.c:1501
+ msgid " -o, --timers display timers\n"
+ msgstr " -o, --timers taimerite näitamine\n"
+
+-#: ../netstat.c:1497 ../route.c:88
++#: ../netstat.c:1502 ../route.c:89
+ msgid ""
+ " -F, --fib display Forwarding Information Base "
+ "(default)\n"
+@@ -972,7 +980,7 @@ msgstr ""
+ " -F, --fib üldiste ruutingutabelite näitamine "
+ "(vaikimisi)\n"
+
+-#: ../netstat.c:1498 ../route.c:89
++#: ../netstat.c:1503 ../route.c:90
+ msgid ""
+ " -C, --cache display routing cache instead of FIB\n"
+ "\n"
+@@ -981,7 +989,7 @@ msgstr ""
+ "näitamine\n"
+ "\n"
+
+-#: ../netstat.c:1500
++#: ../netstat.c:1505
+ msgid ""
+ " <Socket>={-t|--tcp} {-u|--udp} {-w|--raw} {-x|--unix} --ax25 --ipx "
+ "--netrom\n"
+@@ -989,20 +997,19 @@ msgstr ""
+ " <Sokkel>={-t|--tcp} {-u|--udp} {-w|--raw} {-x|--unix} --ax25 --ipx "
+ "--netrom\n"
+
+-#: ../netstat.c:1501 ../route.c:91
+-#, c-format
+-msgid " <AF>=Use '-A <af>' or '--<af>' Default: %s\n"
+-msgstr " <AF>=kasutage '-A <af>' või '--<af>' vaikimisi: %s\n"
++#: ../netstat.c:1506 ../route.c:92
++msgid " <AF>=Use '-A <af>' or '--<af>'; default: %s\n"
++msgstr " <AF>=kasutage '-A <af>' või '--<af>'; vaikimisi: %s\n"
+
+-#: ../netstat.c:1502 ../route.c:92
++#: ../netstat.c:1507 ../route.c:93
+ msgid " List of possible address families (which support routing):\n"
+ msgstr " Võimalike ruutingu toetavate aadressiperekondade nimekiri:\n"
+
+-#: ../netstat.c:1726
++#: ../netstat.c:1732
+ msgid "Active Internet connections "
+ msgstr "Aktiivsed internetiühendused "
+
+-#: ../netstat.c:1736
++#: ../netstat.c:1742
+ msgid ""
+ "\n"
+ "Proto Recv-Q Send-Q Local Address Foreign Address State "
+@@ -1012,77 +1019,77 @@ msgstr ""
+ "Proto VvJrk SaatJrk Kohalik aadress Väline aadress Olek "
+ " "
+
+-#: ../netstat.c:1738
++#: ../netstat.c:1744
+ msgid " User Inode "
+ msgstr " Kasutaja I-kirje "
+
+-#: ../netstat.c:1741
++#: ../netstat.c:1747
+ msgid " Timer"
+ msgstr " Taimer"
+
+-#: ../netstat.c:1771
++#: ../netstat.c:1777
+ msgid "IPv4 Group Memberships\n"
+ msgstr "IPv4 grupikuuluvused\n"
+
+-#: ../netstat.c:1772
++#: ../netstat.c:1778
+ msgid "Interface RefCnt Group\n"
+ msgstr "Liides Mitu Grupp\n"
+
+-#: ../rarp.c:43
++#: ../rarp.c:44
+ msgid "This kernel does not support RARP.\n"
+ msgstr "rarp: tuum ei toeta RARP'i\n"
+
+-#: ../rarp.c:82
++#: ../rarp.c:83
+ #, c-format
+ msgid "no RARP entry for %s.\n"
+ msgstr "rarp: %s jaoks pole RARP kirjet\n"
+
+-#: ../rarp.c:95
++#: ../rarp.c:96
+ #, c-format
+ msgid "%s: bad hardware address\n"
+ msgstr "rarp: vigane riistvaraline aadress %s\n"
+
+-#: ../rarp.c:127
++#: ../rarp.c:128
+ #, c-format
+ msgid "rarp: cannot open file %s:%s.\n"
+ msgstr "rarp: ei saa avada faili %s:%s\n"
+
+-#: ../rarp.c:139
++#: ../rarp.c:140
+ #, c-format
+ msgid "rarp: format error at %s:%u\n"
+ msgstr "rarp: vorminguviga failis %s real %u\n"
+
+-#: ../rarp.c:143 ../rarp.c:287
++#: ../rarp.c:144 ../rarp.c:289
+ #, c-format
+ msgid "rarp: %s: unknown host\n"
+ msgstr "rarp: tundmatu host %s\n"
+
+-#: ../rarp.c:146
++#: ../rarp.c:147
+ #, c-format
+ msgid "rarp: cannot set entry from %s:%u\n"
+ msgstr "rarp: ei saa kehtestada kirjet failist %s realt %u\n"
+
+-#: ../rarp.c:175
++#: ../rarp.c:176
+ msgid "Usage: rarp -a list entries in cache.\n"
+ msgstr ""
+ "Kasutamine:\n"
+ " rarp -a puhvris olevate kirjete vaatamine\n"
+
+-#: ../rarp.c:176
++#: ../rarp.c:177
+ msgid " rarp -d <hostname> delete entry from cache.\n"
+ msgstr " rarp -d <hosti nimi> kirje kustutamine puhvrist\n"
+
+-#: ../rarp.c:177
++#: ../rarp.c:178
+ msgid " rarp [<HW>] -s <hostname> <hwaddr> add entry to cache.\n"
+ msgstr " rarp [<HW>] -s <hosti nimi> <hwaddr> kirje lisamine puhvrisse\n"
+
+-#: ../rarp.c:178
++#: ../rarp.c:179
+ msgid ""
+ " rarp -f add entries from /etc/ethers.\n"
+ msgstr ""
+ " rarp -f kirjete lisamine failist /etc/ethers\n"
+
+-#: ../rarp.c:179
++#: ../rarp.c:180
+ msgid ""
+ " rarp -V display program version.\n"
+ "\n"
+@@ -1090,24 +1097,24 @@ msgstr ""
+ " rarp -V programmi versiooni näitamine\n"
+ "\n"
+
+-#: ../rarp.c:236
++#: ../rarp.c:238
+ #, c-format
+ msgid "%s: illegal option mix.\n"
+ msgstr "%s: lubamatu võtmete kombinatsioon\n"
+
+-#: ../rarp.c:267
++#: ../rarp.c:269
+ #, c-format
+ msgid "rarp: %s: unknown hardware type.\n"
+ msgstr "rarp: tundmatu riistvara tüüp %s\n"
+
+-#: ../route.c:79
++#: ../route.c:80
+ msgid ""
+ "Usage: route [-nNvee] [-FC] [<AF>] List kernel routing tables\n"
+ msgstr ""
+ "Kasutamine:\n"
+ " route [-nNvee] [-FC] [<AF>] Tuuma ruutingutabeli näitamine\n"
+
+-#: ../route.c:80
++#: ../route.c:81
+ msgid ""
+ " route [-v] [-FC] {add|del|flush} ... Modify routing table for AF.\n"
+ "\n"
+@@ -1115,7 +1122,7 @@ msgstr ""
+ " route [-v] [-FC] {add|del|flush} ... Tuuma ruutingutabeli muutmine\n"
+ "\n"
+
+-#: ../route.c:82
++#: ../route.c:83
+ msgid ""
+ " route {-h|--help} [<AF>] Detailed usage syntax for "
+ "specified AF.\n"
+@@ -1123,7 +1130,7 @@ msgstr ""
+ " route {-h|--help} [<AF>] Detailne süntaks perekonna AF "
+ "jaoks\n"
+
+-#: ../route.c:83
++#: ../route.c:84
+ msgid ""
+ " route {-V|--version} Display version/author and "
+ "exit.\n"
+@@ -1149,25 +1156,25 @@ msgstr " plipconfig -V | --version\n"
+ msgid "%s\tnibble %lu trigger %lu\n"
+ msgstr "%s\tnibble %lu trigger %lu\n"
+
+-#: ../iptunnel.c:84
++#: ../iptunnel.c:85
+ msgid "Usage: iptunnel { add | change | del | show } [ NAME ]\n"
+ msgstr "Kasutamine: iptunnel { add | change | del | show } [ NIMI ]\n"
+
+-#: ../iptunnel.c:85
++#: ../iptunnel.c:86
+ msgid ""
+ " [ mode { ipip | gre | sit } ] [ remote ADDR ] [ local ADDR ]\n"
+ msgstr ""
+ " [ mode { ipip | gre | sit } ] [ remote AADR ] [ local AADR ]\n"
+
+-#: ../iptunnel.c:86
++#: ../iptunnel.c:87
+ msgid " [ [i|o]seq ] [ [i|o]key KEY ] [ [i|o]csum ]\n"
+ msgstr " [ [i|o]seq ] [ [i|o]key KEY ] [ [i|o]csum ]\n"
+
+-#: ../iptunnel.c:87
++#: ../iptunnel.c:88
+ msgid " [ ttl TTL ] [ tos TOS ] [ nopmtudisc ] [ dev PHYS_DEV ]\n"
+ msgstr " [ ttl TTL ] [ tos TOS ] [ nopmtudisc ] [ dev LIIDES ]\n"
+
+-#: ../iptunnel.c:88
++#: ../iptunnel.c:89
+ msgid ""
+ " iptunnel -V | --version\n"
+ "\n"
+@@ -1175,83 +1182,83 @@ msgstr ""
+ " iptunnel -V | --version\n"
+ "\n"
+
+-#: ../iptunnel.c:89
++#: ../iptunnel.c:90
+ msgid "Where: NAME := STRING\n"
+ msgstr "Kus: NIMI := STRING\n"
+
+-#: ../iptunnel.c:90
++#: ../iptunnel.c:91
+ msgid " ADDR := { IP_ADDRESS | any }\n"
+ msgstr " AADR := { IP_AADRESS | any }\n"
+
+-#: ../iptunnel.c:91
++#: ../iptunnel.c:92
+ msgid " TOS := { NUMBER | inherit }\n"
+ msgstr " TOS := { ARV | inherit }\n"
+
+-#: ../iptunnel.c:92
++#: ../iptunnel.c:93
+ msgid " TTL := { 1..255 | inherit }\n"
+ msgstr " TTL := { 1..255 | inherit }\n"
+
+-#: ../iptunnel.c:93
++#: ../iptunnel.c:94
+ msgid " KEY := { DOTTED_QUAD | NUMBER }\n"
+ msgstr ""
+ " KEY := { PUNKTIDEGA_ARVUNELIK | ARV }\n"
+ " LIIDES := FÜÜSILISE_LIIDESE_NIMI\n"
+
+-#: ../iptunnel.c:331
++#: ../iptunnel.c:332
+ msgid "Keys are not allowed with ipip and sit.\n"
+ msgstr "ipip ja sit juures ei ole võtmed lubatud\n"
+
+-#: ../iptunnel.c:351
++#: ../iptunnel.c:352
+ msgid "Broadcast tunnel requires a source address.\n"
+ msgstr "Leviedastusega tunnel vajab lähteaadressi\n"
+
+-#: ../iptunnel.c:366
++#: ../iptunnel.c:367
+ msgid "ttl != 0 and noptmudisc are incompatible\n"
+ msgstr "ttl != 0 ning noptmudisc ei sobi kokku\n"
+
+-#: ../iptunnel.c:378
++#: ../iptunnel.c:379
+ msgid "cannot determine tunnel mode (ipip, gre or sit)\n"
+ msgstr "Ei suuda määrata tunneli moodi (ipip, gre või sit)\n"
+
+-#: ../iptunnel.c:416
++#: ../iptunnel.c:417
+ #, c-format
+ msgid "%s: %s/ip remote %s local %s "
+ msgstr "%s: %s/ip teises otsas %s siin %s "
+
+-#: ../iptunnel.c:420
++#: ../iptunnel.c:421
+ msgid "unknown"
+ msgstr "tundmatu"
+
+-#: ../iptunnel.c:452
++#: ../iptunnel.c:453
+ msgid " Drop packets out of sequence.\n"
+ msgstr " Järjekorravälised paketid visatakse minema\n"
+
+-#: ../iptunnel.c:454
++#: ../iptunnel.c:455
+ msgid " Checksum in received packet is required.\n"
+ msgstr " Vastuvõetavates pakettides on kontrollsumma kohustuslik\n"
+
+-#: ../iptunnel.c:456
++#: ../iptunnel.c:457
+ msgid " Sequence packets on output.\n"
+ msgstr " Väljuvad paketid varustatakse järjekorranumbritega\n"
+
+-#: ../iptunnel.c:458
++#: ../iptunnel.c:459
+ msgid " Checksum output packets.\n"
+ msgstr " Väljuvad paketid varustatakse kontrollsummaga\n"
+
+-#: ../iptunnel.c:486
++#: ../iptunnel.c:487
+ msgid "Wrong format of /proc/net/dev. Sorry.\n"
+ msgstr "/proc/net/dev on vales formaadis. Vale tuuma versioon?\n"
+
+-#: ../iptunnel.c:499
++#: ../iptunnel.c:500
+ #, c-format
+ msgid "Failed to get type of [%s]\n"
+ msgstr "Ei suutnud kindlaks teha liidese %s tüüpi\n"
+
+-#: ../iptunnel.c:515
++#: ../iptunnel.c:516
+ msgid "RX: Packets Bytes Errors CsumErrs OutOfSeq Mcasts\n"
+ msgstr "RX: Pakette Baite Vigu KSumVigu JrkVigu Levipakette\n"
+
+-#: ../iptunnel.c:518
++#: ../iptunnel.c:519
+ msgid "TX: Packets Bytes Errors DeadLoop NoRoute NoBufs\n"
+ msgstr "TX: Pakette Baite Vigu DeadLoop EiRuudi MäluOtsas\n"
+
+@@ -1972,15 +1979,15 @@ msgstr "rresolve: toetuseta aadressiperekond %d\n"
+ msgid "[UNKNOWN]"
+ msgstr "[TUNDMATU]"
+
+-#: ../lib/inet6_gr.c:79
++#: ../lib/inet6_gr.c:71
+ msgid "INET6 (IPv6) not configured in this system.\n"
+ msgstr "INET6 (IPv6) pole antud süsteemis konfigureeritud\n"
+
+-#: ../lib/inet6_gr.c:82
++#: ../lib/inet6_gr.c:74
+ msgid "Kernel IPv6 routing table\n"
+ msgstr "Tuuma IPv6 ruutingutabel\n"
+
+-#: ../lib/inet6_gr.c:84
++#: ../lib/inet6_gr.c:76
+ msgid ""
+ "Destination Next Hop "
+ " Flags Metric Ref Use Iface\n"
+@@ -1988,11 +1995,11 @@ msgstr ""
+ "Sihtpunkt Järgmine samm "
+ " Lipud Meetr Mitu Kasut Liides\n"
+
+-#: ../lib/inet6_gr.c:158
++#: ../lib/inet6_gr.c:150
+ msgid "Kernel IPv6 Neighbour Cache\n"
+ msgstr "Tuuma IPv6 naabrite puhver\n"
+
+-#: ../lib/inet6_gr.c:161
++#: ../lib/inet6_gr.c:153
+ msgid ""
+ "Neighbour HW Address Iface Flags "
+ "Ref State\n"
+@@ -2000,7 +2007,7 @@ msgstr ""
+ "Naaber HW Aadress Liides Lipud "
+ "Mitu Olek\n"
+
+-#: ../lib/inet6_gr.c:165
++#: ../lib/inet6_gr.c:157
+ msgid ""
+ "Neighbour HW Address Iface Flags "
+ "Ref State Stale(sec) Delete(sec)\n"
+@@ -2538,29 +2545,29 @@ msgstr "iptunnel: %s on vigane IPv4 aadress\n"
+ msgid "ip: argument is wrong: %s\n"
+ msgstr "iptunnel: vale argument %s\n"
+
+-#: ../ipmaddr.c:58
++#: ../ipmaddr.c:61
+ msgid "Usage: ipmaddr [ add | del ] MULTIADDR dev STRING\n"
+ msgstr "Kasutamine: ipmaddr [ add | del ] MULTIAADR dev STRING\n"
+
+-#: ../ipmaddr.c:59
++#: ../ipmaddr.c:62
+ msgid " ipmaddr show [ dev STRING ] [ ipv4 | ipv6 | link | all ]\n"
+ msgstr " ipmaddr show [ dev STRING ] [ ipv4 | ipv6 | link | all ]\n"
+
+-#: ../ipmaddr.c:60
++#: ../ipmaddr.c:63
+ msgid " ipmaddr -V | -version\n"
+ msgstr " ipmaddr -V | -version\n"
+
+-#: ../ipmaddr.c:260
++#: ../ipmaddr.c:263
+ #, c-format
+ msgid "family %d "
+ msgstr "perekond %d "
+
+-#: ../ipmaddr.c:269
++#: ../ipmaddr.c:272
+ #, c-format
+ msgid " users %d"
+ msgstr " kasutajaid %d"
+
+-#: ../ipmaddr.c:355
++#: ../ipmaddr.c:358
+ msgid "Cannot create socket"
+ msgstr "Ei saa avada soklit"
+
+diff --git a/po/fr.po b/po/fr.po
+index e8e7542..d021e0f 100644
+--- a/po/fr.po
++++ b/po/fr.po
+@@ -9,7 +9,7 @@ msgstr ""
+ "Last-Translator: J.M.Vansteene <vanstee@worldnet.fr>\n"
+ "Language-Team:\n"
+ "MIME-Version: 1.0\n"
+-"Content-Type: text/plain; charset=iso8859-1\n"
++"Content-Type: text/plain; charset=iso-8859-1\n"
+ "Content-Transfer-Encoding: 8bit\n"
+
+ #: ../arp.c:110 ../arp.c:269
+diff --git a/po/net-tools.pot b/po/net-tools.pot
+index 0231aac..cdeccc9 100644
+--- a/po/net-tools.pot
++++ b/po/net-tools.pot
+@@ -1,263 +1,285 @@
+ # SOME DESCRIPTIVE TITLE.
+-# Copyright (C) YEAR Free Software Foundation, Inc.
++# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
++# This file is distributed under the same license as the PACKAGE package.
+ # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+ #
+ #, fuzzy
+ msgid ""
+ msgstr ""
+ "Project-Id-Version: PACKAGE VERSION\n"
+-"POT-Creation-Date: 2001-04-15 15:40+0100\n"
++"Report-Msgid-Bugs-To: \n"
++"POT-Creation-Date: 2005-05-16 05:18+0200\n"
+ "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+ "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+ "Language-Team: LANGUAGE <LL@li.org>\n"
+ "MIME-Version: 1.0\n"
+ "Content-Type: text/plain; charset=CHARSET\n"
+-"Content-Transfer-Encoding: ENCODING\n"
++"Content-Transfer-Encoding: 8bit\n"
+
+-#: ../arp.c:111 ../arp.c:270
++#: ../arp.c:111 ../arp.c:276
++#, c-format
+ msgid "arp: need host name\n"
+ msgstr ""
+
+-#: ../arp.c:208 ../arp.c:222
++#: ../arp.c:213 ../arp.c:228
+ #, c-format
+ msgid "No ARP entry for %s\n"
+ msgstr ""
+
+-#: ../arp.c:240
++#: ../arp.c:246
+ #, c-format
+ msgid "arp: cant get HW-Address for `%s': %s.\n"
+ msgstr ""
+
+-#: ../arp.c:244
++#: ../arp.c:250
++#, c-format
+ msgid "arp: protocol type mismatch.\n"
+ msgstr ""
+
+-#: ../arp.c:253
++#: ../arp.c:259
+ #, c-format
+ msgid "arp: device `%s' has HW address %s `%s'.\n"
+ msgstr ""
+
+-#: ../arp.c:283
++#: ../arp.c:289
++#, c-format
+ msgid "arp: need hardware address\n"
+ msgstr ""
+
+-#: ../arp.c:291
++#: ../arp.c:297
++#, c-format
+ msgid "arp: invalid hardware address\n"
+ msgstr ""
+
+-#: ../arp.c:388
++#: ../arp.c:394
+ #, c-format
+ msgid "arp: cannot open etherfile %s !\n"
+ msgstr ""
+
+-#: ../arp.c:404
++#: ../arp.c:410
+ #, c-format
+ msgid "arp: format error on line %u of etherfile %s !\n"
+ msgstr ""
+
+-#: ../arp.c:417
++#: ../arp.c:423
+ #, c-format
+ msgid "arp: cannot set entry on line %u of etherfile %s !\n"
+ msgstr ""
+
+-#: ../arp.c:438
++#: ../arp.c:444
++#, c-format
+ msgid ""
+ "Address HWtype HWaddress Flags Mask "
+ "Iface\n"
+ msgstr ""
+
+-#: ../arp.c:468
++#: ../arp.c:472
++msgid "<from_interface>"
++msgstr ""
++
++#: ../arp.c:474
+ msgid "(incomplete)"
+ msgstr ""
+
+-#: ../arp.c:485
++#: ../arp.c:491
+ #, c-format
+ msgid "%s (%s) at "
+ msgstr ""
+
+-#: ../arp.c:491
++#: ../arp.c:497
++#, c-format
+ msgid "<incomplete> "
+ msgstr ""
+
+-#: ../arp.c:497
++#: ../arp.c:503
+ #, c-format
+ msgid "netmask %s "
+ msgstr ""
+
+-#: ../arp.c:514
++#: ../arp.c:520
+ #, c-format
+ msgid "on %s\n"
+ msgstr ""
+
+-#: ../arp.c:593
++#: ../arp.c:599
+ #, c-format
+ msgid "Entries: %d\tSkipped: %d\tFound: %d\n"
+ msgstr ""
+
+-#: ../arp.c:597
++#: ../arp.c:603
+ #, c-format
+ msgid "%s (%s) -- no entry\n"
+ msgstr ""
+
+-#: ../arp.c:599
++#: ../arp.c:605
+ #, c-format
+ msgid "arp: in %d entries no match found.\n"
+ msgstr ""
+
+-#: ../arp.c:614
++#: ../arp.c:620
++#, c-format
+ msgid ""
+ "Usage:\n"
+ " arp [-vn] [<HW>] [-i <if>] [-a] [<hostname>] <-Display ARP "
+ "cache\n"
+ msgstr ""
+
+-#: ../arp.c:615
++#: ../arp.c:621
++#, c-format
+ msgid ""
+ " arp [-v] [-i <if>] -d <hostname> [pub][nopub] <-Delete ARP "
+ "entry\n"
+ msgstr ""
+
+-#: ../arp.c:616
++#: ../arp.c:622
++#, c-format
+ msgid ""
+-" arp [-vnD] [<HW>] [-i <if>] -f [<filename>] <-Add entry from "
++" arp [-vnD] [<HW>] [-i <if>] -f [<filename>] <-Add entry from "
+ "file\n"
+ msgstr ""
+
+-#: ../arp.c:617
++#: ../arp.c:623
++#, c-format
+ msgid ""
+ " arp [-v] [<HW>] [-i <if>] -s <hostname> <hwaddr> [temp][nopub] <-Add "
+ "entry\n"
+ msgstr ""
+
+-#: ../arp.c:618
+-msgid ""
+-" arp [-v] [<HW>] [-i <if>] -s <hostname> <hwaddr> [netmask <nm>] pub "
+-"<-''-\n"
+-msgstr ""
+-
+-#: ../arp.c:619
++#: ../arp.c:624
++#, c-format
+ msgid ""
+ " arp [-v] [<HW>] [-i <if>] -Ds <hostname> <if> [netmask <nm>] pub "
+ "<-''-\n"
+ "\n"
+ msgstr ""
+
+-#: ../arp.c:621
++#: ../arp.c:626
++#, c-format
+ msgid ""
+ " -a display (all) hosts in alternative (BSD) "
+ "style\n"
+ msgstr ""
+
+-#: ../arp.c:622
++#: ../arp.c:627
++#, c-format
+ msgid " -s, --set set a new ARP entry\n"
+ msgstr ""
+
+-#: ../arp.c:623
++#: ../arp.c:628
++#, c-format
+ msgid " -d, --delete delete a specified entry\n"
+ msgstr ""
+
+-#: ../arp.c:624 ../netstat.c:1490 ../route.c:86
++#: ../arp.c:629 ../netstat.c:1503 ../route.c:86
++#, c-format
+ msgid " -v, --verbose be verbose\n"
+ msgstr ""
+
+-#: ../arp.c:625 ../netstat.c:1491 ../route.c:87
++#: ../arp.c:630 ../netstat.c:1504 ../route.c:87
++#, c-format
+ msgid " -n, --numeric don't resolve names\n"
+ msgstr ""
+
+-#: ../arp.c:626
++#: ../arp.c:631
++#, c-format
+ msgid ""
+ " -i, --device specify network interface (e.g. eth0)\n"
+ msgstr ""
+
+-#: ../arp.c:627
++#: ../arp.c:632
++#, c-format
+ msgid " -D, --use-device read <hwaddr> from given device\n"
+ msgstr ""
+
+-#: ../arp.c:628
++#: ../arp.c:633
++#, c-format
+ msgid " -A, -p, --protocol specify protocol family\n"
+ msgstr ""
+
+-#: ../arp.c:629
++#: ../arp.c:634
++#, c-format
+ msgid ""
+-" -f, --file read new entries from file or from "
+-"/etc/ethers\n"
++" -f, --file read new entries from file or from /etc/"
++"ethers\n"
+ "\n"
+ msgstr ""
+
+-#: ../arp.c:631 ../rarp.c:182
++#: ../arp.c:636 ../rarp.c:182
+ #, c-format
+ msgid " <HW>=Use '-H <hw>' to specify hardware address type. Default: %s\n"
+ msgstr ""
+
+-#: ../arp.c:632 ../rarp.c:183
++#: ../arp.c:637 ../rarp.c:183
++#, c-format
+ msgid " List of possible hardware types (which support ARP):\n"
+ msgstr ""
+
+-#: ../arp.c:666 ../arp.c:751
++#: ../arp.c:671 ../arp.c:756
+ #, c-format
+ msgid "%s: hardware type not supported!\n"
+ msgstr ""
+
+-#: ../arp.c:670
++#: ../arp.c:675
+ #, c-format
+ msgid "%s: address family not supported!\n"
+ msgstr ""
+
+-#: ../arp.c:705
++#: ../arp.c:710
++#, c-format
+ msgid "arp: -N not yet supported.\n"
+ msgstr ""
+
+-#: ../arp.c:715
++#: ../arp.c:720
+ #, c-format
+ msgid "arp: %s: unknown address family.\n"
+ msgstr ""
+
+-#: ../arp.c:724
++#: ../arp.c:729
+ #, c-format
+ msgid "arp: %s: unknown hardware type.\n"
+ msgstr ""
+
+-#: ../arp.c:743
++#: ../arp.c:748
+ #, c-format
+ msgid "arp: %s: kernel only supports 'inet'.\n"
+ msgstr ""
+
+-#: ../arp.c:756
++#: ../arp.c:761
+ #, c-format
+ msgid "arp: %s: hardware type without ARP support.\n"
+ msgstr ""
+
+-#: ../hostname.c:70
++#: ../hostname.c:71
+ #, c-format
+ msgid "Setting nodename to `%s'\n"
+ msgstr ""
+
+-#: ../hostname.c:75
++#: ../hostname.c:76
+ #, c-format
+ msgid "%s: you must be root to change the node name\n"
+ msgstr ""
+
+-#: ../hostname.c:78 ../hostname.c:98 ../hostname.c:117
++#: ../hostname.c:79 ../hostname.c:100 ../hostname.c:118
+ #, c-format
+ msgid "%s: name too long\n"
+ msgstr ""
+
+-#: ../hostname.c:90
++#: ../hostname.c:92
+ #, c-format
+ msgid "Setting hostname to `%s'\n"
+ msgstr ""
+
+-#: ../hostname.c:95
++#: ../hostname.c:97
+ #, c-format
+ msgid "%s: you must be root to change the host name\n"
+ msgstr ""
+
+-#: ../hostname.c:109
++#: ../hostname.c:110
+ #, c-format
+ msgid "Setting domainname to `%s'\n"
+ msgstr ""
+
+-#: ../hostname.c:114
++#: ../hostname.c:115
+ #, c-format
+ msgid "%s: you must be root to change the domain name\n"
+ msgstr ""
+@@ -282,83 +304,99 @@ msgstr ""
+ msgid "Result: h_addr_list=`%s'\n"
+ msgstr ""
+
+-#: ../hostname.c:210
++#: ../hostname.c:209
+ #, c-format
+ msgid "%s: can't open `%s'\n"
+ msgstr ""
+
+-#: ../hostname.c:224
++#: ../hostname.c:223
++#, c-format
+ msgid "Usage: hostname [-v] {hostname|-F file} set hostname (from file)\n"
+ msgstr ""
+
+-#: ../hostname.c:225
++#: ../hostname.c:224
++#, c-format
+ msgid ""
+ " domainname [-v] {nisdomain|-F file} set NIS domainname (from file)\n"
+ msgstr ""
+
+-#: ../hostname.c:227
++#: ../hostname.c:226
++#, c-format
+ msgid ""
+ " nodename [-v] {nodename|-F file} set DECnet node name (from "
+ "file)\n"
+ msgstr ""
+
+-#: ../hostname.c:229
++#: ../hostname.c:228
++#, c-format
+ msgid " hostname [-v] [-d|-f|-s|-a|-i|-y|-n] display formatted name\n"
+ msgstr ""
+
+-#: ../hostname.c:230
++#: ../hostname.c:229
++#, c-format
+ msgid ""
+ " hostname [-v] display hostname\n"
+ "\n"
+ msgstr ""
+
+-#: ../hostname.c:231
++#: ../hostname.c:230
++#, c-format
+ msgid ""
+ " hostname -V|--version|-h|--help print info and exit\n"
+ "\n"
+ msgstr ""
+
+-#: ../hostname.c:232
++#: ../hostname.c:231
++#, c-format
+ msgid ""
+ " dnsdomainname=hostname -d, {yp,nis,}domainname=hostname -y\n"
+ "\n"
+ msgstr ""
+
+-#: ../hostname.c:233
++#: ../hostname.c:232
++#, c-format
+ msgid " -s, --short short host name\n"
+ msgstr ""
+
+-#: ../hostname.c:234
++#: ../hostname.c:233
++#, c-format
+ msgid " -a, --alias alias names\n"
+ msgstr ""
+
+-#: ../hostname.c:235
++#: ../hostname.c:234
++#, c-format
+ msgid " -i, --ip-address addresses for the hostname\n"
+ msgstr ""
+
+-#: ../hostname.c:236
++#: ../hostname.c:235
++#, c-format
+ msgid " -f, --fqdn, --long long host name (FQDN)\n"
+ msgstr ""
+
+-#: ../hostname.c:237
++#: ../hostname.c:236
++#, c-format
+ msgid " -d, --domain DNS domain name\n"
+ msgstr ""
+
+-#: ../hostname.c:238
++#: ../hostname.c:237
++#, c-format
+ msgid " -y, --yp, --nis NIS/YP domainname\n"
+ msgstr ""
+
+-#: ../hostname.c:240
++#: ../hostname.c:239
++#, c-format
+ msgid " -n, --node DECnet node name\n"
+ msgstr ""
+
+-#: ../hostname.c:242
++#: ../hostname.c:241
++#, c-format
+ msgid ""
+ " -F, --file read hostname or NIS domainname from given file\n"
+ "\n"
+ msgstr ""
+
+-#: ../hostname.c:244
++#: ../hostname.c:243
++#, c-format
+ msgid ""
+ " This command can read or set the hostname or the NIS domainname. You can\n"
+ " also read the DNS domain or the FQDN (fully qualified domain name).\n"
+@@ -373,12 +411,14 @@ msgid "%s: You can't change the DNS domain name with this command\n"
+ msgstr ""
+
+ #: ../hostname.c:341
++#, c-format
+ msgid ""
+ "\n"
+ "Unless you are using bind or NIS for host lookups you can change the DNS\n"
+ msgstr ""
+
+ #: ../hostname.c:342
++#, c-format
+ msgid "domain name (which is part of the FQDN) in the /etc/hosts file.\n"
+ msgstr ""
+
+@@ -397,557 +437,697 @@ msgstr ""
+ msgid "getnodename()=`%s'\n"
+ msgstr ""
+
+-#: ../ifconfig.c:108
++#: ../ifconfig.c:107 ../netstat.c:1465
++#, c-format
+ msgid ""
+-"Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR "
++"Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR "
+ "Flg\n"
+ msgstr ""
+
+-#: ../ifconfig.c:130 ../ifconfig.c:162
++#: ../ifconfig.c:129 ../ifconfig.c:161
+ #, c-format
+-msgid "%s: unknown interface: %s\n"
++msgid "%s: ERROR while getting interface flags: %s\n"
+ msgstr ""
+
+-#: ../ifconfig.c:154 ../ifconfig.c:734 ../ifconfig.c:825 ../ifconfig.c:936
++#: ../ifconfig.c:153 ../ifconfig.c:185 ../ifconfig.c:791 ../ifconfig.c:884
++#: ../ifconfig.c:997
++#, c-format
+ msgid "No support for INET on this system.\n"
+ msgstr ""
+
+-#: ../ifconfig.c:177
++#: ../ifconfig.c:193
++#, c-format
++msgid "%s: ERROR while testing interface flags: %s\n"
++msgstr ""
++
++#: ../ifconfig.c:202
++#, c-format
+ msgid ""
+ "Usage:\n"
+-" ifconfig [-a] [-i] [-v] [-s] <interface> [[<AF>] <address>]\n"
++" ifconfig [-a] [-v] [-s] <interface> [[<AF>] <address>]\n"
+ msgstr ""
+
+-#: ../ifconfig.c:179
++#: ../ifconfig.c:204
++#, c-format
+ msgid " [add <address>[/<prefixlen>]]\n"
+ msgstr ""
+
+-#: ../ifconfig.c:180
++#: ../ifconfig.c:205
++#, c-format
+ msgid " [del <address>[/<prefixlen>]]\n"
+ msgstr ""
+
+-#: ../ifconfig.c:181
++#: ../ifconfig.c:206
++#, c-format
+ msgid " [[-]broadcast [<address>]] [[-]pointopoint [<address>]]\n"
+ msgstr ""
+
+-#: ../ifconfig.c:182
++#: ../ifconfig.c:207
++#, c-format
+ msgid " [netmask <address>] [dstaddr <address>] [tunnel <address>]\n"
+ msgstr ""
+
+-#: ../ifconfig.c:185
++#: ../ifconfig.c:210
++#, c-format
+ msgid " [outfill <NN>] [keepalive <NN>]\n"
+ msgstr ""
+
+-#: ../ifconfig.c:187
++#: ../ifconfig.c:212
++#, c-format
+ msgid " [hw <HW> <address>] [metric <NN>] [mtu <NN>]\n"
+ msgstr ""
+
+-#: ../ifconfig.c:188
++#: ../ifconfig.c:213
++#, c-format
+ msgid " [[-]trailers] [[-]arp] [[-]allmulti]\n"
+ msgstr ""
+
+-#: ../ifconfig.c:189
++#: ../ifconfig.c:214
++#, c-format
+ msgid " [multicast] [[-]promisc]\n"
+ msgstr ""
+
+-#: ../ifconfig.c:190
++#: ../ifconfig.c:215
++#, c-format
+ msgid " [mem_start <NN>] [io_addr <NN>] [irq <NN>] [media <type>]\n"
+ msgstr ""
+
+-#: ../ifconfig.c:192
++#: ../ifconfig.c:217
++#, c-format
+ msgid " [txqueuelen <NN>]\n"
+ msgstr ""
+
+-#: ../ifconfig.c:195
++#: ../ifconfig.c:220
++#, c-format
+ msgid " [[-]dynamic]\n"
+ msgstr ""
+
+-#: ../ifconfig.c:197
++#: ../ifconfig.c:222
++#, c-format
+ msgid ""
+ " [up|down] ...\n"
+ "\n"
+ msgstr ""
+
+-#: ../ifconfig.c:199
++#: ../ifconfig.c:224
++#, c-format
+ msgid " <HW>=Hardware Type.\n"
+ msgstr ""
+
+-#: ../ifconfig.c:200
++#: ../ifconfig.c:225
++#, c-format
+ msgid " List of possible hardware types:\n"
+ msgstr ""
+
+ #. 1 = ARPable
+-#: ../ifconfig.c:202
++#: ../ifconfig.c:227
+ #, c-format
+ msgid " <AF>=Address family. Default: %s\n"
+ msgstr ""
+
+-#: ../ifconfig.c:203
++#: ../ifconfig.c:228
++#, c-format
+ msgid " List of possible address families:\n"
+ msgstr ""
+
+-#: ../ifconfig.c:278
++#: ../ifconfig.c:304
+ #, c-format
+ msgid "ifconfig: option `%s' not recognised.\n"
+ msgstr ""
+
+-#: ../ifconfig.c:280 ../ifconfig.c:925
++#: ../ifconfig.c:306 ../ifconfig.c:987
++#, c-format
+ msgid "ifconfig: `--help' gives usage information.\n"
+ msgstr ""
+
+-#: ../ifconfig.c:355
++#: ../ifconfig.c:381
++#, c-format
+ msgid "Unknown media type.\n"
+ msgstr ""
+
+-#: ../ifconfig.c:647
++#: ../ifconfig.c:418
++#, c-format
++msgid ""
++"Warning: Interface %s still in promisc mode... maybe other application is "
++"running?\n"
++msgstr ""
++
++#: ../ifconfig.c:430
++#, c-format
++msgid "Warning: Interface %s still in MULTICAST mode.\n"
++msgstr ""
++
++#: ../ifconfig.c:442
++#, c-format
++msgid "Warning: Interface %s still in ALLMULTI mode.\n"
++msgstr ""
++
++#: ../ifconfig.c:466
++#, c-format
++msgid "Warning: Interface %s still in DYNAMIC mode.\n"
++msgstr ""
++
++#: ../ifconfig.c:524
++#, c-format
++msgid "Warning: Interface %s still in BROADCAST mode.\n"
++msgstr ""
++
++#: ../ifconfig.c:535
++#, c-format
++msgid "ifconfig: Error resolving '%s' for broadcast\n"
++msgstr ""
++
++#: ../ifconfig.c:560
++#, c-format
++msgid "ifconfig: Error resolving '%s' for dstaddr\n"
++msgstr ""
++
++#: ../ifconfig.c:583
++#, c-format
++msgid "ifconfig: Error resolving '%s' for netmask\n"
++msgstr ""
++
++#: ../ifconfig.c:662
++#, c-format
++msgid "Warning: Interface %s still in POINTOPOINT mode.\n"
++msgstr ""
++
++#: ../ifconfig.c:673
++#, c-format
++msgid "ifconfig: Error resolving '%s' for pointopoint\n"
++msgstr ""
++
++#: ../ifconfig.c:697
+ #, c-format
+ msgid "hw address type `%s' has no handler to set address. failed.\n"
+ msgstr ""
+
+-#: ../ifconfig.c:656
++#: ../ifconfig.c:706
+ #, c-format
+ msgid "%s: invalid %s address.\n"
+ msgstr ""
+
+-#: ../ifconfig.c:700 ../ifconfig.c:790 ../ifconfig.c:876
++#: ../ifconfig.c:746
++#, c-format
++msgid "ifconfig: Error resolving '%s' for add\n"
++msgstr ""
++
++#: ../ifconfig.c:757 ../ifconfig.c:847 ../ifconfig.c:935
++#, c-format
+ msgid "No support for INET6 on this system.\n"
+ msgstr ""
+
+-#: ../ifconfig.c:743 ../ifconfig.c:834
++#: ../ifconfig.c:800 ../ifconfig.c:893
+ #, c-format
+ msgid "Interface %s not initialized\n"
+ msgstr ""
+
+-#: ../ifconfig.c:755 ../ifconfig.c:845
++#: ../ifconfig.c:812 ../ifconfig.c:904
++#, c-format
+ msgid "Bad address.\n"
+ msgstr ""
+
+-#: ../ifconfig.c:848
++#: ../ifconfig.c:907
++#, c-format
+ msgid "Address deletion not supported on this system.\n"
+ msgstr ""
+
+-#: ../ifconfig.c:920
++#: ../ifconfig.c:979
++#, c-format
+ msgid "ifconfig: Cannot set address for this protocol family.\n"
+ msgstr ""
+
+-#: ../ifconfig.c:946
++#: ../ifconfig.c:986
++#, c-format
++msgid "ifconfig: error resolving '%s' to set address for af=%s\n"
++msgstr ""
++
++#: ../ifconfig.c:1007
++#, c-format
+ msgid "No support for ECONET on this system.\n"
+ msgstr ""
+
+-#: ../ifconfig.c:954
++#: ../ifconfig.c:1015
+ #, c-format
+ msgid "Don't know how to set addresses for family %d.\n"
+ msgstr ""
+
+-#: ../netstat.c:430
++#: ../ifconfig.c:1050
++#, c-format
++msgid "WARNING: at least one error occured. (%d)\n"
++msgstr ""
++
++#: ../netstat.c:434
+ #, c-format
+ msgid ""
+ "(No info could be read for \"-p\": geteuid()=%d but you should be root.)\n"
+ msgstr ""
+
+-#: ../netstat.c:434
++#: ../netstat.c:438
++#, c-format
+ msgid ""
+ "(Not all processes could be identified, non-owned process info\n"
+ " will not be shown, you would have to be root to see it all.)\n"
+ msgstr ""
+
+-#: ../netstat.c:441 ../netstat.c:1176 ../netstat.c:1253
++#: ../netstat.c:445 ../netstat.c:1189 ../netstat.c:1266
+ msgid "LISTENING"
+ msgstr ""
+
+-#: ../netstat.c:442
++#: ../netstat.c:446
+ msgid "CONN SENT"
+ msgstr ""
+
+-#: ../netstat.c:443 ../netstat.c:1255
++#: ../netstat.c:447 ../netstat.c:1268
+ msgid "DISC SENT"
+ msgstr ""
+
+-#: ../netstat.c:444 ../netstat.c:511 ../netstat.c:894 ../netstat.c:1256
++#: ../netstat.c:448 ../netstat.c:515 ../netstat.c:904 ../netstat.c:1269
+ msgid "ESTABLISHED"
+ msgstr ""
+
+-#: ../netstat.c:466
++#: ../netstat.c:470
++#, c-format
+ msgid "Active NET/ROM sockets\n"
+ msgstr ""
+
+-#: ../netstat.c:467
++#: ../netstat.c:471
++#, c-format
+ msgid ""
+-"User Dest Source Device State Vr/Vs Send-Q "
+-"Recv-Q\n"
++"User Dest Source Device State Vr/Vs Send-Q Recv-"
++"Q\n"
+ msgstr ""
+
+-#: ../netstat.c:477 ../netstat.c:1295
++#: ../netstat.c:481 ../netstat.c:1308
+ #, c-format
+ msgid "Problem reading data from %s\n"
+ msgstr ""
+
+-#: ../netstat.c:512
++#: ../netstat.c:516
+ msgid "SYN_SENT"
+ msgstr ""
+
+-#: ../netstat.c:513
++#: ../netstat.c:517
+ msgid "SYN_RECV"
+ msgstr ""
+
+-#: ../netstat.c:514
++#: ../netstat.c:518
+ msgid "FIN_WAIT1"
+ msgstr ""
+
+-#: ../netstat.c:515
++#: ../netstat.c:519
+ msgid "FIN_WAIT2"
+ msgstr ""
+
+-#: ../netstat.c:516
++#: ../netstat.c:520
+ msgid "TIME_WAIT"
+ msgstr ""
+
+-#: ../netstat.c:517
++#: ../netstat.c:521
+ msgid "CLOSE"
+ msgstr ""
+
+-#: ../netstat.c:518
++#: ../netstat.c:522
+ msgid "CLOSE_WAIT"
+ msgstr ""
+
+-#: ../netstat.c:519
++#: ../netstat.c:523
+ msgid "LAST_ACK"
+ msgstr ""
+
+-#: ../netstat.c:520
++#: ../netstat.c:524
+ msgid "LISTEN"
+ msgstr ""
+
+-#: ../netstat.c:521
++#: ../netstat.c:525
+ msgid "CLOSING"
+ msgstr ""
+
+-#: ../netstat.c:592
++#: ../netstat.c:596
+ #, c-format
+ msgid "warning, got bogus igmp6 line %d.\n"
+ msgstr ""
+
+-#: ../netstat.c:597 ../netstat.c:635 ../netstat.c:756 ../netstat.c:888
+-#: ../netstat.c:1019 ../netstat.c:1024
++#: ../netstat.c:601 ../netstat.c:639 ../netstat.c:763 ../netstat.c:898
++#: ../netstat.c:1032 ../netstat.c:1037
+ #, c-format
+ msgid "netstat: unsupported address family %d !\n"
+ msgstr ""
+
+-#: ../netstat.c:610 ../netstat.c:615 ../netstat.c:623 ../netstat.c:630
++#: ../netstat.c:614 ../netstat.c:619 ../netstat.c:627 ../netstat.c:634
+ #, c-format
+ msgid "warning, got bogus igmp line %d.\n"
+ msgstr ""
+
+-#: ../netstat.c:673
++#: ../netstat.c:677
++#, c-format
+ msgid "Active X.25 sockets\n"
+ msgstr ""
+
+ #. IMHO, Vr/Vs is not very usefull --SF
+-#: ../netstat.c:675
++#: ../netstat.c:679
++#, c-format
+ msgid ""
+-"Dest Source Device LCI State Vr/Vs Send-Q "
+-"Recv-Q\n"
++"Dest Source Device LCI State Vr/Vs Send-Q Recv-"
++"Q\n"
+ msgstr ""
+
+-#: ../netstat.c:752
++#: ../netstat.c:759
++#, c-format
+ msgid "warning, got bogus tcp line.\n"
+ msgstr ""
+
+-#: ../netstat.c:793 ../netstat.c:943 ../netstat.c:1062
++#: ../netstat.c:800 ../netstat.c:953 ../netstat.c:1075
+ #, c-format
+ msgid "off (0.00/%ld/%d)"
+ msgstr ""
+
+-#: ../netstat.c:797
++#: ../netstat.c:804
+ #, c-format
+ msgid "on (%2.2f/%ld/%d)"
+ msgstr ""
+
+-#: ../netstat.c:802
++#: ../netstat.c:809
+ #, c-format
+ msgid "keepalive (%2.2f/%ld/%d)"
+ msgstr ""
+
+-#: ../netstat.c:807
++#: ../netstat.c:814
+ #, c-format
+ msgid "timewait (%2.2f/%ld/%d)"
+ msgstr ""
+
+-#: ../netstat.c:812 ../netstat.c:952 ../netstat.c:1072
++#: ../netstat.c:819 ../netstat.c:962 ../netstat.c:1085
+ #, c-format
+ msgid "unkn-%d (%2.2f/%ld/%d)"
+ msgstr ""
+
+-#: ../netstat.c:884
++#: ../netstat.c:894
++#, c-format
+ msgid "warning, got bogus udp line.\n"
+ msgstr ""
+
+-#: ../netstat.c:902 ../netstat.c:1162 ../netstat.c:1195
++#: ../netstat.c:912 ../netstat.c:1175 ../netstat.c:1208
+ msgid "UNKNOWN"
+ msgstr ""
+
+-#: ../netstat.c:948 ../netstat.c:1067
++#: ../netstat.c:958 ../netstat.c:1080
+ #, c-format
+ msgid "on%d (%2.2f/%ld/%d)"
+ msgstr ""
+
+-#: ../netstat.c:1033
++#: ../netstat.c:1046
++#, c-format
+ msgid "warning, got bogus raw line.\n"
+ msgstr ""
+
+-#: ../netstat.c:1115
++#: ../netstat.c:1128
++#, c-format
+ msgid "warning, got bogus unix line.\n"
+ msgstr ""
+
+-#: ../netstat.c:1142
++#: ../netstat.c:1155
+ msgid "STREAM"
+ msgstr ""
+
+-#: ../netstat.c:1146
++#: ../netstat.c:1159
+ msgid "DGRAM"
+ msgstr ""
+
+-#: ../netstat.c:1150
++#: ../netstat.c:1163
+ msgid "RAW"
+ msgstr ""
+
+-#: ../netstat.c:1154
++#: ../netstat.c:1167
+ msgid "RDM"
+ msgstr ""
+
+-#: ../netstat.c:1158
++#: ../netstat.c:1171
+ msgid "SEQPACKET"
+ msgstr ""
+
+-#: ../netstat.c:1167
++#: ../netstat.c:1180
+ msgid "FREE"
+ msgstr ""
+
+-#: ../netstat.c:1183
++#: ../netstat.c:1196
+ msgid "CONNECTING"
+ msgstr ""
+
+-#: ../netstat.c:1187
++#: ../netstat.c:1200
+ msgid "CONNECTED"
+ msgstr ""
+
+-#: ../netstat.c:1191
++#: ../netstat.c:1204
+ msgid "DISCONNECTING"
+ msgstr ""
+
+-#: ../netstat.c:1222
++#: ../netstat.c:1235
++#, c-format
+ msgid "Active UNIX domain sockets "
+ msgstr ""
+
+-#: ../netstat.c:1224 ../netstat.c:1735
++#: ../netstat.c:1237 ../netstat.c:1756
++#, c-format
+ msgid "(servers and established)"
+ msgstr ""
+
+-#: ../netstat.c:1227 ../netstat.c:1738
++#: ../netstat.c:1240 ../netstat.c:1759
++#, c-format
+ msgid "(only servers)"
+ msgstr ""
+
+-#: ../netstat.c:1229 ../netstat.c:1740
++#: ../netstat.c:1242 ../netstat.c:1761
++#, c-format
+ msgid "(w/o servers)"
+ msgstr ""
+
+-#: ../netstat.c:1232
++#: ../netstat.c:1245
++#, c-format
+ msgid ""
+ "\n"
+ "Proto RefCnt Flags Type State I-Node"
+ msgstr ""
+
+-#: ../netstat.c:1234
++#: ../netstat.c:1247
++#, c-format
+ msgid " Path\n"
+ msgstr ""
+
+-#: ../netstat.c:1254
++#: ../netstat.c:1267
+ msgid "SABM SENT"
+ msgstr ""
+
+-#: ../netstat.c:1257
++#: ../netstat.c:1270
+ msgid "RECOVERY"
+ msgstr ""
+
+-#: ../netstat.c:1271
++#: ../netstat.c:1284
++#, c-format
+ msgid "Active AX.25 sockets\n"
+ msgstr ""
+
+-#: ../netstat.c:1272
++#: ../netstat.c:1285
++#, c-format
+ msgid "Dest Source Device State Vr/Vs Send-Q Recv-Q\n"
+ msgstr ""
+
+-#: ../netstat.c:1315
++#: ../netstat.c:1328
+ #, c-format
+ msgid "problem reading data from %s\n"
+ msgstr ""
+
+-#: ../netstat.c:1366
++#: ../netstat.c:1379
++#, c-format
+ msgid ""
+ "Active IPX sockets\n"
+ "Proto Recv-Q Send-Q Local Address Foreign Address "
+ "State"
+ msgstr ""
+
+-#: ../netstat.c:1368
++#: ../netstat.c:1381
++#, c-format
+ msgid " User"
+ msgstr ""
+
+-#: ../netstat.c:1402
++#: ../netstat.c:1415
+ msgid "ESTAB"
+ msgstr ""
+
+-#: ../netstat.c:1410
++#: ../netstat.c:1423
+ msgid "UNK."
+ msgstr ""
+
+-#: ../netstat.c:1448
++#: ../netstat.c:1461
++#, c-format
+ msgid "Kernel Interface table\n"
+ msgstr ""
+
+-#: ../netstat.c:1452
+-msgid ""
+-"Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR "
+-"Flg\n"
+-msgstr ""
+-
+-#: ../netstat.c:1456
++#: ../netstat.c:1469
+ msgid "missing interface information"
+ msgstr ""
+
+-#: ../netstat.c:1479
++#: ../netstat.c:1492
++#, c-format
+ msgid ""
+-"usage: netstat [-veenNcCF] [<Af>] -r netstat "
+-"{-V|--version|-h|--help}\n"
++"usage: netstat [-veenNcCF] [<Af>] -r netstat {-V|--version|-h|--"
++"help}\n"
+ msgstr ""
+
+-#: ../netstat.c:1480
++#: ../netstat.c:1493
++#, c-format
+ msgid " netstat [-vnNcaeol] [<Socket> ...]\n"
+ msgstr ""
+
+-#: ../netstat.c:1481
++#: ../netstat.c:1494
++#, c-format
+ msgid ""
+ " netstat { [-veenNac] -i | [-cnNe] -M | -s }\n"
+ "\n"
+ msgstr ""
+
+-#: ../netstat.c:1483
++#: ../netstat.c:1496
++#, c-format
+ msgid " -r, --route display routing table\n"
+ msgstr ""
+
+-#: ../netstat.c:1484
++#: ../netstat.c:1497
++#, c-format
+ msgid " -i, --interfaces display interface table\n"
+ msgstr ""
+
+-#: ../netstat.c:1485
++#: ../netstat.c:1498
++#, c-format
+ msgid " -g, --groups display multicast group memberships\n"
+ msgstr ""
+
+-#: ../netstat.c:1486
++#: ../netstat.c:1499
++#, c-format
+ msgid ""
+ " -s, --statistics display networking statistics (like SNMP)\n"
+ msgstr ""
+
+-#: ../netstat.c:1488
++#: ../netstat.c:1501
++#, c-format
+ msgid ""
+ " -M, --masquerade display masqueraded connections\n"
+ "\n"
+ msgstr ""
+
+-#: ../netstat.c:1492
++#: ../netstat.c:1505
++#, c-format
+ msgid " --numeric-hosts don't resolve host names\n"
+ msgstr ""
+
+-#: ../netstat.c:1493
++#: ../netstat.c:1506
++#, c-format
+ msgid " --numeric-ports don't resolve port names\n"
+ msgstr ""
+
+-#: ../netstat.c:1494
++#: ../netstat.c:1507
++#, c-format
+ msgid " --numeric-users don't resolve user names\n"
+ msgstr ""
+
+-#: ../netstat.c:1495
++#: ../netstat.c:1508
++#, c-format
+ msgid " -N, --symbolic resolve hardware names\n"
+ msgstr ""
+
+-#: ../netstat.c:1496 ../route.c:88
++#: ../netstat.c:1509 ../route.c:88
++#, c-format
+ msgid " -e, --extend display other/more information\n"
+ msgstr ""
+
+-#: ../netstat.c:1497
++#: ../netstat.c:1510
++#, c-format
+ msgid " -p, --programs display PID/Program name for sockets\n"
+ msgstr ""
+
+-#: ../netstat.c:1498
++#: ../netstat.c:1511
++#, c-format
+ msgid ""
+ " -c, --continuous continuous listing\n"
+ "\n"
+ msgstr ""
+
+-#: ../netstat.c:1499
++#: ../netstat.c:1512
++#, c-format
+ msgid " -l, --listening display listening server sockets\n"
+ msgstr ""
+
+-#: ../netstat.c:1500
++#: ../netstat.c:1513
++#, c-format
+ msgid ""
+ " -a, --all, --listening display all sockets (default: connected)\n"
+ msgstr ""
+
+-#: ../netstat.c:1501
++#: ../netstat.c:1514
++#, c-format
+ msgid " -o, --timers display timers\n"
+ msgstr ""
+
+-#: ../netstat.c:1502 ../route.c:89
++#: ../netstat.c:1515 ../route.c:89
++#, c-format
+ msgid ""
+ " -F, --fib display Forwarding Information Base "
+ "(default)\n"
+ msgstr ""
+
+-#: ../netstat.c:1503 ../route.c:90
++#: ../netstat.c:1516 ../route.c:90
++#, c-format
+ msgid ""
+ " -C, --cache display routing cache instead of FIB\n"
+ "\n"
+ msgstr ""
+
+-#: ../netstat.c:1505
++#: ../netstat.c:1518
++#, c-format
+ msgid ""
+-" <Socket>={-t|--tcp} {-u|--udp} {-w|--raw} {-x|--unix} --ax25 --ipx "
+-"--netrom\n"
++" <Socket>={-t|--tcp} {-u|--udp} {-w|--raw} {-x|--unix} --ax25 --ipx --"
++"netrom\n"
+ msgstr ""
+
+-#: ../netstat.c:1506 ../route.c:92
++#: ../netstat.c:1519
+ #, c-format
+-msgid " <AF>=Use '-A <af>' or '--<af>'; default: %s\n"
++msgid " <AF>=Use '-6|-4' or '-A <af>' or '--<af>'; default: %s\n"
+ msgstr ""
+
+-#: ../netstat.c:1507 ../route.c:93
++#: ../netstat.c:1520 ../route.c:93
++#, c-format
+ msgid " List of possible address families (which support routing):\n"
+ msgstr ""
+
+-#: ../netstat.c:1732
++#: ../netstat.c:1753
++#, c-format
+ msgid "Active Internet connections "
+ msgstr ""
+
+-#: ../netstat.c:1742
++#: ../netstat.c:1763
++#, c-format
+ msgid ""
+ "\n"
+-"Proto Recv-Q Send-Q Local Address Foreign Address State "
+-" "
++"Proto Recv-Q Send-Q Local Address Foreign Address "
++"State "
+ msgstr ""
+
+-#: ../netstat.c:1744
++#: ../netstat.c:1765
++#, c-format
+ msgid " User Inode "
+ msgstr ""
+
+-#: ../netstat.c:1747
++#: ../netstat.c:1768
++#, c-format
+ msgid " Timer"
+ msgstr ""
+
+-#: ../netstat.c:1777
++#: ../netstat.c:1798
++#, c-format
+ msgid "IPv4 Group Memberships\n"
+ msgstr ""
+
+-#: ../netstat.c:1778
++#: ../netstat.c:1799
++#, c-format
+ msgid "Interface RefCnt Group\n"
+ msgstr ""
+
+@@ -986,23 +1166,28 @@ msgid "rarp: cannot set entry from %s:%u\n"
+ msgstr ""
+
+ #: ../rarp.c:176
++#, c-format
+ msgid "Usage: rarp -a list entries in cache.\n"
+ msgstr ""
+
+ #: ../rarp.c:177
++#, c-format
+ msgid " rarp -d <hostname> delete entry from cache.\n"
+ msgstr ""
+
+ #: ../rarp.c:178
++#, c-format
+ msgid " rarp [<HW>] -s <hostname> <hwaddr> add entry to cache.\n"
+ msgstr ""
+
+ #: ../rarp.c:179
++#, c-format
+ msgid ""
+ " rarp -f add entries from /etc/ethers.\n"
+ msgstr ""
+
+ #: ../rarp.c:180
++#, c-format
+ msgid ""
+ " rarp -V display program version.\n"
+ "\n"
+@@ -1019,38 +1204,50 @@ msgid "rarp: %s: unknown hardware type.\n"
+ msgstr ""
+
+ #: ../route.c:80
++#, c-format
+ msgid ""
+ "Usage: route [-nNvee] [-FC] [<AF>] List kernel routing tables\n"
+ msgstr ""
+
+ #: ../route.c:81
++#, c-format
+ msgid ""
+ " route [-v] [-FC] {add|del|flush} ... Modify routing table for AF.\n"
+ "\n"
+ msgstr ""
+
+ #: ../route.c:83
++#, c-format
+ msgid ""
+ " route {-h|--help} [<AF>] Detailed usage syntax for "
+ "specified AF.\n"
+ msgstr ""
+
+ #: ../route.c:84
++#, c-format
+ msgid ""
+ " route {-V|--version} Display version/author and "
+ "exit.\n"
+ "\n"
+ msgstr ""
+
++#: ../route.c:92
++#, c-format
++msgid " <AF>=Use '-A <af>' or '--<af>'; default: %s\n"
++msgstr ""
++
+ #: ../plipconfig.c:66
++#, c-format
+ msgid "Usage: plipconfig [-a] [-i] [-v] interface\n"
+ msgstr ""
+
+ #: ../plipconfig.c:67
++#, c-format
+ msgid " [nibble NN] [trigger NN]\n"
+ msgstr ""
+
+ #: ../plipconfig.c:68
++#, c-format
+ msgid " plipconfig -V | --version\n"
+ msgstr ""
+
+@@ -1060,61 +1257,75 @@ msgid "%s\tnibble %lu trigger %lu\n"
+ msgstr ""
+
+ #: ../iptunnel.c:85
++#, c-format
+ msgid "Usage: iptunnel { add | change | del | show } [ NAME ]\n"
+ msgstr ""
+
+ #: ../iptunnel.c:86
++#, c-format
+ msgid ""
+ " [ mode { ipip | gre | sit } ] [ remote ADDR ] [ local ADDR ]\n"
+ msgstr ""
+
+ #: ../iptunnel.c:87
++#, c-format
+ msgid " [ [i|o]seq ] [ [i|o]key KEY ] [ [i|o]csum ]\n"
+ msgstr ""
+
+ #: ../iptunnel.c:88
++#, c-format
+ msgid " [ ttl TTL ] [ tos TOS ] [ nopmtudisc ] [ dev PHYS_DEV ]\n"
+ msgstr ""
+
+ #: ../iptunnel.c:89
++#, c-format
+ msgid ""
+ " iptunnel -V | --version\n"
+ "\n"
+ msgstr ""
+
+ #: ../iptunnel.c:90
++#, c-format
+ msgid "Where: NAME := STRING\n"
+ msgstr ""
+
+ #: ../iptunnel.c:91
++#, c-format
+ msgid " ADDR := { IP_ADDRESS | any }\n"
+ msgstr ""
+
+ #: ../iptunnel.c:92
++#, c-format
+ msgid " TOS := { NUMBER | inherit }\n"
+ msgstr ""
+
+ #: ../iptunnel.c:93
++#, c-format
+ msgid " TTL := { 1..255 | inherit }\n"
+ msgstr ""
+
+ #: ../iptunnel.c:94
++#, c-format
+ msgid " KEY := { DOTTED_QUAD | NUMBER }\n"
+ msgstr ""
+
+ #: ../iptunnel.c:332
++#, c-format
+ msgid "Keys are not allowed with ipip and sit.\n"
+ msgstr ""
+
+ #: ../iptunnel.c:352
++#, c-format
+ msgid "Broadcast tunnel requires a source address.\n"
+ msgstr ""
+
+ #: ../iptunnel.c:367
++#, c-format
+ msgid "ttl != 0 and noptmudisc are incompatible\n"
+ msgstr ""
+
+ #: ../iptunnel.c:379
++#, c-format
+ msgid "cannot determine tunnel mode (ipip, gre or sit)\n"
+ msgstr ""
+
+@@ -1128,22 +1339,27 @@ msgid "unknown"
+ msgstr ""
+
+ #: ../iptunnel.c:453
++#, c-format
+ msgid " Drop packets out of sequence.\n"
+ msgstr ""
+
+ #: ../iptunnel.c:455
++#, c-format
+ msgid " Checksum in received packet is required.\n"
+ msgstr ""
+
+ #: ../iptunnel.c:457
++#, c-format
+ msgid " Sequence packets on output.\n"
+ msgstr ""
+
+ #: ../iptunnel.c:459
++#, c-format
+ msgid " Checksum output packets.\n"
+ msgstr ""
+
+ #: ../iptunnel.c:487
++#, c-format
+ msgid "Wrong format of /proc/net/dev. Sorry.\n"
+ msgstr ""
+
+@@ -1153,10 +1369,12 @@ msgid "Failed to get type of [%s]\n"
+ msgstr ""
+
+ #: ../iptunnel.c:516
++#, c-format
+ msgid "RX: Packets Bytes Errors CsumErrs OutOfSeq Mcasts\n"
+ msgstr ""
+
+ #: ../iptunnel.c:519
++#, c-format
+ msgid "TX: Packets Bytes Errors DeadLoop NoRoute NoBufs\n"
+ msgstr ""
+
+@@ -1323,287 +1541,487 @@ msgstr ""
+
+ #: ../statistics.c:99
+ #, c-format
+-msgid "address mask request: %u"
++msgid "address mask request: %u"
++msgstr ""
++
++#. ?
++#: ../statistics.c:100 ../statistics.c:113
++#, c-format
++msgid "address mask replies: %u"
++msgstr ""
++
++#. ?
++#: ../statistics.c:101
++#, c-format
++msgid "%u ICMP messages sent"
++msgstr ""
++
++#: ../statistics.c:102
++#, c-format
++msgid "%u ICMP messages failed"
++msgstr ""
++
++#: ../statistics.c:104
++#, c-format
++msgid "time exceeded: %u"
++msgstr ""
++
++#. ?
++#: ../statistics.c:106
++#, c-format
++msgid "source quench: %u"
++msgstr ""
++
++#: ../statistics.c:107
++#, c-format
++msgid "redirect: %u"
++msgstr ""
++
++#: ../statistics.c:108
++#, c-format
++msgid "echo request: %u"
++msgstr ""
++
++#: ../statistics.c:110
++#, c-format
++msgid "timestamp requests: %u"
++msgstr ""
++
++#: ../statistics.c:111
++#, c-format
++msgid "timestamp replies: %u"
++msgstr ""
++
++#: ../statistics.c:112
++#, c-format
++msgid "address mask requests: %u"
++msgstr ""
++
++#: ../statistics.c:118
++#, c-format
++msgid "RTO algorithm is %s"
++msgstr ""
++
++#: ../statistics.c:122
++#, c-format
++msgid "%u active connections openings"
++msgstr ""
++
++#: ../statistics.c:123
++#, c-format
++msgid "%u passive connection openings"
++msgstr ""
++
++#: ../statistics.c:124
++#, c-format
++msgid "%u failed connection attempts"
++msgstr ""
++
++#: ../statistics.c:125
++#, c-format
++msgid "%u connection resets received"
++msgstr ""
++
++#: ../statistics.c:126
++#, c-format
++msgid "%u connections established"
++msgstr ""
++
++#: ../statistics.c:127
++#, c-format
++msgid "%u segments received"
++msgstr ""
++
++#: ../statistics.c:128
++#, c-format
++msgid "%u segments send out"
++msgstr ""
++
++#: ../statistics.c:129
++#, c-format
++msgid "%u segments retransmited"
++msgstr ""
++
++#: ../statistics.c:130
++#, c-format
++msgid "%u bad segments received."
++msgstr ""
++
++#: ../statistics.c:131
++#, c-format
++msgid "%u resets sent"
++msgstr ""
++
++#: ../statistics.c:136
++#, c-format
++msgid "%u packets received"
++msgstr ""
++
++#: ../statistics.c:137
++#, c-format
++msgid "%u packets to unknown port received."
++msgstr ""
++
++#: ../statistics.c:138
++#, c-format
++msgid "%u packet receive errors"
++msgstr ""
++
++#: ../statistics.c:139
++#, c-format
++msgid "%u packets sent"
++msgstr ""
++
++#: ../statistics.c:144
++#, c-format
++msgid "%u SYN cookies sent"
++msgstr ""
++
++#: ../statistics.c:145
++#, c-format
++msgid "%u SYN cookies received"
++msgstr ""
++
++#: ../statistics.c:146
++#, c-format
++msgid "%u invalid SYN cookies received"
++msgstr ""
++
++#: ../statistics.c:148
++#, c-format
++msgid "%u resets received for embryonic SYN_RECV sockets"
++msgstr ""
++
++#: ../statistics.c:150
++#, c-format
++msgid "%u packets pruned from receive queue because of socket buffer overrun"
++msgstr ""
++
++#. obsolete: 2.2.0 doesn't do that anymore
++#: ../statistics.c:153
++#, c-format
++msgid "%u packets pruned from receive queue"
++msgstr ""
++
++#: ../statistics.c:154
++#, c-format
++msgid ""
++"%u packets dropped from out-of-order queue because of socket buffer overrun"
++msgstr ""
++
++#: ../statistics.c:156
++#, c-format
++msgid "%u ICMP packets dropped because they were out-of-window"
++msgstr ""
++
++#: ../statistics.c:158
++#, c-format
++msgid "%u ICMP packets dropped because socket was locked"
++msgstr ""
++
++#: ../statistics.c:160
++#, c-format
++msgid "%u TCP sockets finished time wait in fast timer"
++msgstr ""
++
++#: ../statistics.c:161
++#, c-format
++msgid "%u time wait sockets recycled by time stamp"
++msgstr ""
++
++#: ../statistics.c:162
++#, c-format
++msgid "%u TCP sockets finished time wait in slow timer"
++msgstr ""
++
++#: ../statistics.c:163
++#, c-format
++msgid "%u passive connections rejected because of time stamp"
++msgstr ""
++
++#: ../statistics.c:165
++#, c-format
++msgid "%u active connections rejected because of time stamp"
++msgstr ""
++
++#: ../statistics.c:167
++#, c-format
++msgid "%u packets rejects in established connections because of timestamp"
+ msgstr ""
+
+-#. ?
+-#: ../statistics.c:100 ../statistics.c:113
++#: ../statistics.c:169
+ #, c-format
+-msgid "address mask replies: %u"
++msgid "%u delayed acks sent"
+ msgstr ""
+
+-#. ?
+-#: ../statistics.c:101
++#: ../statistics.c:170
+ #, c-format
+-msgid "%u ICMP messages sent"
++msgid "%u delayed acks further delayed because of locked socket"
+ msgstr ""
+
+-#: ../statistics.c:102
++#: ../statistics.c:172
+ #, c-format
+-msgid "%u ICMP messages failed"
++msgid "Quick ack mode was activated %u times"
+ msgstr ""
+
+-#: ../statistics.c:104
++#: ../statistics.c:173
+ #, c-format
+-msgid "time exceeded: %u"
++msgid "%u times the listen queue of a socket overflowed"
+ msgstr ""
+
+-#. ?
+-#: ../statistics.c:106
++#: ../statistics.c:175
+ #, c-format
+-msgid "source quench: %u"
++msgid "%u SYNs to LISTEN sockets dropped"
+ msgstr ""
+
+-#: ../statistics.c:107
++#: ../statistics.c:176
+ #, c-format
+-msgid "redirect: %u"
++msgid "%u packets directly queued to recvmsg prequeue."
+ msgstr ""
+
+-#: ../statistics.c:108
++#: ../statistics.c:178
+ #, c-format
+-msgid "echo request: %u"
++msgid "%u bytes directly in process context from backlog"
+ msgstr ""
+
+-#: ../statistics.c:110
++#: ../statistics.c:179
+ #, c-format
+-msgid "timestamp requests: %u"
++msgid "%u bytes directly received in process context from prequeue"
+ msgstr ""
+
+-#: ../statistics.c:111
++#: ../statistics.c:181
+ #, c-format
+-msgid "timestamp replies: %u"
++msgid "%u packets dropped from prequeue"
+ msgstr ""
+
+-#: ../statistics.c:112
++#: ../statistics.c:182
+ #, c-format
+-msgid "address mask requests: %u"
++msgid "%u packet headers predicted"
+ msgstr ""
+
+-#: ../statistics.c:118
++#: ../statistics.c:183
+ #, c-format
+-msgid "RTO algorithm is %s"
++msgid "%u packets header predicted and directly queued to user"
+ msgstr ""
+
+-#: ../statistics.c:122
++#: ../statistics.c:185
+ #, c-format
+-msgid "%u active connections openings"
++msgid "Ran %u times out of system memory during packet sending"
+ msgstr ""
+
+-#: ../statistics.c:123
++#: ../statistics.c:187
+ #, c-format
+-msgid "%u passive connection openings"
++msgid "%u acknowledgments not containing data payload received"
+ msgstr ""
+
+-#: ../statistics.c:124
++#: ../statistics.c:188
+ #, c-format
+-msgid "%u failed connection attempts"
++msgid "%u predicted acknowledgments"
+ msgstr ""
+
+-#: ../statistics.c:125
++#: ../statistics.c:189
+ #, c-format
+-msgid "%u connection resets received"
++msgid "%u times recovered from packet loss due to fast retransmit"
+ msgstr ""
+
+-#: ../statistics.c:126
++#: ../statistics.c:190
+ #, c-format
+-msgid "%u connections established"
++msgid "%u times recovered from packet loss by selective acknowledgements"
+ msgstr ""
+
+-#: ../statistics.c:127
++#: ../statistics.c:191
+ #, c-format
+-msgid "%u segments received"
++msgid "%u bad SACK blocks received"
+ msgstr ""
+
+-#: ../statistics.c:128
++#: ../statistics.c:192
+ #, c-format
+-msgid "%u segments send out"
++msgid "Detected reordering %u times using FACK"
+ msgstr ""
+
+-#: ../statistics.c:129
++#: ../statistics.c:193
+ #, c-format
+-msgid "%u segments retransmited"
++msgid "Detected reordering %u times using SACK"
+ msgstr ""
+
+-#: ../statistics.c:130
++#: ../statistics.c:194
+ #, c-format
+-msgid "%u bad segments received."
++msgid "Detected reordering %u times using time stamp"
+ msgstr ""
+
+-#: ../statistics.c:131
++#: ../statistics.c:195
+ #, c-format
+-msgid "%u resets sent"
++msgid "Detected reordering %u times using reno fast retransmit"
+ msgstr ""
+
+-#: ../statistics.c:136
++#: ../statistics.c:196
+ #, c-format
+-msgid "%u packets received"
++msgid "%u congestion windows fully recovered without slow start"
+ msgstr ""
+
+-#: ../statistics.c:137
++#: ../statistics.c:197
+ #, c-format
+-msgid "%u packets to unknown port received."
++msgid "%u congestion windows partially recovered using Hoe heuristic"
+ msgstr ""
+
+-#: ../statistics.c:138
++#: ../statistics.c:198
+ #, c-format
+-msgid "%u packet receive errors"
++msgid "%u congestion window recovered without slow start using DSACK"
+ msgstr ""
+
+-#: ../statistics.c:139
++#: ../statistics.c:199
+ #, c-format
+-msgid "%u packets sent"
++msgid "%u congestion windows recovered without slow start after partial ack"
+ msgstr ""
+
+-#: ../statistics.c:144
++#: ../statistics.c:200
+ #, c-format
+-msgid "%u SYN cookies sent"
++msgid "%u retransmits lost"
+ msgstr ""
+
+-#: ../statistics.c:145
++#: ../statistics.c:201
+ #, c-format
+-msgid "%u SYN cookies received"
++msgid "%u timeouts after reno fast retransmit"
+ msgstr ""
+
+-#: ../statistics.c:146
++#: ../statistics.c:202
+ #, c-format
+-msgid "%u invalid SYN cookies received"
++msgid "%u timeouts after SACK recovery"
+ msgstr ""
+
+-#: ../statistics.c:148
++#: ../statistics.c:203
+ #, c-format
+-msgid "%u resets received for embryonic SYN_RECV sockets"
++msgid "%u timeouts in loss state"
+ msgstr ""
+
+-#: ../statistics.c:150
++#: ../statistics.c:204
+ #, c-format
+-msgid "%u packets pruned from receive queue because of socket buffer overrun"
++msgid "%u fast retransmits"
+ msgstr ""
+
+-#. obsolete: 2.2.0 doesn't do that anymore
+-#: ../statistics.c:153
++#: ../statistics.c:205
+ #, c-format
+-msgid "%u packets pruned from receive queue"
++msgid "%u forward retransmits"
+ msgstr ""
+
+-#: ../statistics.c:154
++#: ../statistics.c:206
+ #, c-format
+-msgid ""
+-"%u packets dropped from out-of-order queue because of socket buffer overrun"
++msgid "%u retransmits in slow start"
+ msgstr ""
+
+-#: ../statistics.c:156
++#: ../statistics.c:207
+ #, c-format
+-msgid "%u ICMP packets dropped because they were out-of-window"
++msgid "%u other TCP timeouts"
+ msgstr ""
+
+-#: ../statistics.c:158
++#: ../statistics.c:208
+ #, c-format
+-msgid "%u ICMP packets dropped because socket was locked"
++msgid "%u reno fast retransmits failed"
+ msgstr ""
+
+-#: ../statistics.c:160
++#: ../statistics.c:209
+ #, c-format
+-msgid "%u TCP sockets finished time wait in fast timer"
++msgid "%u SACK retransmits failed"
+ msgstr ""
+
+-#: ../statistics.c:161
++#: ../statistics.c:210
+ #, c-format
+-msgid "%u time wait sockets recycled by time stamp"
++msgid "%u times receiver scheduled too late for direct processing"
+ msgstr ""
+
+-#: ../statistics.c:162
++#: ../statistics.c:211
+ #, c-format
+-msgid "%u TCP sockets finished time wait in slow timer"
++msgid "%u packets collapsed in receive queue due to low socket buffer"
+ msgstr ""
+
+-#: ../statistics.c:163
++#: ../statistics.c:212
+ #, c-format
+-msgid "%u passive connections rejected because of time stamp"
++msgid "%u DSACKs sent for old packets"
+ msgstr ""
+
+-#: ../statistics.c:165
++#: ../statistics.c:213
+ #, c-format
+-msgid "%u active connections rejected because of time stamp"
++msgid "%u DSACKs sent for out of order packets"
+ msgstr ""
+
+-#: ../statistics.c:167
++#: ../statistics.c:214
+ #, c-format
+-msgid "%u packets rejects in established connections because of timestamp"
++msgid "%u DSACKs received"
+ msgstr ""
+
+-#: ../statistics.c:169
++#: ../statistics.c:215
+ #, c-format
+-msgid "%u delayed acks sent"
++msgid "%u DSACKs for out of order packets received"
+ msgstr ""
+
+-#: ../statistics.c:170
++#: ../statistics.c:216
+ #, c-format
+-msgid "%u delayed acks further delayed because of locked socket"
++msgid "%u connections reset due to unexpected SYN"
+ msgstr ""
+
+-#: ../statistics.c:172
++#: ../statistics.c:217
+ #, c-format
+-msgid "Quick ack mode was activated %u times"
++msgid "%u connections reset due to unexpected data"
+ msgstr ""
+
+-#: ../statistics.c:173
++#: ../statistics.c:218
+ #, c-format
+-msgid "%u times the listen queue of a socket overflowed"
++msgid "%u connections reset due to early user close"
+ msgstr ""
+
+-#: ../statistics.c:175
++#: ../statistics.c:219
+ #, c-format
+-msgid "%u SYNs to LISTEN sockets ignored"
++msgid "%u connections aborted due to memory pressure"
+ msgstr ""
+
+-#: ../statistics.c:176
++#: ../statistics.c:220
+ #, c-format
+-msgid "%u packets directly queued to recvmsg prequeue."
++msgid "%u connections aborted due to timeout"
+ msgstr ""
+
+-#: ../statistics.c:178
++#: ../statistics.c:221
+ #, c-format
+-msgid "%u packets directly received from backlog"
++msgid "%u connections aborted after user close in linger timeout"
+ msgstr ""
+
+-#: ../statistics.c:180
++#: ../statistics.c:222
+ #, c-format
+-msgid "%u packets directly received from prequeue"
++msgid "%u times unabled to send RST due to no memory"
+ msgstr ""
+
+-#: ../statistics.c:182
++#: ../statistics.c:223
+ #, c-format
+-msgid "%u packets dropped from prequeue"
++msgid "TCP ran low on memory %u times"
+ msgstr ""
+
+-#: ../statistics.c:183
++#: ../statistics.c:224
+ #, c-format
+-msgid "%u packets header predicted"
++msgid "%u TCP data loss events"
+ msgstr ""
+
+-#: ../statistics.c:184
++#: ../statistics.c:225
+ #, c-format
+-msgid "%u packets header predicted and directly queued to user"
++msgid "%u congestion windows recovered without slow start by DSACK"
+ msgstr ""
+
+-#: ../statistics.c:186
++#: ../statistics.c:227
+ #, c-format
+-msgid "Ran %u times out of system memory during packet sending"
++msgid "%u classic Reno fast retransmits failed"
+ msgstr ""
+
+-#: ../statistics.c:253
++#: ../statistics.c:294
+ msgid "enabled"
+ msgstr ""
+
+-#: ../statistics.c:253
++#: ../statistics.c:294
+ msgid "disabled"
+ msgstr ""
+
+-#: ../statistics.c:336
++#: ../statistics.c:377
+ msgid "error parsing /proc/net/snmp"
+ msgstr ""
+
+-#: ../statistics.c:349
++#: ../statistics.c:390
+ msgid "cannot open /proc/net/snmp"
+ msgstr ""
+
+@@ -1617,7 +2035,7 @@ msgstr ""
+ msgid "Cannot change line discipline to `%s'.\n"
+ msgstr ""
+
+-#: ../lib/af.c:153 ../lib/hw.c:156
++#: ../lib/af.c:153 ../lib/hw.c:161
+ msgid "UNSPEC"
+ msgstr ""
+
+@@ -1633,11 +2051,11 @@ msgstr ""
+ msgid "IPv6"
+ msgstr ""
+
+-#: ../lib/af.c:164 ../lib/hw.c:177
++#: ../lib/af.c:164 ../lib/hw.c:182
+ msgid "AMPR AX.25"
+ msgstr ""
+
+-#: ../lib/af.c:167 ../lib/hw.c:183
++#: ../lib/af.c:167 ../lib/hw.c:188
+ msgid "AMPR NET/ROM"
+ msgstr ""
+
+@@ -1649,7 +2067,7 @@ msgstr ""
+ msgid "Appletalk DDP"
+ msgstr ""
+
+-#: ../lib/af.c:176 ../lib/hw.c:218
++#: ../lib/af.c:176 ../lib/hw.c:223
+ msgid "Econet"
+ msgstr ""
+
+@@ -1657,19 +2075,21 @@ msgstr ""
+ msgid "CCITT X.25"
+ msgstr ""
+
+-#: ../lib/af.c:182 ../lib/hw.c:180
++#: ../lib/af.c:182 ../lib/hw.c:185
+ msgid "AMPR ROSE"
+ msgstr ""
+
+-#: ../lib/af.c:185 ../lib/hw.c:168
++#: ../lib/af.c:185 ../lib/hw.c:173
+ msgid "Ash"
+ msgstr ""
+
+ #: ../lib/af.c:243
++#, c-format
+ msgid "Please don't supply more than one address family.\n"
+ msgstr ""
+
+ #: ../lib/af.c:304
++#, c-format
+ msgid "Too much address family arguments.\n"
+ msgstr ""
+
+@@ -1694,11 +2114,12 @@ msgid "in_arcnet(%s): trailing junk!\n"
+ msgstr ""
+
+ #: ../lib/ash.c:81
++#, c-format
+ msgid "Malformed Ash address"
+ msgstr ""
+
+ #: ../lib/ax25.c:75 ../lib/ddp.c:50 ../lib/econet.c:52 ../lib/inet.c:244
+-#: ../lib/inet.c:259 ../lib/inet6.c:129 ../lib/ipx.c:81 ../lib/netrom.c:78
++#: ../lib/inet.c:259 ../lib/inet6.c:145 ../lib/ipx.c:81 ../lib/netrom.c:78
+ #: ../lib/rose.c:71 ../lib/unix.c:56 ../lib/unix.c:76
+ msgid "[NONE SET]"
+ msgstr ""
+@@ -1712,22 +2133,21 @@ msgid "Callsign too long"
+ msgstr ""
+
+ #: ../lib/ax25_gr.c:47
++#, c-format
+ msgid "AX.25 not configured in this system.\n"
+ msgstr ""
+
+ #: ../lib/ax25_gr.c:50
++#, c-format
+ msgid "Kernel AX.25 routing table\n"
+ msgstr ""
+
+ #. xxx
+ #: ../lib/ax25_gr.c:51 ../lib/rose_gr.c:55
++#, c-format
+ msgid "Destination Iface Use\n"
+ msgstr ""
+
+-#: ../lib/ddp_gr.c:21
+-msgid "Routing table for `ddp' not yet supported.\n"
+-msgstr ""
+-
+ #: ../lib/ether.c:74 ../lib/ether.c:91
+ #, c-format
+ msgid "in_ether(%s): invalid ether address!\n"
+@@ -1783,225 +2203,260 @@ msgstr ""
+ msgid "in_hippi(%s): trailing junk!\n"
+ msgstr ""
+
+-#: ../lib/hw.c:155
++#: ../lib/hw.c:160
+ msgid "Local Loopback"
+ msgstr ""
+
+-#: ../lib/hw.c:158
++#: ../lib/hw.c:163
+ msgid "Serial Line IP"
+ msgstr ""
+
+-#: ../lib/hw.c:159
++#: ../lib/hw.c:164
+ msgid "VJ Serial Line IP"
+ msgstr ""
+
+-#: ../lib/hw.c:160
++#: ../lib/hw.c:165
+ msgid "6-bit Serial Line IP"
+ msgstr ""
+
+-#: ../lib/hw.c:161
++#: ../lib/hw.c:166
+ msgid "VJ 6-bit Serial Line IP"
+ msgstr ""
+
+-#: ../lib/hw.c:162
++#: ../lib/hw.c:167
+ msgid "Adaptive Serial Line IP"
+ msgstr ""
+
+-#: ../lib/hw.c:165
++#: ../lib/hw.c:170
+ msgid "Ethernet"
+ msgstr ""
+
+-#: ../lib/hw.c:171
++#: ../lib/hw.c:176
+ msgid "Fiber Distributed Data Interface"
+ msgstr ""
+
+-#: ../lib/hw.c:174
++#: ../lib/hw.c:179
+ msgid "HIPPI"
+ msgstr ""
+
+-#: ../lib/hw.c:186
++#: ../lib/hw.c:191
+ msgid "generic X.25"
+ msgstr ""
+
+-#: ../lib/hw.c:189
++#: ../lib/hw.c:194
+ msgid "IPIP Tunnel"
+ msgstr ""
+
+-#: ../lib/hw.c:192
++#: ../lib/hw.c:197
+ msgid "Point-to-Point Protocol"
+ msgstr ""
+
+-#: ../lib/hw.c:195
++#: ../lib/hw.c:200
+ msgid "(Cisco)-HDLC"
+ msgstr ""
+
+-#: ../lib/hw.c:196
++#: ../lib/hw.c:201
+ msgid "LAPB"
+ msgstr ""
+
+-#: ../lib/hw.c:199
++#: ../lib/hw.c:204
+ msgid "ARCnet"
+ msgstr ""
+
+-#: ../lib/hw.c:202
++#: ../lib/hw.c:207
+ msgid "Frame Relay DLCI"
+ msgstr ""
+
+-#: ../lib/hw.c:203
++#: ../lib/hw.c:208
+ msgid "Frame Relay Access Device"
+ msgstr ""
+
+-#: ../lib/hw.c:206
++#: ../lib/hw.c:211
+ msgid "IPv6-in-IPv4"
+ msgstr ""
+
+-#: ../lib/hw.c:209
++#: ../lib/hw.c:214
+ msgid "IrLAP"
+ msgstr ""
+
+-#: ../lib/hw.c:212
++#: ../lib/hw.c:217
+ msgid "16/4 Mbps Token Ring"
+ msgstr ""
+
+-#: ../lib/hw.c:214
++#: ../lib/hw.c:219
+ msgid "16/4 Mbps Token Ring (New)"
+ msgstr ""
+
+-#: ../lib/inet.c:153 ../lib/inet6.c:79
++#: ../lib/hw.c:226
++msgid "Generic EUI-64"
++msgstr ""
++
++#: ../lib/inet.c:153 ../lib/inet6.c:94
+ #, c-format
+ msgid "rresolve: unsupport address family %d !\n"
+ msgstr ""
+
+-#: ../lib/inet6.c:131
++#: ../lib/inet6.c:147
+ msgid "[UNKNOWN]"
+ msgstr ""
+
+ #: ../lib/inet6_gr.c:71
++#, c-format
+ msgid "INET6 (IPv6) not configured in this system.\n"
+ msgstr ""
+
+-#: ../lib/inet6_gr.c:74
++#: ../lib/inet6_gr.c:76
++#, c-format
++msgid "Kernel IPv6 routing cache\n"
++msgstr ""
++
++#: ../lib/inet6_gr.c:78
++#, c-format
+ msgid "Kernel IPv6 routing table\n"
+ msgstr ""
+
+-#: ../lib/inet6_gr.c:76
++#: ../lib/inet6_gr.c:80
++#, c-format
+ msgid ""
+-"Destination Next Hop "
+-" Flags Metric Ref Use Iface\n"
++"Destination Next Hop Flag Met Ref Use "
++"If\n"
+ msgstr ""
+
+-#: ../lib/inet6_gr.c:150
++#: ../lib/inet6_gr.c:174
++#, c-format
+ msgid "Kernel IPv6 Neighbour Cache\n"
+ msgstr ""
+
+-#: ../lib/inet6_gr.c:153
++#: ../lib/inet6_gr.c:177
++#, c-format
+ msgid ""
+ "Neighbour HW Address Iface Flags "
+ "Ref State\n"
+ msgstr ""
+
+-#: ../lib/inet6_gr.c:157
++#: ../lib/inet6_gr.c:181
++#, c-format
+ msgid ""
+ "Neighbour HW Address Iface Flags "
+ "Ref State Stale(sec) Delete(sec)\n"
+ msgstr ""
+
+ #: ../lib/inet6_sr.c:46
++#, c-format
+ msgid "Usage: inet6_route [-vF] del Target\n"
+ msgstr ""
+
+ #: ../lib/inet6_sr.c:47
++#, c-format
+ msgid " inet6_route [-vF] add Target [gw Gw] [metric M] [[dev] If]\n"
+ msgstr ""
+
+ #: ../lib/inet6_sr.c:48
++#, c-format
+ msgid " inet6_route [-FC] flush NOT supported\n"
+ msgstr ""
+
+ #: ../lib/inet6_sr.c:188
++#, c-format
+ msgid "Flushing `inet6' routing table not supported\n"
+ msgstr ""
+
+ #: ../lib/inet_gr.c:50 ../lib/inet_gr.c:220
++#, c-format
+ msgid "INET (IPv4) not configured in this system.\n"
+ msgstr ""
+
+ #: ../lib/inet_gr.c:53
++#, c-format
+ msgid "Kernel IP routing table\n"
+ msgstr ""
+
+ #: ../lib/inet_gr.c:56
++#, c-format
+ msgid ""
+ "Destination Gateway Genmask Flags Metric Ref Use "
+ "Iface\n"
+ msgstr ""
+
+ #: ../lib/inet_gr.c:59
++#, c-format
+ msgid ""
+ "Destination Gateway Genmask Flags MSS Window irtt "
+ "Iface\n"
+ msgstr ""
+
+ #: ../lib/inet_gr.c:62
++#, c-format
+ msgid ""
+ "Destination Gateway Genmask Flags Metric Ref Use "
+ "Iface MSS Window irtt\n"
+ msgstr ""
+
+ #: ../lib/inet_gr.c:237
++#, c-format
+ msgid "Kernel IP routing cache\n"
+ msgstr ""
+
+ #: ../lib/inet_gr.c:258
++#, c-format
+ msgid ""
+ "Source Destination Gateway Flags Metric Ref Use "
+ "Iface\n"
+ msgstr ""
+
+ #: ../lib/inet_gr.c:261
++#, c-format
+ msgid ""
+ "Source Destination Gateway Flags MSS Window irtt "
+ "Iface\n"
+ msgstr ""
+
+ #: ../lib/inet_gr.c:266
++#, c-format
+ msgid ""
+ "Source Destination Gateway Flags Metric Ref Use "
+ "Iface MSS Window irtt HH Arp\n"
+ msgstr ""
+
+ #: ../lib/inet_gr.c:290
++#, c-format
+ msgid ""
+ "Source Destination Gateway Flags Metric Ref Use "
+ "Iface MSS Window irtt TOS HHRef HHUptod SpecDst\n"
+ msgstr ""
+
+-#: ../lib/inet_sr.c:50
++#: ../lib/inet_sr.c:51
++#, c-format
+ msgid ""
+ "Usage: inet_route [-vF] del {-host|-net} Target[/prefix] [gw Gw] [metric M] "
+ "[[dev] If]\n"
+ msgstr ""
+
+-#: ../lib/inet_sr.c:51
++#: ../lib/inet_sr.c:52
++#, c-format
+ msgid ""
+ " inet_route [-vF] add {-host|-net} Target[/prefix] [gw Gw] [metric M]\n"
+ msgstr ""
+
+-#: ../lib/inet_sr.c:52
++#: ../lib/inet_sr.c:53
++#, c-format
+ msgid ""
+ " [netmask N] [mss Mss] [window W] [irtt I]\n"
+ msgstr ""
+
+-#: ../lib/inet_sr.c:53
++#: ../lib/inet_sr.c:54
++#, c-format
+ msgid " [mod] [dyn] [reinstate] [[dev] If]\n"
+ msgstr ""
+
+-#: ../lib/inet_sr.c:54
++#: ../lib/inet_sr.c:55
++#, c-format
+ msgid ""
+ " inet_route [-vF] add {-host|-net} Target[/prefix] [metric M] reject\n"
+ msgstr ""
+
+-#: ../lib/inet_sr.c:55
++#: ../lib/inet_sr.c:56
++#, c-format
+ msgid " inet_route [-FC] flush NOT supported\n"
+ msgstr ""
+
+@@ -2011,14 +2466,17 @@ msgid "route: %s: cannot use a NETWORK as gateway!\n"
+ msgstr ""
+
+ #: ../lib/inet_sr.c:174
++#, c-format
+ msgid "route: Invalid MSS/MTU.\n"
+ msgstr ""
+
+ #: ../lib/inet_sr.c:187
++#, c-format
+ msgid "route: Invalid window.\n"
+ msgstr ""
+
+ #: ../lib/inet_sr.c:203
++#, c-format
+ msgid "route: Invalid initial rtt.\n"
+ msgstr ""
+
+@@ -2033,73 +2491,90 @@ msgid "route: bogus netmask %s\n"
+ msgstr ""
+
+ #: ../lib/inet_sr.c:270
++#, c-format
+ msgid "route: netmask doesn't match route address\n"
+ msgstr ""
+
+ #: ../lib/inet_sr.c:306
++#, c-format
+ msgid "Flushing `inet' routing table not supported\n"
+ msgstr ""
+
+ #: ../lib/inet_sr.c:310
++#, c-format
+ msgid "Modifying `inet' routing cache not supported\n"
+ msgstr ""
+
+ #: ../lib/ipx_gr.c:52
++#, c-format
+ msgid "IPX not configured in this system.\n"
+ msgstr ""
+
+ #: ../lib/ipx_gr.c:56
++#, c-format
+ msgid "Kernel IPX routing table\n"
+ msgstr ""
+
+ #. xxx
+ #: ../lib/ipx_gr.c:57
++#, c-format
+ msgid "Destination Router Net Router Node\n"
+ msgstr ""
+
+ #: ../lib/ipx_sr.c:33
++#, c-format
+ msgid "IPX: this needs to be written\n"
+ msgstr ""
+
+ #: ../lib/masq_info.c:198
++#, c-format
+ msgid "IP masquerading entries\n"
+ msgstr ""
+
+ #: ../lib/masq_info.c:201
++#, c-format
+ msgid "prot expire source destination ports\n"
+ msgstr ""
+
+ #: ../lib/masq_info.c:204
++#, c-format
+ msgid ""
+-"prot expire initseq delta prevd source destination "
+-" ports\n"
++"prot expire initseq delta prevd source "
++"destination ports\n"
+ msgstr ""
+
+ #: ../lib/netrom_gr.c:48
++#, c-format
+ msgid "NET/ROM not configured in this system.\n"
+ msgstr ""
+
+ #: ../lib/netrom_gr.c:51
++#, c-format
+ msgid "Kernel NET/ROM routing table\n"
+ msgstr ""
+
+ #: ../lib/netrom_gr.c:52
++#, c-format
+ msgid "Destination Mnemonic Quality Neighbour Iface\n"
+ msgstr ""
+
+ #: ../lib/netrom_sr.c:34
++#, c-format
+ msgid "netrom usage\n"
+ msgstr ""
+
+ #: ../lib/netrom_sr.c:44
++#, c-format
+ msgid "NET/ROM: this needs to be written\n"
+ msgstr ""
+
+ #: ../lib/ppp.c:44
++#, c-format
+ msgid "You cannot start PPP with this program.\n"
+ msgstr ""
+
+ #: ../lib/ppp_ac.c:38
++#, c-format
+ msgid "Sorry, use pppd!\n"
+ msgstr ""
+
+@@ -2108,287 +2583,314 @@ msgid "Node address must be ten digits"
+ msgstr ""
+
+ #: ../lib/rose_gr.c:51
++#, c-format
+ msgid "ROSE not configured in this system.\n"
+ msgstr ""
+
+ #: ../lib/rose_gr.c:54
++#, c-format
+ msgid "Kernel ROSE routing table\n"
+ msgstr ""
+
+-#: ../lib/tr.c:70 ../lib/tr.c:85
++#: ../lib/tr.c:86 ../lib/tr.c:101
+ #, c-format
+ msgid "in_tr(%s): invalid token ring address!\n"
+ msgstr ""
+
+-#: ../lib/tr.c:97
++#: ../lib/tr.c:113
+ #, c-format
+ msgid "in_tr(%s): trailing : ignored!\n"
+ msgstr ""
+
+-#: ../lib/tr.c:109
++#: ../lib/tr.c:125
+ #, c-format
+ msgid "in_tr(%s): trailing junk!\n"
+ msgstr ""
+
+-#: ../lib/interface.c:164
++#: ../lib/interface.c:174
+ #, c-format
+ msgid "warning: no inet socket available: %s\n"
+ msgstr ""
+
+-#: ../lib/interface.c:316
++#: ../lib/interface.c:323
+ #, c-format
+ msgid "Warning: cannot open %s (%s). Limited output.\n"
+ msgstr ""
+
+ #. Give better error message for this case.
+-#: ../lib/interface.c:556
++#: ../lib/interface.c:570
+ msgid "Device not found"
+ msgstr ""
+
+-#: ../lib/interface.c:560
++#: ../lib/interface.c:574
+ #, c-format
+ msgid "%s: error fetching interface information: %s\n"
+ msgstr ""
+
+-#: ../lib/interface.c:593
++#: ../lib/interface.c:607
+ msgid " - no statistics available -"
+ msgstr ""
+
+-#: ../lib/interface.c:597
++#: ../lib/interface.c:611
++#, c-format
+ msgid "[NO FLAGS]"
+ msgstr ""
+
+-#: ../lib/interface.c:673
++#: ../lib/interface.c:687
+ #, c-format
+ msgid "%-9.9s Link encap:%s "
+ msgstr ""
+
+-#: ../lib/interface.c:678
++#: ../lib/interface.c:692
+ #, c-format
+ msgid "HWaddr %s "
+ msgstr ""
+
+-#: ../lib/interface.c:681
++#: ../lib/interface.c:695
+ #, c-format
+ msgid "Media:%s"
+ msgstr ""
+
+-#: ../lib/interface.c:683
++#: ../lib/interface.c:697
++#, c-format
+ msgid "(auto)"
+ msgstr ""
+
+-#: ../lib/interface.c:690
++#: ../lib/interface.c:704
+ #, c-format
+ msgid " %s addr:%s "
+ msgstr ""
+
+-#: ../lib/interface.c:693
++#: ../lib/interface.c:707
+ #, c-format
+ msgid " P-t-P:%s "
+ msgstr ""
+
+-#: ../lib/interface.c:696
++#: ../lib/interface.c:710
+ #, c-format
+ msgid " Bcast:%s "
+ msgstr ""
+
+-#: ../lib/interface.c:698
++#: ../lib/interface.c:712
+ #, c-format
+ msgid " Mask:%s\n"
+ msgstr ""
+
+-#: ../lib/interface.c:715
++#: ../lib/interface.c:729
+ #, c-format
+ msgid " inet6 addr: %s/%d"
+ msgstr ""
+
+-#: ../lib/interface.c:717
++#: ../lib/interface.c:731
++#, c-format
+ msgid " Scope:"
+ msgstr ""
+
+-#: ../lib/interface.c:720
++#: ../lib/interface.c:734
++#, c-format
+ msgid "Global"
+ msgstr ""
+
+-#: ../lib/interface.c:723
++#: ../lib/interface.c:737
++#, c-format
+ msgid "Link"
+ msgstr ""
+
+-#: ../lib/interface.c:726
++#: ../lib/interface.c:740
++#, c-format
+ msgid "Site"
+ msgstr ""
+
+-#: ../lib/interface.c:729
++#: ../lib/interface.c:743
++#, c-format
+ msgid "Compat"
+ msgstr ""
+
+-#: ../lib/interface.c:732
++#: ../lib/interface.c:746
++#, c-format
+ msgid "Host"
+ msgstr ""
+
+-#: ../lib/interface.c:735
++#: ../lib/interface.c:749
++#, c-format
+ msgid "Unknown"
+ msgstr ""
+
+-#: ../lib/interface.c:750
++#: ../lib/interface.c:764
+ #, c-format
+ msgid " IPX/Ethernet II addr:%s\n"
+ msgstr ""
+
+-#: ../lib/interface.c:753
++#: ../lib/interface.c:767
+ #, c-format
+ msgid " IPX/Ethernet SNAP addr:%s\n"
+ msgstr ""
+
+-#: ../lib/interface.c:756
++#: ../lib/interface.c:770
+ #, c-format
+ msgid " IPX/Ethernet 802.2 addr:%s\n"
+ msgstr ""
+
+-#: ../lib/interface.c:759
++#: ../lib/interface.c:773
+ #, c-format
+ msgid " IPX/Ethernet 802.3 addr:%s\n"
+ msgstr ""
+
+-#: ../lib/interface.c:769
++#: ../lib/interface.c:783
+ #, c-format
+ msgid " EtherTalk Phase 2 addr:%s\n"
+ msgstr ""
+
+-#: ../lib/interface.c:778
++#: ../lib/interface.c:792
+ #, c-format
+ msgid " econet addr:%s\n"
+ msgstr ""
+
+-#: ../lib/interface.c:785
++#: ../lib/interface.c:799
++#, c-format
+ msgid "[NO FLAGS] "
+ msgstr ""
+
+-#: ../lib/interface.c:787
++#: ../lib/interface.c:801
++#, c-format
+ msgid "UP "
+ msgstr ""
+
+-#: ../lib/interface.c:789
++#: ../lib/interface.c:803
++#, c-format
+ msgid "BROADCAST "
+ msgstr ""
+
+-#: ../lib/interface.c:791
++#: ../lib/interface.c:805
++#, c-format
+ msgid "DEBUG "
+ msgstr ""
+
+-#: ../lib/interface.c:793
++#: ../lib/interface.c:807
++#, c-format
+ msgid "LOOPBACK "
+ msgstr ""
+
+-#: ../lib/interface.c:795
++#: ../lib/interface.c:809
++#, c-format
+ msgid "POINTOPOINT "
+ msgstr ""
+
+-#: ../lib/interface.c:797
++#: ../lib/interface.c:811
++#, c-format
+ msgid "NOTRAILERS "
+ msgstr ""
+
+-#: ../lib/interface.c:799
++#: ../lib/interface.c:813
++#, c-format
+ msgid "RUNNING "
+ msgstr ""
+
+-#: ../lib/interface.c:801
++#: ../lib/interface.c:815
++#, c-format
+ msgid "NOARP "
+ msgstr ""
+
+-#: ../lib/interface.c:803
++#: ../lib/interface.c:817
++#, c-format
+ msgid "PROMISC "
+ msgstr ""
+
+-#: ../lib/interface.c:805
++#: ../lib/interface.c:819
++#, c-format
+ msgid "ALLMULTI "
+ msgstr ""
+
+-#: ../lib/interface.c:807
++#: ../lib/interface.c:821
++#, c-format
+ msgid "SLAVE "
+ msgstr ""
+
+-#: ../lib/interface.c:809
++#: ../lib/interface.c:823
++#, c-format
+ msgid "MASTER "
+ msgstr ""
+
+-#: ../lib/interface.c:811
++#: ../lib/interface.c:825
++#, c-format
+ msgid "MULTICAST "
+ msgstr ""
+
+-#: ../lib/interface.c:814
++#: ../lib/interface.c:828
++#, c-format
+ msgid "DYNAMIC "
+ msgstr ""
+
+ #. DONT FORGET TO ADD THE FLAGS IN ife_print_short
+-#: ../lib/interface.c:817
++#: ../lib/interface.c:831
+ #, c-format
+ msgid " MTU:%d Metric:%d"
+ msgstr ""
+
+-#: ../lib/interface.c:821
++#: ../lib/interface.c:835
+ #, c-format
+ msgid " Outfill:%d Keepalive:%d"
+ msgstr ""
+
+-#: ../lib/interface.c:835
++#: ../lib/interface.c:849
+ #, c-format
+ msgid "RX packets:%llu errors:%lu dropped:%lu overruns:%lu frame:%lu\n"
+ msgstr ""
+
+-#: ../lib/interface.c:840
++#: ../lib/interface.c:854
+ #, c-format
+ msgid " compressed:%lu\n"
+ msgstr ""
+
+-#: ../lib/interface.c:852
++#: ../lib/interface.c:894
+ #, c-format
+ msgid "TX packets:%llu errors:%lu dropped:%lu overruns:%lu carrier:%lu\n"
+ msgstr ""
+
+-#: ../lib/interface.c:856
++#: ../lib/interface.c:898
+ #, c-format
+ msgid " collisions:%lu "
+ msgstr ""
+
+-#: ../lib/interface.c:858
++#: ../lib/interface.c:900
+ #, c-format
+ msgid "compressed:%lu "
+ msgstr ""
+
+-#: ../lib/interface.c:860
++#: ../lib/interface.c:902
+ #, c-format
+ msgid "txqueuelen:%d "
+ msgstr ""
+
+-#: ../lib/interface.c:862
++#: ../lib/interface.c:904
+ #, c-format
+ msgid "RX bytes:%llu (%lu.%lu %s) TX bytes:%llu (%lu.%lu %s)\n"
+ msgstr ""
+
+-#: ../lib/interface.c:873
++#: ../lib/interface.c:915
+ #, c-format
+ msgid "Interrupt:%d "
+ msgstr ""
+
+ #. Only print devices using it for
+ #. I/O maps
+-#: ../lib/interface.c:876
++#: ../lib/interface.c:918
+ #, c-format
+ msgid "Base address:0x%x "
+ msgstr ""
+
+-#: ../lib/interface.c:878
++#: ../lib/interface.c:920
+ #, c-format
+ msgid "Memory:%lx-%lx "
+ msgstr ""
+
+-#: ../lib/interface.c:881
++#: ../lib/interface.c:923
+ #, c-format
+ msgid "DMA chan:%x "
+ msgstr ""
+
+ #: ../lib/sockets.c:63
++#, c-format
+ msgid "No usable address families found.\n"
+ msgstr ""
+
+@@ -2413,14 +2915,17 @@ msgid "ip: argument is wrong: %s\n"
+ msgstr ""
+
+ #: ../ipmaddr.c:61
++#, c-format
+ msgid "Usage: ipmaddr [ add | del ] MULTIADDR dev STRING\n"
+ msgstr ""
+
+ #: ../ipmaddr.c:62
++#, c-format
+ msgid " ipmaddr show [ dev STRING ] [ ipv4 | ipv6 | link | all ]\n"
+ msgstr ""
+
+ #: ../ipmaddr.c:63
++#, c-format
+ msgid " ipmaddr -V | -version\n"
+ msgstr ""
+
+@@ -2449,6 +2954,7 @@ msgid "slattach: tty_lock: (%s): %s\n"
+ msgstr ""
+
+ #: ../slattach.c:192
++#, c-format
+ msgid "slattach: cannot write PID file\n"
+ msgstr ""
+
+@@ -2468,18 +2974,22 @@ msgid "slattach: tty_hangup(RAISE): %s\n"
+ msgstr ""
+
+ #: ../slattach.c:468
++#, c-format
+ msgid "slattach: tty name too long\n"
+ msgstr ""
+
+ #: ../slattach.c:498
++#, c-format
+ msgid "slattach: tty_open: cannot get current state!\n"
+ msgstr ""
+
+ #: ../slattach.c:505
++#, c-format
+ msgid "slattach: tty_open: cannot get current line disc!\n"
+ msgstr ""
+
+ #: ../slattach.c:513
++#, c-format
+ msgid "slattach: tty_open: cannot set RAW mode!\n"
+ msgstr ""
+
+@@ -2489,6 +2999,7 @@ msgid "slattach: tty_open: cannot set %s bps!\n"
+ msgstr ""
+
+ #: ../slattach.c:530
++#, c-format
+ msgid "slattach: tty_open: cannot set 8N1 mode!\n"
+ msgstr ""
+
+diff --git a/po/pt_BR.po b/po/pt_BR.po
+index 7c5dd37..9d94d5a 100644
+--- a/po/pt_BR.po
++++ b/po/pt_BR.po
+@@ -2,7 +2,7 @@
+ # Copyright (C) 2000 Free Software Foundation, Inc.
+ # Arnaldo Carvalho de Melo <acme@conectiva.com.br>, 2000.
+ #
+-# $Id: pt_BR.po,v 1.7 2000/02/13 22:28:11 ralf Exp $
++# $Id: pt_BR.po,v 1.8 2006/12/14 23:36:24 ecki Exp $
+ # Brazilian portuguese translation for net-tools 1.54
+ # Copyright (C) 1998, 1999 Free Software Foundation, Inc.
+ # Arnaldo Carvalho de Melo <acme@conectiva.com.br>, 1998-2000
+@@ -14,7 +14,7 @@ msgstr ""
+ "PO-Revision-Date: 1999-03-01 02:38+0100\n"
+ "Last-Translator: Arnaldo Carvalho de Melo <acme@conectiva.com.br>\n"
+ "MIME-Version: 1.0\n"
+-"Content-Type: text/plain; charset=ISO8859-9\n"
++"Content-Type: text/plain; charset=iso-8859-9\n"
+ "Content-Transfer-Encoding: 8bit\n"
+
+ #: ../arp.c:110 ../arp.c:269
+@@ -2361,17 +2361,15 @@ msgstr "aten
+ msgid "Warning: cannot open %s (%s). Limited output.\n"
+ msgstr "Atenção: não foi possível abrir %s (%s). Saída limitada.\n"
+
+-#. Give better error message for this case.
++#. better translation?
+ #: ../lib/interface.c:504
+ msgid "Device not found"
+-msgstr "%s: dispositivo não encontrado"
++msgstr "dispositivo não encontrado"
+
+ #: ../lib/interface.c:508
+ #, c-format
+ msgid "%s: error fetching interface information: %s\n"
+-msgstr ""
+-"%s: erro obtendo informações da interface: %s\n"
+-"\n"
++msgstr "%s: erro obtendo informações da interface: %s\n"
+
+ #: ../lib/sockets.c:59
+ msgid "No usable address families found.\n"
+diff --git a/rarp.c b/rarp.c
+index aab05b3..ab8f710 100644
+--- a/rarp.c
++++ b/rarp.c
+@@ -3,7 +3,7 @@
+ * that maintains the kernel's RARP cache. It is derived
+ * from Fred N. van Kempen's arp command.
+ *
+- * Version: $Id: rarp.c,v 1.6 2001/04/08 17:05:05 pb Exp $
++ * Version: $Id: rarp.c,v 1.9 2007/12/02 02:19:52 ecki Exp $
+ *
+ * Usage: rarp -d hostname Delete entry
+ * rarp -s hostname ethernet_address Add entry
+@@ -40,10 +40,11 @@
+ #include "net-support.h"
+ #include "version.h"
+ #include "pathnames.h"
++#include "proc.h"
+
+ static char no_rarp_message[] = N_("This kernel does not support RARP.\n");
+
+-static char version_string[] = RELEASE "\nrarp 1.03 (2001-04-04)\n";
++static char *Release = RELEASE;
+
+ static struct hwtype *hardware = NULL;
+
+@@ -154,7 +155,7 @@ static int rarp_file(int fd, const char *name)
+
+ static int display_cache(void)
+ {
+- FILE *fd = fopen(_PATH_PROCNET_RARP, "r");
++ FILE *fd = proc_fopen(_PATH_PROCNET_RARP);
+ char buffer[256];
+ if (fd == NULL) {
+ if (errno == ENOENT)
+@@ -225,7 +226,7 @@ int main(int argc, char **argv)
+ case 'h':
+ usage();
+ case 'V':
+- fprintf(stderr, version_string);
++ fprintf(stderr, "%s\n", Release);
+ exit(E_VERSION);
+ break;
+ case 'v':
+diff --git a/route.c b/route.c
+index f8c2bc3..4eaed49 100644
+--- a/route.c
++++ b/route.c
+@@ -2,7 +2,7 @@
+ * route This file contains an implementation of the command
+ * that manages the IP routing table in the kernel.
+ *
+- * Version: $Id: route.c,v 1.9 2001/04/15 14:41:17 pb Exp $
++ * Version: $Id: route.c,v 1.10 2002/07/30 05:24:20 ecki Exp $
+ *
+ * Maintainer: Bernd 'eckes' Eckenfels, <net-tools@lina.inka.de>
+ *
+@@ -10,7 +10,7 @@
+ * (derived from FvK's 'route.c 1.70 01/04/94')
+ *
+ * Modifications:
+- * Johannes Stille: for Net-2Debugged by
++ * Johannes Stille: for Net-2Debugged by
+ * <johannes@titan.os.open.de>
+ * Linus Torvalds: Misc Changes
+ * Alan Cox: add the new mtu/window stuff
+@@ -19,7 +19,7 @@
+ * {1.80} Bernd Eckenfels: reject, metric, irtt, 1.2.x support.
+ * {1.81} Bernd Eckenfels: reject routes need a dummy device
+ *960127 {1.82} Bernd Eckenfels: 'mod' and 'dyn' 'reinstate' added
+- *960129 {1.83} Bernd Eckenfels: resolve and getsock now in lib/,
++ *960129 {1.83} Bernd Eckenfels: resolve and getsock now in lib/,
+ * REJECT displays '-' as gatway.
+ *960202 {1.84} Bernd Eckenfels: net-features support added
+ *960203 {1.85} Bernd Eckenfels: "#ifdef' in '#if' for net-features
+@@ -60,20 +60,21 @@
+ #include "intl.h"
+ #include "pathnames.h"
+ #include "version.h"
++#include "util.h"
+
+ #define DFLT_AF "inet"
+
+ #define FEATURE_ROUTE
+ #include "lib/net-features.h" /* needs some of the system includes above! */
+
+-char *Release = RELEASE, *Version = "route 1.98 (2001-04-15)";
++static char *Release = RELEASE;
+
+-int opt_n = 0; /* numerical output flag */
+-int opt_v = 0; /* debugging output flag */
+-int opt_e = 1; /* 1,2,3=type of routetable */
+-int opt_fc = 0; /* routing cache/FIB */
+-int opt_h = 0; /* help selected */
+-struct aftype *ap; /* current address family */
++int opt_n = 0; // numerical output FLAG_NUM | FLAG_SYM
++int opt_v = 0; // debugging output flag
++int opt_e = 1; // 1,2,3=type of routetable
++int opt_fc = 0; // routing cache/FIB
++int opt_h = 0; // help selected
++struct aftype *ap; // selected address family
+
+ static void usage(void)
+ {
+@@ -89,7 +90,7 @@ static void usage(void)
+ fprintf(stderr, _(" -F, --fib display Forwarding Information Base (default)\n"));
+ fprintf(stderr, _(" -C, --cache display routing cache instead of FIB\n\n"));
+
+- fprintf(stderr, _(" <AF>=Use '-A <af>' or '--<af>'; default: %s\n"), DFLT_AF);
++ fprintf(stderr, _(" <AF>=Use -4, -6, '-A <af>' or '--<af>'; default: %s\n"), DFLT_AF);
+ fprintf(stderr, _(" List of possible address families (which support routing):\n"));
+ print_aflist(1); /* 1 = routeable */
+ exit(E_USAGE);
+@@ -98,7 +99,7 @@ static void usage(void)
+
+ static void version(void)
+ {
+- fprintf(stderr, "%s\n%s\n%s\n", Release, Version, Features);
++ fprintf(stderr, "%s\n%s\n", Release, Features);
+ exit(E_VERSION);
+ }
+
+@@ -135,14 +136,12 @@ int main(int argc, char **argv)
+
+ /* getopts and -net wont work :-/ */
+ for (tmp = argv; *tmp; tmp++) {
+- if (!strcmp(*tmp, "-net"))
+- strcpy(*tmp, "#net");
+- else if (!strcmp(*tmp, "-host"))
+- strcpy(*tmp, "#host");
++ if (!strcmp(*tmp, "-net") || !strcmp(*tmp, "-host"))
++ (*tmp)[0]='#';
+ }
+
+ /* Fetch the command-line arguments. */
+- while ((i = getopt_long(argc, argv, "A:eCFhnNVv?", longopts, &lop)) != EOF)
++ while ((i = getopt_long(argc, argv, "A:eCFhnN64Vv?", longopts, &lop)) != EOF)
+ switch (i) {
+ case -1:
+ break;
+@@ -176,6 +175,14 @@ int main(int argc, char **argv)
+ if ((i = aftrans_opt(optarg)))
+ exit(i);
+ break;
++ case '6':
++ if ((i = aftrans_opt("inet6")))
++ exit(i);
++ break;
++ case '4':
++ if ((i = aftrans_opt("inet")))
++ exit(i);
++ break;
+ case 'V':
+ version();
+ case 'h':
+diff --git a/slattach.c b/slattach.c
+index cedae1b..5c81584 100644
+--- a/slattach.c
++++ b/slattach.c
+@@ -40,7 +40,7 @@
+ #include <limits.h>
+ #include <pwd.h>
+ #include <signal.h>
+-#include <stdlib.h>
++#include <stdlib.h>
+ #include <string.h>
+ #include <unistd.h>
+ #include <getopt.h>
+@@ -62,26 +62,27 @@
+ #include "util.h"
+
+ #ifndef _PATH_LOCKD
+-#define _PATH_LOCKD "/var/lock" /* lock files */
++#define _PATH_LOCKD "/var/lock" /* lock files */
+ #endif
+ #ifndef _UID_UUCP
+-#define _UID_UUCP "uucp" /* owns locks */
++#define _UID_UUCP "uucp" /* owns locks */
++#endif
++#ifndef _PATH_DEVPTMX
++#define _PATH_DEVPTMX "/dev/ptmx" /* pseudo-terminal master */
+ #endif
+
+
+ #define DEF_PROTO "cslip"
+
+
+-const char *Release = RELEASE,
+- *Version = "@(#) slattach 1.21 (1999-11-21)",
+- *Signature = "net-tools, Fred N. van Kempen et al.";
++static char *Release = RELEASE, *Signature = "Fred N. van Kempen et al.";
+
+
+ struct {
+ const char *speed;
+ int code;
+ } tty_speeds[] = { /* table of usable baud rates */
+- { "50", B50 }, { "75", B75 },
++ { "50", B50 }, { "75", B75 },
+ { "110", B110 }, { "300", B300 },
+ { "600", B600 }, { "1200", B1200 },
+ { "2400", B2400 }, { "4800", B4800 },
+@@ -108,6 +109,7 @@ struct termios tty_saved, /* saved TTY device state */
+ int tty_sdisc, /* saved TTY line discipline */
+ tty_ldisc, /* current TTY line discipline */
+ tty_fd = -1; /* TTY file descriptor */
++char * path_pts = NULL; /* slave pseudo-terminal device */
+ int opt_c = 0; /* "command" to run at exit */
+ int opt_e = 0; /* "activate only" flag */
+ int opt_h = 0; /* "hangup" on carrier loss */
+@@ -115,7 +117,7 @@ int opt_h = 0; /* "hangup" on carrier loss */
+ int opt_k = 0; /* "keepalive" value */
+ #endif
+ int opt_l = 0; /* "lock it" flag */
+-int opt_L = 0; /* clocal flag */
++int opt_L = 0; /* 3-wire mode flag */
+ int opt_m = 0; /* "set RAW mode" flag */
+ int opt_n = 0; /* "set No Mesg" flag */
+ #ifdef SIOCSOUTFILL
+@@ -149,7 +151,7 @@ tty_already_locked(char *nam)
+ /* that lock. */
+ i = fscanf(fd, "%d", &pid);
+ (void) fclose(fd);
+-
++
+ if (i != 1) /* Lock file format's wrong! Kill't */
+ return(0);
+
+@@ -195,15 +197,18 @@ tty_lock(char *path, int mode)
+ return(-1);
+ }
+
+- (void) close(fd);
+-
+ /* Make sure UUCP owns the lockfile. Required by some packages. */
+ if ((pw = getpwnam(_UID_UUCP)) == NULL) {
+ if (opt_q == 0) fprintf(stderr, _("slattach: tty_lock: UUCP user %s unknown!\n"),
+ _UID_UUCP);
++ (void) close(fd);
+ return(0); /* keep the lock anyway */
+ }
+- (void) chown(saved_path, pw->pw_uid, pw->pw_gid);
++ if (fchown(fd, pw->pw_uid, pw->pw_gid))
++ /* keep the lock anyway */;
++
++ (void) close(fd);
++
+ saved_lock = 1;
+ } else { /* unlock */
+ if (saved_lock != 1) return(0);
+@@ -294,7 +299,7 @@ tty_set_parity(struct termios *tty, char *parity)
+ switch(toupper(*parity)) {
+ case 'N':
+ tty->c_cflag &= ~(PARENB | PARODD);
+- break;
++ break;
+
+ case 'O':
+ tty->c_cflag &= ~(PARENB | PARODD);
+@@ -342,9 +347,11 @@ tty_set_raw(struct termios *tty)
+ tty->c_oflag = (0); /* output flags */
+ tty->c_lflag = (0); /* local flags */
+ speed = (tty->c_cflag & CBAUD); /* save current speed */
+- tty->c_cflag = (CRTSCTS | HUPCL | CREAD); /* UART flags */
+- if (opt_L)
++ tty->c_cflag = (HUPCL | CREAD); /* UART flags */
++ if (opt_L)
+ tty->c_cflag |= CLOCAL;
++ else
++ tty->c_cflag |= CRTSCTS;
+ tty->c_cflag |= speed; /* restore speed */
+ return(0);
+ }
+@@ -410,7 +417,7 @@ static int
+ tty_get_name(char *name)
+ {
+ if (ioctl(tty_fd, SIOCGIFNAME, name) < 0) {
+- if (opt_q == 0)
++ if (opt_q == 0)
+ perror("tty_get_name");
+ return(-errno);
+ }
+@@ -464,7 +471,7 @@ tty_open(char *name, const char *speed)
+ if (name != NULL) {
+ if (name[0] != '/') {
+ if (strlen(name + 6) > sizeof(pathbuf)) {
+- if (opt_q == 0) fprintf(stderr,
++ if (opt_q == 0) fprintf(stderr,
+ _("slattach: tty name too long\n"));
+ return (-1);
+ }
+@@ -488,7 +495,28 @@ tty_open(char *name, const char *speed)
+ return(-errno);
+ }
+ tty_fd = fd;
+- if (opt_d) printf("slattach: tty_open: %s (fd=%d) ", path_open, fd);
++ if (opt_d) printf("slattach: tty_open: %s (fd=%d)\n", path_open, fd);
++ if (!strcmp(path_open, _PATH_DEVPTMX)) {
++ if (opt_d) printf("slattach: tty_open: trying to grantpt and unlockpt\n");
++ if (grantpt(fd) < 0) {
++ if (opt_q == 0) fprintf(stderr,
++ "slattach: tty_open: grantpt: %s\n", strerror(errno));
++ return(-errno);
++ }
++ if (unlockpt(fd) < 0) {
++ if (opt_q == 0) fprintf(stderr,
++ "slattach: tty_open: unlockpt: %s\n", strerror(errno));
++ return(-errno);
++ }
++ path_pts = ptsname(fd);
++ if (path_pts == NULL) {
++ if (opt_q == 0) fprintf(stderr,
++ "slattach: tty_open: ptsname: %s\n", strerror(errno));
++ return(-errno);
++ }
++ if (opt_d) printf("slattach: tty_open: %s: slave pseudo-terminal is %s\n",
++ path_open, path_pts);
++ }
+ } else {
+ tty_fd = 0;
+ }
+@@ -504,7 +532,7 @@ tty_open(char *name, const char *speed)
+ if (tty_get_disc(&tty_sdisc) < 0) {
+ if (opt_q == 0) fprintf(stderr, _("slattach: tty_open: cannot get current line disc!\n"));
+ return(-errno);
+- }
++ }
+ tty_ldisc = tty_sdisc;
+
+ /* Put this terminal line in a 8-bit transparent mode. */
+@@ -565,15 +593,15 @@ usage(void)
+ "[-c cmd] [-s speed] [-p protocol] tty | -\n"
+ " slattach -V | --version\n";
+
+- fprintf(stderr, usage_msg);
+- exit(1);
++ fputs(usage_msg, stderr);
++ exit(E_USAGE);
+ }
+
+
+-static void
++static void
+ version(void)
+ {
+- printf("%s\n%s\n%s\n", Release, Version, Signature);
++ printf("%s\n%s\n", Release, Signature);
+ exit(E_VERSION);
+ }
+
+@@ -581,7 +609,7 @@ version(void)
+ int
+ main(int argc, char *argv[])
+ {
+- char path_buf[128];
++ char path_buf[128] = "";
+ char *path_dev;
+ char buff[128];
+ const char *speed = NULL;
+@@ -593,7 +621,6 @@ main(int argc, char *argv[])
+ { NULL, 0, NULL, 0 }
+ };
+
+- strcpy(path_buf, "");
+ path_dev = path_buf;
+
+ /* Scan command line for any arguments. */
+@@ -667,7 +694,7 @@ main(int argc, char *argv[])
+ usage();
+ /*NOTREACHED*/
+ }
+-
++
+ if (setvbuf(stdout,0,_IOLBF,0)) {
+ if (opt_q == 0) fprintf(stderr, _("slattach: setvbuf(stdout,0,_IOLBF,0) : %s\n"),
+ strerror(errno));
+@@ -703,6 +730,7 @@ main(int argc, char *argv[])
+ if (tty_get_name(buff)) { return(3); }
+ printf(_("%s started"), proto);
+ if (path_dev != NULL) printf(_(" on %s"), path_dev);
++ if (path_pts != NULL) printf(_(" ptsname %s"), path_pts);
+ printf(_(" interface %s\n"), buff);
+ }
+
+@@ -738,7 +766,7 @@ main(int argc, char *argv[])
+
+ tty_close();
+ if(extcmd) /* external command on exit */
+- system(extcmd);
++ exit(system(extcmd));
+ }
+ exit(0);
+ }
+diff --git a/statistics.c b/statistics.c
+index a878df8..fe8ee4e 100644
+--- a/statistics.c
++++ b/statistics.c
+@@ -1,9 +1,9 @@
+ /*
+- * Copyright 1997,1999,2000 Andi Kleen. Subject to the GPL.
+- * $Id: statistics.c,v 1.14 2001/02/02 18:01:23 pb Exp $
+- * 19980630 - i18n - Arnaldo Carvalho de Melo <acme@conectiva.com.br>
+- * 19981113 - i18n fixes - Arnaldo Carvalho de Melo <acme@conectiva.com.br>
+- * 19990101 - added net/netstat, -t, -u, -w supprt - Bernd Eckenfels
++ * Copyright 1997,1999,2000 Andi Kleen. Subject to the GPL.
++ * $Id: statistics.c,v 1.23 2010-10-29 19:24:36 ecki Exp $
++ * 19980630 - i18n - Arnaldo Carvalho de Melo <acme@conectiva.com.br>
++ * 19981113 - i18n fixes - Arnaldo Carvalho de Melo <acme@conectiva.com.br>
++ * 19990101 - added net/netstat, -t, -u, -w supprt - Bernd Eckenfels
+ */
+ #include <ctype.h>
+ #include <stdio.h>
+@@ -11,6 +11,7 @@
+ #include <string.h>
+ #include "config.h"
+ #include "intl.h"
++#include "proc.h"
+
+ /* #define WARN 1 */
+
+@@ -35,26 +36,26 @@ struct entry {
+ enum State type;
+ };
+
+-struct statedesc {
++struct statedesc {
+ int indent;
+- char *title;
+-};
++ char *title;
++};
+
+-struct statedesc states[] = {
++struct statedesc states[] = {
+ [number] = { 4, NULL },
+- [opt_number] = { 4, NULL },
++ [opt_number] = { 4, NULL },
+ [i_forward] = { 4, NULL },
+ [i_inp_icmp] = { 8, N_("ICMP input histogram:") },
+ [i_outp_icmp] = { 8, N_("ICMP output histogram:") },
+ [MaxState] = {0},
+-};
++};
+
+ static enum State state;
+
+ #define I_STATIC (1<<16) /* static configuration option. */
+ #define I_TITLE (1<<17)
+
+-/*
++/*
+ * XXX check against the snmp mib rfc.
+ *
+ * Don't mark the first field as translatable! It's a snmp MIB standard.
+@@ -63,54 +64,115 @@ static enum State state;
+ struct entry Iptab[] =
+ {
+ {"Forwarding", N_("Forwarding is %s"), i_forward | I_STATIC},
+- {"DefaultTTL", N_("Default TTL is %u"), number | I_STATIC},
+- {"InReceives", N_("%u total packets received"), number},
+- {"InHdrErrors", N_("%u with invalid headers"), opt_number},
+- {"InAddrErrors", N_("%u with invalid addresses"), opt_number},
+- {"ForwDatagrams", N_("%u forwarded"), number},
+- {"InUnknownProtos", N_("%u with unknown protocol"), opt_number},
+- {"InDiscards", N_("%u incoming packets discarded"), number},
+- {"InDelivers", N_("%u incoming packets delivered"), number},
+- {"OutRequests", N_("%u requests sent out"), number}, /*? */
+- {"OutDiscards", N_("%u outgoing packets dropped"), opt_number},
+- {"OutNoRoutes", N_("%u dropped because of missing route"), opt_number},
+- {"ReasmTimeout", N_("%u fragments dropped after timeout"), opt_number},
+- {"ReasmReqds", N_("%u reassemblies required"), opt_number}, /* ? */
+- {"ReasmOKs", N_("%u packets reassembled ok"), opt_number},
+- {"ReasmFails", N_("%u packet reassembles failed"), opt_number},
+- {"FragOKs", N_("%u fragments received ok"), opt_number},
+- {"FragFails", N_("%u fragments failed"), opt_number},
+- {"FragCreates", N_("%u fragments created"), opt_number}
++ {"DefaultTTL", N_("Default TTL is %llu"), number | I_STATIC},
++ {"InReceives", N_("%llu total packets received"), number},
++ {"InHdrErrors", N_("%llu with invalid headers"), opt_number},
++ {"InAddrErrors", N_("%llu with invalid addresses"), opt_number},
++ {"ForwDatagrams", N_("%llu forwarded"), number},
++ {"InUnknownProtos", N_("%llu with unknown protocol"), opt_number},
++ {"InDiscards", N_("%llu incoming packets discarded"), number},
++ {"InDelivers", N_("%llu incoming packets delivered"), number},
++ {"OutRequests", N_("%llu requests sent out"), number}, /*? */
++ {"OutDiscards", N_("%llu outgoing packets dropped"), opt_number},
++ {"OutNoRoutes", N_("%llu dropped because of missing route"), opt_number},
++ {"ReasmTimeout", N_("%llu fragments dropped after timeout"), opt_number},
++ {"ReasmReqds", N_("%llu reassemblies required"), opt_number}, /* ? */
++ {"ReasmOKs", N_("%llu packets reassembled ok"), opt_number},
++ {"ReasmFails", N_("%llu packet reassembles failed"), opt_number},
++ {"FragOKs", N_("%llu fragments received ok"), opt_number},
++ {"FragFails", N_("%llu fragments failed"), opt_number},
++ {"FragCreates", N_("%llu fragments created"), opt_number}
++};
++
++struct entry Ip6tab[] =
++{
++ {"Ip6InReceives", N_("%llu total packets received"), number},
++ {"Ip6InHdrErrors", N_("%llu with invalid headers"), opt_number},
++ {"Ip6InTooBigErrors", N_("%llu with packets too big"), opt_number},
++ {"Ip6InNoRoutes", N_("%llu incoming packets with no route"), opt_number},
++ {"Ip6InAddrErrors", N_("%llu with invalid addresses"), opt_number},
++ {"Ip6InUnknownProtos", N_("%llu with unknown protocol"), opt_number},
++ {"Ip6InTruncatedPkts", N_("%llu with truncated packets"), opt_number},
++ {"Ip6InDiscards", N_("%llu incoming packets discarded"), number},
++ {"Ip6InDelivers", N_("%llu incoming packets delivered"), number},
++ {"Ip6OutForwDatagrams", N_("%llu forwarded"), number},
++ {"Ip6OutRequests", N_("%llu requests sent out"), number}, /*? */
++ {"Ip6OutDiscards", N_("%llu outgoing packets dropped"), opt_number},
++ {"Ip6OutNoRoutes", N_("%llu dropped because of missing route"), opt_number},
++ {"Ip6ReasmTimeout", N_("%llu fragments dropped after timeout"), opt_number},
++ {"Ip6ReasmReqds", N_("%llu reassemblies required"), opt_number}, /* ? */
++ {"Ip6ReasmOKs", N_("%llu packets reassembled ok"), opt_number},
++ {"Ip6ReasmFails", N_("%llu packet reassembles failed"), opt_number},
++ {"Ip6FragOKs", N_("%llu fragments received ok"), opt_number},
++ {"Ip6FragFails", N_("%llu fragments failed"), opt_number},
++ {"Ip6FragCreates", N_("%llu fragments created"), opt_number},
++ {"Ip6InMcastPkts", N_("%llu incoming multicast packets"), opt_number},
++ {"Ip6OutMcastPkts", N_("%llu outgoing multicast packets"), opt_number}
+ };
+
+ struct entry Icmptab[] =
+ {
+- {"InMsgs", N_("%u ICMP messages received"), number},
+- {"InErrors", N_("%u input ICMP message failed."), number},
+- {"InDestUnreachs", N_("destination unreachable: %u"), i_inp_icmp | I_TITLE},
+- {"InTimeExcds", N_("timeout in transit: %u"), i_inp_icmp | I_TITLE},
+- {"InParmProbs", N_("wrong parameters: %u"), i_inp_icmp | I_TITLE}, /*? */
+- {"InSrcQuenchs", N_("source quenches: %u"), i_inp_icmp | I_TITLE},
+- {"InRedirects", N_("redirects: %u"), i_inp_icmp | I_TITLE},
+- {"InEchos", N_("echo requests: %u"), i_inp_icmp | I_TITLE},
+- {"InEchoReps", N_("echo replies: %u"), i_inp_icmp | I_TITLE},
+- {"InTimestamps", N_("timestamp request: %u"), i_inp_icmp | I_TITLE},
+- {"InTimestampReps", N_("timestamp reply: %u"), i_inp_icmp | I_TITLE},
+- {"InAddrMasks", N_("address mask request: %u"), i_inp_icmp | I_TITLE}, /*? */
+- {"InAddrMaskReps", N_("address mask replies: %u"), i_inp_icmp | I_TITLE}, /*? */
+- {"OutMsgs", N_("%u ICMP messages sent"), number},
+- {"OutErrors", N_("%u ICMP messages failed"), number},
+- {"OutDestUnreachs", N_("destination unreachable: %u"), i_outp_icmp | I_TITLE},
+- {"OutTimeExcds", N_("time exceeded: %u"), i_outp_icmp | I_TITLE},
+- {"OutParmProbs", N_("wrong parameters: %u"), i_outp_icmp | I_TITLE}, /*? */
+- {"OutSrcQuenchs", N_("source quench: %u"), i_outp_icmp | I_TITLE},
+- {"OutRedirects", N_("redirect: %u"), i_outp_icmp | I_TITLE},
+- {"OutEchos", N_("echo request: %u"), i_outp_icmp | I_TITLE},
+- {"OutEchoReps", N_("echo replies: %u"), i_outp_icmp | I_TITLE},
+- {"OutTimestamps", N_("timestamp requests: %u"), i_outp_icmp | I_TITLE},
+- {"OutTimestampReps", N_("timestamp replies: %u"), i_outp_icmp | I_TITLE},
+- {"OutAddrMasks", N_("address mask requests: %u"), i_outp_icmp | I_TITLE},
+- {"OutAddrMaskReps", N_("address mask replies: %u"), i_outp_icmp | I_TITLE},
++ {"InMsgs", N_("%llu ICMP messages received"), number},
++ {"InErrors", N_("%llu input ICMP message failed."), number},
++ {"InDestUnreachs", N_("destination unreachable: %llu"), i_inp_icmp | I_TITLE},
++ {"InTimeExcds", N_("timeout in transit: %llu"), i_inp_icmp | I_TITLE},
++ {"InParmProbs", N_("wrong parameters: %llu"), i_inp_icmp | I_TITLE}, /*? */
++ {"InSrcQuenchs", N_("source quenches: %llu"), i_inp_icmp | I_TITLE},
++ {"InRedirects", N_("redirects: %llu"), i_inp_icmp | I_TITLE},
++ {"InEchos", N_("echo requests: %llu"), i_inp_icmp | I_TITLE},
++ {"InEchoReps", N_("echo replies: %llu"), i_inp_icmp | I_TITLE},
++ {"InTimestamps", N_("timestamp request: %llu"), i_inp_icmp | I_TITLE},
++ {"InTimestampReps", N_("timestamp reply: %llu"), i_inp_icmp | I_TITLE},
++ {"InAddrMasks", N_("address mask request: %llu"), i_inp_icmp | I_TITLE}, /*? */
++ {"InAddrMaskReps", N_("address mask replies: %llu"), i_inp_icmp | I_TITLE}, /*? */
++ {"OutMsgs", N_("%llu ICMP messages sent"), number},
++ {"OutErrors", N_("%llu ICMP messages failed"), number},
++ {"OutDestUnreachs", N_("destination unreachable: %llu"), i_outp_icmp | I_TITLE},
++ {"OutTimeExcds", N_("time exceeded: %llu"), i_outp_icmp | I_TITLE},
++ {"OutParmProbs", N_("wrong parameters: %llu"), i_outp_icmp | I_TITLE}, /*? */
++ {"OutSrcQuenchs", N_("source quench: %llu"), i_outp_icmp | I_TITLE},
++ {"OutRedirects", N_("redirect: %llu"), i_outp_icmp | I_TITLE},
++ {"OutEchos", N_("echo request: %llu"), i_outp_icmp | I_TITLE},
++ {"OutEchoReps", N_("echo replies: %llu"), i_outp_icmp | I_TITLE},
++ {"OutTimestamps", N_("timestamp requests: %llu"), i_outp_icmp | I_TITLE},
++ {"OutTimestampReps", N_("timestamp replies: %llu"), i_outp_icmp | I_TITLE},
++ {"OutAddrMasks", N_("address mask requests: %llu"), i_outp_icmp | I_TITLE},
++ {"OutAddrMaskReps", N_("address mask replies: %llu"), i_outp_icmp | I_TITLE},
++};
++
++struct entry Icmp6tab[] =
++{
++ {"Icmp6InMsgs", N_("%llu ICMP messages received"), number},
++ {"Icmp6InErrors", N_("%llu input ICMP message failed."), number},
++ {"Icmp6InDestUnreachs", N_("destination unreachable: %llu"), i_inp_icmp | I_TITLE},
++ {"Icmp6InPktTooBigs", N_("packets too big: %llu"), i_inp_icmp | I_TITLE},
++ {"Icmp6InTimeExcds", N_("received ICMPv6 time exceeded: %llu"), i_inp_icmp | I_TITLE},
++ {"Icmp6InParmProblems", N_("parameter problem: %llu"), i_inp_icmp | I_TITLE},
++ {"Icmp6InEchos", N_("echo requests: %llu"), i_inp_icmp | I_TITLE},
++ {"Icmp6InEchoReplies", N_("echo replies: %llu"), i_inp_icmp | I_TITLE},
++ {"Icmp6InGroupMembQueries", N_("group member queries: %llu"), i_inp_icmp | I_TITLE},
++ {"Icmp6InGroupMembResponses", N_("group member responses: %llu"), i_inp_icmp | I_TITLE},
++ {"Icmp6InGroupMembReductions", N_("group member reductions: %llu"), i_inp_icmp | I_TITLE},
++ {"Icmp6InRouterSolicits", N_("router solicits: %llu"), i_inp_icmp | I_TITLE},
++ {"Icmp6InRouterAdvertisements", N_("router advertisement: %llu"), i_inp_icmp | I_TITLE},
++ {"Icmp6InNeighborSolicits", N_("neighbour solicits: %llu"), i_inp_icmp | I_TITLE},
++ {"Icmp6InNeighborAdvertisements", N_("neighbour advertisement: %llu"), i_inp_icmp | I_TITLE},
++ {"Icmp6InRedirects", N_("redirects: %llu"), i_inp_icmp | I_TITLE},
++ {"Icmp6OutMsgs", N_("%llu ICMP messages sent"), number},
++ {"Icmp6OutDestUnreachs", N_("destination unreachable: %llu"), i_outp_icmp | I_TITLE},
++ {"Icmp6OutPktTooBigs", N_("packets too big: %llu"), i_outp_icmp | I_TITLE},
++ {"Icmp6OutTimeExcds", N_("sent ICMPv6 time exceeded: %llu"), i_outp_icmp | I_TITLE},
++ {"Icmp6OutParmProblems", N_("parameter problem: %llu"), i_outp_icmp | I_TITLE},
++ {"Icmp6OutEchos", N_("echo requests: %llu"), i_outp_icmp | I_TITLE},
++ {"Icmp6OutEchoReplies", N_("echo replies: %llu"), i_outp_icmp | I_TITLE},
++ {"Icmp6OutGroupMembQueries", N_("group member queries: %llu"), i_outp_icmp | I_TITLE},
++ {"Icmp6OutGroupMembResponses", N_("group member responses: %llu"), i_outp_icmp | I_TITLE},
++ {"Icmp6OutGroupMembReductions", N_("group member reductions: %llu"), i_outp_icmp | I_TITLE},
++ {"Icmp6OutRouterSolicits", N_("router solicits: %llu"), i_outp_icmp | I_TITLE},
++ {"Icmp6OutRouterAdvertisements ", N_("router advertisement: %llu"), i_outp_icmp | I_TITLE},
++ {"Icmp6OutNeighborSolicits", N_("neighbor solicits: %llu"), i_outp_icmp | I_TITLE},
++ {"Icmp6OutNeighborAdvertisements", N_("neighbor advertisements: %llu"), i_outp_icmp | I_TITLE},
++ {"Icmp6OutRedirects", N_("redirects: %llu"), i_outp_icmp | I_TITLE},
+ };
+
+ struct entry Tcptab[] =
+@@ -119,79 +181,129 @@ struct entry Tcptab[] =
+ {"RtoMin", "", number},
+ {"RtoMax", "", number},
+ {"MaxConn", "", number},
+- {"ActiveOpens", N_("%u active connections openings"), number},
+- {"PassiveOpens", N_("%u passive connection openings"), number},
+- {"AttemptFails", N_("%u failed connection attempts"), number},
+- {"EstabResets", N_("%u connection resets received"), number},
+- {"CurrEstab", N_("%u connections established"), number},
+- {"InSegs", N_("%u segments received"), number},
+- {"OutSegs", N_("%u segments send out"), number},
+- {"RetransSegs", N_("%u segments retransmited"), number},
+- {"InErrs", N_("%u bad segments received."), number},
+- {"OutRsts", N_("%u resets sent"), number},
++ {"ActiveOpens", N_("%llu active connections openings"), number},
++ {"PassiveOpens", N_("%llu passive connection openings"), number},
++ {"AttemptFails", N_("%llu failed connection attempts"), number},
++ {"EstabResets", N_("%llu connection resets received"), number},
++ {"CurrEstab", N_("%llu connections established"), number},
++ {"InSegs", N_("%llu segments received"), number},
++ {"OutSegs", N_("%llu segments send out"), number},
++ {"RetransSegs", N_("%llu segments retransmited"), number},
++ {"InErrs", N_("%llu bad segments received."), number},
++ {"OutRsts", N_("%llu resets sent"), number},
+ };
+
+ struct entry Udptab[] =
+ {
+- {"InDatagrams", N_("%u packets received"), number},
+- {"NoPorts", N_("%u packets to unknown port received."), number},
+- {"InErrors", N_("%u packet receive errors"), number},
+- {"OutDatagrams", N_("%u packets sent"), number},
++ {"InDatagrams", N_("%llu packets received"), number},
++ {"NoPorts", N_("%llu packets to unknown port received."), number},
++ {"InErrors", N_("%llu packet receive errors"), number},
++ {"OutDatagrams", N_("%llu packets sent"), number},
++ {"RcvbufErrors", N_("%llu receive buffer errors"), number},
++ {"SndbufErrors", N_("%llu send buffer errors"), number},
++ };
++
++struct entry Udp6tab[] =
++{
++ {"Udp6InDatagrams", N_("%llu packets received"), number},
++ {"Udp6NoPorts", N_("%llu packets to unknown port received."), number},
++ {"Udp6InErrors", N_("%llu packet receive errors"), number},
++ {"Udp6OutDatagrams", N_("%llu packets sent"), number},
+ };
+
+ struct entry Tcpexttab[] =
+ {
+- {"SyncookiesSent", N_("%u SYN cookies sent"), opt_number},
+- {"SyncookiesRecv", N_("%u SYN cookies received"), opt_number},
+- {"SyncookiesFailed", N_("%u invalid SYN cookies received"), opt_number},
+-
+- { "EmbryonicRsts", N_("%u resets received for embryonic SYN_RECV sockets"),
+- opt_number },
+- { "PruneCalled", N_("%u packets pruned from receive queue because of socket"
+- " buffer overrun"), opt_number },
++ {"SyncookiesSent", N_("%llu SYN cookies sent"), opt_number},
++ {"SyncookiesRecv", N_("%llu SYN cookies received"), opt_number},
++ {"SyncookiesFailed", N_("%llu invalid SYN cookies received"), opt_number},
++
++ { "EmbryonicRsts", N_("%llu resets received for embryonic SYN_RECV sockets"),
++ opt_number },
++ { "PruneCalled", N_("%llu packets pruned from receive queue because of socket"
++ " buffer overrun"), opt_number },
+ /* obsolete: 2.2.0 doesn't do that anymore */
+- { "RcvPruned", N_("%u packets pruned from receive queue"), opt_number },
+- { "OfoPruned", N_("%u packets dropped from out-of-order queue because of"
+- " socket buffer overrun"), opt_number },
+- { "OutOfWindowIcmps", N_("%u ICMP packets dropped because they were "
+- "out-of-window"), opt_number },
+- { "LockDroppedIcmps", N_("%u ICMP packets dropped because"
++ { "RcvPruned", N_("%llu packets pruned from receive queue"), opt_number },
++ { "OfoPruned", N_("%llu packets dropped from out-of-order queue because of"
++ " socket buffer overrun"), opt_number },
++ { "OutOfWindowIcmps", N_("%llu ICMP packets dropped because they were "
++ "out-of-window"), opt_number },
++ { "LockDroppedIcmps", N_("%llu ICMP packets dropped because"
+ " socket was locked"), opt_number },
+- { "TW", N_("%u TCP sockets finished time wait in fast timer"), opt_number },
+- { "TWRecycled", N_("%u time wait sockets recycled by time stamp"), opt_number },
+- { "TWKilled", N_("%u TCP sockets finished time wait in slow timer"), opt_number },
+- { "PAWSPassive", N_("%u passive connections rejected because of"
++ { "TW", N_("%llu TCP sockets finished time wait in fast timer"), opt_number },
++ { "TWRecycled", N_("%llu time wait sockets recycled by time stamp"), opt_number },
++ { "TWKilled", N_("%llu TCP sockets finished time wait in slow timer"), opt_number },
++ { "PAWSPassive", N_("%llu passive connections rejected because of"
+ " time stamp"), opt_number },
+- { "PAWSActive", N_("%u active connections rejected because of "
++ { "PAWSActive", N_("%llu active connections rejected because of "
+ "time stamp"), opt_number },
+- { "PAWSEstab", N_("%u packets rejects in established connections because of"
++ { "PAWSEstab", N_("%llu packets rejects in established connections because of"
+ " timestamp"), opt_number },
+- { "DelayedACKs", N_("%u delayed acks sent"), opt_number },
+- { "DelayedACKLocked", N_("%u delayed acks further delayed because of"
++ { "DelayedACKs", N_("%llu delayed acks sent"), opt_number },
++ { "DelayedACKLocked", N_("%llu delayed acks further delayed because of"
+ " locked socket"), opt_number },
+- { "DelayedACKLost", N_("Quick ack mode was activated %u times"), opt_number },
+- { "ListenOverflows", N_("%u times the listen queue of a socket overflowed"),
++ { "DelayedACKLost", N_("Quick ack mode was activated %llu times"), opt_number },
++ { "ListenOverflows", N_("%llu times the listen queue of a socket overflowed"),
+ opt_number },
+- { "ListenDrops", N_("%u SYNs to LISTEN sockets ignored"), opt_number },
+- { "TCPPrequeued", N_("%u packets directly queued to recvmsg prequeue."),
++ { "ListenDrops", N_("%llu SYNs to LISTEN sockets dropped"), opt_number },
++ { "TCPPrequeued", N_("%llu packets directly queued to recvmsg prequeue."),
+ opt_number },
+- { "TCPDirectCopyFromBacklog", N_("%u packets directly received"
+- " from backlog"), opt_number },
+- { "TCPDirectCopyFromPrequeue", N_("%u packets directly received"
+- " from prequeue"), opt_number },
+- { "TCPPrequeueDropped", N_("%u packets dropped from prequeue"), opt_number },
+- { "TCPHPHits", N_("%u packets header predicted"), number },
+- { "TCPHPHitsToUser", N_("%u packets header predicted and "
++ { "TCPDirectCopyFromBacklog", N_("%llu bytes directly in process context from backlog"), opt_number },
++ { "TCPDirectCopyFromPrequeue", N_("%llu bytes directly received in process context from prequeue"),
++ opt_number },
++ { "TCPPrequeueDropped", N_("%llu packets dropped from prequeue"), opt_number },
++ { "TCPHPHits", N_("%llu packet headers predicted"), number },
++ { "TCPHPHitsToUser", N_("%llu packets header predicted and "
+ "directly queued to user"), opt_number },
+- { "SockMallocOOM", N_("Ran %u times out of system memory during "
+- "packet sending"), opt_number },
++ { "SockMallocOOM", N_("Ran %llu times out of system memory during "
++ "packet sending"), opt_number },
++ { "TCPPureAcks", N_("%llu acknowledgments not containing data payload received"), opt_number },
++ { "TCPHPAcks", N_("%llu predicted acknowledgments"), opt_number },
++ { "TCPRenoRecovery", N_("%llu times recovered from packet loss due to fast retransmit"), opt_number },
++ { "TCPSackRecovery", N_("%llu times recovered from packet loss by selective acknowledgements"), opt_number },
++ { "TCPSACKReneging", N_("%llu bad SACK blocks received"), opt_number },
++ { "TCPFACKReorder", N_("Detected reordering %llu times using FACK"), opt_number },
++ { "TCPSACKReorder", N_("Detected reordering %llu times using SACK"), opt_number },
++ { "TCPTSReorder", N_("Detected reordering %llu times using time stamp"), opt_number },
++ { "TCPRenoReorder", N_("Detected reordering %llu times using reno fast retransmit"), opt_number },
++ { "TCPFullUndo", N_("%llu congestion windows fully recovered without slow start"), opt_number },
++ { "TCPPartialUndo", N_("%llu congestion windows partially recovered using Hoe heuristic"), opt_number },
++ { "TCPDSackUndo", N_("%llu congestion window recovered without slow start using DSACK"), opt_number },
++ { "TCPLossUndo", N_("%llu congestion windows recovered without slow start after partial ack"), opt_number },
++ { "TCPLostRetransmits", N_("%llu retransmits lost"), opt_number },
++ { "TCPRenoFailures", N_("%llu timeouts after reno fast retransmit"), opt_number },
++ { "TCPSackFailures", N_("%llu timeouts after SACK recovery"), opt_number },
++ { "TCPLossFailures", N_("%llu timeouts in loss state"), opt_number },
++ { "TCPFastRetrans", N_("%llu fast retransmits"), opt_number },
++ { "TCPForwardRetrans", N_("%llu forward retransmits"), opt_number },
++ { "TCPSlowStartRetrans", N_("%llu retransmits in slow start"), opt_number },
++ { "TCPTimeouts", N_("%llu other TCP timeouts"), opt_number },
++ { "TCPRenoRecoveryFailed", N_("%llu reno fast retransmits failed"), opt_number },
++ { "TCPSackRecoveryFail", N_("%llu SACK retransmits failed"), opt_number },
++ { "TCPSchedulerFailed", N_("%llu times receiver scheduled too late for direct processing"), opt_number },
++ { "TCPRcvCollapsed", N_("%llu packets collapsed in receive queue due to low socket buffer"), opt_number },
++ { "TCPDSACKOldSent", N_("%llu DSACKs sent for old packets"), opt_number },
++ { "TCPDSACKOfoSent", N_("%llu DSACKs sent for out of order packets"), opt_number },
++ { "TCPDSACKRecv", N_("%llu DSACKs received"), opt_number },
++ { "TCPDSACKOfoRecv", N_("%llu DSACKs for out of order packets received"), opt_number },
++ { "TCPAbortOnSyn", N_("%llu connections reset due to unexpected SYN"), opt_number },
++ { "TCPAbortOnData", N_("%llu connections reset due to unexpected data"), opt_number },
++ { "TCPAbortOnClose", N_("%llu connections reset due to early user close"), opt_number },
++ { "TCPAbortOnMemory", N_("%llu connections aborted due to memory pressure"), opt_number },
++ { "TCPAbortOnTimeout", N_("%llu connections aborted due to timeout"), opt_number },
++ { "TCPAbortOnLinger", N_("%llu connections aborted after user close in linger timeout"), opt_number },
++ { "TCPAbortFailed", N_("%llu times unable to send RST due to no memory"), opt_number },
++ { "TCPMemoryPressures", N_("TCP ran low on memory %llu times"), opt_number },
++ { "TCPLoss", N_("%llu TCP data loss events"), opt_number },
++ { "TCPDSACKUndo", N_("%llu congestion windows recovered without slow start by DSACK"),
++ opt_number },
++ { "TCPRenoRecoveryFail", N_("%llu classic Reno fast retransmits failed"), opt_number },
+ };
+
+ struct tabtab {
+ char *title;
+ struct entry *tab;
+ size_t size;
+- int *flag;
++ int *flag;
+ };
+
+ struct tabtab snmptabs[] =
+@@ -204,6 +316,15 @@ struct tabtab snmptabs[] =
+ {NULL}
+ };
+
++struct tabtab snmp6tabs[] =
++{
++ {"Ip6", Ip6tab, sizeof(Ip6tab), &f_raw},
++ {"Icmp6", Icmp6tab, sizeof(Icmp6tab), &f_raw},
++ {"Udp6", Udp6tab, sizeof(Udp6tab), &f_udp},
++ {"Tcp6", Tcptab, sizeof(Tcptab), &f_tcp},
++ {NULL}
++};
++
+ /* XXX IGMP */
+
+ int cmpentries(const void *a, const void *b)
+@@ -211,18 +332,19 @@ int cmpentries(const void *a, const void *b)
+ return strcmp(((struct entry *) a)->title, ((struct entry *) b)->title);
+ }
+
+-void printval(struct tabtab *tab, char *title, int val)
++void printval(struct tabtab *tab, char *title, unsigned long long val)
+ {
+ struct entry *ent = NULL, key;
+ int type;
+ char buf[512];
+
+ key.title = title;
+- if (tab->tab)
++ if (tab->tab)
+ ent = bsearch(&key, tab->tab, tab->size / sizeof(struct entry),
+ sizeof(struct entry), cmpentries);
+ if (!ent) { /* try our best */
+- printf("%*s%s: %d\n", states[state].indent, "", title, val);
++ if (val)
++ printf("%*s%s: %llu\n", states[state].indent, "", title, val);
+ return;
+ }
+ type = ent->type;
+@@ -242,7 +364,7 @@ void printval(struct tabtab *tab, char *title, int val)
+ buf[0] = '\0';
+ switch (type) {
+ case opt_number:
+- if (val == 0)
++ if (val == 0)
+ break;
+ /*FALL THOUGH*/
+ case number:
+@@ -272,7 +394,7 @@ struct tabtab *newtable(struct tabtab *tabs, char *title)
+ {
+ struct tabtab *t;
+ static struct tabtab dummytab;
+-
++
+ for (t = tabs; t->title; t++) {
+ if (!strcmp(title, t->title)) {
+ if (*(t->flag))
+@@ -281,22 +403,25 @@ struct tabtab *newtable(struct tabtab *tabs, char *title)
+ return t;
+ }
+ }
+- if (!f_unknown)
+- return NULL;
++ if (!f_unknown)
++ return NULL;
+ printf("%s:\n", _(title));
+ dummytab.title = title;
+- dummytab.flag = &f_unknown;
++ dummytab.flag = &f_unknown;
+ return &dummytab;
+ }
+
+-void process_fd(FILE *f)
++int process_fd(FILE *f, int all, char *filter)
+ {
+- char buf1[1024], buf2[1024];
++ char buf1[2048], buf2[2048];
+ char *sp, *np, *p;
+ while (fgets(buf1, sizeof buf1, f)) {
+ int endflag;
+ struct tabtab *tab;
+
++ if (buf1[0] == '\n') // skip empty first line in 2.6 kernels
++ continue;
++
+ if (!fgets(buf2, sizeof buf2, f))
+ break;
+ sp = strchr(buf1, ':');
+@@ -305,6 +430,10 @@ void process_fd(FILE *f)
+ goto formaterr;
+ *sp = '\0';
+
++ if (!all)
++ if (strncmp(buf1, filter, strlen(filter)))
++ continue;
++
+ tab = newtable(snmptabs, buf1);
+ if (tab == NULL) {
+ printf("unknown %s\n", buf1);
+@@ -315,8 +444,8 @@ void process_fd(FILE *f)
+
+ endflag = 0;
+ while (!endflag) {
+- sp += strspn(sp, " \t\n");
+- np += strspn(np, " \t\n");
++ sp += strspn(sp, " \t\n");
++ np += strspn(np, " \t\n");
+ /*if (*np == '\0') goto formaterr; */
+
+ p = sp+strcspn(sp, " \t\n");
+@@ -324,51 +453,116 @@ void process_fd(FILE *f)
+ endflag = 1;
+ *p = '\0';
+
+- if (*sp != '\0' && *(tab->flag))
+- printval(tab, sp, strtoul(np, &np, 10));
++ if (*sp != '\0' && *(tab->flag))
++ printval(tab, sp, strtoull(np, &np, 10));
+
+ sp = p + 1;
+ }
+ }
+- return;
+-
++ return 0;
++
+ formaterr:
+- perror(_("error parsing /proc/net/snmp"));
+- return;
++ return -1;
+ }
+
++void cpytitle(char *original, char *new)
++{
++ char *ptr = original;
++ while(*ptr != '6' && *ptr != '\0') {
++ *new = *ptr;
++ new++;
++ ptr++;
++ }
++ *new = *ptr;
++ new++;
++ *new = '\0';
++}
++
++void process6_fd(FILE *f)
++{
++ char buf1[1024],buf2[50],buf3[1024];
++ unsigned long long val;
++ struct tabtab *tab = NULL;
++ int cpflg = 0;
++
++ while (fgets(buf1, sizeof buf1, f)) {
++ sscanf(buf1, "%s %llu", buf2, &val);
++ if(!cpflg) {
++ cpytitle(buf2, buf3);
++ tab = newtable(snmp6tabs, buf3);
++ cpflg = 1;
++ }
++ if(!strstr(buf2, buf3)) {
++ cpytitle(buf2, buf3);
++ tab = newtable(snmp6tabs, buf3);
++ }
++ if (*(tab->flag))
++ printval(tab, buf2, val);
++ }
++
++}
+
+ void parsesnmp(int flag_raw, int flag_tcp, int flag_udp)
+ {
+ FILE *f;
+
+ f_raw = flag_raw; f_tcp = flag_tcp; f_udp = flag_udp;
+-
+- f = fopen("/proc/net/snmp", "r");
++
++ f = proc_fopen("/proc/net/snmp");
+ if (!f) {
+ perror(_("cannot open /proc/net/snmp"));
+ return;
+ }
+- process_fd(f);
++
++ if (process_fd(f, 1, NULL) < 0)
++ fprintf(stderr, _("Problem while parsing /proc/net/snmp\n"));
+
+ if (ferror(f))
+ perror("/proc/net/snmp");
+
+ fclose(f);
+
+- f = fopen("/proc/net/netstat", "r");
++ f = proc_fopen("/proc/net/netstat");
+
+ if (f) {
+- process_fd(f);
++ if (process_fd(f, 1, NULL) <0)
++ fprintf(stderr, _("Problem while parsing /proc/net/netstat\n"));
+
+ if (ferror(f))
+ perror("/proc/net/netstat");
+-
++
+ fclose(f);
+ }
+ return;
+ }
+-
++
++void parsesnmp6(int flag_raw, int flag_tcp, int flag_udp)
++{
++ FILE *f;
++
++ f_raw = flag_raw; f_tcp = flag_tcp; f_udp = flag_udp;
++
++ f = fopen("/proc/net/snmp6", "r");
++ if (!f) {
++ perror(_("cannot open /proc/net/snmp6"));
++ return;
++ }
++ process6_fd(f);
++ if (ferror(f))
++ perror("/proc/net/snmp6");
++
++ fclose(f);
++ f = fopen("/proc/net/snmp", "r");
++ if (!f) {
++ perror(_("cannot open /proc/net/snmp"));
++ return;
++ }
++ process_fd(f, 0, "Tcp");
++ if (ferror(f))
++ perror("/proc/net/snmp");
++
++ fclose(f);
++}
+
+ void inittab(void)
+ {
+@@ -379,3 +573,13 @@ void inittab(void)
+ qsort(t->tab, t->size / sizeof(struct entry),
+ sizeof(struct entry), cmpentries);
+ }
++
++void inittab6(void)
++{
++ struct tabtab *t;
++
++ for (t = snmp6tabs; t->title; t++)
++ qsort(t->tab, t->size / sizeof(struct entry),
++ sizeof(struct entry), cmpentries);
++}
++