[Bug 262316] em(4) does not autonegotiate when fixed media is set

From: <bugzilla-noreply_at_freebsd.org>
Date: Fri, 04 Mar 2022 20:56:42 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=262316

--- Comment #4 from Stefan Eßer <se@FreeBSD.org> ---
(In reply to J.R. Oldroyd from comment #2)

Quoting the Duplex_mismatch article:

-------------------------------------------------------------------
Duplex mismatch due to autonegotiation

When a device set to autonegotiation is connected to a device that is not using
autonegotiation, the autonegotiation process fails. The autonegotiating end of
the connection is still able to correctly detect the speed of the other end,
but cannot correctly detect the duplex mode. For backward compatibility with
Ethernet hubs, the standard requires the autonegotiating device to use half
duplex in these conditions. Therefore, the autonegotiating end of the
connection uses half duplex while the non-negotiating peer is locked at full
duplex, and this is a duplex mismatch.
-------------------------------------------------------------------

I do not have access to a current version of the standard (802.3-2018), but
when I last worked on an Ethernet driver the standard required a device to
either participate in auto-negotiation or to be manually configured. In the
latter case it does not respond to the auto-negotiation bursts from the other
device, and therefore there is no mechanism that could let the other device
detect wether the manually configured device is set to half-duplex or
full-duplex.

The standard does therefore require the device set to perform the
auto-negotiation to select half-duplex mode. This mode offers less performance
than full-duplex on both ends, but prevents an extreme amount of collisions to
impact the network at large.

There are not any hubs left, today, but AFAIK the above cited text is still
part of the standard.

A manually configured Ethernet device must ignore the auto-negotiation request.
And half-duplex has been specified as the safe default mode.

Use auto-negotiation on all interfaces. It has been specified more than 20
years ago, and if really should not work correctly, then manually configure
*all* affected interfaces.

I'm not going to close the PR again at this time - but I'll oppose any commit
that violates the Ethernet standard.

Please cite the IEEE-802.3 clause that changed the previously specified
behavior in case of one auto-negotiating and one manually configured device, if
this has actually been changed in a later version of the standard than I had
access to.

-- 
You are receiving this mail because:
You are the assignee for the bug.