FreeBSD/src 389265esys/compat/linuxkpi/common/src linux_80211.c

LinuxKPI: 802.11: factor out dynamic_rx_chains computation

For the moment we set dynamic_rx_chains to the rx_nss value which
should be correct given we count from 1 there too and we call
lkpi_get_max_rx_chains() after we synced ht/vht initially already.

Long-term some of these counting bits should be further factored
out into their own functions and used both here and for the sync
code.

This will likely want to change as well once more dyamic
synncronization takes place.

Sponsored by:   The FreeBSD Foundation
MFC after:      3 days
DeltaFile
+29-1sys/compat/linuxkpi/common/src/linux_80211.c
+29-11 files

FreeBSD/src ac2c727sys/compat/linuxkpi/common/src linux_80211.c

LinuxKPI: 802.11: disable A-MDPU TX for now for LinuxKPI WiFi drivers

Clear IEEE80211_FHT_AMPDU_TX from iv_flags_ht to avoid doing A-MPDU TX.

For Intel we need to support two different variations at least, both
likely needing net80211 surgery first.  The good news is that turning
it off in net80211 will make it work for modern iwlwifi/mvm chipsets/fw.

Realtek will need some mac80211 functions to be implemented at least.
Once we've done all and tested one after the other we can remove this
again.

Sponsored by:   The FreeBSD Foundation
MFC after:      3 days
DeltaFile
+4-0sys/compat/linuxkpi/common/src/linux_80211.c
+4-01 files

FreeBSD/src 90d8e30sys/compat/linuxkpi/common/src linux_80211.c

LinuxKPI: 802.11: cleanup chanctx freq/width settings

Cleanup chanctx freq1/2 and width settings using the channel from the
net80211 node and the net80211 functions to return the center
frequencies (already doing the math for us or using pre-computed values).

Set the min_def (minimum channel definition) to def (channel definition)
for the moment as it seems to be unused by anything but
iwl_mvm_chanctx_def() to avoid complications.

Sponsored by:   The FreeBSD Foundation
MFC after:      3 days
DeltaFile
+20-23sys/compat/linuxkpi/common/src/linux_80211.c
+20-231 files

FreeBSD/src f9c7a07sys/compat/linuxkpi/common/src linux_80211.c

LinuxKPI: 802.11: synchronize LinuxKPI 802.11 sta from net80211 ni

Have a wrapper function dealing with the synchronization for all the
dfferent standards (HT and VHT currently).
In case HT or VHT is not supported make sure to turn the LinuxKPI
"supported" flag off for that.  Previously if it was on once it would
never be turned off.
For HT and VHT properly compute the NSS and also set the max_amsdu_len
correctly.
Set the NSS directly in the function (which is called in proper order
for this) rather than passing the results back and do the setting in
the caller.  The only thing we need to make sure upfront is that it
remains at least 1 (see f5a58c2da239).  This all makes the caller and
code a tiny bit simpler and work better.

There is more synchronization to be done between the chanctx and the
deflink bandwidth, which needs to happen dynamically in case net80211
decides to change that under us but no native driver seems to properly
implement this (if at all).

    [6 lines not shown]
DeltaFile
+96-37sys/compat/linuxkpi/common/src/linux_80211.c
+96-371 files

FreeBSD/src c66308dusr.sbin/usbconfig dump.c usbconfig.c

usbconfig: add -l option to dump_device_desc for single line output

Like pciconf -l add a -l to dump_device_desc for usbconfig which will
fold most fields into a single line.  We do filter out some we think
will not be interesting in this case.

While mangling with string output in ways not always anticipated when
the program was initially written this should help to parse the
available devices for programs like fwget(8).  While I had this in
mind for other bits for a while I got prompted by D48678 to finally
do it.

Sponsored by:   The FreebSD Foundation
MFC after:      3 days
Reviewed by:    bapt (LGTM), ziaee (man)
Differential Revision: https://reviews.freebsd.org/D48974
DeltaFile
+125-18usr.sbin/usbconfig/dump.c
+14-6usr.sbin/usbconfig/usbconfig.c
+5-1usr.sbin/usbconfig/usbconfig.8
+3-2usr.sbin/usbconfig/dump.h
+147-274 files

FreeBSD/src 8d079c6sys/net if_infiniband.c

if_infininband: Support BPF write for broadcast frames

To support DHCP for IPoIB links, DHCP clients and servers require the
ability to transmit link-layer broadcasts on the IB interfaces. BPF
provides the mechanism for doing this.

