freebsd-dev/sys
Alexander V. Chernikov 537d134373 Bring DPDK route lookups to FreeBSD.
This change introduces loadable fib lookup modules based on
 DPDK rte_lpm lib targeted for high-speed lookups in large-scale tables.
It is based on the lookup framework described in D27401.

IPv4 module is called dpdk_lpm4. It wraps around rte_lpm [1] library.
This library implements variation of DIR24-8 [2] lookup algorithm.
Module provide lockless route lookups and in-place incremental updates,
 allowing for good RIB performance.

IPv6 module is called dpdk_lpm6. It wraps around rte_lpm6 [3] library.
Implementation can be seen as multi-bit trie where the stride or number of bits
 inspected on each level varies from level to level.
It can vary from 1 to 14 memory accesses, with 5 being the average value
 for the lengths that are most commonly used in IPv6.
Module provide lockless route lookups for global unicast addresses
 and in-place incremental updates, allowing for good RIB performance.

Implementation details:
* wrapper code lives in `sys/contrib/dpdk_rte_lpm/dpdk_lpm[6].c`.
* rte_lpm[6] implementation contains both RIB and FIB code.
 . RIB ("rule_") code, backed by array of hash tables part has been commented out,
 as base radix already provides all the necessary primitives.
* link-local lookups are currently implemented as base radix lookup.
 This part should be converted to something like read-only radix trie.

Usage detail:
Compile kernel with option FIB_ALGO and load dpdk_lpm4/dpdk_lpm6
 module at any time. They will be picked up automatically when
 amount of routes raises to several thousand.

[1]: https://doc.dpdk.org/guides/prog_guide/lpm_lib.html
[2]: http://yuba.stanford.edu/~nickm/papers/Infocom98_lookup.pdf
[3]: https://doc.dpdk.org/guides/prog_guide/lpm6_lib.html

Differential Revision: https://reviews.freebsd.org/D27412
2021-01-09 12:41:04 +00:00
..
amd64 pccard: Remove wi(4) driver 2021-01-07 20:41:06 -07:00
arm Factor-out hardware-independent part of USB HID support to new module 2021-01-08 02:18:42 +03:00
arm64 arm64: gdb(4) machine-dependent bits 2021-01-08 14:53:44 -04:00
bsm Add aio_writev and aio_readv 2021-01-02 19:57:58 -07:00
cam cam: Remove Giant handling from cam_sim_alloc() 2021-01-03 11:50:31 -05:00
cddl dtrace: Fix /"string" == NULL/ comparisons using an uninitialized value. 2021-01-08 14:37:17 -08:00
compat linuxkpi: handle ARI 2021-01-08 23:17:21 +02:00
conf Fix LINT kernel build after 01f2e864f7. 2021-01-09 10:49:21 +01:00
contrib Bring DPDK route lookups to FreeBSD. 2021-01-09 12:41:04 +00:00
crypto armv8crypto: add AES-XTS support 2021-01-07 15:35:20 -04:00
ddb ddb: add ability to print user registers 2021-01-08 14:53:06 -04:00
dev fix big-endian platforms after 6733401935 2021-01-08 14:41:45 -08:00
dts Brand our DTS with the Linux version it was imported from 2020-10-10 07:18:51 +00:00
fs Fix vnode locking bug in fuse_vnop_copy_file_range 2021-01-03 11:16:20 -07:00
gdb gdb(4): allow bulk write of registers 2020-12-23 14:37:05 -04:00
geom geom(4): make g_newprovider_event() return if G_P_WITHER is set 2020-12-29 14:29:59 +00:00
gnu ARM64: Port FreeBSD to Nvidia Jetson TX1 and Nano. 2020-12-28 14:12:41 +01:00
i386 i386 kernel is not built with vt_vbefb 2021-01-08 20:58:23 +02:00
isa
kern sysctl: implement debug.kdb.panic_str 2021-01-08 14:30:28 -07:00
kgssapi State kgssapi dependency on xdr. 2020-09-17 22:29:38 +00:00
libkern libkern/strcasestr.c: Drop xlocale support and connect to build. 2021-01-08 02:18:42 +03:00
mips hid: Import functions and constants required by new subsystem 2021-01-08 02:18:42 +03:00
modules Bring DPDK route lookups to FreeBSD. 2021-01-09 12:41:04 +00:00
net iflib: ensure that tx interrupts enabled and cleanups 2021-01-07 14:07:35 -08:00
net80211 net80211: fix a typo 2020-11-04 12:07:33 +00:00
netgraph pccard: Remove bt3c(4) driver 2021-01-07 20:40:41 -07:00
netinet igmp: Avoid leaking mbuf when source validation fails 2021-01-08 13:32:04 -05:00
netinet6 Refactor rt_addrmsg() and rt_routemsg(). 2021-01-07 19:38:19 +00:00
netipsec Trigger soft lifetime expiration on sequence number 2020-10-16 11:27:01 +00:00
netpfil pf: Copy kif flags to userspace 2021-01-07 22:26:05 +01:00
netsmb net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
nfs nfs: clean up empty lines in .c and .h files 2020-09-01 21:25:39 +00:00
nfsclient nfs: clean up empty lines in .c and .h files 2020-09-01 21:25:39 +00:00
nfsserver nfs: Mark unused statistics variable as reserved 2020-11-18 04:35:49 +00:00
nlm nlm: clean up empty lines in .c and .h files 2020-09-01 22:14:52 +00:00
ofed Update user access region, UAR, APIs in the core in mlx5core. 2021-01-08 13:33:46 +01:00
opencrypto Remove the cloned file descriptors for /dev/crypto. 2020-11-25 00:10:54 +00:00
powerpc hid: Import functions and constants required by new subsystem 2021-01-08 02:18:42 +03:00
riscv sifive_uart: quiet GCC -Werror=parentheses 2021-01-08 17:32:18 -04:00
rpc Add a new "tlscertname" NFS mount option. 2020-12-23 13:42:55 -08:00
security mac: cheaper check for mac_vnode_check_readlink 2021-01-08 13:57:10 +00:00
sys efidev: remove EFIIOC_GET_TABLE ioctl 2021-01-08 10:41:50 -06:00
teken loader: implement framebuffer console 2021-01-02 21:41:36 +02:00
tests Add small tool to invoke kernel test framework tests. 2020-09-02 09:20:40 +00:00
tools sys/tools: Add a tool for generating arm and arm64 kernel images. 2020-12-30 13:22:04 +01:00
ufs ffs: Support O_DSYNC. 2021-01-08 13:15:56 +13:00
vm uma: Avoid unmapping direct-mapped slabs 2021-01-03 11:50:31 -05:00
x86 x86: stop punishing VMs with low priority for TSC timecounter 2020-12-23 12:45:15 +02:00
xdr xdr: clean up empty lines in .c and .h files 2020-09-01 22:13:28 +00:00
xen xen: allow limiting the amount of duplicated pending xenstore watches 2020-12-30 11:18:26 +01:00
Makefile