diff options
author | Natanael Copa <ncopa@alpinelinux.org> | 2013-06-17 13:58:59 +0000 |
---|---|---|
committer | Natanael Copa <ncopa@alpinelinux.org> | 2013-06-17 13:58:59 +0000 |
commit | 770d5f439f9590a8e2b9a7fb8ba14374037b4a8e (patch) | |
tree | 456b8e8c0988b6cb15863ffe5f8180c6624e3f1d /main | |
parent | 03564c306b51a96133c1291969898abebfde6e6c (diff) | |
download | aports-770d5f439f9590a8e2b9a7fb8ba14374037b4a8e.tar.bz2 aports-770d5f439f9590a8e2b9a7fb8ba14374037b4a8e.tar.xz |
main/net-tools: moved from testing
we are mostly interested in mii-tool
Diffstat (limited to 'main')
-rw-r--r-- | main/net-tools/APKBUILD | 91 | ||||
-rw-r--r-- | main/net-tools/git.patch | 25400 |
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); ++} ++ |