Bug 259841 - On RHEL 4 Update 5 ethtool-1.8-4 does not advertise all supported speeds for autonegotiation
On RHEL 4 Update 5 ethtool-1.8-4 does not advertise all supported speeds for ...
Status: CLOSED CURRENTRELEASE
Product: Red Hat Enterprise Linux 4
Classification: Red Hat
Component: ethtool (Show other bugs)
4.5
x86_64 All
medium Severity low
: ---
: ---
Assigned To: Jeff Garzik
Brian Brock
:
Depends On:
Blocks:
  Show dependency treegraph
 
Reported: 2007-08-28 08:21 EDT by Narendra K
Modified: 2013-07-02 22:34 EDT (History)
4 users (show)

See Also:
Fixed In Version: 4.6
Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of:
Environment:
Last Closed: 2008-02-25 11:14:26 EST
Type: ---
Regression: ---
Mount Type: ---
Documentation: ---
CRM:
Verified Versions:
Category: ---
oVirt Team: ---
RHEL 7.3 requirements from Atomic Host:


Attachments (Terms of Use)
Changes made to ethtool.c (929 bytes, patch)
2007-08-28 08:25 EDT, Narendra K
no flags Details | Diff

  None (edit)
Description Narendra K 2007-08-28 08:21:58 EDT
Description of problem: On RHEL 4 Update 5 ethtool-1.8-4 does not check for if 
speed wanted is 1000Mbps and sets the advertising_wanted incorrectly when 
setting autonegotiation without forcing.

Version-Release number of selected component (if applicable):
kernel version:2.6.9-55.ELsmp
ethtool version: 1.8 release: 4

How reproducible: always

Steps to Reproduce:
1. Walk through the ethtool.c souce
2. Observer the following code snippet
 
     if (autoneg_wanted == AUTONEG_ENABLE) {
           if (speed_wanted == SPEED_10 && duplex_wanted == DUPLEX_HALF)
               advertising_wanted = ADVERTISED_10baseT_Half;
           else if (speed_wanted == SPEED_10 &&
           duplex_wanted == DUPLEX_FULL)
               advertising_wanted = ADVERTISED_10baseT_Full;
           else if (speed_wanted == SPEED_100 &&
           duplex_wanted == DUPLEX_HALF)
                advertising_wanted = ADVERTISED_100baseT_Half;
           else if (speed_wanted == SPEED_100 &&
           duplex_wanted == DUPLEX_FULL)
               advertising_wanted = ADVERTISED_100baseT_Full;
    else
        /* auto negotiate without forcing */
        advertising_wanted = ADVERTISED_100baseT_Full | 
            ADVERTISED_100baseT_Half |
            ADVERTISED_10baseT_Full | 
            ADVERTISED_100baseT_Half;

}

  
Actual results: 
1.The code segment above does not check if speed_wanted == SPEED_1000.
2.Under autonegotiate without forcing section  ADVERTISED_100baseT_Half is set 
twice, ADVERTISED_10baseT_Half is not set and 1000Mbps is not considered at 
all.

Expected results: The above mentioned facts need to be considered when setting 
advertising_wanted field.

Additional info: This is not seen in ethtool-5 in RHEL5.
Comment 1 Narendra K 2007-08-28 08:25:56 EDT
Created attachment 176081 [details]
Changes made to ethtool.c
Comment 2 RHEL Product and Program Management 2008-02-01 14:03:13 EST
This request was evaluated by Red Hat Product Management for
inclusion, but this component is not scheduled to be updated in
the current Red Hat Enterprise Linux release. If you would like
this request to be reviewed for the next minor release, ask your
support representative to set the next rhel-x.y flag to "?".
Comment 3 Gary Case 2008-02-13 12:13:41 EST
Dell would still like this issue to be addressed. Please consider fixing this in
the next update.
Comment 4 Jay Turner 2008-02-25 03:36:57 EST
Appears this got fixed behind the scenes in RHEL4.6 which shipped with
ethtool-6-1 which includes the following:

        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 &&
                        advertising_wanted = ADVERTISED_10baseT_Half;
                else if (speed_wanted == SPEED_10 &&
                         duplex_wanted == DUPLEX_FULL)
                        advertising_wanted = ADVERTISED_10baseT_Full;
                else if (speed_wanted == SPEED_100 &&
                         duplex_wanted == DUPLEX_HALF)
                        advertising_wanted = ADVERTISED_100baseT_Half;
                else if (speed_wanted == SPEED_100 &&
                         duplex_wanted == DUPLEX_FULL)
                        advertising_wanted = ADVERTISED_100baseT_Full;
                else if (speed_wanted == SPEED_1000 &&
                         duplex_wanted == DUPLEX_HALF)
                        advertising_wanted = ADVERTISED_1000baseT_Half;
                else if (speed_wanted == SPEED_1000 &&
                         duplex_wanted == DUPLEX_FULL)
                        advertising_wanted = ADVERTISED_1000baseT_Full;
                else if (speed_wanted == SPEED_2500 &&
                         duplex_wanted == DUPLEX_FULL)
                        advertising_wanted = ADVERTISED_2500baseX_Full;
                else if (speed_wanted == SPEED_10000 &&
                         duplex_wanted == DUPLEX_FULL)
                        advertising_wanted = ADVERTISED_10000baseT_Full;
                else 
                        advertising_wanted = ADVERTISED_10000baseT_Full;
                else
                        /* auto negotiate without forcing,
                         * all supported speed will be assigned in do_sset()
                         */
                        advertising_wanted = 0;

        }

Can we close out this request now?

Note You need to log in before you can comment on or make changes to this bug.