This change updates the if_infiniband driver to be capable of accepting
link-layer broadcast requests via BPF using Ethernet formatted frames
(the driver currently registers with BPF as DLT_EN10MB). Only Broadcast
frames can reliably be interpreted using the Ethernet header format so
detect unicast and multicast frames are rejected if passed in using the
Ethernet format. This doesn't impact the ability to support native
unicast, broadcast or multicast frames if native infiniband header
support is added to BPF at a later date.

Further the above, this commit also addresses an issue in the existing
code that can result in separation of part of the packet header from the
rest of the payload if a BPF write was attempted. This was caused by
mbuf preallocation of the infiniband header length regardless of length

    [7 lines not shown]
DeltaFile
+52-5sys/net/if_infiniband.c
+52-51 files

FreeBSD/src 2ab4a41sys/compat/linuxkpi/common/include/linux skbuff.h, sys/compat/linuxkpi/common/src linux_skbuff.c

LinuxKPI: skbuff: add synchronization primitives and missing bits

Make a pass over skbuff.h:
- implement some missing bits,
- sprinkle some const,
- add locking and read/write_once calls as needed to provide
  synchronization as expected by Linux,
- fix some typos,
- remove return from void functions,
- adjust tracing macros.

Sponsored by:   The FreeBSD Foundation
MFC after:      3 days
PR:             283903 (rtw88 skb leak)
Tested by:      Guillaume Outters (guillaume-freebsd outters.eu)
Differential Revision: https://reviews.freebsd.org/D49101
DeltaFile
+166-119sys/compat/linuxkpi/common/include/linux/skbuff.h
+1-1sys/compat/linuxkpi/common/src/linux_skbuff.c
+167-1202 files

FreeBSD/src 8b3d2c1sys/netinet in_pcb.c in_pcb_var.h, tests/sys/netinet so_reuseport_lb_test.c

inpcb: Fix reuseport lbgroup array resizing

in_pcblisten() moves an inpcb from the per-group list into the array, at
which point it becomes visible to inpcb lookups in the datapath.  It
assumes that there is space in the array for this, but that's not
guaranteed, since in_pcbinslbgrouphash() doesn't reserve space in the
array if the inpcb isn't associated with a listening socket.

We could resize the array in in_pcblisten(), but that would introduce a
failure case where there currently is none.  Instead, keep track of the
number of pending inpcbs as well, and modify in_pcbinslbgrouphash() to
reserve space for each pending (i.e., not-yet-listening) inpcb.

Add a regression test.

Reviewed by:    glebius
Reported by:    netchild
Fixes:          7cbb6b6e28db ("inpcb: Close some SO_REUSEPORT_LB races, part 2")
Differential Revision:  https://reviews.freebsd.org/D49100
DeltaFile
+46-0tests/sys/netinet/so_reuseport_lb_test.c
+6-1sys/netinet/in_pcb.c
+1-0sys/netinet/in_pcb_var.h
+53-13 files

FreeBSD/src 51a8eb6contrib/kyua/engine scheduler.cpp scheduler_test.cpp, contrib/kyua/integration cmd_test_test.sh

kyua: Pass unprivileged user config prop to ATF using all known names

Kyua and ATF speak different naming styles. In this case, the
unprivileged user property can be named with underscore on the Kyua
side, and with a hyphen on the ATF side. Sometimes it is not obvious
which style should be used in which situation. For instance, a test case
may require this configuration property being set using require.config.
Also, a test case may want to read the property using something like
atf_tc_get_config_var(). Which names should be used in these cases?
From the perspective of the original code, it is expected to be this:
    require.config unprivileged-user
    atf_tc_get_config_var(tc, "unprivileged-user")

But, as long as Kyua is the main interface, its users expect to work
with kyua.conf(5), which says that it must be named as unprivileged_user
(with underscore). As a result, test authors tend to do this instead:
    require.config unprivileged_user
    atf_tc_get_config_var(tc, "unprivileged_user")


    [8 lines not shown]
DeltaFile
+43-0contrib/kyua/integration/cmd_test_test.sh
+7-3contrib/kyua/integration/helpers/config.cpp
+3-0contrib/kyua/engine/scheduler.cpp
+1-0contrib/kyua/engine/scheduler_test.cpp
+54-34 files

FreeBSD/src 65c573esys/compat/linuxkpi/common/src linux_80211.c

LinuxKPI: 802.11: fix locking in lkpi_ic_ampdu_rx_stop()

