diff options
-rw-r--r-- | ethtool.8 | 24 | ||||
-rw-r--r-- | ethtool.c | 12 |
2 files changed, 35 insertions, 1 deletions
@@ -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 @@ -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 && |