diff options
author | Chen Yahui <goodluckwillcomesoon@gmail.com> | 2022-09-16 21:07:57 +0800 |
---|---|---|
committer | Beno�t Ganne <bganne@cisco.com> | 2022-09-28 08:06:01 +0000 |
commit | ce668aa3f6b79ca505d1282ee4ba2b3c26fb126c (patch) | |
tree | f10a83f222fe04091ded3805fde438b60f3af900 | |
parent | 76a1d0580a4b05d7908e0b05bf6ceb974703f96d (diff) |
af_xdp: change RLIMIT_MEMLOCK before load bpf program
default RLIMIT_MEMLOCK is 64. if we use multi af_xdp interfaces or
load complex bpf program, libbpf will return permission error.
root cause is default 64 is not large enough. So we change it before
load bpf program.
Type: fix
Change-Id: Ia6aed19c9256c498cf1155586a54a32b3f444105
Signed-off-by: Chen Yahui <goodluckwillcomesoon@gmail.com>
-rw-r--r-- | src/plugins/af_xdp/device.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/plugins/af_xdp/device.c b/src/plugins/af_xdp/device.c index a571155a707..cccbf69cfdc 100644 --- a/src/plugins/af_xdp/device.c +++ b/src/plugins/af_xdp/device.c @@ -21,6 +21,7 @@ #include <linux/ethtool.h> #include <linux/if_link.h> #include <linux/sockios.h> +#include <linux/limits.h> #include <bpf/libbpf.h> #include <vlib/vlib.h> #include <vlib/unix/unix.h> @@ -197,6 +198,12 @@ static int af_xdp_load_program (af_xdp_create_if_args_t * args, af_xdp_device_t * ad) { int fd; + struct rlimit r = { RLIM_INFINITY, RLIM_INFINITY }; + + if (setrlimit (RLIMIT_MEMLOCK, &r)) + af_xdp_log (VLIB_LOG_LEVEL_WARNING, ad, + "setrlimit(%s) failed: %s (errno %d)", ad->linux_ifname, + strerror (errno), errno); ad->linux_ifindex = if_nametoindex (ad->linux_ifname); if (!ad->linux_ifindex) |