[openwrt/openwrt] bridger: add bridge forwarding accelerator
LEDE Commits
lede-commits at lists.infradead.org
Wed Apr 6 05:13:34 PDT 2022
nbd pushed a commit to openwrt/openwrt.git, branch master:
https://git.openwrt.org/64f629e2078b0c76bfe176a6f2f56877391b1b4e
commit 64f629e2078b0c76bfe176a6f2f56877391b1b4e
Author: Felix Fietkau <nbd at nbd.name>
AuthorDate: Wed Apr 6 14:09:34 2022 +0200
bridger: add bridge forwarding accelerator
This package uses BPF to create a fast path which improves bridging performance
by bypassing the bridge layer. It also supports creating tc offload rules for
hardware that supports it.
Hardware offload support can be used with MT7622 + MT7915 once it is merged
Signed-off-by: Felix Fietkau <nbd at nbd.name>
---
package/network/services/bridger/Makefile | 62 ++++++++++++++++++++++
.../network/services/bridger/files/bridger.conf | 3 ++
.../network/services/bridger/files/bridger.init | 44 +++++++++++++++
3 files changed, 109 insertions(+)
diff --git a/package/network/services/bridger/Makefile b/package/network/services/bridger/Makefile
new file mode 100644
index 0000000000..dc32b1a6af
--- /dev/null
+++ b/package/network/services/bridger/Makefile
@@ -0,0 +1,62 @@
+#
+# Copyright (C) 2022 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=bridger
+PKG_SOURCE_PROTO:=git
+PKG_SOURCE_URL=https://github.com/nbd168/bridger
+PKG_SOURCE_DATE:=2022-04-06
+PKG_SOURCE_VERSION:=e8f6814a85b4ea951657e7018c5d77597400f44a
+PKG_MIRROR_HASH:=f917e099a9ab2a55745a7254239efabe695a722d5c448342198cdc847a4a24ac
+
+PKG_LICENSE:=GPL-2.0
+PKG_MAINTAINER:=Felix Fietkau <nbd at nbd.name>
+
+PKG_BUILD_DEPENDS:=bpf-headers
+
+PKG_BUILD_PARALLEL:=1
+
+include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/cmake.mk
+include $(INCLUDE_DIR)/bpf.mk
+include $(INCLUDE_DIR)/nls.mk
+
+define Package/bridger
+ SECTION:=utils
+ CATEGORY:=Base system
+ TITLE:=Bridge forwarding accelerator
+ DEPENDS:=+libbpf +libubox +libubus +libnl-tiny +kmod-sched-core +kmod-sched-flower +kmod-sched-bpf +kmod-sched-act-vlan $(BPF_DEPENDS)
+endef
+
+TARGET_CFLAGS += \
+ -I$(STAGING_DIR)/usr/include/libnl-tiny \
+ -I$(STAGING_DIR)/usr/include
+
+CMAKE_OPTIONS += \
+ -DLIBNL_LIBS=-lnl-tiny
+
+define Build/Compile
+ $(call CompileBPF,$(PKG_BUILD_DIR)/bridger-bpf.c)
+ $(Build/Compile/Default)
+endef
+
+define Package/bridger/install
+ $(INSTALL_DIR) \
+ $(1)/etc/config \
+ $(1)/etc/init.d \
+ $(1)/lib/bpf \
+ $(1)/usr/sbin
+ $(INSTALL_DATA) $(PKG_BUILD_DIR)/bridger-bpf.o $(1)/lib/bpf
+ $(INSTALL_BIN) \
+ $(PKG_INSTALL_DIR)/usr/bin/bridger \
+ $(1)/usr/sbin/
+ $(INSTALL_DATA) ./files/bridger.conf $(1)/etc/config/bridger
+ $(INSTALL_BIN) ./files/bridger.init $(1)/etc/init.d/bridger
+endef
+
+$(eval $(call BuildPackage,bridger))
diff --git a/package/network/services/bridger/files/bridger.conf b/package/network/services/bridger/files/bridger.conf
new file mode 100644
index 0000000000..cb43deff79
--- /dev/null
+++ b/package/network/services/bridger/files/bridger.conf
@@ -0,0 +1,3 @@
+config defaults
+ # example for blacklisting individual devices or bridges
+ # list blacklist eth0
diff --git a/package/network/services/bridger/files/bridger.init b/package/network/services/bridger/files/bridger.init
new file mode 100644
index 0000000000..2ba9f06b65
--- /dev/null
+++ b/package/network/services/bridger/files/bridger.init
@@ -0,0 +1,44 @@
+#!/bin/sh /etc/rc.common
+# Copyright (c) 2021 OpenWrt.org
+
+START=19
+
+USE_PROCD=1
+PROG=/usr/sbin/bridger
+
+add_blacklist() {
+ cfg="$1"
+
+ config_get blacklist "$cfg" blacklist
+ for i in $blacklist; do
+ json_add_string "" "$i"
+ done
+}
+
+reload_service() {
+ config_load bridger
+
+ json_init
+ json_add_string name "config"
+ json_add_array devices
+ config_foreach add_blacklist defaults
+ json_close_array
+
+ ubus call bridger set_blacklist "$(json_dump)"
+}
+
+service_triggers() {
+ procd_add_reload_trigger bridger
+}
+
+start_service() {
+ procd_open_instance
+ procd_set_param command "$PROG"
+ procd_set_param respawn
+ procd_close_instance
+}
+
+service_started() {
+ ubus -t 10 wait_for bridger
+ [ $? = 0 ] && reload_service
+}
More information about the lede-commits
mailing list