opnsense-src/sys
Kevin Bowling 645c45e297 e1000: Try auto-negotiation for fixed 100 or 10 configuration
This is a retread of https://reviews.freebsd.org/D34449 which I think
will fix the issue for the remote side not supporting autoneg.  We now
attempt an autoneg, and if that fails fall back to the current code
that forces the link speed/duplex.

The original intent of this patch is to inform the remote switch of
duplex settings when we (the client) are specifying a fixed 10 or 100
speed.  Otherwise it may get the duplex setting wrong.

The tricky case is when the remote (switch) side is fixing its
speed AND duplex while disabling autoneg and we (client) need to do
the same, which still seems to be common enough at some ISPs.

Original commit message follows:
Currently if an e1000 interface is set to a fixed media configuration,
for gigabit, it will participate in auto-negotiation as required by
IEEE 802.3-2018 Clause 37. However, if set to fixed media configuration
for 100 or 10, it does NOT participate in auto-negotiation.

By my reading of Clauses 28 and 37, while auto-negotiation is optional
for 100 and 10, it is not prohibited and is, in fact, "highly
recommended".

This patch enables auto-negotiation for fixed 100 and 10 media
configuration, in a similar manner to that already performed for 1000.
I.e., the patch enables advertising of just the manually configured
settings with the goal of allowing the remote end to match the manually
configured settings if it has them available.

To be clear, this patch does NOT allow an em(4) interface that has been
manually configured with specific media settings to respond to
auto-negotiation by then configuring different parameters to those that
were manually configured. The intent of this patch is to fully comply
with the requirements of Clause 37, but for 100 and 10.

The need for this has arisen on an em(4) link where the other end is
under a different administrative control and is set to full
auto-negotiation. Due to the cable length GigE is not working well. It
is desired to set the em(4) end to "media 100baseTX mediatype
full-duplex" which does work when both ends are configured that way.
Currently, because em(4) does not participate in autoneg for this
setting, the remote defaults to half-duplex - i.e., there's a duplex
mismatch and things don't work. With this patch, em(4) would inform the
remote that it has only 100baseTX full, the remote would match that and
it will work.

Tested by:	Natalino Picone <natalino.picone@nozominetworks.com>
Tested by:	Franco Fichtner <franco@opnsense.org>
Tested by:	J.R. Oldroyd <fbsd@opal.com> (previous version)
Sponsored by:	Nozomi Networks
Sponsored by:	BBOX.io
Differential Revision:	https://reviews.freebsd.org/D47336

