summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Garzik <jeff@garzik.org>2006-09-19 15:04:17 -0400
committerJeff Garzik <jeff@garzik.org>2006-09-19 15:04:17 -0400
commit5860312ac4ae67da856df19b31bd26ada6927955 (patch)
treec16ce31921aafcc24192a94172c8a4f7e15fd5df
parent9fecbca7a032cd644d76a8b35ae4fe743e7b2b16 (diff)
parentbfcb014b3b18dce0e3f744b0ad919eef47b9d25d (diff)
downloadethtool-5860312ac4ae67da856df19b31bd26ada6927955.tar.gz
Merge branch 'e1000' of git://lost.foo-projects.org/~jtkirshe/ethtool into tmp
-rw-r--r--ethtool.824
-rw-r--r--ethtool.c12
2 files changed, 35 insertions, 1 deletions
diff --git a/ethtool.8 b/ethtool.8
index 888a7d8..679f6bc 100644
--- a/ethtool.8
+++ b/ethtool.8
@@ -176,6 +176,8 @@ ethtool \- Display or change ethernet card settings
.B2 duplex half full
.B4 port tp aui bnc mii fibre
.B2 autoneg on off
+.RB [ advertise
+.IR N ]
.RB [ phyad
.IR N ]
.B2 xcvr internal external
@@ -327,6 +329,28 @@ Select device port.
Specify if autonegotiation is enabled. In the usual case it is, but might
cause some problems with some network devices, so you can turn it off.
.TP
+.BI advertise \ N
+Set the speed and duplex advertised by autonegotiation. The argument is
+a hexidecimal value using one or a combination of the following values:
+.RS
+.PD 0
+.TP 3
+.BR "0x01" " 10 Half"
+.TP 3
+.BR "0x02" " 10 Full"
+.TP 3
+.BR "0x04" " 100 Half"
+.TP 3
+.BR "0x08" " 100 Full"
+.TP 3
+.BR "0x10" " 1000 Half" "(not supported by IEEE standards)"
+.TP 3
+.BR "0x20" " 1000 Full"
+.TP 3
+.BR "0x3F" " Auto"
+.PD
+.RE
+.TP
.BI phyad \ N
PHY address.
.TP
diff --git a/ethtool.c b/ethtool.c
index 87e22ab..b7f189a 100644
--- a/ethtool.c
+++ b/ethtool.c
@@ -99,6 +99,7 @@ static struct option {
" [ duplex half|full ]\n"
" [ port tp|aui|bnc|mii|fibre ]\n"
" [ autoneg on|off ]\n"
+ " [ advertise %%x ]\n"
" [ phyad %%d ]\n"
" [ xcvr internal|external ]\n"
" [ wol p|u|m|b|a|g|s|d... ]\n"
@@ -549,6 +550,15 @@ static void parse_cmdline(int argc, char **argp)
show_usage(1);
}
break;
+ } else if (!strcmp(argp[i], "advertise")) {
+ gset_changed = 1;
+ i += 1;
+ if (i >= argc)
+ show_usage(1);
+ advertising_wanted = strtol(argp[i], NULL, 16);
+ if (advertising_wanted < 0)
+ show_usage(1);
+ break;
} else if (!strcmp(argp[i], "phyad")) {
gset_changed = 1;
i += 1;
@@ -601,7 +611,7 @@ static void parse_cmdline(int argc, char **argp)
}
}
- if (autoneg_wanted == AUTONEG_ENABLE){
+ if ((autoneg_wanted == AUTONEG_ENABLE) && (advertising_wanted < 0)) {
if (speed_wanted == SPEED_10 && duplex_wanted == DUPLEX_HALF)
advertising_wanted = ADVERTISED_10baseT_Half;
else if (speed_wanted == SPEED_10 &&