net80211 has inconsistent locking when calling into (*ic_ampdu_rx_stop)().
Make use of 054c5ddf587a7 and conditionally check if the caller
locked or not and if locked temporary drop the lock to avoid sleeping
on a non-sleepaable lock during the downcall into the driver.

Sponsored by:   The FreeBSD Foundation
MFC after:      3 days
DeltaFile
+6-2sys/compat/linuxkpi/common/src/linux_80211.c
+6-21 files

FreeBSD/src b693991lib/libc/sys statfs.2

statfs.2: document missing user-visible MNT flags

(cherry picked from commit e951247a983daf7814d06e9e49bdd503ceaa0b68)
DeltaFile
+18-0lib/libc/sys/statfs.2
+18-01 files

FreeBSD/src 743cd4clib/libc/sys statfs.2

statfs.2: remove dead comment

(cherry picked from commit 13b92ae9655deb22c3ad89f1e90e26f2f1da9961)
DeltaFile
+0-2lib/libc/sys/statfs.2
+0-21 files

FreeBSD/src 28b1a5alib/libc/sys statfs.2

statfs.2: order MNT flags alphabetically

(cherry picked from commit 0738cd9766a570e085831f6241387baa35cd64a3)
DeltaFile
+45-45lib/libc/sys/statfs.2
+45-451 files

FreeBSD/src efa0994lib/libc/sys statfs.2

statfs.2: uncomment and describe MNT_IGNORE

(cherry picked from commit 270542d95d0d931ebdd369f4f78871828502d486)
DeltaFile
+3-2lib/libc/sys/statfs.2
+3-21 files

FreeBSD/src 72ee3d5sys/compat/linuxkpi/common/include/net mac80211.h

LinuxKPI: 802.11: add condition to TODO in ieee80211_sta_recalc_aggregates

ieee80211_sta_recalc_aggregates() shows up in TODO traces but there is
nothing we have to do there until we have active links (MLO support).
Make the TODO conditional for a time when we will get there.

Sponsored by:   The FreeBSD Foundation
MFC after:      3 days
DeltaFile
+4-2sys/compat/linuxkpi/common/include/net/mac80211.h
+4-21 files

FreeBSD/src a6994e2sys/compat/linuxkpi/common/include/net cfg80211.h

LinuxKPI: rather than manually defining a value use the net80211 define

Define cfg80211 IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_MASK to
net80211 IEEE80211_VHTCAP_SUPP_CHAN_WIDTH_MASK.

We should likely at some point make a sweep and replace all the
values with the defines from the comments for the matching net80211
version.

Sponsored by:   The FreeBSD Foundation
MFC after:      3 days
DeltaFile
+2-2sys/compat/linuxkpi/common/include/net/cfg80211.h
+2-21 files

FreeBSD/src 73cd1c5sys/compat/linuxkpi/common/src linux_80211.c

LinuxKPI: 802.11: add further checks for deflink.supp_rates[]

When setting the per-band supp_rates bitfield check for mandatory
rates only.  We cannot easily say at that point for 2Ghz whether
11g is supported so assume these days it is not pure-b.

Sponsored by:   The FreeBSD Foundation
MFC after:      3 days
DeltaFile
+24-4sys/compat/linuxkpi/common/src/linux_80211.c
+24-41 files

FreeBSD/src 1f73e0esys/compat/linuxkpi/common/src linux_80211.c

LinuxKPI: 802.11: use net80211 macro instead of manual check

Use IEEE80211_CONF_VHT() instead of manually checking if hardware
supports VHT.

Sponsored by:   The FreeBSD Foundation
MFC after:      3 days
DeltaFile
+1-1sys/compat/linuxkpi/common/src/linux_80211.c
+1-11 files

FreeBSD/src 1145072sys/compat/linuxkpi/common/include/linux nl80211.h, sys/compat/linuxkpi/common/include/net cfg80211.h

LinuxKPI: 802.11: improve cfg80211_chandef_create()

Implement cfg80211_chandef_create() to work with HT.  Update enum
with HT channel types.  When calling the function from LinuxKPI 802.11
code, pass in NL80211_CHAN_HT20 if HT is supported rather than NO_HT.

Sponsored by:   The FreeBSD Foundation
MFC after:      3 days
DeltaFile
+16-19sys/compat/linuxkpi/common/include/net/cfg80211.h
+4-2sys/compat/linuxkpi/common/include/linux/nl80211.h
+2-2sys/compat/linuxkpi/common/src/linux_80211.c
+22-233 files

FreeBSD/src 1776633sys/netinet ip_carp.c

carp: Fix checking IPv4 multicast address