(cherry picked from commit bceec3d80a3caf9249e24247fb937674bf5b46b5)
2024-11-26 21:13:34 -07:00
..
amd64 vmm: Rename the amdiommu driver to amdviiommu 2024-11-09 21:31:28 +02:00
arm Revert "sound: Make device registration more intuitive" 2024-11-14 17:25:41 +01:00
arm64 iommu: eliminate iommu_free_ctx() 2024-11-09 21:31:28 +02:00
bsm timerfd: Move implementation from linux compat to sys/kern 2023-08-24 14:28:56 -06:00
cam da: Add quirk for ADATA USB Drive 2024-11-12 21:55:04 -07:00
cddl dtrace/amd64: Remove the dtrace_invop_callsite symbol 2024-10-04 15:56:42 +00:00
compat linux sendfile: Fix handling of non-blocking sockets 2024-11-20 21:41:08 +00:00
conf gve: Add DQO RDA support 2024-11-20 21:41:08 +00:00
contrib iwlwifi: script to extract firmware details 2024-11-14 01:53:12 +00:00
crypto openssl: Import OpenSSL 3.0.15. 2024-09-27 20:50:47 -07:00
ddb ddb: Add sysctl flag CTLFLAG_TUN to loader tunable 2023-10-12 12:08:18 +08:00
dev e1000: Try auto-negotiation for fixed 100 or 10 configuration 2024-11-26 21:13:34 -07:00
dts add allwinner overlays for enabling additional USB ports 2024-02-17 16:15:10 +02:00
fs nfs: Fallback to GID_NOGROUP on no groups 2024-11-15 11:47:43 +01:00
gdb sys: Remove $FreeBSD$: one-line .c pattern 2023-08-16 11:54:36 -06:00
geom g_eli: update comment for bool return type 2024-11-16 09:59:52 -05:00
gnu sys: Remove $FreeBSD$: one-line .c pattern 2023-08-16 11:54:36 -06:00
i386 sys: add conf/std.debug, generic debugging options 2024-10-09 10:44:35 +02:00
isa isa: Postpone removal of the non-PNP driver until 15 2023-10-30 08:55:08 +08:00
kern _utmx_op: don't recurse on chain busy 2024-11-21 22:52:10 -06:00
kgssapi nfscl/kgssapi: Fix Kerberized NFS mounts to pNFS servers 2023-12-23 17:03:58 -08:00
libkern arm64: Mark the armv8 crc32c as supporting BTI 2024-02-19 13:17:47 +00:00
modules gve: Add DQO RDA support 2024-11-20 21:41:08 +00:00
net pf: Make pf_get_translation() more expressive 2024-11-20 21:41:09 +00:00
net80211 net80211: scan/internal: change boolean argument from int to bool 2024-09-28 10:35:12 +00:00
netgraph bluetooth(3): Fix two typos in source code comments 2024-09-23 06:50:34 +02:00
netinet sctp: fix debug message 2024-11-06 10:13:14 +01:00
netinet6 inpcb: Constify address parameters to in6 pcb lookup routines 2024-11-22 21:23:47 +00:00
netipsec ipsec esp: avoid dereferencing freed secasindex 2024-03-04 02:27:17 +02:00
netlink netlink: Wrap long lines 2024-07-21 20:55:27 -04:00
netpfil pf: Add a sysctl to limit work done for rdr source port rewriting 2024-11-22 21:23:47 +00:00
netsmb netsmb: Stop checking for failures from malloc(M_WAITOK) 2024-09-30 12:44:16 +08:00
nfs sys: Remove $FreeBSD$: one-line .c pattern 2023-08-16 11:54:36 -06:00
nfsclient sys: Remove $FreeBSD$: one-line .h pattern 2023-08-16 11:54:18 -06:00
nfsserver sys: Remove $FreeBSD$: one-line .h pattern 2023-08-16 11:54:18 -06:00
nlm sys: Remove $FreeBSD$: one-line .c pattern 2023-08-16 11:54:36 -06:00
ofed ibcore: Mark write-only variables 2024-07-15 12:28:53 +00:00
opencrypto ktls: Remove the socket parameter to ktls_ocf_try() 2024-07-23 09:01:30 -04:00
powerpc ps3: add elfv2 support 2024-10-23 22:08:00 -04:00
riscv sys: add conf/std.debug, generic debugging options 2024-10-09 10:44:35 +02:00
rpc nfs, rpc: Ensure kernel credentials have at least one group 2024-11-15 11:47:43 +01:00
security mac_bsdextended: Remove \n from sysctl descriptions 2024-11-24 11:46:00 -05:00
sys file: The f_ops table pointer can be a pointer to const 2024-11-19 14:15:07 +00:00
teken teken: fix style in teken_wcwidth.h 2023-10-21 17:28:35 +03:00
tests tests: Stop checking for failures from malloc(M_WAITOK) 2024-09-30 12:44:18 +08:00
tools amd64: do not pass -z rodynamic to ld.bfd when building vdso 2024-10-24 05:44:40 +03:00
ufs SU+J: all writes to SU journal must be exempt from runningbufspace throttling 2024-11-16 03:07:33 +02:00
vm vm_object: do not assume that un_pager.devp.dev is cdev 2024-11-13 01:19:18 +02:00
x86 amdiommu: short-circuit all amdiommu_find_unit() functions 2024-11-12 02:27:24 +02:00
xdr rpc: Fix the definition of xdr_void() 2024-11-05 01:05:26 +00:00
xen sys: Remove $FreeBSD$: one-line sh pattern 2023-08-16 11:54:58 -06:00
Makefile sys: Remove $FreeBSD$: one-line sh pattern 2023-08-16 11:54:58 -06:00
README.md sys/README.md: Add a section for documentation 2023-08-03 11:07:41 -03:00

FreeBSD Kernel Source:

This directory contains the source files and build glue that make up the FreeBSD kernel and its modules, including both original and contributed software.

Kernel configuration files are located in the conf/ subdirectory of each architecture. GENERIC is the configuration used in release builds. NOTES contains documentation of all possible entries. LINT is a compile-only configuration used to maximize build coverage and detect regressions.

Documentation:

Source code documentation is maintained in a set of man pages, under section 9. These pages are located in share/man/man9, from the top-level of the src tree. Consult intro(9) for an overview of existing pages.

Some additional high-level documentation of the kernel is maintained in the Architecture Handbook.

Source Roadmap:

Directory Description
amd64 AMD64 (64-bit x86) architecture support
arm 32-bit ARM architecture support
arm64 64-bit ARM (AArch64) architecture support
cam Common Access Method storage subsystem - cam(4) and ctl(4)
cddl CDDL-licensed optional sources such as DTrace
conf kernel build glue
compat Linux compatibility layer, FreeBSD 32-bit compatibility
contrib 3rd-party imported software such as OpenZFS
crypto crypto drivers
ddb interactive kernel debugger - ddb(4)
fs most filesystems, excluding UFS, NFS, and ZFS
dev device drivers and other arch independent code
gdb kernel remote GDB stub - gdb(4)
geom GEOM framework - geom(4)
i386 i386 (32-bit x86) architecture support
kern main part of the kernel
libkern libc-like and other support functions for kernel use
modules kernel module infrastructure
net core networking code
net80211 wireless networking (IEEE 802.11) - net80211(4)
netgraph graph-based networking subsystem - netgraph(4)
netinet IPv4 protocol implementation - inet(4)
netinet6 IPv6 protocol implementation - inet6(4)
netipsec IPsec protocol implementation - ipsec(4)
netpfil packet filters - ipfw(4), pf(4), and ipfilter(4)
opencrypto OpenCrypto framework - crypto(7)
powerpc PowerPC/POWER (32 and 64-bit) architecture support
riscv 64-bit RISC-V architecture support
security security facilities - audit(4) and mac(4)
sys kernel headers
tests kernel unit tests
ufs Unix File System - ffs(7)
vm virtual memory system
x86 code shared by AMD64 and i386 architectures