diff options
author | Bjoern A. Zeeb <bz@FreeBSD.org> | 2021-03-23 17:00:22 +0000 |
---|---|---|
committer | Bjoern A. Zeeb <bz@FreeBSD.org> | 2021-03-26 12:05:48 +0000 |
commit | bc042266b2bfc3f52f685df7ccdd6e857b4b9da9 (patch) | |
tree | 0888fcb1dbefb7ff6ab9e3998b009e08734397ae | |
parent | a9f0367b04b385e7bed47914662badf5ab18bc88 (diff) | |
download | src-bc042266b2bfc3f52f685df7ccdd6e857b4b9da9.tar.gz src-bc042266b2bfc3f52f685df7ccdd6e857b4b9da9.zip |
LinuxKPI: add net_ratelimit()
Add a net_ratelimit() compat implementation based on ppsratecheck().
Add a sysctl to allow tuning of the number of messages.
Sponsored-by: The FreeBSD Foundation
MFC-after: 2 weeks
Reviewed-by: hselasky
Differential Revision: https://reviews.freebsd.org/D29399
-rw-r--r-- | sys/compat/linuxkpi/common/include/linux/net.h | 10 | ||||
-rw-r--r-- | sys/compat/linuxkpi/common/src/linux_compat.c | 15 |
2 files changed, 25 insertions, 0 deletions
diff --git a/sys/compat/linuxkpi/common/include/linux/net.h b/sys/compat/linuxkpi/common/include/linux/net.h index 282a45d2db32..5365cd0e9552 100644 --- a/sys/compat/linuxkpi/common/include/linux/net.h +++ b/sys/compat/linuxkpi/common/include/linux/net.h @@ -76,4 +76,14 @@ sock_release(struct socket *so) soclose(so); } + +int linuxkpi_net_ratelimit(void); + +static inline int +net_ratelimit(void) +{ + + return (linuxkpi_net_ratelimit()); +} + #endif /* _LINUX_NET_H_ */ diff --git a/sys/compat/linuxkpi/common/src/linux_compat.c b/sys/compat/linuxkpi/common/src/linux_compat.c index 5f7e2664bee1..60745fbf92da 100644 --- a/sys/compat/linuxkpi/common/src/linux_compat.c +++ b/sys/compat/linuxkpi/common/src/linux_compat.c @@ -51,6 +51,7 @@ __FBSDID("$FreeBSD$"); #include <sys/rwlock.h> #include <sys/mman.h> #include <sys/stack.h> +#include <sys/time.h> #include <sys/user.h> #include <vm/vm.h> @@ -99,6 +100,12 @@ int linuxkpi_debug; SYSCTL_INT(_compat_linuxkpi, OID_AUTO, debug, CTLFLAG_RWTUN, &linuxkpi_debug, 0, "Set to enable pr_debug() prints. Clear to disable."); +static struct timeval lkpi_net_lastlog; +static int lkpi_net_curpps; +static int lkpi_net_maxpps = 99; +SYSCTL_INT(_compat_linuxkpi, OID_AUTO, net_ratelimit, CTLFLAG_RWTUN, + &lkpi_net_maxpps, 0, "Limit number of LinuxKPI net messages per second."); + MALLOC_DEFINE(M_KMALLOC, "linux", "Linux kmalloc compat"); #include <linux/rbtree.h> @@ -2511,6 +2518,14 @@ linux_dump_stack(void) #endif } +int +linuxkpi_net_ratelimit(void) +{ + + return (ppsratecheck(&lkpi_net_lastlog, &lkpi_net_curpps, + lkpi_net_maxpps)); +} + #if defined(__i386__) || defined(__amd64__) bool linux_cpu_has_clflush; #endif |