An IPv4 address stored in `struct in_addr` is in network byte order but
`IN_MULTICAST` wants host order.

PR:             284872
Reported by:    Steven Perreau
Reported by:    Brett Merrick <brett.merrick at itcollective.nz>
Reviewed by:    Franco Fichtner <franco at opnsense.org>, ae, kp, glebius
Tested by:      Steven Perreau
Fixes:          137818006de5 carp: support unicast
MFC after:      3 days
Differential Revision:  https://reviews.freebsd.org/D49053
DeltaFile
+2-2sys/netinet/ip_carp.c
+2-21 files

FreeBSD/src 93fbdeftests/sys/netinet carp.sh

tests: carp: Update test case unicast_v4 to catch PR 284872

In the current test case unicast_v4, host one acts as a router, but it
uses if_bridge(4) to verify the reachability to CARP master.
Unfortunately, if_bridge(4) brings the two CARP hosts into the same
broadcast domain, thus with an unusual (undocumented) setup, one host
is in unicast mode but another one in multicast, or two hosts are both
in multicast mode, the test case can falsely report success.

Fix that by propagating route via routed(8).

PR 284872 shows that CARP(4) happens to send packets with multicast
destination when the unicast peer address is in the range x.x.x.224 ~
x.x.x.239. Update the peer address in test case to catch that bug.

PR:             284872
Reviewed by:    kp
MFC after:      3 days
Differential Revision:  https://reviews.freebsd.org/D49076
DeltaFile
+21-17tests/sys/netinet/carp.sh
+21-171 files

FreeBSD/src 43339e7sys/dev/bnxt/bnxt_en bnxt_sysctl.c

bnxt_en: Improve sysctl handler bnxt_dcb_list_app()

Prefer sbuf_new_for_sysctl() over error-prone manually managed buffer.

No functional change intended.

Reviewed by:    markj
Tested by:      Daniel Porsch <daniel.porsch at loopia.se>
MFC after:      1 week
Differential Revision:  https://reviews.freebsd.org/D48496

(cherry picked from commit 91bae242bc54856c560557b5ba245df94d570e95)
DeltaFile
+17-27sys/dev/bnxt/bnxt_en/bnxt_sysctl.c
+17-271 files

FreeBSD/src 83c2710sys/dev/bnxt/bnxt_en bnxt_sysctl.c

bnxt_en: Fix the description of sysctl knob dev.bnxt.X.dcb.dcbx_cap

While here, update the description of dev.bnxt.X.dcb to more informative
words "Data Center Bridging".

Reviewed by:    markj
Fixes:  35b53f8c989f bnxt_en: Add PFC, ETS & App TLVs protocols support
MFC after:      1 week
Differential Revision:  https://reviews.freebsd.org/D48993

(cherry picked from commit 0bc672b38f1b224d5eaed35533cb6f6bfb3a5fa3)
DeltaFile
+2-2sys/dev/bnxt/bnxt_en/bnxt_sysctl.c
+2-21 files

FreeBSD/src acc2d47sys/dev/bnxt/bnxt_en bnxt_dcb.c bnxt.h

bnxt_en: Retrieve maximum of 128 APP TLVs

It appears that the maximum number of APP TLVs supported by the hardware
is 128 according to D45005. Well Daniel Porsch reported an issue PR284073
which shows that the number can exceed the limit, causing out of bound
write to on-stack allocated variable app[128] and the kernel panics.

Limit to 128 while retrieving APP TLVs.

PR:             284073
Reviewed by:    markj
Tested by:      Daniel Porsch <daniel.porsch at loopia.se>
Fixes:  35b53f8c989f bnxt_en: Add PFC, ETS & App TLVs protocols support
MFC after:      1 week
Differential Revision:  https://reviews.freebsd.org/D48589

(cherry picked from commit 3de231b4d956f7b9c22e31f75805030a417f7bf3)
DeltaFile
+10-7sys/dev/bnxt/bnxt_en/bnxt_dcb.c
+2-1sys/dev/bnxt/bnxt_en/bnxt.h
+1-1sys/dev/bnxt/bnxt_en/bnxt_sysctl.c
+1-0sys/dev/bnxt/bnxt_en/bnxt_mgmt.c
+14-94 files

FreeBSD/src 072303dsys/dev/bnxt/bnxt_en bnxt_sysctl.c

bnxt_en: Remove pointless NULL check for sysctl arg1

Those sysctl handlers have been guaranteed to have non-null softc. No
need for NULL check within sysctl handlers.

No functional change intended.

