143 lines
4.3 KiB
Makefile
143 lines
4.3 KiB
Makefile
# SPDX-License-Identifier: GPL-2.0-only
|
|
#
|
|
# Copyright (C) 2024-2025 Anya Lin <hukk1996@gmail.com>
|
|
|
|
include $(TOPDIR)/rules.mk
|
|
|
|
PKG_NAME:=einat-ebpf
|
|
PKG_UPSTREAM_VERSION:=0.1.8
|
|
PKG_UPSTREAM_GITHASH:=
|
|
PKG_VERSION:=$(PKG_UPSTREAM_VERSION)$(if $(PKG_UPSTREAM_GITHASH),~$(call version_abbrev,$(PKG_UPSTREAM_GITHASH)))
|
|
PKG_RELEASE:=1
|
|
|
|
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_UPSTREAM_VERSION)
|
|
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_SOURCE_SUBDIR)
|
|
|
|
ifeq ($(PKG_UPSTREAM_GITHASH),)
|
|
PKG_SOURCE_URL:=https://codeload.github.com/EHfive/einat-ebpf/tar.gz/refs/tags/v$(PKG_UPSTREAM_VERSION)?
|
|
PKG_HASH:=3e47810e852dbad4cffeee1df8d3fea4018e4bda331ffc72f8e9a88f3c73d034
|
|
|
|
PKG_SOURCE:=$(PKG_SOURCE_SUBDIR).tar.gz
|
|
else
|
|
PKG_SOURCE_PROTO:=git
|
|
PKG_SOURCE_URL:=https://github.com/EHfive/einat-ebpf.git
|
|
PKG_SOURCE_VERSION:=$(PKG_UPSTREAM_GITHASH)
|
|
PKG_MIRROR_HASH:=6cc83cb1fb80896bb4c3d364d88e6009de0f05cf77373f1f18b1181057b6eff5
|
|
|
|
PKG_SOURCE:=$(PKG_SOURCE_SUBDIR)-$(PKG_SOURCE_VERSION).tar.gz
|
|
endif
|
|
|
|
PKG_MAINTAINER:=Anya Lin <hukk1996@gmail.com>
|
|
PKG_LICENSE:=GPL-2.0-or-later GPL-2.0-only
|
|
PKG_LICENSE_FILES:=LICENSE
|
|
|
|
PKG_BUILD_DEPENDS:=rust/host libbpf #HAS_BPF_TOOLCHAIN:bpf-headers # requires modified kernel
|
|
PKG_BUILD_PARALLEL:=1
|
|
PKG_BUILD_FLAGS:=no-mips16
|
|
|
|
PKG_CONFIG_DEPENDS+= \
|
|
CONFIG_EINAT_EBPF_IPV6 \
|
|
CONFIG_EINAT_EBPF_BACKEND_LIBBPF \
|
|
CONFIG_EINAT_EBPF_BINDGEN \
|
|
CONFIG_EINAT_EBPF_STATIC \
|
|
|
|
RUST_PKG_FEATURES:=$(subst $(space),$(comma),$(strip \
|
|
$(if $(CONFIG_EINAT_EBPF_IPV6),ipv6) \
|
|
$(if $(CONFIG_EINAT_EBPF_BACKEND_LIBBPF),libbpf) \
|
|
$(if $(CONFIG_EINAT_EBPF_BINDGEN),bindgen) \
|
|
$(if $(CONFIG_EINAT_EBPF_STATIC),static) \
|
|
))
|
|
|
|
#export EINAT_BPF_CFLAGS="-I/usr/include/aarch64-linux-gnu"
|
|
|
|
include $(INCLUDE_DIR)/bpf.mk
|
|
include $(INCLUDE_DIR)/package.mk
|
|
include $(TOPDIR)/feeds/packages/lang/rust/rust-package.mk
|
|
|
|
# Don't ignore Cargo.lock
|
|
Build/Compile:=$(call Build/Compile/Cargo,,--locked)
|
|
|
|
# The LLVM_PATH var is required so that einat's build script finds llvm-strip
|
|
TARGET_PATH_PKG:=$(LLVM_PATH):$(TARGET_PATH_PKG)
|
|
|
|
# Platform-specific features
|
|
# $(TOPDIR)/feeds/packages/lang/rust/rust-values.mk
|
|
# RUST_ARCH_DEPENDS:=@(aarch64||arm||i386||i686||mips||mipsel||mips64||mips64el||powerpc64||riscv64||x86_64)
|
|
EINAT_EBPF_RUST_ARCH_DEPENDS:=@(aarch64||arm||i386||i686||powerpc64||riscv64||x86_64) # Architectures other than x86_64 and aarch64 have not been tested.
|
|
|
|
define Package/$(PKG_NAME)
|
|
SECTION:=net
|
|
CATEGORY:=Network
|
|
SUBMENU:=Routing and Redirection
|
|
TITLE:=eBPF-based Endpoint-Independent NAT
|
|
URL:=https://github.com/EHfive/einat-ebpf
|
|
# You need enable KERNEL_DEBUG_INFO_BTF and disable KERNEL_DEBUG_INFO_REDUCED
|
|
DEPENDS:=$(EINAT_EBPF_RUST_ARCH_DEPENDS) $(BPF_DEPENDS) \
|
|
+kmod-sched-core +kmod-sched-bpf \
|
|
+EINAT_EBPF_BACKEND_LIBBPF:libbpf \
|
|
+@KERNEL_DEBUG_FS +@KERNEL_DEBUG_INFO_BTF
|
|
USERID:=einat:einat
|
|
PROVIDES:=einat
|
|
endef
|
|
|
|
define Package/$(PKG_NAME)/description
|
|
This eBPF application implements an "Endpoint-Independent Mapping" and
|
|
"Endpoint-Independent Filtering" NAT(network address translation) on
|
|
TC egress and ingress hooks.
|
|
endef
|
|
|
|
define Package/$(PKG_NAME)/config
|
|
menu "Features configuration"
|
|
depends on PACKAGE_einat-ebpf
|
|
|
|
config EINAT_EBPF_IPV6
|
|
bool "Enable IPV6 NAT66 feature"
|
|
default n
|
|
help
|
|
It would increase load time of eBPF programs to
|
|
about 4 times.
|
|
|
|
config EINAT_EBPF_BACKEND_LIBBPF
|
|
bool "Enable libbpf backend"
|
|
default y if (aarch64 || x86_64)
|
|
default n
|
|
help
|
|
Add fallback BPF loading backend: "libbpf".
|
|
|
|
config EINAT_EBPF_BINDGEN
|
|
bool "Enable bindgen"
|
|
default y if !ARCH_64BIT
|
|
default n
|
|
help
|
|
Bindgen for libbpf headers, required on 32-bit
|
|
platforms.
|
|
|
|
config EINAT_EBPF_STATIC
|
|
bool "Enable static compile"
|
|
default n
|
|
endmenu
|
|
endef
|
|
|
|
define Package/$(PKG_NAME)/conffiles
|
|
/etc/config/einat
|
|
endef
|
|
|
|
define Package/$(PKG_NAME)/install
|
|
$(CURDIR)/.prepare.sh $(VERSION) $(CURDIR) $(PKG_INSTALL_DIR)/bin/einat
|
|
|
|
$(INSTALL_DIR) $(1)/usr/bin/
|
|
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/bin/einat $(1)/usr/bin/
|
|
|
|
$(INSTALL_DIR) $(1)/etc/init.d/
|
|
$(INSTALL_BIN) $(CURDIR)/files/einat.init $(1)/etc/init.d/einat
|
|
|
|
$(INSTALL_DIR) $(1)/etc/config/
|
|
$(INSTALL_CONF) $(CURDIR)/files/einat.config $(1)/etc/config/einat
|
|
|
|
$(INSTALL_DIR) $(1)/etc/capabilities/
|
|
$(INSTALL_CONF) $(CURDIR)/files/capabilities.json $(1)/etc/capabilities/einat.json
|
|
endef
|
|
|
|
$(eval $(call RustBinPackage,$(PKG_NAME)))
|
|
$(eval $(call BuildPackage,$(PKG_NAME)))
|