summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Rękorajski2007-09-13 15:14:50 (GMT)
committercvs2git2012-06-24 12:13:13 (GMT)
commitae56cb056510295e90001300525fb663ab980975 (patch)
tree76e903107abc56ea8b9915684b57f1244c6407c8
parent9870ce3bef37767ab2840984c8cec413693ca15d (diff)
downloadnet-tools-auto/th/net-tools-1_60-19.zip
net-tools-auto/th/net-tools-1_60-19.tar.gz
Changed files: net-tools-gcc34.patch -> 1.4 net-tools-mii-tool-GigE.patch -> 1.4
-rw-r--r--net-tools-gcc34.patch54
-rw-r--r--net-tools-mii-tool-GigE.patch341
2 files changed, 395 insertions, 0 deletions
diff --git a/net-tools-gcc34.patch b/net-tools-gcc34.patch
new file mode 100644
index 0000000..d2ac85d
--- /dev/null
+++ b/net-tools-gcc34.patch
@@ -0,0 +1,54 @@
+--- net-tools-1.60/lib/inet_sr.c.orig 2000-02-20 22:46:45.000000000 +0100
++++ net-tools-1.60/lib/inet_sr.c 2004-03-08 11:48:59.122481000 +0100
+@@ -104,7 +104,6 @@
+ isnet = 1; break;
+ case 2:
+ isnet = 0; break;
+- default:
+ }
+
+ /* Fill in the other fields. */
+--- net-tools-1.60/hostname.c.orig 2001-04-08 19:04:23.000000000 +0200
++++ net-tools-1.60/hostname.c 2004-03-08 11:51:41.000000000 +0100
+@@ -31,6 +31,7 @@
+ * your option) any later version.
+ */
+ #include <stdio.h>
++#include <stdlib.h>
+ #include <unistd.h>
+ #include <getopt.h>
+ #include <string.h>
+@@ -97,7 +98,6 @@
+ case EINVAL:
+ fprintf(stderr, _("%s: name too long\n"), program_name);
+ break;
+- default:
+ }
+ exit(1);
+ };
+@@ -116,7 +116,6 @@
+ case EINVAL:
+ fprintf(stderr, _("%s: name too long\n"), program_name);
+ break;
+- default:
+ }
+ exit(1);
+ };
+@@ -173,7 +172,6 @@
+ *p = '\0';
+ printf("%s\n", hp->h_name);
+ break;
+- default:
+ }
+ }
+
+--- net-tools-1.60/lib/inet6_sr.c.orig 2006-05-03 11:58:01.000000000 +0200
++++ net-tools-1.60/lib/inet6_sr.c 2006-05-03 12:00:49.000000000 +0200
+@@ -33,6 +33,7 @@
+ #include "pathnames.h"
+ #include "intl.h"
+ #include "net-features.h"
++#include "util.h"
+
+
+
diff --git a/net-tools-mii-tool-GigE.patch b/net-tools-mii-tool-GigE.patch
new file mode 100644
index 0000000..aae4f17
--- /dev/null
+++ b/net-tools-mii-tool-GigE.patch
@@ -0,0 +1,341 @@
+===================================================================
+RCS file: /cvsroot/net-tools/net-tools/include/mii.h,v
+retrieving revision 1.2
+retrieving revision 1.3
+diff -u -r1.2 -r1.3
+--- net-tools/net-tools/include/mii.h 2003/06/28 03:19:04 1.2
++++ net-tools/net-tools/include/mii.h 2006/09/27 20:59:19 1.3
+@@ -41,6 +41,7 @@
+ #define MII_BMCR_RESTART 0x0200
+ #define MII_BMCR_DUPLEX 0x0100
+ #define MII_BMCR_COLTEST 0x0080
++#define MII_BMCR_SPEED1000 0x0040
+
+ /* Basic Mode Status Register */
+ #define MII_BMSR 0x01
+@@ -86,4 +87,17 @@
+ #define MII_ANER_PAGE_RX 0x0002
+ #define MII_ANER_LP_AN_ABLE 0x0001
+
++#define MII_CTRL1000 0x09
++#define MII_BMCR2_1000FULL 0x0200
++#define MII_BMCR2_1000HALF 0x0100
++
++#define MII_STAT1000 0x0a
++#define MII_LPA2_1000LOCALOK 0x2000
++#define MII_LPA2_1000REMRXOK 0x1000
++#define MII_LPA2_1000FULL 0x0800
++#define MII_LPA2_1000HALF 0x0400
++
++/* Last register we need for show_basic_mii() */
++#define MII_BASIC_MAX (MII_STAT1000+1)
++
+ #endif /* _LINUX_MII_H */
+===================================================================
+===================================================================
+RCS file: /cvsroot/net-tools/net-tools/mii-tool.c,v
+retrieving revision 1.1
+retrieving revision 1.9
+diff -u -r1.1 -r1.9
+--- net-tools/net-tools/mii-tool.c 2000/05/21 13:44:36 1.1
++++ net-tools/net-tools/mii-tool.c 2006/09/27 20:59:18 1.9
+@@ -29,8 +29,7 @@
+ 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";
++static char Version[] = "$Id$\n(Author: David Hinds based on Donald Becker's mii-diag)";
+
+ #include <unistd.h>
+ #include <stdlib.h>
+@@ -46,16 +45,19 @@
+ #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 "version.h"
+
+ #define MAX_ETH 8 /* Maximum # of interfaces */
+
+ /* Table of known MII's */
+-static struct {
++static const struct {
+ u_short id1, id2;
+ char *name;
+ } mii_id[] = {
+@@ -74,6 +76,9 @@
+ { 0x0181, 0x4410, "Quality QS6612" },
+ { 0x0282, 0x1c50, "SMSC 83C180" },
+ { 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]))
+
+@@ -137,40 +142,48 @@
+
+ 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", {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} },
++
++ { "1000baseT-HD", {0, MII_BMCR2_1000HALF} },
++ { "1000baseT-FD", {0, MII_BMCR2_1000FULL} },
++ { "1000baseT", {0, MII_BMCR2_1000HALF|MII_BMCR2_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;
++ !(mask & ~MII_AN_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 +192,24 @@
+
+ /*--------------------------------------------------------------------*/
+
+-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 & MII_BMCR_SPEED1000) {
++ if (mask2 & MII_BMCR2_1000HALF) {
++ strcat(buf, " ");
++ strcat(buf, "1000baseT-HD");
++ if (best) goto out;
++ }
++ if (mask2 & MII_BMCR2_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 +218,7 @@
+ if (best) break;
+ }
+ }
++ out:
+ if (mask & (1<<5))
+ strcat(buf, " flow-control");
+ return buf;
+@@ -201,15 +228,15 @@
+ {
+ char buf[100];
+ 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++)
++ for (i = 0; i < ((verbose > 1) ? 32 : MII_BASIC_MAX); i++)
+ mii_val[i] = mdio_read(sock, i);
+
+- 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;
+ }
+@@ -217,6 +244,7 @@
+ /* Descriptive rename. */
+ bmcr = mii_val[MII_BMCR]; bmsr = mii_val[MII_BMSR];
+ advert = mii_val[MII_ANAR]; lkpar = mii_val[MII_ANLPAR];
++ bmcr2 = mii_val[MII_CTRL1000]; lpa2 = mii_val[MII_STAT1000];
+
+ sprintf(buf, "%s: ", ifr.ifr_name);
+ if (bmcr & MII_BMCR_AN_ENA) {
+@@ -224,7 +252,7 @@
+ if (advert & lkpar) {
+ strcat(buf, (lkpar & MII_AN_ACK) ?
+ "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, ");
+@@ -234,8 +262,10 @@
+ }
+ } else {
+ sprintf(buf+strlen(buf), "%s Mbit, %s duplex, ",
+- (bmcr & MII_BMCR_100MBIT) ? "100" : "10",
+- (bmcr & MII_BMCR_DUPLEX) ? "full" : "half");
++ ((bmcr2 & (MII_BMCR2_1000HALF | MII_BMCR2_1000FULL)) & lpa2 >> 2)
++ ? "1000"
++ : (bmcr & MII_BMCR_100MBIT) ? "100" : "10",
++ (bmcr & MII_BMCR_DUPLEX) ? "full" : "half");
+ }
+ strcat(buf, (bmsr & MII_BMSR_LINK_VALID) ? "link ok" : "no link");
+
+@@ -296,12 +326,13 @@
+ if (bmsr & MII_BMSR_REMOTE_FAULT)
+ 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));
++ printf("\n capabilities:%s", media_list(bmsr >> 6, bmcr2, 0));
++ printf("\n advertising: %s", media_list(advert, lpa2 >> 2, 0));
+ if (lkpar & MII_AN_ABILITY_MASK)
+- printf("\n link partner:%s", media_list(lkpar, 0));
++ printf("\n link partner:%s", media_list(lkpar, bmcr2, 0));
+ printf("\n");
+ }
++ fflush(stdout);
+ return 0;
+ }
+
+@@ -329,7 +360,7 @@
+ printf("resetting the transceiver...\n");
+ mdio_write(skfd, MII_BMCR, MII_BMCR_RESET);
+ }
+- if (nway_advertise) {
++ if (nway_advertise > 0) {
+ mdio_write(skfd, MII_ANAR, nway_advertise | 1);
+ opt_restart = 1;
+ }
+@@ -379,27 +410,38 @@
+ /*--------------------------------------------------------------------*/
+
+ 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] [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"
++"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", Version, RELEASE);
++ exit(5); /* 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 +453,10 @@
+ }
+ /* 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 +464,7 @@
+ }
+
+ if (opt_version)
+- printf(version);
++ version();
+
+ /* Open a basic socket. */
+ if ((skfd = socket(AF_INET, SOCK_DGRAM,0)) < 0) {
+@@ -426,6 +472,9 @@
+ exit(-1);
+ }
+
++ if (verbose > 1)
++ printf("Using SIOCGMIIPHY=0x%x\n", SIOCGMIIPHY);
++
+ /* No remaining args means show all interfaces. */
+ if (optind == argc) {
+ ret = 1;