Reviewed by:    markj
Tested by:      Daniel Porsch <daniel.porsch at loopia.se>
MFC after:      1 week
Differential Revision:  https://reviews.freebsd.org/D48495

(cherry picked from commit 747fd2db538a85df84ae6ac1e58494295b4a65ee)
DeltaFile
+0-18sys/dev/bnxt/bnxt_en/bnxt_sysctl.c
+0-181 files

FreeBSD/src 69c05f4sys/netinet udp_usrreq.c

udp: make sendto(2) on unconnected UDP socket use public inpcb KPIs

UDP allows to sendto(2) on unconnected socket.  The original BSD devise
was that such action would create a temporary (for the duration of the
syscall) connection between our inpcb and remote addr:port specified in
sockaddr 'to' of the syscall.  This devise was broken in 2002 in
90162a4e87f0.  For more motivation on the removal of the temporary
connection see email [1].

Since the removal of the true temporary connection the sendto(2) on
unconnected socket has the following side effects:

1) After first sendto(2) the "unconnected" socket will receive datagrams
   destined to the selected port.
2) All subsequent sendto(2) calls will use the same source port.

Effectively, such sendto(2) acts like a bind(2) to INADDR_ANY:0.  Indeed,
if you do this:


    [25 lines not shown]
DeltaFile
+30-60sys/netinet/udp_usrreq.c
+30-601 files

FreeBSD/src ad77d31tests/sys/netinet broadcast.c Makefile

tests/netinet: add few tests for sending a broadcast packet

1) Set SO_BROADCAST and send to INADDR_BROADCAST.
2) Set SO_BROADCAST, set IP_ONESBCAST and cycle through broadcast capable
   interfaces sending a datagram on each.
3) Set SO_BROADCAST and send to local broadcast address.

For each test we bind a second socket to check whether the broadcast
is actually received.

Reviewed by:            markj
Differential Revision:  https://reviews.freebsd.org/D49040
DeltaFile
+192-0tests/sys/netinet/broadcast.c
+2-1tests/sys/netinet/Makefile
+194-12 files

FreeBSD/src 532106fsys/netinet ip_icmp.c in_jail.c

netinet: use in_broadcast() inline

There should be no functional change.

Reviewed by:            rrs, markj
Differential Revision:  https://reviews.freebsd.org/D49088
DeltaFile
+2-7sys/netinet/ip_icmp.c
+1-7sys/netinet/in_jail.c
+3-5sys/netinet/ip_fastfwd.c
+2-4sys/netinet/sctp_output.c
+2-4sys/netinet/sctp_pcb.c
+1-3sys/netinet/ip_input.c
+11-302 files not shown
+13-338 files

FreeBSD/src 3b281d1sys/netinet ip_output.c in.h

netinet: enforce broadcast mode for all-ones and all-zeroes destinations

When a socket has SO_BROADCAST set and destination address is INADDR_ANY
or INADDR_BROADCAST, the kernel shall pick up first broadcast capable
interface and broadcast the packet out of it.  Since this API is not
reliable on a machine with > 1 broadcast capable interfaces, all practical
software seems to use IP_ONESBCAST or other mechanisms to send broadcasts.
This has been broken at least since FreeBSD 6.0, see bug 99558.  Back then
the problem was in the fact that in_broadcast() check was always done
against the gateway address, not the destination address.  Later, with
90cc51a1ab4be, a second problem piled on top - we aren't checking for
INADDR_ANY and INADDR_BROADCAST at all.

Better late than never, fix that by checking destination address.

PR:                     99558
Reviewed by:            markj
Differential Revision:  https://reviews.freebsd.org/D49042
DeltaFile
+10-5sys/netinet/ip_output.c
+7-0sys/netinet/in.h
+17-52 files

FreeBSD/src 197fc4csys/netinet tcp_input.c ip_divert.c

netinet: rename in_broadcast() to in_ifnet_broadcast()

This aligns with existing in_ifaddr_broadcast() and aligns with other
simple functions or macros with bare "in_" prefix that operator just on
struct in_addr and nothing else, e.g. in_nullhost().  No functional
change.

Reviewed by:            markj
Differential Revision:  https://reviews.freebsd.org/D49041
DeltaFile
+3-3sys/netinet/tcp_input.c
+1-1sys/netinet/ip_divert.c
+1-1sys/netinet/sctp_os_bsd.h
+1-1sys/netinet/udp_usrreq.c
+1-1sys/netinet/in.c
+1-1sys/netinet/in.h
+8-81 files not shown
+9-97 files