| #
d19fd2f3
|
| 13-Feb-2026 |
Mark Johnston <markj@FreeBSD.org> |
ip_mroute: Make the routing socket private
I have some patches which make ip_mroute and ip6_mroute multi-FIB-aware. This enables running per-FIB routing daemons, each of which has a separate routing
ip_mroute: Make the routing socket private
I have some patches which make ip_mroute and ip6_mroute multi-FIB-aware. This enables running per-FIB routing daemons, each of which has a separate routing socket.
Several places in the network stack check whether multicast routing is configured by checking whether the multicast routing socket is non-NULL. This doesn't directly translate in my proposed scheme, as each FIB would have its own socket. I'd like to modify the ip(6)_mroute code to store all state, including the socket, in a per-FIB structure. So, take a step towards that and 1) hide the socket, 2) add a boolean flag which indicates whether a multicast router is registered.
Reviewed by: pouria, zlei, glebius, adrian MFC after: 2 weeks Sponsored by: Stormshield Sponsored by: Klara, Inc. Differential Revision: https://reviews.freebsd.org/D55236
show more ...
|
| #
9df6a7f9
|
| 09-Feb-2026 |
Mark Johnston <markj@FreeBSD.org> |
ip_mroute: Try to make function pointer declarations more consistent
The ip_mroute and ip6_mroute modules hook into the network stack via several function pointers. Declarations for these pointers
ip_mroute: Try to make function pointer declarations more consistent
The ip_mroute and ip6_mroute modules hook into the network stack via several function pointers. Declarations for these pointers are scattered around several headers. Put them all in the same place, ip(6)_mroute.h.
No functional change intended.
Reviewed by: glebius MFC after: 2 weeks Sponsored by: Stormshield Sponsored by: Klara, Inc. Differential Revision: https://reviews.freebsd.org/D55058
show more ...
|
| #
a265c8b4
|
| 27-Jan-2026 |
Mark Johnston <markj@FreeBSD.org> |
ip_mroute: Convert to using a regular mutex
The multicast routing code was using spin mutexes for packet counting, but there is no reason to use them instead of regular mutexes, given that none of t
ip_mroute: Convert to using a regular mutex
The multicast routing code was using spin mutexes for packet counting, but there is no reason to use them instead of regular mutexes, given that none of this code runs in an interrupt context. Convert to using default mutexes.
Reviewed by: glebius MFC after: 2 weeks Sponsored by: Stormshield Sponsored by: Klara, Inc. Differential Revision: https://reviews.freebsd.org/D54603
show more ...
|
| #
29363fb4
|
| 23-Nov-2023 |
Warner Losh <imp@FreeBSD.org> |
sys: Remove ancient SCCS tags.
Remove ancient SCCS tags from the tree, automated scripting, with two minor fixup to keep things compiling. All the common forms in the tree were removed with a perl s
sys: Remove ancient SCCS tags.
Remove ancient SCCS tags from the tree, automated scripting, with two minor fixup to keep things compiling. All the common forms in the tree were removed with a perl script.
Sponsored by: Netflix
show more ...
|
| #
2ff63af9
|
| 16-Aug-2023 |
Warner Losh <imp@FreeBSD.org> |
sys: Remove $FreeBSD$: one-line .h pattern
Remove /^\s*\*+\s*\$FreeBSD\$.*$\n/
|
| #
04cd74b4
|
| 21-Mar-2022 |
Mike Karels <karels@FreeBSD.org> |
IPv4 multicast: fix netstat -g
The vif structure includes fields at the end which are #ifdef KERNEL, causing a mismatch between the structure sizes between kernel and user level. netstat -g failed
IPv4 multicast: fix netstat -g
The vif structure includes fields at the end which are #ifdef KERNEL, causing a mismatch between the structure sizes between kernel and user level. netstat -g failed with an ENOMEM on the sysctl to fetch the vif table. Change the vif sysctl code in ip_mroute to copy out only the user-level-visible portion of each table entry.
Reviewed by: bz, wma Differential Revision: https://reviews.freebsd.org/D34627
show more ...
|
| #
77223d98
|
| 25-Jan-2022 |
Wojciech Macek <wma@FreeBSD.org> |
ip_mroute: refactor epoch-basd locking
Remove duplicated epoch_enter and epoch_exit in IP inp/outp routines. Remove unnecessary macros as well.
Obtained from: Semihalf Spponsored by: Stormshield
ip_mroute: refactor epoch-basd locking
Remove duplicated epoch_enter and epoch_exit in IP inp/outp routines. Remove unnecessary macros as well.
Obtained from: Semihalf Spponsored by: Stormshield Reviewed by: glebius Differential revision: https://reviews.freebsd.org/D34030
show more ...
|
| #
9ce46cbc
|
| 21-Jan-2022 |
Wojciech Macek <wma@FreeBSD.org> |
ip_mroute: move ip_mrouter_done outside lock
X_ip_mrouter_done might sleep, which triggers INVARIANTS to print additional errors on the screen. Move it outside the lock, but provide some basic synch
ip_mroute: move ip_mrouter_done outside lock
X_ip_mrouter_done might sleep, which triggers INVARIANTS to print additional errors on the screen. Move it outside the lock, but provide some basic synchronization to avoid race condition during module uninit/unload.
Obtained from: Semihalf Sponsored by: Stormshield
show more ...
|
| #
58630bdd
|
| 20-Jan-2022 |
Wojciech Macek <wma@FreeBSD.org> |
Revert "ip_mroute: do not call epoch_waitwhen lock is taken"
This reverts commit 2e72208b6c622505323ed48dc58830fc307392b1.
|
| #
2e72208b
|
| 11-Jan-2022 |
Wojciech Macek <wma@FreeBSD.org> |
ip_mroute: do not call epoch_waitwhen lock is taken
mrouter_done is called with RAW IP lock taken. Some annoying printfs are visible on the console if INVARIANTS option is enabled.
Provide atomic-b
ip_mroute: do not call epoch_waitwhen lock is taken
mrouter_done is called with RAW IP lock taken. Some annoying printfs are visible on the console if INVARIANTS option is enabled.
Provide atomic-based mechanism which counts enters and exits from/to critical section in ip_input and ip_output. Before de-initialization of function pointers ensure (with busy-wait) that mrouter de-initialization is visible to all readers and that we don't remove pointers (like ip_mforward etc.) in the middle of packet processing.
show more ...
|
| #
d40cd26a
|
| 17-May-2021 |
Wojciech Macek <wma@FreeBSD.org> |
ip_mroute: rework ip_mroute
Approved by: mw Obtained from: Semihalf Sponsored by: Stormshield Differential Revision: https://reviews.freebsd.org/D30354
Changes: 1. add spinlock to bw_meter
ip_mroute: rework ip_mroute
Approved by: mw Obtained from: Semihalf Sponsored by: Stormshield Differential Revision: https://reviews.freebsd.org/D30354
Changes: 1. add spinlock to bw_meter
If two contexts read and modify bw_meter values it might happen that these are corrupted. Guard only code fragments which do read-and-modify. Context which only do "reads" are not done inside spinlock block. The only sideffect that can happen is an 1-p;acket outdated value reported back to userspace.
2. replace all locks with a single RWLOCK
Multiple locks caused a performance issue in routing hot path, when two of them had to be taken. All locks were replaced with single RWLOCK which makes the hot path able to take only shared access to lock most of the times. All configuration routines have to take exclusive lock (as it was done before) but these operation are very rare compared to packet routing.
3. redesign MFC expire and UPCALL expire
Use generic kthread and cv_wait/cv_signal for deferring work. Previously, upcalls could be sent from two contexts which complicated the design. All upcall sending is now done in a kthread which allows hot path to work more efficient in some rare cases.
4. replace mutex-guarded linked list with lock free buf_ring
All message and data is now passed over lockless buf_ring. This allowed to remove some heavy locking when linked lists were used.
show more ...
|
| #
741afc62
|
| 05-May-2021 |
Wojciech Macek <wma@FreeBSD.org> |
ip_mroute: refactor bw_meter API
API should work as following: - periodicaly report Lower-or-EQual bandwidth (LEQ) connections over kernel socket, if user application registered for such per-flo
ip_mroute: refactor bw_meter API
API should work as following: - periodicaly report Lower-or-EQual bandwidth (LEQ) connections over kernel socket, if user application registered for such per-flow notifications - report Grater-or-EQual (GEQ) bandwidth as soon as it reaches specified value in configured time window
Custom implementation of callouts was removed. There is no point of doing calout-wheel here as generic callouts are doing exactly the same. The performance is not critical for such reporting, so the biggest concern should be to have a code which can be easily maintained.
This is ia preparation for locking rework which is highly inefficient.
Approved by: mw Sponsored by: Stormshield Obtained from: Semihalf Differential Revision: https://reviews.freebsd.org/D30210
show more ...
|
| #
787845c0
|
| 20-May-2021 |
Wojciech Macek <wma@FreeBSD.org> |
Revert "ip_mroute: refactor bw_meter API"
This reverts commit d1cd99b147411b331a9bff659533780ef297ef58.
|
| #
d1cd99b1
|
| 05-May-2021 |
Wojciech Macek <wma@FreeBSD.org> |
ip_mroute: refactor bw_meter API
API should work as following: - periodicaly report Lower-or-EQual bandwidth (LEQ) connections over kernel socket, if user application registered for such per-flo
ip_mroute: refactor bw_meter API
API should work as following: - periodicaly report Lower-or-EQual bandwidth (LEQ) connections over kernel socket, if user application registered for such per-flow notifications - report Grater-or-EQual (GEQ) bandwidth as soon as it reaches specified value in configured time window
Custom implementation of callouts was removed. There is no point of doing calout-wheel here as generic callouts are doing exactly the same. The performance is not critical for such reporting, so the biggest concern should be to have a code which can be easily maintained.
This is ia preparation for locking rework which is highly inefficient.
Approved by: mw Sponsored by: Stormshield Obtained from: Semihalf Differential Revision: https://reviews.freebsd.org/D30210
show more ...
|
| #
65634ae7
|
| 23-Apr-2021 |
Wojciech Macek <wma@FreeBSD.org> |
mroute: fix race condition during mrouter shutting down
There is a race condition between V_ip_mrouter de-init and ip_mforward handling. It might happen that mrouted is cleaned up after
mroute: fix race condition during mrouter shutting down
There is a race condition between V_ip_mrouter de-init and ip_mforward handling. It might happen that mrouted is cleaned up after V_ip_mrouter check and before processing packet in ip_mforward. Use epoch call aproach, similar to IPSec which also handles such case.
Reported by: Damien Deville Obtained from: Stormshield Reviewed by: mw Differential Revision: https://reviews.freebsd.org/D29946
show more ...
|
| #
662c1305
|
| 01-Sep-2020 |
Mateusz Guzik <mjg@FreeBSD.org> |
net: clean up empty lines in .c and .h files
|
| #
a265c8b4
|
| 27-Jan-2026 |
Mark Johnston <markj@FreeBSD.org> |
ip_mroute: Convert to using a regular mutex
The multicast routing code was using spin mutexes for packet counting, but there is no reason to use them instead of regular mutexes, given that none of t
ip_mroute: Convert to using a regular mutex
The multicast routing code was using spin mutexes for packet counting, but there is no reason to use them instead of regular mutexes, given that none of this code runs in an interrupt context. Convert to using default mutexes.
Reviewed by: glebius MFC after: 2 weeks Sponsored by: Stormshield Sponsored by: Klara, Inc. Differential Revision: https://reviews.freebsd.org/D54603
show more ...
|
| #
29363fb4
|
| 23-Nov-2023 |
Warner Losh <imp@FreeBSD.org> |
sys: Remove ancient SCCS tags.
Remove ancient SCCS tags from the tree, automated scripting, with two minor fixup to keep things compiling. All the common forms in the tree were removed with a perl s
sys: Remove ancient SCCS tags.
Remove ancient SCCS tags from the tree, automated scripting, with two minor fixup to keep things compiling. All the common forms in the tree were removed with a perl script.
Sponsored by: Netflix
show more ...
|
| #
2ff63af9
|
| 16-Aug-2023 |
Warner Losh <imp@FreeBSD.org> |
sys: Remove $FreeBSD$: one-line .h pattern
Remove /^\s*\*+\s*\$FreeBSD\$.*$\n/
|
| #
04cd74b4
|
| 21-Mar-2022 |
Mike Karels <karels@FreeBSD.org> |
IPv4 multicast: fix netstat -g
The vif structure includes fields at the end which are #ifdef KERNEL, causing a mismatch between the structure sizes between kernel and user level. netstat -g failed
IPv4 multicast: fix netstat -g
The vif structure includes fields at the end which are #ifdef KERNEL, causing a mismatch between the structure sizes between kernel and user level. netstat -g failed with an ENOMEM on the sysctl to fetch the vif table. Change the vif sysctl code in ip_mroute to copy out only the user-level-visible portion of each table entry.
Reviewed by: bz, wma Differential Revision: https://reviews.freebsd.org/D34627
show more ...
|
| #
77223d98
|
| 25-Jan-2022 |
Wojciech Macek <wma@FreeBSD.org> |
ip_mroute: refactor epoch-basd locking
Remove duplicated epoch_enter and epoch_exit in IP inp/outp routines. Remove unnecessary macros as well.
Obtained from: Semihalf Spponsored by: Stormshield
ip_mroute: refactor epoch-basd locking
Remove duplicated epoch_enter and epoch_exit in IP inp/outp routines. Remove unnecessary macros as well.
Obtained from: Semihalf Spponsored by: Stormshield Reviewed by: glebius Differential revision: https://reviews.freebsd.org/D34030
show more ...
|
| #
9ce46cbc
|
| 21-Jan-2022 |
Wojciech Macek <wma@FreeBSD.org> |
ip_mroute: move ip_mrouter_done outside lock
X_ip_mrouter_done might sleep, which triggers INVARIANTS to print additional errors on the screen. Move it outside the lock, but provide some basic synch
ip_mroute: move ip_mrouter_done outside lock
X_ip_mrouter_done might sleep, which triggers INVARIANTS to print additional errors on the screen. Move it outside the lock, but provide some basic synchronization to avoid race condition during module uninit/unload.
Obtained from: Semihalf Sponsored by: Stormshield
show more ...
|
| #
58630bdd
|
| 20-Jan-2022 |
Wojciech Macek <wma@FreeBSD.org> |
Revert "ip_mroute: do not call epoch_waitwhen lock is taken"
This reverts commit 2e72208b6c622505323ed48dc58830fc307392b1.
|
| #
2e72208b
|
| 11-Jan-2022 |
Wojciech Macek <wma@FreeBSD.org> |
ip_mroute: do not call epoch_waitwhen lock is taken
mrouter_done is called with RAW IP lock taken. Some annoying printfs are visible on the console if INVARIANTS option is enabled.
Provide atomic-b
ip_mroute: do not call epoch_waitwhen lock is taken
mrouter_done is called with RAW IP lock taken. Some annoying printfs are visible on the console if INVARIANTS option is enabled.
Provide atomic-based mechanism which counts enters and exits from/to critical section in ip_input and ip_output. Before de-initialization of function pointers ensure (with busy-wait) that mrouter de-initialization is visible to all readers and that we don't remove pointers (like ip_mforward etc.) in the middle of packet processing.
show more ...
|
| #
d40cd26a
|
| 17-May-2021 |
Wojciech Macek <wma@FreeBSD.org> |
ip_mroute: rework ip_mroute
Approved by: mw Obtained from: Semihalf Sponsored by: Stormshield Differential Revision: https://reviews.freebsd.org/D30354
Changes: 1. add spinlock to bw_meter
ip_mroute: rework ip_mroute
Approved by: mw Obtained from: Semihalf Sponsored by: Stormshield Differential Revision: https://reviews.freebsd.org/D30354
Changes: 1. add spinlock to bw_meter
If two contexts read and modify bw_meter values it might happen that these are corrupted. Guard only code fragments which do read-and-modify. Context which only do "reads" are not done inside spinlock block. The only sideffect that can happen is an 1-p;acket outdated value reported back to userspace.
2. replace all locks with a single RWLOCK
Multiple locks caused a performance issue in routing hot path, when two of them had to be taken. All locks were replaced with single RWLOCK which makes the hot path able to take only shared access to lock most of the times. All configuration routines have to take exclusive lock (as it was done before) but these operation are very rare compared to packet routing.
3. redesign MFC expire and UPCALL expire
Use generic kthread and cv_wait/cv_signal for deferring work. Previously, upcalls could be sent from two contexts which complicated the design. All upcall sending is now done in a kthread which allows hot path to work more efficient in some rare cases.
4. replace mutex-guarded linked list with lock free buf_ring
All message and data is now passed over lockless buf_ring. This allowed to remove some heavy locking when linked lists were used.
show more ...
|