Bug#532879: net-tools: mii-tool without parameter only lists eth* devices
Olaf
olaf.westrik at gmx.net
Fri Jun 12 12:37:01 UTC 2009
Package: net-tools
Version: 1.60-22
Severity: wishlist
Tags: patch
Hi,
mii-tool without any parameters only scans for eth%d devices.
This misses (among other things) devices that are renamed by using udevs
70-persistent-net.rules
This patch makes mii-tool use the same for_all_interfaces method as used
in ifconfig. Apply on top of Debian net-tools_1.60-23.diff.gz patchset.
--- net-tools-1.60/Makefile 2009-06-12 12:39:13.000000000 +0200
+++ net-tools_mii-tool/Makefile 2009-06-12 12:38:32.000000000 +0200
@@ -218,7 +218,7 @@
$(CC) $(LDFLAGS) -o ipmaddr ipmaddr.o $(NLIB) $(RESLIB)
mii-tool: mii-tool.o
- $(CC) $(LDFLAGS) -o mii-tool mii-tool.o
+ $(CC) $(LDFLAGS) -o mii-tool mii-tool.o $(NLIB)
installbin:
install -m 0755 -d ${BASEDIR}/sbin
--- net-tools-1.60/mii-tool.c 2009-06-12 13:34:32.000000000 +0200
+++ net-tools_mii-tool/mii-tool.c 2009-06-12 13:37:34.000000000 +0200
@@ -31,6 +31,8 @@
static char Version[] = "$Id: mii-tool.c,v 1.9 2006/09/27 20:59:18 ecki Exp $\n(Author: David Hinds based on Donald Becker's mii-diag)";
+#include "config.h"
+
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
@@ -45,6 +47,7 @@
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <net/if.h>
+#include <net/if_arp.h>
#include <linux/sockios.h>
#ifndef __GLIBC__
@@ -54,6 +57,9 @@
#include "mii.h"
#include "version.h"
+#include "interface.h"
+#include "sockets.h"
+
#define MAX_ETH 8 /* Maximum # of interfaces */
/* Table of known MII's */
@@ -109,8 +115,6 @@
static int nway_advertise = 0;
static int fixed_speed = 0;
static int override_phy = -1;
-
-static int skfd = -1; /* AF_INET socket for ioctl() calls. */
static struct ifreq ifr;
/*--------------------------------------------------------------------*/
@@ -409,6 +413,19 @@
/*--------------------------------------------------------------------*/
+int do_mii_print(struct interface *ife, void *cookie)
+{
+ int res;
+
+ res = do_if_fetch(ife);
+ if ((res >= 0) && (ife->type == ARPHRD_ETHER)) {
+ do_one_xcvr(skfd, ife->name, 1);
+ }
+ return res;
+}
+
+/*--------------------------------------------------------------------*/
+
const char *usage =
"usage: %s [-VvRrwl] [-A media,... | -F media] [interface ...]\n"
" -V, --version display version information\n"
@@ -477,11 +494,16 @@
/* No remaining args means show all interfaces. */
if (optind == argc) {
+ int opt_a = 1;
ret = 1;
- for (i = 0; i < MAX_ETH; i++) {
- sprintf(s, "eth%d", i);
- ret &= do_one_xcvr(skfd, s, 1);
+ /* Create a channel to the NET kernel. */
+ if ((skfd = sockets_open(0)) < 0) {
+ perror("socket");
+ exit(1);
}
+ ret = for_all_interfaces(do_mii_print, &opt_a);
+ (void) close(skfd);
+
if (ret)
fprintf(stderr, "no MII interfaces found\n");
} else {
-- System Information:
Debian Release: 5.0.1
APT prefers stable
APT policy: (500, 'stable')
Architecture: i386 (i686)
Kernel: Linux 2.6.26-2-686 (SMP w/2 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash
Versions of packages net-tools depends on:
ii libc6 2.7-18 GNU C Library: Shared libraries
net-tools recommends no packages.
net-tools suggests no packages.
-- no debconf information
More information about the Pkg-net-tools-maintainers
mailing list