From f1e06cf167ef1b0c8b7565611699bd593893c1c0 Mon Sep 17 00:00:00 2001 From: Isaev Ruslan Date: Tue, 6 Sep 2022 18:07:09 -0400 Subject: [PATCH 01/12] some fixes and upgrades to make it work Signed-off-by: Isaev Ruslan --- feeds.conf | 3 +- include/cmake.mk | 92 +- include/host-build.mk | 15 +- include/prereq-build.mk | 102 +- include/toplevel.mk | 1 + package/libs/libjson-c/Makefile | 31 +- package/libs/libjson-c/patches/000-libm.patch | 50 - ...Prevent-division-by-zero-in-linkhash.patch | 32 - .../patches/001-dont-build-docs.patch | 11 + .../patches/002-Fix-integer-overflows.patch | 83 - .../libs/libjson-c/patches/010-clang.patch | 11 + package/libs/libnl-tiny/Makefile | 29 +- package/libs/libnl-tiny/files/libnl-tiny.pc | 10 - package/libs/libnl-tiny/src/Makefile | 17 - package/libs/libnl-tiny/src/attr.c | 674 ----- package/libs/libnl-tiny/src/cache.c | 376 --- package/libs/libnl-tiny/src/cache_mngt.c | 131 - package/libs/libnl-tiny/src/error.c | 116 - package/libs/libnl-tiny/src/genl.c | 268 -- package/libs/libnl-tiny/src/genl_ctrl.c | 380 --- package/libs/libnl-tiny/src/genl_family.c | 169 -- package/libs/libnl-tiny/src/genl_mngt.c | 193 -- package/libs/libnl-tiny/src/handlers.c | 162 -- .../libnl-tiny/src/include/netlink-generic.h | 20 - .../libnl-tiny/src/include/netlink-local.h | 160 -- .../libnl-tiny/src/include/netlink-types.h | 88 - .../libnl-tiny/src/include/netlink/addr.h | 69 - .../libnl-tiny/src/include/netlink/attr.h | 726 ------ .../src/include/netlink/cache-api.h | 199 -- .../libnl-tiny/src/include/netlink/cache.h | 128 - .../libnl-tiny/src/include/netlink/data.h | 41 - .../libnl-tiny/src/include/netlink/errno.h | 64 - .../src/include/netlink/genl/ctrl.h | 40 - .../src/include/netlink/genl/family.h | 134 - .../src/include/netlink/genl/genl.h | 47 - .../src/include/netlink/genl/mngt.h | 87 - .../libnl-tiny/src/include/netlink/handlers.h | 231 -- .../libnl-tiny/src/include/netlink/list.h | 88 - .../libs/libnl-tiny/src/include/netlink/msg.h | 308 --- .../src/include/netlink/netlink-compat.h | 50 - .../src/include/netlink/netlink-kernel.h | 196 -- .../libnl-tiny/src/include/netlink/netlink.h | 82 - .../src/include/netlink/object-api.h | 331 --- .../libnl-tiny/src/include/netlink/object.h | 164 -- .../libnl-tiny/src/include/netlink/socket.h | 231 -- .../libnl-tiny/src/include/netlink/types.h | 121 - .../libnl-tiny/src/include/netlink/utils.h | 78 - .../libnl-tiny/src/include/netlink/version.h | 18 - package/libs/libnl-tiny/src/include/unl.h | 47 - package/libs/libnl-tiny/src/msg.c | 564 ---- package/libs/libnl-tiny/src/nl.c | 720 ------ package/libs/libnl-tiny/src/object.c | 147 -- package/libs/libnl-tiny/src/socket.c | 406 --- package/libs/libnl-tiny/src/unl.c | 287 --- package/libs/libubox/Makefile | 2 +- package/libs/zlib/Makefile | 2 +- ...m-specific-optimisations-for-inflate.patch | 502 ---- .../zlib/patches/002-fix-CVE-2019-9840.patch | 68 - ...m-specific-optimisations-for-inflate.patch | 501 ++++ ...cefiles-in-patch-002-to-buildsystem.patch} | 0 ...ch => 005-relative-pkg-config-paths.patch} | 0 .../zlib/patches/006-fix-CVE-2022-37434.patch | 32 + ...x-compressor-crash-on-certain-inputs.patch | 343 +++ ...ll-dereference-in-fix-CVE-2022-37434.patch | 29 + package/network/services/odhcpd/Makefile | 12 +- .../services/odhcpd/files/odhcpd-update | 2 +- .../services/odhcpd/files/odhcpd.defaults | 38 +- package/network/utils/iw/Makefile | 20 +- package/system/procd/Makefile | 75 +- package/system/procd/files/hotplug.json | 22 +- package/system/procd/files/procd.sh | 123 +- package/system/procd/files/reload_config | 2 +- package/system/procd/files/service | 30 + package/system/procd/files/uxc.init | 16 + package/system/ubus/Makefile | 14 +- package/system/uci/Makefile | 14 +- package/system/uci/files/lib/config/uci.sh | 9 +- ...arse_package-fix-heap-use-after-free.patch | 51 - ...-file-Check-buffer-size-after-strtok.patch | 104 - .../utils/cryptsetup/patches/001-json-c.patch | 249 ++ .../patches/523-iw-fix-compile-issues.patch | 23 +- quick_start.sh | 2 +- rules.mk | 91 +- target/linux/ipq60xx/image/Makefile | 2 +- target/linux/ipq60xx/image/ipq60xx.mk | 15 + tools/Makefile | 6 +- tools/cmake/Makefile | 42 +- .../cmake/patches/100-disable_qt_tests.patch | 34 - tools/cmake/patches/100-no-testing.patch | 33 + .../110-libarchive-fix-libressl-compat.patch | 11 - .../120-curl-fix-libressl-linking.patch | 6 +- .../130-bootstrap_parallel_make_flag.patch | 6 +- .../patches/140-libarchive-fix-libressl.patch | 25 - tools/libtool/Makefile | 4 +- tools/libtool/patches/000-relocatable.patch | 12 +- .../libtool/patches/001-fix-func_append.patch | 22 - tools/libtool/patches/100-libdir-fixes.patch | 12 +- ...10-dont-use-target-dir-for-relinking.patch | 4 +- .../120-strip-unsafe-dirs-for-relinking.patch | 2 +- tools/libtool/patches/150-trailingslash.patch | 4 +- .../libtool/patches/160-passthrough-ssp.patch | 2 +- .../patches/200-openwrt-branding.patch | 12 +- tools/mpfr/Makefile | 4 +- tools/mpfr/patches/001-only_src.patch | 4 +- tools/ninja/Makefile | 39 + .../patches/100-make_jobserver_support.patch | 2279 +++++++++++++++++ 106 files changed, 4146 insertions(+), 9638 deletions(-) delete mode 100644 package/libs/libjson-c/patches/000-libm.patch delete mode 100644 package/libs/libjson-c/patches/001-Prevent-division-by-zero-in-linkhash.patch create mode 100644 package/libs/libjson-c/patches/001-dont-build-docs.patch delete mode 100644 package/libs/libjson-c/patches/002-Fix-integer-overflows.patch create mode 100644 package/libs/libjson-c/patches/010-clang.patch delete mode 100644 package/libs/libnl-tiny/files/libnl-tiny.pc delete mode 100644 package/libs/libnl-tiny/src/Makefile delete mode 100644 package/libs/libnl-tiny/src/attr.c delete mode 100644 package/libs/libnl-tiny/src/cache.c delete mode 100644 package/libs/libnl-tiny/src/cache_mngt.c delete mode 100644 package/libs/libnl-tiny/src/error.c delete mode 100644 package/libs/libnl-tiny/src/genl.c delete mode 100644 package/libs/libnl-tiny/src/genl_ctrl.c delete mode 100644 package/libs/libnl-tiny/src/genl_family.c delete mode 100644 package/libs/libnl-tiny/src/genl_mngt.c delete mode 100644 package/libs/libnl-tiny/src/handlers.c delete mode 100644 package/libs/libnl-tiny/src/include/netlink-generic.h delete mode 100644 package/libs/libnl-tiny/src/include/netlink-local.h delete mode 100644 package/libs/libnl-tiny/src/include/netlink-types.h delete mode 100644 package/libs/libnl-tiny/src/include/netlink/addr.h delete mode 100644 package/libs/libnl-tiny/src/include/netlink/attr.h delete mode 100644 package/libs/libnl-tiny/src/include/netlink/cache-api.h delete mode 100644 package/libs/libnl-tiny/src/include/netlink/cache.h delete mode 100644 package/libs/libnl-tiny/src/include/netlink/data.h delete mode 100644 package/libs/libnl-tiny/src/include/netlink/errno.h delete mode 100644 package/libs/libnl-tiny/src/include/netlink/genl/ctrl.h delete mode 100644 package/libs/libnl-tiny/src/include/netlink/genl/family.h delete mode 100644 package/libs/libnl-tiny/src/include/netlink/genl/genl.h delete mode 100644 package/libs/libnl-tiny/src/include/netlink/genl/mngt.h delete mode 100644 package/libs/libnl-tiny/src/include/netlink/handlers.h delete mode 100644 package/libs/libnl-tiny/src/include/netlink/list.h delete mode 100644 package/libs/libnl-tiny/src/include/netlink/msg.h delete mode 100644 package/libs/libnl-tiny/src/include/netlink/netlink-compat.h delete mode 100644 package/libs/libnl-tiny/src/include/netlink/netlink-kernel.h delete mode 100644 package/libs/libnl-tiny/src/include/netlink/netlink.h delete mode 100644 package/libs/libnl-tiny/src/include/netlink/object-api.h delete mode 100644 package/libs/libnl-tiny/src/include/netlink/object.h delete mode 100644 package/libs/libnl-tiny/src/include/netlink/socket.h delete mode 100644 package/libs/libnl-tiny/src/include/netlink/types.h delete mode 100644 package/libs/libnl-tiny/src/include/netlink/utils.h delete mode 100644 package/libs/libnl-tiny/src/include/netlink/version.h delete mode 100644 package/libs/libnl-tiny/src/include/unl.h delete mode 100644 package/libs/libnl-tiny/src/msg.c delete mode 100644 package/libs/libnl-tiny/src/nl.c delete mode 100644 package/libs/libnl-tiny/src/object.c delete mode 100644 package/libs/libnl-tiny/src/socket.c delete mode 100644 package/libs/libnl-tiny/src/unl.c delete mode 100644 package/libs/zlib/patches/002-fix-CVE-2019-9840.patch create mode 100644 package/libs/zlib/patches/003-arm-specific-optimisations-for-inflate.patch rename package/libs/zlib/patches/{003-attach-sourcefiles-in-patch-002-to-buildsystem.patch => 004-attach-sourcefiles-in-patch-002-to-buildsystem.patch} (100%) rename package/libs/zlib/patches/{004-relative-pkg-config-paths.patch => 005-relative-pkg-config-paths.patch} (100%) create mode 100644 package/libs/zlib/patches/006-fix-CVE-2022-37434.patch create mode 100644 package/libs/zlib/patches/006-fix-compressor-crash-on-certain-inputs.patch create mode 100644 package/libs/zlib/patches/007-fix-null-dereference-in-fix-CVE-2022-37434.patch create mode 100644 package/system/procd/files/service create mode 100644 package/system/procd/files/uxc.init delete mode 100644 package/system/uci/patches/001-file-uci_parse_package-fix-heap-use-after-free.patch delete mode 100644 package/system/uci/patches/002-file-Check-buffer-size-after-strtok.patch create mode 100644 qca/feeds/packages/utils/cryptsetup/patches/001-json-c.patch delete mode 100644 tools/cmake/patches/100-disable_qt_tests.patch create mode 100644 tools/cmake/patches/100-no-testing.patch delete mode 100644 tools/cmake/patches/110-libarchive-fix-libressl-compat.patch delete mode 100644 tools/cmake/patches/140-libarchive-fix-libressl.patch delete mode 100644 tools/libtool/patches/001-fix-func_append.patch create mode 100644 tools/ninja/Makefile create mode 100644 tools/ninja/patches/100-make_jobserver_support.patch diff --git a/feeds.conf b/feeds.conf index e1a43d5fdcf..ac8efcca7dd 100644 --- a/feeds.conf +++ b/feeds.conf @@ -7,7 +7,6 @@ src-link nss_prop ../qca/feeds/nss-prop src-link nss_host ../qca/feeds/nss-host src-link nss_cust ../qca/feeds/nss_cust src-link nss_userspace ../qca/feeds/nss-userspace -src-link nss_sap ../qca/feeds/nss-sap src-link wlan_open ../qca/feeds/wlan-open src-link wlan_hostapd ../qca/feeds/wlan-hostapd src-link wlan_iw ../qca/feeds/wlan-iw @@ -35,6 +34,7 @@ src-link wigig_utils_oss ../qca/feeds/wigig-utils-oss src-link wigig_firmware ../qca/feeds/wigig-firmware src-link ssdk ../qca/feeds/ssdk src-link bluetooth ../qca/feeds/bluetooth +src-link zigbee ../qca/feeds/zigbee_efr32 src-link thread ../qca/feeds/thread src-link ioe_bridges ../qca/feeds/ioe-bridges src-link qca_hk ../qca/feeds/qca_hk @@ -63,4 +63,3 @@ src-link qca_ezmesh ../qca/feeds/qca-ezmesh src-link qtip_server ../qca/feeds/qtip-server src-link wifi_fw_headers ../qca/feeds/wifi-fw-headers src-link odd ../qca/feeds/odd -src-link wifi_debug_tools ../qca/feeds/wifi-debug-tools diff --git a/include/cmake.mk b/include/cmake.mk index 8989b4744fe..9b169b06934 100644 --- a/include/cmake.mk +++ b/include/cmake.mk @@ -1,43 +1,49 @@ cmake_bool = $(patsubst %,-D%:BOOL=$(if $($(1)),ON,OFF),$(2)) +PKG_USE_NINJA ?= 1 +HOST_USE_NINJA ?= 1 +ifeq ($(PKG_USE_NINJA),1) + PKG_BUILD_PARALLEL ?= 1 +endif +ifeq ($(HOST_USE_NINJA),1) + HOST_BUILD_PARALLEL ?= 1 +endif PKG_INSTALL:=1 ifneq ($(findstring c,$(OPENWRT_VERBOSE)),) MAKE_FLAGS+=VERBOSE=1 + HOST_MAKE_FLAGS+=VERBOSE=1 endif CMAKE_BINARY_DIR = $(PKG_BUILD_DIR)$(if $(CMAKE_BINARY_SUBDIR),/$(CMAKE_BINARY_SUBDIR)) CMAKE_SOURCE_DIR = $(PKG_BUILD_DIR)$(if $(CMAKE_SOURCE_SUBDIR),/$(CMAKE_SOURCE_SUBDIR)) HOST_CMAKE_SOURCE_DIR = $(HOST_BUILD_DIR)$(if $(CMAKE_SOURCE_SUBDIR),/$(CMAKE_SOURCE_SUBDIR)) +HOST_CMAKE_BINARY_DIR = $(HOST_BUILD_DIR)$(if $(CMAKE_BINARY_SUBDIR),/$(CMAKE_BINARY_SUBDIR)) MAKE_PATH = $(firstword $(CMAKE_BINARY_SUBDIR) .) ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),) cmake_tool=$(TOOLCHAIN_DIR)/bin/$(1) else - cmake_tool=$(shell which $(1)) + cmake_tool=$(shell command -v $(1)) endif ifeq ($(CONFIG_CCACHE),) + CMAKE_C_COMPILER_LAUNCHER:= + CMAKE_CXX_COMPILER_LAUNCHER:= CMAKE_C_COMPILER:=$(call cmake_tool,$(TARGET_CC)) CMAKE_CXX_COMPILER:=$(call cmake_tool,$(TARGET_CXX)) - CMAKE_C_COMPILER_ARG1:= - CMAKE_CXX_COMPILER_ARG1:= CMAKE_HOST_C_COMPILER:=$(HOSTCC) CMAKE_HOST_CXX_COMPILER:=$(HOSTCXX) - CMAKE_HOST_C_COMPILER_ARG1:= - CMAKE_HOST_CXX_COMPILER_ARG1:= else CCACHE:=$(STAGING_DIR_HOST)/bin/ccache - CMAKE_C_COMPILER:=$(CCACHE) - CMAKE_C_COMPILER_ARG1:=$(TARGET_CC_NOCACHE) - CMAKE_CXX_COMPILER:=$(CCACHE) - CMAKE_CXX_COMPILER_ARG1:=$(TARGET_CXX_NOCACHE) - - CMAKE_HOST_C_COMPILER:=$(CCACHE) - CMAKE_HOST_C_COMPILER_ARG1:=$(HOSTCC_NOCACHE) - CMAKE_HOST_CXX_COMPILER:=$(CCACHE) - CMAKE_HOST_CXX_COMPILER_ARG1:=$(HOSTCXX_NOCACHE) + CMAKE_C_COMPILER_LAUNCHER:=$(CCACHE) + CMAKE_CXX_COMPILER_LAUNCHER:=$(CCACHE) + CMAKE_C_COMPILER:=$(TARGET_CC_NOCACHE) + CMAKE_CXX_COMPILER:=$(TARGET_CXX_NOCACHE) + + CMAKE_HOST_C_COMPILER:=$(HOSTCC_NOCACHE) + CMAKE_HOST_CXX_COMPILER:=$(HOSTCXX_NOCACHE) endif CMAKE_AR:=$(call cmake_tool,$(TARGET_AR)) CMAKE_NM:=$(call cmake_tool,$(TARGET_NM)) @@ -46,6 +52,35 @@ CMAKE_RANLIB:=$(call cmake_tool,$(TARGET_RANLIB)) CMAKE_FIND_ROOT_PATH:=$(STAGING_DIR)/usr;$(TOOLCHAIN_DIR)$(if $(CONFIG_EXTERNAL_TOOLCHAIN),;$(CONFIG_TOOLCHAIN_ROOT)) CMAKE_HOST_FIND_ROOT_PATH:=$(STAGING_DIR)/host;$(STAGING_DIR_HOSTPKG);$(STAGING_DIR_HOST) CMAKE_SHARED_LDFLAGS:=-Wl,-Bsymbolic-functions +CMAKE_HOST_INSTALL_PREFIX = $(HOST_BUILD_PREFIX) + +ifeq ($(HOST_USE_NINJA),1) + CMAKE_HOST_OPTIONS += -DCMAKE_GENERATOR="Ninja" + + define Host/Compile/Default + +$(NINJA) -C $(HOST_CMAKE_BINARY_DIR) $(1) + endef + + define Host/Install/Default + +$(NINJA) -C $(HOST_CMAKE_BINARY_DIR) install + endef + + define Host/Uninstall/Default + +$(NINJA) -C $(HOST_CMAKE_BINARY_DIR) uninstall + endef +endif + +ifeq ($(PKG_USE_NINJA),1) + CMAKE_OPTIONS += -DCMAKE_GENERATOR="Ninja" + + define Build/Compile/Default + +$(NINJA) -C $(CMAKE_BINARY_DIR) $(1) + endef + + define Build/Install/Default + +DESTDIR="$(PKG_INSTALL_DIR)" $(NINJA) -C $(CMAKE_BINARY_DIR) install + endef +endif define Build/Configure/Default mkdir -p $(CMAKE_BINARY_DIR) @@ -60,12 +95,12 @@ define Build/Configure/Default -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_C_FLAGS_RELEASE="-DNDEBUG" \ -DCMAKE_CXX_FLAGS_RELEASE="-DNDEBUG" \ + -DCMAKE_C_COMPILER_LAUNCHER="$(CMAKE_C_COMPILER_LAUNCHER)" \ -DCMAKE_C_COMPILER="$(CMAKE_C_COMPILER)" \ - -DCMAKE_C_COMPILER_ARG1="$(CMAKE_C_COMPILER_ARG1)" \ + -DCMAKE_CXX_COMPILER_LAUNCHER="$(CMAKE_CXX_COMPILER_LAUNCHER)" \ -DCMAKE_CXX_COMPILER="$(CMAKE_CXX_COMPILER)" \ - -DCMAKE_CXX_COMPILER_ARG1="$(CMAKE_CXX_COMPILER_ARG1)" \ + -DCMAKE_ASM_COMPILER_LAUNCHER="$(CMAKE_C_COMPILER_LAUNCHER)" \ -DCMAKE_ASM_COMPILER="$(CMAKE_C_COMPILER)" \ - -DCMAKE_ASM_COMPILER_ARG1="$(CMAKE_C_COMPILER_ARG1)" \ -DCMAKE_EXE_LINKER_FLAGS:STRING="$(TARGET_LDFLAGS)" \ -DCMAKE_MODULE_LINKER_FLAGS:STRING="$(TARGET_LDFLAGS) $(CMAKE_SHARED_LDFLAGS)" \ -DCMAKE_SHARED_LINKER_FLAGS:STRING="$(TARGET_LDFLAGS) $(CMAKE_SHARED_LDFLAGS)" \ @@ -81,6 +116,12 @@ define Build/Configure/Default -DDL_LIBRARY=$(STAGING_DIR) \ -DCMAKE_PREFIX_PATH=$(STAGING_DIR) \ -DCMAKE_SKIP_RPATH=TRUE \ + -DCMAKE_EXPORT_PACKAGE_REGISTRY=FALSE \ + -DCMAKE_EXPORT_NO_PACKAGE_REGISTRY=TRUE \ + -DCMAKE_FIND_USE_PACKAGE_REGISTRY=FALSE \ + -DCMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY=TRUE \ + -DCMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY=FALSE \ + -DCMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY=TRUE \ $(CMAKE_OPTIONS) \ $(CMAKE_SOURCE_DIR) \ ) @@ -94,18 +135,19 @@ endef Build/InstallDev = $(if $(CMAKE_INSTALL),$(Build/InstallDev/cmake)) define Host/Configure/Default - (cd $(HOST_BUILD_DIR); \ + mkdir -p "$(HOST_CMAKE_BINARY_DIR)" + (cd $(HOST_CMAKE_BINARY_DIR); \ CFLAGS="$(HOST_CFLAGS)" \ CXXFLAGS="$(HOST_CFLAGS)" \ LDFLAGS="$(HOST_LDFLAGS)" \ cmake \ -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_C_COMPILER_LAUNCHER="$(CMAKE_C_COMPILER_LAUNCHER)" \ -DCMAKE_C_COMPILER="$(CMAKE_HOST_C_COMPILER)" \ - -DCMAKE_C_COMPILER_ARG1="$(CMAKE_HOST_C_COMPILER_ARG1)" \ + -DCMAKE_CXX_COMPILER_LAUNCHER="$(CMAKE_CXX_COMPILER_LAUNCHER)" \ -DCMAKE_CXX_COMPILER="$(CMAKE_HOST_CXX_COMPILER)" \ - -DCMAKE_CXX_COMPILER_ARG1="$(CMAKE_HOST_CXX_COMPILER_ARG1)" \ + -DCMAKE_ASM_COMPILER_LAUNCHER="$(CMAKE_C_COMPILER_LAUNCHER)" \ -DCMAKE_ASM_COMPILER="$(CMAKE_HOST_C_COMPILER)" \ - -DCMAKE_ASM_COMPILER_ARG1="$(CMAKE_HOST_C_COMPILER_ARG1)" \ -DCMAKE_C_FLAGS_RELEASE="-DNDEBUG" \ -DCMAKE_CXX_FLAGS_RELEASE="-DNDEBUG" \ -DCMAKE_EXE_LINKER_FLAGS:STRING="$(HOST_LDFLAGS)" \ @@ -116,10 +158,16 @@ define Host/Configure/Default -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY \ -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY \ -DCMAKE_STRIP=: \ - -DCMAKE_INSTALL_PREFIX=$(HOST_BUILD_PREFIX) \ + -DCMAKE_INSTALL_PREFIX=$(CMAKE_HOST_INSTALL_PREFIX) \ -DCMAKE_PREFIX_PATH=$(HOST_BUILD_PREFIX) \ -DCMAKE_SKIP_RPATH=TRUE \ -DCMAKE_INSTALL_LIBDIR=lib \ + -DCMAKE_EXPORT_PACKAGE_REGISTRY=FALSE \ + -DCMAKE_EXPORT_NO_PACKAGE_REGISTRY=TRUE \ + -DCMAKE_FIND_USE_PACKAGE_REGISTRY=FALSE \ + -DCMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY=TRUE \ + -DCMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY=FALSE \ + -DCMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY=TRUE \ $(CMAKE_HOST_OPTIONS) \ $(HOST_CMAKE_SOURCE_DIR) \ ) diff --git a/include/host-build.mk b/include/host-build.mk index 79a9b1f8d60..7f76eb1a2f5 100644 --- a/include/host-build.mk +++ b/include/host-build.mk @@ -1,9 +1,6 @@ +# SPDX-License-Identifier: GPL-2.0-only # -# Copyright (C) 2006-2010 OpenWrt.org -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# +# Copyright (C) 2006-2020 OpenWrt.org include $(INCLUDE_DIR)/download.mk @@ -54,6 +51,7 @@ HOST_CONFIGURE_VARS = \ CFLAGS="$(HOST_CFLAGS)" \ CXX="$(HOSTCXX)" \ CPPFLAGS="$(HOST_CPPFLAGS)" \ + CXXFLAGS="$(HOST_CXXFLAGS)" \ LDFLAGS="$(HOST_LDFLAGS)" \ CONFIG_SHELL="$(SHELL)" @@ -132,7 +130,6 @@ define Host/Exports/Default $(1) : export STAGING_PREFIX=$$(HOST_BUILD_PREFIX) $(1) : export PKG_CONFIG_PATH=$$(STAGING_DIR_HOST)/lib/pkgconfig:$$(HOST_BUILD_PREFIX)/lib/pkgconfig $(1) : export PKG_CONFIG_LIBDIR=$$(HOST_BUILD_PREFIX)/lib/pkgconfig - $(if $(CONFIG_CCACHE),$(1) : export CCACHE_DIR:=$(STAGING_DIR_HOST)/ccache) $(if $(HOST_CONFIG_SITE),$(1) : export CONFIG_SITE:=$(HOST_CONFIG_SITE)) $(if $(IS_PACKAGE_BUILD),$(1) : export PATH=$$(TARGET_PATH_PKG)) endef @@ -184,7 +181,7 @@ ifndef DUMP clean-build: host-clean-build endif - $(DL_DIR)/$(FILE): FORCE + $(call check_download_integrity) $(_host_target)host-prepare: $(HOST_STAMP_PREPARED) $(_host_target)host-configure: $(HOST_STAMP_CONFIGURED) @@ -192,11 +189,11 @@ ifndef DUMP host-install: host-compile host-clean-build: FORCE + $(call Host/Uninstall) rm -rf $(HOST_BUILD_DIR) $(HOST_STAMP_BUILT) host-clean: host-clean-build $(call Host/Clean) - $(call Host/Uninstall) rm -rf $(HOST_STAMP_INSTALLED) ifneq ($(CONFIG_AUTOREMOVE),) @@ -209,5 +206,5 @@ endif define HostBuild $(HostBuild/Core) - $(if $(if $(PKG_HOST_ONLY),,$(STAMP_PREPARED)),,$(if $(strip $(PKG_SOURCE_URL)),$(call Download,default))) + $(if $(if $(PKG_HOST_ONLY),,$(if $(and $(filter host-%,$(MAKECMDGOALS)),$(PKG_SKIP_DOWNLOAD)),,$(STAMP_PREPARED))),,$(if $(strip $(PKG_SOURCE_URL)),$(call Download,default))) endef diff --git a/include/prereq-build.mk b/include/prereq-build.mk index cfcc6b3654f..70e10616802 100644 --- a/include/prereq-build.mk +++ b/include/prereq-build.mk @@ -1,9 +1,6 @@ +# SPDX-License-Identifier: GPL-2.0-only # -# Copyright (C) 2006-2012 OpenWrt.org -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# +# Copyright (C) 2006-2020 OpenWrt.org include $(TOPDIR)/rules.mk include $(INCLUDE_DIR)/prereq.mk @@ -14,8 +11,8 @@ PKG_NAME:=Build dependency # Required for the toolchain $(eval $(call TestHostCommand,working-make, \ - Please install GNU make v3.81 or later. (This version has bugs), \ - $(MAKE) -v | grep -E 'Make (3\.8[1-9]|3\.9[0-9]|[4-9]\.)')) + Please install GNU make v4.1 or later., \ + $(MAKE) -v | grep -E 'Make (4\.[1-9]|[5-9]\.)')) $(eval $(call TestHostCommand,case-sensitive-fs, \ OpenWrt can only be built on a case-sensitive filesystem, \ @@ -28,25 +25,25 @@ $(eval $(call TestHostCommand,proper-umask, \ ifndef IB $(eval $(call SetupHostCommand,gcc, \ - Please install the GNU C Compiler (gcc) 4.8 or later, \ - $(CC) -dumpversion | grep -E '^(4\.[8-9]|[5-9]\.?|1[0-9]\.?)', \ - gcc -dumpversion | grep -E '^(4\.[8-9]|[5-9]\.?|1[0-9]\.?)', \ + Please install the GNU C Compiler (gcc) 6 or later, \ + $(CC) -dumpversion | grep -E '^([6-9]\.?|1[0-9]\.?)', \ + gcc -dumpversion | grep -E '^([6-9]\.?|1[0-9]\.?)', \ gcc --version | grep -E 'Apple.(LLVM|clang)' )) $(eval $(call TestHostCommand,working-gcc, \ - \nPlease reinstall the GNU C Compiler (4.8 or later) - \ + Please reinstall the GNU C Compiler (6 or later) - \ it appears to be broken, \ echo 'int main(int argc, char **argv) { return 0; }' | \ gcc -x c -o $(TMP_DIR)/a.out -)) $(eval $(call SetupHostCommand,g++, \ - Please install the GNU C++ Compiler (g++) 4.8 or later, \ - $(CXX) -dumpversion | grep -E '^(4\.[8-9]|[5-9]\.?|1[0-9]\.?)', \ - g++ -dumpversion | grep -E '^(4\.[8-9]|[5-9]\.?|1[0-9]\.?)', \ + Please install the GNU C++ Compiler (g++) 6 or later, \ + $(CXX) -dumpversion | grep -E '^([6-9]\.?|1[0-9]\.?)', \ + g++ -dumpversion | grep -E '^([6-9]\.?|1[0-9]\.?)', \ g++ --version | grep -E 'Apple.(LLVM|clang)' )) $(eval $(call TestHostCommand,working-g++, \ - \nPlease reinstall the GNU C++ Compiler (4.8 or later) - \ + Please reinstall the GNU C++ Compiler (6 or later) - \ it appears to be broken, \ echo 'int main(int argc, char **argv) { return 0; }' | \ g++ -x c++ -o $(TMP_DIR)/a.out - -lstdc++ && \ @@ -96,21 +93,26 @@ $(eval $(call SetupHostCommand,find,Please install GNU 'find', \ $(eval $(call SetupHostCommand,bash,Please install GNU 'bash', \ bash --version 2>&1 | grep GNU)) +$(eval $(call SetupHostCommand,xargs, \ + Please install 'xargs' that supports '-r/--no-run-if-empty', \ + gxargs -r --version, \ + xargs -r --version)) + $(eval $(call SetupHostCommand,patch,Please install GNU 'patch', \ gpatch --version 2>&1 | grep 'Free Software Foundation', \ patch --version 2>&1 | grep 'Free Software Foundation')) -$(eval $(call SetupHostCommand,diff,Please install diffutils, \ - gdiff --version 2>&1 | grep diff, \ - diff --version 2>&1 | grep diff)) +$(eval $(call SetupHostCommand,diff,Please install GNU diffutils, \ + gdiff --version 2>&1 | grep GNU, \ + diff --version 2>&1 | grep GNU)) $(eval $(call SetupHostCommand,cp,Please install GNU fileutils, \ gcp --help 2>&1 | grep 'Copy SOURCE', \ cp --help 2>&1 | grep 'Copy SOURCE')) -$(eval $(call SetupHostCommand,seq,, \ +$(eval $(call SetupHostCommand,seq,Please install seq, \ gseq --version, \ - seq --version)) + seq --version 2>&1 | grep seq)) $(eval $(call SetupHostCommand,awk,Please install GNU 'awk', \ gawk --version 2>&1 | grep GNU, \ @@ -120,11 +122,20 @@ $(eval $(call SetupHostCommand,grep,Please install GNU 'grep', \ ggrep --version 2>&1 | grep GNU, \ grep --version 2>&1 | grep GNU)) +$(eval $(call SetupHostCommand,egrep,Please install GNU 'grep', \ + gegrep --version 2>&1 | grep GNU, \ + egrep --version 2>&1 | grep GNU)) + $(eval $(call SetupHostCommand,getopt, \ Please install an extended getopt version that supports --long, \ gnugetopt -o t --long test -- --test | grep '^ *--test *--', \ - /usr/local/bin/getopt -o t --long test -- --test | grep '^ *--test *--', \ - getopt -o t --long test -- --test | grep '^ *--test *--')) + getopt -o t --long test -- --test | grep '^ *--test *--', \ + /usr/local/opt/gnu-getopt/bin/getopt -o t --long test -- --test | grep '^ *--test *--', \ + /opt/local/bin/getopt -o t --long test -- --test | grep '^ *--test *--')) + +$(eval $(call SetupHostCommand,realpath,Please install a 'realpath' utility, \ + grealpath /, \ + realpath /)) $(eval $(call SetupHostCommand,stat,Cannot find a file stat utility, \ gnustat -c%s $(TOPDIR)/Makefile, \ @@ -141,22 +152,52 @@ $(eval $(call SetupHostCommand,bzip2,Please install 'bzip2', \ $(eval $(call SetupHostCommand,wget,Please install GNU 'wget', \ wget --version | grep GNU)) +$(eval $(call SetupHostCommand,install,Please install GNU 'install', \ + install --version | grep GNU, \ + ginstall --version | grep GNU)) + $(eval $(call SetupHostCommand,perl,Please install Perl 5.x, \ perl --version | grep "perl.*v5")) -$(eval $(call CleanupPython3)) - -$(eval $(call SetupHostCommand,python,Please install Python 2.x, \ - python2.7 -V 2>&1 | grep 'Python 2.7', \ - python2 -V 2>&1 | grep 'Python 2', \ - python -V 2>&1 | grep 'Python 2')) +$(eval $(call CleanupPython2)) + +$(eval $(call SetupHostCommand,python,Please install Python >= 3.6, \ + python3.11 -V 2>&1 | grep 'Python 3', \ + python3.10 -V 2>&1 | grep 'Python 3', \ + python3.9 -V 2>&1 | grep 'Python 3', \ + python3.8 -V 2>&1 | grep 'Python 3', \ + python3.7 -V 2>&1 | grep 'Python 3', \ + python3.6 -V 2>&1 | grep 'Python 3', \ + python3 -V 2>&1 | grep -E 'Python 3\.([6-9]|[0-9][0-9])\.?')) + +$(eval $(call SetupHostCommand,python3,Please install Python >= 3.6, \ + python3.11 -V 2>&1 | grep 'Python 3', \ + python3.10 -V 2>&1 | grep 'Python 3', \ + python3.9 -V 2>&1 | grep 'Python 3', \ + python3.8 -V 2>&1 | grep 'Python 3', \ + python3.7 -V 2>&1 | grep 'Python 3', \ + python3.6 -V 2>&1 | grep 'Python 3', \ + python3 -V 2>&1 | grep -E 'Python 3\.([6-9]|[0-9][0-9])\.?')) + +$(eval $(call TestHostCommand,python3-distutils, \ + Please install the Python3 distutils module, \ + $(STAGING_DIR_HOST)/bin/python3 -c 'import distutils')) $(eval $(call SetupHostCommand,git,Please install Git (git-core) >= 1.7.12.2, \ - git --exec-path | xargs -I % -- grep -q -- --recursive %/git-submodule)) + git --exec-path | xargs -I % -- grep -q -- --recursive %/git-submodule, \ + git submodule --help | grep -- --recursive)) $(eval $(call SetupHostCommand,file,Please install the 'file' package, \ file --version 2>&1 | grep file)) +$(eval $(call SetupHostCommand,rsync,Please install 'rsync', \ + rsync --version PKG_LICENSE:=MIT PKG_LICENSE_FILES:=COPYING PKG_CPE_ID:=cpe:/a:json-c_project:json-c -PKG_FIXUP:=autoreconf -PKG_INSTALL:=1 - -PKG_MAINTAINER:=Felix Fietkau +HOST_BUILD_PREFIX:=$(STAGING_DIR_HOST) include $(INCLUDE_DIR)/package.mk include $(INCLUDE_DIR)/host-build.mk +include $(INCLUDE_DIR)/cmake.mk -TARGET_CFLAGS += $(FPIC) -Wno-implicit-fallthrough -HOST_CFLAGS += -Wno-implicit-fallthrough -HOST_BUILD_PREFIX:=$(STAGING_DIR_HOST) +CMAKE_HOST_OPTIONS += \ + -DBUILD_SHARED_LIBS=FALSE define Package/libjson-c SECTION:=libs CATEGORY:=Libraries TITLE:=javascript object notation URL:=https://json-c.github.io/json-c/ - ABI_VERSION:=2 + ABI_VERSION:=5 endef define Package/libjson-c/description @@ -46,12 +42,9 @@ define Package/libjson-c/description endef define Build/InstallDev - $(INSTALL_DIR) $(1)/usr/include - $(CP) $(PKG_INSTALL_DIR)/usr/include/json-c $(1)/usr/include/ - $(INSTALL_DIR) $(1)/usr/lib - $(CP) $(PKG_INSTALL_DIR)/usr/lib/libjson-c.{a,so*} $(1)/usr/lib/ - $(INSTALL_DIR) $(1)/usr/lib/pkgconfig - $(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/json-c.pc $(1)/usr/lib/pkgconfig/ + $(call Build/InstallDev/cmake,$(1)) + $(SED) 's,/usr/include,$$$${prefix}/include,g' $(1)/usr/lib/pkgconfig/json-c.pc + $(SED) 's,/usr/lib,$$$${exec_prefix}/lib,g' $(1)/usr/lib/pkgconfig/json-c.pc endef define Package/libjson-c/install diff --git a/package/libs/libjson-c/patches/000-libm.patch b/package/libs/libjson-c/patches/000-libm.patch deleted file mode 100644 index e196b422faf..00000000000 --- a/package/libs/libjson-c/patches/000-libm.patch +++ /dev/null @@ -1,50 +0,0 @@ ---- a/configure.ac -+++ b/configure.ac -@@ -43,12 +43,6 @@ AC_FUNC_MEMCMP - AC_FUNC_MALLOC - AC_FUNC_REALLOC - AC_CHECK_FUNCS(strcasecmp strdup strerror snprintf vsnprintf vasprintf open vsyslog strncasecmp setlocale) --AC_CHECK_DECLS([INFINITY], [], [], [[#include ]]) --AC_CHECK_DECLS([nan], [], [], [[#include ]]) --AC_CHECK_DECLS([isnan], [], [], [[#include ]]) --AC_CHECK_DECLS([isinf], [], [], [[#include ]]) --AC_CHECK_DECLS([_isnan], [], [], [[#include ]]) --AC_CHECK_DECLS([_finite], [], [], [[#include ]]) - - #check if .section.gnu.warning accepts long strings (for __warn_references) - AC_LANG_PUSH([C]) ---- a/math_compat.h -+++ b/math_compat.h -@@ -1,28 +1,9 @@ - #ifndef __math_compat_h - #define __math_compat_h - --/* Define isnan and isinf on Windows/MSVC */ -- --#ifndef HAVE_DECL_ISNAN --# ifdef HAVE_DECL__ISNAN --#include --#define isnan(x) _isnan(x) --# endif --#endif -- --#ifndef HAVE_DECL_ISINF --# ifdef HAVE_DECL__FINITE --#include --#define isinf(x) (!_finite(x)) --# endif --#endif -- --#ifndef HAVE_DECL_NAN --#error This platform does not have nan() --#endif -- --#ifndef HAVE_DECL_INFINITY --#error This platform does not have INFINITY --#endif -+#undef isnan -+#define isnan(x) __builtin_isnan(x) -+#undef isinf -+#define isinf(x) __builtin_isinf(x) - - #endif diff --git a/package/libs/libjson-c/patches/001-Prevent-division-by-zero-in-linkhash.patch b/package/libs/libjson-c/patches/001-Prevent-division-by-zero-in-linkhash.patch deleted file mode 100644 index 5345328d7c5..00000000000 --- a/package/libs/libjson-c/patches/001-Prevent-division-by-zero-in-linkhash.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 77d935b7ae7871a1940cd827e850e6063044ec45 Mon Sep 17 00:00:00 2001 -From: Tobias Stoeckmann -Date: Mon, 4 May 2020 19:46:45 +0200 -Subject: [PATCH 2/2] Prevent division by zero in linkhash. - -If a linkhash with a size of zero is created, then modulo operations -are prone to division by zero operations. - -Purely protective measure against bad usage. ---- - linkhash.c | 3 +++ - 1 file changed, 3 insertions(+) - ---- a/linkhash.c -+++ b/linkhash.c -@@ -10,6 +10,7 @@ - * - */ - -+#include - #include - #include - #include -@@ -431,6 +432,8 @@ struct lh_table* lh_table_new(int size, - int i; - struct lh_table *t; - -+ /* Allocate space for elements to avoid divisions by zero. */ -+ assert(size > 0); - t = (struct lh_table*)calloc(1, sizeof(struct lh_table)); - if(!t) lh_abort("lh_table_new: calloc failed\n"); - t->count = 0; diff --git a/package/libs/libjson-c/patches/001-dont-build-docs.patch b/package/libs/libjson-c/patches/001-dont-build-docs.patch new file mode 100644 index 00000000000..1aa0da4f598 --- /dev/null +++ b/package/libs/libjson-c/patches/001-dont-build-docs.patch @@ -0,0 +1,11 @@ +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -401,8 +401,6 @@ set(JSON_C_SOURCES + include_directories(${PROJECT_SOURCE_DIR}) + include_directories(${PROJECT_BINARY_DIR}) + +-add_subdirectory(doc) +- + # uninstall + add_custom_target(uninstall + COMMAND cat ${PROJECT_BINARY_DIR}/install_manifest.txt | xargs rm diff --git a/package/libs/libjson-c/patches/002-Fix-integer-overflows.patch b/package/libs/libjson-c/patches/002-Fix-integer-overflows.patch deleted file mode 100644 index 2298785b9c0..00000000000 --- a/package/libs/libjson-c/patches/002-Fix-integer-overflows.patch +++ /dev/null @@ -1,83 +0,0 @@ -From d07b91014986900a3a75f306d302e13e005e9d67 Mon Sep 17 00:00:00 2001 -From: Tobias Stoeckmann -Date: Mon, 4 May 2020 19:47:25 +0200 -Subject: [PATCH] Fix integer overflows. - -The data structures linkhash and printbuf are limited to 2 GB in size -due to a signed integer being used to track their current size. - -If too much data is added, then size variable can overflow, which is -an undefined behaviour in C programming language. - -Assuming that a signed int overflow just leads to a negative value, -like it happens on many sytems (Linux i686/amd64 with gcc), then -printbuf is vulnerable to an out of boundary write on 64 bit systems. ---- - linkhash.c | 7 +++++-- - printbuf.c | 19 ++++++++++++++++--- - 2 files changed, 21 insertions(+), 5 deletions(-) - ---- a/linkhash.c -+++ b/linkhash.c -@@ -498,7 +498,12 @@ int lh_table_insert(struct lh_table *t, - unsigned long h, n; - - t->inserts++; -- if(t->count >= t->size * LH_LOAD_FACTOR) lh_table_resize(t, t->size * 2); -+ if(t->count >= t->size * LH_LOAD_FACTOR) { -+ /* Avoid signed integer overflow with large tables. */ -+ int new_size = (t->size > INT_MAX / 2) ? INT_MAX : (t->size * 2); -+ if (t->size != INT_MAX) -+ lh_table_resize(t, new_size); -+ } - - h = t->hash_fn(k); - n = h % t->size; ---- a/printbuf.c -+++ b/printbuf.c -@@ -15,6 +15,7 @@ - - #include "config.h" - -+#include - #include - #include - #include -@@ -63,7 +64,16 @@ static int printbuf_extend(struct printb - if (p->size >= min_size) - return 0; - -- new_size = json_max(p->size * 2, min_size + 8); -+ /* Prevent signed integer overflows with large buffers. */ -+ if (min_size > INT_MAX - 8) -+ return -1; -+ if (p->size > INT_MAX / 2) -+ new_size = min_size + 8; -+ else { -+ new_size = p->size * 2; -+ if (new_size < min_size + 8) -+ new_size = min_size + 8; -+ } - #ifdef PRINTBUF_DEBUG - MC_DEBUG("printbuf_memappend: realloc " - "bpos=%d min_size=%d old_size=%d new_size=%d\n", -@@ -78,6 +88,9 @@ static int printbuf_extend(struct printb - - int printbuf_memappend(struct printbuf *p, const char *buf, int size) - { -+ /* Prevent signed integer overflows with large buffers. */ -+ if (size > INT_MAX - p->bpos - 1) -+ return -1; - if (p->size <= p->bpos + size + 1) { - if (printbuf_extend(p, p->bpos + size + 1) < 0) - return -1; -@@ -94,6 +107,9 @@ int printbuf_memset(struct printbuf *pb, - - if (offset == -1) - offset = pb->bpos; -+ /* Prevent signed integer overflows with large buffers. */ -+ if (len > INT_MAX - offset) -+ return -1; - size_needed = offset + len; - if (pb->size < size_needed) - { diff --git a/package/libs/libjson-c/patches/010-clang.patch b/package/libs/libjson-c/patches/010-clang.patch new file mode 100644 index 00000000000..9ef73f1a82e --- /dev/null +++ b/package/libs/libjson-c/patches/010-clang.patch @@ -0,0 +1,11 @@ +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -265,7 +265,7 @@ message(STATUS "Wrote ${PROJECT_BINARY_D + configure_file(${PROJECT_SOURCE_DIR}/cmake/json_config.h.in ${PROJECT_BINARY_DIR}/json_config.h) + message(STATUS "Wrote ${PROJECT_BINARY_DIR}/json_config.h") + +-if ("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU") ++if ("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffunction-sections -fdata-sections") + if ("${DISABLE_WERROR}" STREQUAL "OFF") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror") diff --git a/package/libs/libnl-tiny/Makefile b/package/libs/libnl-tiny/Makefile index cabbb084218..48df6a4c8c6 100644 --- a/package/libs/libnl-tiny/Makefile +++ b/package/libs/libnl-tiny/Makefile @@ -8,43 +8,42 @@ include $(TOPDIR)/rules.mk PKG_NAME:=libnl-tiny -PKG_VERSION:=0.1 -PKG_RELEASE:=5 +PKG_RELEASE:=1 + +PKG_SOURCE_PROTO:=git +PKG_SOURCE_URL=$(PROJECT_GIT)/project/libnl-tiny.git +PKG_SOURCE_DATE:=2022-05-17 +PKG_SOURCE_VERSION:=b5b2ba09c4f1c8b3c21580aea7223edc2f5e92be +PKG_MIRROR_HASH:=b957d56aa8c2e7b55184111be69eb8dea734f1feba19e670a91f302459a48a78 +CMAKE_INSTALL:=1 PKG_LICENSE:=LGPL-2.1 PKG_MAINTAINER:=Felix Fietkau include $(INCLUDE_DIR)/package.mk +include $(INCLUDE_DIR)/cmake.mk define Package/libnl-tiny SECTION:=libs CATEGORY:=Libraries TITLE:=netlink socket library + ABI_VERSION:=$(PKG_SOURCE_DATE) endef define Package/libnl-tiny/description This package contains a stripped down version of libnl endef -TARGET_CFLAGS += $(FPIC) - -define Build/Compile - $(MAKE) -C $(PKG_BUILD_DIR) \ - $(TARGET_CONFIGURE_OPTS) \ - CFLAGS="$(TARGET_CFLAGS)" \ - all -endef - define Build/InstallDev $(INSTALL_DIR) $(1)/usr/lib/pkgconfig $(1)/usr/include/libnl-tiny - $(CP) $(PKG_BUILD_DIR)/include/* $(1)/usr/include/libnl-tiny - $(CP) $(PKG_BUILD_DIR)/libnl-tiny.so $(1)/usr/lib/ - $(CP) ./files/libnl-tiny.pc $(1)/usr/lib/pkgconfig + $(CP) $(PKG_INSTALL_DIR)/usr/include/libnl-tiny/* $(1)/usr/include/libnl-tiny + $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/lib/libnl-tiny.so $(1)/usr/lib/ + $(INSTALL_DATA) $(PKG_BUILD_DIR)/libnl-tiny.pc $(1)/usr/lib/pkgconfig endef define Package/libnl-tiny/install $(INSTALL_DIR) $(1)/usr/lib - $(CP) $(PKG_BUILD_DIR)/libnl-tiny.so $(1)/usr/lib/ + $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/lib/libnl-tiny.so $(1)/usr/lib/ endef $(eval $(call BuildPackage,libnl-tiny)) diff --git a/package/libs/libnl-tiny/files/libnl-tiny.pc b/package/libs/libnl-tiny/files/libnl-tiny.pc deleted file mode 100644 index af79cd301e2..00000000000 --- a/package/libs/libnl-tiny/files/libnl-tiny.pc +++ /dev/null @@ -1,10 +0,0 @@ -prefix=/usr -exec_prefix=/usr -libdir=${exec_prefix}/lib -includedir=${prefix}/include/libnl-tiny - -Name: libnl-tiny -Description: Convenience library for netlink sockets -Version: 2.0 -Libs: -L${libdir} -lnl-tiny -Cflags: -I${includedir} diff --git a/package/libs/libnl-tiny/src/Makefile b/package/libs/libnl-tiny/src/Makefile deleted file mode 100644 index 6f37160a8c3..00000000000 --- a/package/libs/libnl-tiny/src/Makefile +++ /dev/null @@ -1,17 +0,0 @@ -CC=gcc -WFLAGS=-Wall -CFLAGS=-O2 -INCLUDES=-Iinclude - -LIBNAME=libnl-tiny.so - -all: $(LIBNAME) - -%.o: %.c - $(CC) $(WFLAGS) -c -o $@ $(INCLUDES) $(CFLAGS) $< - -LIBNL_OBJ=nl.o handlers.o msg.o attr.o cache.o cache_mngt.o object.o socket.o error.o -GENL_OBJ=genl.o genl_family.o genl_ctrl.o genl_mngt.o unl.o - -$(LIBNAME): $(LIBNL_OBJ) $(GENL_OBJ) - $(CC) $(CFLAGS) -Wl,-Bsymbolic-functions -shared -o $@ $^ diff --git a/package/libs/libnl-tiny/src/attr.c b/package/libs/libnl-tiny/src/attr.c deleted file mode 100644 index 484aa493a6c..00000000000 --- a/package/libs/libnl-tiny/src/attr.c +++ /dev/null @@ -1,674 +0,0 @@ -/* - * lib/attr.c Netlink Attributes - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation version 2.1 - * of the License. - * - * Copyright (c) 2003-2008 Thomas Graf - */ - -#include -#include -#include -#include -#include -#include -#include - -/** - * @ingroup msg - * @defgroup attr Attributes - * Netlink Attributes Construction/Parsing Interface - * - * \section attr_sec Netlink Attributes - * Netlink attributes allow for data chunks of arbitary length to be - * attached to a netlink message. Each attribute is encoded with a - * type and length field, both 16 bits, stored in the attribute header - * preceding the attribute data. The main advantage of using attributes - * over packing everything into the family header is that the interface - * stays extendable as new attributes can supersede old attributes while - * remaining backwards compatible. Also attributes can be defined optional - * thus avoiding the transmission of unnecessary empty data blocks. - * Special nested attributes allow for more complex data structures to - * be transmitted, e.g. trees, lists, etc. - * - * While not required, netlink attributes typically follow the family - * header of a netlink message and must be properly aligned to NLA_ALIGNTO: - * @code - * +----------------+- - -+---------------+- - -+------------+- - -+ - * | Netlink Header | Pad | Family Header | Pad | Attributes | Pad | - * +----------------+- - -+---------------+- - -+------------+- - -+ - * @endcode - * - * The actual attributes are chained together each separately aligned to - * NLA_ALIGNTO. The position of an attribute is defined based on the - * length field of the preceding attributes: - * @code - * +-------------+- - -+-------------+- - -+------ - * | Attribute 1 | Pad | Attribute 2 | Pad | ... - * +-------------+- - -+-------------+- - -+------ - * nla_next(attr1)------^ - * @endcode - * - * The attribute itself consists of the attribute header followed by - * the actual payload also aligned to NLA_ALIGNTO. The function nla_data() - * returns a pointer to the start of the payload while nla_len() returns - * the length of the payload in bytes. - * - * \b Note: Be aware, NLA_ALIGNTO equals to 4 bytes, therefore it is not - * safe to dereference any 64 bit data types directly. - * - * @code - * <----------- nla_total_size(payload) -----------> - * <-------- nla_attr_size(payload) ---------> - * +------------------+- - -+- - - - - - - - - +- - -+ - * | Attribute Header | Pad | Payload | Pad | - * +------------------+- - -+- - - - - - - - - +- - -+ - * nla_data(nla)-------------^ - * <- nla_len(nla) -> - * @endcode - * - * @subsection attr_datatypes Attribute Data Types - * A number of basic data types are supported to simplify access and - * validation of netlink attributes. This data type information is - * not encoded in the attribute, both the kernel and userspace part - * are required to share this information on their own. - * - * One of the major advantages of these basic types is the automatic - * validation of each attribute based on an attribute policy. The - * validation covers most of the checks required to safely use - * attributes and thus keeps the individual sanity check to a minimum. - * - * Never access attribute payload without ensuring basic validation - * first, attributes may: - * - not be present even though required - * - contain less actual payload than expected - * - fake a attribute length which exceeds the end of the message - * - contain unterminated character strings - * - * Policies are defined as array of the struct nla_policy. The array is - * indexed with the attribute type, therefore the array must be sized - * accordingly. - * @code - * static struct nla_policy my_policy[ATTR_MAX+1] = { - * [ATTR_FOO] = { .type = ..., .minlen = ..., .maxlen = ... }, - * }; - * - * err = nla_validate(attrs, attrlen, ATTR_MAX, &my_policy); - * @endcode - * - * Some basic validations are performed on every attribute, regardless of type. - * - If the attribute type exceeds the maximum attribute type specified or - * the attribute type is lesser-or-equal than zero, the attribute will - * be silently ignored. - * - If the payload length falls below the \a minlen value the attribute - * will be rejected. - * - If \a maxlen is non-zero and the payload length exceeds the \a maxlen - * value the attribute will be rejected. - * - * - * @par Unspecific Attribute (NLA_UNSPEC) - * This is the standard type if no type is specified. It is used for - * binary data of arbitary length. Typically this attribute carries - * a binary structure or a stream of bytes. - * @par - * @code - * // In this example, we will assume a binary structure requires to - * // be transmitted. The definition of the structure will typically - * // go into a header file available to both the kernel and userspace - * // side. - * // - * // Note: Be careful when putting 64 bit data types into a structure. - * // The attribute payload is only aligned to 4 bytes, dereferencing - * // the member may fail. - * struct my_struct { - * int a; - * int b; - * }; - * - * // The validation function will not enforce an exact length match to - * // allow structures to grow as required. Note: While it is allowed - * // to add members to the end of the structure, changing the order or - * // inserting members in the middle of the structure will break your - * // binary interface. - * static struct nla_policy my_policy[ATTR_MAX+1] = { - * [ATTR_MY_STRICT] = { .type = NLA_UNSPEC, - * .minlen = sizeof(struct my_struct) }, - * - * // The binary structure is appened to the message using nla_put() - * struct my_struct foo = { .a = 1, .b = 2 }; - * nla_put(msg, ATTR_MY_STRUCT, sizeof(foo), &foo); - * - * // On the receiving side, a pointer to the structure pointing inside - * // the message payload is returned by nla_get(). - * if (attrs[ATTR_MY_STRUCT]) - * struct my_struct *foo = nla_get(attrs[ATTR_MY_STRUCT]); - * @endcode - * - * @par Integers (NLA_U8, NLA_U16, NLA_U32, NLA_U64) - * Integers come in different sizes from 8 bit to 64 bit. However, since the - * payload length is aligned to 4 bytes, integers smaller than 32 bit are - * only useful to enforce the maximum range of values. - * @par - * \b Note: There is no difference made between signed and unsigned integers. - * The validation only enforces the minimal payload length required to store - * an integer of specified type. - * @par - * @code - * // Even though possible, it does not make sense to specify .minlen or - * // .maxlen for integer types. The data types implies the corresponding - * // minimal payload length. - * static struct nla_policy my_policy[ATTR_MAX+1] = { - * [ATTR_FOO] = { .type = NLA_U32 }, - * - * // Numeric values can be appended directly using the respective - * // nla_put_uxxx() function - * nla_put_u32(msg, ATTR_FOO, 123); - * - * // Same for the receiving side. - * if (attrs[ATTR_FOO]) - * uint32_t foo = nla_get_u32(attrs[ATTR_FOO]); - * @endcode - * - * @par Character string (NLA_STRING) - * This data type represents a NUL terminated character string of variable - * length. For binary data streams the type NLA_UNSPEC is recommended. - * @par - * @code - * // Enforce a NUL terminated character string of at most 4 characters - * // including the NUL termination. - * static struct nla_policy my_policy[ATTR_MAX+1] = { - * [ATTR_BAR] = { .type = NLA_STRING, maxlen = 4 }, - * - * // nla_put_string() creates a string attribute of the necessary length - * // and appends it to the message including the NUL termination. - * nla_put_string(msg, ATTR_BAR, "some text"); - * - * // It is safe to use the returned character string directly if the - * // attribute has been validated as the validation enforces the proper - * // termination of the string. - * if (attrs[ATTR_BAR]) - * char *text = nla_get_string(attrs[ATTR_BAR]); - * @endcode - * - * @par Flag (NLA_FLAG) - * This attribute type may be used to indicate the presence of a flag. The - * attribute is only valid if the payload length is zero. The presence of - * the attribute header indicates the presence of the flag. - * @par - * @code - * // This attribute type is special as .minlen and .maxlen have no effect. - * static struct nla_policy my_policy[ATTR_MAX+1] = { - * [ATTR_FLAG] = { .type = NLA_FLAG }, - * - * // nla_put_flag() appends a zero sized attribute to the message. - * nla_put_flag(msg, ATTR_FLAG); - * - * // There is no need for a receival function, the presence is the value. - * if (attrs[ATTR_FLAG]) - * // flag is present - * @endcode - * - * @par Micro Seconds (NLA_MSECS) - * - * @par Nested Attribute (NLA_NESTED) - * Attributes can be nested and put into a container to create groups, lists - * or to construct trees of attributes. Nested attributes are often used to - * pass attributes to a subsystem where the top layer has no knowledge of the - * configuration possibilities of each subsystem. - * @par - * \b Note: When validating the attributes using nlmsg_validate() or - * nlmsg_parse() it will only affect the top level attributes. Each - * level of nested attributes must be validated seperately using - * nla_parse_nested() or nla_validate(). - * @par - * @code - * // The minimal length policy may be used to enforce the presence of at - * // least one attribute. - * static struct nla_policy my_policy[ATTR_MAX+1] = { - * [ATTR_OPTS] = { .type = NLA_NESTED, minlen = NLA_HDRLEN }, - * - * // Nested attributes are constructed by enclosing the attributes - * // to be nested with calls to nla_nest_start() respetively nla_nest_end(). - * struct nlattr *opts = nla_nest_start(msg, ATTR_OPTS); - * nla_put_u32(msg, ATTR_FOO, 123); - * nla_put_string(msg, ATTR_BAR, "some text"); - * nla_nest_end(msg, opts); - * - * // Various methods exist to parse nested attributes, the easiest being - * // nla_parse_nested() which also allows validation in the same step. - * if (attrs[ATTR_OPTS]) { - * struct nlattr *nested[ATTR_MAX+1]; - * - * nla_parse_nested(nested, ATTR_MAX, attrs[ATTR_OPTS], &policy); - * - * if (nested[ATTR_FOO]) - * uint32_t foo = nla_get_u32(nested[ATTR_FOO]); - * } - * @endcode - * - * @subsection attr_exceptions Exception Based Attribute Construction - * Often a large number of attributes are added to a message in a single - * function. In order to simplify error handling, a second set of - * construction functions exist which jump to a error label when they - * fail instead of returning an error code. This second set consists - * of macros which are named after their error code based counterpart - * except that the name is written all uppercase. - * - * All of the macros jump to the target \c nla_put_failure if they fail. - * @code - * void my_func(struct nl_msg *msg) - * { - * NLA_PUT_U32(msg, ATTR_FOO, 10); - * NLA_PUT_STRING(msg, ATTR_BAR, "bar"); - * - * return 0; - * - * nla_put_failure: - * return -NLE_NOMEM; - * } - * @endcode - * - * @subsection attr_examples Examples - * @par Example 1.1 Constructing a netlink message with attributes. - * @code - * struct nl_msg *build_msg(int ifindex, struct nl_addr *lladdr, int mtu) - * { - * struct nl_msg *msg; - * struct nlattr *info, *vlan; - * struct ifinfomsg ifi = { - * .ifi_family = AF_INET, - * .ifi_index = ifindex, - * }; - * - * // Allocate a new netlink message, type=RTM_SETLINK, flags=NLM_F_ECHO - * if (!(msg = nlmsg_alloc_simple(RTM_SETLINK, NLM_F_ECHO))) - * return NULL; - * - * // Append the family specific header (struct ifinfomsg) - * if (nlmsg_append(msg, &ifi, sizeof(ifi), NLMSG_ALIGNTO) < 0) - * goto nla_put_failure - * - * // Append a 32 bit integer attribute to carry the MTU - * NLA_PUT_U32(msg, IFLA_MTU, mtu); - * - * // Append a unspecific attribute to carry the link layer address - * NLA_PUT_ADDR(msg, IFLA_ADDRESS, lladdr); - * - * // Append a container for nested attributes to carry link information - * if (!(info = nla_nest_start(msg, IFLA_LINKINFO))) - * goto nla_put_failure; - * - * // Put a string attribute into the container - * NLA_PUT_STRING(msg, IFLA_INFO_KIND, "vlan"); - * - * // Append another container inside the open container to carry - * // vlan specific attributes - * if (!(vlan = nla_nest_start(msg, IFLA_INFO_DATA))) - * goto nla_put_failure; - * - * // add vlan specific info attributes here... - * - * // Finish nesting the vlan attributes and close the second container. - * nla_nest_end(msg, vlan); - * - * // Finish nesting the link info attribute and close the first container. - * nla_nest_end(msg, info); - * - * return msg; - * - * // If any of the construction macros fails, we end up here. - * nla_put_failure: - * nlmsg_free(msg); - * return NULL; - * } - * @endcode - * - * @par Example 2.1 Parsing a netlink message with attributes. - * @code - * int parse_message(struct nl_msg *msg) - * { - * // The policy defines two attributes: a 32 bit integer and a container - * // for nested attributes. - * struct nla_policy attr_policy[ATTR_MAX+1] = { - * [ATTR_FOO] = { .type = NLA_U32 }, - * [ATTR_BAR] = { .type = NLA_NESTED }, - * }; - * struct nlattr *attrs[ATTR_MAX+1]; - * int err; - * - * // The nlmsg_parse() function will make sure that the message contains - * // enough payload to hold the header (struct my_hdr), validates any - * // attributes attached to the messages and stores a pointer to each - * // attribute in the attrs[] array accessable by attribute type. - * if ((err = nlmsg_parse(nlmsg_hdr(msg), sizeof(struct my_hdr), attrs, - * ATTR_MAX, attr_policy)) < 0) - * goto errout; - * - * if (attrs[ATTR_FOO]) { - * // It is safe to directly access the attribute payload without - * // any further checks since nlmsg_parse() enforced the policy. - * uint32_t foo = nla_get_u32(attrs[ATTR_FOO]); - * } - * - * if (attrs[ATTR_BAR]) { - * struct nlattr *nested[NESTED_MAX+1]; - * - * // Attributes nested in a container can be parsed the same way - * // as top level attributes. - * if ((err = nla_parse_nested(nested, NESTED_MAX, attrs[ATTR_BAR], - * nested_policy)) < 0) - * goto errout; - * - * // Process nested attributes here. - * } - * - * err = 0; - * errout: - * return err; - * } - * @endcode - * - * @{ - */ - -/** - * @name Attribute Size Calculation - * @{ - */ - -/** @} */ - -/** - * @name Parsing Attributes - * @{ - */ - -/** - * Check if the attribute header and payload can be accessed safely. - * @arg nla Attribute of any kind. - * @arg remaining Number of bytes remaining in attribute stream. - * - * Verifies that the header and payload do not exceed the number of - * bytes left in the attribute stream. This function must be called - * before access the attribute header or payload when iterating over - * the attribute stream using nla_next(). - * - * @return True if the attribute can be accessed safely, false otherwise. - */ -int nla_ok(const struct nlattr *nla, int remaining) -{ - return remaining >= sizeof(*nla) && - nla->nla_len >= sizeof(*nla) && - nla->nla_len <= remaining; -} - -/** - * Return next attribute in a stream of attributes. - * @arg nla Attribute of any kind. - * @arg remaining Variable to count remaining bytes in stream. - * - * Calculates the offset to the next attribute based on the attribute - * given. The attribute provided is assumed to be accessible, the - * caller is responsible to use nla_ok() beforehand. The offset (length - * of specified attribute including padding) is then subtracted from - * the remaining bytes variable and a pointer to the next attribute is - * returned. - * - * nla_next() can be called as long as remainig is >0. - * - * @return Pointer to next attribute. - */ -struct nlattr *nla_next(const struct nlattr *nla, int *remaining) -{ - int totlen = NLA_ALIGN(nla->nla_len); - - *remaining -= totlen; - return (struct nlattr *) ((char *) nla + totlen); -} - -static uint16_t nla_attr_minlen[NLA_TYPE_MAX+1] = { - [NLA_U8] = sizeof(uint8_t), - [NLA_U16] = sizeof(uint16_t), - [NLA_U32] = sizeof(uint32_t), - [NLA_U64] = sizeof(uint64_t), - [NLA_STRING] = 1, -}; - -static int validate_nla(struct nlattr *nla, int maxtype, - struct nla_policy *policy) -{ - struct nla_policy *pt; - int minlen = 0, type = nla_type(nla); - - if (type <= 0 || type > maxtype) - return 0; - - pt = &policy[type]; - - if (pt->type > NLA_TYPE_MAX) - BUG(); - - if (pt->minlen) - minlen = pt->minlen; - else if (pt->type != NLA_UNSPEC) - minlen = nla_attr_minlen[pt->type]; - - if (pt->type == NLA_FLAG && nla_len(nla) > 0) - return -NLE_RANGE; - - if (nla_len(nla) < minlen) - return -NLE_RANGE; - - if (pt->maxlen && nla_len(nla) > pt->maxlen) - return -NLE_RANGE; - - if (pt->type == NLA_STRING) { - char *data = nla_data(nla); - if (data[nla_len(nla) - 1] != '\0') - return -NLE_INVAL; - } - - return 0; -} - - -/** - * Create attribute index based on a stream of attributes. - * @arg tb Index array to be filled (maxtype+1 elements). - * @arg maxtype Maximum attribute type expected and accepted. - * @arg head Head of attribute stream. - * @arg len Length of attribute stream. - * @arg policy Attribute validation policy. - * - * Iterates over the stream of attributes and stores a pointer to each - * attribute in the index array using the attribute type as index to - * the array. Attribute with a type greater than the maximum type - * specified will be silently ignored in order to maintain backwards - * compatibility. If \a policy is not NULL, the attribute will be - * validated using the specified policy. - * - * @see nla_validate - * @return 0 on success or a negative error code. - */ -int nla_parse(struct nlattr *tb[], int maxtype, struct nlattr *head, int len, - struct nla_policy *policy) -{ - struct nlattr *nla; - int rem, err; - - memset(tb, 0, sizeof(struct nlattr *) * (maxtype + 1)); - - nla_for_each_attr(nla, head, len, rem) { - int type = nla_type(nla); - - if (type == 0) { - fprintf(stderr, "Illegal nla->nla_type == 0\n"); - continue; - } - - if (type <= maxtype) { - if (policy) { - err = validate_nla(nla, maxtype, policy); - if (err < 0) - goto errout; - } - - tb[type] = nla; - } - } - - if (rem > 0) - fprintf(stderr, "netlink: %d bytes leftover after parsing " - "attributes.\n", rem); - - err = 0; -errout: - return err; -} - -/** - * Validate a stream of attributes. - * @arg head Head of attributes stream. - * @arg len Length of attributes stream. - * @arg maxtype Maximum attribute type expected and accepted. - * @arg policy Validation policy. - * - * Iterates over the stream of attributes and validates each attribute - * one by one using the specified policy. Attributes with a type greater - * than the maximum type specified will be silently ignored in order to - * maintain backwards compatibility. - * - * See \ref attr_datatypes for more details on what kind of validation - * checks are performed on each attribute data type. - * - * @return 0 on success or a negative error code. - */ -int nla_validate(struct nlattr *head, int len, int maxtype, - struct nla_policy *policy) -{ - struct nlattr *nla; - int rem, err; - - nla_for_each_attr(nla, head, len, rem) { - err = validate_nla(nla, maxtype, policy); - if (err < 0) - goto errout; - } - - err = 0; -errout: - return err; -} - -/** - * Find a single attribute in a stream of attributes. - * @arg head Head of attributes stream. - * @arg len Length of attributes stream. - * @arg attrtype Attribute type to look for. - * - * Iterates over the stream of attributes and compares each type with - * the type specified. Returns the first attribute which matches the - * type. - * - * @return Pointer to attribute found or NULL. - */ -struct nlattr *nla_find(struct nlattr *head, int len, int attrtype) -{ - struct nlattr *nla; - int rem; - - nla_for_each_attr(nla, head, len, rem) - if (nla_type(nla) == attrtype) - return nla; - - return NULL; -} - -/** @} */ - -/** - * @name Unspecific Attribute - * @{ - */ - -/** - * Reserve space for a attribute. - * @arg msg Netlink Message. - * @arg attrtype Attribute Type. - * @arg attrlen Length of payload. - * - * Reserves room for a attribute in the specified netlink message and - * fills in the attribute header (type, length). Returns NULL if there - * is unsuficient space for the attribute. - * - * Any padding between payload and the start of the next attribute is - * zeroed out. - * - * @return Pointer to start of attribute or NULL on failure. - */ -struct nlattr *nla_reserve(struct nl_msg *msg, int attrtype, int attrlen) -{ - struct nlattr *nla; - int tlen; - - if (attrlen < 0) - return NULL; - - tlen = NLMSG_ALIGN(msg->nm_nlh->nlmsg_len) + nla_total_size(attrlen); - - if ((tlen + msg->nm_nlh->nlmsg_len) > msg->nm_size) - return NULL; - - nla = (struct nlattr *) nlmsg_tail(msg->nm_nlh); - nla->nla_type = attrtype; - nla->nla_len = nla_attr_size(attrlen); - - memset((unsigned char *) nla + nla->nla_len, 0, nla_padlen(attrlen)); - msg->nm_nlh->nlmsg_len = tlen; - - NL_DBG(2, "msg %p: Reserved %d bytes at offset +%td for attr %d " - "nlmsg_len=%d\n", msg, attrlen, - (void *) nla - nlmsg_data(msg->nm_nlh), - attrtype, msg->nm_nlh->nlmsg_len); - - return nla; -} - -/** - * Add a unspecific attribute to netlink message. - * @arg msg Netlink message. - * @arg attrtype Attribute type. - * @arg datalen Length of data to be used as payload. - * @arg data Pointer to data to be used as attribute payload. - * - * Reserves room for a unspecific attribute and copies the provided data - * into the message as payload of the attribute. Returns an error if there - * is insufficient space for the attribute. - * - * @see nla_reserve - * @return 0 on success or a negative error code. - */ -int nla_put(struct nl_msg *msg, int attrtype, int datalen, const void *data) -{ - struct nlattr *nla; - - if (datalen < 0) - return -NLE_RANGE; - - nla = nla_reserve(msg, attrtype, datalen); - if (!nla) - return -NLE_NOMEM; - - memcpy(nla_data(nla), data, datalen); - NL_DBG(2, "msg %p: Wrote %d bytes at offset +%td for attr %d\n", - msg, datalen, (void *) nla - nlmsg_data(msg->nm_nlh), attrtype); - - return 0; -} - - - -/** @} */ diff --git a/package/libs/libnl-tiny/src/cache.c b/package/libs/libnl-tiny/src/cache.c deleted file mode 100644 index 56a1280b53b..00000000000 --- a/package/libs/libnl-tiny/src/cache.c +++ /dev/null @@ -1,376 +0,0 @@ -/* - * lib/cache.c Caching Module - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation version 2.1 - * of the License. - * - * Copyright (c) 2003-2008 Thomas Graf - */ - -/** - * @ingroup cache_mngt - * @defgroup cache Cache - * - * @code - * Cache Management | | Type Specific Cache Operations - * - * | | +----------------+ +------------+ - * | request update | | msg_parser | - * | | +----------------+ +------------+ - * +- - - - -^- - - - - - - -^- -|- - - - - * nl_cache_update: | | | | - * 1) --------- co_request_update ------+ | | - * | | | - * 2) destroy old cache +----------- pp_cb ---------|---+ - * | | | - * 3) ---------- nl_recvmsgs ----------+ +- cb_valid -+ - * +--------------+ | | | | - * | nl_cache_add |<-----+ + - - -v- -|- - - - - - - - - - - - * +--------------+ | | +-------------+ - * | nl_recvmsgs | - * | | +-----|-^-----+ - * +---v-|---+ - * | | | nl_recv | - * +---------+ - * | | Core Netlink - * @endcode - * - * @{ - */ - -#include -#include -#include -#include -#include - -/** - * @name Cache Creation/Deletion - * @{ - */ - -/** - * Allocate an empty cache - * @arg ops cache operations to base the cache on - * - * @return A newly allocated and initialized cache. - */ -struct nl_cache *nl_cache_alloc(struct nl_cache_ops *ops) -{ - struct nl_cache *cache; - - cache = calloc(1, sizeof(*cache)); - if (!cache) - return NULL; - - nl_init_list_head(&cache->c_items); - cache->c_ops = ops; - - NL_DBG(2, "Allocated cache %p <%s>.\n", cache, nl_cache_name(cache)); - - return cache; -} - -int nl_cache_alloc_and_fill(struct nl_cache_ops *ops, struct nl_sock *sock, - struct nl_cache **result) -{ - struct nl_cache *cache; - int err; - - if (!(cache = nl_cache_alloc(ops))) - return -NLE_NOMEM; - - if (sock && (err = nl_cache_refill(sock, cache)) < 0) { - nl_cache_free(cache); - return err; - } - - *result = cache; - return 0; -} - -/** - * Clear a cache. - * @arg cache cache to clear - * - * Removes all elements of a cache. - */ -void nl_cache_clear(struct nl_cache *cache) -{ - struct nl_object *obj, *tmp; - - NL_DBG(1, "Clearing cache %p <%s>...\n", cache, nl_cache_name(cache)); - - nl_list_for_each_entry_safe(obj, tmp, &cache->c_items, ce_list) - nl_cache_remove(obj); -} - -/** - * Free a cache. - * @arg cache Cache to free. - * - * Removes all elements of a cache and frees all memory. - * - * @note Use this function if you are working with allocated caches. - */ -void nl_cache_free(struct nl_cache *cache) -{ - if (!cache) - return; - - nl_cache_clear(cache); - NL_DBG(1, "Freeing cache %p <%s>...\n", cache, nl_cache_name(cache)); - free(cache); -} - -/** @} */ - -/** - * @name Cache Modifications - * @{ - */ - -static int __cache_add(struct nl_cache *cache, struct nl_object *obj) -{ - obj->ce_cache = cache; - - nl_list_add_tail(&obj->ce_list, &cache->c_items); - cache->c_nitems++; - - NL_DBG(1, "Added %p to cache %p <%s>.\n", - obj, cache, nl_cache_name(cache)); - - return 0; -} - -/** - * Add object to a cache. - * @arg cache Cache to add object to - * @arg obj Object to be added to the cache - * - * Adds the given object to the specified cache. The object is cloned - * if it has been added to another cache already. - * - * @return 0 or a negative error code. - */ -int nl_cache_add(struct nl_cache *cache, struct nl_object *obj) -{ - struct nl_object *new; - - if (cache->c_ops->co_obj_ops != obj->ce_ops) - return -NLE_OBJ_MISMATCH; - - if (!nl_list_empty(&obj->ce_list)) { - new = nl_object_clone(obj); - if (!new) - return -NLE_NOMEM; - } else { - nl_object_get(obj); - new = obj; - } - - return __cache_add(cache, new); -} - -/** - * Removes an object from a cache. - * @arg obj Object to remove from its cache - * - * Removes the object \c obj from the cache it is assigned to, since - * an object can only be assigned to one cache at a time, the cache - * must ne be passed along with it. - */ -void nl_cache_remove(struct nl_object *obj) -{ - struct nl_cache *cache = obj->ce_cache; - - if (cache == NULL) - return; - - nl_list_del(&obj->ce_list); - obj->ce_cache = NULL; - nl_object_put(obj); - cache->c_nitems--; - - NL_DBG(1, "Deleted %p from cache %p <%s>.\n", - obj, cache, nl_cache_name(cache)); -} - -/** @} */ - -/** - * @name Synchronization - * @{ - */ - -/** - * Request a full dump from the kernel to fill a cache - * @arg sk Netlink socket. - * @arg cache Cache subjected to be filled. - * - * Send a dumping request to the kernel causing it to dump all objects - * related to the specified cache to the netlink socket. - * - * Use nl_cache_pickup() to read the objects from the socket and fill them - * into a cache. - */ -int nl_cache_request_full_dump(struct nl_sock *sk, struct nl_cache *cache) -{ - NL_DBG(2, "Requesting dump from kernel for cache %p <%s>...\n", - cache, nl_cache_name(cache)); - - if (cache->c_ops->co_request_update == NULL) - return -NLE_OPNOTSUPP; - - return cache->c_ops->co_request_update(cache, sk); -} - -/** @cond SKIP */ -struct update_xdata { - struct nl_cache_ops *ops; - struct nl_parser_param *params; -}; - -static int update_msg_parser(struct nl_msg *msg, void *arg) -{ - struct update_xdata *x = arg; - - return nl_cache_parse(x->ops, &msg->nm_src, msg->nm_nlh, x->params); -} -/** @endcond */ - -int __cache_pickup(struct nl_sock *sk, struct nl_cache *cache, - struct nl_parser_param *param) -{ - int err; - struct nl_cb *cb; - struct update_xdata x = { - .ops = cache->c_ops, - .params = param, - }; - - NL_DBG(1, "Picking up answer for cache %p <%s>...\n", - cache, nl_cache_name(cache)); - - cb = nl_cb_clone(sk->s_cb); - if (cb == NULL) - return -NLE_NOMEM; - - nl_cb_set(cb, NL_CB_VALID, NL_CB_CUSTOM, update_msg_parser, &x); - - err = nl_recvmsgs(sk, cb); - if (err < 0) - NL_DBG(2, "While picking up for %p <%s>, recvmsgs() returned " \ - "%d: %s", cache, nl_cache_name(cache), - err, nl_geterror(err)); - - nl_cb_put(cb); - - return err; -} - -static int pickup_cb(struct nl_object *c, struct nl_parser_param *p) -{ - return nl_cache_add((struct nl_cache *) p->pp_arg, c); -} - -/** - * Pickup a netlink dump response and put it into a cache. - * @arg sk Netlink socket. - * @arg cache Cache to put items into. - * - * Waits for netlink messages to arrive, parses them and puts them into - * the specified cache. - * - * @return 0 on success or a negative error code. - */ -int nl_cache_pickup(struct nl_sock *sk, struct nl_cache *cache) -{ - struct nl_parser_param p = { - .pp_cb = pickup_cb, - .pp_arg = cache, - }; - - return __cache_pickup(sk, cache, &p); -} - - -/** @} */ - -/** - * @name Parsing - * @{ - */ - -/** @cond SKIP */ -int nl_cache_parse(struct nl_cache_ops *ops, struct sockaddr_nl *who, - struct nlmsghdr *nlh, struct nl_parser_param *params) -{ - int i, err; - - if (!nlmsg_valid_hdr(nlh, ops->co_hdrsize)) - return -NLE_MSG_TOOSHORT; - - for (i = 0; ops->co_msgtypes[i].mt_id >= 0; i++) { - if (ops->co_msgtypes[i].mt_id == nlh->nlmsg_type) { - err = ops->co_msg_parser(ops, who, nlh, params); - if (err != -NLE_OPNOTSUPP) - goto errout; - } - } - - - err = -NLE_MSGTYPE_NOSUPPORT; -errout: - return err; -} -/** @endcond */ - -/** - * Parse a netlink message and add it to the cache. - * @arg cache cache to add element to - * @arg msg netlink message - * - * Parses a netlink message by calling the cache specific message parser - * and adds the new element to the cache. - * - * @return 0 or a negative error code. - */ -int nl_cache_parse_and_add(struct nl_cache *cache, struct nl_msg *msg) -{ - struct nl_parser_param p = { - .pp_cb = pickup_cb, - .pp_arg = cache, - }; - - return nl_cache_parse(cache->c_ops, NULL, nlmsg_hdr(msg), &p); -} - -/** - * (Re)fill a cache with the contents in the kernel. - * @arg sk Netlink socket. - * @arg cache cache to update - * - * Clears the specified cache and fills it with the current state in - * the kernel. - * - * @return 0 or a negative error code. - */ -int nl_cache_refill(struct nl_sock *sk, struct nl_cache *cache) -{ - int err; - - err = nl_cache_request_full_dump(sk, cache); - if (err < 0) - return err; - - NL_DBG(2, "Upading cache %p <%s>, request sent, waiting for dump...\n", - cache, nl_cache_name(cache)); - nl_cache_clear(cache); - - return nl_cache_pickup(sk, cache); -} - -/** @} */ diff --git a/package/libs/libnl-tiny/src/cache_mngt.c b/package/libs/libnl-tiny/src/cache_mngt.c deleted file mode 100644 index 8adbe51b0a1..00000000000 --- a/package/libs/libnl-tiny/src/cache_mngt.c +++ /dev/null @@ -1,131 +0,0 @@ -/* - * lib/cache_mngt.c Cache Management - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation version 2.1 - * of the License. - * - * Copyright (c) 2003-2008 Thomas Graf - */ - -/** - * @ingroup core - * @defgroup cache_mngt Caching - * @{ - */ - -#include -#include -#include -#include - -static struct nl_cache_ops *cache_ops; - -/** - * @name Cache Operations Sets - * @{ - */ - -/** - * Lookup the set cache operations of a certain cache type - * @arg name name of the cache type - * - * @return The cache operations or NULL if no operations - * have been registered under the specified name. - */ -struct nl_cache_ops *nl_cache_ops_lookup(const char *name) -{ - struct nl_cache_ops *ops; - - for (ops = cache_ops; ops; ops = ops->co_next) - if (!strcmp(ops->co_name, name)) - return ops; - - return NULL; -} - -/** - * Associate a message type to a set of cache operations - * @arg protocol netlink protocol - * @arg msgtype netlink message type - * - * Associates the specified netlink message type with - * a registered set of cache operations. - * - * @return The cache operations or NULL if no association - * could be made. - */ -struct nl_cache_ops *nl_cache_ops_associate(int protocol, int msgtype) -{ - int i; - struct nl_cache_ops *ops; - - for (ops = cache_ops; ops; ops = ops->co_next) { - if (ops->co_protocol != protocol) - continue; - - for (i = 0; ops->co_msgtypes[i].mt_id >= 0; i++) - if (ops->co_msgtypes[i].mt_id == msgtype) - return ops; - } - - return NULL; -} - -/** - * Register a set of cache operations - * @arg ops cache operations - * - * Called by users of caches to announce the avaibility of - * a certain cache type. - * - * @return 0 on success or a negative error code. - */ -int nl_cache_mngt_register(struct nl_cache_ops *ops) -{ - if (!ops->co_name || !ops->co_obj_ops) - return -NLE_INVAL; - - if (nl_cache_ops_lookup(ops->co_name)) - return -NLE_EXIST; - - ops->co_next = cache_ops; - cache_ops = ops; - - NL_DBG(1, "Registered cache operations %s\n", ops->co_name); - - return 0; -} - -/** - * Unregister a set of cache operations - * @arg ops cache operations - * - * Called by users of caches to announce a set of - * cache operations is no longer available. The - * specified cache operations must have been registered - * previously using nl_cache_mngt_register() - * - * @return 0 on success or a negative error code - */ -int nl_cache_mngt_unregister(struct nl_cache_ops *ops) -{ - struct nl_cache_ops *t, **tp; - - for (tp = &cache_ops; (t=*tp) != NULL; tp = &t->co_next) - if (t == ops) - break; - - if (!t) - return -NLE_NOCACHE; - - NL_DBG(1, "Unregistered cache operations %s\n", ops->co_name); - - *tp = t->co_next; - return 0; -} - -/** @} */ - -/** @} */ diff --git a/package/libs/libnl-tiny/src/error.c b/package/libs/libnl-tiny/src/error.c deleted file mode 100644 index e8ee47459ee..00000000000 --- a/package/libs/libnl-tiny/src/error.c +++ /dev/null @@ -1,116 +0,0 @@ -/* - * lib/error.c Error Handling - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation version 2.1 - * of the License. - * - * Copyright (c) 2008 Thomas Graf - */ - -#include -#include - -static const char *errmsg[NLE_MAX+1] = { -[NLE_SUCCESS] = "Success", -[NLE_FAILURE] = "Unspecific failure", -[NLE_INTR] = "Interrupted system call", -[NLE_BAD_SOCK] = "Bad socket", -[NLE_AGAIN] = "Try again", -[NLE_NOMEM] = "Out of memory", -[NLE_EXIST] = "Object exists", -[NLE_INVAL] = "Invalid input data or parameter", -[NLE_RANGE] = "Input data out of range", -[NLE_MSGSIZE] = "Message size not sufficient", -[NLE_OPNOTSUPP] = "Operation not supported", -[NLE_AF_NOSUPPORT] = "Address family not supported", -[NLE_OBJ_NOTFOUND] = "Object not found", -[NLE_NOATTR] = "Attribute not available", -[NLE_MISSING_ATTR] = "Missing attribute", -[NLE_AF_MISMATCH] = "Address family mismatch", -[NLE_SEQ_MISMATCH] = "Message sequence number mismatch", -[NLE_MSG_OVERFLOW] = "Kernel reported message overflow", -[NLE_MSG_TRUNC] = "Kernel reported truncated message", -[NLE_NOADDR] = "Invalid address for specified address family", -[NLE_SRCRT_NOSUPPORT] = "Source based routing not supported", -[NLE_MSG_TOOSHORT] = "Netlink message is too short", -[NLE_MSGTYPE_NOSUPPORT] = "Netlink message type is not supported", -[NLE_OBJ_MISMATCH] = "Object type does not match cache", -[NLE_NOCACHE] = "Unknown or invalid cache type", -[NLE_BUSY] = "Object busy", -[NLE_PROTO_MISMATCH] = "Protocol mismatch", -[NLE_NOACCESS] = "No Access", -[NLE_PERM] = "Operation not permitted", -[NLE_PKTLOC_FILE] = "Unable to open packet location file", -[NLE_PARSE_ERR] = "Unable to parse object", -[NLE_NODEV] = "No such device", -[NLE_IMMUTABLE] = "Immutable attribute", -[NLE_DUMP_INTR] = "Dump inconsistency detected, interrupted", -}; - -/** - * Return error message for an error code - * @return error message - */ -const char *nl_geterror(int error) -{ - error = abs(error); - - if (error > NLE_MAX) - error = NLE_FAILURE; - - return errmsg[error]; -} - -/** - * Print a libnl error message - * @arg s error message prefix - * - * Prints the error message of the call that failed last. - * - * If s is not NULL and *s is not a null byte the argument - * string is printed, followed by a colon and a blank. Then - * the error message and a new-line. - */ -void nl_perror(int error, const char *s) -{ - if (s && *s) - fprintf(stderr, "%s: %s\n", s, nl_geterror(error)); - else - fprintf(stderr, "%s\n", nl_geterror(error)); -} - -int nl_syserr2nlerr(int error) -{ - error = abs(error); - - switch (error) { - case EBADF: return NLE_BAD_SOCK; - case EADDRINUSE: return NLE_EXIST; - case EEXIST: return NLE_EXIST; - case EADDRNOTAVAIL: return NLE_NOADDR; - case ESRCH: /* fall through */ - case ENOENT: return NLE_OBJ_NOTFOUND; - case EINTR: return NLE_INTR; - case EAGAIN: return NLE_AGAIN; - case ENOTSOCK: return NLE_BAD_SOCK; - case ENOPROTOOPT: return NLE_INVAL; - case EFAULT: return NLE_INVAL; - case EACCES: return NLE_NOACCESS; - case EINVAL: return NLE_INVAL; - case ENOBUFS: return NLE_NOMEM; - case ENOMEM: return NLE_NOMEM; - case EAFNOSUPPORT: return NLE_AF_NOSUPPORT; - case EPROTONOSUPPORT: return NLE_PROTO_MISMATCH; - case EOPNOTSUPP: return NLE_OPNOTSUPP; - case EPERM: return NLE_PERM; - case EBUSY: return NLE_BUSY; - case ERANGE: return NLE_RANGE; - case ENODEV: return NLE_NODEV; - default: return NLE_FAILURE; - } -} - -/** @} */ - diff --git a/package/libs/libnl-tiny/src/genl.c b/package/libs/libnl-tiny/src/genl.c deleted file mode 100644 index 055be919e1d..00000000000 --- a/package/libs/libnl-tiny/src/genl.c +++ /dev/null @@ -1,268 +0,0 @@ -/* - * lib/genl/genl.c Generic Netlink - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation version 2.1 - * of the License. - * - * Copyright (c) 2003-2008 Thomas Graf - */ - -/** - * @defgroup genl Generic Netlink - * - * @par Message Format - * @code - * <------- NLMSG_ALIGN(hlen) ------> <---- NLMSG_ALIGN(len) ---> - * +----------------------------+- - -+- - - - - - - - - - -+- - -+ - * | Header | Pad | Payload | Pad | - * | struct nlmsghdr | | | | - * +----------------------------+- - -+- - - - - - - - - - -+- - -+ - * @endcode - * @code - * <-------- GENL_HDRLEN -------> <--- hdrlen --> - * <------- genlmsg_len(ghdr) ------> - * +------------------------+- - -+---------------+- - -+------------+ - * | Generic Netlink Header | Pad | Family Header | Pad | Attributes | - * | struct genlmsghdr | | | | | - * +------------------------+- - -+---------------+- - -+------------+ - * genlmsg_data(ghdr)--------------^ ^ - * genlmsg_attrdata(ghdr, hdrlen)------------------------- - * @endcode - * - * @par Example - * @code - * #include - * #include - * #include - * - * struct nl_sock *sock; - * struct nl_msg *msg; - * int family; - * - * // Allocate a new netlink socket - * sock = nl_socket_alloc(); - * - * // Connect to generic netlink socket on kernel side - * genl_connect(sock); - * - * // Ask kernel to resolve family name to family id - * family = genl_ctrl_resolve(sock, "generic_netlink_family_name"); - * - * // Construct a generic netlink by allocating a new message, fill in - * // the header and append a simple integer attribute. - * msg = nlmsg_alloc(); - * genlmsg_put(msg, NL_AUTO_PID, NL_AUTO_SEQ, family, 0, NLM_F_ECHO, - * CMD_FOO_GET, FOO_VERSION); - * nla_put_u32(msg, ATTR_FOO, 123); - * - * // Send message over netlink socket - * nl_send_auto_complete(sock, msg); - * - * // Free message - * nlmsg_free(msg); - * - * // Prepare socket to receive the answer by specifying the callback - * // function to be called for valid messages. - * nl_socket_modify_cb(sock, NL_CB_VALID, NL_CB_CUSTOM, parse_cb, NULL); - * - * // Wait for the answer and receive it - * nl_recvmsgs_default(sock); - * - * static int parse_cb(struct nl_msg *msg, void *arg) - * { - * struct nlmsghdr *nlh = nlmsg_hdr(msg); - * struct nlattr *attrs[ATTR_MAX+1]; - * - * // Validate message and parse attributes - * genlmsg_parse(nlh, 0, attrs, ATTR_MAX, policy); - * - * if (attrs[ATTR_FOO]) { - * uint32_t value = nla_get_u32(attrs[ATTR_FOO]); - * ... - * } - * - * return 0; - * } - * @endcode - * @{ - */ - -#include -#include -#include -#include - -/** - * @name Socket Creating - * @{ - */ - -int genl_connect(struct nl_sock *sk) -{ - return nl_connect(sk, NETLINK_GENERIC); -} - -/** @} */ - -/** - * @name Sending - * @{ - */ - -/** - * Send trivial generic netlink message - * @arg sk Netlink socket. - * @arg family Generic netlink family - * @arg cmd Command - * @arg version Version - * @arg flags Additional netlink message flags. - * - * Fills out a routing netlink request message and sends it out - * using nl_send_simple(). - * - * @return 0 on success or a negative error code. - */ -int genl_send_simple(struct nl_sock *sk, int family, int cmd, - int version, int flags) -{ - struct genlmsghdr hdr = { - .cmd = cmd, - .version = version, - }; - - return nl_send_simple(sk, family, flags, &hdr, sizeof(hdr)); -} - -/** @} */ - - -/** - * @name Message Parsing - * @{ - */ - -int genlmsg_valid_hdr(struct nlmsghdr *nlh, int hdrlen) -{ - struct genlmsghdr *ghdr; - - if (!nlmsg_valid_hdr(nlh, GENL_HDRLEN)) - return 0; - - ghdr = nlmsg_data(nlh); - if (genlmsg_len(ghdr) < NLMSG_ALIGN(hdrlen)) - return 0; - - return 1; -} - -int genlmsg_validate(struct nlmsghdr *nlh, int hdrlen, int maxtype, - struct nla_policy *policy) -{ - struct genlmsghdr *ghdr; - - if (!genlmsg_valid_hdr(nlh, hdrlen)) - return -NLE_MSG_TOOSHORT; - - ghdr = nlmsg_data(nlh); - return nla_validate(genlmsg_attrdata(ghdr, hdrlen), - genlmsg_attrlen(ghdr, hdrlen), maxtype, policy); -} - -int genlmsg_parse(struct nlmsghdr *nlh, int hdrlen, struct nlattr *tb[], - int maxtype, struct nla_policy *policy) -{ - struct genlmsghdr *ghdr; - - if (!genlmsg_valid_hdr(nlh, hdrlen)) - return -NLE_MSG_TOOSHORT; - - ghdr = nlmsg_data(nlh); - return nla_parse(tb, maxtype, genlmsg_attrdata(ghdr, hdrlen), - genlmsg_attrlen(ghdr, hdrlen), policy); -} - -/** - * Get head of message payload - * @arg gnlh genetlink messsage header - */ -void *genlmsg_data(const struct genlmsghdr *gnlh) -{ - return ((unsigned char *) gnlh + GENL_HDRLEN); -} - -/** - * Get lenght of message payload - * @arg gnlh genetlink message header - */ -int genlmsg_len(const struct genlmsghdr *gnlh) -{ - struct nlmsghdr *nlh = (struct nlmsghdr *)((unsigned char *)gnlh - - NLMSG_HDRLEN); - return (nlh->nlmsg_len - GENL_HDRLEN - NLMSG_HDRLEN); -} - -/** - * Get head of attribute data - * @arg gnlh generic netlink message header - * @arg hdrlen length of family specific header - */ -struct nlattr *genlmsg_attrdata(const struct genlmsghdr *gnlh, int hdrlen) -{ - return genlmsg_data(gnlh) + NLMSG_ALIGN(hdrlen); -} - -/** - * Get length of attribute data - * @arg gnlh generic netlink message header - * @arg hdrlen length of family specific header - */ -int genlmsg_attrlen(const struct genlmsghdr *gnlh, int hdrlen) -{ - return genlmsg_len(gnlh) - NLMSG_ALIGN(hdrlen); -} - -/** @} */ - -/** - * @name Message Building - * @{ - */ - -/** - * Add generic netlink header to netlink message - * @arg msg netlink message - * @arg pid netlink process id or NL_AUTO_PID - * @arg seq sequence number of message or NL_AUTO_SEQ - * @arg family generic netlink family - * @arg hdrlen length of user specific header - * @arg flags message flags - * @arg cmd generic netlink command - * @arg version protocol version - * - * Returns pointer to user specific header. - */ -void *genlmsg_put(struct nl_msg *msg, uint32_t pid, uint32_t seq, int family, - int hdrlen, int flags, uint8_t cmd, uint8_t version) -{ - struct nlmsghdr *nlh; - struct genlmsghdr hdr = { - .cmd = cmd, - .version = version, - }; - - nlh = nlmsg_put(msg, pid, seq, family, GENL_HDRLEN + hdrlen, flags); - if (nlh == NULL) - return NULL; - - memcpy(nlmsg_data(nlh), &hdr, sizeof(hdr)); - NL_DBG(2, "msg %p: Added generic netlink header cmd=%d version=%d\n", - msg, cmd, version); - - return nlmsg_data(nlh) + GENL_HDRLEN; -} - -/** @} */ - -/** @} */ diff --git a/package/libs/libnl-tiny/src/genl_ctrl.c b/package/libs/libnl-tiny/src/genl_ctrl.c deleted file mode 100644 index 0045459b2f1..00000000000 --- a/package/libs/libnl-tiny/src/genl_ctrl.c +++ /dev/null @@ -1,380 +0,0 @@ -/* - * lib/genl/ctrl.c Generic Netlink Controller - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation version 2.1 - * of the License. - * - * Copyright (c) 2003-2008 Thomas Graf - */ - -/** - * @ingroup genl_mngt - * @defgroup ctrl Controller - * @brief - * - * @{ - */ - -#include -#include -#include -#include -#include -#include -#include - -/** @cond SKIP */ -#define CTRL_VERSION 0x0001 - -static struct nl_cache_ops genl_ctrl_ops; -/** @endcond */ - -static int ctrl_request_update(struct nl_cache *c, struct nl_sock *h) -{ - return genl_send_simple(h, GENL_ID_CTRL, CTRL_CMD_GETFAMILY, - CTRL_VERSION, NLM_F_DUMP); -} - -static struct nla_policy ctrl_policy[CTRL_ATTR_MAX+1] = { - [CTRL_ATTR_FAMILY_ID] = { .type = NLA_U16 }, - [CTRL_ATTR_FAMILY_NAME] = { .type = NLA_STRING, - .maxlen = GENL_NAMSIZ }, - [CTRL_ATTR_VERSION] = { .type = NLA_U32 }, - [CTRL_ATTR_HDRSIZE] = { .type = NLA_U32 }, - [CTRL_ATTR_MAXATTR] = { .type = NLA_U32 }, - [CTRL_ATTR_OPS] = { .type = NLA_NESTED }, - [CTRL_ATTR_MCAST_GROUPS] = { .type = NLA_NESTED }, -}; - -static struct nla_policy family_op_policy[CTRL_ATTR_OP_MAX+1] = { - [CTRL_ATTR_OP_ID] = { .type = NLA_U32 }, - [CTRL_ATTR_OP_FLAGS] = { .type = NLA_U32 }, -}; - -static struct nla_policy family_grp_policy[CTRL_ATTR_MCAST_GRP_MAX+1] = { - [CTRL_ATTR_MCAST_GRP_NAME] = { .type = NLA_STRING }, - [CTRL_ATTR_MCAST_GRP_ID] = { .type = NLA_U32 }, -}; - -static int ctrl_msg_parser(struct nl_cache_ops *ops, struct genl_cmd *cmd, - struct genl_info *info, void *arg) -{ - struct genl_family *family; - struct nl_parser_param *pp = arg; - int err; - - family = genl_family_alloc(); - if (family == NULL) { - err = -NLE_NOMEM; - goto errout; - } - - if (info->attrs[CTRL_ATTR_FAMILY_NAME] == NULL) { - err = -NLE_MISSING_ATTR; - goto errout; - } - - if (info->attrs[CTRL_ATTR_FAMILY_ID] == NULL) { - err = -NLE_MISSING_ATTR; - goto errout; - } - - family->ce_msgtype = info->nlh->nlmsg_type; - genl_family_set_id(family, - nla_get_u16(info->attrs[CTRL_ATTR_FAMILY_ID])); - genl_family_set_name(family, - nla_get_string(info->attrs[CTRL_ATTR_FAMILY_NAME])); - - if (info->attrs[CTRL_ATTR_VERSION]) { - uint32_t version = nla_get_u32(info->attrs[CTRL_ATTR_VERSION]); - genl_family_set_version(family, version); - } - - if (info->attrs[CTRL_ATTR_HDRSIZE]) { - uint32_t hdrsize = nla_get_u32(info->attrs[CTRL_ATTR_HDRSIZE]); - genl_family_set_hdrsize(family, hdrsize); - } - - if (info->attrs[CTRL_ATTR_MAXATTR]) { - uint32_t maxattr = nla_get_u32(info->attrs[CTRL_ATTR_MAXATTR]); - genl_family_set_maxattr(family, maxattr); - } - - if (info->attrs[CTRL_ATTR_OPS]) { - struct nlattr *nla, *nla_ops; - int remaining; - - nla_ops = info->attrs[CTRL_ATTR_OPS]; - nla_for_each_nested(nla, nla_ops, remaining) { - struct nlattr *tb[CTRL_ATTR_OP_MAX+1]; - int flags = 0, id; - - err = nla_parse_nested(tb, CTRL_ATTR_OP_MAX, nla, - family_op_policy); - if (err < 0) - goto errout; - - if (tb[CTRL_ATTR_OP_ID] == NULL) { - err = -NLE_MISSING_ATTR; - goto errout; - } - - id = nla_get_u32(tb[CTRL_ATTR_OP_ID]); - - if (tb[CTRL_ATTR_OP_FLAGS]) - flags = nla_get_u32(tb[CTRL_ATTR_OP_FLAGS]); - - err = genl_family_add_op(family, id, flags); - if (err < 0) - goto errout; - - } - } - - if (info->attrs[CTRL_ATTR_MCAST_GROUPS]) { - struct nlattr *nla, *nla_grps; - int remaining; - - nla_grps = info->attrs[CTRL_ATTR_MCAST_GROUPS]; - nla_for_each_nested(nla, nla_grps, remaining) { - struct nlattr *tb[CTRL_ATTR_MCAST_GRP_MAX+1]; - int id; - const char * name; - - err = nla_parse_nested(tb, CTRL_ATTR_MCAST_GRP_MAX, nla, - family_grp_policy); - if (err < 0) - goto errout; - - if (tb[CTRL_ATTR_MCAST_GRP_ID] == NULL) { - err = -NLE_MISSING_ATTR; - goto errout; - } - id = nla_get_u32(tb[CTRL_ATTR_MCAST_GRP_ID]); - - if (tb[CTRL_ATTR_MCAST_GRP_NAME] == NULL) { - err = -NLE_MISSING_ATTR; - goto errout; - } - name = nla_get_string(tb[CTRL_ATTR_MCAST_GRP_NAME]); - - err = genl_family_add_grp(family, id, name); - if (err < 0) - goto errout; - } - - } - - err = pp->pp_cb((struct nl_object *) family, pp); -errout: - genl_family_put(family); - return err; -} - -/** - * @name Cache Management - * @{ - */ - -int genl_ctrl_alloc_cache(struct nl_sock *sock, struct nl_cache **result) -{ - return nl_cache_alloc_and_fill(&genl_ctrl_ops, sock, result); -} - -/** - * Look up generic netlink family by id in the provided cache. - * @arg cache Generic netlink family cache. - * @arg id Family identifier. - * - * Searches through the cache looking for a registered family - * matching the specified identifier. The caller will own a - * reference on the returned object which needs to be given - * back after usage using genl_family_put(). - * - * @return Generic netlink family object or NULL if no match was found. - */ -struct genl_family *genl_ctrl_search(struct nl_cache *cache, int id) -{ - struct genl_family *fam; - - if (cache->c_ops != &genl_ctrl_ops) - BUG(); - - nl_list_for_each_entry(fam, &cache->c_items, ce_list) { - if (fam->gf_id == id) { - nl_object_get((struct nl_object *) fam); - return fam; - } - } - - return NULL; -} - -/** - * @name Resolver - * @{ - */ - -/** - * Look up generic netlink family by family name in the provided cache. - * @arg cache Generic netlink family cache. - * @arg name Family name. - * - * Searches through the cache looking for a registered family - * matching the specified name. The caller will own a reference - * on the returned object which needs to be given back after - * usage using genl_family_put(). - * - * @return Generic netlink family object or NULL if no match was found. - */ -struct genl_family *genl_ctrl_search_by_name(struct nl_cache *cache, - const char *name) -{ - struct genl_family *fam; - - if (cache->c_ops != &genl_ctrl_ops) - BUG(); - - nl_list_for_each_entry(fam, &cache->c_items, ce_list) { - if (!strcmp(name, fam->gf_name)) { - nl_object_get((struct nl_object *) fam); - return fam; - } - } - - return NULL; -} - -/** @} */ - -/** - * Resolve generic netlink family name to its identifier - * @arg sk Netlink socket. - * @arg name Name of generic netlink family - * - * Resolves the generic netlink family name to its identifer and returns - * it. - * - * @return A positive identifier or a negative error code. - */ -int genl_ctrl_resolve(struct nl_sock *sk, const char *name) -{ - struct nl_cache *cache; - struct genl_family *family; - int err; - - if ((err = genl_ctrl_alloc_cache(sk, &cache)) < 0) - return err; - - family = genl_ctrl_search_by_name(cache, name); - if (family == NULL) { - err = -NLE_OBJ_NOTFOUND; - goto errout; - } - - err = genl_family_get_id(family); - genl_family_put(family); -errout: - nl_cache_free(cache); - - return err; -} - -static int genl_ctrl_grp_by_name(const struct genl_family *family, - const char *grp_name) -{ - struct genl_family_grp *grp; - - nl_list_for_each_entry(grp, &family->gf_mc_grps, list) { - if (!strcmp(grp->name, grp_name)) { - return grp->id; - } - } - - return -NLE_OBJ_NOTFOUND; -} - -int genl_ctrl_resolve_grp(struct nl_sock *sk, const char *family_name, - const char *grp_name) -{ - struct nl_cache *cache; - struct genl_family *family; - int err; - - if ((err = genl_ctrl_alloc_cache(sk, &cache)) < 0) - return err; - - family = genl_ctrl_search_by_name(cache, family_name); - if (family == NULL) { - err = -NLE_OBJ_NOTFOUND; - goto errout; - } - - err = genl_ctrl_grp_by_name(family, grp_name); - genl_family_put(family); -errout: - nl_cache_free(cache); - - return err; -} - -/** @} */ - -static struct genl_cmd genl_cmds[] = { - { - .c_id = CTRL_CMD_NEWFAMILY, - .c_name = "NEWFAMILY" , - .c_maxattr = CTRL_ATTR_MAX, - .c_attr_policy = ctrl_policy, - .c_msg_parser = ctrl_msg_parser, - }, - { - .c_id = CTRL_CMD_DELFAMILY, - .c_name = "DELFAMILY" , - }, - { - .c_id = CTRL_CMD_GETFAMILY, - .c_name = "GETFAMILY" , - }, - { - .c_id = CTRL_CMD_NEWOPS, - .c_name = "NEWOPS" , - }, - { - .c_id = CTRL_CMD_DELOPS, - .c_name = "DELOPS" , - }, -}; - -static struct genl_ops genl_ops = { - .o_cmds = genl_cmds, - .o_ncmds = ARRAY_SIZE(genl_cmds), -}; - -/** @cond SKIP */ -extern struct nl_object_ops genl_family_ops; -/** @endcond */ - -static struct nl_cache_ops genl_ctrl_ops = { - .co_name = "genl/family", - .co_hdrsize = GENL_HDRSIZE(0), - .co_msgtypes = GENL_FAMILY(GENL_ID_CTRL, "nlctrl"), - .co_genl = &genl_ops, - .co_protocol = NETLINK_GENERIC, - .co_request_update = ctrl_request_update, - .co_obj_ops = &genl_family_ops, -}; - -static void __init ctrl_init(void) -{ - genl_register(&genl_ctrl_ops); -} - -static void __exit ctrl_exit(void) -{ - genl_unregister(&genl_ctrl_ops); -} - -/** @} */ diff --git a/package/libs/libnl-tiny/src/genl_family.c b/package/libs/libnl-tiny/src/genl_family.c deleted file mode 100644 index 221acfa1a7f..00000000000 --- a/package/libs/libnl-tiny/src/genl_family.c +++ /dev/null @@ -1,169 +0,0 @@ -/* - * lib/genl/family.c Generic Netlink Family - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation version 2.1 - * of the License. - * - * Copyright (c) 2003-2006 Thomas Graf - */ - -/** - * @ingroup genl - * @defgroup genl_family Generic Netlink Family - * @brief - * - * @{ - */ - -#include -#include -#include -#include -#include - -struct nl_object_ops genl_family_ops; -/** @endcond */ - -static void family_constructor(struct nl_object *c) -{ - struct genl_family *family = (struct genl_family *) c; - - nl_init_list_head(&family->gf_ops); - nl_init_list_head(&family->gf_mc_grps); -} - -static void family_free_data(struct nl_object *c) -{ - struct genl_family *family = (struct genl_family *) c; - struct genl_family_op *ops, *tmp; - struct genl_family_grp *grp, *t_grp; - - if (family == NULL) - return; - - nl_list_for_each_entry_safe(ops, tmp, &family->gf_ops, o_list) { - nl_list_del(&ops->o_list); - free(ops); - } - - nl_list_for_each_entry_safe(grp, t_grp, &family->gf_mc_grps, list) { - nl_list_del(&grp->list); - free(grp); - } - -} - -static int family_clone(struct nl_object *_dst, struct nl_object *_src) -{ - struct genl_family *dst = nl_object_priv(_dst); - struct genl_family *src = nl_object_priv(_src); - struct genl_family_op *ops; - struct genl_family_grp *grp; - int err; - - nl_list_for_each_entry(ops, &src->gf_ops, o_list) { - err = genl_family_add_op(dst, ops->o_id, ops->o_flags); - if (err < 0) - return err; - } - - nl_list_for_each_entry(grp, &src->gf_mc_grps, list) { - err = genl_family_add_grp(dst, grp->id, grp->name); - if (err < 0) - return err; - } - - - return 0; -} - -static int family_compare(struct nl_object *_a, struct nl_object *_b, - uint32_t attrs, int flags) -{ - struct genl_family *a = (struct genl_family *) _a; - struct genl_family *b = (struct genl_family *) _b; - int diff = 0; - -#define FAM_DIFF(ATTR, EXPR) ATTR_DIFF(attrs, FAMILY_ATTR_##ATTR, a, b, EXPR) - - diff |= FAM_DIFF(ID, a->gf_id != b->gf_id); - diff |= FAM_DIFF(VERSION, a->gf_version != b->gf_version); - diff |= FAM_DIFF(HDRSIZE, a->gf_hdrsize != b->gf_hdrsize); - diff |= FAM_DIFF(MAXATTR, a->gf_maxattr != b->gf_maxattr); - diff |= FAM_DIFF(NAME, strcmp(a->gf_name, b->gf_name)); - -#undef FAM_DIFF - - return diff; -} - - -/** - * @name Family Object - * @{ - */ - -struct genl_family *genl_family_alloc(void) -{ - return (struct genl_family *) nl_object_alloc(&genl_family_ops); -} - -void genl_family_put(struct genl_family *family) -{ - nl_object_put((struct nl_object *) family); -} - -/** @} */ - - -int genl_family_add_op(struct genl_family *family, int id, int flags) -{ - struct genl_family_op *op; - - op = calloc(1, sizeof(*op)); - if (op == NULL) - return -NLE_NOMEM; - - op->o_id = id; - op->o_flags = flags; - - nl_list_add_tail(&op->o_list, &family->gf_ops); - family->ce_mask |= FAMILY_ATTR_OPS; - - return 0; -} - -int genl_family_add_grp(struct genl_family *family, uint32_t id, - const char *name) -{ - struct genl_family_grp *grp; - - grp = calloc(1, sizeof(*grp)); - if (grp == NULL) - return -NLE_NOMEM; - - grp->id = id; - strncpy(grp->name, name, GENL_NAMSIZ - 1); - - nl_list_add_tail(&grp->list, &family->gf_mc_grps); - - return 0; -} - -/** @} */ - -/** @cond SKIP */ -struct nl_object_ops genl_family_ops = { - .oo_name = "genl/family", - .oo_size = sizeof(struct genl_family), - .oo_constructor = family_constructor, - .oo_free_data = family_free_data, - .oo_clone = family_clone, - .oo_compare = family_compare, - .oo_id_attrs = FAMILY_ATTR_ID, -}; -/** @endcond */ - -/** @} */ diff --git a/package/libs/libnl-tiny/src/genl_mngt.c b/package/libs/libnl-tiny/src/genl_mngt.c deleted file mode 100644 index 246521f696a..00000000000 --- a/package/libs/libnl-tiny/src/genl_mngt.c +++ /dev/null @@ -1,193 +0,0 @@ -/* - * lib/genl/mngt.c Generic Netlink Management - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation version 2.1 - * of the License. - * - * Copyright (c) 2003-2008 Thomas Graf - */ - -/** - * @ingroup genl - * @defgroup genl_mngt Management - * - * @par 1) Registering a generic netlink module - * @code - * #include - * - * // First step is to define all the commands being used in - * // particular generic netlink family. The ID and name are - * // mandatory to be filled out. A callback function and - * // most the attribute policy that comes with it must be - * // defined for commands expected to be issued towards - * // userspace. - * static struct genl_cmd foo_cmds[] = { - * { - * .c_id = FOO_CMD_NEW, - * .c_name = "NEWFOO" , - * .c_maxattr = FOO_ATTR_MAX, - * .c_attr_policy = foo_policy, - * .c_msg_parser = foo_msg_parser, - * }, - * { - * .c_id = FOO_CMD_DEL, - * .c_name = "DELFOO" , - * }, - * }; - * - * // The list of commands must then be integrated into a - * // struct genl_ops serving as handle for this particular - * // family. - * static struct genl_ops my_genl_ops = { - * .o_cmds = foo_cmds, - * .o_ncmds = ARRAY_SIZE(foo_cmds), - * }; - * - * // Using the above struct genl_ops an arbitary number of - * // cache handles can be associated to it. - * // - * // The macro GENL_HDRSIZE() must be used to specify the - * // length of the header to automatically take headers on - * // generic layers into account. - * // - * // The macro GENL_FAMILY() is used to represent the generic - * // netlink family id. - * static struct nl_cache_ops genl_foo_ops = { - * .co_name = "genl/foo", - * .co_hdrsize = GENL_HDRSIZE(sizeof(struct my_hdr)), - * .co_msgtypes = GENL_FAMILY(GENL_ID_GENERATE, "foo"), - * .co_genl = &my_genl_ops, - * .co_protocol = NETLINK_GENERIC, - * .co_request_update = foo_request_update, - * .co_obj_ops = &genl_foo_ops, - * }; - * - * // Finally each cache handle for a generic netlink family - * // must be registered using genl_register(). - * static void __init foo_init(void) - * { - * genl_register(&genl_foo_ops); - * } - * - * // ... respectively unregsted again. - * static void __exit foo_exit(void) - * { - * genl_unregister(&genl_foo_ops); - * } - * @endcode - * @{ - */ - -#include -#include -#include -#include -#include -#include -#include - -static NL_LIST_HEAD(genl_ops_list); - -static int genl_msg_parser(struct nl_cache_ops *ops, struct sockaddr_nl *who, - struct nlmsghdr *nlh, struct nl_parser_param *pp) -{ - int i, err; - struct genlmsghdr *ghdr; - struct genl_cmd *cmd; - - ghdr = nlmsg_data(nlh); - - if (ops->co_genl == NULL) - BUG(); - - for (i = 0; i < ops->co_genl->o_ncmds; i++) { - cmd = &ops->co_genl->o_cmds[i]; - if (cmd->c_id == ghdr->cmd) - goto found; - } - - err = -NLE_MSGTYPE_NOSUPPORT; - goto errout; - -found: - if (cmd->c_msg_parser == NULL) - err = -NLE_OPNOTSUPP; - else { - struct nlattr *tb[cmd->c_maxattr + 1]; - struct genl_info info = { - .who = who, - .nlh = nlh, - .genlhdr = ghdr, - .userhdr = genlmsg_data(ghdr), - .attrs = tb, - }; - - err = nlmsg_parse(nlh, ops->co_hdrsize, tb, cmd->c_maxattr, - cmd->c_attr_policy); - if (err < 0) - goto errout; - - err = cmd->c_msg_parser(ops, cmd, &info, pp); - } -errout: - return err; - -} - -/** - * @name Register/Unregister - * @{ - */ - -/** - * Register generic netlink operations - * @arg ops cache operations - */ -int genl_register(struct nl_cache_ops *ops) -{ - int err; - - if (ops->co_protocol != NETLINK_GENERIC) { - err = -NLE_PROTO_MISMATCH; - goto errout; - } - - if (ops->co_hdrsize < GENL_HDRSIZE(0)) { - err = -NLE_INVAL; - goto errout; - } - - if (ops->co_genl == NULL) { - err = -NLE_INVAL; - goto errout; - } - - ops->co_genl->o_cache_ops = ops; - ops->co_genl->o_name = ops->co_msgtypes[0].mt_name; - ops->co_genl->o_family = ops->co_msgtypes[0].mt_id; - ops->co_msg_parser = genl_msg_parser; - - /* FIXME: check for dup */ - - nl_list_add_tail(&ops->co_genl->o_list, &genl_ops_list); - - err = nl_cache_mngt_register(ops); -errout: - return err; -} - -/** - * Unregister generic netlink operations - * @arg ops cache operations - */ -void genl_unregister(struct nl_cache_ops *ops) -{ - nl_cache_mngt_unregister(ops); - nl_list_del(&ops->co_genl->o_list); -} - -/** @} */ - -/** @} */ diff --git a/package/libs/libnl-tiny/src/handlers.c b/package/libs/libnl-tiny/src/handlers.c deleted file mode 100644 index 12ebda5207e..00000000000 --- a/package/libs/libnl-tiny/src/handlers.c +++ /dev/null @@ -1,162 +0,0 @@ -/* - * lib/handlers.c default netlink message handlers - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation version 2.1 - * of the License. - * - * Copyright (c) 2003-2008 Thomas Graf - */ - -/** - * @ingroup core - * @defgroup cb Callbacks/Customization - * - * @details - * @par 1) Setting up a callback set - * @code - * // Allocate a callback set and initialize it to the verbose default set - * struct nl_cb *cb = nl_cb_alloc(NL_CB_VERBOSE); - * - * // Modify the set to call my_func() for all valid messages - * nl_cb_set(cb, NL_CB_VALID, NL_CB_CUSTOM, my_func, NULL); - * - * // Set the error message handler to the verbose default implementation - * // and direct it to print all errors to the given file descriptor. - * FILE *file = fopen(...); - * nl_cb_err(cb, NL_CB_VERBOSE, NULL, file); - * @endcode - * @{ - */ - -#include -#include -#include -#include -#include - -/** - * @name Callback Handle Management - * @{ - */ - -/** - * Allocate a new callback handle - * @arg kind callback kind to be used for initialization - * @return Newly allocated callback handle or NULL - */ -struct nl_cb *nl_cb_alloc(enum nl_cb_kind kind) -{ - int i; - struct nl_cb *cb; - - if (kind < 0 || kind > NL_CB_KIND_MAX) - return NULL; - - cb = calloc(1, sizeof(*cb)); - if (!cb) - return NULL; - - cb->cb_refcnt = 1; - - for (i = 0; i <= NL_CB_TYPE_MAX; i++) - nl_cb_set(cb, i, kind, NULL, NULL); - - nl_cb_err(cb, kind, NULL, NULL); - - return cb; -} - -/** - * Clone an existing callback handle - * @arg orig original callback handle - * @return Newly allocated callback handle being a duplicate of - * orig or NULL - */ -struct nl_cb *nl_cb_clone(struct nl_cb *orig) -{ - struct nl_cb *cb; - - cb = nl_cb_alloc(NL_CB_DEFAULT); - if (!cb) - return NULL; - - memcpy(cb, orig, sizeof(*orig)); - cb->cb_refcnt = 1; - - return cb; -} - -void nl_cb_put(struct nl_cb *cb) -{ - if (!cb) - return; - - cb->cb_refcnt--; - - if (cb->cb_refcnt < 0) - BUG(); - - if (cb->cb_refcnt <= 0) - free(cb); -} - -/** @} */ - -/** - * @name Callback Setup - * @{ - */ - -/** - * Set up a callback - * @arg cb callback set - * @arg type callback to modify - * @arg kind kind of implementation - * @arg func callback function (NL_CB_CUSTOM) - * @arg arg argument passed to callback - * - * @return 0 on success or a negative error code - */ -int nl_cb_set(struct nl_cb *cb, enum nl_cb_type type, enum nl_cb_kind kind, - nl_recvmsg_msg_cb_t func, void *arg) -{ - if (type < 0 || type > NL_CB_TYPE_MAX) - return -NLE_RANGE; - - if (kind < 0 || kind > NL_CB_KIND_MAX) - return -NLE_RANGE; - - if (kind == NL_CB_CUSTOM) { - cb->cb_set[type] = func; - cb->cb_args[type] = arg; - } - - return 0; -} - -/** - * Set up an error callback - * @arg cb callback set - * @arg kind kind of callback - * @arg func callback function - * @arg arg argument to be passed to callback function - */ -int nl_cb_err(struct nl_cb *cb, enum nl_cb_kind kind, - nl_recvmsg_err_cb_t func, void *arg) -{ - if (kind < 0 || kind > NL_CB_KIND_MAX) - return -NLE_RANGE; - - if (kind == NL_CB_CUSTOM) { - cb->cb_err = func; - cb->cb_err_arg = arg; - } - - return 0; -} - -/** @} */ - -/** @} */ diff --git a/package/libs/libnl-tiny/src/include/netlink-generic.h b/package/libs/libnl-tiny/src/include/netlink-generic.h deleted file mode 100644 index 10aa2f01bb1..00000000000 --- a/package/libs/libnl-tiny/src/include/netlink-generic.h +++ /dev/null @@ -1,20 +0,0 @@ -/* - * netlink-generic.h Local Generic Netlink Interface - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation version 2.1 - * of the License. - * - * Copyright (c) 2003-2006 Thomas Graf - */ - -#ifndef NETLINK_GENL_PRIV_H_ -#define NETLINK_GENL_PRIV_H_ - -#include -#include - -#define GENL_HDRSIZE(hdrlen) (GENL_HDRLEN + (hdrlen)) - -#endif diff --git a/package/libs/libnl-tiny/src/include/netlink-local.h b/package/libs/libnl-tiny/src/include/netlink-local.h deleted file mode 100644 index 53da8ca97e4..00000000000 --- a/package/libs/libnl-tiny/src/include/netlink-local.h +++ /dev/null @@ -1,160 +0,0 @@ -/* - * netlink-local.h Local Netlink Interface - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation version 2.1 - * of the License. - * - * Copyright (c) 2003-2008 Thomas Graf - */ - -#ifndef NETLINK_LOCAL_H_ -#define NETLINK_LOCAL_H_ -#ifndef _GNU_SOURCE -#define _GNU_SOURCE -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#ifndef SOL_NETLINK -#define SOL_NETLINK 270 -#endif - -#include - -/* local header copies */ -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -struct trans_tbl { - int i; - const char *a; -}; - -#define __ADD(id, name) { .i = id, .a = #name }, - -struct trans_list { - int i; - char *a; - struct nl_list_head list; -}; - -#define NL_DEBUG 1 - -#define NL_DBG(LVL,FMT,ARG...) \ - do {} while (0) - -#define BUG() \ - do { \ - fprintf(stderr, "BUG: %s:%d\n", \ - __FILE__, __LINE__); \ - assert(0); \ - } while (0) - -extern int __nl_read_num_str_file(const char *path, - int (*cb)(long, const char *)); - -extern int __trans_list_add(int, const char *, struct nl_list_head *); -extern void __trans_list_clear(struct nl_list_head *); - -extern char *__type2str(int, char *, size_t, struct trans_tbl *, size_t); -extern int __str2type(const char *, struct trans_tbl *, size_t); - -extern char *__list_type2str(int, char *, size_t, struct nl_list_head *); -extern int __list_str2type(const char *, struct nl_list_head *); - -extern char *__flags2str(int, char *, size_t, struct trans_tbl *, size_t); -extern int __str2flags(const char *, struct trans_tbl *, size_t); - -extern void dump_from_ops(struct nl_object *, struct nl_dump_params *); - -#ifdef disabled -static inline struct nl_cache *dp_cache(struct nl_object *obj) -{ - if (obj->ce_cache == NULL) - return nl_cache_mngt_require(obj->ce_ops->oo_name); - - return obj->ce_cache; -} -#endif - -static inline int nl_cb_call(struct nl_cb *cb, int type, struct nl_msg *msg) -{ - return cb->cb_set[type](msg, cb->cb_args[type]); -} - -#define ARRAY_SIZE(X) (sizeof(X) / sizeof((X)[0])) -#ifndef offsetof -#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) -#endif - -#define __init __attribute__ ((constructor)) -#define __exit __attribute__ ((destructor)) -#undef __deprecated -#define __deprecated __attribute__ ((deprecated)) - -#define min(x,y) ({ \ - typeof(x) _x = (x); \ - typeof(y) _y = (y); \ - (void) (&_x == &_y); \ - _x < _y ? _x : _y; }) - -#define max(x,y) ({ \ - typeof(x) _x = (x); \ - typeof(y) _y = (y); \ - (void) (&_x == &_y); \ - _x > _y ? _x : _y; }) - -extern int nl_cache_parse(struct nl_cache_ops *, struct sockaddr_nl *, - struct nlmsghdr *, struct nl_parser_param *); - - -static inline char *nl_cache_name(struct nl_cache *cache) -{ - return cache->c_ops ? cache->c_ops->co_name : "unknown"; -} - -#define GENL_FAMILY(id, name) \ - { \ - { id, NL_ACT_UNSPEC, name }, \ - END_OF_MSGTYPES_LIST, \ - } - -static inline int wait_for_ack(struct nl_sock *sk) -{ - if (sk->s_flags & NL_NO_AUTO_ACK) - return 0; - else - return nl_wait_for_ack(sk); -} - -#endif diff --git a/package/libs/libnl-tiny/src/include/netlink-types.h b/package/libs/libnl-tiny/src/include/netlink-types.h deleted file mode 100644 index 65f7f6c0b85..00000000000 --- a/package/libs/libnl-tiny/src/include/netlink-types.h +++ /dev/null @@ -1,88 +0,0 @@ -/* - * netlink-types.h Netlink Types (Private) - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation version 2.1 - * of the License. - * - * Copyright (c) 2003-2008 Thomas Graf - */ - -#ifndef NETLINK_LOCAL_TYPES_H_ -#define NETLINK_LOCAL_TYPES_H_ - -#include - -struct nl_cache_ops; -struct nl_sock; -struct nl_object; - -struct nl_cache -{ - struct nl_list_head c_items; - int c_nitems; - int c_iarg1; - int c_iarg2; - struct nl_cache_ops * c_ops; -}; - -struct nl_cache_assoc -{ - struct nl_cache * ca_cache; - change_func_t ca_change; -}; - -struct nl_cache_mngr -{ - int cm_protocol; - int cm_flags; - int cm_nassocs; - struct nl_sock * cm_handle; - struct nl_cache_assoc * cm_assocs; -}; - -struct nl_parser_param; - -#define LOOSE_COMPARISON 1 - - -struct nl_data -{ - size_t d_size; - void * d_data; -}; - -struct nl_addr -{ - int a_family; - unsigned int a_maxsize; - unsigned int a_len; - int a_prefixlen; - int a_refcnt; - char a_addr[0]; -}; - -#define IFQDISCSIZ 32 - -#define GENL_OP_HAS_POLICY 1 -#define GENL_OP_HAS_DOIT 2 -#define GENL_OP_HAS_DUMPIT 4 - -struct genl_family_grp { - struct genl_family *family; /* private */ - struct nl_list_head list; /* private */ - char name[GENL_NAMSIZ]; - u_int32_t id; -}; - -struct genl_family_op -{ - uint32_t o_id; - uint32_t o_flags; - - struct nl_list_head o_list; -}; - - -#endif diff --git a/package/libs/libnl-tiny/src/include/netlink/addr.h b/package/libs/libnl-tiny/src/include/netlink/addr.h deleted file mode 100644 index cc3d201f978..00000000000 --- a/package/libs/libnl-tiny/src/include/netlink/addr.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - * netlink/addr.h Abstract Address - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation version 2.1 - * of the License. - * - * Copyright (c) 2003-2008 Thomas Graf - */ - -#ifndef NETLINK_ADDR_H_ -#define NETLINK_ADDR_H_ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -struct nl_addr; - -/* Creation */ -extern struct nl_addr * nl_addr_alloc(size_t); -extern struct nl_addr * nl_addr_alloc_attr(struct nlattr *, int); -extern struct nl_addr * nl_addr_build(int, void *, size_t); -extern int nl_addr_parse(const char *, int, struct nl_addr **); -extern struct nl_addr * nl_addr_clone(struct nl_addr *); - -/* Destroyage */ -extern void nl_addr_destroy(struct nl_addr *); - -/* Usage Management */ -extern struct nl_addr * nl_addr_get(struct nl_addr *); -extern void nl_addr_put(struct nl_addr *); -extern int nl_addr_shared(struct nl_addr *); - -extern int nl_addr_cmp(struct nl_addr *, struct nl_addr *); -extern int nl_addr_cmp_prefix(struct nl_addr *, struct nl_addr *); -extern int nl_addr_iszero(struct nl_addr *); -extern int nl_addr_valid(char *, int); -extern int nl_addr_guess_family(struct nl_addr *); -extern int nl_addr_fill_sockaddr(struct nl_addr *, - struct sockaddr *, socklen_t *); -extern int nl_addr_info(struct nl_addr *, struct addrinfo **); -extern int nl_addr_resolve(struct nl_addr *addr, char *host, size_t hostlen); - -/* Access Functions */ -extern void nl_addr_set_family(struct nl_addr *, int); -extern int nl_addr_get_family(struct nl_addr *); -extern int nl_addr_set_binary_addr(struct nl_addr *, void *, - size_t); -extern void * nl_addr_get_binary_addr(struct nl_addr *); -extern unsigned int nl_addr_get_len(struct nl_addr *); -extern void nl_addr_set_prefixlen(struct nl_addr *, int); -extern unsigned int nl_addr_get_prefixlen(struct nl_addr *); - -/* Address Family Translations */ -extern char * nl_af2str(int, char *, size_t); -extern int nl_str2af(const char *); - -/* Translations to Strings */ -extern char * nl_addr2str(struct nl_addr *, char *, size_t); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/package/libs/libnl-tiny/src/include/netlink/attr.h b/package/libs/libnl-tiny/src/include/netlink/attr.h deleted file mode 100644 index 3b56a82dc66..00000000000 --- a/package/libs/libnl-tiny/src/include/netlink/attr.h +++ /dev/null @@ -1,726 +0,0 @@ -/* - * netlink/attr.h Netlink Attributes - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation version 2.1 - * of the License. - * - * Copyright (c) 2003-2008 Thomas Graf - */ - -#ifndef NETLINK_ATTR_H_ -#define NETLINK_ATTR_H_ - -#include -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -struct nl_msg; - -/** - * @name Basic Attribute Data Types - * @{ - */ - - /** - * @ingroup attr - * Basic attribute data types - * - * See \ref attr_datatypes for more details. - */ -enum { - NLA_UNSPEC, /**< Unspecified type, binary data chunk */ - NLA_U8, /**< 8 bit integer */ - NLA_U16, /**< 16 bit integer */ - NLA_U32, /**< 32 bit integer */ - NLA_U64, /**< 64 bit integer */ - NLA_STRING, /**< NUL terminated character string */ - NLA_FLAG, /**< Flag */ - NLA_MSECS, /**< Micro seconds (64bit) */ - NLA_NESTED, /**< Nested attributes */ - __NLA_TYPE_MAX, -}; - -#define NLA_TYPE_MAX (__NLA_TYPE_MAX - 1) - -/** @} */ - -/** - * @ingroup attr - * Attribute validation policy. - * - * See \ref attr_datatypes for more details. - */ -struct nla_policy { - /** Type of attribute or NLA_UNSPEC */ - uint16_t type; - - /** Minimal length of payload required */ - uint16_t minlen; - - /** Maximal length of payload allowed */ - uint16_t maxlen; -}; - -/* Attribute parsing */ -extern int nla_ok(const struct nlattr *, int); -extern struct nlattr * nla_next(const struct nlattr *, int *); -extern int nla_parse(struct nlattr **, int, struct nlattr *, - int, struct nla_policy *); -extern int nla_validate(struct nlattr *, int, int, - struct nla_policy *); -extern struct nlattr * nla_find(struct nlattr *, int, int); - -/* Unspecific attribute */ -extern struct nlattr * nla_reserve(struct nl_msg *, int, int); -extern int nla_put(struct nl_msg *, int, int, const void *); - -/** - * nlmsg_find_attr - find a specific attribute in a netlink message - * @arg nlh netlink message header - * @arg hdrlen length of familiy specific header - * @arg attrtype type of attribute to look for - * - * Returns the first attribute which matches the specified type. - */ -static inline struct nlattr *nlmsg_find_attr(struct nlmsghdr *nlh, int hdrlen, int attrtype) -{ - return nla_find(nlmsg_attrdata(nlh, hdrlen), - nlmsg_attrlen(nlh, hdrlen), attrtype); -} - - -/** - * Return size of attribute whithout padding. - * @arg payload Payload length of attribute. - * - * @code - * <-------- nla_attr_size(payload) ---------> - * +------------------+- - -+- - - - - - - - - +- - -+ - * | Attribute Header | Pad | Payload | Pad | - * +------------------+- - -+- - - - - - - - - +- - -+ - * @endcode - * - * @return Size of attribute in bytes without padding. - */ -static inline int nla_attr_size(int payload) -{ - return NLA_HDRLEN + payload; -} - -/** - * Return size of attribute including padding. - * @arg payload Payload length of attribute. - * - * @code - * <----------- nla_total_size(payload) -----------> - * +------------------+- - -+- - - - - - - - - +- - -+ - * | Attribute Header | Pad | Payload | Pad | - * +------------------+- - -+- - - - - - - - - +- - -+ - * @endcode - * - * @return Size of attribute in bytes. - */ -static inline int nla_total_size(int payload) -{ - return NLA_ALIGN(nla_attr_size(payload)); -} - -/** - * Return length of padding at the tail of the attribute. - * @arg payload Payload length of attribute. - * - * @code - * +------------------+- - -+- - - - - - - - - +- - -+ - * | Attribute Header | Pad | Payload | Pad | - * +------------------+- - -+- - - - - - - - - +- - -+ - * <---> - * @endcode - * - * @return Length of padding in bytes. - */ -static inline int nla_padlen(int payload) -{ - return nla_total_size(payload) - nla_attr_size(payload); -} - -/** - * Return type of the attribute. - * @arg nla Attribute. - * - * @return Type of attribute. - */ -static inline int nla_type(const struct nlattr *nla) -{ - return nla->nla_type & NLA_TYPE_MASK; -} - -/** - * Return pointer to the payload section. - * @arg nla Attribute. - * - * @return Pointer to start of payload section. - */ -static inline void *nla_data(const struct nlattr *nla) -{ - return (char *) nla + NLA_HDRLEN; -} - -/** - * Return length of the payload . - * @arg nla Attribute - * - * @return Length of payload in bytes. - */ -static inline int nla_len(const struct nlattr *nla) -{ - return nla->nla_len - NLA_HDRLEN; -} - -/** - * Copy attribute payload to another memory area. - * @arg dest Pointer to destination memory area. - * @arg src Attribute - * @arg count Number of bytes to copy at most. - * - * Note: The number of bytes copied is limited by the length of - * the attribute payload. - * - * @return The number of bytes copied to dest. - */ -static inline int nla_memcpy(void *dest, struct nlattr *src, int count) -{ - int minlen; - - if (!src) - return 0; - - minlen = min_t(int, count, nla_len(src)); - memcpy(dest, nla_data(src), minlen); - - return minlen; -} - - -/** - * Add abstract data as unspecific attribute to netlink message. - * @arg msg Netlink message. - * @arg attrtype Attribute type. - * @arg data Abstract data object. - * - * Equivalent to nla_put() except that the length of the payload is - * derived from the abstract data object. - * - * @see nla_put - * @return 0 on success or a negative error code. - */ -static inline int nla_put_data(struct nl_msg *msg, int attrtype, struct nl_data *data) -{ - return nla_put(msg, attrtype, nl_data_get_size(data), - nl_data_get(data)); -} - -/** - * Add abstract address as unspecific attribute to netlink message. - * @arg msg Netlink message. - * @arg attrtype Attribute type. - * @arg addr Abstract address object. - * - * @see nla_put - * @return 0 on success or a negative error code. - */ -static inline int nla_put_addr(struct nl_msg *msg, int attrtype, struct nl_addr *addr) -{ - return nla_put(msg, attrtype, nl_addr_get_len(addr), - nl_addr_get_binary_addr(addr)); -} - -/** @} */ - -/** - * @name Integer Attributes - */ - -/** - * Add 8 bit integer attribute to netlink message. - * @arg msg Netlink message. - * @arg attrtype Attribute type. - * @arg value Numeric value to store as payload. - * - * @see nla_put - * @return 0 on success or a negative error code. - */ -static inline int nla_put_u8(struct nl_msg *msg, int attrtype, uint8_t value) -{ - return nla_put(msg, attrtype, sizeof(uint8_t), &value); -} - -/** - * Return value of 8 bit integer attribute. - * @arg nla 8 bit integer attribute - * - * @return Payload as 8 bit integer. - */ -static inline uint8_t nla_get_u8(struct nlattr *nla) -{ - return *(uint8_t *) nla_data(nla); -} - -/** - * Add 16 bit integer attribute to netlink message. - * @arg msg Netlink message. - * @arg attrtype Attribute type. - * @arg value Numeric value to store as payload. - * - * @see nla_put - * @return 0 on success or a negative error code. - */ -static inline int nla_put_u16(struct nl_msg *msg, int attrtype, uint16_t value) -{ - return nla_put(msg, attrtype, sizeof(uint16_t), &value); -} - -/** - * Return payload of 16 bit integer attribute. - * @arg nla 16 bit integer attribute - * - * @return Payload as 16 bit integer. - */ -static inline uint16_t nla_get_u16(struct nlattr *nla) -{ - return *(uint16_t *) nla_data(nla); -} - -/** - * Add 32 bit integer attribute to netlink message. - * @arg msg Netlink message. - * @arg attrtype Attribute type. - * @arg value Numeric value to store as payload. - * - * @see nla_put - * @return 0 on success or a negative error code. - */ -static inline int nla_put_u32(struct nl_msg *msg, int attrtype, uint32_t value) -{ - return nla_put(msg, attrtype, sizeof(uint32_t), &value); -} - -/** - * Return payload of 32 bit integer attribute. - * @arg nla 32 bit integer attribute. - * - * @return Payload as 32 bit integer. - */ -static inline uint32_t nla_get_u32(struct nlattr *nla) -{ - return *(uint32_t *) nla_data(nla); -} - -/** - * Add 64 bit integer attribute to netlink message. - * @arg msg Netlink message. - * @arg attrtype Attribute type. - * @arg value Numeric value to store as payload. - * - * @see nla_put - * @return 0 on success or a negative error code. - */ -static inline int nla_put_u64(struct nl_msg *msg, int attrtype, uint64_t value) -{ - return nla_put(msg, attrtype, sizeof(uint64_t), &value); -} - -/** - * Return payload of u64 attribute - * @arg nla u64 netlink attribute - * - * @return Payload as 64 bit integer. - */ -static inline uint64_t nla_get_u64(struct nlattr *nla) -{ - uint64_t tmp; - - nla_memcpy(&tmp, nla, sizeof(tmp)); - - return tmp; -} - -/** - * Add string attribute to netlink message. - * @arg msg Netlink message. - * @arg attrtype Attribute type. - * @arg str NUL terminated string. - * - * @see nla_put - * @return 0 on success or a negative error code. - */ -static inline int nla_put_string(struct nl_msg *msg, int attrtype, const char *str) -{ - return nla_put(msg, attrtype, strlen(str) + 1, str); -} - -/** - * Return payload of string attribute. - * @arg nla String attribute. - * - * @return Pointer to attribute payload. - */ -static inline char *nla_get_string(struct nlattr *nla) -{ - return (char *) nla_data(nla); -} - -static inline char *nla_strdup(struct nlattr *nla) -{ - return strdup(nla_get_string(nla)); -} - -/** @} */ - -/** - * @name Flag Attribute - */ - -/** - * Add flag netlink attribute to netlink message. - * @arg msg Netlink message. - * @arg attrtype Attribute type. - * - * @see nla_put - * @return 0 on success or a negative error code. - */ -static inline int nla_put_flag(struct nl_msg *msg, int attrtype) -{ - return nla_put(msg, attrtype, 0, NULL); -} - -/** - * Return true if flag attribute is set. - * @arg nla Flag netlink attribute. - * - * @return True if flag is set, otherwise false. - */ -static inline int nla_get_flag(struct nlattr *nla) -{ - return !!nla; -} - -/** @} */ - -/** - * @name Microseconds Attribute - */ - -/** - * Add a msecs netlink attribute to a netlink message - * @arg n netlink message - * @arg attrtype attribute type - * @arg msecs number of msecs - */ -static inline int nla_put_msecs(struct nl_msg *n, int attrtype, unsigned long msecs) -{ - return nla_put_u64(n, attrtype, msecs); -} - -/** - * Return payload of msecs attribute - * @arg nla msecs netlink attribute - * - * @return the number of milliseconds. - */ -static inline unsigned long nla_get_msecs(struct nlattr *nla) -{ - return nla_get_u64(nla); -} - -/** - * Add nested attributes to netlink message. - * @arg msg Netlink message. - * @arg attrtype Attribute type. - * @arg nested Message containing attributes to be nested. - * - * Takes the attributes found in the \a nested message and appends them - * to the message \a msg nested in a container of the type \a attrtype. - * The \a nested message may not have a family specific header. - * - * @see nla_put - * @return 0 on success or a negative error code. - */ -static inline int nla_put_nested(struct nl_msg *msg, int attrtype, struct nl_msg *nested) -{ - return nla_put(msg, attrtype, nlmsg_len(nested->nm_nlh), - nlmsg_data(nested->nm_nlh)); -} - -/** - * Start a new level of nested attributes. - * @arg msg Netlink message. - * @arg attrtype Attribute type of container. - * - * @return Pointer to container attribute. - */ -static inline struct nlattr *nla_nest_start(struct nl_msg *msg, int attrtype) -{ - struct nlattr *start = (struct nlattr *) nlmsg_tail(msg->nm_nlh); - - if (nla_put(msg, attrtype, 0, NULL) < 0) - return NULL; - - return start; -} - -/** - * Finalize nesting of attributes. - * @arg msg Netlink message. - * @arg start Container attribute as returned from nla_nest_start(). - * - * Corrects the container attribute header to include the appeneded attributes. - * - * @return 0 - */ -static inline int nla_nest_end(struct nl_msg *msg, struct nlattr *start) -{ - start->nla_len = (unsigned char *) nlmsg_tail(msg->nm_nlh) - - (unsigned char *) start; - return 0; -} - -/** - * Create attribute index based on nested attribute - * @arg tb Index array to be filled (maxtype+1 elements). - * @arg maxtype Maximum attribute type expected and accepted. - * @arg nla Nested Attribute. - * @arg policy Attribute validation policy. - * - * Feeds the stream of attributes nested into the specified attribute - * to nla_parse(). - * - * @see nla_parse - * @return 0 on success or a negative error code. - */ -static inline int nla_parse_nested(struct nlattr *tb[], int maxtype, struct nlattr *nla, - struct nla_policy *policy) -{ - return nla_parse(tb, maxtype, (struct nlattr *)nla_data(nla), nla_len(nla), policy); -} - -/** - * Compare attribute payload with memory area. - * @arg nla Attribute. - * @arg data Memory area to compare to. - * @arg size Number of bytes to compare. - * - * @see memcmp(3) - * @return An integer less than, equal to, or greater than zero. - */ -static inline int nla_memcmp(const struct nlattr *nla, const void *data, size_t size) -{ - int d = nla_len(nla) - size; - - if (d == 0) - d = memcmp(nla_data(nla), data, size); - - return d; -} - -/** - * Compare string attribute payload with string - * @arg nla Attribute of type NLA_STRING. - * @arg str NUL terminated string. - * - * @see strcmp(3) - * @return An integer less than, equal to, or greater than zero. - */ -static inline int nla_strcmp(const struct nlattr *nla, const char *str) -{ - int len = strlen(str) + 1; - int d = nla_len(nla) - len; - - if (d == 0) - d = memcmp(nla_data(nla), str, len); - - return d; -} - -/** - * Copy string attribute payload to a buffer. - * @arg dst Pointer to destination buffer. - * @arg nla Attribute of type NLA_STRING. - * @arg dstsize Size of destination buffer in bytes. - * - * Copies at most dstsize - 1 bytes to the destination buffer. - * The result is always a valid NUL terminated string. Unlike - * strlcpy the destination buffer is always padded out. - * - * @return The length of string attribute without the terminating NUL. - */ -static inline size_t nla_strlcpy(char *dst, const struct nlattr *nla, size_t dstsize) -{ - size_t srclen = (size_t)nla_len(nla); - char *src = (char*)nla_data(nla); - - if (srclen > 0 && src[srclen - 1] == '\0') - srclen--; - - if (dstsize > 0) { - size_t len = (srclen >= dstsize) ? dstsize - 1 : srclen; - - memset(dst, 0, dstsize); - memcpy(dst, src, len); - } - - return srclen; -} - - -/** - * @name Attribute Construction (Exception Based) - * @{ - */ - -/** - * @ingroup attr - * Add unspecific attribute to netlink message. - * @arg msg Netlink message. - * @arg attrtype Attribute type. - * @arg attrlen Length of attribute payload. - * @arg data Head of attribute payload. - */ -#define NLA_PUT(msg, attrtype, attrlen, data) \ - do { \ - if (nla_put(msg, attrtype, attrlen, data) < 0) \ - goto nla_put_failure; \ - } while(0) - -/** - * @ingroup attr - * Add atomic type attribute to netlink message. - * @arg msg Netlink message. - * @arg type Atomic type. - * @arg attrtype Attribute type. - * @arg value Head of attribute payload. - */ -#define NLA_PUT_TYPE(msg, type, attrtype, value) \ - do { \ - type __tmp = value; \ - NLA_PUT(msg, attrtype, sizeof(type), &__tmp); \ - } while(0) - -/** - * Add 8 bit integer attribute to netlink message. - * @arg msg Netlink message. - * @arg attrtype Attribute type. - * @arg value Numeric value. - */ -#define NLA_PUT_U8(msg, attrtype, value) \ - NLA_PUT_TYPE(msg, uint8_t, attrtype, value) - -/** - * Add 16 bit integer attribute to netlink message. - * @arg msg Netlink message. - * @arg attrtype Attribute type. - * @arg value Numeric value. - */ -#define NLA_PUT_U16(msg, attrtype, value) \ - NLA_PUT_TYPE(msg, uint16_t, attrtype, value) - -/** - * Add 32 bit integer attribute to netlink message. - * @arg msg Netlink message. - * @arg attrtype Attribute type. - * @arg value Numeric value. - */ -#define NLA_PUT_U32(msg, attrtype, value) \ - NLA_PUT_TYPE(msg, uint32_t, attrtype, value) - -/** - * Add 64 bit integer attribute to netlink message. - * @arg msg Netlink message. - * @arg attrtype Attribute type. - * @arg value Numeric value. - */ -#define NLA_PUT_U64(msg, attrtype, value) \ - NLA_PUT_TYPE(msg, uint64_t, attrtype, value) - -/** - * Add string attribute to netlink message. - * @arg msg Netlink message. - * @arg attrtype Attribute type. - * @arg value NUL terminated character string. - */ -#define NLA_PUT_STRING(msg, attrtype, value) \ - NLA_PUT(msg, attrtype, strlen(value) + 1, value) - -/** - * Add flag attribute to netlink message. - * @arg msg Netlink message. - * @arg attrtype Attribute type. - */ -#define NLA_PUT_FLAG(msg, attrtype) \ - NLA_PUT(msg, attrtype, 0, NULL) - -/** - * Add msecs attribute to netlink message. - * @arg msg Netlink message. - * @arg attrtype Attribute type. - * @arg msecs Numeric value in micro seconds. - */ -#define NLA_PUT_MSECS(msg, attrtype, msecs) \ - NLA_PUT_U64(msg, attrtype, msecs) - -/** - * Add address attribute to netlink message. - * @arg msg Netlink message. - * @arg attrtype Attribute type. - * @arg addr Abstract address object. - */ -#define NLA_PUT_ADDR(msg, attrtype, addr) \ - NLA_PUT(msg, attrtype, nl_addr_get_len(addr), \ - nl_addr_get_binary_addr(addr)) - -/** @} */ - -/** - * @name Iterators - * @{ - */ - -/** - * @ingroup attr - * Iterate over a stream of attributes - * @arg pos loop counter, set to current attribute - * @arg head head of attribute stream - * @arg len length of attribute stream - * @arg rem initialized to len, holds bytes currently remaining in stream - */ -#define nla_for_each_attr(pos, head, len, rem) \ - for (pos = head, rem = len; \ - nla_ok(pos, rem); \ - pos = nla_next(pos, &(rem))) - -/** - * @ingroup attr - * Iterate over a stream of nested attributes - * @arg pos loop counter, set to current attribute - * @arg nla attribute containing the nested attributes - * @arg rem initialized to len, holds bytes currently remaining in stream - */ -#define nla_for_each_nested(pos, nla, rem) \ - for (pos = (struct nlattr *)nla_data(nla), rem = nla_len(nla); \ - nla_ok(pos, rem); \ - pos = nla_next(pos, &(rem))) - -/** @} */ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/package/libs/libnl-tiny/src/include/netlink/cache-api.h b/package/libs/libnl-tiny/src/include/netlink/cache-api.h deleted file mode 100644 index 22fc449d1b9..00000000000 --- a/package/libs/libnl-tiny/src/include/netlink/cache-api.h +++ /dev/null @@ -1,199 +0,0 @@ -/* - * netlink/cache-api.h Caching API - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation version 2.1 - * of the License. - * - * Copyright (c) 2003-2006 Thomas Graf - */ - -#ifndef NETLINK_CACHE_API_H_ -#define NETLINK_CACHE_API_H_ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * @ingroup cache - * @defgroup cache_api Cache Implementation - * @brief - * - * @par 1) Cache Definition - * @code - * struct nl_cache_ops my_cache_ops = { - * .co_name = "route/link", - * .co_protocol = NETLINK_ROUTE, - * .co_hdrsize = sizeof(struct ifinfomsg), - * .co_obj_ops = &my_obj_ops, - * }; - * @endcode - * - * @par 2) - * @code - * // The simplest way to fill a cache is by providing a request-update - * // function which must trigger a complete dump on the kernel-side of - * // whatever the cache covers. - * static int my_request_update(struct nl_cache *cache, - * struct nl_sock *socket) - * { - * // In this example, we request a full dump of the interface table - * return nl_rtgen_request(socket, RTM_GETLINK, AF_UNSPEC, NLM_F_DUMP); - * } - * - * // The resulting netlink messages sent back will be fed into a message - * // parser one at a time. The message parser has to extract all relevant - * // information from the message and create an object reflecting the - * // contents of the message and pass it on to the parser callback function - * // provide which will add the object to the cache. - * static int my_msg_parser(struct nl_cache_ops *ops, struct sockaddr_nl *who, - * struct nlmsghdr *nlh, struct nl_parser_param *pp) - * { - * struct my_obj *obj; - * - * obj = my_obj_alloc(); - * obj->ce_msgtype = nlh->nlmsg_type; - * - * // Parse the netlink message and continue creating the object. - * - * err = pp->pp_cb((struct nl_object *) obj, pp); - * if (err < 0) - * goto errout; - * } - * - * struct nl_cache_ops my_cache_ops = { - * ... - * .co_request_update = my_request_update, - * .co_msg_parser = my_msg_parser, - * }; - * @endcode - * - * @par 3) Notification based Updates - * @code - * // Caches can be kept up-to-date based on notifications if the kernel - * // sends out notifications whenever an object is added/removed/changed. - * // - * // It is trivial to support this, first a list of groups needs to be - * // defined which are required to join in order to receive all necessary - * // notifications. The groups are separated by address family to support - * // the common situation where a separate group is used for each address - * // family. If there is only one group, simply specify AF_UNSPEC. - * static struct nl_af_group addr_groups[] = { - * { AF_INET, RTNLGRP_IPV4_IFADDR }, - * { AF_INET6, RTNLGRP_IPV6_IFADDR }, - * { END_OF_GROUP_LIST }, - * }; - * - * // In order for the caching system to know the meaning of each message - * // type it requires a table which maps each supported message type to - * // a cache action, e.g. RTM_NEWADDR means address has been added or - * // updated, RTM_DELADDR means address has been removed. - * static struct nl_cache_ops rtnl_addr_ops = { - * ... - * .co_msgtypes = { - * { RTM_NEWADDR, NL_ACT_NEW, "new" }, - * { RTM_DELADDR, NL_ACT_DEL, "del" }, - * { RTM_GETADDR, NL_ACT_GET, "get" }, - * END_OF_MSGTYPES_LIST, - * }, - * .co_groups = addr_groups, - * }; - * - * // It is now possible to keep the cache up-to-date using the cache manager. - * @endcode - * @{ - */ - -enum { - NL_ACT_UNSPEC, - NL_ACT_NEW, - NL_ACT_DEL, - NL_ACT_GET, - NL_ACT_SET, - NL_ACT_CHANGE, - __NL_ACT_MAX, -}; - -#define NL_ACT_MAX (__NL_ACT_MAX - 1) - -#define END_OF_MSGTYPES_LIST { -1, -1, NULL } - -/** - * Message type to cache action association - */ -struct nl_msgtype -{ - /** Netlink message type */ - int mt_id; - - /** Cache action to take */ - int mt_act; - - /** Name of operation for human-readable printing */ - char * mt_name; -}; - -/** - * Address family to netlink group association - */ -struct nl_af_group -{ - /** Address family */ - int ag_family; - - /** Netlink group identifier */ - int ag_group; -}; - -#define END_OF_GROUP_LIST AF_UNSPEC, 0 - -struct nl_parser_param -{ - int (*pp_cb)(struct nl_object *, struct nl_parser_param *); - void * pp_arg; -}; - -/** - * Cache Operations - */ -struct nl_cache_ops -{ - char * co_name; - - int co_hdrsize; - int co_protocol; - struct nl_af_group * co_groups; - - /** - * Called whenever an update of the cache is required. Must send - * a request message to the kernel requesting a complete dump. - */ - int (*co_request_update)(struct nl_cache *, struct nl_sock *); - - /** - * Called whenever a message was received that needs to be parsed. - * Must parse the message and call the paser callback function - * (nl_parser_param) provided via the argument. - */ - int (*co_msg_parser)(struct nl_cache_ops *, struct sockaddr_nl *, - struct nlmsghdr *, struct nl_parser_param *); - - struct nl_object_ops * co_obj_ops; - - struct nl_cache_ops *co_next; - struct nl_cache *co_major_cache; - struct genl_ops * co_genl; - struct nl_msgtype co_msgtypes[]; -}; - -/** @} */ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/package/libs/libnl-tiny/src/include/netlink/cache.h b/package/libs/libnl-tiny/src/include/netlink/cache.h deleted file mode 100644 index 09719f3a740..00000000000 --- a/package/libs/libnl-tiny/src/include/netlink/cache.h +++ /dev/null @@ -1,128 +0,0 @@ -/* - * netlink/cache.h Caching Module - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation version 2.1 - * of the License. - * - * Copyright (c) 2003-2008 Thomas Graf - */ - -#ifndef NETLINK_CACHE_H_ -#define NETLINK_CACHE_H_ - -#include -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -struct nl_cache; - -typedef void (*change_func_t)(struct nl_cache *, struct nl_object *, int); - -/* Access Functions */ -extern int nl_cache_nitems(struct nl_cache *); -extern int nl_cache_nitems_filter(struct nl_cache *, - struct nl_object *); -extern struct nl_cache_ops * nl_cache_get_ops(struct nl_cache *); -extern struct nl_object * nl_cache_get_first(struct nl_cache *); -extern struct nl_object * nl_cache_get_last(struct nl_cache *); -extern struct nl_object * nl_cache_get_next(struct nl_object *); -extern struct nl_object * nl_cache_get_prev(struct nl_object *); - -extern struct nl_cache * nl_cache_alloc(struct nl_cache_ops *); -extern int nl_cache_alloc_and_fill(struct nl_cache_ops *, - struct nl_sock *, - struct nl_cache **); -extern int nl_cache_alloc_name(const char *, - struct nl_cache **); -extern struct nl_cache * nl_cache_subset(struct nl_cache *, - struct nl_object *); -extern void nl_cache_clear(struct nl_cache *); -extern void nl_cache_free(struct nl_cache *); - -/* Cache modification */ -extern int nl_cache_add(struct nl_cache *, - struct nl_object *); -extern int nl_cache_parse_and_add(struct nl_cache *, - struct nl_msg *); -extern void nl_cache_remove(struct nl_object *); -extern int nl_cache_refill(struct nl_sock *, - struct nl_cache *); -extern int nl_cache_pickup(struct nl_sock *, - struct nl_cache *); -extern int nl_cache_resync(struct nl_sock *, - struct nl_cache *, - change_func_t); -extern int nl_cache_include(struct nl_cache *, - struct nl_object *, - change_func_t); - -/* General */ -extern int nl_cache_is_empty(struct nl_cache *); -extern void nl_cache_mark_all(struct nl_cache *); - -/* Dumping */ -extern void nl_cache_dump(struct nl_cache *, - struct nl_dump_params *); -extern void nl_cache_dump_filter(struct nl_cache *, - struct nl_dump_params *, - struct nl_object *); - -/* Iterators */ -#ifdef disabled -extern void nl_cache_foreach(struct nl_cache *, - void (*cb)(struct nl_object *, - void *), - void *arg); -extern void nl_cache_foreach_filter(struct nl_cache *, - struct nl_object *, - void (*cb)(struct - nl_object *, - void *), - void *arg); -#endif - -/* --- cache management --- */ - -/* Cache type management */ -extern struct nl_cache_ops * nl_cache_ops_lookup(const char *); -extern struct nl_cache_ops * nl_cache_ops_associate(int, int); -extern struct nl_msgtype * nl_msgtype_lookup(struct nl_cache_ops *, int); -extern void nl_cache_ops_foreach(void (*cb)(struct nl_cache_ops *, void *), void *); -extern int nl_cache_mngt_register(struct nl_cache_ops *); -extern int nl_cache_mngt_unregister(struct nl_cache_ops *); - -/* Global cache provisioning/requiring */ -extern void nl_cache_mngt_provide(struct nl_cache *); -extern void nl_cache_mngt_unprovide(struct nl_cache *); -extern struct nl_cache * nl_cache_mngt_require(const char *); - -struct nl_cache_mngr; - -#define NL_AUTO_PROVIDE 1 - -extern int nl_cache_mngr_alloc(struct nl_sock *, - int, int, - struct nl_cache_mngr **); -extern int nl_cache_mngr_add(struct nl_cache_mngr *, - const char *, - change_func_t, - struct nl_cache **); -extern int nl_cache_mngr_get_fd(struct nl_cache_mngr *); -extern int nl_cache_mngr_poll(struct nl_cache_mngr *, - int); -extern int nl_cache_mngr_data_ready(struct nl_cache_mngr *); -extern void nl_cache_mngr_free(struct nl_cache_mngr *); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/package/libs/libnl-tiny/src/include/netlink/data.h b/package/libs/libnl-tiny/src/include/netlink/data.h deleted file mode 100644 index 071159ee5b3..00000000000 --- a/package/libs/libnl-tiny/src/include/netlink/data.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * netlink/data.h Abstract Data - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation version 2.1 - * of the License. - * - * Copyright (c) 2003-2008 Thomas Graf - */ - -#ifndef NETLINK_DATA_H_ -#define NETLINK_DATA_H_ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -struct nl_data; - -/* General */ -extern struct nl_data * nl_data_alloc(void *, size_t); -extern struct nl_data * nl_data_alloc_attr(struct nlattr *); -extern struct nl_data * nl_data_clone(struct nl_data *); -extern int nl_data_append(struct nl_data *, void *, size_t); -extern void nl_data_free(struct nl_data *); - -/* Access Functions */ -extern void * nl_data_get(struct nl_data *); -extern size_t nl_data_get_size(struct nl_data *); - -/* Misc */ -extern int nl_data_cmp(struct nl_data *, struct nl_data *); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/package/libs/libnl-tiny/src/include/netlink/errno.h b/package/libs/libnl-tiny/src/include/netlink/errno.h deleted file mode 100644 index f8b5130c22e..00000000000 --- a/package/libs/libnl-tiny/src/include/netlink/errno.h +++ /dev/null @@ -1,64 +0,0 @@ -/* - * netlink/errno.h Error Numbers - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation version 2.1 - * of the License. - * - * Copyright (c) 2008 Thomas Graf - */ - -#ifndef NETLINK_ERRNO_H_ -#define NETLINK_ERRNO_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#define NLE_SUCCESS 0 -#define NLE_FAILURE 1 -#define NLE_INTR 2 -#define NLE_BAD_SOCK 3 -#define NLE_AGAIN 4 -#define NLE_NOMEM 5 -#define NLE_EXIST 6 -#define NLE_INVAL 7 -#define NLE_RANGE 8 -#define NLE_MSGSIZE 9 -#define NLE_OPNOTSUPP 10 -#define NLE_AF_NOSUPPORT 11 -#define NLE_OBJ_NOTFOUND 12 -#define NLE_NOATTR 13 -#define NLE_MISSING_ATTR 14 -#define NLE_AF_MISMATCH 15 -#define NLE_SEQ_MISMATCH 16 -#define NLE_MSG_OVERFLOW 17 -#define NLE_MSG_TRUNC 18 -#define NLE_NOADDR 19 -#define NLE_SRCRT_NOSUPPORT 20 -#define NLE_MSG_TOOSHORT 21 -#define NLE_MSGTYPE_NOSUPPORT 22 -#define NLE_OBJ_MISMATCH 23 -#define NLE_NOCACHE 24 -#define NLE_BUSY 25 -#define NLE_PROTO_MISMATCH 26 -#define NLE_NOACCESS 27 -#define NLE_PERM 28 -#define NLE_PKTLOC_FILE 29 -#define NLE_PARSE_ERR 30 -#define NLE_NODEV 31 -#define NLE_IMMUTABLE 32 -#define NLE_DUMP_INTR 33 - -#define NLE_MAX NLE_DUMP_INTR - -extern const char * nl_geterror(int); -extern void nl_perror(int, const char *); -extern int nl_syserr2nlerr(int); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/package/libs/libnl-tiny/src/include/netlink/genl/ctrl.h b/package/libs/libnl-tiny/src/include/netlink/genl/ctrl.h deleted file mode 100644 index 26a0a9967b4..00000000000 --- a/package/libs/libnl-tiny/src/include/netlink/genl/ctrl.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * netlink/genl/ctrl.h Generic Netlink Controller - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation version 2.1 - * of the License. - * - * Copyright (c) 2003-2008 Thomas Graf - */ - -#ifndef NETLINK_GENL_CTRL_H_ -#define NETLINK_GENL_CTRL_H_ - -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -struct genl_family; - -extern int genl_ctrl_alloc_cache(struct nl_sock *, - struct nl_cache **); -extern struct genl_family * genl_ctrl_search(struct nl_cache *, int); -extern struct genl_family * genl_ctrl_search_by_name(struct nl_cache *, - const char *); -extern int genl_ctrl_resolve(struct nl_sock *, - const char *); -extern int genl_ctrl_resolve_grp(struct nl_sock *sk, - const char *family, - const char *grp); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/package/libs/libnl-tiny/src/include/netlink/genl/family.h b/package/libs/libnl-tiny/src/include/netlink/genl/family.h deleted file mode 100644 index 8a1a38ba25d..00000000000 --- a/package/libs/libnl-tiny/src/include/netlink/genl/family.h +++ /dev/null @@ -1,134 +0,0 @@ -/* - * netlink/genl/family.h Generic Netlink Family - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation version 2.1 - * of the License. - * - * Copyright (c) 2003-2006 Thomas Graf - */ - -#ifndef NETLINK_GENL_FAMILY_H_ -#define NETLINK_GENL_FAMILY_H_ - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** @cond SKIP */ -#define FAMILY_ATTR_ID 0x01 -#define FAMILY_ATTR_NAME 0x02 -#define FAMILY_ATTR_VERSION 0x04 -#define FAMILY_ATTR_HDRSIZE 0x08 -#define FAMILY_ATTR_MAXATTR 0x10 -#define FAMILY_ATTR_OPS 0x20 - - -struct genl_family -{ - NLHDR_COMMON - - uint16_t gf_id; - char gf_name[GENL_NAMSIZ]; - uint32_t gf_version; - uint32_t gf_hdrsize; - uint32_t gf_maxattr; - - struct nl_list_head gf_ops; - struct nl_list_head gf_mc_grps; -}; - - -extern struct genl_family * genl_family_alloc(void); -extern void genl_family_put(struct genl_family *); - -extern int genl_family_add_op(struct genl_family *, - int, int); -extern int genl_family_add_grp(struct genl_family *, - uint32_t , const char *); - - -/** - * @name Attributes - * @{ - */ - -static inline unsigned int genl_family_get_id(struct genl_family *family) -{ - if (family->ce_mask & FAMILY_ATTR_ID) - return family->gf_id; - else - return 0; -} - -static inline void genl_family_set_id(struct genl_family *family, unsigned int id) -{ - family->gf_id = id; - family->ce_mask |= FAMILY_ATTR_ID; -} - -static inline char *genl_family_get_name(struct genl_family *family) -{ - if (family->ce_mask & FAMILY_ATTR_NAME) - return family->gf_name; - else - return NULL; -} - -static inline void genl_family_set_name(struct genl_family *family, const char *name) -{ - strncpy(family->gf_name, name, GENL_NAMSIZ-1); - family->ce_mask |= FAMILY_ATTR_NAME; -} - -static inline uint8_t genl_family_get_version(struct genl_family *family) -{ - if (family->ce_mask & FAMILY_ATTR_VERSION) - return family->gf_version; - else - return 0; -} - -static inline void genl_family_set_version(struct genl_family *family, uint8_t version) -{ - family->gf_version = version; - family->ce_mask |= FAMILY_ATTR_VERSION; -} - -static inline uint32_t genl_family_get_hdrsize(struct genl_family *family) -{ - if (family->ce_mask & FAMILY_ATTR_HDRSIZE) - return family->gf_hdrsize; - else - return 0; -} - -static inline void genl_family_set_hdrsize(struct genl_family *family, uint32_t hdrsize) -{ - family->gf_hdrsize = hdrsize; - family->ce_mask |= FAMILY_ATTR_HDRSIZE; -} - -static inline uint32_t genl_family_get_maxattr(struct genl_family *family) -{ - if (family->ce_mask & FAMILY_ATTR_MAXATTR) - return family->gf_maxattr; - else - return family->gf_maxattr; -} - -static inline void genl_family_set_maxattr(struct genl_family *family, uint32_t maxattr) -{ - family->gf_maxattr = maxattr; - family->ce_mask |= FAMILY_ATTR_MAXATTR; -} - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/package/libs/libnl-tiny/src/include/netlink/genl/genl.h b/package/libs/libnl-tiny/src/include/netlink/genl/genl.h deleted file mode 100644 index 3f3340cfdc7..00000000000 --- a/package/libs/libnl-tiny/src/include/netlink/genl/genl.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * netlink/genl/genl.h Generic Netlink - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation version 2.1 - * of the License. - * - * Copyright (c) 2003-2008 Thomas Graf - */ - -#ifndef NETLINK_GENL_H_ -#define NETLINK_GENL_H_ - -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -extern int genl_connect(struct nl_sock *); - -extern int genl_send_simple(struct nl_sock *, int, int, - int, int); - -extern void * genlmsg_put(struct nl_msg *, uint32_t, uint32_t, - int, int, int, uint8_t, uint8_t); - -extern int genlmsg_valid_hdr(struct nlmsghdr *, int); -extern int genlmsg_validate(struct nlmsghdr *, int, int, - struct nla_policy *); -extern int genlmsg_parse(struct nlmsghdr *, int, struct nlattr **, - int, struct nla_policy *); -extern void * genlmsg_data(const struct genlmsghdr *); -extern int genlmsg_len(const struct genlmsghdr *); -extern struct nlattr * genlmsg_attrdata(const struct genlmsghdr *, int); -extern int genlmsg_attrlen(const struct genlmsghdr *, int); - -extern char * genl_op2name(int, int, char *, size_t); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/package/libs/libnl-tiny/src/include/netlink/genl/mngt.h b/package/libs/libnl-tiny/src/include/netlink/genl/mngt.h deleted file mode 100644 index 8b0244f2cca..00000000000 --- a/package/libs/libnl-tiny/src/include/netlink/genl/mngt.h +++ /dev/null @@ -1,87 +0,0 @@ -/* - * netlink/genl/mngt.h Generic Netlink Management - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation version 2.1 - * of the License. - * - * Copyright (c) 2003-2006 Thomas Graf - */ - -#ifndef NETLINK_GENL_MNGT_H_ -#define NETLINK_GENL_MNGT_H_ - -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -struct nl_cache_ops; - -struct genl_info -{ - struct sockaddr_nl * who; - struct nlmsghdr * nlh; - struct genlmsghdr * genlhdr; - void * userhdr; - struct nlattr ** attrs; -}; - -/** - * @ingroup genl_mngt - * Generic Netlink Command - */ -struct genl_cmd -{ - /** Unique command identifier */ - int c_id; - - /** Name/description of command */ - char * c_name; - - /** - * Maximum attribute identifier, must be provided if - * a message parser is available. - */ - int c_maxattr; - - int (*c_msg_parser)(struct nl_cache_ops *, - struct genl_cmd *, - struct genl_info *, void *); - - /** - * Attribute validation policy (optional) - */ - struct nla_policy * c_attr_policy; -}; - -/** - * @ingroup genl_mngt - * Generic Netlink Operations - */ -struct genl_ops -{ - int o_family; - int o_id; - char * o_name; - struct nl_cache_ops * o_cache_ops; - struct genl_cmd * o_cmds; - int o_ncmds; - - /* linked list of all genl cache operations */ - struct nl_list_head o_list; -}; - - -extern int genl_register(struct nl_cache_ops *); -extern void genl_unregister(struct nl_cache_ops *); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/package/libs/libnl-tiny/src/include/netlink/handlers.h b/package/libs/libnl-tiny/src/include/netlink/handlers.h deleted file mode 100644 index f5c933d0d71..00000000000 --- a/package/libs/libnl-tiny/src/include/netlink/handlers.h +++ /dev/null @@ -1,231 +0,0 @@ -/* - * netlink/handlers.c default netlink message handlers - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation version 2.1 - * of the License. - * - * Copyright (c) 2003-2006 Thomas Graf - */ - -#ifndef NETLINK_HANDLERS_H_ -#define NETLINK_HANDLERS_H_ - -#include -#include -#include -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -struct nl_sock; -struct nl_msg; -struct nl_cb; -/** - * @name Callback Typedefs - * @{ - */ - -/** - * nl_recvmsgs() callback for message processing customization - * @ingroup cb - * @arg msg netlink message being processed - * @arg arg argument passwd on through caller - */ -typedef int (*nl_recvmsg_msg_cb_t)(struct nl_msg *msg, void *arg); - -/** - * nl_recvmsgs() callback for error message processing customization - * @ingroup cb - * @arg nla netlink address of the peer - * @arg nlerr netlink error message being processed - * @arg arg argument passed on through caller - */ -typedef int (*nl_recvmsg_err_cb_t)(struct sockaddr_nl *nla, - struct nlmsgerr *nlerr, void *arg); - -/** @} */ - -/** - * Callback actions - * @ingroup cb - */ -enum nl_cb_action { - /** Proceed with wathever would come next */ - NL_OK, - /** Skip this message */ - NL_SKIP, - /** Stop parsing altogether and discard remaining messages */ - NL_STOP, -}; - -/** - * Callback kinds - * @ingroup cb - */ -enum nl_cb_kind { - /** Default handlers (quiet) */ - NL_CB_DEFAULT, - /** Verbose default handlers (error messages printed) */ - NL_CB_VERBOSE, - /** Debug handlers for debugging */ - NL_CB_DEBUG, - /** Customized handler specified by the user */ - NL_CB_CUSTOM, - __NL_CB_KIND_MAX, -}; - -#define NL_CB_KIND_MAX (__NL_CB_KIND_MAX - 1) - -/** - * Callback types - * @ingroup cb - */ -enum nl_cb_type { - /** Message is valid */ - NL_CB_VALID, - /** Last message in a series of multi part messages received */ - NL_CB_FINISH, - /** Report received that data was lost */ - NL_CB_OVERRUN, - /** Message wants to be skipped */ - NL_CB_SKIPPED, - /** Message is an acknowledge */ - NL_CB_ACK, - /** Called for every message received */ - NL_CB_MSG_IN, - /** Called for every message sent out except for nl_sendto() */ - NL_CB_MSG_OUT, - /** Message is malformed and invalid */ - NL_CB_INVALID, - /** Called instead of internal sequence number checking */ - NL_CB_SEQ_CHECK, - /** Sending of an acknowledge message has been requested */ - NL_CB_SEND_ACK, - __NL_CB_TYPE_MAX, -}; - -#define NL_CB_TYPE_MAX (__NL_CB_TYPE_MAX - 1) - -struct nl_cb -{ - nl_recvmsg_msg_cb_t cb_set[NL_CB_TYPE_MAX+1]; - void * cb_args[NL_CB_TYPE_MAX+1]; - - nl_recvmsg_err_cb_t cb_err; - void * cb_err_arg; - - /** May be used to replace nl_recvmsgs with your own implementation - * in all internal calls to nl_recvmsgs. */ - int (*cb_recvmsgs_ow)(struct nl_sock *, - struct nl_cb *); - - /** Overwrite internal calls to nl_recv, must return the number of - * octets read and allocate a buffer for the received data. */ - int (*cb_recv_ow)(struct nl_sock *, - struct sockaddr_nl *, - unsigned char **, - struct ucred **); - - /** Overwrites internal calls to nl_send, must send the netlink - * message. */ - int (*cb_send_ow)(struct nl_sock *, - struct nl_msg *); - - int cb_refcnt; -}; - - -extern struct nl_cb * nl_cb_alloc(enum nl_cb_kind); -extern struct nl_cb * nl_cb_clone(struct nl_cb *); -extern void nl_cb_put(struct nl_cb *); - -extern int nl_cb_set(struct nl_cb *, enum nl_cb_type, enum nl_cb_kind, - nl_recvmsg_msg_cb_t, void *); -extern int nl_cb_err(struct nl_cb *, enum nl_cb_kind, nl_recvmsg_err_cb_t, - void *); - -static inline struct nl_cb *nl_cb_get(struct nl_cb *cb) -{ - cb->cb_refcnt++; - - return cb; -} - -/** - * Set up a all callbacks - * @arg cb callback set - * @arg kind kind of callback - * @arg func callback function - * @arg arg argument to be passwd to callback function - * - * @return 0 on success or a negative error code - */ -static inline int nl_cb_set_all(struct nl_cb *cb, enum nl_cb_kind kind, - nl_recvmsg_msg_cb_t func, void *arg) -{ - int i, err; - - for (i = 0; i <= NL_CB_TYPE_MAX; i++) { - err = nl_cb_set(cb,(enum nl_cb_type)i, kind, func, arg); - if (err < 0) - return err; - } - - return 0; -} - - -/** - * @name Overwriting - * @{ - */ - -/** - * Overwrite internal calls to nl_recvmsgs() - * @arg cb callback set - * @arg func replacement callback for nl_recvmsgs() - */ -static inline void nl_cb_overwrite_recvmsgs(struct nl_cb *cb, - int (*func)(struct nl_sock *, struct nl_cb *)) -{ - cb->cb_recvmsgs_ow = func; -} - -/** - * Overwrite internal calls to nl_recv() - * @arg cb callback set - * @arg func replacement callback for nl_recv() - */ -static inline void nl_cb_overwrite_recv(struct nl_cb *cb, - int (*func)(struct nl_sock *, struct sockaddr_nl *, - unsigned char **, struct ucred **)) -{ - cb->cb_recv_ow = func; -} - -/** - * Overwrite internal calls to nl_send() - * @arg cb callback set - * @arg func replacement callback for nl_send() - */ -static inline void nl_cb_overwrite_send(struct nl_cb *cb, - int (*func)(struct nl_sock *, struct nl_msg *)) -{ - cb->cb_send_ow = func; -} - -/** @} */ - - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/package/libs/libnl-tiny/src/include/netlink/list.h b/package/libs/libnl-tiny/src/include/netlink/list.h deleted file mode 100644 index c6876a77f76..00000000000 --- a/package/libs/libnl-tiny/src/include/netlink/list.h +++ /dev/null @@ -1,88 +0,0 @@ -/* - * netlink/list.h Netlink List Utilities - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation version 2.1 - * of the License. - * - * Copyright (c) 2003-2006 Thomas Graf - */ - -#ifndef NETLINK_LIST_H_ -#define NETLINK_LIST_H_ - -struct nl_list_head -{ - struct nl_list_head * next; - struct nl_list_head * prev; -}; - - -static inline void __nl_list_add(struct nl_list_head *obj, - struct nl_list_head *prev, - struct nl_list_head *next) -{ - prev->next = obj; - obj->prev = prev; - next->prev = obj; - obj->next = next; -} - -static inline void nl_list_add_tail(struct nl_list_head *obj, - struct nl_list_head *head) -{ - __nl_list_add(obj, head->prev, head); -} - -static inline void nl_list_add_head(struct nl_list_head *obj, - struct nl_list_head *head) -{ - __nl_list_add(obj, head, head->next); -} - -static inline void nl_list_del(struct nl_list_head *obj) -{ - obj->next->prev = obj->prev; - obj->prev->next = obj->next; -} - -static inline int nl_list_empty(struct nl_list_head *head) -{ - return head->next == head; -} - -#define nl_container_of(ptr, type, member) ({ \ - const typeof( ((type *)0)->member ) *__mptr = (ptr); \ - (type *)( (char *)__mptr - ((size_t) &((type *)0)->member));}) - -#define nl_list_entry(ptr, type, member) \ - nl_container_of(ptr, type, member) - -#define nl_list_at_tail(pos, head, member) \ - ((pos)->member.next == (head)) - -#define nl_list_at_head(pos, head, member) \ - ((pos)->member.prev == (head)) - -#define NL_LIST_HEAD(name) \ - struct nl_list_head name = { &(name), &(name) } - -#define nl_list_first_entry(head, type, member) \ - nl_list_entry((head)->next, type, member) - -#define nl_list_for_each_entry(pos, head, member) \ - for (pos = nl_list_entry((head)->next, typeof(*pos), member); \ - &(pos)->member != (head); \ - (pos) = nl_list_entry((pos)->member.next, typeof(*(pos)), member)) - -#define nl_list_for_each_entry_safe(pos, n, head, member) \ - for (pos = nl_list_entry((head)->next, typeof(*pos), member), \ - n = nl_list_entry(pos->member.next, typeof(*pos), member); \ - &(pos)->member != (head); \ - pos = n, n = nl_list_entry(n->member.next, typeof(*n), member)) - -#define nl_init_list_head(head) \ - do { (head)->next = (head); (head)->prev = (head); } while (0) - -#endif diff --git a/package/libs/libnl-tiny/src/include/netlink/msg.h b/package/libs/libnl-tiny/src/include/netlink/msg.h deleted file mode 100644 index b3e2b0b2b99..00000000000 --- a/package/libs/libnl-tiny/src/include/netlink/msg.h +++ /dev/null @@ -1,308 +0,0 @@ -/* - * netlink/msg.c Netlink Messages Interface - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation version 2.1 - * of the License. - * - * Copyright (c) 2003-2006 Thomas Graf - */ - -#ifndef NETLINK_MSG_H_ -#define NETLINK_MSG_H_ - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -struct nla_policy; - -#define NL_DONTPAD 0 - -/** - * @ingroup msg - * @brief - * Will cause the netlink pid to be set to the pid assigned to - * the netlink handle (socket) just before sending the message off. - * @note Requires the use of nl_send_auto_complete()! - */ -#define NL_AUTO_PID 0 - -/** - * @ingroup msg - * @brief - * May be used to refer to a sequence number which should be - * automatically set just before sending the message off. - * @note Requires the use of nl_send_auto_complete()! - */ -#define NL_AUTO_SEQ 0 - -#define NL_MSG_CRED_PRESENT 1 - -struct nl_msg -{ - int nm_protocol; - int nm_flags; - struct sockaddr_nl nm_src; - struct sockaddr_nl nm_dst; - struct ucred nm_creds; - struct nlmsghdr * nm_nlh; - size_t nm_size; - int nm_refcnt; -}; - - -struct nl_msg; -struct nl_tree; -struct ucred; - -/* message parsing */ -extern int nlmsg_ok(const struct nlmsghdr *, int); -extern struct nlmsghdr * nlmsg_next(struct nlmsghdr *, int *); -extern int nlmsg_parse(struct nlmsghdr *, int, struct nlattr **, - int, struct nla_policy *); -extern int nlmsg_validate(struct nlmsghdr *, int, int, - struct nla_policy *); - -extern struct nl_msg * nlmsg_alloc(void); -extern struct nl_msg * nlmsg_alloc_size(size_t); -extern struct nl_msg * nlmsg_alloc_simple(int, int); -extern void nlmsg_set_default_size(size_t); -extern struct nl_msg * nlmsg_inherit(struct nlmsghdr *); -extern struct nl_msg * nlmsg_convert(struct nlmsghdr *); -extern void * nlmsg_reserve(struct nl_msg *, size_t, int); -extern int nlmsg_append(struct nl_msg *, void *, size_t, int); - -extern struct nlmsghdr * nlmsg_put(struct nl_msg *, uint32_t, uint32_t, - int, int, int); -extern void nlmsg_free(struct nl_msg *); - -extern int nl_msg_parse(struct nl_msg *, - void (*cb)(struct nl_object *, void *), - void *); - -extern void nl_msg_dump(struct nl_msg *, FILE *); - -/** - * length of netlink message not including padding - * @arg payload length of message payload - */ -static inline int nlmsg_msg_size(int payload) -{ - return NLMSG_HDRLEN + payload; -} - -/** - * length of netlink message including padding - * @arg payload length of message payload - */ -static inline int nlmsg_total_size(int payload) -{ - return NLMSG_ALIGN(nlmsg_msg_size(payload)); -} - -/** - * length of padding at the message's tail - * @arg payload length of message payload - */ -static inline int nlmsg_padlen(int payload) -{ - return nlmsg_total_size(payload) - nlmsg_msg_size(payload); -} - -/** - * head of message payload - * @arg nlh netlink messsage header - */ -static inline void *nlmsg_data(const struct nlmsghdr *nlh) -{ - return (unsigned char *) nlh + NLMSG_HDRLEN; -} - -static inline void *nlmsg_tail(const struct nlmsghdr *nlh) -{ - return (unsigned char *) nlh + NLMSG_ALIGN(nlh->nlmsg_len); -} - -/** - * length of message payload - * @arg nlh netlink message header - */ -static inline int nlmsg_len(const struct nlmsghdr *nlh) -{ - return nlh->nlmsg_len - NLMSG_HDRLEN; -} - -/** - * head of attributes data - * @arg nlh netlink message header - * @arg hdrlen length of family specific header - */ -static inline struct nlattr *nlmsg_attrdata(const struct nlmsghdr *nlh, int hdrlen) -{ - unsigned char *data = (unsigned char*)nlmsg_data(nlh); - return (struct nlattr *) (data + NLMSG_ALIGN(hdrlen)); -} - -/** - * length of attributes data - * @arg nlh netlink message header - * @arg hdrlen length of family specific header - */ -static inline int nlmsg_attrlen(const struct nlmsghdr *nlh, int hdrlen) -{ - return nlmsg_len(nlh) - NLMSG_ALIGN(hdrlen); -} - -static inline int nlmsg_valid_hdr(const struct nlmsghdr *nlh, int hdrlen) -{ - if (nlh->nlmsg_len < (uint)nlmsg_msg_size(hdrlen)) - return 0; - - return 1; -} - - -static inline void nlmsg_set_proto(struct nl_msg *msg, int protocol) -{ - msg->nm_protocol = protocol; -} - -static inline int nlmsg_get_proto(struct nl_msg *msg) -{ - return msg->nm_protocol; -} - -static inline size_t nlmsg_get_max_size(struct nl_msg *msg) -{ - return msg->nm_size; -} - -static inline void nlmsg_set_src(struct nl_msg *msg, struct sockaddr_nl *addr) -{ - memcpy(&msg->nm_src, addr, sizeof(*addr)); -} - -static inline struct sockaddr_nl *nlmsg_get_src(struct nl_msg *msg) -{ - return &msg->nm_src; -} - -static inline void nlmsg_set_dst(struct nl_msg *msg, struct sockaddr_nl *addr) -{ - memcpy(&msg->nm_dst, addr, sizeof(*addr)); -} - -static inline struct sockaddr_nl *nlmsg_get_dst(struct nl_msg *msg) -{ - return &msg->nm_dst; -} - -static inline void nlmsg_set_creds(struct nl_msg *msg, struct ucred *creds) -{ - memcpy(&msg->nm_creds, creds, sizeof(*creds)); - msg->nm_flags |= NL_MSG_CRED_PRESENT; -} - -static inline struct ucred *nlmsg_get_creds(struct nl_msg *msg) -{ - if (msg->nm_flags & NL_MSG_CRED_PRESENT) - return &msg->nm_creds; - return NULL; -} - -/** - * Return actual netlink message - * @arg n netlink message - * - * Returns the actual netlink message casted to the type of the netlink - * message header. - * - * @return A pointer to the netlink message. - */ -static inline struct nlmsghdr *nlmsg_hdr(struct nl_msg *n) -{ - return n->nm_nlh; -} - -/** - * Acquire a reference on a netlink message - * @arg msg message to acquire reference from - */ -static inline void nlmsg_get(struct nl_msg *msg) -{ - msg->nm_refcnt++; -} - -/** - * Expand maximum payload size of a netlink message - * @arg n Netlink message. - * @arg newlen New maximum payload size. - * - * Reallocates the payload section of a netlink message and increases - * the maximum payload size of the message. - * - * @note Any pointers pointing to old payload block will be stale and - * need to be refetched. Therfore, do not expand while constructing - * nested attributes or while reserved data blocks are held. - * - * @return 0 on success or a negative error code. - */ -static inline int nlmsg_expand(struct nl_msg *n, size_t newlen) -{ - void *tmp; - - if (newlen <= n->nm_size) - return -NLE_INVAL; - - tmp = realloc(n->nm_nlh, newlen); - if (tmp == NULL) - return -NLE_NOMEM; - - n->nm_nlh = (struct nlmsghdr*)tmp; - n->nm_size = newlen; - - return 0; -} - - -/** - * @name Iterators - * @{ - */ - -/** - * @ingroup msg - * Iterate over a stream of attributes in a message - * @arg pos loop counter, set to current attribute - * @arg nlh netlink message header - * @arg hdrlen length of family header - * @arg rem initialized to len, holds bytes currently remaining in stream - */ -#define nlmsg_for_each_attr(pos, nlh, hdrlen, rem) \ - nla_for_each_attr(pos, nlmsg_attrdata(nlh, hdrlen), \ - nlmsg_attrlen(nlh, hdrlen), rem) - -/** - * Iterate over a stream of messages - * @arg pos loop counter, set to current message - * @arg head head of message stream - * @arg len length of message stream - * @arg rem initialized to len, holds bytes currently remaining in stream - */ -#define nlmsg_for_each_msg(pos, head, len, rem) \ - for (pos = head, rem = len; \ - nlmsg_ok(pos, rem); \ - pos = nlmsg_next(pos, &(rem))) - -/** @} */ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/package/libs/libnl-tiny/src/include/netlink/netlink-compat.h b/package/libs/libnl-tiny/src/include/netlink/netlink-compat.h deleted file mode 100644 index 17ec9fc8d1d..00000000000 --- a/package/libs/libnl-tiny/src/include/netlink/netlink-compat.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * netlink/netlink-compat.h Netlink Compatability - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation version 2.1 - * of the License. - * - * Copyright (c) 2003-2006 Thomas Graf - */ - -#ifndef NETLINK_COMPAT_H_ -#define NETLINK_COMPAT_H_ - -#if !defined _LINUX_SOCKET_H && !defined _BITS_SOCKADDR_H -typedef unsigned short sa_family_t; -#endif - -#ifndef IFNAMSIZ -/** Maximum length of a interface name */ -#define IFNAMSIZ 16 -#endif - -/* patch 2.4.x if_arp */ -#ifndef ARPHRD_INFINIBAND -#define ARPHRD_INFINIBAND 32 -#endif - -/* patch 2.4.x eth header file */ -#ifndef ETH_P_MPLS_UC -#define ETH_P_MPLS_UC 0x8847 -#endif - -#ifndef ETH_P_MPLS_MC -#define ETH_P_MPLS_MC 0x8848 -#endif - -#ifndef ETH_P_EDP2 -#define ETH_P_EDP2 0x88A2 -#endif - -#ifndef ETH_P_HDLC -#define ETH_P_HDLC 0x0019 -#endif - -#ifndef AF_LLC -#define AF_LLC 26 -#endif - -#endif diff --git a/package/libs/libnl-tiny/src/include/netlink/netlink-kernel.h b/package/libs/libnl-tiny/src/include/netlink/netlink-kernel.h deleted file mode 100644 index a0f5535664f..00000000000 --- a/package/libs/libnl-tiny/src/include/netlink/netlink-kernel.h +++ /dev/null @@ -1,196 +0,0 @@ -#ifndef __LINUX_NETLINK_H -#define __LINUX_NETLINK_H - -/** - * Netlink socket address - * @ingroup nl - */ -struct sockaddr_nl -{ - /** socket family (AF_NETLINK) */ - sa_family_t nl_family; - - /** Padding (unused) */ - unsigned short nl_pad; - - /** Unique process ID */ - uint32_t nl_pid; - - /** Multicast group subscriptions */ - uint32_t nl_groups; -}; - -/** - * Netlink message header - * @ingroup msg - */ -struct nlmsghdr -{ - /** - * Length of message including header. - */ - uint32_t nlmsg_len; - - /** - * Message type (content type) - */ - uint16_t nlmsg_type; - - /** - * Message flags - */ - uint16_t nlmsg_flags; - - /** - * Sequence number - */ - uint32_t nlmsg_seq; - - /** - * Netlink PID of the proccess sending the message. - */ - uint32_t nlmsg_pid; -}; - -/** - * @name Standard message flags - * @{ - */ - -/** - * Must be set on all request messages (typically from user space to - * kernel space). - * @ingroup msg - */ -#define NLM_F_REQUEST 1 - -/** - * Indicates the message is part of a multipart message terminated - * by NLMSG_DONE. - */ -#define NLM_F_MULTI 2 - -/** - * Request for an acknowledgment on success. - */ -#define NLM_F_ACK 4 - -/** - * Echo this request - */ -#define NLM_F_ECHO 8 - -/** @} */ - -/** - * @name Additional message flags for GET requests - * @{ - */ - -/** - * Return the complete table instead of a single entry. - * @ingroup msg - */ -#define NLM_F_ROOT 0x100 - -/** - * Return all entries matching criteria passed in message content. - */ -#define NLM_F_MATCH 0x200 - -/** - * Return an atomic snapshot of the table being referenced. This - * may require special privileges because it has the potential to - * interrupt service in the FE for a longer time. - */ -#define NLM_F_ATOMIC 0x400 - -/** - * Dump all entries - */ -#define NLM_F_DUMP (NLM_F_ROOT|NLM_F_MATCH) - -/** @} */ - -/** - * @name Additional messsage flags for NEW requests - * @{ - */ - -/** - * Replace existing matching config object with this request. - * @ingroup msg - */ -#define NLM_F_REPLACE 0x100 - -/** - * Don't replace the config object if it already exists. - */ -#define NLM_F_EXCL 0x200 - -/** - * Create config object if it doesn't already exist. - */ -#define NLM_F_CREATE 0x400 - -/** - * Add to the end of the object list. - */ -#define NLM_F_APPEND 0x800 - -/** @} */ - -/** - * @name Standard Message types - * @{ - */ - -/** - * No operation, message must be ignored - * @ingroup msg - */ -#define NLMSG_NOOP 0x1 - -/** - * The message signals an error and the payload contains a nlmsgerr - * structure. This can be looked at as a NACK and typically it is - * from FEC to CPC. - */ -#define NLMSG_ERROR 0x2 - -/** - * Message terminates a multipart message. - */ -#define NLMSG_DONE 0x3 - -/** - * The message signals that data got lost - */ -#define NLMSG_OVERRUN 0x4 - -/** - * Lower limit of reserved message types - */ -#define NLMSG_MIN_TYPE 0x10 - -/** @} */ - -/** - * Netlink error message - * @ingroup msg - */ -struct nlmsgerr -{ - /** Error code (errno number) */ - int error; - - /** Original netlink message causing the error */ - struct nlmsghdr msg; -}; - -struct nl_pktinfo -{ - __u32 group; -}; - -#endif /* __LINUX_NETLINK_H */ diff --git a/package/libs/libnl-tiny/src/include/netlink/netlink.h b/package/libs/libnl-tiny/src/include/netlink/netlink.h deleted file mode 100644 index c333c503dd8..00000000000 --- a/package/libs/libnl-tiny/src/include/netlink/netlink.h +++ /dev/null @@ -1,82 +0,0 @@ -/* - * netlink/netlink.h Netlink Interface - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation version 2.1 - * of the License. - * - * Copyright (c) 2003-2006 Thomas Graf - */ - -#ifndef NETLINK_NETLINK_H_ -#define NETLINK_NETLINK_H_ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -extern int nl_debug; -extern struct nl_dump_params nl_debug_dp; - -/* Connection Management */ -extern int nl_connect(struct nl_sock *, int); -extern void nl_close(struct nl_sock *); - -/* Send */ -extern int nl_sendto(struct nl_sock *, void *, size_t); -extern int nl_sendmsg(struct nl_sock *, struct nl_msg *, - struct msghdr *); -extern int nl_send(struct nl_sock *, struct nl_msg *); -extern int nl_send_auto_complete(struct nl_sock *, - struct nl_msg *); -extern int nl_send_simple(struct nl_sock *, int, int, - void *, size_t); - -/* Receive */ -extern int nl_recv(struct nl_sock *, - struct sockaddr_nl *, unsigned char **, - struct ucred **); -extern int nl_recvmsgs(struct nl_sock *sk, struct nl_cb *cb); - -extern int nl_wait_for_ack(struct nl_sock *); - -/* Netlink Family Translations */ -extern char * nl_nlfamily2str(int, char *, size_t); -extern int nl_str2nlfamily(const char *); - -/** - * Receive a set of message from a netlink socket using handlers in nl_sock. - * @arg sk Netlink socket. - * - * Calls nl_recvmsgs() with the handlers configured in the netlink socket. - */ -static inline int nl_recvmsgs_default(struct nl_sock *sk) -{ - return nl_recvmsgs(sk, sk->s_cb); -} - - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/package/libs/libnl-tiny/src/include/netlink/object-api.h b/package/libs/libnl-tiny/src/include/netlink/object-api.h deleted file mode 100644 index 8a44fe90129..00000000000 --- a/package/libs/libnl-tiny/src/include/netlink/object-api.h +++ /dev/null @@ -1,331 +0,0 @@ -/* - * netlink/object-api.c Object API - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation version 2.1 - * of the License. - * - * Copyright (c) 2003-2007 Thomas Graf - */ - -#ifndef NETLINK_OBJECT_API_H_ -#define NETLINK_OBJECT_API_H_ - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * @ingroup object - * @defgroup object_api Object API - * @brief - * - * @par 1) Object Definition - * @code - * // Define your object starting with the common object header - * struct my_obj { - * NLHDR_COMMON - * int my_data; - * }; - * - * // Fill out the object operations structure - * struct nl_object_ops my_ops = { - * .oo_name = "my_obj", - * .oo_size = sizeof(struct my_obj), - * }; - * - * // At this point the object can be allocated, you may want to provide a - * // separate _alloc() function to ease allocting objects of this kind. - * struct nl_object *obj = nl_object_alloc(&my_ops); - * - * // And release it again... - * nl_object_put(obj); - * @endcode - * - * @par 2) Allocating additional data - * @code - * // You may require to allocate additional data and store it inside - * // object, f.e. assuming there is a field `ptr'. - * struct my_obj { - * NLHDR_COMMON - * void * ptr; - * }; - * - * // And at some point you may assign allocated data to this field: - * my_obj->ptr = calloc(1, ...); - * - * // In order to not introduce any memory leaks you have to release - * // this data again when the last reference is given back. - * static void my_obj_free_data(struct nl_object *obj) - * { - * struct my_obj *my_obj = nl_object_priv(obj); - * - * free(my_obj->ptr); - * } - * - * // Also when the object is cloned, you must ensure for your pointer - * // stay valid even if one of the clones is freed by either making - * // a clone as well or increase the reference count. - * static int my_obj_clone(struct nl_object *src, struct nl_object *dst) - * { - * struct my_obj *my_src = nl_object_priv(src); - * struct my_obj *my_dst = nl_object_priv(dst); - * - * if (src->ptr) { - * dst->ptr = calloc(1, ...); - * memcpy(dst->ptr, src->ptr, ...); - * } - * } - * - * struct nl_object_ops my_ops = { - * ... - * .oo_free_data = my_obj_free_data, - * .oo_clone = my_obj_clone, - * }; - * @endcode - * - * @par 3) Object Dumping - * @code - * static int my_obj_dump_detailed(struct nl_object *obj, - * struct nl_dump_params *params) - * { - * struct my_obj *my_obj = nl_object_priv(obj); - * - * // It is absolutely essential to use nl_dump() when printing - * // any text to make sure the dumping parameters are respected. - * nl_dump(params, "Obj Integer: %d\n", my_obj->my_int); - * - * // Before we can dump the next line, make sure to prefix - * // this line correctly. - * nl_new_line(params); - * - * // You may also split a line into multiple nl_dump() calls. - * nl_dump(params, "String: %s ", my_obj->my_string); - * nl_dump(params, "String-2: %s\n", my_obj->another_string); - * } - * - * struct nl_object_ops my_ops = { - * ... - * .oo_dump[NL_DUMP_FULL] = my_obj_dump_detailed, - * }; - * @endcode - * - * @par 4) Object Attributes - * @code - * // The concept of object attributes is optional but can ease the typical - * // case of objects that have optional attributes, e.g. a route may have a - * // nexthop assigned but it is not required to. - * - * // The first step to define your object specific bitmask listing all - * // attributes - * #define MY_ATTR_FOO (1<<0) - * #define MY_ATTR_BAR (1<<1) - * - * // When assigning an optional attribute to the object, make sure - * // to mark its availability. - * my_obj->foo = 123123; - * my_obj->ce_mask |= MY_ATTR_FOO; - * - * // At any time you may use this mask to check for the availability - * // of the attribute, e.g. while dumping - * if (my_obj->ce_mask & MY_ATTR_FOO) - * nl_dump(params, "foo %d ", my_obj->foo); - * - * // One of the big advantages of this concept is that it allows for - * // standardized comparisons which make it trivial for caches to - * // identify unique objects by use of unified comparison functions. - * // In order for it to work, your object implementation must provide - * // a comparison function and define a list of attributes which - * // combined together make an object unique. - * - * static int my_obj_compare(struct nl_object *_a, struct nl_object *_b, - * uint32_t attrs, int flags) - * { - * struct my_obj *a = nl_object_priv(_a): - * struct my_obj *b = nl_object_priv(_b): - * int diff = 0; - * - * // We help ourselves in defining our own DIFF macro which will - * // call ATTR_DIFF() on both objects which will make sure to only - * // compare the attributes if required. - * #define MY_DIFF(ATTR, EXPR) ATTR_DIFF(attrs, MY_ATTR_##ATTR, a, b, EXPR) - * - * // Call our own diff macro for each attribute to build a bitmask - * // representing the attributes which mismatch. - * diff |= MY_DIFF(FOO, a->foo != b->foo) - * diff |= MY_DIFF(BAR, strcmp(a->bar, b->bar)) - * - * return diff; - * } - * - * // In order to identify identical objects with differing attributes - * // you must specify the attributes required to uniquely identify - * // your object. Make sure to not include too many attributes, this - * // list is used when caches look for an old version of an object. - * struct nl_object_ops my_ops = { - * ... - * .oo_id_attrs = MY_ATTR_FOO, - * .oo_compare = my_obj_compare, - * }; - * @endcode - * @{ - */ - -/** - * Common Object Header - * - * This macro must be included as first member in every object - * definition to allow objects to be cached. - */ -#define NLHDR_COMMON \ - int ce_refcnt; \ - struct nl_object_ops * ce_ops; \ - struct nl_cache * ce_cache; \ - struct nl_list_head ce_list; \ - int ce_msgtype; \ - int ce_flags; \ - uint32_t ce_mask; - -/** - * Return true if attribute is available in both objects - * @arg A an object - * @arg B another object - * @arg ATTR attribute bit - * - * @return True if the attribute is available, otherwise false is returned. - */ -#define AVAILABLE(A, B, ATTR) (((A)->ce_mask & (B)->ce_mask) & (ATTR)) - -/** - * Return true if attributes mismatch - * @arg A an object - * @arg B another object - * @arg ATTR attribute bit - * @arg EXPR Comparison expression - * - * This function will check if the attribute in question is available - * in both objects, if not this will count as a mismatch. - * - * If available the function will execute the expression which must - * return true if the attributes mismatch. - * - * @return True if the attribute mismatch, or false if they match. - */ -#define ATTR_MISMATCH(A, B, ATTR, EXPR) (!AVAILABLE(A, B, ATTR) || (EXPR)) - -/** - * Return attribute bit if attribute does not match - * @arg LIST list of attributes to be compared - * @arg ATTR attribute bit - * @arg A an object - * @arg B another object - * @arg EXPR Comparison expression - * - * This function will check if the attribute in question is available - * in both objects, if not this will count as a mismatch. - * - * If available the function will execute the expression which must - * return true if the attributes mismatch. - * - * In case the attributes mismatch, the attribute is returned, otherwise - * 0 is returned. - * - * @code - * diff |= ATTR_DIFF(attrs, MY_ATTR_FOO, a, b, a->foo != b->foo); - * @endcode - */ -#define ATTR_DIFF(LIST, ATTR, A, B, EXPR) \ -({ int diff = 0; \ - if (((LIST) & (ATTR)) && ATTR_MISMATCH(A, B, ATTR, EXPR)) \ - diff = ATTR; \ - diff; }) - -/** - * Object Operations - */ -struct nl_object; -struct nl_object_ops -{ - /** - * Unique name of object type - * - * Must be in the form family/name, e.g. "route/addr" - */ - char * oo_name; - - /** Size of object including its header */ - size_t oo_size; - - /* List of attributes needed to uniquely identify the object */ - uint32_t oo_id_attrs; - - /** - * Constructor function - * - * Will be called when a new object of this type is allocated. - * Can be used to initialize members such as lists etc. - */ - void (*oo_constructor)(struct nl_object *); - - /** - * Destructor function - * - * Will be called when an object is freed. Must free all - * resources which may have been allocated as part of this - * object. - */ - void (*oo_free_data)(struct nl_object *); - - /** - * Cloning function - * - * Will be called when an object needs to be cloned. Please - * note that the generic object code will make an exact - * copy of the object first, therefore you only need to take - * care of members which require reference counting etc. - * - * May return a negative error code to abort cloning. - */ - int (*oo_clone)(struct nl_object *, struct nl_object *); - - /** - * Dumping functions - * - * Will be called when an object is dumped. The implementations - * have to use nl_dump(), nl_dump_line(), and nl_new_line() to - * dump objects. - * - * The functions must return the number of lines printed. - */ - void (*oo_dump[NL_DUMP_MAX+1])(struct nl_object *, - struct nl_dump_params *); - - /** - * Comparison function - * - * Will be called when two objects of the same type are - * compared. It takes the two objects in question, an object - * specific bitmask defining which attributes should be - * compared and flags to control the behaviour. - * - * The function must return a bitmask with the relevant bit - * set for each attribute that mismatches. - */ - int (*oo_compare)(struct nl_object *, struct nl_object *, - uint32_t, int); - - - char *(*oo_attrs2str)(int, char *, size_t); -}; - -/** @} */ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/package/libs/libnl-tiny/src/include/netlink/object.h b/package/libs/libnl-tiny/src/include/netlink/object.h deleted file mode 100644 index 8aabe7bb12f..00000000000 --- a/package/libs/libnl-tiny/src/include/netlink/object.h +++ /dev/null @@ -1,164 +0,0 @@ -/* - * netlink/object.c Generic Cacheable Object - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation version 2.1 - * of the License. - * - * Copyright (c) 2003-2008 Thomas Graf - */ - -#ifndef NETLINK_OBJECT_H_ -#define NETLINK_OBJECT_H_ - -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#define NL_OBJ_MARK 1 - -struct nl_cache; -struct nl_object; -struct nl_object_ops; - -struct nl_object -{ - NLHDR_COMMON -}; - -#define OBJ_CAST(ptr) ((struct nl_object *) (ptr)) - -/* General */ -extern struct nl_object * nl_object_alloc(struct nl_object_ops *); -extern void nl_object_free(struct nl_object *); -extern struct nl_object * nl_object_clone(struct nl_object *obj); - -#ifdef disabled - -extern int nl_object_alloc_name(const char *, - struct nl_object **); -extern void nl_object_dump(struct nl_object *, - struct nl_dump_params *); - -extern uint32_t nl_object_diff(struct nl_object *, - struct nl_object *); -extern int nl_object_match_filter(struct nl_object *, - struct nl_object *); -extern int nl_object_identical(struct nl_object *, - struct nl_object *); -extern char * nl_object_attrs2str(struct nl_object *, - uint32_t attrs, char *buf, - size_t); -#endif -/** - * Check whether this object is used by multiple users - * @arg obj object to check - * @return true or false - */ -static inline int nl_object_shared(struct nl_object *obj) -{ - return obj->ce_refcnt > 1; -} - - -static inline void nl_object_get(struct nl_object *obj) -{ - obj->ce_refcnt++; -} - -static inline void nl_object_put(struct nl_object *obj) -{ - if (!obj) - return; - - obj->ce_refcnt--; - - if (obj->ce_refcnt <= 0) - nl_object_free(obj); -} - - -/** - * @name Marks - * @{ - */ - -/** - * Add mark to object - * @arg obj Object to mark - */ -static inline void nl_object_mark(struct nl_object *obj) -{ - obj->ce_flags |= NL_OBJ_MARK; -} - -/** - * Remove mark from object - * @arg obj Object to unmark - */ -static inline void nl_object_unmark(struct nl_object *obj) -{ - obj->ce_flags &= ~NL_OBJ_MARK; -} - -/** - * Return true if object is marked - * @arg obj Object to check - * @return true if object is marked, otherwise false - */ -static inline int nl_object_is_marked(struct nl_object *obj) -{ - return (obj->ce_flags & NL_OBJ_MARK); -} - -/** @} */ - -#ifdef disabled -/** - * Return list of attributes present in an object - * @arg obj an object - * @arg buf destination buffer - * @arg len length of destination buffer - * - * @return destination buffer. - */ -static inline char *nl_object_attr_list(struct nl_object *obj, char *buf, size_t len) -{ - return nl_object_attrs2str(obj, obj->ce_mask, buf, len); -} -#endif - -/** - * @name Attributes - * @{ - */ - -static inline int nl_object_get_refcnt(struct nl_object *obj) -{ - return obj->ce_refcnt; -} - -static inline struct nl_cache *nl_object_get_cache(struct nl_object *obj) -{ - return obj->ce_cache; -} - -static inline void * nl_object_priv(struct nl_object *obj) -{ - return obj; -} - - -/** @} */ - - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/package/libs/libnl-tiny/src/include/netlink/socket.h b/package/libs/libnl-tiny/src/include/netlink/socket.h deleted file mode 100644 index bcb934c50b4..00000000000 --- a/package/libs/libnl-tiny/src/include/netlink/socket.h +++ /dev/null @@ -1,231 +0,0 @@ -/* - * netlink/socket.h Netlink Socket - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation version 2.1 - * of the License. - * - * Copyright (c) 2003-2008 Thomas Graf - */ - -#ifndef NETLINK_SOCKET_H_ -#define NETLINK_SOCKET_H_ - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#define NL_SOCK_BUFSIZE_SET (1<<0) -#define NL_SOCK_PASSCRED (1<<1) -#define NL_OWN_PORT (1<<2) -#define NL_MSG_PEEK (1<<3) -#define NL_NO_AUTO_ACK (1<<4) - -struct nl_cb; -struct nl_sock -{ - struct sockaddr_nl s_local; - struct sockaddr_nl s_peer; - int s_fd; - int s_proto; - unsigned int s_seq_next; - unsigned int s_seq_expect; - int s_flags; - struct nl_cb * s_cb; -}; - - -extern struct nl_sock * nl_socket_alloc(void); -extern struct nl_sock * nl_socket_alloc_cb(struct nl_cb *); -extern void nl_socket_free(struct nl_sock *); - -extern void nl_socket_set_local_port(struct nl_sock *, uint32_t); - -extern int nl_socket_add_memberships(struct nl_sock *, int, ...); -extern int nl_socket_drop_memberships(struct nl_sock *, int, ...); - -extern int nl_socket_set_buffer_size(struct nl_sock *, int, int); -extern int nl_socket_set_passcred(struct nl_sock *, int); -extern int nl_socket_recv_pktinfo(struct nl_sock *, int); - -extern void nl_socket_disable_seq_check(struct nl_sock *); - -extern int nl_socket_set_nonblocking(struct nl_sock *); - -/** - * Use next sequence number - * @arg sk Netlink socket. - * - * Uses the next available sequence number and increases the counter - * by one for subsequent calls. - * - * @return Unique serial sequence number - */ -static inline unsigned int nl_socket_use_seq(struct nl_sock *sk) -{ - return sk->s_seq_next++; -} - -/** - * Disable automatic request for ACK - * @arg sk Netlink socket. - * - * The default behaviour of a socket is to request an ACK for - * each message sent to allow for the caller to synchronize to - * the completion of the netlink operation. This function - * disables this behaviour and will result in requests being - * sent which will not have the NLM_F_ACK flag set automatically. - * However, it is still possible for the caller to set the - * NLM_F_ACK flag explicitely. - */ -static inline void nl_socket_disable_auto_ack(struct nl_sock *sk) -{ - sk->s_flags |= NL_NO_AUTO_ACK; -} - -/** - * Enable automatic request for ACK (default) - * @arg sk Netlink socket. - * @see nl_socket_disable_auto_ack - */ -static inline void nl_socket_enable_auto_ack(struct nl_sock *sk) -{ - sk->s_flags &= ~NL_NO_AUTO_ACK; -} - -/** - * @name Source Idenficiation - * @{ - */ - -static inline uint32_t nl_socket_get_local_port(struct nl_sock *sk) -{ - return sk->s_local.nl_pid; -} - -/** - * Join multicast groups (deprecated) - * @arg sk Netlink socket. - * @arg groups Bitmask of groups to join. - * - * This function defines the old way of joining multicast group which - * has to be done prior to calling nl_connect(). It works on any kernel - * version but is very limited as only 32 groups can be joined. - */ -static inline void nl_join_groups(struct nl_sock *sk, int groups) -{ - sk->s_local.nl_groups |= groups; -} - -/** - * @name Peer Identfication - * @{ - */ - -static inline uint32_t nl_socket_get_peer_port(struct nl_sock *sk) -{ - return sk->s_peer.nl_pid; -} - -static inline void nl_socket_set_peer_port(struct nl_sock *sk, uint32_t port) -{ - sk->s_peer.nl_pid = port; -} - -/** @} */ - -/** - * @name File Descriptor - * @{ - */ - -static inline int nl_socket_get_fd(struct nl_sock *sk) -{ - return sk->s_fd; -} - -/** - * Enable use of MSG_PEEK when reading from socket - * @arg sk Netlink socket. - */ -static inline void nl_socket_enable_msg_peek(struct nl_sock *sk) -{ - sk->s_flags |= NL_MSG_PEEK; -} - -/** - * Disable use of MSG_PEEK when reading from socket - * @arg sk Netlink socket. - */ -static inline void nl_socket_disable_msg_peek(struct nl_sock *sk) -{ - sk->s_flags &= ~NL_MSG_PEEK; -} - -static inline uint32_t nl_socket_get_peer_groups(struct nl_sock *sk) -{ - return sk->s_peer.nl_groups; -} - -static inline void nl_socket_set_peer_groups(struct nl_sock *sk, uint32_t groups) -{ - sk->s_peer.nl_groups = groups; -} - -/** - * @name Callback Handler - * @{ - */ - -static inline struct nl_cb *nl_socket_get_cb(struct nl_sock *sk) -{ - return nl_cb_get(sk->s_cb); -} - -static inline void nl_socket_set_cb(struct nl_sock *sk, struct nl_cb *cb) -{ - nl_cb_put(sk->s_cb); - sk->s_cb = nl_cb_get(cb); -} - -/** - * Modify the callback handler associated to the socket - * @arg sk Netlink socket. - * @arg type which type callback to set - * @arg kind kind of callback - * @arg func callback function - * @arg arg argument to be passwd to callback function - * - * @see nl_cb_set - */ -static inline int nl_socket_modify_cb(struct nl_sock *sk, enum nl_cb_type type, - enum nl_cb_kind kind, nl_recvmsg_msg_cb_t func, - void *arg) -{ - return nl_cb_set(sk->s_cb, type, kind, func, arg); -} - -/** @} */ - -static inline int nl_socket_add_membership(struct nl_sock *sk, int group) -{ - return nl_socket_add_memberships(sk, group, 0); -} - - -static inline int nl_socket_drop_membership(struct nl_sock *sk, int group) -{ - return nl_socket_drop_memberships(sk, group, 0); -} - - - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/package/libs/libnl-tiny/src/include/netlink/types.h b/package/libs/libnl-tiny/src/include/netlink/types.h deleted file mode 100644 index de81ace11e0..00000000000 --- a/package/libs/libnl-tiny/src/include/netlink/types.h +++ /dev/null @@ -1,121 +0,0 @@ -/* - * netlink/netlink-types.h Netlink Types - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation version 2.1 - * of the License. - * - * Copyright (c) 2003-2006 Thomas Graf - */ - -#ifndef __NETLINK_TYPES_H_ -#define __NETLINK_TYPES_H_ - -#include - -/** - * Dumping types (dp_type) - * @ingroup utils - */ -enum nl_dump_type { - NL_DUMP_LINE, /**< Dump object briefly on one line */ - NL_DUMP_DETAILS, /**< Dump all attributes but no statistics */ - NL_DUMP_STATS, /**< Dump all attributes including statistics */ - NL_DUMP_ENV, /**< Dump all attribtues as env variables */ - __NL_DUMP_MAX, -}; -#define NL_DUMP_MAX (__NL_DUMP_MAX - 1) - -/** - * Dumping parameters - * @ingroup utils - */ -struct nl_dump_params -{ - /** - * Specifies the type of dump that is requested. - */ - enum nl_dump_type dp_type; - - /** - * Specifies the number of whitespaces to be put in front - * of every new line (indentation). - */ - int dp_prefix; - - /** - * Causes the cache index to be printed for each element. - */ - int dp_print_index; - - /** - * Causes each element to be prefixed with the message type. - */ - int dp_dump_msgtype; - - /** - * A callback invoked for output - * - * Passed arguments are: - * - dumping parameters - * - string to append to the output - */ - void (*dp_cb)(struct nl_dump_params *, char *); - - /** - * A callback invoked for every new line, can be used to - * customize the indentation. - * - * Passed arguments are: - * - dumping parameters - * - line number starting from 0 - */ - void (*dp_nl_cb)(struct nl_dump_params *, int); - - /** - * User data pointer, can be used to pass data to callbacks. - */ - void *dp_data; - - /** - * File descriptor the dumping output should go to - */ - FILE * dp_fd; - - /** - * Alternatively the output may be redirected into a buffer - */ - char * dp_buf; - - /** - * Length of the buffer dp_buf - */ - size_t dp_buflen; - - /** - * PRIVATE - * Set if a dump was performed prior to the actual dump handler. - */ - int dp_pre_dump; - - /** - * PRIVATE - * Owned by the current caller - */ - int dp_ivar; - - unsigned int dp_line; -}; - -#ifndef __GNUC__ -#define __extension__ -#endif - -#define min_t(type,x,y) \ - __extension__({ type __x = (x); type __y = (y); __x < __y ? __x: __y; }) -#define max_t(type,x,y) \ - __extension__({ type __x = (x); type __y = (y); __x > __y ? __x: __y; }) - - -#endif diff --git a/package/libs/libnl-tiny/src/include/netlink/utils.h b/package/libs/libnl-tiny/src/include/netlink/utils.h deleted file mode 100644 index 480bab61869..00000000000 --- a/package/libs/libnl-tiny/src/include/netlink/utils.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - * netlink/utils.h Utility Functions - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation version 2.1 - * of the License. - * - * Copyright (c) 2003-2008 Thomas Graf - */ - -#ifndef NETLINK_UTILS_H_ -#define NETLINK_UTILS_H_ - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * @name Probability Constants - * @{ - */ - -/** - * Lower probability limit - * @ingroup utils - */ -#define NL_PROB_MIN 0x0 - -/** - * Upper probability limit - * @ingroup utils - */ -#define NL_PROB_MAX 0xffffffff - -/** @} */ - -/* unit pretty-printing */ -extern double nl_cancel_down_bytes(unsigned long long, char **); -extern double nl_cancel_down_bits(unsigned long long, char **); -extern double nl_cancel_down_us(uint32_t, char **); - -/* generic unit translations */ -extern long nl_size2int(const char *); -extern long nl_prob2int(const char *); - -/* time translations */ -extern int nl_get_hz(void); -extern uint32_t nl_us2ticks(uint32_t); -extern uint32_t nl_ticks2us(uint32_t); -extern int nl_str2msec(const char *, uint64_t *); -extern char * nl_msec2str(uint64_t, char *, size_t); - -/* link layer protocol translations */ -extern char * nl_llproto2str(int, char *, size_t); -extern int nl_str2llproto(const char *); - -/* ethernet protocol translations */ -extern char * nl_ether_proto2str(int, char *, size_t); -extern int nl_str2ether_proto(const char *); - -/* IP protocol translations */ -extern char * nl_ip_proto2str(int, char *, size_t); -extern int nl_str2ip_proto(const char *); - -/* Dumping helpers */ -extern void nl_new_line(struct nl_dump_params *); -extern void nl_dump(struct nl_dump_params *, const char *, ...); -extern void nl_dump_line(struct nl_dump_params *, const char *, ...); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/package/libs/libnl-tiny/src/include/netlink/version.h b/package/libs/libnl-tiny/src/include/netlink/version.h deleted file mode 100644 index 6a316d49336..00000000000 --- a/package/libs/libnl-tiny/src/include/netlink/version.h +++ /dev/null @@ -1,18 +0,0 @@ -/* - * netlink/version.h Compile Time Versioning Information - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation version 2.1 - * of the License. - * - * Copyright (c) 2008 Thomas Graf - */ - -#ifndef NETLINK_VERSION_H_ -#define NETLINK_VERSION_H_ - -#define LIBNL_STRING "libnl" -#define LIBNL_VERSION "2.0" - -#endif diff --git a/package/libs/libnl-tiny/src/include/unl.h b/package/libs/libnl-tiny/src/include/unl.h deleted file mode 100644 index 4fe7dc745d1..00000000000 --- a/package/libs/libnl-tiny/src/include/unl.h +++ /dev/null @@ -1,47 +0,0 @@ -#ifndef __UNL_H -#define __UNL_H - -#include -#include -#include -#include - -struct unl { - struct nl_sock *sock; - struct nl_cache *cache; - struct genl_family *family; - char *family_name; - int hdrlen; - bool loop_done; -}; - -int unl_genl_init(struct unl *unl, const char *family); -void unl_free(struct unl *unl); - -typedef int (*unl_cb)(struct nl_msg *, void *); - -struct nl_msg *unl_genl_msg(struct unl *unl, int cmd, bool dump); -int unl_genl_request(struct unl *unl, struct nl_msg *msg, unl_cb handler, void *arg); -int unl_genl_request_single(struct unl *unl, struct nl_msg *msg, struct nl_msg **dest); -void unl_genl_loop(struct unl *unl, unl_cb handler, void *arg); - -int unl_genl_multicast_id(struct unl *unl, const char *name); -int unl_genl_subscribe(struct unl *unl, const char *name); -int unl_genl_unsubscribe(struct unl *unl, const char *name); - -int unl_nl80211_phy_lookup(const char *name); -int unl_nl80211_wdev_to_phy(struct unl *unl, int wdev); -struct nl_msg *unl_nl80211_phy_msg(struct unl *unl, int phy, int cmd, bool dump); -struct nl_msg *unl_nl80211_vif_msg(struct unl *unl, int dev, int cmd, bool dump); - -static inline void unl_loop_done(struct unl *unl) -{ - unl->loop_done = true; -} - -static inline struct nlattr *unl_find_attr(struct unl *unl, struct nl_msg *msg, int attr) -{ - return nlmsg_find_attr(nlmsg_hdr(msg), unl->hdrlen, attr); -} - -#endif diff --git a/package/libs/libnl-tiny/src/msg.c b/package/libs/libnl-tiny/src/msg.c deleted file mode 100644 index 2acaface2e2..00000000000 --- a/package/libs/libnl-tiny/src/msg.c +++ /dev/null @@ -1,564 +0,0 @@ -/* - * lib/msg.c Netlink Messages Interface - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation version 2.1 - * of the License. - * - * Copyright (c) 2003-2008 Thomas Graf - */ - -/** - * @ingroup core - * @defgroup msg Messages - * Netlink Message Construction/Parsing Interface - * - * The following information is partly extracted from RFC3549 - * (ftp://ftp.rfc-editor.org/in-notes/rfc3549.txt) - * - * @par Message Format - * Netlink messages consist of a byte stream with one or multiple - * Netlink headers and an associated payload. If the payload is too big - * to fit into a single message it, can be split over multiple Netlink - * messages, collectively called a multipart message. For multipart - * messages, the first and all following headers have the \c NLM_F_MULTI - * Netlink header flag set, except for the last header which has the - * Netlink header type \c NLMSG_DONE. - * - * @par - * The Netlink message header (\link nlmsghdr struct nlmsghdr\endlink) is shown below. - * @code - * 0 1 2 3 - * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | Length | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | Type | Flags | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | Sequence Number | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | Process ID (PID) | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * @endcode - * - * @par - * The netlink message header and payload must be aligned properly: - * @code - * <------- NLMSG_ALIGN(hlen) ------> <---- NLMSG_ALIGN(len) ---> - * +----------------------------+- - -+- - - - - - - - - - -+- - -+ - * | Header | Pad | Payload | Pad | - * | struct nlmsghdr | | | | - * +----------------------------+- - -+- - - - - - - - - - -+- - -+ - * @endcode - * @par - * Message Format: - * @code - * <--- nlmsg_total_size(payload) ---> - * <-- nlmsg_msg_size(payload) -> - * +----------+- - -+-------------+- - -+-------- - - - * | nlmsghdr | Pad | Payload | Pad | nlmsghdr - * +----------+- - -+-------------+- - -+-------- - - - * nlmsg_data(nlh)---^ ^ - * nlmsg_next(nlh)-----------------------+ - * @endcode - * @par - * The payload may consist of arbitary data but may have strict - * alignment and formatting rules depening on the specific netlink - * families. - * @par - * @code - * <---------------------- nlmsg_len(nlh) ---------------------> - * <------ hdrlen ------> <- nlmsg_attrlen(nlh, hdrlen) -> - * +----------------------+- - -+--------------------------------+ - * | Family Header | Pad | Attributes | - * +----------------------+- - -+--------------------------------+ - * nlmsg_attrdata(nlh, hdrlen)---^ - * @endcode - * @par The ACK Netlink Message - * This message is actually used to denote both an ACK and a NACK. - * Typically, the direction is from FEC to CPC (in response to an ACK - * request message). However, the CPC should be able to send ACKs back - * to FEC when requested. - * @code - * 0 1 2 3 - * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | Netlink message header | - * | type = NLMSG_ERROR | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | Error code | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | OLD Netlink message header | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * @endcode - * - * @par Example - * @code - * // Various methods exist to create/allocate a new netlink - * // message. - * // - * // nlmsg_alloc() will allocate an empty netlink message with - * // a maximum payload size which defaults to the page size of - * // the system. This default size can be modified using the - * // function nlmsg_set_default_size(). - * struct nl_msg *msg = nlmsg_alloc(); - * - * // Very often, the message type and message flags are known - * // at allocation time while the other fields are auto generated: - * struct nl_msg *msg = nlmsg_alloc_simple(MY_TYPE, MY_FLAGS); - * - * // Alternatively an existing netlink message header can be used - * // to inherit the header values: - * struct nlmsghdr hdr = { - * .nlmsg_type = MY_TYPE, - * .nlmsg_flags = MY_FLAGS, - * }; - * struct nl_msg *msg = nlmsg_inherit(&hdr); - * - * // Last but not least, netlink messages received from netlink sockets - * // can be converted into nl_msg objects using nlmsg_convert(). This - * // will create a message with a maximum payload size which equals the - * // length of the existing netlink message, therefore no more data can - * // be appened without calling nlmsg_expand() first. - * struct nl_msg *msg = nlmsg_convert(nlh_from_nl_sock); - * - * // Payload may be added to the message via nlmsg_append(). The fourth - * // parameter specifies the number of alignment bytes the data should - * // be padding with at the end. Common values are 0 to disable it or - * // NLMSG_ALIGNTO to ensure proper netlink message padding. - * nlmsg_append(msg, &mydata, sizeof(mydata), 0); - * - * // Sometimes it may be necessary to reserve room for data but defer - * // the actual copying to a later point, nlmsg_reserve() can be used - * // for this purpose: - * void *data = nlmsg_reserve(msg, sizeof(mydata), NLMSG_ALIGNTO); - * - * // Attributes may be added using the attributes interface. - * - * // After successful use of the message, the memory must be freed - * // using nlmsg_free() - * nlmsg_free(msg); - * @endcode - * - * @par 4) Parsing messages - * @code - * int n; - * unsigned char *buf; - * struct nlmsghdr *hdr; - * - * n = nl_recv(handle, NULL, &buf); - * - * hdr = (struct nlmsghdr *) buf; - * while (nlmsg_ok(hdr, n)) { - * // Process message here... - * hdr = nlmsg_next(hdr, &n); - * } - * @endcode - * @{ - */ - -#include -#include -#include -#include -#include -#include -#include - -static size_t default_msg_size = 4096; - -/** - * @name Attribute Access - * @{ - */ - -//** @} */ - -/** - * @name Message Parsing - * @{ - */ - -/** - * check if the netlink message fits into the remaining bytes - * @arg nlh netlink message header - * @arg remaining number of bytes remaining in message stream - */ -int nlmsg_ok(const struct nlmsghdr *nlh, int remaining) -{ - return (remaining >= sizeof(struct nlmsghdr) && - nlh->nlmsg_len >= sizeof(struct nlmsghdr) && - nlh->nlmsg_len <= remaining); -} - -/** - * next netlink message in message stream - * @arg nlh netlink message header - * @arg remaining number of bytes remaining in message stream - * - * @returns the next netlink message in the message stream and - * decrements remaining by the size of the current message. - */ -struct nlmsghdr *nlmsg_next(struct nlmsghdr *nlh, int *remaining) -{ - int totlen = NLMSG_ALIGN(nlh->nlmsg_len); - - *remaining -= totlen; - - return (struct nlmsghdr *) ((unsigned char *) nlh + totlen); -} - -/** - * parse attributes of a netlink message - * @arg nlh netlink message header - * @arg hdrlen length of family specific header - * @arg tb destination array with maxtype+1 elements - * @arg maxtype maximum attribute type to be expected - * @arg policy validation policy - * - * See nla_parse() - */ -int nlmsg_parse(struct nlmsghdr *nlh, int hdrlen, struct nlattr *tb[], - int maxtype, struct nla_policy *policy) -{ - if (!nlmsg_valid_hdr(nlh, hdrlen)) - return -NLE_MSG_TOOSHORT; - - return nla_parse(tb, maxtype, nlmsg_attrdata(nlh, hdrlen), - nlmsg_attrlen(nlh, hdrlen), policy); -} - -/** - * nlmsg_validate - validate a netlink message including attributes - * @arg nlh netlinket message header - * @arg hdrlen length of familiy specific header - * @arg maxtype maximum attribute type to be expected - * @arg policy validation policy - */ -int nlmsg_validate(struct nlmsghdr *nlh, int hdrlen, int maxtype, - struct nla_policy *policy) -{ - if (!nlmsg_valid_hdr(nlh, hdrlen)) - return -NLE_MSG_TOOSHORT; - - return nla_validate(nlmsg_attrdata(nlh, hdrlen), - nlmsg_attrlen(nlh, hdrlen), maxtype, policy); -} - -/** @} */ - -/** - * @name Message Building/Access - * @{ - */ - -static struct nl_msg *__nlmsg_alloc(size_t len) -{ - struct nl_msg *nm; - - nm = calloc(1, sizeof(*nm)); - if (!nm) - goto errout; - - nm->nm_refcnt = 1; - - nm->nm_nlh = malloc(len); - if (!nm->nm_nlh) - goto errout; - - memset(nm->nm_nlh, 0, sizeof(struct nlmsghdr)); - - nm->nm_protocol = -1; - nm->nm_size = len; - nm->nm_nlh->nlmsg_len = nlmsg_total_size(0); - - NL_DBG(2, "msg %p: Allocated new message, maxlen=%zu\n", nm, len); - - return nm; -errout: - free(nm); - return NULL; -} - -/** - * Allocate a new netlink message with the default maximum payload size. - * - * Allocates a new netlink message without any further payload. The - * maximum payload size defaults to PAGESIZE or as otherwise specified - * with nlmsg_set_default_size(). - * - * @return Newly allocated netlink message or NULL. - */ -struct nl_msg *nlmsg_alloc(void) -{ - return __nlmsg_alloc(default_msg_size); -} - -/** - * Allocate a new netlink message with maximum payload size specified. - */ -struct nl_msg *nlmsg_alloc_size(size_t max) -{ - return __nlmsg_alloc(max); -} - -/** - * Allocate a new netlink message and inherit netlink message header - * @arg hdr Netlink message header template - * - * Allocates a new netlink message and inherits the original message - * header. If \a hdr is not NULL it will be used as a template for - * the netlink message header, otherwise the header is left blank. - * - * @return Newly allocated netlink message or NULL - */ -struct nl_msg *nlmsg_inherit(struct nlmsghdr *hdr) -{ - struct nl_msg *nm; - - nm = nlmsg_alloc(); - if (nm && hdr) { - struct nlmsghdr *new = nm->nm_nlh; - - new->nlmsg_type = hdr->nlmsg_type; - new->nlmsg_flags = hdr->nlmsg_flags; - new->nlmsg_seq = hdr->nlmsg_seq; - new->nlmsg_pid = hdr->nlmsg_pid; - } - - return nm; -} - -/** - * Allocate a new netlink message - * @arg nlmsgtype Netlink message type - * @arg flags Message flags. - * - * @return Newly allocated netlink message or NULL. - */ -struct nl_msg *nlmsg_alloc_simple(int nlmsgtype, int flags) -{ - struct nl_msg *msg; - struct nlmsghdr nlh = { - .nlmsg_type = nlmsgtype, - .nlmsg_flags = flags, - }; - - msg = nlmsg_inherit(&nlh); - if (msg) - NL_DBG(2, "msg %p: Allocated new simple message\n", msg); - - return msg; -} - -/** - * Set the default maximum message payload size for allocated messages - * @arg max Size of payload in bytes. - */ -void nlmsg_set_default_size(size_t max) -{ - if (max < nlmsg_total_size(0)) - max = nlmsg_total_size(0); - - default_msg_size = max; -} - -/** - * Convert a netlink message received from a netlink socket to a nl_msg - * @arg hdr Netlink message received from netlink socket. - * - * Allocates a new netlink message and copies all of the data pointed to - * by \a hdr into the new message object. - * - * @return Newly allocated netlink message or NULL. - */ -struct nl_msg *nlmsg_convert(struct nlmsghdr *hdr) -{ - struct nl_msg *nm; - - nm = __nlmsg_alloc(NLMSG_ALIGN(hdr->nlmsg_len)); - if (!nm) - goto errout; - - memcpy(nm->nm_nlh, hdr, hdr->nlmsg_len); - - return nm; -errout: - nlmsg_free(nm); - return NULL; -} - -/** - * Reserve room for additional data in a netlink message - * @arg n netlink message - * @arg len length of additional data to reserve room for - * @arg pad number of bytes to align data to - * - * Reserves room for additional data at the tail of the an - * existing netlink message. Eventual padding required will - * be zeroed out. - * - * @return Pointer to start of additional data tailroom or NULL. - */ -void *nlmsg_reserve(struct nl_msg *n, size_t len, int pad) -{ - void *buf = n->nm_nlh; - size_t nlmsg_len = n->nm_nlh->nlmsg_len; - size_t tlen; - - if (len > n->nm_size) - return NULL; - - tlen = pad ? ((len + (pad - 1)) & ~(pad - 1)) : len; - - if ((tlen + nlmsg_len) > n->nm_size) - return NULL; - - buf += nlmsg_len; - n->nm_nlh->nlmsg_len += tlen; - - if (tlen > len) - memset(buf + len, 0, tlen - len); - - NL_DBG(2, "msg %p: Reserved %zu bytes, pad=%d, nlmsg_len=%d\n", - n, len, pad, n->nm_nlh->nlmsg_len); - - return buf; -} - -/** - * Append data to tail of a netlink message - * @arg n netlink message - * @arg data data to add - * @arg len length of data - * @arg pad Number of bytes to align data to. - * - * Extends the netlink message as needed and appends the data of given - * length to the message. - * - * @return 0 on success or a negative error code - */ -int nlmsg_append(struct nl_msg *n, void *data, size_t len, int pad) -{ - void *tmp; - - tmp = nlmsg_reserve(n, len, pad); - if (tmp == NULL) - return -NLE_NOMEM; - - memcpy(tmp, data, len); - NL_DBG(2, "msg %p: Appended %zu bytes with padding %d\n", n, len, pad); - - return 0; -} - -/** - * Add a netlink message header to a netlink message - * @arg n netlink message - * @arg pid netlink process id or NL_AUTO_PID - * @arg seq sequence number of message or NL_AUTO_SEQ - * @arg type message type - * @arg payload length of message payload - * @arg flags message flags - * - * Adds or overwrites the netlink message header in an existing message - * object. If \a payload is greater-than zero additional room will be - * reserved, f.e. for family specific headers. It can be accesed via - * nlmsg_data(). - * - * @return A pointer to the netlink message header or NULL. - */ -struct nlmsghdr *nlmsg_put(struct nl_msg *n, uint32_t pid, uint32_t seq, - int type, int payload, int flags) -{ - struct nlmsghdr *nlh; - - if (n->nm_nlh->nlmsg_len < NLMSG_HDRLEN) - BUG(); - - nlh = (struct nlmsghdr *) n->nm_nlh; - nlh->nlmsg_type = type; - nlh->nlmsg_flags = flags; - nlh->nlmsg_pid = pid; - nlh->nlmsg_seq = seq; - - NL_DBG(2, "msg %p: Added netlink header type=%d, flags=%d, pid=%d, " - "seq=%d\n", n, type, flags, pid, seq); - - if (payload > 0 && - nlmsg_reserve(n, payload, NLMSG_ALIGNTO) == NULL) - return NULL; - - return nlh; -} - -/** - * Release a reference from an netlink message - * @arg msg message to release reference from - * - * Frees memory after the last reference has been released. - */ -void nlmsg_free(struct nl_msg *msg) -{ - if (!msg) - return; - - msg->nm_refcnt--; - NL_DBG(4, "Returned message reference %p, %d remaining\n", - msg, msg->nm_refcnt); - - if (msg->nm_refcnt < 0) - BUG(); - - if (msg->nm_refcnt <= 0) { - free(msg->nm_nlh); - free(msg); - NL_DBG(2, "msg %p: Freed\n", msg); - } -} - -/** @} */ - -/** - * @name Direct Parsing - * @{ - */ - -/** @cond SKIP */ -struct dp_xdata { - void (*cb)(struct nl_object *, void *); - void *arg; -}; -/** @endcond */ - -static int parse_cb(struct nl_object *obj, struct nl_parser_param *p) -{ - struct dp_xdata *x = p->pp_arg; - - x->cb(obj, x->arg); - return 0; -} - -int nl_msg_parse(struct nl_msg *msg, void (*cb)(struct nl_object *, void *), - void *arg) -{ - struct nl_cache_ops *ops; - struct nl_parser_param p = { - .pp_cb = parse_cb - }; - struct dp_xdata x = { - .cb = cb, - .arg = arg, - }; - - ops = nl_cache_ops_associate(nlmsg_get_proto(msg), - nlmsg_hdr(msg)->nlmsg_type); - if (ops == NULL) - return -NLE_MSGTYPE_NOSUPPORT; - p.pp_arg = &x; - - return nl_cache_parse(ops, NULL, nlmsg_hdr(msg), &p); -} - -/** @} */ diff --git a/package/libs/libnl-tiny/src/nl.c b/package/libs/libnl-tiny/src/nl.c deleted file mode 100644 index 2fb866eca90..00000000000 --- a/package/libs/libnl-tiny/src/nl.c +++ /dev/null @@ -1,720 +0,0 @@ -/* - * lib/nl.c Core Netlink Interface - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation version 2.1 - * of the License. - * - * Copyright (c) 2003-2008 Thomas Graf - */ - -/** - * @defgroup core Core - * - * @details - * @par 1) Connecting the socket - * @code - * // Bind and connect the socket to a protocol, NETLINK_ROUTE in this example. - * nl_connect(sk, NETLINK_ROUTE); - * @endcode - * - * @par 2) Sending data - * @code - * // The most rudimentary method is to use nl_sendto() simply pushing - * // a piece of data to the other netlink peer. This method is not - * // recommended. - * const char buf[] = { 0x01, 0x02, 0x03, 0x04 }; - * nl_sendto(sk, buf, sizeof(buf)); - * - * // A more comfortable interface is nl_send() taking a pointer to - * // a netlink message. - * struct nl_msg *msg = my_msg_builder(); - * nl_send(sk, nlmsg_hdr(msg)); - * - * // nl_sendmsg() provides additional control over the sendmsg() message - * // header in order to allow more specific addressing of multiple peers etc. - * struct msghdr hdr = { ... }; - * nl_sendmsg(sk, nlmsg_hdr(msg), &hdr); - * - * // You're probably too lazy to fill out the netlink pid, sequence number - * // and message flags all the time. nl_send_auto_complete() automatically - * // extends your message header as needed with an appropriate sequence - * // number, the netlink pid stored in the netlink socket and the message - * // flags NLM_F_REQUEST and NLM_F_ACK (if not disabled in the socket) - * nl_send_auto_complete(sk, nlmsg_hdr(msg)); - * - * // Simple protocols don't require the complex message construction interface - * // and may favour nl_send_simple() to easly send a bunch of payload - * // encapsulated in a netlink message header. - * nl_send_simple(sk, MY_MSG_TYPE, 0, buf, sizeof(buf)); - * @endcode - * - * @par 3) Receiving data - * @code - * // nl_recv() receives a single message allocating a buffer for the message - * // content and gives back the pointer to you. - * struct sockaddr_nl peer; - * unsigned char *msg; - * nl_recv(sk, &peer, &msg); - * - * // nl_recvmsgs() receives a bunch of messages until the callback system - * // orders it to state, usually after receving a compolete multi part - * // message series. - * nl_recvmsgs(sk, my_callback_configuration); - * - * // nl_recvmsgs_default() acts just like nl_recvmsg() but uses the callback - * // configuration stored in the socket. - * nl_recvmsgs_default(sk); - * - * // In case you want to wait for the ACK to be recieved that you requested - * // with your latest message, you can call nl_wait_for_ack() - * nl_wait_for_ack(sk); - * @endcode - * - * @par 4) Closing - * @code - * // Close the socket first to release kernel memory - * nl_close(sk); - * @endcode - * - * @{ - */ - -#include -#include -#include -#include -#include -#include - -/** - * @name Connection Management - * @{ - */ - -/** - * Create and connect netlink socket. - * @arg sk Netlink socket. - * @arg protocol Netlink protocol to use. - * - * Creates a netlink socket using the specified protocol, binds the socket - * and issues a connection attempt. - * - * @return 0 on success or a negative error code. - */ -int nl_connect(struct nl_sock *sk, int protocol) -{ - int err; - socklen_t addrlen; - - sk->s_fd = socket(AF_NETLINK, SOCK_RAW, protocol); - if (sk->s_fd < 0) { - err = -nl_syserr2nlerr(errno); - goto errout; - } - - if (!(sk->s_flags & NL_SOCK_BUFSIZE_SET)) { - err = nl_socket_set_buffer_size(sk, 0, 0); - if (err < 0) - goto errout; - } - - err = bind(sk->s_fd, (struct sockaddr*) &sk->s_local, - sizeof(sk->s_local)); - if (err < 0) { - err = -nl_syserr2nlerr(errno); - goto errout; - } - - addrlen = sizeof(sk->s_local); - err = getsockname(sk->s_fd, (struct sockaddr *) &sk->s_local, - &addrlen); - if (err < 0) { - err = -nl_syserr2nlerr(errno); - goto errout; - } - - if (addrlen != sizeof(sk->s_local)) { - err = -NLE_NOADDR; - goto errout; - } - - if (sk->s_local.nl_family != AF_NETLINK) { - err = -NLE_AF_NOSUPPORT; - goto errout; - } - - sk->s_proto = protocol; - - return 0; -errout: - close(sk->s_fd); - sk->s_fd = -1; - - return err; -} - -/** - * Close/Disconnect netlink socket. - * @arg sk Netlink socket. - */ -void nl_close(struct nl_sock *sk) -{ - if (sk->s_fd >= 0) { - close(sk->s_fd); - sk->s_fd = -1; - } - - sk->s_proto = 0; -} - -/** @} */ - -/** - * @name Send - * @{ - */ - -/** - * Send raw data over netlink socket. - * @arg sk Netlink socket. - * @arg buf Data buffer. - * @arg size Size of data buffer. - * @return Number of characters written on success or a negative error code. - */ -int nl_sendto(struct nl_sock *sk, void *buf, size_t size) -{ - int ret; - - ret = sendto(sk->s_fd, buf, size, 0, (struct sockaddr *) - &sk->s_peer, sizeof(sk->s_peer)); - if (ret < 0) - return -nl_syserr2nlerr(errno); - - return ret; -} - -/** - * Send netlink message with control over sendmsg() message header. - * @arg sk Netlink socket. - * @arg msg Netlink message to be sent. - * @arg hdr Sendmsg() message header. - * @return Number of characters sent on sucess or a negative error code. - */ -int nl_sendmsg(struct nl_sock *sk, struct nl_msg *msg, struct msghdr *hdr) -{ - struct nl_cb *cb; - int ret; - - struct iovec iov = { - .iov_base = (void *) nlmsg_hdr(msg), - .iov_len = nlmsg_hdr(msg)->nlmsg_len, - }; - - hdr->msg_iov = &iov; - hdr->msg_iovlen = 1; - - nlmsg_set_src(msg, &sk->s_local); - - cb = sk->s_cb; - if (cb->cb_set[NL_CB_MSG_OUT]) - if (nl_cb_call(cb, NL_CB_MSG_OUT, msg) != NL_OK) - return 0; - - ret = sendmsg(sk->s_fd, hdr, 0); - if (ret < 0) - return -nl_syserr2nlerr(errno); - - return ret; -} - - -/** - * Send netlink message. - * @arg sk Netlink socket. - * @arg msg Netlink message to be sent. - * @see nl_sendmsg() - * @return Number of characters sent on success or a negative error code. - */ -int nl_send(struct nl_sock *sk, struct nl_msg *msg) -{ - struct sockaddr_nl *dst; - struct ucred *creds; - - struct msghdr hdr = { - .msg_name = (void *) &sk->s_peer, - .msg_namelen = sizeof(struct sockaddr_nl), - }; - - /* Overwrite destination if specified in the message itself, defaults - * to the peer address of the socket. - */ - dst = nlmsg_get_dst(msg); - if (dst->nl_family == AF_NETLINK) - hdr.msg_name = dst; - - /* Add credentials if present. */ - creds = nlmsg_get_creds(msg); - if (creds != NULL) { - char buf[CMSG_SPACE(sizeof(struct ucred))]; - struct cmsghdr *cmsg; - - hdr.msg_control = buf; - hdr.msg_controllen = sizeof(buf); - - cmsg = CMSG_FIRSTHDR(&hdr); - cmsg->cmsg_level = SOL_SOCKET; - cmsg->cmsg_type = SCM_CREDENTIALS; - cmsg->cmsg_len = CMSG_LEN(sizeof(struct ucred)); - memcpy(CMSG_DATA(cmsg), creds, sizeof(struct ucred)); - } - - return nl_sendmsg(sk, msg, &hdr); -} - -/** - * Send netlink message and check & extend header values as needed. - * @arg sk Netlink socket. - * @arg msg Netlink message to be sent. - * - * Checks the netlink message \c nlh for completness and extends it - * as required before sending it out. Checked fields include pid, - * sequence nr, and flags. - * - * @see nl_send() - * @return Number of characters sent or a negative error code. - */ -int nl_send_auto_complete(struct nl_sock *sk, struct nl_msg *msg) -{ - struct nlmsghdr *nlh; - struct nl_cb *cb = sk->s_cb; - - nlh = nlmsg_hdr(msg); - if (nlh->nlmsg_pid == 0) - nlh->nlmsg_pid = sk->s_local.nl_pid; - - if (nlh->nlmsg_seq == 0) - nlh->nlmsg_seq = sk->s_seq_next++; - - if (msg->nm_protocol == -1) - msg->nm_protocol = sk->s_proto; - - nlh->nlmsg_flags |= NLM_F_REQUEST; - - if (!(sk->s_flags & NL_NO_AUTO_ACK)) - nlh->nlmsg_flags |= NLM_F_ACK; - - if (cb->cb_send_ow) - return cb->cb_send_ow(sk, msg); - else - return nl_send(sk, msg); -} - -/** - * Send simple netlink message using nl_send_auto_complete() - * @arg sk Netlink socket. - * @arg type Netlink message type. - * @arg flags Netlink message flags. - * @arg buf Data buffer. - * @arg size Size of data buffer. - * - * Builds a netlink message with the specified type and flags and - * appends the specified data as payload to the message. - * - * @see nl_send_auto_complete() - * @return Number of characters sent on success or a negative error code. - */ -int nl_send_simple(struct nl_sock *sk, int type, int flags, void *buf, - size_t size) -{ - int err; - struct nl_msg *msg; - - msg = nlmsg_alloc_simple(type, flags); - if (!msg) - return -NLE_NOMEM; - - if (buf && size) { - err = nlmsg_append(msg, buf, size, NLMSG_ALIGNTO); - if (err < 0) - goto errout; - } - - - err = nl_send_auto_complete(sk, msg); -errout: - nlmsg_free(msg); - - return err; -} - -/** @} */ - -/** - * @name Receive - * @{ - */ - -/** - * Receive data from netlink socket - * @arg sk Netlink socket. - * @arg nla Destination pointer for peer's netlink address. - * @arg buf Destination pointer for message content. - * @arg creds Destination pointer for credentials. - * - * Receives a netlink message, allocates a buffer in \c *buf and - * stores the message content. The peer's netlink address is stored - * in \c *nla. The caller is responsible for freeing the buffer allocated - * in \c *buf if a positive value is returned. Interrupted system calls - * are handled by repeating the read. The input buffer size is determined - * by peeking before the actual read is done. - * - * A non-blocking sockets causes the function to return immediately with - * a return value of 0 if no data is available. - * - * @return Number of octets read, 0 on EOF or a negative error code. - */ -int nl_recv(struct nl_sock *sk, struct sockaddr_nl *nla, - unsigned char **buf, struct ucred **creds) -{ - int n; - int flags = 0; - static int page_size = 0; - struct iovec iov; - struct msghdr msg = { - .msg_name = (void *) nla, - .msg_namelen = sizeof(struct sockaddr_nl), - .msg_iov = &iov, - .msg_iovlen = 1, - .msg_control = NULL, - .msg_controllen = 0, - .msg_flags = 0, - }; - struct cmsghdr *cmsg; - - if (sk->s_flags & NL_MSG_PEEK) - flags |= MSG_PEEK; - - if (page_size == 0) - page_size = getpagesize() * 4; - - iov.iov_len = page_size; - iov.iov_base = *buf = malloc(iov.iov_len); - - if (sk->s_flags & NL_SOCK_PASSCRED) { - msg.msg_controllen = CMSG_SPACE(sizeof(struct ucred)); - msg.msg_control = calloc(1, msg.msg_controllen); - } -retry: - - n = recvmsg(sk->s_fd, &msg, flags); - if (!n) - goto abort; - else if (n < 0) { - if (errno == EINTR) { - NL_DBG(3, "recvmsg() returned EINTR, retrying\n"); - goto retry; - } else if (errno == EAGAIN) { - NL_DBG(3, "recvmsg() returned EAGAIN, aborting\n"); - goto abort; - } else { - free(msg.msg_control); - free(*buf); - return -nl_syserr2nlerr(errno); - } - } - - if (iov.iov_len < n || - msg.msg_flags & MSG_TRUNC) { - /* Provided buffer is not long enough, enlarge it - * and try again. */ - iov.iov_len *= 2; - iov.iov_base = *buf = realloc(*buf, iov.iov_len); - goto retry; - } else if (msg.msg_flags & MSG_CTRUNC) { - msg.msg_controllen *= 2; - msg.msg_control = realloc(msg.msg_control, msg.msg_controllen); - goto retry; - } else if (flags != 0) { - /* Buffer is big enough, do the actual reading */ - flags = 0; - goto retry; - } - - if (msg.msg_namelen != sizeof(struct sockaddr_nl)) { - free(msg.msg_control); - free(*buf); - return -NLE_NOADDR; - } - - for (cmsg = CMSG_FIRSTHDR(&msg); cmsg; cmsg = CMSG_NXTHDR(&msg, cmsg)) { - if (cmsg->cmsg_level == SOL_SOCKET && - cmsg->cmsg_type == SCM_CREDENTIALS) { - *creds = calloc(1, sizeof(struct ucred)); - memcpy(*creds, CMSG_DATA(cmsg), sizeof(struct ucred)); - break; - } - } - - free(msg.msg_control); - return n; - -abort: - free(msg.msg_control); - free(*buf); - return 0; -} - -#define NL_CB_CALL(cb, type, msg) \ -do { \ - err = nl_cb_call(cb, type, msg); \ - switch (err) { \ - case NL_OK: \ - err = 0; \ - break; \ - case NL_SKIP: \ - goto skip; \ - case NL_STOP: \ - goto stop; \ - default: \ - goto out; \ - } \ -} while (0) - -static int recvmsgs(struct nl_sock *sk, struct nl_cb *cb) -{ - int n, err = 0, multipart = 0; - unsigned char *buf = NULL; - struct nlmsghdr *hdr; - struct sockaddr_nl nla = {0}; - struct nl_msg *msg = NULL; - struct ucred *creds = NULL; - -continue_reading: - NL_DBG(3, "Attempting to read from %p\n", sk); - if (cb->cb_recv_ow) - n = cb->cb_recv_ow(sk, &nla, &buf, &creds); - else - n = nl_recv(sk, &nla, &buf, &creds); - - if (n <= 0) - return n; - - NL_DBG(3, "recvmsgs(%p): Read %d bytes\n", sk, n); - - hdr = (struct nlmsghdr *) buf; - while (nlmsg_ok(hdr, n)) { - NL_DBG(3, "recgmsgs(%p): Processing valid message...\n", sk); - - nlmsg_free(msg); - msg = nlmsg_convert(hdr); - if (!msg) { - err = -NLE_NOMEM; - goto out; - } - - nlmsg_set_proto(msg, sk->s_proto); - nlmsg_set_src(msg, &nla); - if (creds) - nlmsg_set_creds(msg, creds); - - /* Raw callback is the first, it gives the most control - * to the user and he can do his very own parsing. */ - if (cb->cb_set[NL_CB_MSG_IN]) - NL_CB_CALL(cb, NL_CB_MSG_IN, msg); - - /* Sequence number checking. The check may be done by - * the user, otherwise a very simple check is applied - * enforcing strict ordering */ - if (cb->cb_set[NL_CB_SEQ_CHECK]) - NL_CB_CALL(cb, NL_CB_SEQ_CHECK, msg); - else if (hdr->nlmsg_seq != sk->s_seq_expect) { - if (cb->cb_set[NL_CB_INVALID]) - NL_CB_CALL(cb, NL_CB_INVALID, msg); - else { - err = -NLE_SEQ_MISMATCH; - goto out; - } - } - - if (hdr->nlmsg_type == NLMSG_DONE || - hdr->nlmsg_type == NLMSG_ERROR || - hdr->nlmsg_type == NLMSG_NOOP || - hdr->nlmsg_type == NLMSG_OVERRUN) { - /* We can't check for !NLM_F_MULTI since some netlink - * users in the kernel are broken. */ - sk->s_seq_expect++; - NL_DBG(3, "recvmsgs(%p): Increased expected " \ - "sequence number to %d\n", - sk, sk->s_seq_expect); - } - - if (hdr->nlmsg_flags & NLM_F_MULTI) - multipart = 1; - - /* Other side wishes to see an ack for this message */ - if (hdr->nlmsg_flags & NLM_F_ACK) { - if (cb->cb_set[NL_CB_SEND_ACK]) - NL_CB_CALL(cb, NL_CB_SEND_ACK, msg); - else { - /* FIXME: implement */ - } - } - - /* messages terminates a multpart message, this is - * usually the end of a message and therefore we slip - * out of the loop by default. the user may overrule - * this action by skipping this packet. */ - if (hdr->nlmsg_type == NLMSG_DONE) { - multipart = 0; - if (cb->cb_set[NL_CB_FINISH]) - NL_CB_CALL(cb, NL_CB_FINISH, msg); - } - - /* Message to be ignored, the default action is to - * skip this message if no callback is specified. The - * user may overrule this action by returning - * NL_PROCEED. */ - else if (hdr->nlmsg_type == NLMSG_NOOP) { - if (cb->cb_set[NL_CB_SKIPPED]) - NL_CB_CALL(cb, NL_CB_SKIPPED, msg); - else - goto skip; - } - - /* Data got lost, report back to user. The default action is to - * quit parsing. The user may overrule this action by retuning - * NL_SKIP or NL_PROCEED (dangerous) */ - else if (hdr->nlmsg_type == NLMSG_OVERRUN) { - if (cb->cb_set[NL_CB_OVERRUN]) - NL_CB_CALL(cb, NL_CB_OVERRUN, msg); - else { - err = -NLE_MSG_OVERFLOW; - goto out; - } - } - - /* Message carries a nlmsgerr */ - else if (hdr->nlmsg_type == NLMSG_ERROR) { - struct nlmsgerr *e = nlmsg_data(hdr); - - if (hdr->nlmsg_len < nlmsg_msg_size(sizeof(*e))) { - /* Truncated error message, the default action - * is to stop parsing. The user may overrule - * this action by returning NL_SKIP or - * NL_PROCEED (dangerous) */ - if (cb->cb_set[NL_CB_INVALID]) - NL_CB_CALL(cb, NL_CB_INVALID, msg); - else { - err = -NLE_MSG_TRUNC; - goto out; - } - } else if (e->error) { - /* Error message reported back from kernel. */ - if (cb->cb_err) { - err = cb->cb_err(&nla, e, - cb->cb_err_arg); - if (err < 0) - goto out; - else if (err == NL_SKIP) - goto skip; - else if (err == NL_STOP) { - err = -nl_syserr2nlerr(e->error); - goto out; - } - } else { - err = -nl_syserr2nlerr(e->error); - goto out; - } - } else if (cb->cb_set[NL_CB_ACK]) - NL_CB_CALL(cb, NL_CB_ACK, msg); - } else { - /* Valid message (not checking for MULTIPART bit to - * get along with broken kernels. NL_SKIP has no - * effect on this. */ - if (cb->cb_set[NL_CB_VALID]) - NL_CB_CALL(cb, NL_CB_VALID, msg); - } -skip: - err = 0; - hdr = nlmsg_next(hdr, &n); - } - - nlmsg_free(msg); - free(buf); - free(creds); - buf = NULL; - msg = NULL; - creds = NULL; - - if (multipart) { - /* Multipart message not yet complete, continue reading */ - goto continue_reading; - } -stop: - err = 0; -out: - nlmsg_free(msg); - free(buf); - free(creds); - - return err; -} - -/** - * Receive a set of messages from a netlink socket. - * @arg sk Netlink socket. - * @arg cb set of callbacks to control behaviour. - * - * Repeatedly calls nl_recv() or the respective replacement if provided - * by the application (see nl_cb_overwrite_recv()) and parses the - * received data as netlink messages. Stops reading if one of the - * callbacks returns NL_STOP or nl_recv returns either 0 or a negative error code. - * - * A non-blocking sockets causes the function to return immediately if - * no data is available. - * - * @return 0 on success or a negative error code from nl_recv(). - */ -int nl_recvmsgs(struct nl_sock *sk, struct nl_cb *cb) -{ - if (cb->cb_recvmsgs_ow) - return cb->cb_recvmsgs_ow(sk, cb); - else - return recvmsgs(sk, cb); -} - - -static int ack_wait_handler(struct nl_msg *msg, void *arg) -{ - return NL_STOP; -} - -/** - * Wait for ACK. - * @arg sk Netlink socket. - * @pre The netlink socket must be in blocking state. - * - * Waits until an ACK is received for the latest not yet acknowledged - * netlink message. - */ -int nl_wait_for_ack(struct nl_sock *sk) -{ - int err; - struct nl_cb *cb; - - cb = nl_cb_clone(sk->s_cb); - if (cb == NULL) - return -NLE_NOMEM; - - nl_cb_set(cb, NL_CB_ACK, NL_CB_CUSTOM, ack_wait_handler, NULL); - err = nl_recvmsgs(sk, cb); - nl_cb_put(cb); - - return err; -} - -/** @} */ - -/** @} */ diff --git a/package/libs/libnl-tiny/src/object.c b/package/libs/libnl-tiny/src/object.c deleted file mode 100644 index 384bacdc6cb..00000000000 --- a/package/libs/libnl-tiny/src/object.c +++ /dev/null @@ -1,147 +0,0 @@ -/* - * lib/object.c Generic Cacheable Object - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation version 2.1 - * of the License. - * - * Copyright (c) 2003-2008 Thomas Graf - */ - -/** - * @ingroup cache - * @defgroup object Object - * @{ - */ - -#include -#include -#include -#include -#include - -static inline struct nl_object_ops *obj_ops(struct nl_object *obj) -{ - if (!obj->ce_ops) - BUG(); - - return obj->ce_ops; -} - -/** - * @name Object Creation/Deletion - * @{ - */ - -/** - * Allocate a new object of kind specified by the operations handle - * @arg ops cache operations handle - * @return The new object or NULL - */ -struct nl_object *nl_object_alloc(struct nl_object_ops *ops) -{ - struct nl_object *new; - - if (ops->oo_size < sizeof(*new)) - BUG(); - - new = calloc(1, ops->oo_size); - if (!new) - return NULL; - - new->ce_refcnt = 1; - nl_init_list_head(&new->ce_list); - - new->ce_ops = ops; - if (ops->oo_constructor) - ops->oo_constructor(new); - - NL_DBG(4, "Allocated new object %p\n", new); - - return new; -} - -struct nl_derived_object { - NLHDR_COMMON - char data; -}; - -/** - * Allocate a new object and copy all data from an existing object - * @arg obj object to inherite data from - * @return The new object or NULL. - */ -struct nl_object *nl_object_clone(struct nl_object *obj) -{ - struct nl_object *new; - struct nl_object_ops *ops = obj_ops(obj); - int doff = offsetof(struct nl_derived_object, data); - int size; - - new = nl_object_alloc(ops); - if (!new) - return NULL; - - size = ops->oo_size - doff; - if (size < 0) - BUG(); - - new->ce_ops = obj->ce_ops; - new->ce_msgtype = obj->ce_msgtype; - - if (size) - memcpy((void *)new + doff, (void *)obj + doff, size); - - if (ops->oo_clone) { - if (ops->oo_clone(new, obj) < 0) { - nl_object_free(new); - return NULL; - } - } else if (size && ops->oo_free_data) - BUG(); - - return new; -} - -/** - * Free a cacheable object - * @arg obj object to free - * - * @return 0 or a negative error code. - */ -void nl_object_free(struct nl_object *obj) -{ - struct nl_object_ops *ops = obj_ops(obj); - - if (obj->ce_refcnt > 0) - NL_DBG(1, "Warning: Freeing object in use...\n"); - - if (obj->ce_cache) - nl_cache_remove(obj); - - if (ops->oo_free_data) - ops->oo_free_data(obj); - - free(obj); - - NL_DBG(4, "Freed object %p\n", obj); -} - -/** @} */ - -/** - * @name Reference Management - * @{ - */ - -/** @} */ - -/** - * @name Utillities - * @{ - */ - -/** @} */ - -/** @} */ diff --git a/package/libs/libnl-tiny/src/socket.c b/package/libs/libnl-tiny/src/socket.c deleted file mode 100644 index 1429825e636..00000000000 --- a/package/libs/libnl-tiny/src/socket.c +++ /dev/null @@ -1,406 +0,0 @@ -/* - * lib/socket.c Netlink Socket - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation version 2.1 - * of the License. - * - * Copyright (c) 2003-2008 Thomas Graf - */ - -/** - * @ingroup core - * @defgroup socket Socket - * @{ - */ - -#include -#include -#include -#include -#include -#include - -static uint32_t used_ports_map[32]; - -static uint32_t generate_local_port(void) -{ - int i, n; - uint32_t pid = getpid() & 0x3FFFFF; - - for (i = 0; i < 32; i++) { - if (used_ports_map[i] == 0xFFFFFFFF) - continue; - - for (n = 0; n < 32; n++) { - if (1UL & (used_ports_map[i] >> n)) - continue; - - used_ports_map[i] |= (1UL << n); - n += (i * 32); - - /* PID_MAX_LIMIT is currently at 2^22, leaving 10 bit - * to, i.e. 1024 unique ports per application. */ - return pid + (n << 22); - - } - } - - /* Out of sockets in our own PID namespace, what to do? FIXME */ - return UINT_MAX; -} - -static void release_local_port(uint32_t port) -{ - int nr; - - if (port == UINT_MAX) - return; - - nr = port >> 22; - used_ports_map[nr / 32] &= ~(1 << nr % 32); -} - -/** - * @name Allocation - * @{ - */ - -static struct nl_sock *__alloc_socket(struct nl_cb *cb) -{ - struct nl_sock *sk; - - sk = calloc(1, sizeof(*sk)); - if (!sk) - return NULL; - - sk->s_fd = -1; - sk->s_cb = cb; - sk->s_local.nl_family = AF_NETLINK; - sk->s_peer.nl_family = AF_NETLINK; - sk->s_seq_expect = sk->s_seq_next = time(0); - sk->s_local.nl_pid = generate_local_port(); - if (sk->s_local.nl_pid == UINT_MAX) { - nl_socket_free(sk); - return NULL; - } - - return sk; -} - -/** - * Allocate new netlink socket - * - * @return Newly allocated netlink socket or NULL. - */ -struct nl_sock *nl_socket_alloc(void) -{ - struct nl_cb *cb; - - cb = nl_cb_alloc(NL_CB_DEFAULT); - if (!cb) - return NULL; - - return __alloc_socket(cb); -} - -/** - * Allocate new socket with custom callbacks - * @arg cb Callback handler - * - * The reference to the callback handler is taken into account - * automatically, it is released again upon calling nl_socket_free(). - * - *@return Newly allocted socket handle or NULL. - */ -struct nl_sock *nl_socket_alloc_cb(struct nl_cb *cb) -{ - if (cb == NULL) - BUG(); - - return __alloc_socket(nl_cb_get(cb)); -} - -/** - * Free a netlink socket. - * @arg sk Netlink socket. - */ -void nl_socket_free(struct nl_sock *sk) -{ - if (!sk) - return; - - if (sk->s_fd >= 0) - close(sk->s_fd); - - if (!(sk->s_flags & NL_OWN_PORT)) - release_local_port(sk->s_local.nl_pid); - - nl_cb_put(sk->s_cb); - free(sk); -} - -/** @} */ - -/** - * @name Sequence Numbers - * @{ - */ - -static int noop_seq_check(struct nl_msg *msg, void *arg) -{ - return NL_OK; -} - - -/** - * Disable sequence number checking. - * @arg sk Netlink socket. - * - * Disables checking of sequence numbers on the netlink socket This is - * required to allow messages to be processed which were not requested by - * a preceding request message, e.g. netlink events. - * - * @note This function modifies the NL_CB_SEQ_CHECK configuration in - * the callback handle associated with the socket. - */ -void nl_socket_disable_seq_check(struct nl_sock *sk) -{ - nl_cb_set(sk->s_cb, NL_CB_SEQ_CHECK, - NL_CB_CUSTOM, noop_seq_check, NULL); -} - -/** @} */ - -/** - * Set local port of socket - * @arg sk Netlink socket. - * @arg port Local port identifier - * - * Assigns a local port identifier to the socket. If port is 0 - * a unique port identifier will be generated automatically. - */ -void nl_socket_set_local_port(struct nl_sock *sk, uint32_t port) -{ - if (port == 0) { - port = generate_local_port(); - sk->s_flags &= ~NL_OWN_PORT; - } else { - if (!(sk->s_flags & NL_OWN_PORT)) - release_local_port(sk->s_local.nl_pid); - sk->s_flags |= NL_OWN_PORT; - } - - sk->s_local.nl_pid = port; -} - -/** @} */ - -/** - * @name Group Subscriptions - * @{ - */ - -/** - * Join groups - * @arg sk Netlink socket - * @arg group Group identifier - * - * Joins the specified groups using the modern socket option which - * is available since kernel version 2.6.14. It allows joining an - * almost arbitary number of groups without limitation. The list - * of groups has to be terminated by 0 (%NFNLGRP_NONE). - * - * Make sure to use the correct group definitions as the older - * bitmask definitions for nl_join_groups() are likely to still - * be present for backward compatibility reasons. - * - * @return 0 on sucess or a negative error code. - */ -int nl_socket_add_memberships(struct nl_sock *sk, int group, ...) -{ - int err; - va_list ap; - - if (sk->s_fd == -1) - return -NLE_BAD_SOCK; - - va_start(ap, group); - - while (group != 0) { - if (group < 0) - return -NLE_INVAL; - - err = setsockopt(sk->s_fd, SOL_NETLINK, NETLINK_ADD_MEMBERSHIP, - &group, sizeof(group)); - if (err < 0) - return -nl_syserr2nlerr(errno); - - group = va_arg(ap, int); - } - - va_end(ap); - - return 0; -} - -/** - * Leave groups - * @arg sk Netlink socket - * @arg group Group identifier - * - * Leaves the specified groups using the modern socket option - * which is available since kernel version 2.6.14. The list of groups - * has to terminated by 0 (%NFNLGRP_NONE). - * - * @see nl_socket_add_membership - * @return 0 on success or a negative error code. - */ -int nl_socket_drop_memberships(struct nl_sock *sk, int group, ...) -{ - int err; - va_list ap; - - if (sk->s_fd == -1) - return -NLE_BAD_SOCK; - - va_start(ap, group); - - while (group != 0) { - if (group < 0) - return -NLE_INVAL; - - err = setsockopt(sk->s_fd, SOL_NETLINK, NETLINK_DROP_MEMBERSHIP, - &group, sizeof(group)); - if (err < 0) - return -nl_syserr2nlerr(errno); - - group = va_arg(ap, int); - } - - va_end(ap); - - return 0; -} - - -/** @} */ - -/** - * Set file descriptor of socket to non-blocking state - * @arg sk Netlink socket. - * - * @return 0 on success or a negative error code. - */ -int nl_socket_set_nonblocking(struct nl_sock *sk) -{ - if (sk->s_fd == -1) - return -NLE_BAD_SOCK; - - if (fcntl(sk->s_fd, F_SETFL, O_NONBLOCK) < 0) - return -nl_syserr2nlerr(errno); - - return 0; -} - -/** @} */ - -/** - * @name Utilities - * @{ - */ - -/** - * Set socket buffer size of netlink socket. - * @arg sk Netlink socket. - * @arg rxbuf New receive socket buffer size in bytes. - * @arg txbuf New transmit socket buffer size in bytes. - * - * Sets the socket buffer size of a netlink socket to the specified - * values \c rxbuf and \c txbuf. Providing a value of \c 0 assumes a - * good default value. - * - * @note It is not required to call this function prior to nl_connect(). - * @return 0 on sucess or a negative error code. - */ -int nl_socket_set_buffer_size(struct nl_sock *sk, int rxbuf, int txbuf) -{ - int err; - - if (rxbuf <= 0) - rxbuf = 32768; - - if (txbuf <= 0) - txbuf = 32768; - - if (sk->s_fd == -1) - return -NLE_BAD_SOCK; - - err = setsockopt(sk->s_fd, SOL_SOCKET, SO_SNDBUF, - &txbuf, sizeof(txbuf)); - if (err < 0) - return -nl_syserr2nlerr(errno); - - err = setsockopt(sk->s_fd, SOL_SOCKET, SO_RCVBUF, - &rxbuf, sizeof(rxbuf)); - if (err < 0) - return -nl_syserr2nlerr(errno); - - sk->s_flags |= NL_SOCK_BUFSIZE_SET; - - return 0; -} - -/** - * Enable/disable credential passing on netlink socket. - * @arg sk Netlink socket. - * @arg state New state (0 - disabled, 1 - enabled) - * - * @return 0 on success or a negative error code - */ -int nl_socket_set_passcred(struct nl_sock *sk, int state) -{ - int err; - - if (sk->s_fd == -1) - return -NLE_BAD_SOCK; - - err = setsockopt(sk->s_fd, SOL_SOCKET, SO_PASSCRED, - &state, sizeof(state)); - if (err < 0) - return -nl_syserr2nlerr(errno); - - if (state) - sk->s_flags |= NL_SOCK_PASSCRED; - else - sk->s_flags &= ~NL_SOCK_PASSCRED; - - return 0; -} - -/** - * Enable/disable receival of additional packet information - * @arg sk Netlink socket. - * @arg state New state (0 - disabled, 1 - enabled) - * - * @return 0 on success or a negative error code - */ -int nl_socket_recv_pktinfo(struct nl_sock *sk, int state) -{ - int err; - - if (sk->s_fd == -1) - return -NLE_BAD_SOCK; - - err = setsockopt(sk->s_fd, SOL_NETLINK, NETLINK_PKTINFO, - &state, sizeof(state)); - if (err < 0) - return -nl_syserr2nlerr(errno); - - return 0; -} - -/** @} */ - -/** @} */ diff --git a/package/libs/libnl-tiny/src/unl.c b/package/libs/libnl-tiny/src/unl.c deleted file mode 100644 index 33c020ea13f..00000000000 --- a/package/libs/libnl-tiny/src/unl.c +++ /dev/null @@ -1,287 +0,0 @@ -#define _GNU_SOURCE -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "unl.h" - -static int unl_init(struct unl *unl) -{ - unl->sock = nl_socket_alloc(); - if (!unl->sock) - return -1; - - return 0; -} - -int unl_genl_init(struct unl *unl, const char *family) -{ - memset(unl, 0, sizeof(*unl)); - - if (unl_init(unl)) - goto error_out; - - unl->hdrlen = NLMSG_ALIGN(sizeof(struct genlmsghdr)); - unl->family_name = strdup(family); - if (!unl->family_name) - goto error; - - if (genl_connect(unl->sock)) - goto error; - - if (genl_ctrl_alloc_cache(unl->sock, &unl->cache)) - goto error; - - unl->family = genl_ctrl_search_by_name(unl->cache, family); - if (!unl->family) - goto error; - - return 0; - -error: - unl_free(unl); -error_out: - return -1; -} - -void unl_free(struct unl *unl) -{ - if (unl->family_name) - free(unl->family_name); - - if (unl->sock) - nl_socket_free(unl->sock); - - if (unl->cache) - nl_cache_free(unl->cache); - - memset(unl, 0, sizeof(*unl)); -} - -static int -ack_handler(struct nl_msg *msg, void *arg) -{ - int *err = arg; - *err = 0; - return NL_STOP; -} - -static int -finish_handler(struct nl_msg *msg, void *arg) -{ - int *err = arg; - *err = 0; - return NL_SKIP; -} - -static int -error_handler(struct sockaddr_nl *nla, struct nlmsgerr *err, void *arg) -{ - int *ret = arg; - *ret = err->error; - return NL_SKIP; -} - -struct nl_msg *unl_genl_msg(struct unl *unl, int cmd, bool dump) -{ - struct nl_msg *msg; - int flags = 0; - - msg = nlmsg_alloc(); - if (!msg) - goto out; - - if (dump) - flags |= NLM_F_DUMP; - - genlmsg_put(msg, NL_AUTO_PID, NL_AUTO_SEQ, - genl_family_get_id(unl->family), 0, flags, cmd, 0); - -out: - return msg; -} - -int unl_genl_request(struct unl *unl, struct nl_msg *msg, unl_cb handler, void *arg) -{ - struct nl_cb *cb; - int err; - - cb = nl_cb_alloc(NL_CB_CUSTOM); - err = nl_send_auto_complete(unl->sock, msg); - if (err < 0) - goto out; - - err = 1; - nl_cb_err(cb, NL_CB_CUSTOM, error_handler, &err); - nl_cb_set(cb, NL_CB_FINISH, NL_CB_CUSTOM, finish_handler, &err); - nl_cb_set(cb, NL_CB_ACK, NL_CB_CUSTOM, ack_handler, &err); - if (handler) - nl_cb_set(cb, NL_CB_VALID, NL_CB_CUSTOM, handler, arg); - - while (err > 0) - nl_recvmsgs(unl->sock, cb); - -out: - nlmsg_free(msg); - nl_cb_put(cb); - return err; -} - -static int request_single_cb(struct nl_msg *msg, void *arg) -{ - struct nl_msg **dest = arg; - - if (!*dest) { - nlmsg_get(msg); - *dest = msg; - } - return NL_SKIP; -} - -int unl_genl_request_single(struct unl *unl, struct nl_msg *msg, struct nl_msg **dest) -{ - *dest = NULL; - return unl_genl_request(unl, msg, request_single_cb, dest); -} - -static int no_seq_check(struct nl_msg *msg, void *arg) -{ - return NL_OK; -} - -void unl_genl_loop(struct unl *unl, unl_cb handler, void *arg) -{ - struct nl_cb *cb; - - cb = nl_cb_alloc(NL_CB_CUSTOM); - unl->loop_done = false; - nl_cb_set(cb, NL_CB_SEQ_CHECK, NL_CB_CUSTOM, no_seq_check, NULL); - nl_cb_set(cb, NL_CB_VALID, NL_CB_CUSTOM, handler, arg); - - while (!unl->loop_done) - nl_recvmsgs(unl->sock, cb); - - nl_cb_put(cb); -} - -int unl_genl_multicast_id(struct unl *unl, const char *name) -{ - struct nlattr *tb[CTRL_ATTR_MCAST_GRP_MAX + 1]; - struct nlattr *groups, *group; - struct nl_msg *msg; - int ctrlid; - int ret = -1; - int rem; - - msg = nlmsg_alloc(); - if (!msg) - return -1; - - ctrlid = genl_ctrl_resolve(unl->sock, "nlctrl"); - genlmsg_put(msg, 0, 0, ctrlid, 0, 0, CTRL_CMD_GETFAMILY, 0); - NLA_PUT_STRING(msg, CTRL_ATTR_FAMILY_NAME, unl->family_name); - unl_genl_request_single(unl, msg, &msg); - if (!msg) - return -1; - - groups = unl_find_attr(unl, msg, CTRL_ATTR_MCAST_GROUPS); - if (!groups) - goto nla_put_failure; - - nla_for_each_nested(group, groups, rem) { - const char *gn; - - nla_parse(tb, CTRL_ATTR_MCAST_GRP_MAX, nla_data(group), - nla_len(group), NULL); - - if (!tb[CTRL_ATTR_MCAST_GRP_NAME] || - !tb[CTRL_ATTR_MCAST_GRP_ID]) - continue; - - gn = nla_data(tb[CTRL_ATTR_MCAST_GRP_NAME]); - if (strcmp(gn, name) != 0) - continue; - - ret = nla_get_u32(tb[CTRL_ATTR_MCAST_GRP_ID]); - break; - } - -nla_put_failure: - nlmsg_free(msg); - return ret; -} - -int unl_genl_subscribe(struct unl *unl, const char *name) -{ - int mcid; - - mcid = unl_genl_multicast_id(unl, name); - if (mcid < 0) - return mcid; - - return nl_socket_add_membership(unl->sock, mcid); -} - -int unl_genl_unsubscribe(struct unl *unl, const char *name) -{ - int mcid; - - mcid = unl_genl_multicast_id(unl, name); - if (mcid < 0) - return mcid; - - return nl_socket_drop_membership(unl->sock, mcid); -} - -int unl_nl80211_phy_lookup(const char *name) -{ - char buf[32]; - int fd, pos; - - snprintf(buf, sizeof(buf), "/sys/class/ieee80211/%s/index", name); - - fd = open(buf, O_RDONLY); - if (fd < 0) - return -1; - pos = read(fd, buf, sizeof(buf) - 1); - if (pos < 0) { - close(fd); - return -1; - } - buf[pos] = '\0'; - close(fd); - return atoi(buf); -} - -int unl_nl80211_wdev_to_phy(struct unl *unl, int wdev) -{ - struct nl_msg *msg; - struct nlattr *attr; - int ret = -1; - - msg = unl_genl_msg(unl, NL80211_CMD_GET_INTERFACE, false); - if (!msg) - return -1; - - NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, wdev); - if (unl_genl_request_single(unl, msg, &msg) < 0) - return -1; - - attr = unl_find_attr(unl, msg, NL80211_ATTR_WIPHY); - if (!attr) - goto out; - - ret = nla_get_u32(attr); -out: -nla_put_failure: - nlmsg_free(msg); - return ret; -} - - diff --git a/package/libs/libubox/Makefile b/package/libs/libubox/Makefile index 49bf5837426..7df16dedffd 100644 --- a/package/libs/libubox/Makefile +++ b/package/libs/libubox/Makefile @@ -64,7 +64,7 @@ define Package/libubox-lua endef TARGET_CFLAGS += -I$(STAGING_DIR)/usr/include -CMAKE_OPTIONS = \ +CMAKE_OPTIONS += \ -DLUAPATH=/usr/lib/lua define Package/libubox/install diff --git a/package/libs/zlib/Makefile b/package/libs/zlib/Makefile index c7a8415c79f..f30accf163b 100644 --- a/package/libs/zlib/Makefile +++ b/package/libs/zlib/Makefile @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=zlib PKG_VERSION:=1.2.11 -PKG_RELEASE:=3 +PKG_RELEASE:=6 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz PKG_SOURCE_URL:=@SF/libpng http://www.zlib.net diff --git a/package/libs/zlib/patches/002-arm-specific-optimisations-for-inflate.patch b/package/libs/zlib/patches/002-arm-specific-optimisations-for-inflate.patch index 475ed6f3e94..d181b034e51 100644 --- a/package/libs/zlib/patches/002-arm-specific-optimisations-for-inflate.patch +++ b/package/libs/zlib/patches/002-arm-specific-optimisations-for-inflate.patch @@ -1907,505 +1907,3 @@ index 00000000..ac333e8c + state = (struct inflate_state FAR *)strm->state; + return (unsigned long)(state->next - state->codes); +} - -From 247147654fe5cd11cf15d8dff91440405ea57040 Mon Sep 17 00:00:00 2001 -From: Simon Hosie -Date: Wed, 12 Apr 2017 15:44:21 -0700 -Subject: [PATCH 2/2] Inflate using wider loads and stores - -In inflate_fast() the output pointer always has plenty of room to write. This -means that so long as the target is capable, wide un-aligned loads and stores -can be used to transfer several bytes at once. When the reference distance is -too short simply unroll the data a little to increase the distance. - -Change-Id: I59854eb25d2b1e43561c8a2afaf9175bf10cf674 ---- - contrib/arm/chunkcopy.h | 279 ++++++++++++++++++++++++++++++++++++++++++++++++ - contrib/arm/inffast.c | 96 +++++++---------- - contrib/arm/inflate.c | 22 ++-- - 3 files changed, 335 insertions(+), 62 deletions(-) - create mode 100644 contrib/arm/chunkcopy.h - -diff --git a/contrib/arm/chunkcopy.h b/contrib/arm/chunkcopy.h -new file mode 100644 -index 00000000..2d6fd6f9 ---- /dev/null -+++ b/contrib/arm/chunkcopy.h -@@ -0,0 +1,279 @@ -+/* chunkcopy.h -- fast copies and sets -+ * Copyright (C) 2017 ARM, Inc. -+ * For conditions of distribution and use, see copyright notice in zlib.h -+ */ -+ -+#ifndef CHUNKCOPY_H -+#define CHUNKCOPY_H -+ -+#include "zutil.h" -+#include -+ -+#if __STDC_VERSION__ >= 199901L -+#define Z_RESTRICT restrict -+#else -+#define Z_RESTRICT -+#endif -+ -+typedef uint8x16_t chunkcopy_chunk_t; -+#define CHUNKCOPY_CHUNK_SIZE sizeof(chunkcopy_chunk_t) -+ -+/* -+ Ask the compiler to perform a wide, unaligned load with an machine -+ instruction appropriate for the chunkcopy_chunk_t type. -+ */ -+static inline chunkcopy_chunk_t loadchunk(const unsigned char FAR *s) { -+ chunkcopy_chunk_t c; -+ __builtin_memcpy(&c, s, sizeof(c)); -+ return c; -+} -+ -+/* -+ Ask the compiler to perform a wide, unaligned store with an machine -+ instruction appropriate for the chunkcopy_chunk_t type. -+ */ -+static inline void storechunk(unsigned char FAR *d, chunkcopy_chunk_t c) { -+ __builtin_memcpy(d, &c, sizeof(c)); -+} -+ -+/* -+ Perform a memcpy-like operation, but assume that length is non-zero and that -+ it's OK to overwrite at least CHUNKCOPY_CHUNK_SIZE bytes of output even if -+ the length is shorter than this. -+ -+ It also guarantees that it will properly unroll the data if the distance -+ between `out` and `from` is at least CHUNKCOPY_CHUNK_SIZE, which we rely on -+ in chunkcopy_relaxed(). -+ -+ Aside from better memory bus utilisation, this means that short copies -+ (CHUNKCOPY_CHUNK_SIZE bytes or fewer) will fall straight through the loop -+ without iteration, which will hopefully make the branch prediction more -+ reliable. -+ */ -+static inline unsigned char FAR *chunkcopy_core(unsigned char FAR *out, -+ const unsigned char FAR *from, -+ unsigned len) { -+ int bump = (--len % CHUNKCOPY_CHUNK_SIZE) + 1; -+ storechunk(out, loadchunk(from)); -+ out += bump; -+ from += bump; -+ len /= CHUNKCOPY_CHUNK_SIZE; -+ while (len-- > 0) { -+ storechunk(out, loadchunk(from)); -+ out += CHUNKCOPY_CHUNK_SIZE; -+ from += CHUNKCOPY_CHUNK_SIZE; -+ } -+ return out; -+} -+ -+/* -+ Like chunkcopy_core, but avoid writing beyond of legal output. -+ -+ Accepts an additional pointer to the end of safe output. A generic safe -+ copy would use (out + len), but it's normally the case that the end of the -+ output buffer is beyond the end of the current copy, and this can still be -+ exploited. -+ */ -+static inline unsigned char FAR *chunkcopy_core_safe(unsigned char FAR *out, -+ const unsigned char FAR * from, -+ unsigned len, -+ unsigned char FAR *limit) { -+ Assert(out + len <= limit, "chunk copy exceeds safety limit"); -+ if (limit - out < CHUNKCOPY_CHUNK_SIZE) { -+ const unsigned char FAR * Z_RESTRICT rfrom = from; -+ if (len & 8) { __builtin_memcpy(out, rfrom, 8); out += 8; rfrom += 8; } -+ if (len & 4) { __builtin_memcpy(out, rfrom, 4); out += 4; rfrom += 4; } -+ if (len & 2) { __builtin_memcpy(out, rfrom, 2); out += 2; rfrom += 2; } -+ if (len & 1) { *out++ = *rfrom++; } -+ return out; -+ } -+ return chunkcopy_core(out, from, len); -+} -+ -+/* -+ Perform short copies until distance can be rewritten as being at least -+ CHUNKCOPY_CHUNK_SIZE. -+ -+ This assumes that it's OK to overwrite at least the first -+ 2*CHUNKCOPY_CHUNK_SIZE bytes of output even if the copy is shorter than -+ this. This assumption holds within inflate_fast() which starts every -+ iteration with at least 258 bytes of output space available (258 being the -+ maximum length output from a single token; see inffast.c). -+ */ -+static inline unsigned char FAR *chunkunroll_relaxed(unsigned char FAR *out, -+ unsigned FAR *dist, -+ unsigned FAR *len) { -+ const unsigned char FAR *from = out - *dist; -+ while (*dist < *len && *dist < CHUNKCOPY_CHUNK_SIZE) { -+ storechunk(out, loadchunk(from)); -+ out += *dist; -+ *len -= *dist; -+ *dist += *dist; -+ } -+ return out; -+} -+ -+ -+static inline uint8x16_t chunkset_vld1q_dup_u8x8(const unsigned char FAR * Z_RESTRICT from) { -+#if defined(__clang__) || defined(__aarch64__) -+ return vreinterpretq_u8_u64(vld1q_dup_u64((void *)from)); -+#else -+ /* 32-bit GCC uses an alignment hint for vld1q_dup_u64, even when given a -+ * void pointer, so here's an alternate implementation. -+ */ -+ uint8x8_t h = vld1_u8(from); -+ return vcombine_u8(h, h); -+#endif -+} -+ -+/* -+ Perform an overlapping copy which behaves as a memset() operation, but -+ supporting periods other than one, and assume that length is non-zero and -+ that it's OK to overwrite at least CHUNKCOPY_CHUNK_SIZE*3 bytes of output -+ even if the length is shorter than this. -+ */ -+static inline unsigned char FAR *chunkset_core(unsigned char FAR *out, -+ unsigned period, -+ unsigned len) { -+ uint8x16_t f; -+ int bump = ((len - 1) % sizeof(f)) + 1; -+ -+ switch (period) { -+ case 1: -+ f = vld1q_dup_u8(out - 1); -+ vst1q_u8(out, f); -+ out += bump; -+ len -= bump; -+ while (len > 0) { -+ vst1q_u8(out, f); -+ out += sizeof(f); -+ len -= sizeof(f); -+ } -+ return out; -+ case 2: -+ f = vreinterpretq_u8_u16(vld1q_dup_u16((void *)(out - 2))); -+ vst1q_u8(out, f); -+ out += bump; -+ len -= bump; -+ if (len > 0) { -+ f = vreinterpretq_u8_u16(vld1q_dup_u16((void *)(out - 2))); -+ do { -+ vst1q_u8(out, f); -+ out += sizeof(f); -+ len -= sizeof(f); -+ } while (len > 0); -+ } -+ return out; -+ case 4: -+ f = vreinterpretq_u8_u32(vld1q_dup_u32((void *)(out - 4))); -+ vst1q_u8(out, f); -+ out += bump; -+ len -= bump; -+ if (len > 0) { -+ f = vreinterpretq_u8_u32(vld1q_dup_u32((void *)(out - 4))); -+ do { -+ vst1q_u8(out, f); -+ out += sizeof(f); -+ len -= sizeof(f); -+ } while (len > 0); -+ } -+ return out; -+ case 8: -+ f = chunkset_vld1q_dup_u8x8(out - 8); -+ vst1q_u8(out, f); -+ out += bump; -+ len -= bump; -+ if (len > 0) { -+ f = chunkset_vld1q_dup_u8x8(out - 8); -+ do { -+ vst1q_u8(out, f); -+ out += sizeof(f); -+ len -= sizeof(f); -+ } while (len > 0); -+ } -+ return out; -+ } -+ out = chunkunroll_relaxed(out, &period, &len); -+ return chunkcopy_core(out, out - period, len); -+} -+ -+/* -+ Perform a memcpy-like operation, but assume that length is non-zero and that -+ it's OK to overwrite at least CHUNKCOPY_CHUNK_SIZE bytes of output even if -+ the length is shorter than this. -+ -+ Unlike chunkcopy_core() above, no guarantee is made regarding the behaviour -+ of overlapping buffers, regardless of the distance between the pointers. -+ This is reflected in the `restrict`-qualified pointers, allowing the -+ compiler to reorder loads and stores. -+ */ -+static inline unsigned char FAR *chunkcopy_relaxed(unsigned char FAR * Z_RESTRICT out, -+ const unsigned char FAR * Z_RESTRICT from, -+ unsigned len) { -+ return chunkcopy_core(out, from, len); -+} -+ -+/* -+ Like chunkcopy_relaxed, but avoid writing beyond of legal output. -+ -+ Unlike chunkcopy_core_safe() above, no guarantee is made regarding the -+ behaviour of overlapping buffers, regardless of the distance between the -+ pointers. This is reflected in the `restrict`-qualified pointers, allowing -+ the compiler to reorder loads and stores. -+ -+ Accepts an additional pointer to the end of safe output. A generic safe -+ copy would use (out + len), but it's normally the case that the end of the -+ output buffer is beyond the end of the current copy, and this can still be -+ exploited. -+ */ -+static inline unsigned char FAR *chunkcopy_safe(unsigned char FAR *out, -+ const unsigned char FAR * Z_RESTRICT from, -+ unsigned len, -+ unsigned char FAR *limit) { -+ Assert(out + len <= limit, "chunk copy exceeds safety limit"); -+ return chunkcopy_core_safe(out, from, len, limit); -+} -+ -+/* -+ Perform chunky copy within the same buffer, where the source and destination -+ may potentially overlap. -+ -+ Assumes that len > 0 on entry, and that it's safe to write at least -+ CHUNKCOPY_CHUNK_SIZE*3 bytes to the output. -+ */ -+static inline unsigned char FAR *chunkcopy_lapped_relaxed(unsigned char FAR *out, -+ unsigned dist, -+ unsigned len) { -+ if (dist < len && dist < CHUNKCOPY_CHUNK_SIZE) { -+ return chunkset_core(out, dist, len); -+ } -+ return chunkcopy_core(out, out - dist, len); -+} -+ -+/* -+ Behave like chunkcopy_lapped_relaxed, but avoid writing beyond of legal output. -+ -+ Accepts an additional pointer to the end of safe output. A generic safe -+ copy would use (out + len), but it's normally the case that the end of the -+ output buffer is beyond the end of the current copy, and this can still be -+ exploited. -+ */ -+static inline unsigned char FAR *chunkcopy_lapped_safe(unsigned char FAR *out, -+ unsigned dist, -+ unsigned len, -+ unsigned char FAR *limit) { -+ Assert(out + len <= limit, "chunk copy exceeds safety limit"); -+ if (limit - out < CHUNKCOPY_CHUNK_SIZE * 3) { -+ /* TODO: try harder to optimise this */ -+ while (len-- > 0) { -+ *out = *(out - dist); -+ out++; -+ } -+ return out; -+ } -+ return chunkcopy_lapped_relaxed(out, dist, len); -+} -+ -+#undef Z_RESTRICT -+ -+#endif /* CHUNKCOPY_H */ -diff --git a/contrib/arm/inffast.c b/contrib/arm/inffast.c -index 0dbd1dbc..f7f50071 100644 ---- a/contrib/arm/inffast.c -+++ b/contrib/arm/inffast.c -@@ -7,6 +7,7 @@ - #include "inftrees.h" - #include "inflate.h" - #include "inffast.h" -+#include "chunkcopy.h" - - #ifdef ASMINF - # pragma message("Assembler code may have bugs -- use at your own risk") -@@ -57,6 +58,7 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */ - unsigned char FAR *out; /* local strm->next_out */ - unsigned char FAR *beg; /* inflate()'s initial strm->next_out */ - unsigned char FAR *end; /* while out < end, enough space available */ -+ unsigned char FAR *limit; /* safety limit for chunky copies */ - #ifdef INFLATE_STRICT - unsigned dmax; /* maximum distance from zlib header */ - #endif -@@ -84,12 +86,13 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */ - out = strm->next_out; - beg = out - (start - strm->avail_out); - end = out + (strm->avail_out - 257); -+ limit = out + strm->avail_out; - #ifdef INFLATE_STRICT - dmax = state->dmax; - #endif - wsize = state->wsize; - whave = state->whave; -- wnext = state->wnext; -+ wnext = (state->wnext == 0 && whave >= wsize) ? wsize : state->wnext; - window = state->window; - hold = state->hold; - bits = state->bits; -@@ -197,70 +200,51 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */ - #endif - } - from = window; -- if (wnext == 0) { /* very common case */ -- from += wsize - op; -- if (op < len) { /* some from window */ -- len -= op; -- do { -- *out++ = *from++; -- } while (--op); -- from = out - dist; /* rest from output */ -- } -+ if (wnext >= op) { /* contiguous in window */ -+ from += wnext - op; - } -- else if (wnext < op) { /* wrap around window */ -- from += wsize + wnext - op; -+ else { /* wrap around window */ - op -= wnext; -+ from += wsize - op; - if (op < len) { /* some from end of window */ - len -= op; -- do { -- *out++ = *from++; -- } while (--op); -- from = window; -- if (wnext < len) { /* some from start of window */ -- op = wnext; -- len -= op; -- do { -- *out++ = *from++; -- } while (--op); -- from = out - dist; /* rest from output */ -- } -+ out = chunkcopy_safe(out, from, op, limit); -+ from = window; /* more from start of window */ -+ op = wnext; -+ /* This (rare) case can create a situation where -+ the first chunkcopy below must be checked. -+ */ - } - } -- else { /* contiguous in window */ -- from += wnext - op; -- if (op < len) { /* some from window */ -- len -= op; -- do { -- *out++ = *from++; -- } while (--op); -- from = out - dist; /* rest from output */ -- } -- } -- while (len > 2) { -- *out++ = *from++; -- *out++ = *from++; -- *out++ = *from++; -- len -= 3; -- } -- if (len) { -- *out++ = *from++; -- if (len > 1) -- *out++ = *from++; -+ if (op < len) { /* still need some from output */ -+ out = chunkcopy_safe(out, from, op, limit); -+ len -= op; -+ /* When dist is small the amount of data that can be -+ copied from the window is also small, and progress -+ towards the dangerous end of the output buffer is -+ also small. This means that for trivial memsets and -+ for chunkunroll_relaxed() a safety check is -+ unnecessary. However, these conditions may not be -+ entered at all, and in that case it's possible that -+ the main copy is near the end. -+ */ -+ out = chunkunroll_relaxed(out, &dist, &len); -+ out = chunkcopy_safe(out, out - dist, len, limit); -+ } else { -+ /* from points to window, so there is no risk of -+ overlapping pointers requiring memset-like behaviour -+ */ -+ out = chunkcopy_safe(out, from, len, limit); - } - } - else { -- from = out - dist; /* copy direct from output */ -- do { /* minimum length is three */ -- *out++ = *from++; -- *out++ = *from++; -- *out++ = *from++; -- len -= 3; -- } while (len > 2); -- if (len) { -- *out++ = *from++; -- if (len > 1) -- *out++ = *from++; -- } -+ /* Whole reference is in range of current output. No -+ range checks are necessary because we start with room -+ for at least 258 bytes of output, so unroll and roundoff -+ operations can write beyond `out+len` so long as they -+ stay within 258 bytes of `out`. -+ */ -+ out = chunkcopy_lapped_relaxed(out, dist, len); - } - } - else if ((op & 64) == 0) { /* 2nd level distance code */ -diff --git a/contrib/arm/inflate.c b/contrib/arm/inflate.c -index ac333e8c..e40322c3 100644 ---- a/contrib/arm/inflate.c -+++ b/contrib/arm/inflate.c -@@ -84,6 +84,7 @@ - #include "inftrees.h" - #include "inflate.h" - #include "inffast.h" -+#include "contrib/arm/chunkcopy.h" - - #ifdef MAKEFIXED - # ifndef BUILDFIXED -@@ -405,10 +406,20 @@ unsigned copy; - - /* if it hasn't been done already, allocate space for the window */ - if (state->window == Z_NULL) { -+ unsigned wsize = 1U << state->wbits; - state->window = (unsigned char FAR *) -- ZALLOC(strm, 1U << state->wbits, -+ ZALLOC(strm, wsize + CHUNKCOPY_CHUNK_SIZE, - sizeof(unsigned char)); - if (state->window == Z_NULL) return 1; -+#ifdef INFLATE_CLEAR_UNUSED_UNDEFINED -+ /* Copies from the overflow portion of this buffer are undefined and -+ may cause analysis tools to raise a warning if we don't initialize -+ it. However, this undefined data overwrites other undefined data -+ and is subsequently either overwritten or left deliberately -+ undefined at the end of decode; so there's really no point. -+ */ -+ memset(state->window + wsize, 0, CHUNKCOPY_CHUNK_SIZE); -+#endif - } - - /* if window not in use yet, initialize */ -@@ -1175,17 +1186,16 @@ int flush; - else - from = state->window + (state->wnext - copy); - if (copy > state->length) copy = state->length; -+ if (copy > left) copy = left; -+ put = chunkcopy_safe(put, from, copy, put + left); - } - else { /* copy from output */ -- from = put - state->offset; - copy = state->length; -+ if (copy > left) copy = left; -+ put = chunkcopy_lapped_safe(put, state->offset, copy, put + left); - } -- if (copy > left) copy = left; - left -= copy; - state->length -= copy; -- do { -- *put++ = *from++; -- } while (--copy); - if (state->length == 0) state->mode = LEN; - break; - case LIT: diff --git a/package/libs/zlib/patches/002-fix-CVE-2019-9840.patch b/package/libs/zlib/patches/002-fix-CVE-2019-9840.patch deleted file mode 100644 index 625d6658704..00000000000 --- a/package/libs/zlib/patches/002-fix-CVE-2019-9840.patch +++ /dev/null @@ -1,68 +0,0 @@ -From 6a043145ca6e9c55184013841a67b2fef87e44c0 Mon Sep 17 00:00:00 2001 -From: Mark Adler -Date: Wed, 21 Sep 2016 23:35:50 -0700 -Subject: [PATCH] Remove offset pointer optimization in inftrees.c. - -inftrees.c was subtracting an offset from a pointer to an array, -in order to provide a pointer that allowed indexing starting at -the offset. This is not compliant with the C standard, for which -the behavior of a pointer decremented before its allocated memory -is undefined. Per the recommendation of a security audit of the -zlib code by Trail of Bits and TrustInSoft, in support of the -Mozilla Foundation, this tiny optimization was removed, in order -to avoid the possibility of undefined behavior. ---- -Index: zlib-1.2.11/contrib/infback9/inftree9.c -=================================================================== ---- zlib-1.2.11.orig/contrib/infback9/inftree9.c -+++ zlib-1.2.11/contrib/infback9/inftree9.c -@@ -54,7 +54,7 @@ unsigned short FAR *work; - code FAR *next; /* next available space in table */ - const unsigned short FAR *base; /* base value table to use */ - const unsigned short FAR *extra; /* extra bits table to use */ -- int end; /* use base and extra for symbol > end */ -+ unsigned match; /* use base and extra for symbol > end */ - unsigned short count[MAXBITS+1]; /* number of codes of each length */ - unsigned short offs[MAXBITS+1]; /* offsets in table for each length */ - static const unsigned short lbase[31] = { /* Length codes 257..285 base */ -@@ -175,19 +175,17 @@ unsigned short FAR *work; - switch (type) { - case CODES: - base = extra = work; /* dummy value--not used */ -- end = 19; -+ match = 20; - break; - case LENS: - base = lbase; -- base -= 257; - extra = lext; -- extra -= 257; -- end = 256; -+ match = 257; - break; - default: /* DISTS */ - base = dbase; - extra = dext; -- end = -1; -+ match = 0; - } - - /* initialize state for loop */ -@@ -210,13 +208,13 @@ unsigned short FAR *work; - for (;;) { - /* create table entry */ - this.bits = (unsigned char)(len - drop); -- if ((int)(work[sym]) < end) { -+ if (work[sym] + 1 < match) { - this.op = (unsigned char)0; - this.val = work[sym]; - } -- else if ((int)(work[sym]) > end) { -- this.op = (unsigned char)(extra[work[sym]]); -- this.val = base[work[sym]]; -+ else if (work[sym] >= match) { -+ here.op = (unsigned char)(extra[work[sym] - match]); -+ here.val = base[work[sym] - match]; - } - else { - this.op = (unsigned char)(32 + 64); /* end of block */ diff --git a/package/libs/zlib/patches/003-arm-specific-optimisations-for-inflate.patch b/package/libs/zlib/patches/003-arm-specific-optimisations-for-inflate.patch new file mode 100644 index 00000000000..9370264c403 --- /dev/null +++ b/package/libs/zlib/patches/003-arm-specific-optimisations-for-inflate.patch @@ -0,0 +1,501 @@ +From 247147654fe5cd11cf15d8dff91440405ea57040 Mon Sep 17 00:00:00 2001 +From: Simon Hosie +Date: Wed, 12 Apr 2017 15:44:21 -0700 +Subject: [PATCH 2/2] Inflate using wider loads and stores + +In inflate_fast() the output pointer always has plenty of room to write. This +means that so long as the target is capable, wide un-aligned loads and stores +can be used to transfer several bytes at once. When the reference distance is +too short simply unroll the data a little to increase the distance. + +Change-Id: I59854eb25d2b1e43561c8a2afaf9175bf10cf674 +--- + contrib/arm/chunkcopy.h | 279 ++++++++++++++++++++++++++++++++++++++++++++++++ + contrib/arm/inffast.c | 96 +++++++---------- + contrib/arm/inflate.c | 22 ++-- + 3 files changed, 335 insertions(+), 62 deletions(-) + create mode 100644 contrib/arm/chunkcopy.h + +diff --git a/contrib/arm/chunkcopy.h b/contrib/arm/chunkcopy.h +new file mode 100644 +index 00000000..2d6fd6f9 +--- /dev/null ++++ b/contrib/arm/chunkcopy.h +@@ -0,0 +1,279 @@ ++/* chunkcopy.h -- fast copies and sets ++ * Copyright (C) 2017 ARM, Inc. ++ * For conditions of distribution and use, see copyright notice in zlib.h ++ */ ++ ++#ifndef CHUNKCOPY_H ++#define CHUNKCOPY_H ++ ++#include "zutil.h" ++#include ++ ++#if __STDC_VERSION__ >= 199901L ++#define Z_RESTRICT restrict ++#else ++#define Z_RESTRICT ++#endif ++ ++typedef uint8x16_t chunkcopy_chunk_t; ++#define CHUNKCOPY_CHUNK_SIZE sizeof(chunkcopy_chunk_t) ++ ++/* ++ Ask the compiler to perform a wide, unaligned load with an machine ++ instruction appropriate for the chunkcopy_chunk_t type. ++ */ ++static inline chunkcopy_chunk_t loadchunk(const unsigned char FAR *s) { ++ chunkcopy_chunk_t c; ++ __builtin_memcpy(&c, s, sizeof(c)); ++ return c; ++} ++ ++/* ++ Ask the compiler to perform a wide, unaligned store with an machine ++ instruction appropriate for the chunkcopy_chunk_t type. ++ */ ++static inline void storechunk(unsigned char FAR *d, chunkcopy_chunk_t c) { ++ __builtin_memcpy(d, &c, sizeof(c)); ++} ++ ++/* ++ Perform a memcpy-like operation, but assume that length is non-zero and that ++ it's OK to overwrite at least CHUNKCOPY_CHUNK_SIZE bytes of output even if ++ the length is shorter than this. ++ ++ It also guarantees that it will properly unroll the data if the distance ++ between `out` and `from` is at least CHUNKCOPY_CHUNK_SIZE, which we rely on ++ in chunkcopy_relaxed(). ++ ++ Aside from better memory bus utilisation, this means that short copies ++ (CHUNKCOPY_CHUNK_SIZE bytes or fewer) will fall straight through the loop ++ without iteration, which will hopefully make the branch prediction more ++ reliable. ++ */ ++static inline unsigned char FAR *chunkcopy_core(unsigned char FAR *out, ++ const unsigned char FAR *from, ++ unsigned len) { ++ int bump = (--len % CHUNKCOPY_CHUNK_SIZE) + 1; ++ storechunk(out, loadchunk(from)); ++ out += bump; ++ from += bump; ++ len /= CHUNKCOPY_CHUNK_SIZE; ++ while (len-- > 0) { ++ storechunk(out, loadchunk(from)); ++ out += CHUNKCOPY_CHUNK_SIZE; ++ from += CHUNKCOPY_CHUNK_SIZE; ++ } ++ return out; ++} ++ ++/* ++ Like chunkcopy_core, but avoid writing beyond of legal output. ++ ++ Accepts an additional pointer to the end of safe output. A generic safe ++ copy would use (out + len), but it's normally the case that the end of the ++ output buffer is beyond the end of the current copy, and this can still be ++ exploited. ++ */ ++static inline unsigned char FAR *chunkcopy_core_safe(unsigned char FAR *out, ++ const unsigned char FAR * from, ++ unsigned len, ++ unsigned char FAR *limit) { ++ Assert(out + len <= limit, "chunk copy exceeds safety limit"); ++ if (limit - out < CHUNKCOPY_CHUNK_SIZE) { ++ const unsigned char FAR * Z_RESTRICT rfrom = from; ++ if (len & 8) { __builtin_memcpy(out, rfrom, 8); out += 8; rfrom += 8; } ++ if (len & 4) { __builtin_memcpy(out, rfrom, 4); out += 4; rfrom += 4; } ++ if (len & 2) { __builtin_memcpy(out, rfrom, 2); out += 2; rfrom += 2; } ++ if (len & 1) { *out++ = *rfrom++; } ++ return out; ++ } ++ return chunkcopy_core(out, from, len); ++} ++ ++/* ++ Perform short copies until distance can be rewritten as being at least ++ CHUNKCOPY_CHUNK_SIZE. ++ ++ This assumes that it's OK to overwrite at least the first ++ 2*CHUNKCOPY_CHUNK_SIZE bytes of output even if the copy is shorter than ++ this. This assumption holds within inflate_fast() which starts every ++ iteration with at least 258 bytes of output space available (258 being the ++ maximum length output from a single token; see inffast.c). ++ */ ++static inline unsigned char FAR *chunkunroll_relaxed(unsigned char FAR *out, ++ unsigned FAR *dist, ++ unsigned FAR *len) { ++ const unsigned char FAR *from = out - *dist; ++ while (*dist < *len && *dist < CHUNKCOPY_CHUNK_SIZE) { ++ storechunk(out, loadchunk(from)); ++ out += *dist; ++ *len -= *dist; ++ *dist += *dist; ++ } ++ return out; ++} ++ ++ ++static inline uint8x16_t chunkset_vld1q_dup_u8x8(const unsigned char FAR * Z_RESTRICT from) { ++#if defined(__clang__) || defined(__aarch64__) ++ return vreinterpretq_u8_u64(vld1q_dup_u64((void *)from)); ++#else ++ /* 32-bit GCC uses an alignment hint for vld1q_dup_u64, even when given a ++ * void pointer, so here's an alternate implementation. ++ */ ++ uint8x8_t h = vld1_u8(from); ++ return vcombine_u8(h, h); ++#endif ++} ++ ++/* ++ Perform an overlapping copy which behaves as a memset() operation, but ++ supporting periods other than one, and assume that length is non-zero and ++ that it's OK to overwrite at least CHUNKCOPY_CHUNK_SIZE*3 bytes of output ++ even if the length is shorter than this. ++ */ ++static inline unsigned char FAR *chunkset_core(unsigned char FAR *out, ++ unsigned period, ++ unsigned len) { ++ uint8x16_t f; ++ int bump = ((len - 1) % sizeof(f)) + 1; ++ ++ switch (period) { ++ case 1: ++ f = vld1q_dup_u8(out - 1); ++ vst1q_u8(out, f); ++ out += bump; ++ len -= bump; ++ while (len > 0) { ++ vst1q_u8(out, f); ++ out += sizeof(f); ++ len -= sizeof(f); ++ } ++ return out; ++ case 2: ++ f = vreinterpretq_u8_u16(vld1q_dup_u16((void *)(out - 2))); ++ vst1q_u8(out, f); ++ out += bump; ++ len -= bump; ++ if (len > 0) { ++ f = vreinterpretq_u8_u16(vld1q_dup_u16((void *)(out - 2))); ++ do { ++ vst1q_u8(out, f); ++ out += sizeof(f); ++ len -= sizeof(f); ++ } while (len > 0); ++ } ++ return out; ++ case 4: ++ f = vreinterpretq_u8_u32(vld1q_dup_u32((void *)(out - 4))); ++ vst1q_u8(out, f); ++ out += bump; ++ len -= bump; ++ if (len > 0) { ++ f = vreinterpretq_u8_u32(vld1q_dup_u32((void *)(out - 4))); ++ do { ++ vst1q_u8(out, f); ++ out += sizeof(f); ++ len -= sizeof(f); ++ } while (len > 0); ++ } ++ return out; ++ case 8: ++ f = chunkset_vld1q_dup_u8x8(out - 8); ++ vst1q_u8(out, f); ++ out += bump; ++ len -= bump; ++ if (len > 0) { ++ f = chunkset_vld1q_dup_u8x8(out - 8); ++ do { ++ vst1q_u8(out, f); ++ out += sizeof(f); ++ len -= sizeof(f); ++ } while (len > 0); ++ } ++ return out; ++ } ++ out = chunkunroll_relaxed(out, &period, &len); ++ return chunkcopy_core(out, out - period, len); ++} ++ ++/* ++ Perform a memcpy-like operation, but assume that length is non-zero and that ++ it's OK to overwrite at least CHUNKCOPY_CHUNK_SIZE bytes of output even if ++ the length is shorter than this. ++ ++ Unlike chunkcopy_core() above, no guarantee is made regarding the behaviour ++ of overlapping buffers, regardless of the distance between the pointers. ++ This is reflected in the `restrict`-qualified pointers, allowing the ++ compiler to reorder loads and stores. ++ */ ++static inline unsigned char FAR *chunkcopy_relaxed(unsigned char FAR * Z_RESTRICT out, ++ const unsigned char FAR * Z_RESTRICT from, ++ unsigned len) { ++ return chunkcopy_core(out, from, len); ++} ++ ++/* ++ Like chunkcopy_relaxed, but avoid writing beyond of legal output. ++ ++ Unlike chunkcopy_core_safe() above, no guarantee is made regarding the ++ behaviour of overlapping buffers, regardless of the distance between the ++ pointers. This is reflected in the `restrict`-qualified pointers, allowing ++ the compiler to reorder loads and stores. ++ ++ Accepts an additional pointer to the end of safe output. A generic safe ++ copy would use (out + len), but it's normally the case that the end of the ++ output buffer is beyond the end of the current copy, and this can still be ++ exploited. ++ */ ++static inline unsigned char FAR *chunkcopy_safe(unsigned char FAR *out, ++ const unsigned char FAR * Z_RESTRICT from, ++ unsigned len, ++ unsigned char FAR *limit) { ++ Assert(out + len <= limit, "chunk copy exceeds safety limit"); ++ return chunkcopy_core_safe(out, from, len, limit); ++} ++ ++/* ++ Perform chunky copy within the same buffer, where the source and destination ++ may potentially overlap. ++ ++ Assumes that len > 0 on entry, and that it's safe to write at least ++ CHUNKCOPY_CHUNK_SIZE*3 bytes to the output. ++ */ ++static inline unsigned char FAR *chunkcopy_lapped_relaxed(unsigned char FAR *out, ++ unsigned dist, ++ unsigned len) { ++ if (dist < len && dist < CHUNKCOPY_CHUNK_SIZE) { ++ return chunkset_core(out, dist, len); ++ } ++ return chunkcopy_core(out, out - dist, len); ++} ++ ++/* ++ Behave like chunkcopy_lapped_relaxed, but avoid writing beyond of legal output. ++ ++ Accepts an additional pointer to the end of safe output. A generic safe ++ copy would use (out + len), but it's normally the case that the end of the ++ output buffer is beyond the end of the current copy, and this can still be ++ exploited. ++ */ ++static inline unsigned char FAR *chunkcopy_lapped_safe(unsigned char FAR *out, ++ unsigned dist, ++ unsigned len, ++ unsigned char FAR *limit) { ++ Assert(out + len <= limit, "chunk copy exceeds safety limit"); ++ if (limit - out < CHUNKCOPY_CHUNK_SIZE * 3) { ++ /* TODO: try harder to optimise this */ ++ while (len-- > 0) { ++ *out = *(out - dist); ++ out++; ++ } ++ return out; ++ } ++ return chunkcopy_lapped_relaxed(out, dist, len); ++} ++ ++#undef Z_RESTRICT ++ ++#endif /* CHUNKCOPY_H */ +diff --git a/contrib/arm/inffast.c b/contrib/arm/inffast.c +index 0dbd1dbc..f7f50071 100644 +--- a/contrib/arm/inffast.c ++++ b/contrib/arm/inffast.c +@@ -7,6 +7,7 @@ + #include "inftrees.h" + #include "inflate.h" + #include "inffast.h" ++#include "chunkcopy.h" + + #ifdef ASMINF + # pragma message("Assembler code may have bugs -- use at your own risk") +@@ -57,6 +58,7 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */ + unsigned char FAR *out; /* local strm->next_out */ + unsigned char FAR *beg; /* inflate()'s initial strm->next_out */ + unsigned char FAR *end; /* while out < end, enough space available */ ++ unsigned char FAR *limit; /* safety limit for chunky copies */ + #ifdef INFLATE_STRICT + unsigned dmax; /* maximum distance from zlib header */ + #endif +@@ -84,12 +86,13 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */ + out = strm->next_out; + beg = out - (start - strm->avail_out); + end = out + (strm->avail_out - 257); ++ limit = out + strm->avail_out; + #ifdef INFLATE_STRICT + dmax = state->dmax; + #endif + wsize = state->wsize; + whave = state->whave; +- wnext = state->wnext; ++ wnext = (state->wnext == 0 && whave >= wsize) ? wsize : state->wnext; + window = state->window; + hold = state->hold; + bits = state->bits; +@@ -197,70 +200,51 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */ + #endif + } + from = window; +- if (wnext == 0) { /* very common case */ +- from += wsize - op; +- if (op < len) { /* some from window */ +- len -= op; +- do { +- *out++ = *from++; +- } while (--op); +- from = out - dist; /* rest from output */ +- } ++ if (wnext >= op) { /* contiguous in window */ ++ from += wnext - op; + } +- else if (wnext < op) { /* wrap around window */ +- from += wsize + wnext - op; ++ else { /* wrap around window */ + op -= wnext; ++ from += wsize - op; + if (op < len) { /* some from end of window */ + len -= op; +- do { +- *out++ = *from++; +- } while (--op); +- from = window; +- if (wnext < len) { /* some from start of window */ +- op = wnext; +- len -= op; +- do { +- *out++ = *from++; +- } while (--op); +- from = out - dist; /* rest from output */ +- } ++ out = chunkcopy_safe(out, from, op, limit); ++ from = window; /* more from start of window */ ++ op = wnext; ++ /* This (rare) case can create a situation where ++ the first chunkcopy below must be checked. ++ */ + } + } +- else { /* contiguous in window */ +- from += wnext - op; +- if (op < len) { /* some from window */ +- len -= op; +- do { +- *out++ = *from++; +- } while (--op); +- from = out - dist; /* rest from output */ +- } +- } +- while (len > 2) { +- *out++ = *from++; +- *out++ = *from++; +- *out++ = *from++; +- len -= 3; +- } +- if (len) { +- *out++ = *from++; +- if (len > 1) +- *out++ = *from++; ++ if (op < len) { /* still need some from output */ ++ out = chunkcopy_safe(out, from, op, limit); ++ len -= op; ++ /* When dist is small the amount of data that can be ++ copied from the window is also small, and progress ++ towards the dangerous end of the output buffer is ++ also small. This means that for trivial memsets and ++ for chunkunroll_relaxed() a safety check is ++ unnecessary. However, these conditions may not be ++ entered at all, and in that case it's possible that ++ the main copy is near the end. ++ */ ++ out = chunkunroll_relaxed(out, &dist, &len); ++ out = chunkcopy_safe(out, out - dist, len, limit); ++ } else { ++ /* from points to window, so there is no risk of ++ overlapping pointers requiring memset-like behaviour ++ */ ++ out = chunkcopy_safe(out, from, len, limit); + } + } + else { +- from = out - dist; /* copy direct from output */ +- do { /* minimum length is three */ +- *out++ = *from++; +- *out++ = *from++; +- *out++ = *from++; +- len -= 3; +- } while (len > 2); +- if (len) { +- *out++ = *from++; +- if (len > 1) +- *out++ = *from++; +- } ++ /* Whole reference is in range of current output. No ++ range checks are necessary because we start with room ++ for at least 258 bytes of output, so unroll and roundoff ++ operations can write beyond `out+len` so long as they ++ stay within 258 bytes of `out`. ++ */ ++ out = chunkcopy_lapped_relaxed(out, dist, len); + } + } + else if ((op & 64) == 0) { /* 2nd level distance code */ +diff --git a/contrib/arm/inflate.c b/contrib/arm/inflate.c +index ac333e8c..e40322c3 100644 +--- a/contrib/arm/inflate.c ++++ b/contrib/arm/inflate.c +@@ -84,6 +84,7 @@ + #include "inftrees.h" + #include "inflate.h" + #include "inffast.h" ++#include "contrib/arm/chunkcopy.h" + + #ifdef MAKEFIXED + # ifndef BUILDFIXED +@@ -405,10 +406,20 @@ unsigned copy; + + /* if it hasn't been done already, allocate space for the window */ + if (state->window == Z_NULL) { ++ unsigned wsize = 1U << state->wbits; + state->window = (unsigned char FAR *) +- ZALLOC(strm, 1U << state->wbits, ++ ZALLOC(strm, wsize + CHUNKCOPY_CHUNK_SIZE, + sizeof(unsigned char)); + if (state->window == Z_NULL) return 1; ++#ifdef INFLATE_CLEAR_UNUSED_UNDEFINED ++ /* Copies from the overflow portion of this buffer are undefined and ++ may cause analysis tools to raise a warning if we don't initialize ++ it. However, this undefined data overwrites other undefined data ++ and is subsequently either overwritten or left deliberately ++ undefined at the end of decode; so there's really no point. ++ */ ++ memset(state->window + wsize, 0, CHUNKCOPY_CHUNK_SIZE); ++#endif + } + + /* if window not in use yet, initialize */ +@@ -1175,17 +1186,16 @@ int flush; + else + from = state->window + (state->wnext - copy); + if (copy > state->length) copy = state->length; ++ if (copy > left) copy = left; ++ put = chunkcopy_safe(put, from, copy, put + left); + } + else { /* copy from output */ +- from = put - state->offset; + copy = state->length; ++ if (copy > left) copy = left; ++ put = chunkcopy_lapped_safe(put, state->offset, copy, put + left); + } +- if (copy > left) copy = left; + left -= copy; + state->length -= copy; +- do { +- *put++ = *from++; +- } while (--copy); + if (state->length == 0) state->mode = LEN; + break; + case LIT: diff --git a/package/libs/zlib/patches/003-attach-sourcefiles-in-patch-002-to-buildsystem.patch b/package/libs/zlib/patches/004-attach-sourcefiles-in-patch-002-to-buildsystem.patch similarity index 100% rename from package/libs/zlib/patches/003-attach-sourcefiles-in-patch-002-to-buildsystem.patch rename to package/libs/zlib/patches/004-attach-sourcefiles-in-patch-002-to-buildsystem.patch diff --git a/package/libs/zlib/patches/004-relative-pkg-config-paths.patch b/package/libs/zlib/patches/005-relative-pkg-config-paths.patch similarity index 100% rename from package/libs/zlib/patches/004-relative-pkg-config-paths.patch rename to package/libs/zlib/patches/005-relative-pkg-config-paths.patch diff --git a/package/libs/zlib/patches/006-fix-CVE-2022-37434.patch b/package/libs/zlib/patches/006-fix-CVE-2022-37434.patch new file mode 100644 index 00000000000..dc84d3a1d38 --- /dev/null +++ b/package/libs/zlib/patches/006-fix-CVE-2022-37434.patch @@ -0,0 +1,32 @@ +From eff308af425b67093bab25f80f1ae950166bece1 Mon Sep 17 00:00:00 2001 +From: Mark Adler +Date: Sat, 30 Jul 2022 15:51:11 -0700 +Subject: [PATCH] Fix a bug when getting a gzip header extra field with + inflate(). + +If the extra field was larger than the space the user provided with +inflateGetHeader(), and if multiple calls of inflate() delivered +the extra header data, then there could be a buffer overflow of the +provided space. This commit assures that provided space is not +exceeded. +--- + inflate.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/inflate.c b/inflate.c +index 7be8c6366..7a7289749 100644 +--- a/inflate.c ++++ b/inflate.c +@@ -763,9 +763,10 @@ int flush; + copy = state->length; + if (copy > have) copy = have; + if (copy) { ++ len = state->head->extra_len - state->length; + if (state->head != Z_NULL && +- state->head->extra != Z_NULL) { +- len = state->head->extra_len - state->length; ++ state->head->extra != Z_NULL && ++ len < state->head->extra_max) { + zmemcpy(state->head->extra + len, next, + len + copy > state->head->extra_max ? + state->head->extra_max - len : copy); diff --git a/package/libs/zlib/patches/006-fix-compressor-crash-on-certain-inputs.patch b/package/libs/zlib/patches/006-fix-compressor-crash-on-certain-inputs.patch new file mode 100644 index 00000000000..9f37ba5c583 --- /dev/null +++ b/package/libs/zlib/patches/006-fix-compressor-crash-on-certain-inputs.patch @@ -0,0 +1,343 @@ +From 5c44459c3b28a9bd3283aaceab7c615f8020c531 Mon Sep 17 00:00:00 2001 +From: Mark Adler +Date: Tue, 17 Apr 2018 22:09:22 -0700 +Subject: [PATCH] Fix a bug that can crash deflate on some input when using + Z_FIXED. + +This bug was reported by Danilo Ramos of Eideticom, Inc. It has +lain in wait 13 years before being found! The bug was introduced +in zlib 1.2.2.2, with the addition of the Z_FIXED option. That +option forces the use of fixed Huffman codes. For rare inputs with +a large number of distant matches, the pending buffer into which +the compressed data is written can overwrite the distance symbol +table which it overlays. That results in corrupted output due to +invalid distances, and can result in out-of-bound accesses, +crashing the application. + +The fix here combines the distance buffer and literal/length +buffers into a single symbol buffer. Now three bytes of pending +buffer space are opened up for each literal or length/distance +pair consumed, instead of the previous two bytes. This assures +that the pending buffer cannot overwrite the symbol table, since +the maximum fixed code compressed length/distance is 31 bits, and +since there are four bytes of pending space for every three bytes +of symbol space. +--- + deflate.c | 74 ++++++++++++++++++++++++++++++++++++++++--------------- + deflate.h | 25 +++++++++---------- + trees.c | 50 +++++++++++-------------------------- + 3 files changed, 79 insertions(+), 70 deletions(-) + +diff --git a/deflate.c b/deflate.c +index 425babc00..19cba873a 100644 +--- a/deflate.c ++++ b/deflate.c +@@ -255,11 +255,6 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, + int wrap = 1; + static const char my_version[] = ZLIB_VERSION; + +- ushf *overlay; +- /* We overlay pending_buf and d_buf+l_buf. This works since the average +- * output size for (length,distance) codes is <= 24 bits. +- */ +- + if (version == Z_NULL || version[0] != my_version[0] || + stream_size != sizeof(z_stream)) { + return Z_VERSION_ERROR; +@@ -329,9 +324,47 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, + + s->lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */ + +- overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2); +- s->pending_buf = (uchf *) overlay; +- s->pending_buf_size = (ulg)s->lit_bufsize * (sizeof(ush)+2L); ++ /* We overlay pending_buf and sym_buf. This works since the average size ++ * for length/distance pairs over any compressed block is assured to be 31 ++ * bits or less. ++ * ++ * Analysis: The longest fixed codes are a length code of 8 bits plus 5 ++ * extra bits, for lengths 131 to 257. The longest fixed distance codes are ++ * 5 bits plus 13 extra bits, for distances 16385 to 32768. The longest ++ * possible fixed-codes length/distance pair is then 31 bits total. ++ * ++ * sym_buf starts one-fourth of the way into pending_buf. So there are ++ * three bytes in sym_buf for every four bytes in pending_buf. Each symbol ++ * in sym_buf is three bytes -- two for the distance and one for the ++ * literal/length. As each symbol is consumed, the pointer to the next ++ * sym_buf value to read moves forward three bytes. From that symbol, up to ++ * 31 bits are written to pending_buf. The closest the written pending_buf ++ * bits gets to the next sym_buf symbol to read is just before the last ++ * code is written. At that time, 31*(n-2) bits have been written, just ++ * after 24*(n-2) bits have been consumed from sym_buf. sym_buf starts at ++ * 8*n bits into pending_buf. (Note that the symbol buffer fills when n-1 ++ * symbols are written.) The closest the writing gets to what is unread is ++ * then n+14 bits. Here n is lit_bufsize, which is 16384 by default, and ++ * can range from 128 to 32768. ++ * ++ * Therefore, at a minimum, there are 142 bits of space between what is ++ * written and what is read in the overlain buffers, so the symbols cannot ++ * be overwritten by the compressed data. That space is actually 139 bits, ++ * due to the three-bit fixed-code block header. ++ * ++ * That covers the case where either Z_FIXED is specified, forcing fixed ++ * codes, or when the use of fixed codes is chosen, because that choice ++ * results in a smaller compressed block than dynamic codes. That latter ++ * condition then assures that the above analysis also covers all dynamic ++ * blocks. A dynamic-code block will only be chosen to be emitted if it has ++ * fewer bits than a fixed-code block would for the same set of symbols. ++ * Therefore its average symbol length is assured to be less than 31. So ++ * the compressed data for a dynamic block also cannot overwrite the ++ * symbols from which it is being constructed. ++ */ ++ ++ s->pending_buf = (uchf *) ZALLOC(strm, s->lit_bufsize, 4); ++ s->pending_buf_size = (ulg)s->lit_bufsize * 4; + + if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL || + s->pending_buf == Z_NULL) { +@@ -340,8 +373,12 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, + deflateEnd (strm); + return Z_MEM_ERROR; + } +- s->d_buf = overlay + s->lit_bufsize/sizeof(ush); +- s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize; ++ s->sym_buf = s->pending_buf + s->lit_bufsize; ++ s->sym_end = (s->lit_bufsize - 1) * 3; ++ /* We avoid equality with lit_bufsize*3 because of wraparound at 64K ++ * on 16 bit machines and because stored blocks are restricted to ++ * 64K-1 bytes. ++ */ + + s->level = level; + s->strategy = strategy; +@@ -552,7 +589,7 @@ int ZEXPORT deflatePrime (strm, bits, value) + + if (deflateStateCheck(strm)) return Z_STREAM_ERROR; + s = strm->state; +- if ((Bytef *)(s->d_buf) < s->pending_out + ((Buf_size + 7) >> 3)) ++ if (s->sym_buf < s->pending_out + ((Buf_size + 7) >> 3)) + return Z_BUF_ERROR; + do { + put = Buf_size - s->bi_valid; +@@ -1113,7 +1150,6 @@ int ZEXPORT deflateCopy (dest, source) + #else + deflate_state *ds; + deflate_state *ss; +- ushf *overlay; + + + if (deflateStateCheck(source) || dest == Z_NULL) { +@@ -1133,8 +1169,7 @@ int ZEXPORT deflateCopy (dest, source) + ds->window = (Bytef *) ZALLOC(dest, ds->w_size, 2*sizeof(Byte)); + ds->prev = (Posf *) ZALLOC(dest, ds->w_size, sizeof(Pos)); + ds->head = (Posf *) ZALLOC(dest, ds->hash_size, sizeof(Pos)); +- overlay = (ushf *) ZALLOC(dest, ds->lit_bufsize, sizeof(ush)+2); +- ds->pending_buf = (uchf *) overlay; ++ ds->pending_buf = (uchf *) ZALLOC(dest, ds->lit_bufsize, 4); + + if (ds->window == Z_NULL || ds->prev == Z_NULL || ds->head == Z_NULL || + ds->pending_buf == Z_NULL) { +@@ -1148,8 +1183,7 @@ int ZEXPORT deflateCopy (dest, source) + zmemcpy(ds->pending_buf, ss->pending_buf, (uInt)ds->pending_buf_size); + + ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf); +- ds->d_buf = overlay + ds->lit_bufsize/sizeof(ush); +- ds->l_buf = ds->pending_buf + (1+sizeof(ush))*ds->lit_bufsize; ++ ds->sym_buf = ds->pending_buf + ds->lit_bufsize; + + ds->l_desc.dyn_tree = ds->dyn_ltree; + ds->d_desc.dyn_tree = ds->dyn_dtree; +@@ -1925,7 +1959,7 @@ local block_state deflate_fast(s, flush) + FLUSH_BLOCK(s, 1); + return finish_done; + } +- if (s->last_lit) ++ if (s->sym_next) + FLUSH_BLOCK(s, 0); + return block_done; + } +@@ -2056,7 +2090,7 @@ local block_state deflate_slow(s, flush) + FLUSH_BLOCK(s, 1); + return finish_done; + } +- if (s->last_lit) ++ if (s->sym_next) + FLUSH_BLOCK(s, 0); + return block_done; + } +@@ -2131,7 +2165,7 @@ local block_state deflate_rle(s, flush) + FLUSH_BLOCK(s, 1); + return finish_done; + } +- if (s->last_lit) ++ if (s->sym_next) + FLUSH_BLOCK(s, 0); + return block_done; + } +@@ -2170,7 +2204,7 @@ local block_state deflate_huff(s, flush) + FLUSH_BLOCK(s, 1); + return finish_done; + } +- if (s->last_lit) ++ if (s->sym_next) + FLUSH_BLOCK(s, 0); + return block_done; + } +diff --git a/deflate.h b/deflate.h +index 23ecdd312..d4cf1a98b 100644 +--- a/deflate.h ++++ b/deflate.h +@@ -217,7 +217,7 @@ typedef struct internal_state { + /* Depth of each subtree used as tie breaker for trees of equal frequency + */ + +- uchf *l_buf; /* buffer for literals or lengths */ ++ uchf *sym_buf; /* buffer for distances and literals/lengths */ + + uInt lit_bufsize; + /* Size of match buffer for literals/lengths. There are 4 reasons for +@@ -239,13 +239,8 @@ typedef struct internal_state { + * - I can't count above 4 + */ + +- uInt last_lit; /* running index in l_buf */ +- +- ushf *d_buf; +- /* Buffer for distances. To simplify the code, d_buf and l_buf have +- * the same number of elements. To use different lengths, an extra flag +- * array would be necessary. +- */ ++ uInt sym_next; /* running index in sym_buf */ ++ uInt sym_end; /* symbol table full when sym_next reaches this */ + + ulg opt_len; /* bit length of current block with optimal trees */ + ulg static_len; /* bit length of current block with static trees */ +@@ -325,20 +320,22 @@ void ZLIB_INTERNAL _tr_stored_block OF((deflate_state *s, charf *buf, + + # define _tr_tally_lit(s, c, flush) \ + { uch cc = (c); \ +- s->d_buf[s->last_lit] = 0; \ +- s->l_buf[s->last_lit++] = cc; \ ++ s->sym_buf[s->sym_next++] = 0; \ ++ s->sym_buf[s->sym_next++] = 0; \ ++ s->sym_buf[s->sym_next++] = cc; \ + s->dyn_ltree[cc].Freq++; \ +- flush = (s->last_lit == s->lit_bufsize-1); \ ++ flush = (s->sym_next == s->sym_end); \ + } + # define _tr_tally_dist(s, distance, length, flush) \ + { uch len = (uch)(length); \ + ush dist = (ush)(distance); \ +- s->d_buf[s->last_lit] = dist; \ +- s->l_buf[s->last_lit++] = len; \ ++ s->sym_buf[s->sym_next++] = dist; \ ++ s->sym_buf[s->sym_next++] = dist >> 8; \ ++ s->sym_buf[s->sym_next++] = len; \ + dist--; \ + s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \ + s->dyn_dtree[d_code(dist)].Freq++; \ +- flush = (s->last_lit == s->lit_bufsize-1); \ ++ flush = (s->sym_next == s->sym_end); \ + } + #else + # define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c) +diff --git a/trees.c b/trees.c +index 4f4a65011..decaeb7c3 100644 +--- a/trees.c ++++ b/trees.c +@@ -416,7 +416,7 @@ local void init_block(s) + + s->dyn_ltree[END_BLOCK].Freq = 1; + s->opt_len = s->static_len = 0L; +- s->last_lit = s->matches = 0; ++ s->sym_next = s->matches = 0; + } + + #define SMALLEST 1 +@@ -948,7 +948,7 @@ void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last) + + Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ", + opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len, +- s->last_lit)); ++ s->sym_next / 3)); + + if (static_lenb <= opt_lenb) opt_lenb = static_lenb; + +@@ -1017,8 +1017,9 @@ int ZLIB_INTERNAL _tr_tally (s, dist, lc) + unsigned dist; /* distance of matched string */ + unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */ + { +- s->d_buf[s->last_lit] = (ush)dist; +- s->l_buf[s->last_lit++] = (uch)lc; ++ s->sym_buf[s->sym_next++] = dist; ++ s->sym_buf[s->sym_next++] = dist >> 8; ++ s->sym_buf[s->sym_next++] = lc; + if (dist == 0) { + /* lc is the unmatched char */ + s->dyn_ltree[lc].Freq++; +@@ -1033,30 +1034,7 @@ int ZLIB_INTERNAL _tr_tally (s, dist, lc) + s->dyn_ltree[_length_code[lc]+LITERALS+1].Freq++; + s->dyn_dtree[d_code(dist)].Freq++; + } +- +-#ifdef TRUNCATE_BLOCK +- /* Try to guess if it is profitable to stop the current block here */ +- if ((s->last_lit & 0x1fff) == 0 && s->level > 2) { +- /* Compute an upper bound for the compressed length */ +- ulg out_length = (ulg)s->last_lit*8L; +- ulg in_length = (ulg)((long)s->strstart - s->block_start); +- int dcode; +- for (dcode = 0; dcode < D_CODES; dcode++) { +- out_length += (ulg)s->dyn_dtree[dcode].Freq * +- (5L+extra_dbits[dcode]); +- } +- out_length >>= 3; +- Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ", +- s->last_lit, in_length, out_length, +- 100L - out_length*100L/in_length)); +- if (s->matches < s->last_lit/2 && out_length < in_length/2) return 1; +- } +-#endif +- return (s->last_lit == s->lit_bufsize-1); +- /* We avoid equality with lit_bufsize because of wraparound at 64K +- * on 16 bit machines and because stored blocks are restricted to +- * 64K-1 bytes. +- */ ++ return (s->sym_next == s->sym_end); + } + + /* =========================================================================== +@@ -1069,13 +1047,14 @@ local void compress_block(s, ltree, dtree) + { + unsigned dist; /* distance of matched string */ + int lc; /* match length or unmatched char (if dist == 0) */ +- unsigned lx = 0; /* running index in l_buf */ ++ unsigned sx = 0; /* running index in sym_buf */ + unsigned code; /* the code to send */ + int extra; /* number of extra bits to send */ + +- if (s->last_lit != 0) do { +- dist = s->d_buf[lx]; +- lc = s->l_buf[lx++]; ++ if (s->sym_next != 0) do { ++ dist = s->sym_buf[sx++] & 0xff; ++ dist += (unsigned)(s->sym_buf[sx++] & 0xff) << 8; ++ lc = s->sym_buf[sx++]; + if (dist == 0) { + send_code(s, lc, ltree); /* send a literal byte */ + Tracecv(isgraph(lc), (stderr," '%c' ", lc)); +@@ -1100,11 +1079,10 @@ local void compress_block(s, ltree, dtree) + } + } /* literal or match pair ? */ + +- /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */ +- Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx, +- "pendingBuf overflow"); ++ /* Check that the overlay between pending_buf and sym_buf is ok: */ ++ Assert(s->pending < s->lit_bufsize + sx, "pendingBuf overflow"); + +- } while (lx < s->last_lit); ++ } while (sx < s->sym_next); + + send_code(s, END_BLOCK, ltree); + } diff --git a/package/libs/zlib/patches/007-fix-null-dereference-in-fix-CVE-2022-37434.patch b/package/libs/zlib/patches/007-fix-null-dereference-in-fix-CVE-2022-37434.patch new file mode 100644 index 00000000000..c5c95a92b28 --- /dev/null +++ b/package/libs/zlib/patches/007-fix-null-dereference-in-fix-CVE-2022-37434.patch @@ -0,0 +1,29 @@ +From 1eb7682f845ac9e9bf9ae35bbfb3bad5dacbd91d Mon Sep 17 00:00:00 2001 +From: Mark Adler +Date: Mon, 8 Aug 2022 10:50:09 -0700 +Subject: [PATCH] Fix extra field processing bug that dereferences NULL + state->head. + +The recent commit to fix a gzip header extra field processing bug +introduced the new bug fixed here. +--- + inflate.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/inflate.c b/inflate.c +index 7a7289749..2a3c4fe98 100644 +--- a/inflate.c ++++ b/inflate.c +@@ -763,10 +763,10 @@ int flush; + copy = state->length; + if (copy > have) copy = have; + if (copy) { +- len = state->head->extra_len - state->length; + if (state->head != Z_NULL && + state->head->extra != Z_NULL && +- len < state->head->extra_max) { ++ (len = state->head->extra_len - state->length) < ++ state->head->extra_max) { + zmemcpy(state->head->extra + len, next, + len + copy > state->head->extra_max ? + state->head->extra_max - len : copy); diff --git a/package/network/services/odhcpd/Makefile b/package/network/services/odhcpd/Makefile index ccc4f14e9d8..21c87eaad43 100644 --- a/package/network/services/odhcpd/Makefile +++ b/package/network/services/odhcpd/Makefile @@ -8,19 +8,19 @@ include $(TOPDIR)/rules.mk PKG_NAME:=odhcpd -PKG_RELEASE:=3 +PKG_RELEASE:=$(AUTORELEASE) PKG_SOURCE_PROTO:=git PKG_SOURCE_URL=$(PROJECT_GIT)/project/odhcpd.git -PKG_SOURCE_DATE:=2020-05-03 -PKG_SOURCE_VERSION:=49e4949c6dee4a7e528e9bc51e9813228c3c16d8 -PKG_MIRROR_HASH:=5e23b60211a171d17d7015ce604b5fa128f0fbe4d7e7ddd48063b40590e17d4c +PKG_SOURCE_DATE:=2022-03-22 +PKG_SOURCE_VERSION:=860ca900e41c5d0f98cc85e67b39977f6f2cb355 +PKG_MIRROR_HASH:=555712a1e25d197e52808a0d5e42bf0d48a8b61fe7c8aad1a02a7c09f0b8b8a3 PKG_MAINTAINER:=Hans Dedecker PKG_LICENSE:=GPL-2.0 -PKG_INSTALL:=1 PKG_CONFIG_DEPENDS:=CONFIG_PACKAGE_odhcpd_$(BUILD_VARIANT)_ext_cer_id +PKG_ASLR_PIE_REGULAR:=1 include $(INCLUDE_DIR)/package.mk include $(INCLUDE_DIR)/cmake.mk @@ -99,7 +99,7 @@ define Package/odhcpd/install $(INSTALL_DIR) $(1)/etc/init.d $(INSTALL_BIN) ./files/odhcpd.init $(1)/etc/init.d/odhcpd $(INSTALL_DIR) $(1)/etc/uci-defaults - $(INSTALL_BIN) ./files/odhcpd.defaults $(1)/etc/uci-defaults + $(INSTALL_BIN) ./files/odhcpd.defaults $(1)/etc/uci-defaults/15_odhcpd endef Package/odhcpd-ipv6only/install = $(Package/odhcpd/install) diff --git a/package/network/services/odhcpd/files/odhcpd-update b/package/network/services/odhcpd/files/odhcpd-update index 9bc7abcc1c3..c1814e00b04 100755 --- a/package/network/services/odhcpd/files/odhcpd-update +++ b/package/network/services/odhcpd/files/odhcpd-update @@ -1,6 +1,6 @@ #!/bin/sh # Make dnsmasq reread hostfile by sending SIGHUP signal -. $IPKG_INSTROOT/lib/functions/procd.sh +. /lib/functions/procd.sh procd_send_signal dnsmasq diff --git a/package/network/services/odhcpd/files/odhcpd.defaults b/package/network/services/odhcpd/files/odhcpd.defaults index d458ec8115b..1350636ba43 100644 --- a/package/network/services/odhcpd/files/odhcpd.defaults +++ b/package/network/services/odhcpd/files/odhcpd.defaults @@ -11,24 +11,42 @@ json_get_vars protocol json_select .. json_select .. +ODHCPDONLY=0 +V4MODE=disabled +V6MODE=disabled + +[ -e /usr/sbin/dnsmasq ] || ODHCPDONLY=1 + case "$protocol" in # only enable server mode on statically addressed lan ports -"static") [ -e /proc/sys/net/ipv6 ] && MODE=server || MODE=disabled ;; -*) MODE=disabled ;; +"static") + V4MODE=server + [ -e /proc/sys/net/ipv6 ] && V6MODE=server + ;; esac +uci get dhcp.lan 1>/dev/null 2>/dev/null || { +uci batch < +PKG_MAINTAINER:=Felix Fietkau PKG_LICENSE:=GPL-2.0 include $(INCLUDE_DIR)/package.mk @@ -26,7 +26,6 @@ define Package/iw TITLE:=cfg80211 interface configuration utility URL:=http://wireless.kernel.org/en/users/Documentation/iw DEPENDS:= +libnl-tiny - VARIANT:=tiny endef define Package/iw-full @@ -38,12 +37,16 @@ endef define Build/Configure echo "const char iw_version[] = \"$(PKG_VERSION)\";" > $(PKG_BUILD_DIR)/version.c - echo "#!/bin/sh" > $(PKG_BUILD_DIR)/version.sh + rm -f $(PKG_BUILD_DIR)/version.sh + touch $(PKG_BUILD_DIR)/version.sh chmod +x $(PKG_BUILD_DIR)/version.sh endef +TARGET_CFLAGS += -fpie -Wall -Werror +TARGET_LDFLAGS += -pie + TARGET_CPPFLAGS:= \ - -I$(STAGING_DIR)/usr/include/libnl-tiny \ + -I$(STAGING_DIR)/usr/include/libnl-tiny\ $(TARGET_CPPFLAGS) \ -DCONFIG_LIBNL20 \ -D_GNU_SOURCE @@ -66,7 +69,4 @@ define Package/iw/install $(INSTALL_BIN) $(PKG_BUILD_DIR)/iw $(1)/usr/sbin/ endef -Package/iw-full/install=$(Package/iw/install) - $(eval $(call BuildPackage,iw)) -$(eval $(call BuildPackage,iw-full)) diff --git a/package/system/procd/Makefile b/package/system/procd/Makefile index 03b5dd072ef..13d74ad7f66 100644 --- a/package/system/procd/Makefile +++ b/package/system/procd/Makefile @@ -8,13 +8,13 @@ include $(TOPDIR)/rules.mk PKG_NAME:=procd -PKG_RELEASE:=1 +PKG_RELEASE:=$(AUTORELEASE) PKG_SOURCE_PROTO:=git PKG_SOURCE_URL=$(PROJECT_GIT)/project/procd.git -PKG_MIRROR_HASH:=3c818904c62261f973a016397d0eb9f11bf8d01f7ceddb48fcb0e1d59a139d52 -PKG_SOURCE_DATE:=2020-03-07 -PKG_SOURCE_VERSION:=09b9bd828981a4f9271f8906f7b6f5af04e1a6f9 +PKG_MIRROR_HASH:=b03b6cd3321451813bb802647b8d574e25d39434167f36f271fef170ebd2f2c8 +PKG_SOURCE_DATE:=2022-07-17 +PKG_SOURCE_VERSION:=ef5d3e36e8b23ee2e1989c22717b21649dc9a388 CMAKE_INSTALL:=1 PKG_LICENSE:=GPL-2.0 @@ -22,16 +22,16 @@ PKG_LICENSE_FILES:= PKG_MAINTAINER:=John Crispin +PKG_ASLR_PIE_REGULAR:=1 PKG_CONFIG_DEPENDS:= \ - CONFIG_TARGET_INIT_PATH CONFIG_KERNEL_SECCOMP \ - CONFIG_PROCD_SHOW_BOOT CONFIG_PROCD_ZRAM_TMPFS \ + CONFIG_TARGET_INIT_PATH CONFIG_KERNEL_SECCOMP CONFIG_PROCD_SHOW_BOOT \ CONFIG_KERNEL_NAMESPACES CONFIG_PACKAGE_procd-ujail CONFIG_PACKAGE_procd-seccomp include $(INCLUDE_DIR)/package.mk include $(INCLUDE_DIR)/cmake.mk ifeq ($(DUMP),) - STAMP_CONFIGURED:=$(strip $(STAMP_CONFIGURED))_$(shell echo $(CONFIG_TARGET_INIT_PATH) | mkhash md5) + STAMP_CONFIGURED:=$(strip $(STAMP_CONFIGURED))_$(shell echo $(CONFIG_TARGET_INIT_PATH) | $(MKHASH) md5) endif CMAKE_OPTIONS += -DEARLY_PATH="$(TARGET_INIT_PATH)" @@ -40,53 +40,72 @@ TARGET_LDFLAGS += $(if $(CONFIG_USE_GLIBC),-lrt) TARGET_CFLAGS += -flto TARGET_LDFLAGS += -flto -define Package/procd +define Package/procd/Default SECTION:=base CATEGORY:=Base system - DEPENDS:=+ubusd +ubus +libjson-script +ubox +USE_GLIBC:librt +libubox +libubus +libblobmsg-json +libjson-c + DEPENDS:=+ubusd +ubus +libjson-script +ubox +USE_GLIBC:librt +libubox \ + +libubus +libblobmsg-json +libjson-c +jshn TITLE:=OpenWrt system process manager USERID:=:dialout=20 :audio=29 endef +define Package/procd + $(call Package/procd/Default) + VARIANT:=default + CONFLICTS:=procd-selinux +endef + +define Package/procd-selinux + $(call Package/procd/Default) + DEPENDS += +libselinux + TITLE += with SELinux support + PROVIDES:=procd + VARIANT:=selinux +endef + define Package/procd-ujail SECTION:=base CATEGORY:=Base system - DEPENDS:=@KERNEL_NAMESPACES +@KERNEL_UTS_NS +@KERNEL_IPC_NS +@KERNEL_PID_NS +libubox +libblobmsg-json + DEPENDS:=@KERNEL_NAMESPACES +@KERNEL_UTS_NS +@KERNEL_IPC_NS +@KERNEL_PID_NS \ + +libubox +libubus +libuci +libblobmsg-json TITLE:=OpenWrt process jail helper endef define Package/procd-seccomp SECTION:=base CATEGORY:=Base system - DEPENDS:=@(arm||armeb||mips||mipsel||i386||powerpc||x86_64) @!TARGET_uml @KERNEL_SECCOMP +libubox +libblobmsg-json + DEPENDS:=@SECCOMP +libubox +libblobmsg-json TITLE:=OpenWrt process seccomp helper + utrace endef +define Package/uxc + SECTION:=base + CATEGORY:=Base system + DEPENDS:=+procd-ujail +libubus +libubox +libblobmsg-json +blockd +PACKAGE_uxc:rpcd + TITLE:=OpenWrt container management + MAINTAINER:=Daniel Golle +endef + define Package/procd/config menu "Configuration" - depends on PACKAGE_procd + depends on PACKAGE_procd || PACKAGE_procd-selinux config PROCD_SHOW_BOOT bool default n prompt "Print the shutdown to the console as well as logging it to syslog" -config PROCD_ZRAM_TMPFS - bool - default n - prompt "Mount /tmp using zram." endmenu endef +ifeq ($(BUILD_VARIANT),selinux) + CMAKE_OPTIONS += -DSELINUX=1 +endif ifeq ($(CONFIG_PROCD_SHOW_BOOT),y) CMAKE_OPTIONS += -DSHOW_BOOT_ON_CONSOLE=1 endif -ifeq ($(CONFIG_PROCD_ZRAM_TMPFS),y) - CMAKE_OPTIONS += -DZRAM_TMPFS=1 -endif - ifdef CONFIG_PACKAGE_procd-ujail CMAKE_OPTIONS += -DJAIL_SUPPORT=1 endif @@ -102,8 +121,11 @@ define Package/procd/install $(INSTALL_BIN) ./files/reload_config $(1)/sbin/ $(INSTALL_CONF) ./files/hotplug*.json $(1)/etc/ $(INSTALL_DATA) ./files/procd.sh $(1)/lib/functions/ + $(INSTALL_BIN) ./files/service $(1)/sbin/service endef +Package/procd-selinux/install = $(Package/procd/install) + define Package/procd-ujail/install $(INSTALL_DIR) $(1)/sbin $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/ujail $(1)/sbin/ @@ -117,6 +139,19 @@ define Package/procd-seccomp/install $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/lib/libpreload-trace.so $(1)/lib endef +define Package/uxc/conffiles +/etc/uxc +endef + +define Package/uxc/install + $(INSTALL_DIR) $(1)/sbin + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/uxc $(1)/sbin/ + $(INSTALL_DIR) $(1)/etc/init.d + $(INSTALL_BIN) ./files/uxc.init $(1)/etc/init.d/uxc +endef + $(eval $(call BuildPackage,procd)) +$(eval $(call BuildPackage,procd-selinux)) $(eval $(call BuildPackage,procd-ujail)) $(eval $(call BuildPackage,procd-seccomp)) +$(eval $(call BuildPackage,uxc)) diff --git a/package/system/procd/files/hotplug.json b/package/system/procd/files/hotplug.json index ac2fca22618..b930b307a4f 100644 --- a/package/system/procd/files/hotplug.json +++ b/package/system/procd/files/hotplug.json @@ -7,9 +7,19 @@ [ "has", "MINOR" ] ], [ + [ "if", + [ "eq", "DEVNAME", "null" ], + [ + [ "makedev", "/dev/%DEVNAME%", "0666" ], + [ "exec", "/bin/ln", "-s", "/proc/self/fd/0", "/dev/stdin" ], + [ "exec", "/bin/ln", "-s", "/proc/self/fd/1", "/dev/stdout" ], + [ "exec", "/bin/ln", "-s", "/proc/self/fd/2", "/dev/stderr" ], + [ "return" ] + ] + ], [ "if", [ "eq", "DEVNAME", - [ "null", "full", "ptmx", "zero", "tty", "net", "random", "urandom" ] + [ "full", "ptmx", "zero", "tty", "net", "random", "urandom" ] ], [ [ "makedev", "/dev/%DEVNAME%", "0666" ], @@ -37,6 +47,10 @@ [ "load-firmware", "/lib/firmware" ], [ "return" ] ] + ], + [ "if", + [ "regex", "DEVNAME", "^ttyGS" ], + [ "start-console", "%DEVNAME%" ] ] ], "remove" : [ @@ -57,12 +71,6 @@ ], [ "button", "/etc/rc.button/%BUTTON%" ] ], - [ "if", - [ "eq", "SUBSYSTEM", - [ "devcoredump", "minidump" ] - ], - [ "exec", "/sbin/hotplug-call", "%SUBSYSTEM%" ] - ], [ "if", [ "and", [ "eq", "SUBSYSTEM", "usb-serial" ], diff --git a/package/system/procd/files/procd.sh b/package/system/procd/files/procd.sh index 529ded1795d..5148b2f03c3 100644 --- a/package/system/procd/files/procd.sh +++ b/package/system/procd/files/procd.sh @@ -194,6 +194,10 @@ _procd_add_jail() { procfs) json_add_boolean "procfs" "1";; sysfs) json_add_boolean "sysfs" "1";; ronly) json_add_boolean "ronly" "1";; + requirejail) json_add_boolean "requirejail" "1";; + netns) json_add_boolean "netns" "1";; + userns) json_add_boolean "userns" "1";; + cgroupsns) json_add_boolean "cgroupsns" "1";; esac done json_add_object "mount" @@ -242,7 +246,7 @@ _procd_set_param() { env|data|limits) _procd_add_table "$type" "$@" ;; - command|netdev|file|respawn|watch) + command|netdev|file|respawn|watch|watchdog) _procd_add_array "$type" "$@" ;; error) @@ -256,7 +260,8 @@ _procd_set_param() { reload_signal) json_add_int "$type" $(kill -l "$1") ;; - pidfile|user|group|seccomp|capabilities|facility) + pidfile|user|group|seccomp|capabilities|facility|\ + extroot|overlaydir|tmpoverlaysize) json_add_string "$type" "$1" ;; stdout|stderr|no_new_privs) @@ -323,6 +328,79 @@ _procd_add_config_trigger() { json_close_array } +_procd_add_mount_trigger() { + json_add_array + _procd_add_array_data "$1" + local action="$2" + local multi=0 + shift ; shift + + json_add_array + _procd_add_array_data "if" + + if [ "$2" ]; then + json_add_array + _procd_add_array_data "or" + multi=1 + fi + + while [ "$1" ]; do + json_add_array + _procd_add_array_data "eq" "target" "$1" + shift + json_close_array + done + + [ $multi = 1 ] && json_close_array + + json_add_array + _procd_add_array_data "run_script" /etc/init.d/$name $action + json_close_array + + json_close_array + _procd_add_timeout + json_close_array +} + +_procd_add_action_mount_trigger() { + local action="$1" + shift + local mountpoints="$(procd_get_mountpoints "$@")" + [ "${mountpoints//[[:space:]]}" ] || return 0 + local script=$(readlink "$initscript") + local name=$(basename ${script:-$initscript}) + + _procd_open_trigger + _procd_add_mount_trigger mount.add $action "$mountpoints" + _procd_close_trigger +} + +procd_get_mountpoints() { + ( + __procd_check_mount() { + local cfg="$1" + local path="${2%%/}/" + local target + config_get target "$cfg" target + target="${target%%/}/" + [ "$path" != "${path##$target}" ] && echo "${target%%/}" + } + local mpath + config_load fstab + for mpath in "$@"; do + config_foreach __procd_check_mount mount "$mpath" + done + ) | sort -u +} + +_procd_add_restart_mount_trigger() { + _procd_add_action_mount_trigger restart "$@" +} + +_procd_add_reload_mount_trigger() { + _procd_add_action_mount_trigger reload "$@" +} + _procd_add_raw_trigger() { json_add_array _procd_add_array_data "$1" @@ -372,7 +450,7 @@ _procd_append_param() { env|data|limits) _procd_add_table_data "$@" ;; - command|netdev|file|respawn|watch) + command|netdev|file|respawn|watch|watchdog) _procd_add_array_data "$@" ;; error) @@ -407,12 +485,12 @@ _procd_add_instance() { procd_running() { local service="$1" - local instance="${2:-instance1}" - local running + local instance="${2:-*}" + [ "$instance" = "*" ] || instance="'$instance'" json_init json_add_string name "$service" - running=$(_procd_ubus_call list | jsonfilter -e "@['$service'].instances['$instance'].running") + local running=$(_procd_ubus_call list | jsonfilter -l 1 -e "@['$service'].instances[$instance].running") [ "$running" = "true" ] } @@ -443,6 +521,31 @@ _procd_send_signal() { _procd_ubus_call signal } +_procd_status() { + local service="$1" + local instance="$2" + local data + + json_init + [ -n "$service" ] && json_add_string name "$service" + + data=$(_procd_ubus_call list | jsonfilter -e '@["'"$service"'"]') + [ -z "$data" ] && { echo "inactive"; return 3; } + + data=$(echo "$data" | jsonfilter -e '$.instances') + if [ -z "$data" ]; then + [ -z "$instance" ] && { echo "active with no instances"; return 0; } + data="[]" + fi + + [ -n "$instance" ] && instance="\"$instance\"" || instance='*' + if [ -z "$(echo "$data" | jsonfilter -e '$['"$instance"']')" ]; then + echo "unknown instance $instance"; return 4 + else + echo "running"; return 0 + fi +} + procd_open_data() { local name="$1" json_set_namespace procd __procd_old_cb @@ -498,10 +601,10 @@ uci_validate_section() local _result local _error shift; shift; shift - _result=`/sbin/validate_data "$_package" "$_type" "$_name" "$@" 2> /dev/null` + _result=$(/sbin/validate_data "$_package" "$_type" "$_name" "$@" 2> /dev/null) _error=$? eval "$_result" - [ "$_error" = "0" ] || `/sbin/validate_data "$_package" "$_type" "$_name" "$@" 1> /dev/null` + [ "$_error" = "0" ] || $(/sbin/validate_data "$_package" "$_type" "$_name" "$@" 1> /dev/null) return $_error } @@ -529,8 +632,12 @@ _procd_wrapper \ procd_add_raw_trigger \ procd_add_config_trigger \ procd_add_interface_trigger \ + procd_add_mount_trigger \ procd_add_reload_trigger \ procd_add_reload_interface_trigger \ + procd_add_action_mount_trigger \ + procd_add_reload_mount_trigger \ + procd_add_restart_mount_trigger \ procd_open_trigger \ procd_close_trigger \ procd_open_instance \ diff --git a/package/system/procd/files/reload_config b/package/system/procd/files/reload_config index 8d1cdb13789..3ae0de96a3f 100644 --- a/package/system/procd/files/reload_config +++ b/package/system/procd/files/reload_config @@ -7,7 +7,7 @@ for config in /etc/config/*; do done MD5FILE=/var/run/config.md5 [ -f $MD5FILE ] && { - for c in `md5sum -c $MD5FILE 2>/dev/null| grep FAILED | cut -d: -f1`; do + for c in $(md5sum -c $MD5FILE 2>/dev/null| grep FAILED | cut -d: -f1); do ubus call service event "{ \"type\": \"config.change\", \"data\": { \"package\": \"$(basename $c)\" }}" done } diff --git a/package/system/procd/files/service b/package/system/procd/files/service new file mode 100644 index 00000000000..1ceacfe5add --- /dev/null +++ b/package/system/procd/files/service @@ -0,0 +1,30 @@ +#!/bin/sh + +main() { + local service="$1" + local cmd="$2" + + local boot status + + if [ -f "/etc/init.d/${service}" ]; then + /etc/init.d/"${service}" "${cmd}" + exit "$?" + fi + + if [ -n "$service" ]; then + echo "Service \"$1\" not found:" + exit 1 + fi + + echo "Usage: $(basename "$0") [command]" + for service in /etc/init.d/* ; do + boot="$($service enabled && echo "enabled" || echo "disabled" )" + status="$( [ "$(ubus call service list "{ 'verbose': true, 'name': '$(basename "$service")' }" \ + | jsonfilter -q -e "@['$(basename "$service")'].instances[*].running" | uniq)" = "true" ] \ + && echo "running" || echo "stopped" )" + + printf "%-30s\\t%10s\\t%10s\\n" "$service" "$boot" "$status" + done +} + +main "$@" diff --git a/package/system/procd/files/uxc.init b/package/system/procd/files/uxc.init new file mode 100644 index 00000000000..0b51925a719 --- /dev/null +++ b/package/system/procd/files/uxc.init @@ -0,0 +1,16 @@ +#!/bin/sh /etc/rc.common + +START=99 +USE_PROCD=1 +NAME=uxc +PROG=/sbin/uxc + +start_service() { + procd_open_instance "uxc" + procd_set_param command "$PROG" boot + procd_close_instance +} + +service_triggers() { + procd_add_raw_trigger "mount.add" 3000 /etc/init.d/uxc start +} diff --git a/package/system/ubus/Makefile b/package/system/ubus/Makefile index 015d52678f9..c70defcafa5 100644 --- a/package/system/ubus/Makefile +++ b/package/system/ubus/Makefile @@ -5,17 +5,18 @@ PKG_RELEASE:=1 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL=$(PROJECT_GIT)/project/ubus.git -PKG_SOURCE_DATE:=2022-02-21 -PKG_SOURCE_VERSION:=b32a0e17b37847e8357b53a358d1311bfc3ad5d2 -PKG_MIRROR_HASH:=fddf17b1faeb2ab09a3bed2e301a9cc83cb6ceb69af57cd58dc2132b58276f8b -PKG_ABI_VERSION:=20210603 +PKG_SOURCE_DATE:=2022-06-01 +PKG_SOURCE_VERSION:=2bebf93cd3343fe49f22a05ef935e460d2d44f67 +PKG_MIRROR_HASH:=4efd873928089c086bbac02f3ca5bae55904500b6e6f1c4c377181a00b67147f +PKG_ABI_VERSION:=$(call abi_version_str,$(PKG_SOURCE_DATE)) CMAKE_INSTALL:=1 PKG_LICENSE:=LGPL-2.1 PKG_LICENSE_FILES:= - PKG_MAINTAINER:=Felix Fietkau +PKG_ASLR_PIE_REGULAR:=1 + include $(INCLUDE_DIR)/package.mk include $(INCLUDE_DIR)/cmake.mk @@ -31,6 +32,7 @@ define Package/ubusd CATEGORY:=Base system TITLE:=OpenWrt RPC daemon DEPENDS:=+libubox +libblobmsg-json + USERID:=ubus=81:ubus=81 endef define Package/libubus @@ -51,7 +53,7 @@ endef TARGET_CFLAGS += -I$(STAGING_DIR)/usr/include -flto TARGET_LDFLAGS += -flto -CMAKE_OPTIONS = \ +CMAKE_OPTIONS += \ -DLUAPATH=/usr/lib/lua \ -DABIVERSION="$(PKG_ABI_VERSION)" diff --git a/package/system/uci/Makefile b/package/system/uci/Makefile index 903d4c50ca3..48e5bcc4da5 100644 --- a/package/system/uci/Makefile +++ b/package/system/uci/Makefile @@ -9,21 +9,19 @@ include $(TOPDIR)/rules.mk PKG_NAME:=uci -PKG_RELEASE:=4 +PKG_RELEASE:=6 PKG_SOURCE_URL=$(PROJECT_GIT)/project/uci.git PKG_SOURCE_PROTO:=git -PKG_SOURCE_DATE=2019-09-01 -PKG_SOURCE_VERSION:=415f9e48436d29f612348f58f546b3ad8d74ac38 -PKG_MIRROR_HASH:=06f2801b103c359129c1675cbe5045c2cd04d756c2ab1efd2160608f34a27a8f +PKG_SOURCE_DATE=2021-10-22 +PKG_SOURCE_VERSION:=f84f49f00fb70364f58b4cce72f1796a7190d370 +PKG_MIRROR_HASH:=9f4747a029976b43fcea9919643ce71e587e515edc21b280163f7262360d847f PKG_LICENSE:=LGPL-2.1 PKG_LICENSE_FILES:= PKG_MAINTAINER:=Felix Fietkau -PKG_BUILD_PARALLEL:=0 - include $(INCLUDE_DIR)/package.mk include $(INCLUDE_DIR)/cmake.mk @@ -55,7 +53,7 @@ endef TARGET_CFLAGS += -I$(STAGING_DIR)/usr/include TARGET_LDFLAGS += -L$(STAGING_DIR)/usr/lib -CMAKE_OPTIONS = \ +CMAKE_OPTIONS += \ -DLUAPATH=/usr/lib/lua \ $(if $(DEBUG),-DUCI_DEBUG=ON) @@ -84,6 +82,6 @@ define Build/InstallDev $(CP) $(PKG_BUILD_DIR)/libucimap.a $(1)/usr/lib endef -$(eval $(call BuildPackage,uci)) $(eval $(call BuildPackage,libuci)) $(eval $(call BuildPackage,libuci-lua)) +$(eval $(call BuildPackage,uci)) diff --git a/package/system/uci/files/lib/config/uci.sh b/package/system/uci/files/lib/config/uci.sh index 1e85ced8342..6ebfb73ae44 100644 --- a/package/system/uci/files/lib/config/uci.sh +++ b/package/system/uci/files/lib/config/uci.sh @@ -1,4 +1,3 @@ -#!/bin/sh # Shell script compatibility wrappers for /sbin/uci # # Copyright (C) 2008-2010 OpenWrt.org @@ -150,6 +149,14 @@ uci_remove_list() { /sbin/uci ${UCI_CONFIG_DIR:+-c $UCI_CONFIG_DIR} del_list "$PACKAGE.$CONFIG.$OPTION=$VALUE" } +uci_revert() { + local PACKAGE="$1" + local CONFIG="$2" + local OPTION="$3" + + /sbin/uci ${UCI_CONFIG_DIR:+-c $UCI_CONFIG_DIR} revert "$PACKAGE${CONFIG:+.$CONFIG}${OPTION:+.$OPTION}" +} + uci_commit() { local PACKAGE="$1" /sbin/uci ${UCI_CONFIG_DIR:+-c $UCI_CONFIG_DIR} commit $PACKAGE diff --git a/package/system/uci/patches/001-file-uci_parse_package-fix-heap-use-after-free.patch b/package/system/uci/patches/001-file-uci_parse_package-fix-heap-use-after-free.patch deleted file mode 100644 index 6a922278ba2..00000000000 --- a/package/system/uci/patches/001-file-uci_parse_package-fix-heap-use-after-free.patch +++ /dev/null @@ -1,51 +0,0 @@ -From a3e650911f5e6f67dcff09974df3775dfd615da6 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Petr=20=C5=A0tetiar?= -Date: Sat, 3 Oct 2020 01:29:21 +0200 -Subject: [PATCH] file: uci_parse_package: fix heap use after free -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Fixes following issue which is caused by usage of pointer which pointed -to a reallocated address: - - ERROR: AddressSanitizer: heap-use-after-free on address 0x619000000087 at pc 0x000000509aa7 bp 0x7ffd6b9c3c40 sp 0x7ffd6b9c3400 - READ of size 2 at 0x619000000087 thread T0 - #0 0x509aa6 in strdup (test-fuzz+0x509aa6) - #1 0x7fc36d2a1636 in uci_strdup util.c:60:8 - #2 0x7fc36d29e1ac in uci_alloc_generic list.c:55:13 - #3 0x7fc36d29e241 in uci_alloc_package list.c:253:6 - #4 0x7fc36d2a0ba3 in uci_switch_config file.c:375:18 - #5 0x7fc36d2a09b8 in uci_parse_package file.c:397:2 - #6 0x7fc36d2a09b8 in uci_parse_line file.c:513:6 - #7 0x7fc36d2a09b8 in uci_import file.c:681:4 - - 0x619000000087 is located 7 bytes inside of 1024-byte region [0x619000000080,0x619000000480) - freed by thread T0 here: - #0 0x51daa9 in realloc (test-fuzz+0x51daa9) - #1 0x7fc36d2a1612 in uci_realloc util.c:49:8 - - previously allocated by thread T0 here: - #0 0x51daa9 in realloc (test-fuzz+0x51daa9) - #1 0x7fc36d2a1612 in uci_realloc util.c:49:8 - -Reported-by: Jeremy Galindo -Signed-off-by: Petr Štetiar ---- - file.c | 2 +- - ...sig-06,src-000079,time-22005942,op-ext_AO,pos-8 | Bin 0 -> 56 bytes - 2 files changed, 1 insertion(+), 1 deletion(-) - create mode 100644 tests/fuzz/corpus/id-000000,sig-06,src-000079,time-22005942,op-ext_AO,pos-8 - ---- a/file.c -+++ b/file.c -@@ -388,8 +388,8 @@ static void uci_parse_package(struct uci - pctx->pos += strlen(pctx_cur_str(pctx)) + 1; - - ofs_name = next_arg(ctx, true, true, true); -- name = pctx_str(pctx, ofs_name); - assert_eol(ctx); -+ name = pctx_str(pctx, ofs_name); - if (single) - return; - diff --git a/package/system/uci/patches/002-file-Check-buffer-size-after-strtok.patch b/package/system/uci/patches/002-file-Check-buffer-size-after-strtok.patch deleted file mode 100644 index 95cde2102b6..00000000000 --- a/package/system/uci/patches/002-file-Check-buffer-size-after-strtok.patch +++ /dev/null @@ -1,104 +0,0 @@ -From eae126f66663e5c73e5d290b8e3134449489340f Mon Sep 17 00:00:00 2001 -From: Hauke Mehrtens -Date: Sun, 4 Oct 2020 17:14:49 +0200 -Subject: [PATCH] file: Check buffer size after strtok() -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -This fixes a heap overflow in the parsing of the uci line. - -The line which is parsed and put into pctx->buf is null terminated and -stored on the heap. In the uci_parse_line() function we use strtok() to -split this string in multiple parts after divided by a space or tab. -strtok() replaces these characters with a NULL byte. If the next byte is -NULL we assume that this NULL byte was added by strtok() and try to -parse the string after this NULL byte. If this NULL byte was not added -by strtok(), but by fgets() to mark the end of the string we would read -over this end of the string in uninitialized memory and later over the -allocated buffer. - -Fix this problem by storing how long the line we read was and check if -we would read over the end of the string here. - -This also adds the input which detected this crash to the corpus of the -fuzzer. - -Signed-off-by: Hauke Mehrtens -[fixed merge conflict in tests] -Signed-off-by: Petr Štetiar ---- - file.c | 19 ++++++++++++++++--- - tests/cram/test-san_uci_import.t | 1 + - tests/cram/test_uci_import.t | 1 + - .../2e18ecc3a759dedc9357b1298e9269eccc5c5a6b | 1 + - uci_internal.h | 1 + - 5 files changed, 20 insertions(+), 3 deletions(-) - create mode 100644 tests/fuzz/corpus/2e18ecc3a759dedc9357b1298e9269eccc5c5a6b - ---- a/file.c -+++ b/file.c -@@ -64,6 +64,7 @@ __private void uci_getln(struct uci_cont - return; - - ofs += strlen(p); -+ pctx->buf_filled = ofs; - if (pctx->buf[ofs - 1] == '\n') { - pctx->line++; - return; -@@ -121,6 +122,15 @@ static inline void addc(struct uci_conte - *pos_src += 1; - } - -+static int uci_increase_pos(struct uci_parse_context *pctx, size_t add) -+{ -+ if (pctx->pos + add > pctx->buf_filled) -+ return -EINVAL; -+ -+ pctx->pos += add; -+ return 0; -+} -+ - /* - * parse a double quoted string argument from the command line - */ -@@ -385,7 +395,8 @@ static void uci_parse_package(struct uci - char *name; - - /* command string null-terminated by strtok */ -- pctx->pos += strlen(pctx_cur_str(pctx)) + 1; -+ if (uci_increase_pos(pctx, strlen(pctx_cur_str(pctx)) + 1)) -+ uci_parse_error(ctx, "package without name"); - - ofs_name = next_arg(ctx, true, true, true); - assert_eol(ctx); -@@ -417,7 +428,8 @@ static void uci_parse_config(struct uci_ - } - - /* command string null-terminated by strtok */ -- pctx->pos += strlen(pctx_cur_str(pctx)) + 1; -+ if (uci_increase_pos(pctx, strlen(pctx_cur_str(pctx)) + 1)) -+ uci_parse_error(ctx, "config without name"); - - ofs_type = next_arg(ctx, true, false, false); - type = pctx_str(pctx, ofs_type); -@@ -467,7 +479,8 @@ static void uci_parse_option(struct uci_ - uci_parse_error(ctx, "option/list command found before the first section"); - - /* command string null-terminated by strtok */ -- pctx->pos += strlen(pctx_cur_str(pctx)) + 1; -+ if (uci_increase_pos(pctx, strlen(pctx_cur_str(pctx)) + 1)) -+ uci_parse_error(ctx, "option without name"); - - ofs_name = next_arg(ctx, true, true, false); - ofs_value = next_arg(ctx, false, false, false); ---- a/uci_internal.h -+++ b/uci_internal.h -@@ -33,6 +33,7 @@ struct uci_parse_context - const char *name; - char *buf; - int bufsz; -+ size_t buf_filled; - int pos; - }; - #define pctx_pos(pctx) ((pctx)->pos) diff --git a/qca/feeds/packages/utils/cryptsetup/patches/001-json-c.patch b/qca/feeds/packages/utils/cryptsetup/patches/001-json-c.patch new file mode 100644 index 00000000000..b07dcf11648 --- /dev/null +++ b/qca/feeds/packages/utils/cryptsetup/patches/001-json-c.patch @@ -0,0 +1,249 @@ +diff '--color=auto' -aur a/lib/luks2/luks2_internal.h b/lib/luks2/luks2_internal.h +--- a/lib/luks2/luks2_internal.h 2019-01-31 15:37:12.000000000 -0500 ++++ b/lib/luks2/luks2_internal.h 2022-09-06 16:27:20.608245999 -0400 +@@ -60,9 +60,9 @@ + + json_object *parse_json_len(struct crypt_device *cd, const char *json_area, + uint64_t max_length, int *json_len); +-uint64_t json_object_get_uint64(json_object *jobj); +-uint32_t json_object_get_uint32(json_object *jobj); +-json_object *json_object_new_uint64(uint64_t value); ++uint64_t crypt_jobj_get_uint64(json_object *jobj); ++uint32_t crypt_jobj_get_uint32(json_object *jobj); ++json_object *crypt_jobj_new_uint64(uint64_t value); + int json_object_object_add_by_uint(json_object *jobj, unsigned key, json_object *jobj_val); + void json_object_object_del_by_uint(json_object *jobj, unsigned key); + +diff '--color=auto' -aur a/lib/luks2/luks2_json_metadata.c b/lib/luks2/luks2_json_metadata.c +--- a/lib/luks2/luks2_json_metadata.c 2019-01-31 15:37:12.000000000 -0500 ++++ b/lib/luks2/luks2_json_metadata.c 2022-09-06 16:49:01.460053403 -0400 +@@ -191,9 +191,9 @@ + * json_type_int needs to be validated first. + * See validate_json_uint32() + */ +-uint32_t json_object_get_uint32(json_object *jobj) ++uint32_t crypt_jobj_get_uint32(json_object *jobj) + { +- return json_object_get_int64(jobj); ++ return crypt_jobj_get_uint64(jobj); + } + + /* jobj has to be json_type_string and numbered */ +@@ -206,20 +206,20 @@ + tmp = strtoull(json_object_get_string(jobj), &endptr, 10); + if (*endptr || errno) { + *value = 0; +- return FALSE; ++ return 0; + } + + *value = tmp; +- return TRUE; ++ return 1; + } + +-uint64_t json_object_get_uint64(json_object *jobj) ++uint64_t crypt_jobj_get_uint64(json_object *jobj) + { + uint64_t r; + return json_str_to_uint64(jobj, &r) ? r : 0; + } + +-json_object *json_object_new_uint64(uint64_t value) ++json_object *crypt_jobj_new_uint64(uint64_t value) + { + /* 18446744073709551615 */ + char num[21]; +@@ -244,9 +244,9 @@ + for (i = 0; key[i]; i++) + if (!isdigit(key[i])) { + log_dbg(cd, "%s \"%s\" is not in numbered form.", name, key); +- return FALSE; ++ return 0; + } +- return TRUE; ++ return 1; + } + + json_object *json_contains(struct crypt_device *cd, json_object *jobj, const char *name, +@@ -280,7 +280,7 @@ + } + + json_object_object_get_ex(val, "offset", &jobj_offset); +- tmp = json_object_get_uint64(jobj_offset); ++ tmp = crypt_jobj_get_uint64(jobj_offset); + + if (!tmp) + return tmp; +@@ -299,7 +299,7 @@ + errno = 0; + tmp = json_object_get_int64(jobj); + +- return (errno || tmp < 0 || tmp > UINT32_MAX) ? FALSE : TRUE; ++ return (errno || tmp < 0 || tmp > UINT32_MAX) ? 0 : 1; + } + + static json_bool validate_keyslots_array(struct crypt_device *cd, +@@ -312,17 +312,17 @@ + jobj = json_object_array_get_idx(jarr, i); + if (!json_object_is_type(jobj, json_type_string)) { + log_dbg(cd, "Illegal value type in keyslots array at index %d.", i); +- return FALSE; ++ return 0; + } + + if (!json_contains(cd, jobj_keys, "", "Keyslots section", + json_object_get_string(jobj), json_type_object)) +- return FALSE; ++ return 0; + + i++; + } + +- return TRUE; ++ return 1; + } + + static json_bool validate_segments_array(struct crypt_device *cd, +@@ -335,17 +335,17 @@ + jobj = json_object_array_get_idx(jarr, i); + if (!json_object_is_type(jobj, json_type_string)) { + log_dbg(cd, "Illegal value type in segments array at index %d.", i); +- return FALSE; ++ return 0; + } + + if (!json_contains(cd, jobj_segments, "", "Segments section", + json_object_get_string(jobj), json_type_object)) +- return FALSE; ++ return 0; + + i++; + } + +- return TRUE; ++ return 1; + } + + static json_bool segment_has_digest(const char *segment_name, json_object *jobj_digests) +@@ -356,10 +356,10 @@ + UNUSED(key); + json_object_object_get_ex(val, "segments", &jobj_segments); + if (LUKS2_array_jobj(jobj_segments, segment_name)) +- return TRUE; ++ return 1; + } + +- return FALSE; ++ return 0; + } + + static json_bool validate_intervals(struct crypt_device *cd, +@@ -371,18 +371,18 @@ + while (i < length) { + if (ix[i].offset < 2 * metadata_size) { + log_dbg(cd, "Illegal area offset: %" PRIu64 ".", ix[i].offset); +- return FALSE; ++ return 0; + } + + if (!ix[i].length) { + log_dbg(cd, "Area length must be greater than zero."); +- return FALSE; ++ return 0; + } + + if ((ix[i].offset + ix[i].length) > keyslots_area_end) { + log_dbg(cd, "Area [%" PRIu64 ", %" PRIu64 "] overflows binary keyslots area (ends at offset: %" PRIu64 ").", + ix[i].offset, ix[i].offset + ix[i].length, keyslots_area_end); +- return FALSE; ++ return 0; + } + + for (j = 0; j < length; j++) { +@@ -392,14 +392,14 @@ + log_dbg(cd, "Overlapping areas [%" PRIu64 ",%" PRIu64 "] and [%" PRIu64 ",%" PRIu64 "].", + ix[i].offset, ix[i].offset + ix[i].length, + ix[j].offset, ix[j].offset + ix[j].length); +- return FALSE; ++ return 0; + } + } + + i++; + } + +- return TRUE; ++ return 1; + } + + int LUKS2_keyslot_validate(struct crypt_device *cd, json_object *hdr_jobj, json_object *hdr_keyslot, const char *key) +@@ -454,7 +454,7 @@ + + json = json_object_to_json_string_ext(hdr_jobj, + JSON_C_TO_STRING_PLAIN | JSON_C_TO_STRING_NOSLASHESCAPE); +- json_area_size = json_object_get_uint64(jobj1); ++ json_area_size = crypt_jobj_get_uint64(jobj1); + json_size = (uint64_t)strlen(json); + + if (hdr_json_size != json_area_size) { +@@ -542,7 +542,7 @@ + return 1; + } + +- sector_size = json_object_get_uint32(jobj_sector_size); ++ sector_size = crypt_jobj_get_uint32(jobj_sector_size); + if (!sector_size || MISALIGNED_512(sector_size)) { + log_dbg(cd, "Illegal sector size: %" PRIu32, sector_size); + return 1; +@@ -1476,7 +1476,7 @@ + log_std(cd, " %s: %s%s\n", slot, tmps, r == -ENOENT ? " (unbound)" : ""); + + if (json_object_object_get_ex(val, "key_size", &jobj2)) +- log_std(cd, "\tKey: %u bits\n", json_object_get_uint32(jobj2) * 8); ++ log_std(cd, "\tKey: %u bits\n", crypt_jobj_get_uint32(jobj2) * 8); + + log_std(cd, "\tPriority: %s\n", get_priority_desc(val)); + +@@ -1559,7 +1559,7 @@ + log_std(cd, "\tcipher: %s\n", json_object_get_string(jobj1)); + + if (json_object_object_get_ex(jobj_segment, "sector_size", &jobj1)) +- log_std(cd, "\tsector: %" PRIu32 " [bytes]\n", json_object_get_uint32(jobj1)); ++ log_std(cd, "\tsector: %" PRIu32 " [bytes]\n", crypt_jobj_get_uint32(jobj1)); + + if (json_object_object_get_ex(jobj_segment, "integrity", &jobj1) && + json_object_object_get_ex(jobj1, "type", &jobj2)) +diff '--color=auto' -aur a/lib/luks2/luks2_keyslot_luks2.c b/lib/luks2/luks2_keyslot_luks2.c +--- a/lib/luks2/luks2_keyslot_luks2.c 2019-01-31 15:37:12.000000000 -0500 ++++ b/lib/luks2/luks2_keyslot_luks2.c 2022-09-06 16:53:03.014321241 -0400 +@@ -607,7 +607,7 @@ + log_std(cd, "\tCipher: %s\n", json_object_get_string(jobj1)); + + json_object_object_get_ex(jobj_area, "key_size", &jobj1); +- log_std(cd, "\tCipher key: %u bits\n", json_object_get_uint32(jobj1) * 8); ++ log_std(cd, "\tCipher key: %u bits\n", crypt_jobj_get_uint32(jobj1) * 8); + + json_object_object_get_ex(jobj_kdf, "type", &jobj1); + log_std(cd, "\tPBKDF: %s\n", json_object_get_string(jobj1)); +diff '--color=auto' -aur a/lib/luks2/luks2_luks1_convert.c b/lib/luks2/luks2_luks1_convert.c +--- a/lib/luks2/luks2_luks1_convert.c 2019-02-06 10:19:08.000000000 -0500 ++++ b/lib/luks2/luks2_luks1_convert.c 2022-09-06 16:53:05.574686318 -0400 +@@ -763,7 +763,7 @@ + + if (!json_object_object_get_ex(jobj_kdf, "iterations", &jobj1)) + continue; +- hdr1->keyblock[i].passwordIterations = json_object_get_uint32(jobj1); ++ hdr1->keyblock[i].passwordIterations = crypt_jobj_get_uint32(jobj1); + + if (!json_object_object_get_ex(jobj_kdf, "salt", &jobj1)) + continue; +@@ -804,7 +804,7 @@ + + if (!json_object_object_get_ex(jobj_digest, "iterations", &jobj1)) + return -EINVAL; +- hdr1->mkDigestIterations = json_object_get_uint32(jobj1); ++ hdr1->mkDigestIterations = crypt_jobj_get_uint32(jobj1); + + if (!json_object_object_get_ex(jobj_digest, "digest", &jobj1)) + return -EINVAL; diff --git a/qca/feeds/wlan-iw/package/network/utils/iw/patches/523-iw-fix-compile-issues.patch b/qca/feeds/wlan-iw/package/network/utils/iw/patches/523-iw-fix-compile-issues.patch index 9c679533586..8c50cd6aa1d 100644 --- a/qca/feeds/wlan-iw/package/network/utils/iw/patches/523-iw-fix-compile-issues.patch +++ b/qca/feeds/wlan-iw/package/network/utils/iw/patches/523-iw-fix-compile-issues.patch @@ -8,9 +8,8 @@ This patch fixes compilation issues identified locally for this iw-5.16 Signed-off-by: Karthikeyan Kathirvel --- Makefile | 20 ++++++++++---------- - sar.c | 9 +++++++++ scan.c | 2 +- - 3 files changed, 20 insertions(+), 11 deletions(-) + 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/Makefile b/Makefile index 2fb8db89c556..8bd5457279df 100644 @@ -66,26 +65,6 @@ index 2fb8db89c556..8bd5457279df 100644 endif # NO_PKG_CONFIG ifeq ($(V),1) -diff --git a/sar.c b/sar.c -index 5ab54ec59a4b..95e36e43eb0a 100644 ---- a/sar.c -+++ b/sar.c -@@ -8,6 +8,15 @@ - #include "nl80211.h" - #include "iw.h" - -+/** -+ * Add 16 bit integer attribute to netlink message. -+ * @arg msg Netlink message. -+ * @arg attrtype Attribute type. -+ * @arg value Numeric value. -+ */ -+#define NLA_PUT_S32(msg, attrtype, value) \ -+ NLA_PUT_TYPE(msg, uint16_t, attrtype, value) -+ - static int set_sar_specs(struct nl80211_state *state, - struct nl_msg *msg, - int argc, char **argv, diff --git a/scan.c b/scan.c index 8eddf486d0ea..8cd6d1f7dc0c 100644 --- a/scan.c diff --git a/quick_start.sh b/quick_start.sh index 6d1ac016d93..68ae5e6dde4 100755 --- a/quick_start.sh +++ b/quick_start.sh @@ -50,7 +50,7 @@ update_config(){ compile(){ $RUN "make defconfig" - $RUN "make -j4" + $RUN "make -j$(nproc)" } clean(){ diff --git a/rules.mk b/rules.mk index 44c657c7883..e43df954ba3 100644 --- a/rules.mk +++ b/rules.mk @@ -1,10 +1,7 @@ +# SPDX-License-Identifier: GPL-2.0-only # # Copyright (C) 2006-2010 OpenWrt.org # Copyright (C) 2016 LEDE Project -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# ifneq ($(__rules_inc),1) __rules_inc=1 @@ -30,7 +27,7 @@ empty:= space:= $(empty) $(empty) comma:=, merge=$(subst $(space),,$(1)) -confvar=$(shell echo '$(foreach v,$(1),$(v)=$(subst ','\'',$($(v))))' | $(STAGING_DIR_HOST)/bin/mkhash md5) +confvar=$(shell echo '$(foreach v,$(1),$(v)=$(subst ','\'',$($(v))))' | $(MKHASH) md5) strip_last=$(patsubst %.$(lastword $(subst .,$(space),$(1))),%,$(1)) paren_left = ( @@ -65,19 +62,24 @@ ARCH_PACKAGES:=$(call qstrip,$(CONFIG_TARGET_ARCH_PACKAGES)) BOARD:=$(call qstrip,$(CONFIG_TARGET_BOARD)) SUBTARGET:=$(call qstrip,$(CONFIG_TARGET_SUBTARGET)) TARGET_OPTIMIZATION:=$(call qstrip,$(CONFIG_TARGET_OPTIMIZATION)) -export EXTRA_OPTIMIZATION:=$(filter-out -fno-plt,$(call qstrip,$(CONFIG_EXTRA_OPTIMIZATION))) TARGET_SUFFIX=$(call qstrip,$(CONFIG_TARGET_SUFFIX)) BUILD_SUFFIX:=$(call qstrip,$(CONFIG_BUILD_SUFFIX)) SUBDIR:=$(patsubst $(TOPDIR)/%,%,${CURDIR}) BUILD_SUBDIR:=$(patsubst $(TOPDIR)/%,%,${CURDIR}) +NPROC:=$(shell sysctl -n hw.ncpu 2>/dev/null || nproc) export SHELL:=/usr/bin/env bash IS_PACKAGE_BUILD := $(if $(filter package/%,$(BUILD_SUBDIR)),1) OPTIMIZE_FOR_CPU=$(subst i386,i486,$(ARCH)) -FPIC:=-fPIC -HOST_FPIC:=-fPIC +ifneq (,$(findstring $(ARCH) , aarch64 aarch64_be powerpc )) + FPIC:=-DPIC -fPIC +else + FPIC:=-DPIC -fpic +endif + +HOST_FPIC:=-DPIC -fPIC ARCH_SUFFIX:=$(call qstrip,$(CONFIG_CPU_TYPE)) GCC_ARCH:= @@ -113,7 +115,6 @@ BIN_DIR:=$(OUTPUT_DIR)/targets/$(BOARD)/$(SUBTARGET) INCLUDE_DIR:=$(TOPDIR)/include SCRIPT_DIR:=$(TOPDIR)/scripts BUILD_DIR_BASE:=$(TOPDIR)/build_dir -PREBUILT_DIR:=$(TOPDIR)/prebuilt/$(if $(SUBTARGET),$(SUBTARGET),$(BOARD)) ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),) GCCV:=$(call qstrip,$(CONFIG_GCC_VERSION)) LIBC:=$(call qstrip,$(CONFIG_LIBC)) @@ -121,8 +122,8 @@ ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),) GNU_TARGET_NAME=$(OPTIMIZE_FOR_CPU)-openwrt-linux DIR_SUFFIX:=_$(LIBC)$(if $(CONFIG_arm),_eabi) BIN_DIR:=$(BIN_DIR)$(if $(CONFIG_USE_MUSL),,-$(LIBC)) - TARGET_DIR_NAME = target-$(if $(CONFIG_BUILD_SHORTENED_PATH),$(ARCH),$(ARCH)$(ARCH_SUFFIX)$(DIR_SUFFIX)$(if $(BUILD_SUFFIX),_$(BUILD_SUFFIX))) - TOOLCHAIN_DIR_NAME = toolchain-$(if $(CONFIG_BUILD_SHORTENED_PATH),$(ARCH),$(ARCH)$(ARCH_SUFFIX)_gcc-$(GCCV)$(DIR_SUFFIX)) + TARGET_DIR_NAME = target-$(ARCH)$(ARCH_SUFFIX)$(DIR_SUFFIX)$(if $(BUILD_SUFFIX),_$(BUILD_SUFFIX)) + TOOLCHAIN_DIR_NAME = toolchain-$(ARCH)$(ARCH_SUFFIX)_gcc-$(GCCV)$(DIR_SUFFIX) else ifeq ($(CONFIG_NATIVE_TOOLCHAIN),) GNU_TARGET_NAME=$(call qstrip,$(CONFIG_TARGET_NAME)) @@ -135,13 +136,9 @@ else TOOLCHAIN_DIR_NAME:=toolchain-$(GNU_TARGET_NAME) endif -ifeq ($(or $(CONFIG_EXTERNAL_TOOLCHAIN),$(CONFIG_GCC_VERSION_4_8),$(CONFIG_TARGET_uml)),) - ifeq ($(CONFIG_GCC_USE_EMBEDDED_PATH_REMAP),y) - iremap = -fmacro-prefix-map=$(1)=$(2) - else - iremap = -iremap$(1):$(2) - endif -endif +#ifeq ($(or $(CONFIG_EXTERNAL_TOOLCHAIN),$(CONFIG_TARGET_uml)),) +# iremap = -f$(if $(CONFIG_REPRODUCIBLE_DEBUG_INFO),file,macro)-prefix-map=$(1)=$(2) +#endif PACKAGE_DIR:=$(BIN_DIR)/packages PACKAGE_DIR_ALL:=$(TOPDIR)/staging_dir/packages/$(BOARD) @@ -155,7 +152,7 @@ TARGET_ROOTFS_DIR?=$(if $(call qstrip,$(CONFIG_TARGET_ROOTFS_DIR)),$(call qstrip TARGET_DIR:=$(TARGET_ROOTFS_DIR)/root-$(BOARD) STAGING_DIR_ROOT:=$(STAGING_DIR)/root-$(BOARD) STAGING_DIR_IMAGE:=$(STAGING_DIR)/image -BUILD_LOG_DIR:=$(TOPDIR)/logs +BUILD_LOG_DIR:=$(if $(call qstrip,$(CONFIG_BUILD_LOG_DIR)),$(call qstrip,$(CONFIG_BUILD_LOG_DIR)),$(TOPDIR)/logs) PKG_INFO_DIR := $(STAGING_DIR)/pkginfo BUILD_DIR_HOST:=$(if $(IS_PACKAGE_BUILD),$(BUILD_DIR_BASE)/hostpkg,$(BUILD_DIR_BASE)/host) @@ -165,12 +162,10 @@ STAGING_DIR_HOSTPKG:=$(TOPDIR)/staging_dir/hostpkg TARGET_PATH:=$(subst $(space),:,$(filter-out .,$(filter-out ./,$(subst :,$(space),$(PATH))))) TARGET_INIT_PATH:=$(call qstrip,$(CONFIG_TARGET_INIT_PATH)) TARGET_INIT_PATH:=$(if $(TARGET_INIT_PATH),$(TARGET_INIT_PATH),/usr/sbin:/sbin:/usr/bin:/bin) -TARGET_CFLAGS:=$(TARGET_OPTIMIZATION)$(if $(CONFIG_DEBUG), -g3) $(call qstrip,$(CONFIG_EXTRA_OPTIMIZATION)) -Wa,--noexecstack +TARGET_CFLAGS:=$(TARGET_OPTIMIZATION)$(if $(CONFIG_DEBUG), -g3) $(call qstrip,$(CONFIG_EXTRA_OPTIMIZATION)) TARGET_CXXFLAGS = $(TARGET_CFLAGS) TARGET_ASFLAGS_DEFAULT = $(TARGET_CFLAGS) TARGET_ASFLAGS = $(TARGET_ASFLAGS_DEFAULT) -TARGET_CPPFLAGS:=-I$(STAGING_DIR)/usr/include -I$(STAGING_DIR)/include -TARGET_LDFLAGS:=-L$(STAGING_DIR)/usr/lib -L$(STAGING_DIR)/lib ifneq ($(CONFIG_EXTERNAL_TOOLCHAIN),) LIBGCC_S_PATH=$(realpath $(wildcard $(call qstrip,$(CONFIG_LIBGCC_ROOT_DIR))/$(call qstrip,$(CONFIG_LIBGCC_FILE_SPEC)))) LIBGCC_S=$(if $(LIBGCC_S_PATH),-L$(dir $(LIBGCC_S_PATH)) -lgcc_s) @@ -244,6 +239,7 @@ export PKG_CONFIG HOSTCC:=gcc HOSTCXX:=g++ HOST_CPPFLAGS:=-I$(STAGING_DIR_HOST)/include $(if $(IS_PACKAGE_BUILD),-I$(STAGING_DIR_HOSTPKG)/include -I$(STAGING_DIR)/host/include) +HOST_CXXFLAGS:= HOST_CFLAGS:=-O2 $(HOST_CPPFLAGS) HOST_LDFLAGS:=-L$(STAGING_DIR_HOST)/lib $(if $(IS_PACKAGE_BUILD),-L$(STAGING_DIR_HOSTPKG)/lib -L$(STAGING_DIR)/host/lib) @@ -259,11 +255,16 @@ endif BUILD_KEY=$(TOPDIR)/key-build +FAKEROOT:=$(STAGING_DIR_HOST)/bin/fakeroot + TARGET_CC:=$(TARGET_CROSS)gcc TARGET_CXX:=$(TARGET_CROSS)g++ KPATCH:=$(SCRIPT_DIR)/patch-kernel.sh SED:=$(STAGING_DIR_HOST)/bin/sed -i -e ESED:=$(STAGING_DIR_HOST)/bin/sed -E -i -e +MKHASH:=$(STAGING_DIR_HOST)/bin/mkhash +# MKHASH is used in /scripts, so we export it here. +export MKHASH CP:=cp -fpR LN:=ln -sf XARGS:=xargs -r @@ -272,7 +273,7 @@ BASH:=bash TAR:=tar FIND:=find PATCH:=patch -PYTHON:=python +PYTHON:=python3 INSTALL_BIN:=install -m0755 INSTALL_SUID:=install -m4755 @@ -294,6 +295,9 @@ ifneq ($(CONFIG_CCACHE),) TARGET_CXX:= ccache_cxx HOSTCC:= ccache $(HOSTCC) HOSTCXX:= ccache $(HOSTCXX) + export CCACHE_BASEDIR:=$(TOPDIR) + export CCACHE_DIR:=$(if $(call qstrip,$(CONFIG_CCACHE_DIR)),$(call qstrip,$(CONFIG_CCACHE_DIR)),$(TOPDIR)/.ccache) + export CCACHE_COMPILERCHECK:=%compiler% -dumpmachine; %compiler% -dumpversion endif TARGET_CONFIGURE_OPTS = \ @@ -319,15 +323,14 @@ else STRIP:=$(TARGET_CROSS)strip $(call qstrip,$(CONFIG_STRIP_ARGS)) else ifneq ($(CONFIG_USE_SSTRIP),) - STRIP:=$(STAGING_DIR_HOST)/bin/sstrip + STRIP:=$(STAGING_DIR_HOST)/bin/sstrip $(call qstrip,$(CONFIG_SSTRIP_ARGS)) endif endif RSTRIP= \ export CROSS="$(TARGET_CROSS)" \ $(if $(PKG_BUILD_ID),KEEP_BUILD_ID=1) \ $(if $(CONFIG_KERNEL_KALLSYMS),NO_RENAME=1) \ - $(if $(CONFIG_KERNEL_PROFILING),KEEP_SYMBOLS=1) \ - $(if $(CONFIG_KERNEL_MODULE_SIG),MOD_SIGN_CMD="$(LINUX_DIR)/scripts/sign-file $(call qstrip, $(CONFIG_KERNEL_MODULE_SIG_HASH)) $(LINUX_DIR)/$(call qstrip, $(CONFIG_KERNEL_MODULE_SIG_KEY)) $(LINUX_DIR)/certs/signing_key.x509"); \ + $(if $(CONFIG_KERNEL_PROFILING),KEEP_SYMBOLS=1); \ NM="$(TARGET_CROSS)nm" \ STRIP="$(STRIP)" \ STRIP_KMOD="$(SCRIPT_DIR)/strip-kmod.sh" \ @@ -335,6 +338,12 @@ else $(SCRIPT_DIR)/rstrip.sh endif +NINJA = \ + MAKEFLAGS="$(MAKE_JOBSERVER)" \ + $(STAGING_DIR_HOST)/bin/ninja \ + $(if $(findstring c,$(OPENWRT_VERBOSE)),-v) \ + $(if $(MAKE_JOBSERVER),,-j1) + ifeq ($(CONFIG_IPV6),y) DISABLE_IPV6:= else @@ -395,12 +404,40 @@ endef # $(2) => If set, recurse into subdirectories define sha256sums (cd $(1); find . $(if $(2),,-maxdepth 1) -type f -not -name 'sha256sums' -printf "%P\n" | sort | \ - xargs -r $(STAGING_DIR_HOST)/bin/mkhash -n sha256 | sed -ne 's!^\(.*\) \(.*\)$$!\1 *\2!p' > sha256sums) + xargs -r $(MKHASH) -n sha256 | sed -ne 's!^\(.*\) \(.*\)$$!\1 *\2!p' > sha256sums) endef # file extension ext=$(word $(words $(subst ., ,$(1))),$(subst ., ,$(1))) +# Count Git commits of a package +# $(1) => if non-empty: count commits since last ": [uU]pdate to " or ": [bB]ump to " in commit message +define commitcount +$(shell \ + if git log -1 >/dev/null 2>/dev/null; then \ + if [ -n "$(1)" ]; then \ + last_bump="$$(git log --pretty=format:'%h %s' . | \ + grep --max-count=1 -e ': [uU]pdate to ' -e ': [bB]ump to ' | \ + cut -f 1 -d ' ')"; \ + fi; \ + if [ -n "$$last_bump" ]; then \ + echo -n $$(($$(git rev-list --count "$$last_bump..HEAD" .) + 1)); \ + else \ + git rev-list --count HEAD .; \ + fi; \ + else \ + secs="$$(($(SOURCE_DATE_EPOCH) % 86400))"; \ + date="$$(date --utc --date="@$(SOURCE_DATE_EPOCH)" "+%y%m%d")"; \ + printf '%s.%05d' "$$date" "$$secs"; \ + fi; \ +) +endef + +abi_version_str = $(subst -,,$(subst _,,$(subst .,,$(1)))) + +COMMITCOUNT = $(if $(DUMP),0,$(call commitcount)) +AUTORELEASE = $(if $(DUMP),0,$(call commitcount,1)) + all: FORCE: ; .PHONY: FORCE diff --git a/target/linux/ipq60xx/image/Makefile b/target/linux/ipq60xx/image/Makefile index b2811307412..67566035a1e 100644 --- a/target/linux/ipq60xx/image/Makefile +++ b/target/linux/ipq60xx/image/Makefile @@ -8,7 +8,7 @@ include $(INCLUDE_DIR)/image.mk UBIFS_OPTS = -m 2048 -e 124KiB -c 4096 -U -F define Device/Default - KERNEL = kernel-bin | lzma | fit lzma $$(DEVICE_DTS_DIR)/$$(DEVICE_DTS).dtb + KERNEL = kernel-bin | gzip | fit gzip $$(DEVICE_DTS_DIR)/$$(DEVICE_DTS).dtb KERNEL_IN_UBI := 1 IMAGES := sysupgrade.bin IMAGE/sysupgrade.bin := append-ubi diff --git a/target/linux/ipq60xx/image/ipq60xx.mk b/target/linux/ipq60xx/image/ipq60xx.mk index 69e51950ac3..19fa3dd4177 100644 --- a/target/linux/ipq60xx/image/ipq60xx.mk +++ b/target/linux/ipq60xx/image/ipq60xx.mk @@ -38,3 +38,18 @@ define Device/8devices-mango-dvk IMAGE/sysupgrade.bin := insert-info | append-kernel $$$$(BLOCKSIZE) | append-rootfs | pad-rootfs | check-size $$$$(IMAGE_SIZE) endef TARGET_DEVICES += 8devices-mango-dvk + +DEVICE_NAME := yuncore-ax840 + +define Device/yuncore-ax840 + DEVICE_TITLE := Yuncore ax840 + DEVICE_DTS := ipq6018-8dev-mango + BOARDNAME := yuncore-ax840 + DEVICE_VENDOR := yuncore + DEVICE_MODEL := ax840 + IMAGE_SIZE := 27776k + BLOCKSIZE = 64k + KERNEL = kernel-bin | gzip | fit-dummy-info gzip $$(DEVICE_DTS_DIR)/$$(DEVICE_DTS).dtb + IMAGE/sysupgrade.bin := insert-info | append-kernel $$$$(BLOCKSIZE) | append-rootfs | pad-rootfs | check-size $$$$(IMAGE_SIZE) +endef +TARGET_DEVICES += yuncore-ax840 diff --git a/tools/Makefile b/tools/Makefile index b8d986b80cc..8aa20573c7b 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -24,7 +24,7 @@ endif tools-$(BUILD_TOOLCHAIN) += gmp mpfr mpc libelf expat tools-y += m4 libtool autoconf automake flex bison pkg-config mklibs zlib tools-y += sstrip make-ext4fs e2fsprogs mtd-utils mkimage -tools-y += firmware-utils patch-image quilt padjffs2 +tools-y += firmware-utils patch-image quilt ninja padjffs2 tools-y += mm-macros missing-macros cmake scons bc findutils gengetopt patchelf tools-y += mtools dosfstools libressl tools-$(CONFIG_TARGET_orion_generic) += wrt350nv2-builder upslug2 @@ -72,7 +72,7 @@ $(curdir)/dosfstools/compile := $(curdir)/autoconf/compile $(curdir)/automake/co $(curdir)/libressl/compile := $(curdir)/pkg-config/compile $(curdir)/mkimage/compile += $(curdir)/libressl/compile $(curdir)/firmware-utils/compile += $(curdir)/libressl/compile $(curdir)/zlib/compile -$(curdir)/cmake/compile += $(curdir)/libressl/compile +$(curdir)/cmake/compile += $(curdir)/libressl/compile $(curdir)/ninja/compile $(curdir)/zlib/compile := $(curdir)/cmake/compile $(curdir)/wrt350nv2-builder/compile := $(curdir)/zlib/compile $(curdir)/lzma-old/compile := $(curdir)/zlib/compile @@ -85,7 +85,7 @@ ifneq ($(HOST_OS),Linux) endif ifneq ($(CONFIG_CCACHE)$(CONFIG_SDK),) -$(foreach tool, $(filter-out xz patch,$(tools-y)), $(eval $(curdir)/$(tool)/compile += $(curdir)/ccache/compile)) +$(foreach tool, $(filter-out xz patch cmake,$(tools-y)), $(eval $(curdir)/$(tool)/compile += $(curdir)/ccache/compile)) tools-y += ccache endif diff --git a/tools/cmake/Makefile b/tools/cmake/Makefile index 66819c687d1..4391586b2d3 100644 --- a/tools/cmake/Makefile +++ b/tools/cmake/Makefile @@ -7,41 +7,43 @@ include $(TOPDIR)/rules.mk PKG_NAME:=cmake -PKG_VERSION:=3.15.1 -PKG_RELEASE:=2 +PKG_VERSION:=3.22.3 +PKG_RELEASE:=1 PKG_CPE_ID:=cpe:/a:kitware:cmake PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://github.com/Kitware/CMake/releases/download/v$(PKG_VERSION)/ \ - https://cmake.org/files/v3.15/ -PKG_HASH:=18dec548d8f8b04d53c60f9cedcebaa6762f8425339d1e2c889c383d3ccdd7f7 + https://cmake.org/files/v3.22/ +PKG_HASH:=9f8469166f94553b6978a16ee29227ec49a2eb5ceb608275dec40d8ae0d1b5a0 HOST_BUILD_PARALLEL:=1 HOST_CONFIGURE_PARALLEL:=1 include $(INCLUDE_DIR)/host-build.mk -# Workaround for GCC versions below 6.X and ccache -# Reference: https://github.com/openwrt/openwrt/pull/1929 -GCC_DMPVER_GREPCMD := grep -E '^(4\.[8-9]|[5]\.?)' -GCC_DMPVER_STRING := $(shell $(HOSTCC_NOCACHE) -dumpversion | $(GCC_DMPVER_GREPCMD)) -ifneq ($(GCC_DMPVER_STRING),) - ifeq ($(CONFIG_CCACHE),y) - $(info GCC version less than 6.0 detected, disabling CCACHE) - HOST_CONFIGURE_VARS:=$(filter-out CC=% gcc%",$(HOST_CONFIGURE_VARS)) CC="$(HOSTCC_NOCACHE)" - HOST_CONFIGURE_VARS:=$(filter-out CXX=% g++%",$(HOST_CONFIGURE_VARS)) CXX="$(HOSTCXX_NOCACHE)" - else - $(info GCC version greater or equal to 6.0 detected, no workaround set for CCACHE) - endif -endif - HOST_CONFIGURE_VARS += \ + CC="$(HOSTCC_NOCACHE)" \ + CXX="$(HOSTCXX_NOCACHE)" \ MAKEFLAGS="$(HOST_JOBS)" \ - CXXFLAGS="$(HOST_CFLAGS)" + CXXFLAGS="$(HOST_CFLAGS)" \ + MAKE="$(STAGING_DIR_HOST)/bin/ninja" HOST_CONFIGURE_ARGS := \ $(if $(MAKE_JOBSERVER),--parallel="$(MAKE_JOBSERVER)") \ - --prefix=$(STAGING_DIR_HOST) + --prefix="$(STAGING_DIR_HOST)" \ + --generator=Ninja + +define Host/Compile/Default + +$(NINJA) -C $(HOST_BUILD_DIR) $(1) +endef + +define Host/Install/Default + +$(NINJA) -C $(HOST_BUILD_DIR) install +endef + +define Host/Uninstall/Default + +$(NINJA) -C $(HOST_BUILD_DIR) uninstall +endef ifneq ($(findstring c,$(OPENWRT_VERBOSE)),) HOST_MAKE_FLAGS += VERBOSE=1 diff --git a/tools/cmake/patches/100-disable_qt_tests.patch b/tools/cmake/patches/100-disable_qt_tests.patch deleted file mode 100644 index 7f83e279f73..00000000000 --- a/tools/cmake/patches/100-disable_qt_tests.patch +++ /dev/null @@ -1,34 +0,0 @@ ---- a/Tests/RunCMake/CMakeLists.txt -+++ b/Tests/RunCMake/CMakeLists.txt -@@ -325,15 +325,6 @@ add_RunCMake_test(no_install_prefix) - add_RunCMake_test(configure_file) - add_RunCMake_test(CTestTimeoutAfterMatch) - --find_package(Qt4 QUIET) --find_package(Qt5Core QUIET) --if (QT4_FOUND AND Qt5Core_FOUND AND NOT Qt5Core_VERSION VERSION_LESS 5.1.0) -- add_RunCMake_test(IncompatibleQt) --endif() --if (QT4_FOUND) -- add_RunCMake_test(ObsoleteQtMacros -DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE}) --endif() -- - find_package(PkgConfig QUIET) - if(PKG_CONFIG_FOUND) - add_RunCMake_test(FindPkgConfig) ---- a/Tests/CMakeLists.txt -+++ b/Tests/CMakeLists.txt -@@ -483,13 +483,6 @@ if(BUILD_TESTING) - - list(APPEND TEST_BUILD_DIRS ${CMake_TEST_INSTALL_PREFIX}) - -- if(NOT DEFINED CMake_TEST_Qt4) -- set(CMake_TEST_Qt4 1) -- endif() -- if(CMake_TEST_Qt4 AND NOT QT4_FOUND) -- find_package(Qt4 QUIET) -- endif() -- - if(CMake_TEST_Qt4 AND QT4_FOUND) - # test whether the Qt4 which has been found works, on some machines - # which run nightly builds there were errors like "wrong file format" diff --git a/tools/cmake/patches/100-no-testing.patch b/tools/cmake/patches/100-no-testing.patch new file mode 100644 index 00000000000..44452ce39ec --- /dev/null +++ b/tools/cmake/patches/100-no-testing.patch @@ -0,0 +1,33 @@ +--- a/Modules/CTest.cmake ++++ b/Modules/CTest.cmake +@@ -47,7 +47,7 @@ the :variable:`CTEST_USE_LAUNCHERS` vari + in the ``CTestConfig.cmake`` file. + #]=======================================================================] + +-option(BUILD_TESTING "Build the testing tree." ON) ++option(BUILD_TESTING "Build the testing tree." OFF) + + # function to turn generator name into a version string + # like vs9 or vs10 +--- a/Modules/Dart.cmake ++++ b/Modules/Dart.cmake +@@ -33,7 +33,7 @@ whether testing support should be enable + # + # + +-option(BUILD_TESTING "Build the testing tree." ON) ++option(BUILD_TESTING "Build the testing tree." OFF) + + if(BUILD_TESTING) + find_package(Dart QUIET) +--- a/Tests/Contracts/VTK/Dashboard.cmake.in ++++ b/Tests/Contracts/VTK/Dashboard.cmake.in +@@ -25,7 +25,7 @@ ctest_empty_binary_directory(${CTEST_BIN + + file(WRITE "${CTEST_BINARY_DIRECTORY}/CMakeCache.txt" " + VTK_BUILD_EXAMPLES:BOOL=ON +- VTK_BUILD_TESTING:STRING=WANT ++ VTK_BUILD_TESTING:STRING=OFF + VTK_WRAP_PYTHON:BOOL=ON + ExternalData_OBJECT_STORES:FILEPATH=@base_dir@/ExternalData + ") diff --git a/tools/cmake/patches/110-libarchive-fix-libressl-compat.patch b/tools/cmake/patches/110-libarchive-fix-libressl-compat.patch deleted file mode 100644 index ba6565b6af0..00000000000 --- a/tools/cmake/patches/110-libarchive-fix-libressl-compat.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/Utilities/cmlibarchive/libarchive/archive_openssl_evp_private.h -+++ b/Utilities/cmlibarchive/libarchive/archive_openssl_evp_private.h -@@ -28,7 +28,7 @@ - #include - #include - --#if OPENSSL_VERSION_NUMBER < 0x10100000L -+#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) - #include /* malloc, free */ - #include /* memset */ - static inline EVP_MD_CTX *EVP_MD_CTX_new(void) diff --git a/tools/cmake/patches/120-curl-fix-libressl-linking.patch b/tools/cmake/patches/120-curl-fix-libressl-linking.patch index e7d9c5ddda6..fd05d106c81 100644 --- a/tools/cmake/patches/120-curl-fix-libressl-linking.patch +++ b/tools/cmake/patches/120-curl-fix-libressl-linking.patch @@ -20,10 +20,10 @@ Signed-off-by: Jo-Philipp Wich --- --- a/Utilities/cmcurl/CMakeLists.txt +++ b/Utilities/cmcurl/CMakeLists.txt -@@ -453,6 +453,14 @@ if(CMAKE_USE_OPENSSL) +@@ -565,6 +565,14 @@ if(CMAKE_USE_OPENSSL) + endif() + set(SSL_ENABLED ON) set(USE_OPENSSL ON) - set(HAVE_LIBCRYPTO ON) - set(HAVE_LIBSSL ON) + check_library_exists("rt" clock_gettime "" HAVE_LIBRT) + if(HAVE_LIBRT) + list(APPEND OPENSSL_LIBRARIES rt) diff --git a/tools/cmake/patches/130-bootstrap_parallel_make_flag.patch b/tools/cmake/patches/130-bootstrap_parallel_make_flag.patch index cb00f1fc97e..dd66989c982 100644 --- a/tools/cmake/patches/130-bootstrap_parallel_make_flag.patch +++ b/tools/cmake/patches/130-bootstrap_parallel_make_flag.patch @@ -1,9 +1,9 @@ --- a/bootstrap +++ b/bootstrap -@@ -1168,7 +1168,10 @@ int main(){ printf("1%c", (char)0x0a); r +@@ -1423,7 +1423,10 @@ int main(){ printf("1%c", (char)0x0a); r ' > "test.c" cmake_original_make_flags="${cmake_make_flags}" - if [ "x${cmake_parallel_make}" != "x" ]; then + if test "x${cmake_parallel_make}" != "x"; then - cmake_make_flags="${cmake_make_flags} -j ${cmake_parallel_make}" + case "$cmake_parallel_make" in + [0-9]*) cmake_parallel_make="-j ${cmake_parallel_make}";; @@ -11,4 +11,4 @@ + cmake_make_flags="${cmake_make_flags} ${cmake_parallel_make}" fi for a in ${cmake_make_processors}; do - if [ -z "${cmake_make_processor}" ] && cmake_try_make "${a}" "${cmake_make_flags}" >> ../cmake_bootstrap.log 2>&1; then + if test -z "${cmake_make_processor}" && cmake_try_make "${a}" "${cmake_make_flags}" >> ../cmake_bootstrap.log 2>&1; then diff --git a/tools/cmake/patches/140-libarchive-fix-libressl.patch b/tools/cmake/patches/140-libarchive-fix-libressl.patch deleted file mode 100644 index ddddc5e836d..00000000000 --- a/tools/cmake/patches/140-libarchive-fix-libressl.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 5da00ad75b09e262774ec3675bbe4d5a4502a852 Mon Sep 17 00:00:00 2001 -From: Bernard Spil -Date: Sun, 1 Apr 2018 23:01:44 +0200 -Subject: [PATCH] fix build with LibreSSL 2.7 - -LibreSSL 2.7 adds OpenSSL 1.1 API leading to conflicts on method names - -See also: https://bugs.freebsd.org/226853 -Signed-off-by: Bernard Spil ---- - libarchive/archive_openssl_hmac_private.h | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - ---- a/Utilities/cmlibarchive/libarchive/archive_openssl_evp_private.h -+++ b/Utilities/cmlibarchive/libarchive/archive_openssl_evp_private.h -@@ -28,7 +28,8 @@ - #include - #include - --#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) -+#if OPENSSL_VERSION_NUMBER < 0x10100000L || \ -+ (defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x20700000L) - #include /* malloc, free */ - #include /* memset */ - static inline EVP_MD_CTX *EVP_MD_CTX_new(void) diff --git a/tools/libtool/Makefile b/tools/libtool/Makefile index dd4a7f63809..2bc9db7d0da 100644 --- a/tools/libtool/Makefile +++ b/tools/libtool/Makefile @@ -8,11 +8,11 @@ include $(TOPDIR)/rules.mk PKG_NAME:=libtool PKG_CPE_ID:=cpe:/a:gnu:libtool -PKG_VERSION:=2.4 +PKG_VERSION:=2.4.2 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz PKG_SOURCE_URL:=@GNU/$(PKG_NAME) -PKG_HASH:=afcce660d3dc54c63a0a5ba3cf05272239dc3c54bbeba20f6bad250f9dc007ae +PKG_HASH:=1d7b6862c1ed162e327f083a6f78f40eae29218f0db8c38393d61dab764c4407 HOST_BUILD_PARALLEL:=1 diff --git a/tools/libtool/patches/000-relocatable.patch b/tools/libtool/patches/000-relocatable.patch index 55265fe5332..6d1651be317 100644 --- a/tools/libtool/patches/000-relocatable.patch +++ b/tools/libtool/patches/000-relocatable.patch @@ -29,7 +29,7 @@ --- a/libtoolize.in +++ b/libtoolize.in -@@ -326,15 +326,22 @@ as_unset=as_fn_unset +@@ -334,15 +334,22 @@ as_unset=as_fn_unset : ${CP="cp -f"} test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} @@ -56,7 +56,7 @@ : ${SHELL="${CONFIG_SHELL-/bin/sh}"} : ${Xsed="$SED -e 1s/^X//"} -@@ -2476,10 +2483,17 @@ func_check_macros () +@@ -2487,10 +2494,17 @@ func_check_macros () # Locations for important files: prefix=@prefix@ @@ -80,7 +80,7 @@ configure_ac=configure.in --- a/libtoolize.m4sh +++ b/libtoolize.m4sh -@@ -1450,10 +1450,17 @@ func_check_macros () +@@ -1453,10 +1453,17 @@ func_check_macros () # Locations for important files: prefix=@prefix@ @@ -104,7 +104,7 @@ configure_ac=configure.in --- a/libltdl/m4/libtool.m4 +++ b/libltdl/m4/libtool.m4 -@@ -875,9 +875,8 @@ dnl AC_DEFUN([AC_LIBTOOL_RC], []) +@@ -907,9 +907,8 @@ dnl AC_DEFUN([AC_LIBTOOL_RC], []) # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl @@ -115,7 +115,7 @@ _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl -@@ -7509,9 +7508,9 @@ m4_defun([_LT_DECL_EGREP], +@@ -7660,9 +7659,9 @@ m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep @@ -128,7 +128,7 @@ dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) -@@ -7544,9 +7543,8 @@ AC_SUBST([DLLTOOL]) +@@ -7695,9 +7694,8 @@ AC_SUBST([DLLTOOL]) # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED diff --git a/tools/libtool/patches/001-fix-func_append.patch b/tools/libtool/patches/001-fix-func_append.patch deleted file mode 100644 index 4c3c07b7762..00000000000 --- a/tools/libtool/patches/001-fix-func_append.patch +++ /dev/null @@ -1,22 +0,0 @@ ---- a/libltdl/config/ltmain.m4sh -+++ b/libltdl/config/ltmain.m4sh -@@ -7261,7 +7261,7 @@ EOF - elif test -n "$runpath_var"; then - case "$perm_rpath " in - *" $libdir "*) ;; -- *) func_apped perm_rpath " $libdir" ;; -+ *) func_append perm_rpath " $libdir" ;; - esac - fi - done ---- a/libltdl/config/ltmain.sh -+++ b/libltdl/config/ltmain.sh -@@ -8050,7 +8050,7 @@ EOF - elif test -n "$runpath_var"; then - case "$perm_rpath " in - *" $libdir "*) ;; -- *) func_apped perm_rpath " $libdir" ;; -+ *) func_append perm_rpath " $libdir" ;; - esac - fi - done diff --git a/tools/libtool/patches/100-libdir-fixes.patch b/tools/libtool/patches/100-libdir-fixes.patch index d4e6f785ccd..3df2b14b60b 100644 --- a/tools/libtool/patches/100-libdir-fixes.patch +++ b/tools/libtool/patches/100-libdir-fixes.patch @@ -1,6 +1,6 @@ --- a/libltdl/config/ltmain.m4sh +++ b/libltdl/config/ltmain.m4sh -@@ -5715,8 +5715,14 @@ func_mode_link () +@@ -5731,8 +5731,14 @@ func_mode_link () absdir="$abs_ladir" libdir="$abs_ladir" else @@ -17,7 +17,7 @@ fi test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes else -@@ -6114,8 +6120,6 @@ func_mode_link () +@@ -6130,8 +6136,6 @@ func_mode_link () add="$libdir/$linklib" fi else @@ -26,7 +26,7 @@ # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in -@@ -6270,7 +6274,17 @@ func_mode_link () +@@ -6286,7 +6290,17 @@ func_mode_link () fi ;; *) @@ -47,7 +47,7 @@ else --- a/libltdl/config/ltmain.sh +++ b/libltdl/config/ltmain.sh -@@ -6504,8 +6504,14 @@ func_mode_link () +@@ -6518,8 +6518,14 @@ func_mode_link () absdir="$abs_ladir" libdir="$abs_ladir" else @@ -64,7 +64,7 @@ fi test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes else -@@ -6903,8 +6909,6 @@ func_mode_link () +@@ -6917,8 +6923,6 @@ func_mode_link () add="$libdir/$linklib" fi else @@ -73,7 +73,7 @@ # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in -@@ -7059,7 +7063,17 @@ func_mode_link () +@@ -7073,7 +7077,17 @@ func_mode_link () fi ;; *) diff --git a/tools/libtool/patches/110-dont-use-target-dir-for-relinking.patch b/tools/libtool/patches/110-dont-use-target-dir-for-relinking.patch index c78058934ad..bbfd1250030 100644 --- a/tools/libtool/patches/110-dont-use-target-dir-for-relinking.patch +++ b/tools/libtool/patches/110-dont-use-target-dir-for-relinking.patch @@ -1,6 +1,6 @@ --- a/libltdl/config/ltmain.m4sh +++ b/libltdl/config/ltmain.m4sh -@@ -6104,7 +6104,6 @@ func_mode_link () +@@ -6120,7 +6120,6 @@ func_mode_link () test "$hardcode_direct_absolute" = no; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then @@ -10,7 +10,7 @@ case :$finalize_shlibpath: in --- a/libltdl/config/ltmain.sh +++ b/libltdl/config/ltmain.sh -@@ -6893,7 +6893,6 @@ func_mode_link () +@@ -6907,7 +6907,6 @@ func_mode_link () test "$hardcode_direct_absolute" = no; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then diff --git a/tools/libtool/patches/120-strip-unsafe-dirs-for-relinking.patch b/tools/libtool/patches/120-strip-unsafe-dirs-for-relinking.patch index 1c3df4c0049..8840ee05699 100644 --- a/tools/libtool/patches/120-strip-unsafe-dirs-for-relinking.patch +++ b/tools/libtool/patches/120-strip-unsafe-dirs-for-relinking.patch @@ -12,7 +12,7 @@ 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' --- a/libltdl/config/ltmain.sh +++ b/libltdl/config/ltmain.sh -@@ -2972,6 +2972,9 @@ func_mode_install () +@@ -2973,6 +2973,9 @@ func_mode_install () relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi diff --git a/tools/libtool/patches/150-trailingslash.patch b/tools/libtool/patches/150-trailingslash.patch index a01f9be77b1..423911cf4be 100644 --- a/tools/libtool/patches/150-trailingslash.patch +++ b/tools/libtool/patches/150-trailingslash.patch @@ -11,7 +11,7 @@ Nitin A Kamble --- a/libltdl/config/ltmain.m4sh +++ b/libltdl/config/ltmain.m4sh -@@ -2164,8 +2164,15 @@ func_mode_install () +@@ -2167,8 +2167,15 @@ func_mode_install () func_append dir "$objdir" if test -n "$relink_command"; then @@ -30,7 +30,7 @@ Nitin A Kamble # location b/c this prevents finding dependent libraries that --- a/libltdl/config/ltmain.sh +++ b/libltdl/config/ltmain.sh -@@ -2953,8 +2953,15 @@ func_mode_install () +@@ -2954,8 +2954,15 @@ func_mode_install () func_append dir "$objdir" if test -n "$relink_command"; then diff --git a/tools/libtool/patches/160-passthrough-ssp.patch b/tools/libtool/patches/160-passthrough-ssp.patch index 9fad9aa9df7..da44c614e3d 100644 --- a/tools/libtool/patches/160-passthrough-ssp.patch +++ b/tools/libtool/patches/160-passthrough-ssp.patch @@ -1,7 +1,7 @@ diff -ur libtool-2.4.orig/libltdl/config/ltmain.m4sh libtool-2.4/libltdl/config/ltmain.m4sh --- libtool-2.4.orig/libltdl/config/ltmain.m4sh 2015-06-18 10:46:15.499996979 +0200 +++ libtool-2.4/libltdl/config/ltmain.m4sh 2015-06-18 10:48:24.686882213 +0200 -@@ -5061,7 +5061,7 @@ +@@ -5076,7 +5076,7 @@ # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ diff --git a/tools/libtool/patches/200-openwrt-branding.patch b/tools/libtool/patches/200-openwrt-branding.patch index dd3e3d6b784..3fc0afb8665 100644 --- a/tools/libtool/patches/200-openwrt-branding.patch +++ b/tools/libtool/patches/200-openwrt-branding.patch @@ -28,7 +28,7 @@ : --- a/libltdl/config/ltmain.sh +++ b/libltdl/config/ltmain.sh -@@ -443,7 +443,7 @@ opt_warning=: +@@ -439,7 +439,7 @@ opt_warning=: # name if it has been set yet. func_echo () { @@ -37,7 +37,7 @@ } # func_verbose arg... -@@ -469,14 +469,14 @@ func_echo_all () +@@ -465,14 +465,14 @@ func_echo_all () # Echo program name prefixed message to standard error. func_error () { @@ -56,7 +56,7 @@ : --- a/libtoolize.in +++ b/libtoolize.in -@@ -640,7 +640,7 @@ opt_warning=: +@@ -648,7 +648,7 @@ opt_warning=: # name if it has been set yet. func_echo () { @@ -65,7 +65,7 @@ } # func_verbose arg... -@@ -666,14 +666,14 @@ func_echo_all () +@@ -674,14 +674,14 @@ func_echo_all () # Echo program name prefixed message to standard error. func_error () { @@ -84,7 +84,7 @@ : --- a/tests/defs.in +++ b/tests/defs.in -@@ -588,7 +588,7 @@ opt_warning=: +@@ -596,7 +596,7 @@ opt_warning=: # name if it has been set yet. func_echo () { @@ -93,7 +93,7 @@ } # func_verbose arg... -@@ -614,14 +614,14 @@ func_echo_all () +@@ -622,14 +622,14 @@ func_echo_all () # Echo program name prefixed message to standard error. func_error () { diff --git a/tools/mpfr/Makefile b/tools/mpfr/Makefile index fdb316efb96..65e6f8959f3 100644 --- a/tools/mpfr/Makefile +++ b/tools/mpfr/Makefile @@ -7,12 +7,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=mpfr -PKG_VERSION:=4.0.2 +PKG_VERSION:=4.1.0 PKG_CPE_ID:=cpe:/a:mpfr:gnu_mpfr PKG_SOURCE_URL:=@GNU/mpfr http://www.mpfr.org/mpfr-$(PKG_VERSION) PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz -PKG_HASH:=1d3be708604eae0e42d578ba93b390c2a145f17743a744d8f3f8c2ad5855a38a +PKG_HASH:=0c98a3f1732ff6ca4ea690552079da9c597872d30e96ec28414ee23c95558a7f HOST_BUILD_PARALLEL:=1 HOST_FIXUP:=autoreconf diff --git a/tools/mpfr/patches/001-only_src.patch b/tools/mpfr/patches/001-only_src.patch index 019928741af..dbc7d32343f 100644 --- a/tools/mpfr/patches/001-only_src.patch +++ b/tools/mpfr/patches/001-only_src.patch @@ -1,6 +1,6 @@ --- a/Makefile.am +++ b/Makefile.am -@@ -18,7 +18,7 @@ AUTOMAKE_OPTIONS = gnu +@@ -24,7 +24,7 @@ AUTOMAKE_OPTIONS = gnu # old Automake version. ACLOCAL_AMFLAGS = -I m4 @@ -11,7 +11,7 @@ pkgconfig_DATA = mpfr.pc --- a/Makefile.in +++ b/Makefile.in -@@ -383,7 +383,7 @@ AUTOMAKE_OPTIONS = gnu +@@ -384,7 +384,7 @@ AUTOMAKE_OPTIONS = gnu # libtoolize and in case some developer needs to switch back to an # old Automake version. ACLOCAL_AMFLAGS = -I m4 diff --git a/tools/ninja/Makefile b/tools/ninja/Makefile new file mode 100644 index 00000000000..0ff642a740f --- /dev/null +++ b/tools/ninja/Makefile @@ -0,0 +1,39 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=ninja +PKG_VERSION:=1.10.2 +PKG_RELEASE:=1 + +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz +PKG_SOURCE_URL:=https://codeload.github.com/ninja-build/ninja/tar.gz/v$(PKG_VERSION)? +PKG_HASH:=ce35865411f0490368a8fc383f29071de6690cbadc27704734978221f25e2bed + +include $(INCLUDE_DIR)/host-build.mk + +CONFIGURE_ARGS:= +ifneq ($(findstring c,$(OPENWRT_VERBOSE)),) + CONFIGURE_ARGS+=--verbose +endif + +define Host/Configure +endef + +define Host/Compile + cd $(HOST_BUILD_DIR) && \ + CXX="$(HOSTCXX_NOCACHE)" \ + CXXFLAGS="$(HOST_CXXFLAGS) $(HOST_CPPFLAGS)" \ + LDFLAGS="$(HOST_LDFLAGS)" \ + $(STAGING_DIR_HOST)/bin/$(PYTHON) configure.py --bootstrap $(CONFIGURE_ARGS) +endef + +define Host/Install + $(INSTALL_DIR) $(STAGING_DIR_HOST)/bin + $(INSTALL_BIN) $(HOST_BUILD_DIR)/ninja $(STAGING_DIR_HOST)/bin/ +endef + +define Host/Clean + $(call Host/Clean/Default) + rm -f $(STAGING_DIR_HOST)/bin/ninja +endef + +$(eval $(call HostBuild)) diff --git a/tools/ninja/patches/100-make_jobserver_support.patch b/tools/ninja/patches/100-make_jobserver_support.patch new file mode 100644 index 00000000000..ecceaf23cab --- /dev/null +++ b/tools/ninja/patches/100-make_jobserver_support.patch @@ -0,0 +1,2279 @@ +From c1a081c00f803fc28e51f155f25abe8346ce5f13 Mon Sep 17 00:00:00 2001 +From: Stefan Becker +Date: Tue, 22 Mar 2016 13:48:07 +0200 +Subject: [PATCH] Add GNU make jobserver client support + +- add new TokenPool interface +- GNU make implementation for TokenPool parses and verifies the magic + information from the MAKEFLAGS environment variable +- RealCommandRunner tries to acquire TokenPool + * if no token pool is available then there is no change in behaviour +- When a token pool is available then RealCommandRunner behaviour + changes as follows + * CanRunMore() only returns true if TokenPool::Acquire() returns true + * StartCommand() calls TokenPool::Reserve() + * WaitForCommand() calls TokenPool::Release() + +Documentation for GNU make jobserver + + http://make.mad-scientist.net/papers/jobserver-implementation/ + +Fixes https://github.com/ninja-build/ninja/issues/1139 + +Add TokenPool monitoring to SubprocessSet::DoWork() + +Improve on the original jobserver client implementation. This makes +ninja a more aggressive GNU make jobserver client. + +- add monitor interface to TokenPool +- TokenPool is passed down when main loop indicates that more work is + ready and would be allowed to start if a token becomes available +- posix: update DoWork() to monitor TokenPool read file descriptor +- WaitForCommand() exits when DoWork() sets token flag +- Main loop starts over when WaitForCommand() sets token exit status + +Ignore jobserver when -jN is forced on command line + +This emulates the behaviour of GNU make. + +- add parallelism_from_cmdline flag to build configuration +- set the flag when -jN is given on command line +- pass the flag to TokenPool::Get() +- GNUmakeTokenPool::Setup() + * prints a warning when the flag is true and jobserver was detected + * returns false, i.e. jobserver will be ignored +- ignore config.parallelism in CanRunMore() when we have a valid + TokenPool, because it gets always initialized to a default when not + given on the command line + +Honor -lN from MAKEFLAGS + +This emulates the behaviour of GNU make. + +- build: make a copy of max_load_average and pass it to TokenPool. +- GNUmakeTokenPool: if we detect a jobserver and a valid -lN argument in + MAKEFLAGS then set max_load_average to N. + +Use LinePrinter for TokenPool messages + +- replace printf() with calls to LinePrinter +- print GNU make jobserver message only when verbose build is requested + +Prepare PR for merging + +- fix Windows build error in no-op TokenPool implementation +- improve Acquire() to block for a maximum of 100ms +- address review comments + +Add tests for TokenPool + +- TokenPool setup +- GetMonitorFd() API +- implicit token and tokens in jobserver pipe +- Acquire() / Reserve() / Release() protocol +- Clear() API + +Add tests for subprocess module + +- add TokenPoolTest stub to provide TokenPool::GetMonitorFd() +- add two tests + * both tests set up a dummy GNUmake jobserver pipe + * both tests call DoWork() with TokenPoolTest + * test 1: verify that DoWork() detects when a token is available + * test 2: verify that DoWork() works as before without a token +- the tests are not compiled in under Windows + +Add tests for build module + +Add tests that verify the token functionality of the builder main loop. +We replace the default fake command runner with a special version where +the tests can control each call to AcquireToken(), CanRunMore() and +WaitForCommand(). + +Add Win32 implementation for GNUmakeTokenPool + +GNU make uses a semaphore as jobserver protocol on Win32. See also + + https://www.gnu.org/software/make/manual/html_node/Windows-Jobserver.html + +Usage is pretty simple and straightforward, i.e. WaitForSingleObject() +to obtain a token and ReleaseSemaphore() to return it. + +Unfortunately subprocess-win32.cc uses an I/O completion port (IOCP). +IOCPs aren't waitable objects, i.e. we can't use WaitForMultipleObjects() +to wait on the IOCP and the token semaphore at the same time. + +Therefore GNUmakeTokenPoolWin32 creates a child thread that waits on the +token semaphore and posts a dummy I/O completion status on the IOCP when +it was able to obtain a token. That unblocks SubprocessSet::DoWork() and +it can then check if a token became available or not. + +- split existing GNUmakeTokenPool into common and platform bits +- add GNUmakeTokenPool interface +- move the Posix bits to GNUmakeTokenPoolPosix +- add the Win32 bits as GNUmakeTokenPoolWin32 +- move Setup() method up to TokenPool interface +- update Subprocess & TokenPool tests accordingly + +Prepare PR for merging - part II + +- remove unnecessary "struct" from TokenPool +- add PAPCFUNC cast to QueryUserAPC() +- remove hard-coded MAKEFLAGS string from win32 +- remove useless build test CompleteNoWork +- rename TokenPoolTest to TestTokenPool +- add tokenpool modules to CMake build +- remove unused no-op TokenPool implementation +- address review comments from + +https://github.com/ninja-build/ninja/pull/1140#pullrequestreview-195195803 +https://github.com/ninja-build/ninja/pull/1140#pullrequestreview-185089255 +https://github.com/ninja-build/ninja/pull/1140#issuecomment-473898963 +https://github.com/ninja-build/ninja/pull/1140#issuecomment-596624610 +--- + CMakeLists.txt | 8 +- + configure.py | 7 +- + src/build.cc | 127 ++++++++--- + src/build.h | 12 +- + src/build_test.cc | 363 +++++++++++++++++++++++++++++++- + src/exit_status.h | 3 +- + src/ninja.cc | 1 + + src/subprocess-posix.cc | 33 ++- + src/subprocess-win32.cc | 11 +- + src/subprocess.h | 8 +- + src/subprocess_test.cc | 149 +++++++++++-- + src/tokenpool-gnu-make-posix.cc | 202 ++++++++++++++++++ + src/tokenpool-gnu-make-win32.cc | 239 +++++++++++++++++++++ + src/tokenpool-gnu-make.cc | 108 ++++++++++ + src/tokenpool-gnu-make.h | 40 ++++ + src/tokenpool.h | 42 ++++ + src/tokenpool_test.cc | 269 +++++++++++++++++++++++ + 17 files changed, 1562 insertions(+), 60 deletions(-) + create mode 100644 src/tokenpool-gnu-make-posix.cc + create mode 100644 src/tokenpool-gnu-make-win32.cc + create mode 100644 src/tokenpool-gnu-make.cc + create mode 100644 src/tokenpool-gnu-make.h + create mode 100644 src/tokenpool.h + create mode 100644 src/tokenpool_test.cc + +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -94,6 +94,7 @@ add_library(libninja OBJECT + src/parser.cc + src/state.cc + src/string_piece_util.cc ++ src/tokenpool-gnu-make.cc + src/util.cc + src/version.cc + ) +@@ -104,12 +105,16 @@ if(WIN32) + src/msvc_helper-win32.cc + src/msvc_helper_main-win32.cc + src/getopt.c ++ src/tokenpool-gnu-make-win32.cc + ) + if(MSVC) + target_sources(libninja PRIVATE src/minidump-win32.cc) + endif() + else() +- target_sources(libninja PRIVATE src/subprocess-posix.cc) ++ target_sources(libninja PRIVATE ++ src/subprocess-posix.cc ++ src/tokenpool-gnu-make-posix.cc ++ ) + if(CMAKE_SYSTEM_NAME STREQUAL "OS400" OR CMAKE_SYSTEM_NAME STREQUAL "AIX") + target_sources(libninja PRIVATE src/getopt.c) + endif() +@@ -182,6 +187,7 @@ if(BUILD_TESTING) + src/string_piece_util_test.cc + src/subprocess_test.cc + src/test.cc ++ src/tokenpool_test.cc + src/util_test.cc + ) + if(WIN32) +--- a/configure.py ++++ b/configure.py +@@ -514,11 +514,13 @@ for name in ['build', + 'parser', + 'state', + 'string_piece_util', ++ 'tokenpool-gnu-make', + 'util', + 'version']: + objs += cxx(name, variables=cxxvariables) + if platform.is_windows(): + for name in ['subprocess-win32', ++ 'tokenpool-gnu-make-win32', + 'includes_normalize-win32', + 'msvc_helper-win32', + 'msvc_helper_main-win32']: +@@ -527,7 +529,9 @@ if platform.is_windows(): + objs += cxx('minidump-win32', variables=cxxvariables) + objs += cc('getopt') + else: +- objs += cxx('subprocess-posix') ++ for name in ['subprocess-posix', ++ 'tokenpool-gnu-make-posix']: ++ objs += cxx(name) + if platform.is_aix(): + objs += cc('getopt') + if platform.is_msvc(): +@@ -582,6 +586,7 @@ for name in ['build_log_test', + 'string_piece_util_test', + 'subprocess_test', + 'test', ++ 'tokenpool_test', + 'util_test']: + objs += cxx(name, variables=cxxvariables) + if platform.is_windows(): +--- a/src/build.cc ++++ b/src/build.cc +@@ -38,6 +38,7 @@ + #include "graph.h" + #include "state.h" + #include "subprocess.h" ++#include "tokenpool.h" + #include "util.h" + + using namespace std; +@@ -50,8 +51,9 @@ struct DryRunCommandRunner : public Comm + + // Overridden from CommandRunner: + virtual bool CanRunMore() const; ++ virtual bool AcquireToken(); + virtual bool StartCommand(Edge* edge); +- virtual bool WaitForCommand(Result* result); ++ virtual bool WaitForCommand(Result* result, bool more_ready); + + private: + queue finished_; +@@ -61,12 +63,16 @@ bool DryRunCommandRunner::CanRunMore() c + return true; + } + ++bool DryRunCommandRunner::AcquireToken() { ++ return true; ++} ++ + bool DryRunCommandRunner::StartCommand(Edge* edge) { + finished_.push(edge); + return true; + } + +-bool DryRunCommandRunner::WaitForCommand(Result* result) { ++bool DryRunCommandRunner::WaitForCommand(Result* result, bool more_ready) { + if (finished_.empty()) + return false; + +@@ -379,7 +385,7 @@ void Plan::EdgeWanted(const Edge* edge) + } + + Edge* Plan::FindWork() { +- if (ready_.empty()) ++ if (!more_ready()) + return NULL; + set::iterator e = ready_.begin(); + Edge* edge = *e; +@@ -665,19 +671,39 @@ void Plan::Dump() const { + } + + struct RealCommandRunner : public CommandRunner { +- explicit RealCommandRunner(const BuildConfig& config) : config_(config) {} +- virtual ~RealCommandRunner() {} ++ explicit RealCommandRunner(const BuildConfig& config); ++ virtual ~RealCommandRunner(); + virtual bool CanRunMore() const; ++ virtual bool AcquireToken(); + virtual bool StartCommand(Edge* edge); +- virtual bool WaitForCommand(Result* result); ++ virtual bool WaitForCommand(Result* result, bool more_ready); + virtual vector GetActiveEdges(); + virtual void Abort(); + + const BuildConfig& config_; ++ // copy of config_.max_load_average; can be modified by TokenPool setup ++ double max_load_average_; + SubprocessSet subprocs_; ++ TokenPool* tokens_; + map subproc_to_edge_; + }; + ++RealCommandRunner::RealCommandRunner(const BuildConfig& config) : config_(config) { ++ max_load_average_ = config.max_load_average; ++ if ((tokens_ = TokenPool::Get()) != NULL) { ++ if (!tokens_->Setup(config_.parallelism_from_cmdline, ++ config_.verbosity == BuildConfig::VERBOSE, ++ max_load_average_)) { ++ delete tokens_; ++ tokens_ = NULL; ++ } ++ } ++} ++ ++RealCommandRunner::~RealCommandRunner() { ++ delete tokens_; ++} ++ + vector RealCommandRunner::GetActiveEdges() { + vector edges; + for (map::iterator e = subproc_to_edge_.begin(); +@@ -688,14 +714,23 @@ vector RealCommandRunner::GetActi + + void RealCommandRunner::Abort() { + subprocs_.Clear(); ++ if (tokens_) ++ tokens_->Clear(); + } + + bool RealCommandRunner::CanRunMore() const { +- size_t subproc_number = +- subprocs_.running_.size() + subprocs_.finished_.size(); +- return (int)subproc_number < config_.parallelism +- && ((subprocs_.running_.empty() || config_.max_load_average <= 0.0f) +- || GetLoadAverage() < config_.max_load_average); ++ bool parallelism_limit_not_reached = ++ tokens_ || // ignore config_.parallelism ++ ((int) (subprocs_.running_.size() + ++ subprocs_.finished_.size()) < config_.parallelism); ++ return parallelism_limit_not_reached ++ && (subprocs_.running_.empty() || ++ (max_load_average_ <= 0.0f || ++ GetLoadAverage() < max_load_average_)); ++} ++ ++bool RealCommandRunner::AcquireToken() { ++ return (!tokens_ || tokens_->Acquire()); + } + + bool RealCommandRunner::StartCommand(Edge* edge) { +@@ -703,19 +738,33 @@ bool RealCommandRunner::StartCommand(Edg + Subprocess* subproc = subprocs_.Add(command, edge->use_console()); + if (!subproc) + return false; ++ if (tokens_) ++ tokens_->Reserve(); + subproc_to_edge_.insert(make_pair(subproc, edge)); + + return true; + } + +-bool RealCommandRunner::WaitForCommand(Result* result) { ++bool RealCommandRunner::WaitForCommand(Result* result, bool more_ready) { + Subprocess* subproc; +- while ((subproc = subprocs_.NextFinished()) == NULL) { +- bool interrupted = subprocs_.DoWork(); ++ subprocs_.ResetTokenAvailable(); ++ while (((subproc = subprocs_.NextFinished()) == NULL) && ++ !subprocs_.IsTokenAvailable()) { ++ bool interrupted = subprocs_.DoWork(more_ready ? tokens_ : NULL); + if (interrupted) + return false; + } + ++ // token became available ++ if (subproc == NULL) { ++ result->status = ExitTokenAvailable; ++ return true; ++ } ++ ++ // command completed ++ if (tokens_) ++ tokens_->Release(); ++ + result->status = subproc->Finish(); + result->output = subproc->GetOutput(); + +@@ -825,38 +874,42 @@ bool Builder::Build(string* err) { + // command runner. + // Second, we attempt to wait for / reap the next finished command. + while (plan_.more_to_do()) { +- // See if we can start any more commands. +- if (failures_allowed && command_runner_->CanRunMore()) { +- if (Edge* edge = plan_.FindWork()) { +- if (edge->GetBindingBool("generator")) { +- scan_.build_log()->Close(); +- } ++ // See if we can start any more commands... ++ bool can_run_more = ++ failures_allowed && ++ plan_.more_ready() && ++ command_runner_->CanRunMore(); ++ ++ // ... but we also need a token to do that. ++ if (can_run_more && command_runner_->AcquireToken()) { ++ Edge* edge = plan_.FindWork(); ++ if (edge->GetBindingBool("generator")) { ++ scan_.build_log()->Close(); ++ } ++ if (!StartEdge(edge, err)) { ++ Cleanup(); ++ status_->BuildFinished(); ++ return false; ++ } + +- if (!StartEdge(edge, err)) { ++ if (edge->is_phony()) { ++ if (!plan_.EdgeFinished(edge, Plan::kEdgeSucceeded, err)) { + Cleanup(); + status_->BuildFinished(); + return false; + } +- +- if (edge->is_phony()) { +- if (!plan_.EdgeFinished(edge, Plan::kEdgeSucceeded, err)) { +- Cleanup(); +- status_->BuildFinished(); +- return false; +- } +- } else { +- ++pending_commands; +- } +- +- // We made some progress; go back to the main loop. +- continue; ++ } else { ++ ++pending_commands; + } ++ ++ // We made some progress; go back to the main loop. ++ continue; + } + + // See if we can reap any finished commands. + if (pending_commands) { + CommandRunner::Result result; +- if (!command_runner_->WaitForCommand(&result) || ++ if (!command_runner_->WaitForCommand(&result, can_run_more) || + result.status == ExitInterrupted) { + Cleanup(); + status_->BuildFinished(); +@@ -864,6 +917,10 @@ bool Builder::Build(string* err) { + return false; + } + ++ // We might be able to start another command; start the main loop over. ++ if (result.status == ExitTokenAvailable) ++ continue; ++ + --pending_commands; + if (!FinishCommand(&result, err)) { + Cleanup(); +--- a/src/build.h ++++ b/src/build.h +@@ -55,6 +55,9 @@ struct Plan { + /// Returns true if there's more work to be done. + bool more_to_do() const { return wanted_edges_ > 0 && command_edges_ > 0; } + ++ /// Returns true if there's more edges ready to start ++ bool more_ready() const { return !ready_.empty(); } ++ + /// Dumps the current state of the plan. + void Dump() const; + +@@ -139,6 +142,7 @@ private: + struct CommandRunner { + virtual ~CommandRunner() {} + virtual bool CanRunMore() const = 0; ++ virtual bool AcquireToken() = 0; + virtual bool StartCommand(Edge* edge) = 0; + + /// The result of waiting for a command. +@@ -150,7 +154,9 @@ struct CommandRunner { + bool success() const { return status == ExitSuccess; } + }; + /// Wait for a command to complete, or return false if interrupted. +- virtual bool WaitForCommand(Result* result) = 0; ++ /// If more_ready is true then the optional TokenPool is monitored too ++ /// and we return when a token becomes available. ++ virtual bool WaitForCommand(Result* result, bool more_ready) = 0; + + virtual std::vector GetActiveEdges() { return std::vector(); } + virtual void Abort() {} +@@ -158,7 +164,8 @@ struct CommandRunner { + + /// Options (e.g. verbosity, parallelism) passed to a build. + struct BuildConfig { +- BuildConfig() : verbosity(NORMAL), dry_run(false), parallelism(1), ++ BuildConfig() : verbosity(NORMAL), dry_run(false), ++ parallelism(1), parallelism_from_cmdline(false), + failures_allowed(1), max_load_average(-0.0f) {} + + enum Verbosity { +@@ -169,6 +176,7 @@ struct BuildConfig { + Verbosity verbosity; + bool dry_run; + int parallelism; ++ bool parallelism_from_cmdline; + int failures_allowed; + /// The maximum load average we must not exceed. A negative value + /// means that we do not have any limit. +--- a/src/build_test.cc ++++ b/src/build_test.cc +@@ -15,6 +15,7 @@ + #include "build.h" + + #include ++#include + + #include "build_log.h" + #include "deps_log.h" +@@ -473,8 +474,9 @@ struct FakeCommandRunner : public Comman + + // CommandRunner impl + virtual bool CanRunMore() const; ++ virtual bool AcquireToken(); + virtual bool StartCommand(Edge* edge); +- virtual bool WaitForCommand(Result* result); ++ virtual bool WaitForCommand(Result* result, bool more_ready); + virtual vector GetActiveEdges(); + virtual void Abort(); + +@@ -580,6 +582,10 @@ bool FakeCommandRunner::CanRunMore() con + return active_edges_.size() < max_active_edges_; + } + ++bool FakeCommandRunner::AcquireToken() { ++ return true; ++} ++ + bool FakeCommandRunner::StartCommand(Edge* edge) { + assert(active_edges_.size() < max_active_edges_); + assert(find(active_edges_.begin(), active_edges_.end(), edge) +@@ -625,7 +631,7 @@ bool FakeCommandRunner::StartCommand(Edg + return true; + } + +-bool FakeCommandRunner::WaitForCommand(Result* result) { ++bool FakeCommandRunner::WaitForCommand(Result* result, bool more_ready) { + if (active_edges_.empty()) + return false; + +@@ -3302,3 +3308,356 @@ TEST_F(BuildTest, DyndepTwoLevelDiscover + EXPECT_EQ("touch tmp", command_runner_.commands_ran_[3]); + EXPECT_EQ("touch out", command_runner_.commands_ran_[4]); + } ++ ++/// The token tests are concerned with the main loop functionality when ++// the CommandRunner has an active TokenPool. It is therefore intentional ++// that the plan doesn't complete and that builder_.Build() returns false! ++ ++/// Fake implementation of CommandRunner that simulates a TokenPool ++struct FakeTokenCommandRunner : public CommandRunner { ++ explicit FakeTokenCommandRunner() {} ++ ++ // CommandRunner impl ++ virtual bool CanRunMore() const; ++ virtual bool AcquireToken(); ++ virtual bool StartCommand(Edge* edge); ++ virtual bool WaitForCommand(Result* result, bool more_ready); ++ virtual vector GetActiveEdges(); ++ virtual void Abort(); ++ ++ vector commands_ran_; ++ vector edges_; ++ ++ vector acquire_token_; ++ vector can_run_more_; ++ vector wait_for_command_; ++}; ++ ++bool FakeTokenCommandRunner::CanRunMore() const { ++ if (can_run_more_.size() == 0) { ++ EXPECT_FALSE("unexpected call to CommandRunner::CanRunMore()"); ++ return false; ++ } ++ ++ bool result = can_run_more_[0]; ++ ++ // Unfortunately CanRunMore() isn't "const" for tests ++ const_cast(this)->can_run_more_.erase( ++ const_cast(this)->can_run_more_.begin() ++ ); ++ ++ return result; ++} ++ ++bool FakeTokenCommandRunner::AcquireToken() { ++ if (acquire_token_.size() == 0) { ++ EXPECT_FALSE("unexpected call to CommandRunner::AcquireToken()"); ++ return false; ++ } ++ ++ bool result = acquire_token_[0]; ++ acquire_token_.erase(acquire_token_.begin()); ++ return result; ++} ++ ++bool FakeTokenCommandRunner::StartCommand(Edge* edge) { ++ commands_ran_.push_back(edge->EvaluateCommand()); ++ edges_.push_back(edge); ++ return true; ++} ++ ++bool FakeTokenCommandRunner::WaitForCommand(Result* result, bool more_ready) { ++ if (wait_for_command_.size() == 0) { ++ EXPECT_FALSE("unexpected call to CommandRunner::WaitForCommand()"); ++ return false; ++ } ++ ++ bool expected = wait_for_command_[0]; ++ if (expected != more_ready) { ++ EXPECT_EQ(expected, more_ready); ++ return false; ++ } ++ wait_for_command_.erase(wait_for_command_.begin()); ++ ++ if (edges_.size() == 0) ++ return false; ++ ++ Edge* edge = edges_[0]; ++ result->edge = edge; ++ ++ if (more_ready && ++ (edge->rule().name() == "token-available")) { ++ result->status = ExitTokenAvailable; ++ } else { ++ edges_.erase(edges_.begin()); ++ result->status = ExitSuccess; ++ } ++ ++ return true; ++} ++ ++vector FakeTokenCommandRunner::GetActiveEdges() { ++ return edges_; ++} ++ ++void FakeTokenCommandRunner::Abort() { ++ edges_.clear(); ++} ++ ++struct BuildTokenTest : public BuildTest { ++ virtual void SetUp(); ++ virtual void TearDown(); ++ ++ FakeTokenCommandRunner token_command_runner_; ++ ++ void ExpectAcquireToken(int count, ...); ++ void ExpectCanRunMore(int count, ...); ++ void ExpectWaitForCommand(int count, ...); ++ ++private: ++ void EnqueueBooleans(vector& booleans, int count, va_list ao); ++}; ++ ++void BuildTokenTest::SetUp() { ++ BuildTest::SetUp(); ++ ++ // replace FakeCommandRunner with FakeTokenCommandRunner ++ builder_.command_runner_.release(); ++ builder_.command_runner_.reset(&token_command_runner_); ++} ++void BuildTokenTest::TearDown() { ++ EXPECT_EQ(0u, token_command_runner_.acquire_token_.size()); ++ EXPECT_EQ(0u, token_command_runner_.can_run_more_.size()); ++ EXPECT_EQ(0u, token_command_runner_.wait_for_command_.size()); ++ ++ BuildTest::TearDown(); ++} ++ ++void BuildTokenTest::ExpectAcquireToken(int count, ...) { ++ va_list ap; ++ va_start(ap, count); ++ EnqueueBooleans(token_command_runner_.acquire_token_, count, ap); ++ va_end(ap); ++} ++ ++void BuildTokenTest::ExpectCanRunMore(int count, ...) { ++ va_list ap; ++ va_start(ap, count); ++ EnqueueBooleans(token_command_runner_.can_run_more_, count, ap); ++ va_end(ap); ++} ++ ++void BuildTokenTest::ExpectWaitForCommand(int count, ...) { ++ va_list ap; ++ va_start(ap, count); ++ EnqueueBooleans(token_command_runner_.wait_for_command_, count, ap); ++ va_end(ap); ++} ++ ++void BuildTokenTest::EnqueueBooleans(vector& booleans, int count, va_list ap) { ++ while (count--) { ++ int value = va_arg(ap, int); ++ booleans.push_back(!!value); // force bool ++ } ++} ++ ++TEST_F(BuildTokenTest, DoNotAquireToken) { ++ // plan should execute one command ++ string err; ++ EXPECT_TRUE(builder_.AddTarget("cat1", &err)); ++ ASSERT_EQ("", err); ++ ++ // pretend we can't run anything ++ ExpectCanRunMore(1, false); ++ ++ EXPECT_FALSE(builder_.Build(&err)); ++ EXPECT_EQ("stuck [this is a bug]", err); ++ ++ EXPECT_EQ(0u, token_command_runner_.commands_ran_.size()); ++} ++ ++TEST_F(BuildTokenTest, DoNotStartWithoutToken) { ++ // plan should execute one command ++ string err; ++ EXPECT_TRUE(builder_.AddTarget("cat1", &err)); ++ ASSERT_EQ("", err); ++ ++ // we could run a command but do not have a token for it ++ ExpectCanRunMore(1, true); ++ ExpectAcquireToken(1, false); ++ ++ EXPECT_FALSE(builder_.Build(&err)); ++ EXPECT_EQ("stuck [this is a bug]", err); ++ ++ EXPECT_EQ(0u, token_command_runner_.commands_ran_.size()); ++} ++ ++TEST_F(BuildTokenTest, CompleteOneStep) { ++ // plan should execute one command ++ string err; ++ EXPECT_TRUE(builder_.AddTarget("cat1", &err)); ++ ASSERT_EQ("", err); ++ ++ // allow running of one command ++ ExpectCanRunMore(1, true); ++ ExpectAcquireToken(1, true); ++ // block and wait for command to finalize ++ ExpectWaitForCommand(1, false); ++ ++ EXPECT_TRUE(builder_.Build(&err)); ++ EXPECT_EQ("", err); ++ ++ EXPECT_EQ(1u, token_command_runner_.commands_ran_.size()); ++ EXPECT_TRUE(token_command_runner_.commands_ran_[0] == "cat in1 > cat1"); ++} ++ ++TEST_F(BuildTokenTest, AcquireOneToken) { ++ // plan should execute more than one command ++ string err; ++ EXPECT_TRUE(builder_.AddTarget("cat12", &err)); ++ ASSERT_EQ("", err); ++ ++ // allow running of one command ++ ExpectCanRunMore(3, true, false, false); ++ ExpectAcquireToken(1, true); ++ // block and wait for command to finalize ++ ExpectWaitForCommand(1, false); ++ ++ EXPECT_FALSE(builder_.Build(&err)); ++ EXPECT_EQ("stuck [this is a bug]", err); ++ ++ EXPECT_EQ(1u, token_command_runner_.commands_ran_.size()); ++ // any of the two dependencies could have been executed ++ EXPECT_TRUE(token_command_runner_.commands_ran_[0] == "cat in1 > cat1" || ++ token_command_runner_.commands_ran_[0] == "cat in1 in2 > cat2"); ++} ++ ++TEST_F(BuildTokenTest, WantTwoTokens) { ++ // plan should execute more than one command ++ string err; ++ EXPECT_TRUE(builder_.AddTarget("cat12", &err)); ++ ASSERT_EQ("", err); ++ ++ // allow running of one command ++ ExpectCanRunMore(3, true, true, false); ++ ExpectAcquireToken(2, true, false); ++ // wait for command to finalize or token to become available ++ ExpectWaitForCommand(1, true); ++ ++ EXPECT_FALSE(builder_.Build(&err)); ++ EXPECT_EQ("stuck [this is a bug]", err); ++ ++ EXPECT_EQ(1u, token_command_runner_.commands_ran_.size()); ++ // any of the two dependencies could have been executed ++ EXPECT_TRUE(token_command_runner_.commands_ran_[0] == "cat in1 > cat1" || ++ token_command_runner_.commands_ran_[0] == "cat in1 in2 > cat2"); ++} ++ ++TEST_F(BuildTokenTest, CompleteTwoSteps) { ++ ASSERT_NO_FATAL_FAILURE(AssertParse(&state_, ++"build out1: cat in1\n" ++"build out2: cat out1\n")); ++ ++ // plan should execute more than one command ++ string err; ++ EXPECT_TRUE(builder_.AddTarget("out2", &err)); ++ ASSERT_EQ("", err); ++ ++ // allow running of two commands ++ ExpectCanRunMore(2, true, true); ++ ExpectAcquireToken(2, true, true); ++ // wait for commands to finalize ++ ExpectWaitForCommand(2, false, false); ++ ++ EXPECT_TRUE(builder_.Build(&err)); ++ EXPECT_EQ("", err); ++ ++ EXPECT_EQ(2u, token_command_runner_.commands_ran_.size()); ++ EXPECT_TRUE(token_command_runner_.commands_ran_[0] == "cat in1 > out1"); ++ EXPECT_TRUE(token_command_runner_.commands_ran_[1] == "cat out1 > out2"); ++} ++ ++TEST_F(BuildTokenTest, TwoCommandsInParallel) { ++ ASSERT_NO_FATAL_FAILURE(AssertParse(&state_, ++"rule token-available\n" ++" command = cat $in > $out\n" ++"build out1: token-available in1\n" ++"build out2: token-available in2\n" ++"build out12: cat out1 out2\n")); ++ ++ // plan should execute more than one command ++ string err; ++ EXPECT_TRUE(builder_.AddTarget("out12", &err)); ++ ASSERT_EQ("", err); ++ ++ // 1st command: token available -> allow running ++ // 2nd command: no token available but becomes available later ++ ExpectCanRunMore(4, true, true, true, false); ++ ExpectAcquireToken(3, true, false, true); ++ // 1st call waits for command to finalize or token to become available ++ // 2nd call waits for command to finalize ++ // 3rd call waits for command to finalize ++ ExpectWaitForCommand(3, true, false, false); ++ ++ EXPECT_FALSE(builder_.Build(&err)); ++ EXPECT_EQ("stuck [this is a bug]", err); ++ ++ EXPECT_EQ(2u, token_command_runner_.commands_ran_.size()); ++ EXPECT_TRUE((token_command_runner_.commands_ran_[0] == "cat in1 > out1" && ++ token_command_runner_.commands_ran_[1] == "cat in2 > out2") || ++ (token_command_runner_.commands_ran_[0] == "cat in2 > out2" && ++ token_command_runner_.commands_ran_[1] == "cat in1 > out1")); ++} ++ ++TEST_F(BuildTokenTest, CompleteThreeStepsSerial) { ++ // plan should execute more than one command ++ string err; ++ EXPECT_TRUE(builder_.AddTarget("cat12", &err)); ++ ASSERT_EQ("", err); ++ ++ // allow running of all commands ++ ExpectCanRunMore(4, true, true, true, true); ++ ExpectAcquireToken(4, true, false, true, true); ++ // wait for commands to finalize ++ ExpectWaitForCommand(3, true, false, false); ++ ++ EXPECT_TRUE(builder_.Build(&err)); ++ EXPECT_EQ("", err); ++ ++ EXPECT_EQ(3u, token_command_runner_.commands_ran_.size()); ++ EXPECT_TRUE((token_command_runner_.commands_ran_[0] == "cat in1 > cat1" && ++ token_command_runner_.commands_ran_[1] == "cat in1 in2 > cat2") || ++ (token_command_runner_.commands_ran_[0] == "cat in1 in2 > cat2" && ++ token_command_runner_.commands_ran_[1] == "cat in1 > cat1" )); ++ EXPECT_TRUE(token_command_runner_.commands_ran_[2] == "cat cat1 cat2 > cat12"); ++} ++ ++TEST_F(BuildTokenTest, CompleteThreeStepsParallel) { ++ ASSERT_NO_FATAL_FAILURE(AssertParse(&state_, ++"rule token-available\n" ++" command = cat $in > $out\n" ++"build out1: token-available in1\n" ++"build out2: token-available in2\n" ++"build out12: cat out1 out2\n")); ++ ++ // plan should execute more than one command ++ string err; ++ EXPECT_TRUE(builder_.AddTarget("out12", &err)); ++ ASSERT_EQ("", err); ++ ++ // allow running of all commands ++ ExpectCanRunMore(4, true, true, true, true); ++ ExpectAcquireToken(4, true, false, true, true); ++ // wait for commands to finalize ++ ExpectWaitForCommand(4, true, false, false, false); ++ ++ EXPECT_TRUE(builder_.Build(&err)); ++ EXPECT_EQ("", err); ++ ++ EXPECT_EQ(3u, token_command_runner_.commands_ran_.size()); ++ EXPECT_TRUE((token_command_runner_.commands_ran_[0] == "cat in1 > out1" && ++ token_command_runner_.commands_ran_[1] == "cat in2 > out2") || ++ (token_command_runner_.commands_ran_[0] == "cat in2 > out2" && ++ token_command_runner_.commands_ran_[1] == "cat in1 > out1")); ++ EXPECT_TRUE(token_command_runner_.commands_ran_[2] == "cat out1 out2 > out12"); ++} +--- a/src/exit_status.h ++++ b/src/exit_status.h +@@ -18,7 +18,8 @@ + enum ExitStatus { + ExitSuccess, + ExitFailure, +- ExitInterrupted ++ ExitTokenAvailable, ++ ExitInterrupted, + }; + + #endif // NINJA_EXIT_STATUS_H_ +--- a/src/ninja.cc ++++ b/src/ninja.cc +@@ -1289,6 +1289,7 @@ int ReadFlags(int* argc, char*** argv, + // We want to run N jobs in parallel. For N = 0, INT_MAX + // is close enough to infinite for most sane builds. + config->parallelism = value > 0 ? value : INT_MAX; ++ config->parallelism_from_cmdline = true; + break; + } + case 'k': { +--- a/src/subprocess-posix.cc ++++ b/src/subprocess-posix.cc +@@ -13,6 +13,7 @@ + // limitations under the License. + + #include "subprocess.h" ++#include "tokenpool.h" + + #include + #include +@@ -249,7 +250,7 @@ Subprocess *SubprocessSet::Add(const str + } + + #ifdef USE_PPOLL +-bool SubprocessSet::DoWork() { ++bool SubprocessSet::DoWork(TokenPool* tokens) { + vector fds; + nfds_t nfds = 0; + +@@ -263,6 +264,12 @@ bool SubprocessSet::DoWork() { + ++nfds; + } + ++ if (tokens) { ++ pollfd pfd = { tokens->GetMonitorFd(), POLLIN | POLLPRI, 0 }; ++ fds.push_back(pfd); ++ ++nfds; ++ } ++ + interrupted_ = 0; + int ret = ppoll(&fds.front(), nfds, NULL, &old_mask_); + if (ret == -1) { +@@ -295,11 +302,20 @@ bool SubprocessSet::DoWork() { + ++i; + } + ++ if (tokens) { ++ pollfd *pfd = &fds[nfds - 1]; ++ if (pfd->fd >= 0) { ++ assert(pfd->fd == tokens->GetMonitorFd()); ++ if (pfd->revents != 0) ++ token_available_ = true; ++ } ++ } ++ + return IsInterrupted(); + } + + #else // !defined(USE_PPOLL) +-bool SubprocessSet::DoWork() { ++bool SubprocessSet::DoWork(TokenPool* tokens) { + fd_set set; + int nfds = 0; + FD_ZERO(&set); +@@ -314,6 +330,13 @@ bool SubprocessSet::DoWork() { + } + } + ++ if (tokens) { ++ int fd = tokens->GetMonitorFd(); ++ FD_SET(fd, &set); ++ if (nfds < fd+1) ++ nfds = fd+1; ++ } ++ + interrupted_ = 0; + int ret = pselect(nfds, &set, 0, 0, 0, &old_mask_); + if (ret == -1) { +@@ -342,6 +365,12 @@ bool SubprocessSet::DoWork() { + ++i; + } + ++ if (tokens) { ++ int fd = tokens->GetMonitorFd(); ++ if ((fd >= 0) && FD_ISSET(fd, &set)) ++ token_available_ = true; ++ } ++ + return IsInterrupted(); + } + #endif // !defined(USE_PPOLL) +--- a/src/subprocess-win32.cc ++++ b/src/subprocess-win32.cc +@@ -13,6 +13,7 @@ + // limitations under the License. + + #include "subprocess.h" ++#include "tokenpool.h" + + #include + #include +@@ -251,11 +252,14 @@ Subprocess *SubprocessSet::Add(const str + return subprocess; + } + +-bool SubprocessSet::DoWork() { ++bool SubprocessSet::DoWork(TokenPool* tokens) { + DWORD bytes_read; + Subprocess* subproc; + OVERLAPPED* overlapped; + ++ if (tokens) ++ tokens->WaitForTokenAvailability(ioport_); ++ + if (!GetQueuedCompletionStatus(ioport_, &bytes_read, (PULONG_PTR)&subproc, + &overlapped, INFINITE)) { + if (GetLastError() != ERROR_BROKEN_PIPE) +@@ -266,6 +270,11 @@ bool SubprocessSet::DoWork() { + // delivered by NotifyInterrupted above. + return true; + ++ if (tokens && tokens->TokenIsAvailable((ULONG_PTR)subproc)) { ++ token_available_ = true; ++ return false; ++ } ++ + subproc->OnPipeReady(); + + if (subproc->Done()) { +--- a/src/subprocess.h ++++ b/src/subprocess.h +@@ -76,6 +76,8 @@ struct Subprocess { + friend struct SubprocessSet; + }; + ++struct TokenPool; ++ + /// SubprocessSet runs a ppoll/pselect() loop around a set of Subprocesses. + /// DoWork() waits for any state change in subprocesses; finished_ + /// is a queue of subprocesses as they finish. +@@ -84,13 +86,17 @@ struct SubprocessSet { + ~SubprocessSet(); + + Subprocess* Add(const std::string& command, bool use_console = false); +- bool DoWork(); ++ bool DoWork(struct TokenPool* tokens); + Subprocess* NextFinished(); + void Clear(); + + std::vector running_; + std::queue finished_; + ++ bool token_available_; ++ bool IsTokenAvailable() { return token_available_; } ++ void ResetTokenAvailable() { token_available_ = false; } ++ + #ifdef _WIN32 + static BOOL WINAPI NotifyInterrupted(DWORD dwCtrlType); + static HANDLE ioport_; +--- a/src/subprocess_test.cc ++++ b/src/subprocess_test.cc +@@ -13,6 +13,7 @@ + // limitations under the License. + + #include "subprocess.h" ++#include "tokenpool.h" + + #include "test.h" + +@@ -34,8 +35,30 @@ const char* kSimpleCommand = "cmd /c dir + const char* kSimpleCommand = "ls /"; + #endif + ++struct TestTokenPool : public TokenPool { ++ bool Acquire() { return false; } ++ void Reserve() {} ++ void Release() {} ++ void Clear() {} ++ bool Setup(bool ignore_unused, bool verbose, double& max_load_average) { return false; } ++ ++#ifdef _WIN32 ++ bool _token_available; ++ void WaitForTokenAvailability(HANDLE ioport) { ++ if (_token_available) ++ // unblock GetQueuedCompletionStatus() ++ PostQueuedCompletionStatus(ioport, 0, (ULONG_PTR) this, NULL); ++ } ++ bool TokenIsAvailable(ULONG_PTR key) { return key == (ULONG_PTR) this; } ++#else ++ int _fd; ++ int GetMonitorFd() { return _fd; } ++#endif ++}; ++ + struct SubprocessTest : public testing::Test { + SubprocessSet subprocs_; ++ TestTokenPool tokens_; + }; + + } // anonymous namespace +@@ -45,10 +68,12 @@ TEST_F(SubprocessTest, BadCommandStderr) + Subprocess* subproc = subprocs_.Add("cmd /c ninja_no_such_command"); + ASSERT_NE((Subprocess *) 0, subproc); + ++ subprocs_.ResetTokenAvailable(); + while (!subproc->Done()) { + // Pretend we discovered that stderr was ready for writing. +- subprocs_.DoWork(); ++ subprocs_.DoWork(NULL); + } ++ ASSERT_FALSE(subprocs_.IsTokenAvailable()); + + EXPECT_EQ(ExitFailure, subproc->Finish()); + EXPECT_NE("", subproc->GetOutput()); +@@ -59,10 +84,12 @@ TEST_F(SubprocessTest, NoSuchCommand) { + Subprocess* subproc = subprocs_.Add("ninja_no_such_command"); + ASSERT_NE((Subprocess *) 0, subproc); + ++ subprocs_.ResetTokenAvailable(); + while (!subproc->Done()) { + // Pretend we discovered that stderr was ready for writing. +- subprocs_.DoWork(); ++ subprocs_.DoWork(NULL); + } ++ ASSERT_FALSE(subprocs_.IsTokenAvailable()); + + EXPECT_EQ(ExitFailure, subproc->Finish()); + EXPECT_NE("", subproc->GetOutput()); +@@ -78,9 +105,11 @@ TEST_F(SubprocessTest, InterruptChild) { + Subprocess* subproc = subprocs_.Add("kill -INT $$"); + ASSERT_NE((Subprocess *) 0, subproc); + ++ subprocs_.ResetTokenAvailable(); + while (!subproc->Done()) { +- subprocs_.DoWork(); ++ subprocs_.DoWork(NULL); + } ++ ASSERT_FALSE(subprocs_.IsTokenAvailable()); + + EXPECT_EQ(ExitInterrupted, subproc->Finish()); + } +@@ -90,7 +119,7 @@ TEST_F(SubprocessTest, InterruptParent) + ASSERT_NE((Subprocess *) 0, subproc); + + while (!subproc->Done()) { +- bool interrupted = subprocs_.DoWork(); ++ bool interrupted = subprocs_.DoWork(NULL); + if (interrupted) + return; + } +@@ -102,9 +131,11 @@ TEST_F(SubprocessTest, InterruptChildWit + Subprocess* subproc = subprocs_.Add("kill -TERM $$"); + ASSERT_NE((Subprocess *) 0, subproc); + ++ subprocs_.ResetTokenAvailable(); + while (!subproc->Done()) { +- subprocs_.DoWork(); ++ subprocs_.DoWork(NULL); + } ++ ASSERT_FALSE(subprocs_.IsTokenAvailable()); + + EXPECT_EQ(ExitInterrupted, subproc->Finish()); + } +@@ -114,7 +145,7 @@ TEST_F(SubprocessTest, InterruptParentWi + ASSERT_NE((Subprocess *) 0, subproc); + + while (!subproc->Done()) { +- bool interrupted = subprocs_.DoWork(); ++ bool interrupted = subprocs_.DoWork(NULL); + if (interrupted) + return; + } +@@ -126,9 +157,11 @@ TEST_F(SubprocessTest, InterruptChildWit + Subprocess* subproc = subprocs_.Add("kill -HUP $$"); + ASSERT_NE((Subprocess *) 0, subproc); + ++ subprocs_.ResetTokenAvailable(); + while (!subproc->Done()) { +- subprocs_.DoWork(); ++ subprocs_.DoWork(NULL); + } ++ ASSERT_FALSE(subprocs_.IsTokenAvailable()); + + EXPECT_EQ(ExitInterrupted, subproc->Finish()); + } +@@ -138,7 +171,7 @@ TEST_F(SubprocessTest, InterruptParentWi + ASSERT_NE((Subprocess *) 0, subproc); + + while (!subproc->Done()) { +- bool interrupted = subprocs_.DoWork(); ++ bool interrupted = subprocs_.DoWork(NULL); + if (interrupted) + return; + } +@@ -153,9 +186,11 @@ TEST_F(SubprocessTest, Console) { + subprocs_.Add("test -t 0 -a -t 1 -a -t 2", /*use_console=*/true); + ASSERT_NE((Subprocess*)0, subproc); + ++ subprocs_.ResetTokenAvailable(); + while (!subproc->Done()) { +- subprocs_.DoWork(); ++ subprocs_.DoWork(NULL); + } ++ ASSERT_FALSE(subprocs_.IsTokenAvailable()); + + EXPECT_EQ(ExitSuccess, subproc->Finish()); + } +@@ -167,9 +202,11 @@ TEST_F(SubprocessTest, SetWithSingle) { + Subprocess* subproc = subprocs_.Add(kSimpleCommand); + ASSERT_NE((Subprocess *) 0, subproc); + ++ subprocs_.ResetTokenAvailable(); + while (!subproc->Done()) { +- subprocs_.DoWork(); ++ subprocs_.DoWork(NULL); + } ++ ASSERT_FALSE(subprocs_.IsTokenAvailable()); + ASSERT_EQ(ExitSuccess, subproc->Finish()); + ASSERT_NE("", subproc->GetOutput()); + +@@ -200,12 +237,13 @@ TEST_F(SubprocessTest, SetWithMulti) { + ASSERT_EQ("", processes[i]->GetOutput()); + } + ++ subprocs_.ResetTokenAvailable(); + while (!processes[0]->Done() || !processes[1]->Done() || + !processes[2]->Done()) { + ASSERT_GT(subprocs_.running_.size(), 0u); +- subprocs_.DoWork(); ++ subprocs_.DoWork(NULL); + } +- ++ ASSERT_FALSE(subprocs_.IsTokenAvailable()); + ASSERT_EQ(0u, subprocs_.running_.size()); + ASSERT_EQ(3u, subprocs_.finished_.size()); + +@@ -237,8 +275,10 @@ TEST_F(SubprocessTest, SetWithLots) { + ASSERT_NE((Subprocess *) 0, subproc); + procs.push_back(subproc); + } ++ subprocs_.ResetTokenAvailable(); + while (!subprocs_.running_.empty()) +- subprocs_.DoWork(); ++ subprocs_.DoWork(NULL); ++ ASSERT_FALSE(subprocs_.IsTokenAvailable()); + for (size_t i = 0; i < procs.size(); ++i) { + ASSERT_EQ(ExitSuccess, procs[i]->Finish()); + ASSERT_NE("", procs[i]->GetOutput()); +@@ -254,10 +294,91 @@ TEST_F(SubprocessTest, SetWithLots) { + // that stdin is closed. + TEST_F(SubprocessTest, ReadStdin) { + Subprocess* subproc = subprocs_.Add("cat -"); ++ subprocs_.ResetTokenAvailable(); + while (!subproc->Done()) { +- subprocs_.DoWork(); ++ subprocs_.DoWork(NULL); + } ++ ASSERT_FALSE(subprocs_.IsTokenAvailable()); + ASSERT_EQ(ExitSuccess, subproc->Finish()); + ASSERT_EQ(1u, subprocs_.finished_.size()); + } + #endif // _WIN32 ++ ++TEST_F(SubprocessTest, TokenAvailable) { ++ Subprocess* subproc = subprocs_.Add(kSimpleCommand); ++ ASSERT_NE((Subprocess *) 0, subproc); ++ ++ // simulate GNUmake jobserver pipe with 1 token ++#ifdef _WIN32 ++ tokens_._token_available = true; ++#else ++ int fds[2]; ++ ASSERT_EQ(0u, pipe(fds)); ++ tokens_._fd = fds[0]; ++ ASSERT_EQ(1u, write(fds[1], "T", 1)); ++#endif ++ ++ subprocs_.ResetTokenAvailable(); ++ subprocs_.DoWork(&tokens_); ++#ifdef _WIN32 ++ tokens_._token_available = false; ++ // we need to loop here as we have no conrol where the token ++ // I/O completion post ends up in the queue ++ while (!subproc->Done() && !subprocs_.IsTokenAvailable()) { ++ subprocs_.DoWork(&tokens_); ++ } ++#endif ++ ++ EXPECT_TRUE(subprocs_.IsTokenAvailable()); ++ EXPECT_EQ(0u, subprocs_.finished_.size()); ++ ++ // remove token to let DoWork() wait for command again ++#ifndef _WIN32 ++ char token; ++ ASSERT_EQ(1u, read(fds[0], &token, 1)); ++#endif ++ ++ while (!subproc->Done()) { ++ subprocs_.DoWork(&tokens_); ++ } ++ ++#ifndef _WIN32 ++ close(fds[1]); ++ close(fds[0]); ++#endif ++ ++ EXPECT_EQ(ExitSuccess, subproc->Finish()); ++ EXPECT_NE("", subproc->GetOutput()); ++ ++ EXPECT_EQ(1u, subprocs_.finished_.size()); ++} ++ ++TEST_F(SubprocessTest, TokenNotAvailable) { ++ Subprocess* subproc = subprocs_.Add(kSimpleCommand); ++ ASSERT_NE((Subprocess *) 0, subproc); ++ ++ // simulate GNUmake jobserver pipe with 0 tokens ++#ifdef _WIN32 ++ tokens_._token_available = false; ++#else ++ int fds[2]; ++ ASSERT_EQ(0u, pipe(fds)); ++ tokens_._fd = fds[0]; ++#endif ++ ++ subprocs_.ResetTokenAvailable(); ++ while (!subproc->Done()) { ++ subprocs_.DoWork(&tokens_); ++ } ++ ++#ifndef _WIN32 ++ close(fds[1]); ++ close(fds[0]); ++#endif ++ ++ EXPECT_FALSE(subprocs_.IsTokenAvailable()); ++ EXPECT_EQ(ExitSuccess, subproc->Finish()); ++ EXPECT_NE("", subproc->GetOutput()); ++ ++ EXPECT_EQ(1u, subprocs_.finished_.size()); ++} +--- /dev/null ++++ b/src/tokenpool-gnu-make-posix.cc +@@ -0,0 +1,202 @@ ++// Copyright 2016-2018 Google Inc. All Rights Reserved. ++// ++// Licensed under the Apache License, Version 2.0 (the "License"); ++// you may not use this file except in compliance with the License. ++// You may obtain a copy of the License at ++// ++// http://www.apache.org/licenses/LICENSE-2.0 ++// ++// Unless required by applicable law or agreed to in writing, software ++// distributed under the License is distributed on an "AS IS" BASIS, ++// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++// See the License for the specific language governing permissions and ++// limitations under the License. ++ ++#include "tokenpool-gnu-make.h" ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++// TokenPool implementation for GNU make jobserver - POSIX implementation ++// (http://make.mad-scientist.net/papers/jobserver-implementation/) ++struct GNUmakeTokenPoolPosix : public GNUmakeTokenPool { ++ GNUmakeTokenPoolPosix(); ++ virtual ~GNUmakeTokenPoolPosix(); ++ ++ virtual int GetMonitorFd(); ++ ++ virtual const char* GetEnv(const char* name) { return getenv(name); }; ++ virtual bool ParseAuth(const char* jobserver); ++ virtual bool AcquireToken(); ++ virtual bool ReturnToken(); ++ ++ private: ++ int rfd_; ++ int wfd_; ++ ++ struct sigaction old_act_; ++ bool restore_; ++ ++ static int dup_rfd_; ++ static void CloseDupRfd(int signum); ++ ++ bool CheckFd(int fd); ++ bool SetAlarmHandler(); ++}; ++ ++GNUmakeTokenPoolPosix::GNUmakeTokenPoolPosix() : rfd_(-1), wfd_(-1), restore_(false) { ++} ++ ++GNUmakeTokenPoolPosix::~GNUmakeTokenPoolPosix() { ++ Clear(); ++ if (restore_) ++ sigaction(SIGALRM, &old_act_, NULL); ++} ++ ++bool GNUmakeTokenPoolPosix::CheckFd(int fd) { ++ if (fd < 0) ++ return false; ++ int ret = fcntl(fd, F_GETFD); ++ if (ret < 0) ++ return false; ++ return true; ++} ++ ++int GNUmakeTokenPoolPosix::dup_rfd_ = -1; ++ ++void GNUmakeTokenPoolPosix::CloseDupRfd(int signum) { ++ close(dup_rfd_); ++ dup_rfd_ = -1; ++} ++ ++bool GNUmakeTokenPoolPosix::SetAlarmHandler() { ++ struct sigaction act; ++ memset(&act, 0, sizeof(act)); ++ act.sa_handler = CloseDupRfd; ++ if (sigaction(SIGALRM, &act, &old_act_) < 0) { ++ perror("sigaction:"); ++ return false; ++ } ++ restore_ = true; ++ return true; ++} ++ ++bool GNUmakeTokenPoolPosix::ParseAuth(const char* jobserver) { ++ int rfd = -1; ++ int wfd = -1; ++ if ((sscanf(jobserver, "%*[^=]=%d,%d", &rfd, &wfd) == 2) && ++ CheckFd(rfd) && ++ CheckFd(wfd) && ++ SetAlarmHandler()) { ++ rfd_ = rfd; ++ wfd_ = wfd; ++ return true; ++ } ++ ++ return false; ++} ++ ++bool GNUmakeTokenPoolPosix::AcquireToken() { ++ // Please read ++ // ++ // http://make.mad-scientist.net/papers/jobserver-implementation/ ++ // ++ // for the reasoning behind the following code. ++ // ++ // Try to read one character from the pipe. Returns true on success. ++ // ++ // First check if read() would succeed without blocking. ++#ifdef USE_PPOLL ++ pollfd pollfds[] = {{rfd_, POLLIN, 0}}; ++ int ret = poll(pollfds, 1, 0); ++#else ++ fd_set set; ++ struct timeval timeout = { 0, 0 }; ++ FD_ZERO(&set); ++ FD_SET(rfd_, &set); ++ int ret = select(rfd_ + 1, &set, NULL, NULL, &timeout); ++#endif ++ if (ret > 0) { ++ // Handle potential race condition: ++ // - the above check succeeded, i.e. read() should not block ++ // - the character disappears before we call read() ++ // ++ // Create a duplicate of rfd_. The duplicate file descriptor dup_rfd_ ++ // can safely be closed by signal handlers without affecting rfd_. ++ dup_rfd_ = dup(rfd_); ++ ++ if (dup_rfd_ != -1) { ++ struct sigaction act, old_act; ++ int ret = 0; ++ ++ // Temporarily replace SIGCHLD handler with our own ++ memset(&act, 0, sizeof(act)); ++ act.sa_handler = CloseDupRfd; ++ if (sigaction(SIGCHLD, &act, &old_act) == 0) { ++ struct itimerval timeout; ++ ++ // install a 100ms timeout that generates SIGALARM on expiration ++ memset(&timeout, 0, sizeof(timeout)); ++ timeout.it_value.tv_usec = 100 * 1000; // [ms] -> [usec] ++ if (setitimer(ITIMER_REAL, &timeout, NULL) == 0) { ++ char buf; ++ ++ // Now try to read() from dup_rfd_. Return values from read(): ++ // ++ // 1. token read -> 1 ++ // 2. pipe closed -> 0 ++ // 3. alarm expires -> -1 (EINTR) ++ // 4. child exits -> -1 (EINTR) ++ // 5. alarm expired before entering read() -> -1 (EBADF) ++ // 6. child exited before entering read() -> -1 (EBADF) ++ // 7. child exited before handler is installed -> go to 1 - 3 ++ ret = read(dup_rfd_, &buf, 1); ++ ++ // disarm timer ++ memset(&timeout, 0, sizeof(timeout)); ++ setitimer(ITIMER_REAL, &timeout, NULL); ++ } ++ ++ sigaction(SIGCHLD, &old_act, NULL); ++ } ++ ++ CloseDupRfd(0); ++ ++ // Case 1 from above list ++ if (ret > 0) ++ return true; ++ } ++ } ++ ++ // read() would block, i.e. no token available, ++ // cases 2-6 from above list or ++ // select() / poll() / dup() / sigaction() / setitimer() failed ++ return false; ++} ++ ++bool GNUmakeTokenPoolPosix::ReturnToken() { ++ const char buf = '+'; ++ while (1) { ++ int ret = write(wfd_, &buf, 1); ++ if (ret > 0) ++ return true; ++ if ((ret != -1) || (errno != EINTR)) ++ return false; ++ // write got interrupted - retry ++ } ++} ++ ++int GNUmakeTokenPoolPosix::GetMonitorFd() { ++ return rfd_; ++} ++ ++TokenPool* TokenPool::Get() { ++ return new GNUmakeTokenPoolPosix; ++} +--- /dev/null ++++ b/src/tokenpool-gnu-make-win32.cc +@@ -0,0 +1,239 @@ ++// Copyright 2018 Google Inc. All Rights Reserved. ++// ++// Licensed under the Apache License, Version 2.0 (the "License"); ++// you may not use this file except in compliance with the License. ++// You may obtain a copy of the License at ++// ++// http://www.apache.org/licenses/LICENSE-2.0 ++// ++// Unless required by applicable law or agreed to in writing, software ++// distributed under the License is distributed on an "AS IS" BASIS, ++// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++// See the License for the specific language governing permissions and ++// limitations under the License. ++ ++#include "tokenpool-gnu-make.h" ++ ++// Always include this first. ++// Otherwise the other system headers don't work correctly under Win32 ++#include ++ ++#include ++#include ++#include ++ ++#include "util.h" ++ ++// TokenPool implementation for GNU make jobserver - Win32 implementation ++// (https://www.gnu.org/software/make/manual/html_node/Windows-Jobserver.html) ++struct GNUmakeTokenPoolWin32 : public GNUmakeTokenPool { ++ GNUmakeTokenPoolWin32(); ++ virtual ~GNUmakeTokenPoolWin32(); ++ ++ virtual void WaitForTokenAvailability(HANDLE ioport); ++ virtual bool TokenIsAvailable(ULONG_PTR key); ++ ++ virtual const char* GetEnv(const char* name); ++ virtual bool ParseAuth(const char* jobserver); ++ virtual bool AcquireToken(); ++ virtual bool ReturnToken(); ++ ++ private: ++ // Semaphore for GNU make jobserver protocol ++ HANDLE semaphore_jobserver_; ++ // Semaphore Child -> Parent ++ // - child releases it before entering wait on jobserver semaphore ++ // - parent blocks on it to know when child enters wait ++ HANDLE semaphore_enter_wait_; ++ // Semaphore Parent -> Child ++ // - parent releases it to allow child to restart loop ++ // - child blocks on it to know when to restart loop ++ HANDLE semaphore_restart_; ++ // set to false if child should exit loop and terminate thread ++ bool running_; ++ // child thread ++ HANDLE child_; ++ // I/O completion port from SubprocessSet ++ HANDLE ioport_; ++ ++ ++ DWORD SemaphoreThread(); ++ void ReleaseSemaphore(HANDLE semaphore); ++ void WaitForObject(HANDLE object); ++ static DWORD WINAPI SemaphoreThreadWrapper(LPVOID param); ++ static void NoopAPCFunc(ULONG_PTR param); ++}; ++ ++GNUmakeTokenPoolWin32::GNUmakeTokenPoolWin32() : semaphore_jobserver_(NULL), ++ semaphore_enter_wait_(NULL), ++ semaphore_restart_(NULL), ++ running_(false), ++ child_(NULL), ++ ioport_(NULL) { ++} ++ ++GNUmakeTokenPoolWin32::~GNUmakeTokenPoolWin32() { ++ Clear(); ++ CloseHandle(semaphore_jobserver_); ++ semaphore_jobserver_ = NULL; ++ ++ if (child_) { ++ // tell child thread to exit ++ running_ = false; ++ ReleaseSemaphore(semaphore_restart_); ++ ++ // wait for child thread to exit ++ WaitForObject(child_); ++ CloseHandle(child_); ++ child_ = NULL; ++ } ++ ++ if (semaphore_restart_) { ++ CloseHandle(semaphore_restart_); ++ semaphore_restart_ = NULL; ++ } ++ ++ if (semaphore_enter_wait_) { ++ CloseHandle(semaphore_enter_wait_); ++ semaphore_enter_wait_ = NULL; ++ } ++} ++ ++const char* GNUmakeTokenPoolWin32::GetEnv(const char* name) { ++ // getenv() does not work correctly together with tokenpool_tests.cc ++ static char buffer[MAX_PATH + 1]; ++ if (GetEnvironmentVariable(name, buffer, sizeof(buffer)) == 0) ++ return NULL; ++ return buffer; ++} ++ ++bool GNUmakeTokenPoolWin32::ParseAuth(const char* jobserver) { ++ // match "--jobserver-auth=gmake_semaphore_..." ++ const char* start = strchr(jobserver, '='); ++ if (start) { ++ const char* end = start; ++ unsigned int len; ++ char c, *auth; ++ ++ while ((c = *++end) != '\0') ++ if (!(isalnum(c) || (c == '_'))) ++ break; ++ len = end - start; // includes string terminator in count ++ ++ if ((len > 1) && ((auth = (char*)malloc(len)) != NULL)) { ++ strncpy(auth, start + 1, len - 1); ++ auth[len - 1] = '\0'; ++ ++ if ((semaphore_jobserver_ = ++ OpenSemaphore(SEMAPHORE_ALL_ACCESS, /* Semaphore access setting */ ++ FALSE, /* Child processes DON'T inherit */ ++ auth /* Semaphore name */ ++ )) != NULL) { ++ free(auth); ++ return true; ++ } ++ ++ free(auth); ++ } ++ } ++ ++ return false; ++} ++ ++bool GNUmakeTokenPoolWin32::AcquireToken() { ++ return WaitForSingleObject(semaphore_jobserver_, 0) == WAIT_OBJECT_0; ++} ++ ++bool GNUmakeTokenPoolWin32::ReturnToken() { ++ ReleaseSemaphore(semaphore_jobserver_); ++ return true; ++} ++ ++DWORD GNUmakeTokenPoolWin32::SemaphoreThread() { ++ while (running_) { ++ // indicate to parent that we are entering wait ++ ReleaseSemaphore(semaphore_enter_wait_); ++ ++ // alertable wait forever on token semaphore ++ if (WaitForSingleObjectEx(semaphore_jobserver_, INFINITE, TRUE) == WAIT_OBJECT_0) { ++ // release token again for AcquireToken() ++ ReleaseSemaphore(semaphore_jobserver_); ++ ++ // indicate to parent on ioport that a token might be available ++ if (!PostQueuedCompletionStatus(ioport_, 0, (ULONG_PTR) this, NULL)) ++ Win32Fatal("PostQueuedCompletionStatus"); ++ } ++ ++ // wait for parent to allow loop restart ++ WaitForObject(semaphore_restart_); ++ // semaphore is now in nonsignaled state again for next run... ++ } ++ ++ return 0; ++} ++ ++DWORD WINAPI GNUmakeTokenPoolWin32::SemaphoreThreadWrapper(LPVOID param) { ++ GNUmakeTokenPoolWin32* This = (GNUmakeTokenPoolWin32*) param; ++ return This->SemaphoreThread(); ++} ++ ++void GNUmakeTokenPoolWin32::NoopAPCFunc(ULONG_PTR param) { ++} ++ ++void GNUmakeTokenPoolWin32::WaitForTokenAvailability(HANDLE ioport) { ++ if (child_ == NULL) { ++ // first invocation ++ // ++ // subprocess-win32.cc uses I/O completion port (IOCP) which can't be ++ // used as a waitable object. Therefore we can't use WaitMultipleObjects() ++ // to wait on the IOCP and the token semaphore at the same time. Create ++ // a child thread that waits on the semaphore and posts an I/O completion ++ ioport_ = ioport; ++ ++ // create both semaphores in nonsignaled state ++ if ((semaphore_enter_wait_ = CreateSemaphore(NULL, 0, 1, NULL)) ++ == NULL) ++ Win32Fatal("CreateSemaphore/enter_wait"); ++ if ((semaphore_restart_ = CreateSemaphore(NULL, 0, 1, NULL)) ++ == NULL) ++ Win32Fatal("CreateSemaphore/restart"); ++ ++ // start child thread ++ running_ = true; ++ if ((child_ = CreateThread(NULL, 0, &SemaphoreThreadWrapper, this, 0, NULL)) ++ == NULL) ++ Win32Fatal("CreateThread"); ++ ++ } else { ++ // all further invocations - allow child thread to loop ++ ReleaseSemaphore(semaphore_restart_); ++ } ++ ++ // wait for child thread to enter wait ++ WaitForObject(semaphore_enter_wait_); ++ // semaphore is now in nonsignaled state again for next run... ++ ++ // now SubprocessSet::DoWork() can enter GetQueuedCompletionStatus()... ++} ++ ++bool GNUmakeTokenPoolWin32::TokenIsAvailable(ULONG_PTR key) { ++ // alert child thread to break wait on token semaphore ++ QueueUserAPC((PAPCFUNC)&NoopAPCFunc, child_, (ULONG_PTR)NULL); ++ ++ // return true when GetQueuedCompletionStatus() returned our key ++ return key == (ULONG_PTR) this; ++} ++ ++void GNUmakeTokenPoolWin32::ReleaseSemaphore(HANDLE semaphore) { ++ if (!::ReleaseSemaphore(semaphore, 1, NULL)) ++ Win32Fatal("ReleaseSemaphore"); ++} ++ ++void GNUmakeTokenPoolWin32::WaitForObject(HANDLE object) { ++ if (WaitForSingleObject(object, INFINITE) != WAIT_OBJECT_0) ++ Win32Fatal("WaitForSingleObject"); ++} ++ ++TokenPool* TokenPool::Get() { ++ return new GNUmakeTokenPoolWin32; ++} +--- /dev/null ++++ b/src/tokenpool-gnu-make.cc +@@ -0,0 +1,108 @@ ++// Copyright 2016-2018 Google Inc. All Rights Reserved. ++// ++// Licensed under the Apache License, Version 2.0 (the "License"); ++// you may not use this file except in compliance with the License. ++// You may obtain a copy of the License at ++// ++// http://www.apache.org/licenses/LICENSE-2.0 ++// ++// Unless required by applicable law or agreed to in writing, software ++// distributed under the License is distributed on an "AS IS" BASIS, ++// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++// See the License for the specific language governing permissions and ++// limitations under the License. ++ ++#include "tokenpool-gnu-make.h" ++ ++#include ++#include ++#include ++ ++#include "line_printer.h" ++ ++// TokenPool implementation for GNU make jobserver - common bits ++// every instance owns an implicit token -> available_ == 1 ++GNUmakeTokenPool::GNUmakeTokenPool() : available_(1), used_(0) { ++} ++ ++GNUmakeTokenPool::~GNUmakeTokenPool() { ++} ++ ++bool GNUmakeTokenPool::Setup(bool ignore, ++ bool verbose, ++ double& max_load_average) { ++ const char* value = GetEnv("MAKEFLAGS"); ++ if (!value) ++ return false; ++ ++ // GNU make <= 4.1 ++ const char* jobserver = strstr(value, "--jobserver-fds="); ++ if (!jobserver) ++ // GNU make => 4.2 ++ jobserver = strstr(value, "--jobserver-auth="); ++ if (jobserver) { ++ LinePrinter printer; ++ ++ if (ignore) { ++ printer.PrintOnNewLine("ninja: warning: -jN forced on command line; ignoring GNU make jobserver.\n"); ++ } else { ++ if (ParseAuth(jobserver)) { ++ const char* l_arg = strstr(value, " -l"); ++ int load_limit = -1; ++ ++ if (verbose) { ++ printer.PrintOnNewLine("ninja: using GNU make jobserver.\n"); ++ } ++ ++ // translate GNU make -lN to ninja -lN ++ if (l_arg && ++ (sscanf(l_arg + 3, "%d ", &load_limit) == 1) && ++ (load_limit > 0)) { ++ max_load_average = load_limit; ++ } ++ ++ return true; ++ } ++ } ++ } ++ ++ return false; ++} ++ ++bool GNUmakeTokenPool::Acquire() { ++ if (available_ > 0) ++ return true; ++ ++ if (AcquireToken()) { ++ // token acquired ++ available_++; ++ return true; ++ } ++ ++ // no token available ++ return false; ++} ++ ++void GNUmakeTokenPool::Reserve() { ++ available_--; ++ used_++; ++} ++ ++void GNUmakeTokenPool::Return() { ++ if (ReturnToken()) ++ available_--; ++} ++ ++void GNUmakeTokenPool::Release() { ++ available_++; ++ used_--; ++ if (available_ > 1) ++ Return(); ++} ++ ++void GNUmakeTokenPool::Clear() { ++ while (used_ > 0) ++ Release(); ++ while (available_ > 1) ++ Return(); ++} +--- /dev/null ++++ b/src/tokenpool-gnu-make.h +@@ -0,0 +1,40 @@ ++// Copyright 2016-2018 Google Inc. All Rights Reserved. ++// ++// Licensed under the Apache License, Version 2.0 (the "License"); ++// you may not use this file except in compliance with the License. ++// You may obtain a copy of the License at ++// ++// http://www.apache.org/licenses/LICENSE-2.0 ++// ++// Unless required by applicable law or agreed to in writing, software ++// distributed under the License is distributed on an "AS IS" BASIS, ++// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++// See the License for the specific language governing permissions and ++// limitations under the License. ++ ++#include "tokenpool.h" ++ ++// interface to GNU make token pool ++struct GNUmakeTokenPool : public TokenPool { ++ GNUmakeTokenPool(); ++ ~GNUmakeTokenPool(); ++ ++ // token pool implementation ++ virtual bool Acquire(); ++ virtual void Reserve(); ++ virtual void Release(); ++ virtual void Clear(); ++ virtual bool Setup(bool ignore, bool verbose, double& max_load_average); ++ ++ // platform specific implementation ++ virtual const char* GetEnv(const char* name) = 0; ++ virtual bool ParseAuth(const char* jobserver) = 0; ++ virtual bool AcquireToken() = 0; ++ virtual bool ReturnToken() = 0; ++ ++ private: ++ int available_; ++ int used_; ++ ++ void Return(); ++}; +--- /dev/null ++++ b/src/tokenpool.h +@@ -0,0 +1,42 @@ ++// Copyright 2016-2018 Google Inc. All Rights Reserved. ++// ++// Licensed under the Apache License, Version 2.0 (the "License"); ++// you may not use this file except in compliance with the License. ++// You may obtain a copy of the License at ++// ++// http://www.apache.org/licenses/LICENSE-2.0 ++// ++// Unless required by applicable law or agreed to in writing, software ++// distributed under the License is distributed on an "AS IS" BASIS, ++// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++// See the License for the specific language governing permissions and ++// limitations under the License. ++ ++#ifdef _WIN32 ++#include ++#endif ++ ++// interface to token pool ++struct TokenPool { ++ virtual ~TokenPool() {} ++ ++ virtual bool Acquire() = 0; ++ virtual void Reserve() = 0; ++ virtual void Release() = 0; ++ virtual void Clear() = 0; ++ ++ // returns false if token pool setup failed ++ virtual bool Setup(bool ignore, bool verbose, double& max_load_average) = 0; ++ ++#ifdef _WIN32 ++ virtual void WaitForTokenAvailability(HANDLE ioport) = 0; ++ // returns true if a token has become available ++ // key is result from GetQueuedCompletionStatus() ++ virtual bool TokenIsAvailable(ULONG_PTR key) = 0; ++#else ++ virtual int GetMonitorFd() = 0; ++#endif ++ ++ // returns NULL if token pool is not available ++ static TokenPool* Get(); ++}; +--- /dev/null ++++ b/src/tokenpool_test.cc +@@ -0,0 +1,269 @@ ++// Copyright 2018 Google Inc. All Rights Reserved. ++// ++// Licensed under the Apache License, Version 2.0 (the "License"); ++// you may not use this file except in compliance with the License. ++// You may obtain a copy of the License at ++// ++// http://www.apache.org/licenses/LICENSE-2.0 ++// ++// Unless required by applicable law or agreed to in writing, software ++// distributed under the License is distributed on an "AS IS" BASIS, ++// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++// See the License for the specific language governing permissions and ++// limitations under the License. ++ ++#include "tokenpool.h" ++ ++#include "test.h" ++ ++#ifdef _WIN32 ++#include ++#else ++#include ++#endif ++ ++#include ++#include ++ ++#ifdef _WIN32 ++// should contain all valid characters ++#define SEMAPHORE_NAME "abcdefghijklmnopqrstwxyz01234567890_" ++#define AUTH_FORMAT(tmpl) "foo " tmpl "=%s bar" ++#define ENVIRONMENT_CLEAR() SetEnvironmentVariable("MAKEFLAGS", NULL) ++#define ENVIRONMENT_INIT(v) SetEnvironmentVariable("MAKEFLAGS", v) ++#else ++#define AUTH_FORMAT(tmpl) "foo " tmpl "=%d,%d bar" ++#define ENVIRONMENT_CLEAR() unsetenv("MAKEFLAGS") ++#define ENVIRONMENT_INIT(v) setenv("MAKEFLAGS", v, true) ++#endif ++ ++namespace { ++ ++const double kLoadAverageDefault = -1.23456789; ++ ++struct TokenPoolTest : public testing::Test { ++ double load_avg_; ++ TokenPool* tokens_; ++ char buf_[1024]; ++#ifdef _WIN32 ++ const char* semaphore_name_; ++ HANDLE semaphore_; ++#else ++ int fds_[2]; ++#endif ++ ++ virtual void SetUp() { ++ load_avg_ = kLoadAverageDefault; ++ tokens_ = NULL; ++ ENVIRONMENT_CLEAR(); ++#ifdef _WIN32 ++ semaphore_name_ = SEMAPHORE_NAME; ++ if ((semaphore_ = CreateSemaphore(0, 0, 2, SEMAPHORE_NAME)) == NULL) ++#else ++ if (pipe(fds_) < 0) ++#endif ++ ASSERT_TRUE(false); ++ } ++ ++ void CreatePool(const char* format, bool ignore_jobserver = false) { ++ if (format) { ++ sprintf(buf_, format, ++#ifdef _WIN32 ++ semaphore_name_ ++#else ++ fds_[0], fds_[1] ++#endif ++ ); ++ ENVIRONMENT_INIT(buf_); ++ } ++ if ((tokens_ = TokenPool::Get()) != NULL) { ++ if (!tokens_->Setup(ignore_jobserver, false, load_avg_)) { ++ delete tokens_; ++ tokens_ = NULL; ++ } ++ } ++ } ++ ++ void CreateDefaultPool() { ++ CreatePool(AUTH_FORMAT("--jobserver-auth")); ++ } ++ ++ virtual void TearDown() { ++ if (tokens_) ++ delete tokens_; ++#ifdef _WIN32 ++ CloseHandle(semaphore_); ++#else ++ close(fds_[0]); ++ close(fds_[1]); ++#endif ++ ENVIRONMENT_CLEAR(); ++ } ++}; ++ ++} // anonymous namespace ++ ++// verifies none implementation ++TEST_F(TokenPoolTest, NoTokenPool) { ++ CreatePool(NULL, false); ++ ++ EXPECT_EQ(NULL, tokens_); ++ EXPECT_EQ(kLoadAverageDefault, load_avg_); ++} ++ ++TEST_F(TokenPoolTest, SuccessfulOldSetup) { ++ // GNUmake <= 4.1 ++ CreatePool(AUTH_FORMAT("--jobserver-fds")); ++ ++ EXPECT_NE(NULL, tokens_); ++ EXPECT_EQ(kLoadAverageDefault, load_avg_); ++} ++ ++TEST_F(TokenPoolTest, SuccessfulNewSetup) { ++ // GNUmake => 4.2 ++ CreateDefaultPool(); ++ ++ EXPECT_NE(NULL, tokens_); ++ EXPECT_EQ(kLoadAverageDefault, load_avg_); ++} ++ ++TEST_F(TokenPoolTest, IgnoreWithJN) { ++ CreatePool(AUTH_FORMAT("--jobserver-auth"), true); ++ ++ EXPECT_EQ(NULL, tokens_); ++ EXPECT_EQ(kLoadAverageDefault, load_avg_); ++} ++ ++TEST_F(TokenPoolTest, HonorLN) { ++ CreatePool(AUTH_FORMAT("-l9 --jobserver-auth")); ++ ++ EXPECT_NE(NULL, tokens_); ++ EXPECT_EQ(9.0, load_avg_); ++} ++ ++#ifdef _WIN32 ++TEST_F(TokenPoolTest, SemaphoreNotFound) { ++ semaphore_name_ = SEMAPHORE_NAME "_foobar"; ++ CreateDefaultPool(); ++ ++ EXPECT_EQ(NULL, tokens_); ++ EXPECT_EQ(kLoadAverageDefault, load_avg_); ++} ++ ++TEST_F(TokenPoolTest, TokenIsAvailable) { ++ CreateDefaultPool(); ++ ++ ASSERT_NE(NULL, tokens_); ++ EXPECT_EQ(kLoadAverageDefault, load_avg_); ++ ++ EXPECT_TRUE(tokens_->TokenIsAvailable((ULONG_PTR)tokens_)); ++} ++#else ++TEST_F(TokenPoolTest, MonitorFD) { ++ CreateDefaultPool(); ++ ++ ASSERT_NE(NULL, tokens_); ++ EXPECT_EQ(kLoadAverageDefault, load_avg_); ++ ++ EXPECT_EQ(fds_[0], tokens_->GetMonitorFd()); ++} ++#endif ++ ++TEST_F(TokenPoolTest, ImplicitToken) { ++ CreateDefaultPool(); ++ ++ ASSERT_NE(NULL, tokens_); ++ EXPECT_EQ(kLoadAverageDefault, load_avg_); ++ ++ EXPECT_TRUE(tokens_->Acquire()); ++ tokens_->Reserve(); ++ EXPECT_FALSE(tokens_->Acquire()); ++ tokens_->Release(); ++ EXPECT_TRUE(tokens_->Acquire()); ++} ++ ++TEST_F(TokenPoolTest, TwoTokens) { ++ CreateDefaultPool(); ++ ++ ASSERT_NE(NULL, tokens_); ++ EXPECT_EQ(kLoadAverageDefault, load_avg_); ++ ++ // implicit token ++ EXPECT_TRUE(tokens_->Acquire()); ++ tokens_->Reserve(); ++ EXPECT_FALSE(tokens_->Acquire()); ++ ++ // jobserver offers 2nd token ++#ifdef _WIN32 ++ LONG previous; ++ ASSERT_TRUE(ReleaseSemaphore(semaphore_, 1, &previous)); ++ ASSERT_EQ(0, previous); ++#else ++ ASSERT_EQ(1u, write(fds_[1], "T", 1)); ++#endif ++ EXPECT_TRUE(tokens_->Acquire()); ++ tokens_->Reserve(); ++ EXPECT_FALSE(tokens_->Acquire()); ++ ++ // release 2nd token ++ tokens_->Release(); ++ EXPECT_TRUE(tokens_->Acquire()); ++ ++ // release implict token - must return 2nd token back to jobserver ++ tokens_->Release(); ++ EXPECT_TRUE(tokens_->Acquire()); ++ ++ // there must be one token available ++#ifdef _WIN32 ++ EXPECT_EQ(WAIT_OBJECT_0, WaitForSingleObject(semaphore_, 0)); ++ EXPECT_TRUE(ReleaseSemaphore(semaphore_, 1, &previous)); ++ EXPECT_EQ(0, previous); ++#else ++ EXPECT_EQ(1u, read(fds_[0], buf_, sizeof(buf_))); ++#endif ++ ++ // implicit token ++ EXPECT_TRUE(tokens_->Acquire()); ++} ++ ++TEST_F(TokenPoolTest, Clear) { ++ CreateDefaultPool(); ++ ++ ASSERT_NE(NULL, tokens_); ++ EXPECT_EQ(kLoadAverageDefault, load_avg_); ++ ++ // implicit token ++ EXPECT_TRUE(tokens_->Acquire()); ++ tokens_->Reserve(); ++ EXPECT_FALSE(tokens_->Acquire()); ++ ++ // jobserver offers 2nd & 3rd token ++#ifdef _WIN32 ++ LONG previous; ++ ASSERT_TRUE(ReleaseSemaphore(semaphore_, 2, &previous)); ++ ASSERT_EQ(0, previous); ++#else ++ ASSERT_EQ(2u, write(fds_[1], "TT", 2)); ++#endif ++ EXPECT_TRUE(tokens_->Acquire()); ++ tokens_->Reserve(); ++ EXPECT_TRUE(tokens_->Acquire()); ++ tokens_->Reserve(); ++ EXPECT_FALSE(tokens_->Acquire()); ++ ++ tokens_->Clear(); ++ EXPECT_TRUE(tokens_->Acquire()); ++ ++ // there must be two tokens available ++#ifdef _WIN32 ++ EXPECT_EQ(WAIT_OBJECT_0, WaitForSingleObject(semaphore_, 0)); ++ EXPECT_EQ(WAIT_OBJECT_0, WaitForSingleObject(semaphore_, 0)); ++ EXPECT_TRUE(ReleaseSemaphore(semaphore_, 2, &previous)); ++ EXPECT_EQ(0, previous); ++#else ++ EXPECT_EQ(2u, read(fds_[0], buf_, sizeof(buf_))); ++#endif ++ ++ // implicit token ++ EXPECT_TRUE(tokens_->Acquire()); ++} From 248ab17941e8ff578782a740acdf17c8ce5f0b29 Mon Sep 17 00:00:00 2001 From: Isaev Ruslan Date: Tue, 6 Sep 2022 20:18:01 -0400 Subject: [PATCH 02/12] package/c-ares fix Signed-off-by: Isaev Ruslan --- qca/feeds/packages/libs/c-ares/Makefile | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/qca/feeds/packages/libs/c-ares/Makefile b/qca/feeds/packages/libs/c-ares/Makefile index 83c460a8dae..adc2d2307f6 100644 --- a/qca/feeds/packages/libs/c-ares/Makefile +++ b/qca/feeds/packages/libs/c-ares/Makefile @@ -21,10 +21,10 @@ PKG_HASH:=6cdb97871f2930530c97deb7cf5c8fa4be5a0b02c7cea6e7c7667672a39d6852 PKG_FIXUP:=autoreconf PKG_INSTALL:=1 -include $(INCLUDE_DIR)/package.mk +CMAKE_INSTALL:=1 -TARGET_CPPFLAGS += $(filter -D%,$(TARGET_CFLAGS)) -TARGET_CFLAGS := $(filter-out -D%,$(TARGET_CFLAGS)) +include $(INCLUDE_DIR)/package.mk +include $(INCLUDE_DIR)/cmake.mk define Package/libcares SECTION:=libs @@ -42,6 +42,13 @@ Netware, Android and many more operating systems. endef +CMAKE_OPTIONS += \ + -DCARES_STATIC=OFF \ + -DCARES_SHARED=ON \ + -DCARES_STATIC_PIC=ON \ + -DCARES_BUILD_TESTS=OFF \ + -DCARES_BUILD_TOOLS=OFF + define Package/libcares/install $(INSTALL_DIR) $(1)/usr/lib $(CP) $(PKG_INSTALL_DIR)/usr/lib/*.so.* $(1)/usr/lib/ @@ -53,3 +60,4 @@ define Build/InstallDev endef $(eval $(call BuildPackage,libcares)) + From 0c9f3b6ee3f3d604c804469ffaeb29a77691ba6f Mon Sep 17 00:00:00 2001 From: Isaev Ruslan Date: Tue, 6 Sep 2022 20:57:55 -0400 Subject: [PATCH 03/12] package/fstools fix Signed-off-by: Isaev Ruslan --- package/libs/libubox/Makefile | 20 +++--- .../patches/0002-mkdir_p-removed.patch | 67 +++++++++++++++++++ 2 files changed, 79 insertions(+), 8 deletions(-) create mode 100644 qsdk-package/package/system/fstools/patches/0002-mkdir_p-removed.patch diff --git a/package/libs/libubox/Makefile b/package/libs/libubox/Makefile index 7df16dedffd..9ad4c305959 100644 --- a/package/libs/libubox/Makefile +++ b/package/libs/libubox/Makefile @@ -5,9 +5,10 @@ PKG_RELEASE=1 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL=$(PROJECT_GIT)/project/libubox.git -PKG_MIRROR_HASH:=3d58def8e415ceda8aacfd8453813d8bf2a05991c0df0c074744639ab04321ba -PKG_SOURCE_DATE:=2020-05-25 -PKG_SOURCE_VERSION:=66195aee50424cbda0c2d858014e4cc58a2dc029 +PKG_MIRROR_HASH:=cf48d00ed0ea74d53f2043eb9f9dc52834c0b214f258201cf22dfff7dd6c6e40 +PKG_SOURCE_DATE:=2022-05-15 +PKG_SOURCE_VERSION:=d2223ef9da7172a84d1508733dc58840e1381e3c +PKG_ABI_VERSION:=$(call abi_version_str,$(PKG_SOURCE_DATE)) CMAKE_INSTALL:=1 PKG_LICENSE:=ISC @@ -27,7 +28,7 @@ define Package/libubox SECTION:=libs CATEGORY:=Libraries TITLE:=Basic utility library - ABI_VERSION:=20191228 + ABI_VERSION:=$(PKG_ABI_VERSION) DEPENDS:= endef @@ -35,6 +36,7 @@ define Package/libblobmsg-json SECTION:=libs CATEGORY:=Libraries TITLE:=blobmsg <-> json conversion library + ABI_VERSION:=$(PKG_ABI_VERSION) DEPENDS:=+libjson-c +libubox endef @@ -53,6 +55,7 @@ define Package/libjson-script SECTION:=utils CATEGORY:=Utilities DEPENDS:=+libubox + ABI_VERSION:=$(PKG_ABI_VERSION) TITLE:=Minimalistic JSON based scripting engine endef @@ -65,16 +68,17 @@ endef TARGET_CFLAGS += -I$(STAGING_DIR)/usr/include CMAKE_OPTIONS += \ - -DLUAPATH=/usr/lib/lua + -DLUAPATH=/usr/lib/lua \ + -DABIVERSION="$(PKG_ABI_VERSION)" define Package/libubox/install $(INSTALL_DIR) $(1)/lib/ - $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/lib/libubox.so $(1)/lib/ + $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/lib/libubox.so.* $(1)/lib/ endef define Package/libblobmsg-json/install $(INSTALL_DIR) $(1)/lib/ - $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/lib/libblobmsg_json.so $(1)/lib/ + $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/lib/libblobmsg_json.so.* $(1)/lib/ endef define Package/jshn/install @@ -85,7 +89,7 @@ endef define Package/libjson-script/install $(INSTALL_DIR) $(1)/lib/ - $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/lib/libjson_script.so $(1)/lib/ + $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/lib/libjson_script.so.* $(1)/lib/ endef define Package/libubox-lua/install diff --git a/qsdk-package/package/system/fstools/patches/0002-mkdir_p-removed.patch b/qsdk-package/package/system/fstools/patches/0002-mkdir_p-removed.patch new file mode 100644 index 00000000000..cb7678b2470 --- /dev/null +++ b/qsdk-package/package/system/fstools/patches/0002-mkdir_p-removed.patch @@ -0,0 +1,67 @@ +diff '--color=auto' -aur a/block.c b/block.c +--- a/block.c 2020-05-11 19:41:59.000000000 -0400 ++++ b/block.c 2022-09-06 20:55:10.657693763 -0400 +@@ -697,18 +697,6 @@ + return 0; + } + +-static void mkdir_p(char *dir) +-{ +- char *l = strrchr(dir, '/'); +- +- if (l) { +- *l = '\0'; +- mkdir_p(dir); +- *l = '/'; +- mkdir(dir, 0755); +- } +-} +- + static void check_filesystem(struct probe_info *pr) + { + pid_t pid; +@@ -1085,7 +1073,7 @@ + if (check_fs) + check_filesystem(pr); + +- mkdir_p(target); ++ mkdir_p(target, 0755); + if (!lstat(target, &st) && S_ISLNK(st.st_mode)) + unlink(target); + +@@ -1396,7 +1384,7 @@ + + snprintf(tag, sizeof(tag), "%s/etc", path); + if (stat(tag, &s)) +- mkdir_p(tag); ++ mkdir_p(tag, 0755); + + snprintf(tag, sizeof(tag), "%s/etc/.extroot-uuid", path); + if (stat(tag, &s)) { +@@ -1486,7 +1474,7 @@ + + if (m->overlay) + path = overlay; +- mkdir_p(path); ++ mkdir_p(path, 0755); + + if (check_fs) + check_filesystem(pr); +@@ -1556,7 +1544,7 @@ + * Mount MTD part and try extroot (using + * /etc/config/fstab from that partition) + */ +- mkdir_p(cfg); ++ mkdir_p(cfg, 0755); + if (!mount(blkdev_path, cfg, "jffs2", MS_NOATIME, NULL)) { + err = mount_extroot(cfg); + umount2(cfg, MNT_DETACH); +@@ -1578,7 +1566,7 @@ + char cfg[] = "/tmp/ubifs_cfg"; + + /* Mount volume and try extroot (using fstab from that vol) */ +- mkdir_p(cfg); ++ mkdir_p(cfg, 0755); + if (!mount(blkdev_path, cfg, "ubifs", MS_NOATIME, NULL)) { + err = mount_extroot(cfg); + umount2(cfg, MNT_DETACH); From c134d8e79f2ae5d5ed19fbe54957820b1a7883d9 Mon Sep 17 00:00:00 2001 From: Isaev Ruslan Date: Tue, 6 Sep 2022 22:10:54 -0400 Subject: [PATCH 04/12] package/rpcd fix; package/lucihttp fix Signed-off-by: Isaev Ruslan --- .../0010-uloop_timeout_remaining-replace.patch | 12 ++++++++++++ qca/feeds/luci/contrib/package/lucihttp/Makefile | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 package/system/rpcd/patches/0010-uloop_timeout_remaining-replace.patch diff --git a/package/system/rpcd/patches/0010-uloop_timeout_remaining-replace.patch b/package/system/rpcd/patches/0010-uloop_timeout_remaining-replace.patch new file mode 100644 index 00000000000..952607782d7 --- /dev/null +++ b/package/system/rpcd/patches/0010-uloop_timeout_remaining-replace.patch @@ -0,0 +1,12 @@ +diff '--color=auto' -aur a/session.c b/session.c +--- a/session.c 2020-05-26 11:24:24.000000000 -0400 ++++ b/session.c 2022-09-06 22:07:42.397504073 -0400 +@@ -226,7 +226,7 @@ + + blobmsg_add_string(&buf, "ubus_rpc_session", ses->id); + blobmsg_add_u32(&buf, "timeout", ses->timeout); +- blobmsg_add_u32(&buf, "expires", uloop_timeout_remaining(&ses->t) / 1000); ++ blobmsg_add_u32(&buf, "expires", uloop_timeout_remaining64(&ses->t) / 1000); + + if (acls) { + c = blobmsg_open_table(&buf, "acls"); diff --git a/qca/feeds/luci/contrib/package/lucihttp/Makefile b/qca/feeds/luci/contrib/package/lucihttp/Makefile index da344c988d4..0b6cb2c5f40 100644 --- a/qca/feeds/luci/contrib/package/lucihttp/Makefile +++ b/qca/feeds/luci/contrib/package/lucihttp/Makefile @@ -36,7 +36,7 @@ endef TARGET_CFLAGS += -I$(STAGING_DIR)/usr/include -CMAKE_OPTIONS = \ +CMAKE_OPTIONS += \ -DLUAPATH=/usr/lib/lua \ -DBUILD_LUA=$(if $(CONFIG_PACKAGE_liblucihttp-lua),ON,OFF) \ -DBUILD_TESTS=OFF From 4ca67406ee9ad38dd031086f7be93375b1aa63d4 Mon Sep 17 00:00:00 2001 From: Isaev Ruslan Date: Tue, 6 Sep 2022 22:23:47 -0400 Subject: [PATCH 05/12] package/uhttpd fix Signed-off-by: Isaev Ruslan --- package/network/services/uhttpd/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package/network/services/uhttpd/Makefile b/package/network/services/uhttpd/Makefile index 987f901dd41..3d90b45fb3e 100644 --- a/package/network/services/uhttpd/Makefile +++ b/package/network/services/uhttpd/Makefile @@ -84,7 +84,7 @@ endif TARGET_LDFLAGS += -lcrypt -CMAKE_OPTIONS = -DTLS_SUPPORT=on +CMAKE_OPTIONS += -DTLS_SUPPORT=on define Package/uhttpd/install $(INSTALL_DIR) $(1)/etc/init.d From 55d27141b56fd8d0373f7888701ed0de96fc58ad Mon Sep 17 00:00:00 2001 From: Isaev Ruslan Date: Wed, 7 Sep 2022 05:05:21 -0400 Subject: [PATCH 06/12] more updates Signed-off-by: Isaev Ruslan --- include/download.mk | 2 +- include/openssl-engine.mk | 50 ++ package/libs/openssl/Config.in | 13 +- package/libs/openssl/Makefile | 66 +- package/libs/openssl/files/afalg.cnf | 3 + package/libs/openssl/files/devcrypto.cnf | 31 + package/libs/openssl/files/openssl.init | 31 + package/libs/openssl/files/padlock.cnf | 3 + ...m-ppc-xlate.pl-add-linux64v2-flavour.patch | 56 ++ .../patches/100-Configure-afalg-support.patch | 3 +- .../openssl/patches/110-openwrt_targets.patch | 9 +- .../120-strip-cflags-from-binary.patch | 5 +- .../patches/130-dont-build-tests-fuzz.patch | 3 +- .../patches/140-allow-prefer-chacha20.patch | 4 +- .../150-openssl.cnf-add-engines-conf.patch | 83 +- ...o-save-ioctl-if-EVP_MD_.FLAG_ONESHOT.patch | 3 +- ...ypto-add-command-to-dump-driver-info.patch | 3 +- ...o-make-the-dev-crypto-engine-dynamic.patch | 12 +- ...default-to-not-use-digests-in-engine.patch | 1 - ...to-ignore-error-when-closing-session.patch | 1 - scripts/download.pl | 4 + tools/libressl/Makefile | 18 +- .../patches/001-dont-build-tests-man.patch | 11 - tools/libressl/patches/010-avoid-glibc.patch | 23 - tools/mkimage/Makefile | 29 +- .../patches/010-freebsd-ulong-fix.patch | 13 - .../patches/020-include_compile_fix.patch | 10 - ...split-gfh-header-verification-into-a.patch | 89 ++ ...split-the-code-of-generating-NAND-he.patch | 821 ++++++++++++++++++ ...add-support-for-nand-headers-used-by.patch | 702 +++++++++++++++ .../030-allow-to-use-different-magic.patch | 33 +- ...d-compatibility-with-non-Linux-hosts.patch | 65 ++ .../patches/050-image_h_portability.patch | 31 - ...50-increase-path-and-filename-length.patch | 15 - .../patches/051-increase-dtb-file-size.patch | 13 - .../patches/060-remove_kernel_includes.patch | 34 - .../patches/080-remove_compiler_check.patch | 16 - ...5-tools-disable-TOOLS_FIT_FULL_CHECK.patch | 25 + .../mkimage/patches/100-freebsd-compat.patch | 14 - ...0-increase-tmpfile-name-length-limit.patch | 11 + ...00-rsa-sign-add-support-for-libressl.patch | 68 -- .../patches/210-link-libcrypto-static.patch | 14 - tools/mklibs/Makefile | 8 +- .../patches/002-disable_symbol_checks.patch | 8 +- tools/mklibs/patches/003-no_copy.patch | 14 +- .../mklibs/patches/004-libpthread_link.patch | 2 +- tools/mklibs/patches/005-duplicate_syms.patch | 8 +- tools/mklibs/patches/006-uclibc_init.patch | 14 - tools/mklibs/patches/007-gc_sections.patch | 2 +- .../patches/008-uclibc_libgcc_link.patch | 4 +- .../009-uclibc_libpthread_symbols.patch | 63 -- .../mklibs/patches/011-remove_multiarch.patch | 2 +- tools/mklibs/patches/100-apply-2to3.patch | 154 ++++ 53 files changed, 2180 insertions(+), 540 deletions(-) create mode 100644 include/openssl-engine.mk create mode 100644 package/libs/openssl/files/afalg.cnf create mode 100644 package/libs/openssl/files/devcrypto.cnf create mode 100755 package/libs/openssl/files/openssl.init create mode 100644 package/libs/openssl/files/padlock.cnf create mode 100644 package/libs/openssl/patches/001-crypto-perlasm-ppc-xlate.pl-add-linux64v2-flavour.patch delete mode 100644 tools/libressl/patches/001-dont-build-tests-man.patch delete mode 100644 tools/libressl/patches/010-avoid-glibc.patch delete mode 100644 tools/mkimage/patches/010-freebsd-ulong-fix.patch delete mode 100644 tools/mkimage/patches/020-include_compile_fix.patch create mode 100644 tools/mkimage/patches/020-tools-mtk_image-split-gfh-header-verification-into-a.patch create mode 100644 tools/mkimage/patches/021-tools-mtk_image-split-the-code-of-generating-NAND-he.patch create mode 100644 tools/mkimage/patches/022-tools-mtk_image-add-support-for-nand-headers-used-by.patch create mode 100644 tools/mkimage/patches/050-Add-compatibility-with-non-Linux-hosts.patch delete mode 100644 tools/mkimage/patches/050-image_h_portability.patch delete mode 100644 tools/mkimage/patches/050-increase-path-and-filename-length.patch delete mode 100644 tools/mkimage/patches/051-increase-dtb-file-size.patch delete mode 100644 tools/mkimage/patches/060-remove_kernel_includes.patch delete mode 100644 tools/mkimage/patches/080-remove_compiler_check.patch create mode 100644 tools/mkimage/patches/095-tools-disable-TOOLS_FIT_FULL_CHECK.patch delete mode 100644 tools/mkimage/patches/100-freebsd-compat.patch create mode 100644 tools/mkimage/patches/100-increase-tmpfile-name-length-limit.patch delete mode 100644 tools/mkimage/patches/200-rsa-sign-add-support-for-libressl.patch delete mode 100644 tools/mkimage/patches/210-link-libcrypto-static.patch delete mode 100644 tools/mklibs/patches/006-uclibc_init.patch delete mode 100644 tools/mklibs/patches/009-uclibc_libpthread_symbols.patch create mode 100644 tools/mklibs/patches/100-apply-2to3.patch diff --git a/include/download.mk b/include/download.mk index 3ee4684d4c3..b8aff9142a2 100644 --- a/include/download.mk +++ b/include/download.mk @@ -32,7 +32,7 @@ define dl_method $(strip \ $(if $(filter git,$(2)),$(call dl_method_git,$(1),$(2)), $(if $(2),$(2), \ - $(if $(filter @APACHE/% @GITHUB/% @GNOME/% @GNU/% @KERNEL/% @SF/% @SAVANNAH/% ftp://% http://% https://% file://%,$(1)),default, \ + $(if $(filter @APACHE/% @DEBIAN/% @GITHUB/% @GNOME/% @GNU/% @KERNEL/% @SF/% @SAVANNAH/% ftp://% http://% https://% file://%,$(1)),default, \ $(if $(filter git://%,$(1)),$(call dl_method_git,$(1),$(2)), \ $(if $(filter svn://%,$(1)),svn, \ $(if $(filter cvs://%,$(1)),cvs, \ diff --git a/include/openssl-engine.mk b/include/openssl-engine.mk new file mode 100644 index 00000000000..d8baba482e3 --- /dev/null +++ b/include/openssl-engine.mk @@ -0,0 +1,50 @@ +# SPDX-License-Identifier: GPL-2.0-only +# +# Copyright (C) 2022 Enéas Ulir de Queiroz + +ENGINES_DIR=engines-1.1 + +define Package/openssl/engine/Default + SECTION:=libs + CATEGORY:=Libraries + SUBMENU:=SSL + DEPENDS:=libopenssl @OPENSSL_ENGINE +libopenssl-conf +endef + +# 1 = engine name +# 2 - package name, defaults to libopenssl-$(1) +define Package/openssl/add-engine + OSSL_ENG_PKG:=$(if $(2),$(2),libopenssl-$(1)) + Package/$$(OSSL_ENG_PKG)/conffiles:=/etc/ssl/engines.cnf.d/$(1).cnf + + define Package/$$(OSSL_ENG_PKG)/install + $$(INSTALL_DIR) $$(1)/usr/lib/$(ENGINES_DIR) + $$(INSTALL_BIN) $$(PKG_INSTALL_DIR)/usr/lib/$(ENGINES_DIR)/$(1).so \ + $$(1)/usr/lib/$(ENGINES_DIR) + $$(INSTALL_DIR) $$(1)/etc/ssl/engines.cnf.d + $$(INSTALL_DATA) ./files/$(1).cnf $$(1)/etc/ssl/engines.cnf.d/ + endef + + define Package/$$(OSSL_ENG_PKG)/postinst := +#!/bin/sh +OPENSSL_UCI="$$$${IPKG_INSTROOT}/etc/config/openssl" + +[ -z "$$$${IPKG_INSTROOT}" ] && uci -q get openssl.$(1) >/dev/null && exit 0 + +cat << EOF >> "$$$${OPENSSL_UCI}" + +config engine '$(1)' + option enabled '1' +EOF + +[ -n "$$$${IPKG_INSTROOT}" ] || /etc/init.d/openssl reload + endef + + define Package/$$(OSSL_ENG_PKG)/postrm := +#!/bin/sh +[ -n "$$$${IPKG_INSTROOT}" ] && exit 0 +uci delete openssl.$(1) +uci commit openssl +/etc/init.d/openssl reload + endef +endef diff --git a/package/libs/openssl/Config.in b/package/libs/openssl/Config.in index 746094f45c1..bc2f0584b63 100644 --- a/package/libs/openssl/Config.in +++ b/package/libs/openssl/Config.in @@ -16,7 +16,7 @@ config OPENSSL_OPTIMIZE_SPEED config OPENSSL_WITH_ASM bool - default y if !SMALL_FLASH && !LOWMEM_FLASH || !arm + default y if !SMALL_FLASH || !arm prompt "Compile with optimized assembly code" depends on !arc help @@ -293,15 +293,4 @@ config OPENSSL_WITH_ASYNC initiate crypto operations asynchronously. In order to work this will require the presence of an async capable engine. -config OPENSSL_WITH_GOST - bool - prompt "Prepare library for GOST engine" - depends on OPENSSL_ENGINE - help - This option prepares the library to accept engine support - for Russian GOST crypto algorithms. - The gost engine is not included in standard openwrt feeds. - To build such engine yourself, see: - https://github.com/gost-engine/engine - endif diff --git a/package/libs/openssl/Makefile b/package/libs/openssl/Makefile index 52a5aeec938..bf2d6ae64d2 100644 --- a/package/libs/openssl/Makefile +++ b/package/libs/openssl/Makefile @@ -9,11 +9,10 @@ include $(TOPDIR)/rules.mk PKG_NAME:=openssl PKG_BASE:=1.1.1 -PKG_BUGFIX:=n +PKG_BUGFIX:=q PKG_VERSION:=$(PKG_BASE)$(PKG_BUGFIX) -PKG_RELEASE:=1 +PKG_RELEASE:=$(AUTORELEASE) PKG_USE_MIPS16:=0 -ENGINES_DIR=engines-1.1 PKG_BUILD_PARALLEL:=1 @@ -26,7 +25,7 @@ PKG_SOURCE_URL:= \ ftp://ftp.pca.dfn.de/pub/tools/net/openssl/source/ \ ftp://ftp.pca.dfn.de/pub/tools/net/openssl/source/old/$(PKG_BASE)/ -PKG_HASH:=40dceb51a4f6a5275bde0e6bf20ef4b91bfc32ed57c0552e2e8e15463372b17a +PKG_HASH:=d7939ce614029cdff0b6c20f0e2e5703158a489a72b2507b8bd51bf8c8fd10ca PKG_LICENSE:=OpenSSL PKG_LICENSE_FILES:=LICENSE @@ -52,7 +51,6 @@ PKG_CONFIG_DEPENDS:= \ CONFIG_OPENSSL_WITH_DTLS \ CONFIG_OPENSSL_WITH_EC2M \ CONFIG_OPENSSL_WITH_ERROR_MESSAGES \ - CONFIG_OPENSSL_WITH_GOST \ CONFIG_OPENSSL_WITH_IDEA \ CONFIG_OPENSSL_WITH_MDC2 \ CONFIG_OPENSSL_WITH_NPN \ @@ -66,6 +64,7 @@ PKG_CONFIG_DEPENDS:= \ CONFIG_OPENSSL_WITH_WHIRLPOOL include $(INCLUDE_DIR)/package.mk +include $(INCLUDE_DIR)/openssl-engine.mk ifneq ($(CONFIG_CCACHE),) HOSTCC=$(HOSTCC_NOCACHE) @@ -129,6 +128,8 @@ endef define Package/libopenssl-conf/conffiles /etc/ssl/openssl.cnf +$(if CONFIG_OPENSSL_ENGINE_BUILTIN_DEVCRYPTO,/etc/ssl/engines.cnf.d/devcrypto.cnf) +$(if CONFIG_OPENSSL_ENGINE_BUILTIN_PADLOCK,/etc/ssl/engines.cnf.d/padlock.cnf) endef define Package/libopenssl-conf/description @@ -136,51 +137,50 @@ $(call Package/openssl/Default/description) This package installs the OpenSSL configuration file /etc/ssl/openssl.cnf. endef +$(eval $(call Package/openssl/add-engine,afalg)) define Package/libopenssl-afalg $(call Package/openssl/Default) - SUBMENU:=SSL + $(call Package/openssl/engine/Default) TITLE:=AFALG hardware acceleration engine - DEPENDS:=libopenssl @OPENSSL_ENGINE @KERNEL_AIO \ - +PACKAGE_libopenssl-afalg:kmod-crypto-user +libopenssl-conf @!OPENSSL_ENGINE_BUILTIN + DEPENDS += @KERNEL_AIO +PACKAGE_libopenssl-afalg:kmod-crypto-user \ + @!OPENSSL_ENGINE_BUILTIN endef define Package/libopenssl-afalg/description This package adds an engine that enables hardware acceleration through the AF_ALG kernel interface. -To use it, you need to configure the engine in /etc/ssl/openssl.cnf See https://www.openssl.org/docs/man1.1.1/man5/config.html#Engine-Configuration-Module and https://openwrt.org/docs/techref/hardware/cryptographic.hardware.accelerators The engine_id is "afalg" endef +$(eval $(call Package/openssl/add-engine,devcrypto)) define Package/libopenssl-devcrypto $(call Package/openssl/Default) - SUBMENU:=SSL + $(call Package/openssl/engine/Default) TITLE:=/dev/crypto hardware acceleration engine - DEPENDS:=libopenssl @OPENSSL_ENGINE +PACKAGE_libopenssl-devcrypto:kmod-cryptodev +libopenssl-conf \ - @!OPENSSL_ENGINE_BUILTIN + DEPENDS += +PACKAGE_libopenssl-devcrypto:kmod-cryptodev @!OPENSSL_ENGINE_BUILTIN endef define Package/libopenssl-devcrypto/description This package adds an engine that enables hardware acceleration through the /dev/crypto kernel interface. -To use it, you need to configure the engine in /etc/ssl/openssl.cnf See https://www.openssl.org/docs/man1.1.1/man5/config.html#Engine-Configuration-Module and https://openwrt.org/docs/techref/hardware/cryptographic.hardware.accelerators The engine_id is "devcrypto" endef +$(eval $(call Package/openssl/add-engine,padlock)) define Package/libopenssl-padlock $(call Package/openssl/Default) - SUBMENU:=SSL + $(call Package/openssl/engine/Default) TITLE:=VIA Padlock hardware acceleration engine - DEPENDS:=libopenssl @OPENSSL_ENGINE @TARGET_x86 +PACKAGE_libopenssl-padlock:kmod-crypto-hw-padlock \ - +libopenssl-conf @!OPENSSL_ENGINE_BUILTIN + DEPENDS += @TARGET_x86 +PACKAGE_libopenssl-padlock:kmod-crypto-hw-padlock \ + @!OPENSSL_ENGINE_BUILTIN endef define Package/libopenssl-padlock/description This package adds an engine that enables VIA Padlock hardware acceleration. -To use it, you need to configure it in /etc/ssl/openssl.cnf. See https://www.openssl.org/docs/man1.1.1/man5/config.html#Engine-Configuration-Module and https://openwrt.org/docs/techref/hardware/cryptographic.hardware.accelerators The engine_id is "padlock" @@ -289,10 +289,6 @@ else OPENSSL_OPTIONS += no-engine endif -ifndef CONFIG_OPENSSL_WITH_GOST - OPENSSL_OPTIONS += no-gost -endif - ifndef CONFIG_OPENSSL_WITH_DTLS OPENSSL_OPTIONS += no-dtls endif @@ -327,7 +323,7 @@ endif OPENSSL_TARGET:=linux-$(call qstrip,$(CONFIG_ARCH))-openwrt -STAMP_CONFIGURED := $(STAMP_CONFIGURED)_$(shell echo $(OPENSSL_OPTIONS) | mkhash md5) +STAMP_CONFIGURED := $(STAMP_CONFIGURED)_$(shell echo $(OPENSSL_OPTIONS) | $(MKHASH) md5) define Build/Configure (cd $(PKG_BUILD_DIR); \ @@ -381,8 +377,17 @@ define Package/libopenssl/install endef define Package/libopenssl-conf/install - $(INSTALL_DIR) $(1)/etc/ssl + $(INSTALL_DIR) $(1)/etc/ssl/engines.cnf.d $(1)/etc/config $(1)/etc/init.d $(CP) $(PKG_INSTALL_DIR)/etc/ssl/openssl.cnf $(1)/etc/ssl/ + $(INSTALL_BIN) ./files/openssl.init $(1)/etc/init.d/openssl + $(SED) 's!%ENGINES_DIR%!/usr/lib/$(ENGINES_DIR)!' $(1)/etc/init.d/openssl + touch $(1)/etc/config/openssl + $(if $(CONFIG_OPENSSL_ENGINE_BUILTIN_DEVCRYPTO), + $(CP) ./files/devcrypto.cnf $(1)/etc/ssl/engines.cnf.d/ + echo -e "config engine 'devcrypto'\n\toption enabled '1'" >> $(1)/etc/config/openssl) + $(if $(CONFIG_OPENSSL_ENGINE_BUILTIN_PADLOCK), + $(CP) ./files/padlock.cnf $(1)/etc/ssl/engines.cnf.d/ + echo -e "\nconfig engine 'padlock'\n\toption enabled '1'" >> $(1)/etc/config/openssl) endef define Package/openssl-util/install @@ -390,21 +395,6 @@ define Package/openssl-util/install $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/openssl $(1)/usr/bin/ endef -define Package/libopenssl-afalg/install - $(INSTALL_DIR) $(1)/usr/lib/$(ENGINES_DIR) - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/$(ENGINES_DIR)/afalg.so $(1)/usr/lib/$(ENGINES_DIR) -endef - -define Package/libopenssl-devcrypto/install - $(INSTALL_DIR) $(1)/usr/lib/$(ENGINES_DIR) - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/$(ENGINES_DIR)/devcrypto.so $(1)/usr/lib/$(ENGINES_DIR) -endef - -define Package/libopenssl-padlock/install - $(INSTALL_DIR) $(1)/usr/lib/$(ENGINES_DIR) - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/$(ENGINES_DIR)/*padlock.so $(1)/usr/lib/$(ENGINES_DIR) -endef - $(eval $(call BuildPackage,libopenssl)) $(eval $(call BuildPackage,libopenssl-conf)) $(eval $(call BuildPackage,libopenssl-afalg)) diff --git a/package/libs/openssl/files/afalg.cnf b/package/libs/openssl/files/afalg.cnf new file mode 100644 index 00000000000..4f573d757c8 --- /dev/null +++ b/package/libs/openssl/files/afalg.cnf @@ -0,0 +1,3 @@ +[afalg] +default_algorithms = ALL + diff --git a/package/libs/openssl/files/devcrypto.cnf b/package/libs/openssl/files/devcrypto.cnf new file mode 100644 index 00000000000..549275600d1 --- /dev/null +++ b/package/libs/openssl/files/devcrypto.cnf @@ -0,0 +1,31 @@ +[devcrypto] +# Leave this alone and configure algorithms with CIPERS/DIGESTS below +default_algorithms = ALL + +# Configuration commands: +# Run 'openssl engine -t -c -vv -pre DUMP_INFO devcrypto' to see a +# list of supported algorithms, along with their driver, whether they +# are hw accelerated or not, and the engine's configuration commands. + +# USE_SOFTDRIVERS: specifies whether to use software (not accelerated) +# drivers (0=use only accelerated drivers, 1=allow all drivers, 2=use +# if acceleration can't be determined) [default=2] +#USE_SOFTDRIVERS = 2 + +# CIPHERS: either ALL, NONE, or a comma-separated list of ciphers to +# enable [default=ALL] +# It is recommended to disable the ECB ciphers; in most cases, it will +# only be used for PRNG, in small blocks, where performance is poor, +# and there may be problems with apps forking with open crypto +# contexts, leading to failures. The CBC ciphers work well: +#CIPHERS=DES-CBC, DES-EDE3-CBC, AES-128-CBC, AES-192-CBC, AES-256-CBC + +# DIGESTS: either ALL, NONE, or a comma-separated list of digests to +# enable [default=NONE] +# It is strongly recommended not to enable digests; their performance +# is poor, and there are many cases in which they will not work, +# especially when calling fork with open crypto contexts. Openssh, +# for example, does this, and you may not be able to login. +#DIGESTS = NONE + + diff --git a/package/libs/openssl/files/openssl.init b/package/libs/openssl/files/openssl.init new file mode 100755 index 00000000000..21e253e7a56 --- /dev/null +++ b/package/libs/openssl/files/openssl.init @@ -0,0 +1,31 @@ +#!/bin/sh /etc/rc.common + +START=13 +ENGINES_CNF_D="/etc/ssl/engines.cnf.d" +ENGINES_CNF="/var/etc/ssl/engines.cnf" +ENGINES_DIR="%ENGINES_DIR%" + +config_engine() { + local enabled force + config_get_bool enabled "$1" enabled 1 + config_get_bool force "$1" force 0 + [ "$enabled" = 0 ] && return + if [ "$force" = 0 ] && \ + [ ! -f "${ENGINES_CNF_D}/$1.cnf" ] && \ + [ ! -f "${ENGINES_DIR}/$1.so" ]; then + echo Skipping engine "$1": not installed + return + fi + echo Enabling engine "$1" + echo "$1=$1" >> "${ENGINES_CNF}" +} + +start() { + mkdir -p "$(dirname "${ENGINES_CNF}")" || exit 1 + echo Generating engines.cnf + echo "# This file is automatically generated from /etc/config/openssl." \ + > "${ENGINES_CNF}" || \ + { echo Error writing ${ENGINES_CNF} >&2; exit 1; } + config_load openssl + config_foreach config_engine engine +} diff --git a/package/libs/openssl/files/padlock.cnf b/package/libs/openssl/files/padlock.cnf new file mode 100644 index 00000000000..ef91079e5d1 --- /dev/null +++ b/package/libs/openssl/files/padlock.cnf @@ -0,0 +1,3 @@ +[padlock] +default_algorithms = ALL + diff --git a/package/libs/openssl/patches/001-crypto-perlasm-ppc-xlate.pl-add-linux64v2-flavour.patch b/package/libs/openssl/patches/001-crypto-perlasm-ppc-xlate.pl-add-linux64v2-flavour.patch new file mode 100644 index 00000000000..e52a3d52ea3 --- /dev/null +++ b/package/libs/openssl/patches/001-crypto-perlasm-ppc-xlate.pl-add-linux64v2-flavour.patch @@ -0,0 +1,56 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Andy Polyakov +Date: Sun, 5 May 2019 18:25:50 +0200 +Subject: crypto/perlasm/ppc-xlate.pl: add linux64v2 flavour +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This is a big endian ELFv2 configuration. ELFv2 was already being +used for little endian, and big endian was traditionally ELFv1 +but there are practical configurations that use ELFv2 with big +endian nowadays (Adélie Linux, Void Linux, possibly Gentoo, etc.) + +Reviewed-by: Paul Dale +Reviewed-by: Richard Levitte +(Merged from https://github.com/openssl/openssl/pull/8883) + +diff --git a/crypto/perlasm/ppc-xlate.pl b/crypto/perlasm/ppc-xlate.pl +--- a/crypto/perlasm/ppc-xlate.pl ++++ b/crypto/perlasm/ppc-xlate.pl +@@ -49,7 +49,7 @@ my $globl = sub { + /osx/ && do { $name = "_$name"; + last; + }; +- /linux.*(32|64le)/ ++ /linux.*(32|64(le|v2))/ + && do { $ret .= ".globl $name"; + if (!$$type) { + $ret .= "\n.type $name,\@function"; +@@ -80,7 +80,7 @@ my $globl = sub { + }; + my $text = sub { + my $ret = ($flavour =~ /aix/) ? ".csect\t.text[PR],7" : ".text"; +- $ret = ".abiversion 2\n".$ret if ($flavour =~ /linux.*64le/); ++ $ret = ".abiversion 2\n".$ret if ($flavour =~ /linux.*64(le|v2)/); + $ret; + }; + my $machine = sub { +@@ -186,7 +186,7 @@ my $vmr = sub { + + # Some ABIs specify vrsave, special-purpose register #256, as reserved + # for system use. +-my $no_vrsave = ($flavour =~ /aix|linux64le/); ++my $no_vrsave = ($flavour =~ /aix|linux64(le|v2)/); + my $mtspr = sub { + my ($f,$idx,$ra) = @_; + if ($idx == 256 && $no_vrsave) { +@@ -318,7 +318,7 @@ while($line=<>) { + if ($label) { + my $xlated = ($GLOBALS{$label} or $label); + print "$xlated:"; +- if ($flavour =~ /linux.*64le/) { ++ if ($flavour =~ /linux.*64(le|v2)/) { + if ($TYPES{$label} =~ /function/) { + printf "\n.localentry %s,0\n",$xlated; + } diff --git a/package/libs/openssl/patches/100-Configure-afalg-support.patch b/package/libs/openssl/patches/100-Configure-afalg-support.patch index d8789f4b451..3125e37a948 100644 --- a/package/libs/openssl/patches/100-Configure-afalg-support.patch +++ b/package/libs/openssl/patches/100-Configure-afalg-support.patch @@ -1,4 +1,4 @@ -From 559fbff13af9ce2fbc0b9bc5727a7323e1db6217 Mon Sep 17 00:00:00 2001 +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Eneas U de Queiroz Date: Thu, 27 Sep 2018 08:29:21 -0300 Subject: Do not use host kernel version to disable AFALG @@ -9,7 +9,6 @@ version to disable building the AFALG engine on openwrt targets. Signed-off-by: Eneas U de Queiroz diff --git a/Configure b/Configure -index 5a699836f3..74d057c219 100755 --- a/Configure +++ b/Configure @@ -1548,7 +1548,9 @@ unless ($disabled{"crypto-mdebug-backtrace"}) diff --git a/package/libs/openssl/patches/110-openwrt_targets.patch b/package/libs/openssl/patches/110-openwrt_targets.patch index d0530b4661f..9d5db6cfd13 100644 --- a/package/libs/openssl/patches/110-openwrt_targets.patch +++ b/package/libs/openssl/patches/110-openwrt_targets.patch @@ -1,4 +1,4 @@ -From 3d43acc6068f00dbfc0c9a06355e2c8f7d302d0f Mon Sep 17 00:00:00 2001 +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Eneas U de Queiroz Date: Thu, 27 Sep 2018 08:30:24 -0300 Subject: Add openwrt targets @@ -9,10 +9,9 @@ Signed-off-by: Eneas U de Queiroz diff --git a/Configurations/25-openwrt.conf b/Configurations/25-openwrt.conf new file mode 100644 -index 0000000000..86a86d31e4 --- /dev/null +++ b/Configurations/25-openwrt.conf -@@ -0,0 +1,48 @@ +@@ -0,0 +1,52 @@ +## Openwrt "CONFIG_ARCH" matching targets. + +# The targets need to end in '-openwrt' for the AFALG patch to work @@ -52,6 +51,10 @@ index 0000000000..86a86d31e4 + "linux-powerpc-openwrt" => { + inherit_from => [ "linux-ppc", "openwrt" ], + }, ++ "linux-powerpc64-openwrt" => { ++ inherit_from => [ "linux-ppc64", "openwrt" ], ++ perlasm_scheme => "linux64v2", ++ }, + "linux-x86_64-openwrt" => { + inherit_from => [ "linux-x86_64", "openwrt" ], + }, diff --git a/package/libs/openssl/patches/120-strip-cflags-from-binary.patch b/package/libs/openssl/patches/120-strip-cflags-from-binary.patch index 75fb9d16848..20fe21f2acf 100644 --- a/package/libs/openssl/patches/120-strip-cflags-from-binary.patch +++ b/package/libs/openssl/patches/120-strip-cflags-from-binary.patch @@ -1,4 +1,4 @@ -From 4ad8f2fe6bf3b91df7904fcbe960e5fdfca36336 Mon Sep 17 00:00:00 2001 +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Eneas U de Queiroz Date: Thu, 27 Sep 2018 08:31:38 -0300 Subject: Avoid exposing build directories @@ -9,7 +9,6 @@ OpenSSL_version(OPENSSL_CFLAGS), or running openssl version -a Signed-off-by: Eneas U de Queiroz diff --git a/crypto/build.info b/crypto/build.info -index 2c619c62e8..893128345a 100644 --- a/crypto/build.info +++ b/crypto/build.info @@ -10,7 +10,7 @@ EXTRA= ../ms/uplink-x86.pl ../ms/uplink.c ../ms/applink.c \ @@ -17,7 +16,7 @@ index 2c619c62e8..893128345a 100644 DEPEND[cversion.o]=buildinf.h -GENERATE[buildinf.h]=../util/mkbuildinf.pl "$(CC) $(LIB_CFLAGS) $(CPPFLAGS_Q)" "$(PLATFORM)" -+GENERATE[buildinf.h]=../util/mkbuildinf.pl "$(filter-out -I% -iremap% -fmacro-prefix-map%,$(CC) $(LIB_CFLAGS) $(CPPFLAGS_Q))" "$(PLATFORM)" ++GENERATE[buildinf.h]=../util/mkbuildinf.pl "$(filter-out -I% -iremap% -fmacro-prefix-map% -ffile-prefix-map%,$(CC) $(LIB_CFLAGS) $(CPPFLAGS_Q))" "$(PLATFORM)" DEPEND[buildinf.h]=../configdata.pm GENERATE[uplink-x86.s]=../ms/uplink-x86.pl $(PERLASM_SCHEME) diff --git a/package/libs/openssl/patches/130-dont-build-tests-fuzz.patch b/package/libs/openssl/patches/130-dont-build-tests-fuzz.patch index 7f33cb9daea..4707554d2d6 100644 --- a/package/libs/openssl/patches/130-dont-build-tests-fuzz.patch +++ b/package/libs/openssl/patches/130-dont-build-tests-fuzz.patch @@ -1,4 +1,4 @@ -From ba2fe646f2d9104a18b066e43582154049e9ffcb Mon Sep 17 00:00:00 2001 +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Eneas U de Queiroz Date: Thu, 27 Sep 2018 08:34:38 -0300 Subject: Do not build tests and fuzz directories @@ -8,7 +8,6 @@ This shortens build time. Signed-off-by: Eneas U de Queiroz diff --git a/Configure b/Configure -index 74d057c219..5813e9f8fe 100755 --- a/Configure +++ b/Configure @@ -318,7 +318,7 @@ my $auto_threads=1; # enable threads automatically? true by default diff --git a/package/libs/openssl/patches/140-allow-prefer-chacha20.patch b/package/libs/openssl/patches/140-allow-prefer-chacha20.patch index b293db28f7e..b2418006a9c 100644 --- a/package/libs/openssl/patches/140-allow-prefer-chacha20.patch +++ b/package/libs/openssl/patches/140-allow-prefer-chacha20.patch @@ -1,4 +1,4 @@ -From 4f7ab2040bb71f03a8f8388911144559aa2a5b60 Mon Sep 17 00:00:00 2001 +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Eneas U de Queiroz Date: Thu, 27 Sep 2018 08:44:39 -0300 Subject: Add OPENSSL_PREFER_CHACHA_OVER_GCM option @@ -15,7 +15,6 @@ when the client has it on top of its ciphersuite preference. Signed-off-by: Eneas U de Queiroz diff --git a/include/openssl/ssl.h b/include/openssl/ssl.h -index 6724ccf2d2..96d959427e 100644 --- a/include/openssl/ssl.h +++ b/include/openssl/ssl.h @@ -173,9 +173,15 @@ extern "C" { @@ -38,7 +37,6 @@ index 6724ccf2d2..96d959427e 100644 # define TLS_DEFAULT_CIPHERSUITES "TLS_AES_256_GCM_SHA384:" \ "TLS_AES_128_GCM_SHA256" diff --git a/ssl/ssl_ciph.c b/ssl/ssl_ciph.c -index 27a1b2ec68..7039811323 100644 --- a/ssl/ssl_ciph.c +++ b/ssl/ssl_ciph.c @@ -1467,11 +1467,29 @@ STACK_OF(SSL_CIPHER) *ssl_create_cipher_list(const SSL_METHOD *ssl_method, diff --git a/package/libs/openssl/patches/150-openssl.cnf-add-engines-conf.patch b/package/libs/openssl/patches/150-openssl.cnf-add-engines-conf.patch index 81d41963c68..88511163478 100644 --- a/package/libs/openssl/patches/150-openssl.cnf-add-engines-conf.patch +++ b/package/libs/openssl/patches/150-openssl.cnf-add-engines-conf.patch @@ -1,6 +1,17 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Eneas U de Queiroz +Date: Sat, 27 Mar 2021 17:43:25 -0300 +Subject: openssl.cnf: add engine configuration + +This adds configuration options for engines, loading all cnf files under +/etc/ssl/engines.cnf.d/. + +Signed-off-by: Eneas U de Queiroz + +diff --git a/apps/openssl.cnf b/apps/openssl.cnf --- a/apps/openssl.cnf +++ b/apps/openssl.cnf -@@ -22,6 +22,82 @@ oid_section = new_oids +@@ -22,6 +22,16 @@ oid_section = new_oids # (Alternatively, use a configuration file that has only # X.509v3 extensions in its main [= default] section.) @@ -10,75 +21,9 @@ +engines=engines + +[engines] -+# To enable an engine, install the package, and uncomment it here: -+#devcrypto=devcrypto -+#afalg=afalg -+#padlock=padlock ++.include /var/etc/ssl/engines.cnf + -+[afalg] -+# Leave this alone and configure algorithms with CIPERS/DIGESTS below -+default_algorithms = ALL -+ -+# The following commands are only available if using the alternative -+# (sync) AFALG engine -+# Configuration commands: -+# Run 'openssl engine -t -c -vv -pre DUMP_INFO devcrypto' to see a -+# list of supported algorithms, along with their driver, whether they -+# are hw accelerated or not, and the engine's configuration commands. -+ -+# USE_SOFTDRIVERS: specifies whether to use software (not accelerated) -+# drivers (0=use only accelerated drivers, 1=allow all drivers, 2=use -+# if acceleration can't be determined) [default=2] -+#USE_SOFTDRIVERS = 2 -+ -+# CIPHERS: either ALL, NONE, NO_ECB (all except ECB-mode) or a -+# comma-separated list of ciphers to enable [default=NO_ECB] -+# Starting in 1.2.0, if you use a cipher list, each cipher may be -+# followed by a colon (:) and the minimum request length to use -+# AF_ALG drivers for that cipher; smaller requests are processed by -+# softare; a negative value will use the default for that cipher -+#CIPHERS=AES-128-CBC:1024, AES-256-CBC:768, DES-EDE3-CBC:0 -+ -+# DIGESTS: either ALL, NONE, or a comma-separated list of digests to -+# enable [default=NONE] -+# It is strongly recommended not to enable digests; their performance -+# is poor, and there are many cases in which they will not work, -+# especially when calling fork with open crypto contexts. Openssh, -+# for example, does this, and you may not be able to login. -+#DIGESTS = NONE -+ -+[devcrypto] -+# Leave this alone and configure algorithms with CIPERS/DIGESTS below -+default_algorithms = ALL -+ -+# Configuration commands: -+# Run 'openssl engine -t -c -vv -pre DUMP_INFO devcrypto' to see a -+# list of supported algorithms, along with their driver, whether they -+# are hw accelerated or not, and the engine's configuration commands. -+ -+# USE_SOFTDRIVERS: specifies whether to use software (not accelerated) -+# drivers (0=use only accelerated drivers, 1=allow all drivers, 2=use -+# if acceleration can't be determined) [default=2] -+#USE_SOFTDRIVERS = 2 -+ -+# CIPHERS: either ALL, NONE, or a comma-separated list of ciphers to -+# enable [default=ALL] -+# It is recommended to disable the ECB ciphers; in most cases, it will -+# only be used for PRNG, in small blocks, where performance is poor, -+# and there may be problems with apps forking with open crypto -+# contexts, leading to failures. The CBC ciphers work well: -+#CIPHERS=DES-CBC, DES-EDE3-CBC, AES-128-CBC, AES-192-CBC, AES-256-CBC -+ -+# DIGESTS: either ALL, NONE, or a comma-separated list of digests to -+# enable [default=NONE] -+# It is strongly recommended not to enable digests; their performance -+# is poor, and there are many cases in which they will not work, -+# especially when calling fork with open crypto contexts. Openssh, -+# for example, does this, and you may not be able to login. -+#DIGESTS = NONE -+ -+[padlock] -+default_algorithms = ALL ++.include /etc/ssl/engines.cnf.d + [ new_oids ] diff --git a/package/libs/openssl/patches/400-eng_devcrypto-save-ioctl-if-EVP_MD_.FLAG_ONESHOT.patch b/package/libs/openssl/patches/400-eng_devcrypto-save-ioctl-if-EVP_MD_.FLAG_ONESHOT.patch index 84c68b16a29..71c9fdd438d 100644 --- a/package/libs/openssl/patches/400-eng_devcrypto-save-ioctl-if-EVP_MD_.FLAG_ONESHOT.patch +++ b/package/libs/openssl/patches/400-eng_devcrypto-save-ioctl-if-EVP_MD_.FLAG_ONESHOT.patch @@ -1,4 +1,4 @@ -From f14345422747a495a52f9237a43b8be189f21912 Mon Sep 17 00:00:00 2001 +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Eneas U de Queiroz Date: Mon, 5 Nov 2018 15:54:17 -0200 Subject: eng_devcrypto: save ioctl if EVP_MD_..FLAG_ONESHOT @@ -15,7 +15,6 @@ Reviewed-by: Richard Levitte (Merged from https://github.com/openssl/openssl/pull/7585) diff --git a/crypto/engine/eng_devcrypto.c b/crypto/engine/eng_devcrypto.c -index a727c6f646..a2c9a966f7 100644 --- a/crypto/engine/eng_devcrypto.c +++ b/crypto/engine/eng_devcrypto.c @@ -461,6 +461,7 @@ struct digest_ctx { diff --git a/package/libs/openssl/patches/420-eng_devcrypto-add-command-to-dump-driver-info.patch b/package/libs/openssl/patches/420-eng_devcrypto-add-command-to-dump-driver-info.patch index ad83a51a106..83989a36253 100644 --- a/package/libs/openssl/patches/420-eng_devcrypto-add-command-to-dump-driver-info.patch +++ b/package/libs/openssl/patches/420-eng_devcrypto-add-command-to-dump-driver-info.patch @@ -1,4 +1,4 @@ -From 78e7b1cc7119622645bc5a8542c55b6c95dc7868 Mon Sep 17 00:00:00 2001 +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Eneas U de Queiroz Date: Tue, 6 Nov 2018 22:54:07 -0200 Subject: eng_devcrypto: add command to dump driver info @@ -12,7 +12,6 @@ Reviewed-by: Richard Levitte (Merged from https://github.com/openssl/openssl/pull/7585) diff --git a/crypto/engine/eng_devcrypto.c b/crypto/engine/eng_devcrypto.c -index 5ec38ca8f3..64dc6b891d 100644 --- a/crypto/engine/eng_devcrypto.c +++ b/crypto/engine/eng_devcrypto.c @@ -50,16 +50,20 @@ static int use_softdrivers = DEVCRYPTO_DEFAULT_USE_SOFDTRIVERS; diff --git a/package/libs/openssl/patches/430-e_devcrypto-make-the-dev-crypto-engine-dynamic.patch b/package/libs/openssl/patches/430-e_devcrypto-make-the-dev-crypto-engine-dynamic.patch index ea3f8fb8a7f..da9b7045014 100644 --- a/package/libs/openssl/patches/430-e_devcrypto-make-the-dev-crypto-engine-dynamic.patch +++ b/package/libs/openssl/patches/430-e_devcrypto-make-the-dev-crypto-engine-dynamic.patch @@ -9,7 +9,6 @@ engines/e_devcrypto.c. Signed-off-by: Eneas U de Queiroz diff --git a/crypto/engine/build.info b/crypto/engine/build.info -index e00802a3fd..47fe948966 100644 --- a/crypto/engine/build.info +++ b/crypto/engine/build.info @@ -6,6 +6,3 @@ SOURCE[../../libcrypto]=\ @@ -20,10 +19,9 @@ index e00802a3fd..47fe948966 100644 - SOURCE[../../libcrypto]=eng_devcrypto.c -ENDIF diff --git a/crypto/init.c b/crypto/init.c -index 1b0d523bea..ee3e2eb075 100644 --- a/crypto/init.c +++ b/crypto/init.c -@@ -329,18 +329,6 @@ DEFINE_RUN_ONCE_STATIC(ossl_init_engine_openssl) +@@ -328,18 +328,6 @@ DEFINE_RUN_ONCE_STATIC(ossl_init_engine_openssl) engine_load_openssl_int(); return 1; } @@ -42,7 +40,7 @@ index 1b0d523bea..ee3e2eb075 100644 # ifndef OPENSSL_NO_RDRAND static CRYPTO_ONCE engine_rdrand = CRYPTO_ONCE_STATIC_INIT; -@@ -365,6 +353,18 @@ DEFINE_RUN_ONCE_STATIC(ossl_init_engine_dynamic) +@@ -364,6 +352,18 @@ DEFINE_RUN_ONCE_STATIC(ossl_init_engine_dynamic) return 1; } # ifndef OPENSSL_NO_STATIC_ENGINE @@ -61,7 +59,7 @@ index 1b0d523bea..ee3e2eb075 100644 # if !defined(OPENSSL_NO_HW) && !defined(OPENSSL_NO_HW_PADLOCK) static CRYPTO_ONCE engine_padlock = CRYPTO_ONCE_STATIC_INIT; DEFINE_RUN_ONCE_STATIC(ossl_init_engine_padlock) -@@ -713,11 +713,6 @@ int OPENSSL_init_crypto(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings) +@@ -704,11 +704,6 @@ int OPENSSL_init_crypto(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings) if ((opts & OPENSSL_INIT_ENGINE_OPENSSL) && !RUN_ONCE(&engine_openssl, ossl_init_engine_openssl)) return 0; @@ -73,7 +71,7 @@ index 1b0d523bea..ee3e2eb075 100644 # ifndef OPENSSL_NO_RDRAND if ((opts & OPENSSL_INIT_ENGINE_RDRAND) && !RUN_ONCE(&engine_rdrand, ossl_init_engine_rdrand)) -@@ -727,6 +722,11 @@ int OPENSSL_init_crypto(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings) +@@ -718,6 +713,11 @@ int OPENSSL_init_crypto(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings) && !RUN_ONCE(&engine_dynamic, ossl_init_engine_dynamic)) return 0; # ifndef OPENSSL_NO_STATIC_ENGINE @@ -86,7 +84,6 @@ index 1b0d523bea..ee3e2eb075 100644 if ((opts & OPENSSL_INIT_ENGINE_PADLOCK) && !RUN_ONCE(&engine_padlock, ossl_init_engine_padlock)) diff --git a/engines/build.info b/engines/build.info -index 1db771971c..33a25d7004 100644 --- a/engines/build.info +++ b/engines/build.info @@ -11,6 +11,9 @@ IF[{- !$disabled{"engine"} -}] @@ -116,7 +113,6 @@ diff --git a/crypto/engine/eng_devcrypto.c b/engines/e_devcrypto.c similarity index 95% rename from crypto/engine/eng_devcrypto.c rename to engines/e_devcrypto.c -index 2c1b52d572..eff1ed3a7d 100644 --- a/crypto/engine/eng_devcrypto.c +++ b/engines/e_devcrypto.c @@ -7,7 +7,7 @@ diff --git a/package/libs/openssl/patches/500-e_devcrypto-default-to-not-use-digests-in-engine.patch b/package/libs/openssl/patches/500-e_devcrypto-default-to-not-use-digests-in-engine.patch index 1f1cd7a5829..fd4701307e5 100644 --- a/package/libs/openssl/patches/500-e_devcrypto-default-to-not-use-digests-in-engine.patch +++ b/package/libs/openssl/patches/500-e_devcrypto-default-to-not-use-digests-in-engine.patch @@ -20,7 +20,6 @@ turn them on if it is safe and fast enough. Signed-off-by: Eneas U de Queiroz diff --git a/engines/e_devcrypto.c b/engines/e_devcrypto.c -index 3fcd81de7a..d25230d366 100644 --- a/engines/e_devcrypto.c +++ b/engines/e_devcrypto.c @@ -852,7 +852,7 @@ static void prepare_digest_methods(void) diff --git a/package/libs/openssl/patches/510-e_devcrypto-ignore-error-when-closing-session.patch b/package/libs/openssl/patches/510-e_devcrypto-ignore-error-when-closing-session.patch index bc514b88c9d..bf1c98b1040 100644 --- a/package/libs/openssl/patches/510-e_devcrypto-ignore-error-when-closing-session.patch +++ b/package/libs/openssl/patches/510-e_devcrypto-ignore-error-when-closing-session.patch @@ -9,7 +9,6 @@ session. It may have been closed by another process after a fork. Signed-off-by: Eneas U de Queiroz diff --git a/engines/e_devcrypto.c b/engines/e_devcrypto.c -index d25230d366..f4570f1666 100644 --- a/engines/e_devcrypto.c +++ b/engines/e_devcrypto.c @@ -195,9 +195,8 @@ static int cipher_init(EVP_CIPHER_CTX *ctx, const unsigned char *key, diff --git a/scripts/download.pl b/scripts/download.pl index 83e8c663078..8f7fedf982c 100755 --- a/scripts/download.pl +++ b/scripts/download.pl @@ -198,6 +198,10 @@ sub cleanup for (1 .. 5) { push @mirrors, "https://downloads.sourceforge.net/$1"; } + } elsif ($mirror =~ /^\@DEBIAN\/(.+)$/) { + push @mirrors, "https://ftp.debian.org/debian/$1"; + push @mirrors, "https://mirror.leaseweb.com/debian/$1"; + push @mirrors, "https://mirror.netcologne.de/debian/$1"; } elsif ($mirror =~ /^\@APACHE\/(.+)$/) { push @mirrors, "https://mirror.netcologne.de/apache.org/$1"; push @mirrors, "https://mirror.aarnet.edu.au/pub/apache/$1"; diff --git a/tools/libressl/Makefile b/tools/libressl/Makefile index d0296666114..bf2bd4e999f 100644 --- a/tools/libressl/Makefile +++ b/tools/libressl/Makefile @@ -8,8 +8,8 @@ include $(TOPDIR)/rules.mk PKG_NAME:=libressl -PKG_VERSION:=2.9.2 -PKG_HASH:=c4c78167fae325b47aebd8beb54b6041d6f6a56b3743f4bd5d79b15642f9d5d4 +PKG_VERSION:=3.5.3 +PKG_HASH:=3ab5e5eaef69ce20c6b170ee64d785b42235f48f2e62b095fca5d7b6672b8b28 PKG_RELEASE:=1 PKG_CPE_ID:=cpe:/a:openbsd:libressl @@ -23,11 +23,15 @@ HOST_BUILD_PARALLEL:=1 include $(INCLUDE_DIR)/host-build.mk -HOST_CONFIGURE_ARGS += --disable-shared -HOST_CFLAGS += $(FPIC) +HOSTCC := $(HOSTCC_NOCACHE) -ifeq ($(GNU_HOST_NAME),x86_64-linux-gnux32) -HOST_CONFIGURE_ARGS += --disable-asm -endif +HOST_CFLAGS += $(HOST_FPIC) + +HOST_CONFIGURE_ARGS += \ + --enable-static \ + --disable-shared \ + --disable-asm \ + --with-pic \ + --disable-tests $(eval $(call HostBuild)) diff --git a/tools/libressl/patches/001-dont-build-tests-man.patch b/tools/libressl/patches/001-dont-build-tests-man.patch deleted file mode 100644 index bd09818d43b..00000000000 --- a/tools/libressl/patches/001-dont-build-tests-man.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/Makefile.in -+++ b/Makefile.in -@@ -361,7 +361,7 @@ target_alias = @target_alias@ - top_build_prefix = @top_build_prefix@ - top_builddir = @top_builddir@ - top_srcdir = @top_srcdir@ --SUBDIRS = crypto ssl tls include apps tests man -+SUBDIRS = crypto ssl tls include apps - ACLOCAL_AMFLAGS = -I m4 - pkgconfigdir = $(libdir)/pkgconfig - pkgconfig_DATA = libcrypto.pc libssl.pc libtls.pc openssl.pc diff --git a/tools/libressl/patches/010-avoid-glibc.patch b/tools/libressl/patches/010-avoid-glibc.patch deleted file mode 100644 index e91899c7d7a..00000000000 --- a/tools/libressl/patches/010-avoid-glibc.patch +++ /dev/null @@ -1,23 +0,0 @@ -From a747aacc23607c993cc481378782b2c7dd5bc53b Mon Sep 17 00:00:00 2001 -From: Ishimoto Shinobu <47295761+protonesso@users.noreply.github.com> -Date: Tue, 21 May 2019 22:41:05 +0900 -Subject: [PATCH] avoid glibc - -cause problems on musl systems ---- - crypto/compat/getprogname_linux.c | 4 +--- - 1 file changed, 1 insertion(+), 3 deletions(-) - ---- a/crypto/compat/getprogname_linux.c -+++ b/crypto/compat/getprogname_linux.c -@@ -26,9 +26,7 @@ getprogname(void) - #if defined(__ANDROID_API__) && __ANDROID_API__ < 21 - extern const char *__progname; - return __progname; --#elif defined(__GLIBC__) -- return program_invocation_short_name; - #else --#error "Cannot emulate getprogname" -+ return program_invocation_short_name; - #endif - } diff --git a/tools/mkimage/Makefile b/tools/mkimage/Makefile index dd9d8ace14e..a7c98e755e8 100644 --- a/tools/mkimage/Makefile +++ b/tools/mkimage/Makefile @@ -7,31 +7,36 @@ include $(TOPDIR)/rules.mk PKG_NAME:=mkimage -PKG_VERSION:=2018.03 +PKG_VERSION:=2022.07 PKG_SOURCE:=u-boot-$(PKG_VERSION).tar.bz2 -PKG_SOURCE_URL:=http://ftp.denx.de/pub/u-boot -PKG_HASH:=7e7477534409d5368eb1371ffde6820f0f79780a1a1f676161c48442cb303dfd +PKG_SOURCE_URL:= \ + https://mirror.cyberbits.eu/u-boot \ + https://ftp.denx.de/pub/u-boot \ + ftp://ftp.denx.de/pub/u-boot +PKG_HASH:=92b08eb49c24da14c1adbf70a71ae8f37cc53eeb4230e859ad8b6733d13dcf5e HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/u-boot-$(PKG_VERSION) include $(INCLUDE_DIR)/host-build.mk -define Host/Prepare - $(Host/Prepare/Default) - mkdir -p $(HOST_BUILD_DIR)/include/config - touch $(HOST_BUILD_DIR)/include/config/auto.conf -endef +define Host/Configure + $(MAKE) -C $(HOST_BUILD_DIR) \ + HOSTCFLAGS="$(HOST_CFLAGS)" \ + HOSTLDFLAGS="$(HOST_LDFLAGS)" \ + PKG_CONFIG_EXTRAARGS="--static" \ + V=$(if $(findstring c,$(OPENWRT_VERBOSE)),1) \ + tools-only_config -HOST_LDFLAGS += -static + sed -i 's/CONFIG_TOOLS_MKEFICAPSULE=y/# CONFIG_TOOLS_MKEFICAPSULE is not set/' $(HOST_BUILD_DIR)/.config +endef define Host/Compile $(MAKE) -C $(HOST_BUILD_DIR) \ HOSTCFLAGS="$(HOST_CFLAGS)" \ HOSTLDFLAGS="$(HOST_LDFLAGS)" \ - no-dot-config-targets=tools-only \ - CONFIG_MKIMAGE_DTC_PATH=dtc \ - CONFIG_FIT_SIGNATURE=y \ + PKG_CONFIG_EXTRAARGS="--static" \ + V=$(if $(findstring c,$(OPENWRT_VERBOSE)),1) \ tools-only endef diff --git a/tools/mkimage/patches/010-freebsd-ulong-fix.patch b/tools/mkimage/patches/010-freebsd-ulong-fix.patch deleted file mode 100644 index 7d891657f8a..00000000000 --- a/tools/mkimage/patches/010-freebsd-ulong-fix.patch +++ /dev/null @@ -1,13 +0,0 @@ ---- a/include/image.h -+++ b/include/image.h -@@ -51,6 +51,10 @@ struct lmb; - - #endif /* USE_HOSTCC */ - -+#ifndef ulong -+#define ulong unsigned long -+#endif -+ - #if IMAGE_ENABLE_FIT - #include - #include diff --git a/tools/mkimage/patches/020-include_compile_fix.patch b/tools/mkimage/patches/020-include_compile_fix.patch deleted file mode 100644 index 276cae0cb16..00000000000 --- a/tools/mkimage/patches/020-include_compile_fix.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- a/include/u-boot/rsa-checksum.h -+++ b/include/u-boot/rsa-checksum.h -@@ -7,7 +7,6 @@ - #ifndef _RSA_CHECKSUM_H - #define _RSA_CHECKSUM_H - --#include - #include - #include - #include diff --git a/tools/mkimage/patches/020-tools-mtk_image-split-gfh-header-verification-into-a.patch b/tools/mkimage/patches/020-tools-mtk_image-split-gfh-header-verification-into-a.patch new file mode 100644 index 00000000000..62300af266c --- /dev/null +++ b/tools/mkimage/patches/020-tools-mtk_image-split-gfh-header-verification-into-a.patch @@ -0,0 +1,89 @@ +From b6bb61fd3818f4a3025fedbe4d15dbeeaef6ee82 Mon Sep 17 00:00:00 2001 +From: Weijie Gao +Date: Tue, 2 Aug 2022 17:21:34 +0800 +Subject: [PATCH 28/31] tools: mtk_image: split gfh header verification into a + new function + +The verification code of gfh header for NAND and non-NAND are identical. +It's better to define a individual function to reduce redundancy. + +Reviewed-by: Simon Glass +Signed-off-by: Weijie Gao +--- + tools/mtk_image.c | 51 +++++++++++++++++++---------------------------- + 1 file changed, 21 insertions(+), 30 deletions(-) + +--- a/tools/mtk_image.c ++++ b/tools/mtk_image.c +@@ -432,6 +432,25 @@ static int mtk_image_vrec_header(struct + return SHA256_SUM_LEN; + } + ++static int mtk_image_verify_gfh(struct gfh_header *gfh, uint32_t type, int print) ++{ ++ if (strcmp(gfh->file_info.name, GFH_FILE_INFO_NAME)) ++ return -1; ++ ++ if (le32_to_cpu(gfh->file_info.flash_type) != type) ++ return -1; ++ ++ if (print) ++ printf("Load Address: %08x\n", ++ le32_to_cpu(gfh->file_info.load_addr) + ++ le32_to_cpu(gfh->file_info.jump_offset)); ++ ++ if (print) ++ printf("Architecture: %s\n", is_arm64_image ? "ARM64" : "ARM"); ++ ++ return 0; ++} ++ + static int mtk_image_verify_gen_header(const uint8_t *ptr, int print) + { + union gen_boot_header *gbh = (union gen_boot_header *)ptr; +@@ -494,21 +513,7 @@ static int mtk_image_verify_gen_header(c + + gfh = (struct gfh_header *)(ptr + gfh_offset); + +- if (strcmp(gfh->file_info.name, GFH_FILE_INFO_NAME)) +- return -1; +- +- if (le32_to_cpu(gfh->file_info.flash_type) != GFH_FLASH_TYPE_GEN) +- return -1; +- +- if (print) +- printf("Load Address: %08x\n", +- le32_to_cpu(gfh->file_info.load_addr) + +- le32_to_cpu(gfh->file_info.jump_offset)); +- +- if (print) +- printf("Architecture: %s\n", is_arm64_image ? "ARM64" : "ARM"); +- +- return 0; ++ return mtk_image_verify_gfh(gfh, GFH_FLASH_TYPE_GEN, print); + } + + static int mtk_image_verify_nand_header(const uint8_t *ptr, int print) +@@ -562,21 +567,7 @@ static int mtk_image_verify_nand_header( + + gfh = (struct gfh_header *)(ptr + 2 * le16_to_cpu(nh->pagesize)); + +- if (strcmp(gfh->file_info.name, GFH_FILE_INFO_NAME)) +- return -1; +- +- if (le32_to_cpu(gfh->file_info.flash_type) != GFH_FLASH_TYPE_NAND) +- return -1; +- +- if (print) +- printf("Load Address: %08x\n", +- le32_to_cpu(gfh->file_info.load_addr) + +- le32_to_cpu(gfh->file_info.jump_offset)); +- +- if (print) +- printf("Architecture: %s\n", is_arm64_image ? "ARM64" : "ARM"); +- +- return 0; ++ return mtk_image_verify_gfh(gfh, GFH_FLASH_TYPE_NAND, print); + } + + static int mtk_image_verify_header(unsigned char *ptr, int image_size, diff --git a/tools/mkimage/patches/021-tools-mtk_image-split-the-code-of-generating-NAND-he.patch b/tools/mkimage/patches/021-tools-mtk_image-split-the-code-of-generating-NAND-he.patch new file mode 100644 index 00000000000..0b4013864ed --- /dev/null +++ b/tools/mkimage/patches/021-tools-mtk_image-split-the-code-of-generating-NAND-he.patch @@ -0,0 +1,821 @@ +From 20ebf03eab571b25e9f62b2764ab84932111dcd6 Mon Sep 17 00:00:00 2001 +From: Weijie Gao +Date: Tue, 2 Aug 2022 17:23:57 +0800 +Subject: [PATCH 29/31] tools: mtk_image: split the code of generating NAND + header into a new file + +The predefined NAND headers take too much spaces in the mtk_image.c. +Moving them into a new file can significantly improve the readability of +both mtk_image.c and the new mtk_nand_headers.c. + +This is a preparation for adding more NAND headers. + +Reviewed-by: Simon Glass +Signed-off-by: Weijie Gao +--- + tools/Makefile | 1 + + tools/mtk_image.c | 305 ++++++--------------------------------- + tools/mtk_image.h | 25 ---- + tools/mtk_nand_headers.c | 286 ++++++++++++++++++++++++++++++++++++ + tools/mtk_nand_headers.h | 61 ++++++++ + 5 files changed, 389 insertions(+), 289 deletions(-) + create mode 100644 tools/mtk_nand_headers.c + create mode 100644 tools/mtk_nand_headers.h + +--- a/tools/Makefile ++++ b/tools/Makefile +@@ -147,6 +147,7 @@ dumpimage-mkimage-objs := aisimage.o \ + gpimage.o \ + gpimage-common.o \ + mtk_image.o \ ++ mtk_nand_headers.o \ + $(ECDSA_OBJS-y) \ + $(RSA_OBJS-y) \ + $(AES_OBJS-y) +--- a/tools/mtk_image.c ++++ b/tools/mtk_image.c +@@ -10,216 +10,7 @@ + #include + #include "imagetool.h" + #include "mtk_image.h" +- +-/* NAND header for SPI-NAND with 2KB page + 64B spare */ +-static const union nand_boot_header snand_hdr_2k_64_data = { +- .data = { +- 0x42, 0x4F, 0x4F, 0x54, 0x4C, 0x4F, 0x41, 0x44, +- 0x45, 0x52, 0x21, 0x00, 0x56, 0x30, 0x30, 0x36, +- 0x4E, 0x46, 0x49, 0x49, 0x4E, 0x46, 0x4F, 0x00, +- 0x00, 0x00, 0x00, 0x08, 0x03, 0x00, 0x40, 0x00, +- 0x40, 0x00, 0x00, 0x08, 0x10, 0x00, 0x16, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x7B, 0xC4, 0x17, 0x9D, +- 0xCA, 0x42, 0x90, 0xD0, 0x98, 0xD0, 0xE0, 0xF7, +- 0xDB, 0xCD, 0x16, 0xF6, 0x03, 0x73, 0xD2, 0xB8, +- 0x93, 0xB2, 0x56, 0x5A, 0x84, 0x6E, 0x00, 0x00 +- } +-}; +- +-/* NAND header for SPI-NAND with 2KB page + 120B/128B spare */ +-static const union nand_boot_header snand_hdr_2k_128_data = { +- .data = { +- 0x42, 0x4F, 0x4F, 0x54, 0x4C, 0x4F, 0x41, 0x44, +- 0x45, 0x52, 0x21, 0x00, 0x56, 0x30, 0x30, 0x36, +- 0x4E, 0x46, 0x49, 0x49, 0x4E, 0x46, 0x4F, 0x00, +- 0x00, 0x00, 0x00, 0x08, 0x05, 0x00, 0x70, 0x00, +- 0x40, 0x00, 0x00, 0x08, 0x10, 0x00, 0x16, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x90, 0x28, 0xED, 0x13, +- 0x7F, 0x12, 0x22, 0xCD, 0x3D, 0x06, 0xF1, 0xB3, +- 0x6F, 0x2E, 0xD9, 0xA0, 0x9D, 0x7A, 0xBD, 0xD7, +- 0xB3, 0x28, 0x3C, 0x13, 0xDB, 0x4E, 0x00, 0x00 +- } +-}; +- +-/* NAND header for SPI-NAND with 4KB page + 256B spare */ +-static const union nand_boot_header snand_hdr_4k_256_data = { +- .data = { +- 0x42, 0x4F, 0x4F, 0x54, 0x4C, 0x4F, 0x41, 0x44, +- 0x45, 0x52, 0x21, 0x00, 0x56, 0x30, 0x30, 0x36, +- 0x4E, 0x46, 0x49, 0x49, 0x4E, 0x46, 0x4F, 0x00, +- 0x00, 0x00, 0x00, 0x10, 0x05, 0x00, 0xE0, 0x00, +- 0x40, 0x00, 0x00, 0x08, 0x10, 0x00, 0x16, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x47, 0xED, 0x0E, 0xC3, +- 0x83, 0xBF, 0x41, 0xD2, 0x85, 0x21, 0x97, 0x57, +- 0xC4, 0x2E, 0x6B, 0x7A, 0x40, 0xE0, 0xCF, 0x8F, +- 0x37, 0xBD, 0x17, 0xB6, 0xC7, 0xFE, 0x00, 0x00 +- } +-}; +- +-/* NAND header for Parallel NAND 1Gb with 2KB page + 64B spare */ +-static const union nand_boot_header nand_hdr_1gb_2k_64_data = { +- .data = { +- 0x42, 0x4F, 0x4F, 0x54, 0x4C, 0x4F, 0x41, 0x44, +- 0x45, 0x52, 0x21, 0x00, 0x56, 0x30, 0x30, 0x36, +- 0x4E, 0x46, 0x49, 0x49, 0x4E, 0x46, 0x4F, 0x00, +- 0x00, 0x00, 0x00, 0x08, 0x05, 0x00, 0x40, 0x00, +- 0x40, 0x00, 0x00, 0x04, 0x0B, 0x00, 0x11, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x12, 0x28, 0x1C, 0x12, +- 0x8F, 0xFD, 0xF8, 0x32, 0x6F, 0x6D, 0xCF, 0x6C, +- 0xDA, 0x21, 0x70, 0x8C, 0xDA, 0x0A, 0x22, 0x82, +- 0xAA, 0x59, 0xFA, 0x7C, 0x42, 0x2D, 0x00, 0x00 +- } +-}; +- +-/* NAND header for Parallel NAND 2Gb with 2KB page + 64B spare */ +-static const union nand_boot_header nand_hdr_2gb_2k_64_data = { +- .data = { +- 0x42, 0x4F, 0x4F, 0x54, 0x4C, 0x4F, 0x41, 0x44, +- 0x45, 0x52, 0x21, 0x00, 0x56, 0x30, 0x30, 0x36, +- 0x4E, 0x46, 0x49, 0x49, 0x4E, 0x46, 0x4F, 0x00, +- 0x00, 0x00, 0x00, 0x08, 0x05, 0x00, 0x40, 0x00, +- 0x40, 0x00, 0x00, 0x08, 0x0B, 0x00, 0x11, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x20, 0x9C, 0x3D, 0x2D, +- 0x7B, 0x68, 0x63, 0x52, 0x2E, 0x04, 0x63, 0xF1, +- 0x35, 0x4E, 0x44, 0x3E, 0xF8, 0xAC, 0x9B, 0x95, +- 0xAB, 0xFE, 0xE4, 0xE1, 0xD5, 0xF9, 0x00, 0x00 +- } +-}; +- +-/* NAND header for Parallel NAND 4Gb with 2KB page + 64B spare */ +-static const union nand_boot_header nand_hdr_4gb_2k_64_data = { +- .data = { +- 0x42, 0x4F, 0x4F, 0x54, 0x4C, 0x4F, 0x41, 0x44, +- 0x45, 0x52, 0x21, 0x00, 0x56, 0x30, 0x30, 0x36, +- 0x4E, 0x46, 0x49, 0x49, 0x4E, 0x46, 0x4F, 0x00, +- 0x00, 0x00, 0x00, 0x08, 0x05, 0x00, 0x40, 0x00, +- 0x40, 0x00, 0x00, 0x10, 0x0B, 0x00, 0x11, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0xE3, 0x0F, 0x86, 0x32, +- 0x68, 0x05, 0xD9, 0xC8, 0x13, 0xDF, 0xC5, 0x0B, +- 0x35, 0x3A, 0x68, 0xA5, 0x3C, 0x0C, 0x73, 0x87, +- 0x63, 0xB0, 0xBE, 0xCC, 0x84, 0x47, 0x00, 0x00 +- } +-}; +- +-/* NAND header for Parallel NAND 2Gb with 2KB page + 128B spare */ +-static const union nand_boot_header nand_hdr_2gb_2k_128_data = { +- .data = { +- 0x42, 0x4F, 0x4F, 0x54, 0x4C, 0x4F, 0x41, 0x44, +- 0x45, 0x52, 0x21, 0x00, 0x56, 0x30, 0x30, 0x36, +- 0x4E, 0x46, 0x49, 0x49, 0x4E, 0x46, 0x4F, 0x00, +- 0x00, 0x00, 0x00, 0x08, 0x05, 0x00, 0x70, 0x00, +- 0x40, 0x00, 0x00, 0x08, 0x0B, 0x00, 0x11, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x01, 0xA5, 0xE9, 0x5A, +- 0xDF, 0x58, 0x62, 0x41, 0xD6, 0x26, 0x77, 0xBC, +- 0x76, 0x1F, 0x27, 0x4E, 0x4F, 0x6C, 0xC3, 0xF0, +- 0x36, 0xDE, 0xD9, 0xB3, 0xFF, 0x93, 0x00, 0x00 +- } +-}; +- +-/* NAND header for Parallel NAND 4Gb with 2KB page + 128B spare */ +-static const union nand_boot_header nand_hdr_4gb_2k_128_data = { +- .data = { +- 0x42, 0x4F, 0x4F, 0x54, 0x4C, 0x4F, 0x41, 0x44, +- 0x45, 0x52, 0x21, 0x00, 0x56, 0x30, 0x30, 0x36, +- 0x4E, 0x46, 0x49, 0x49, 0x4E, 0x46, 0x4F, 0x00, +- 0x00, 0x00, 0x00, 0x08, 0x05, 0x00, 0x70, 0x00, +- 0x40, 0x00, 0x00, 0x10, 0x0B, 0x00, 0x11, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0xC2, 0x36, 0x52, 0x45, +- 0xCC, 0x35, 0xD8, 0xDB, 0xEB, 0xFD, 0xD1, 0x46, +- 0x76, 0x6B, 0x0B, 0xD5, 0x8B, 0xCC, 0x2B, 0xE2, +- 0xFE, 0x90, 0x83, 0x9E, 0xAE, 0x2D, 0x00, 0x00 +- } +-}; +- +-static const struct nand_header_type { +- const char *name; +- const union nand_boot_header *data; +-} nand_headers[] = { +- { +- .name = "2k+64", +- .data = &snand_hdr_2k_64_data +- }, { +- .name = "2k+120", +- .data = &snand_hdr_2k_128_data +- }, { +- .name = "2k+128", +- .data = &snand_hdr_2k_128_data +- }, { +- .name = "4k+256", +- .data = &snand_hdr_4k_256_data +- }, { +- .name = "1g:2k+64", +- .data = &nand_hdr_1gb_2k_64_data +- }, { +- .name = "2g:2k+64", +- .data = &nand_hdr_2gb_2k_64_data +- }, { +- .name = "4g:2k+64", +- .data = &nand_hdr_4gb_2k_64_data +- }, { +- .name = "2g:2k+128", +- .data = &nand_hdr_2gb_2k_128_data +- }, { +- .name = "4g:2k+128", +- .data = &nand_hdr_4gb_2k_128_data +- } +-}; ++#include "mtk_nand_headers.h" + + static const struct brom_img_type { + const char *name; +@@ -258,6 +49,7 @@ static char lk_name[32] = "U-Boot"; + + /* NAND header selected by user */ + static const union nand_boot_header *hdr_nand; ++static uint32_t hdr_nand_size; + + /* GFH header + 2 * 4KB pages of NAND */ + static char hdr_tmp[sizeof(struct gfh_header) + 0x2000]; +@@ -361,12 +153,7 @@ static int mtk_brom_parse_imagename(cons + } + + /* parse nand header type */ +- for (i = 0; i < ARRAY_SIZE(nand_headers); i++) { +- if (!strcmp(nand_headers[i].name, nandinfo)) { +- hdr_nand = nand_headers[i].data; +- break; +- } +- } ++ hdr_nand = mtk_nand_header_find(nandinfo); + + /* parse device header offset */ + if (hdr_offs && hdr_offs[0]) +@@ -391,6 +178,9 @@ static int mtk_brom_parse_imagename(cons + return -EINVAL; + } + ++ if (hdr_media == BRLYT_TYPE_NAND || hdr_media == BRLYT_TYPE_SNAND) ++ hdr_nand_size = mtk_nand_header_size(hdr_nand); ++ + return 0; + } + +@@ -420,7 +210,7 @@ static int mtk_image_vrec_header(struct + } + + if (hdr_media == BRLYT_TYPE_NAND || hdr_media == BRLYT_TYPE_SNAND) +- tparams->header_size = 2 * le16_to_cpu(hdr_nand->pagesize); ++ tparams->header_size = hdr_nand_size; + else + tparams->header_size = sizeof(struct gen_device_header); + +@@ -518,16 +308,17 @@ static int mtk_image_verify_gen_header(c + + static int mtk_image_verify_nand_header(const uint8_t *ptr, int print) + { +- union nand_boot_header *nh = (union nand_boot_header *)ptr; + struct brom_layout_header *bh; ++ struct nand_header_info info; + struct gfh_header *gfh; + const char *bootmedia; ++ int ret; + +- if (strncmp(nh->version, NAND_BOOT_VERSION, sizeof(nh->version)) || +- strcmp(nh->id, NAND_BOOT_ID)) +- return -1; ++ ret = mtk_nand_header_info(ptr, &info); ++ if (ret < 0) ++ return ret; + +- bh = (struct brom_layout_header *)(ptr + le16_to_cpu(nh->pagesize)); ++ bh = (struct brom_layout_header *)(ptr + info.page_size); + + if (strcmp(bh->name, BRLYT_NAME)) + return -1; +@@ -538,34 +329,23 @@ static int mtk_image_verify_nand_header( + if (le32_to_cpu(bh->type) == BRLYT_TYPE_NAND) + bootmedia = "Parallel NAND"; + else if (le32_to_cpu(bh->type) == BRLYT_TYPE_SNAND) +- bootmedia = "Serial NAND"; ++ bootmedia = "Serial NAND (SNFI/AP)"; + else + return -1; + } + + if (print) { +- printf("Boot Media: %s\n", bootmedia); +- +- if (le32_to_cpu(bh->type) == BRLYT_TYPE_NAND) { +- uint64_t capacity = +- (uint64_t)le16_to_cpu(nh->numblocks) * +- (uint64_t)le16_to_cpu(nh->pages_of_block) * +- (uint64_t)le16_to_cpu(nh->pagesize) * 8; +- printf("Capacity: %dGb\n", +- (uint32_t)(capacity >> 30)); +- } ++ printf("Boot Media: %s\n", bootmedia); + +- if (le16_to_cpu(nh->pagesize) >= 1024) +- printf("Page Size: %dKB\n", +- le16_to_cpu(nh->pagesize) >> 10); ++ if (info.page_size >= 1024) ++ printf("Page Size: %dKB\n", info.page_size >> 10); + else +- printf("Page Size: %dB\n", +- le16_to_cpu(nh->pagesize)); ++ printf("Page Size: %dB\n", info.page_size); + +- printf("Spare Size: %dB\n", le16_to_cpu(nh->oobsize)); ++ printf("Spare Size: %dB\n", info.spare_size); + } + +- gfh = (struct gfh_header *)(ptr + 2 * le16_to_cpu(nh->pagesize)); ++ gfh = (struct gfh_header *)(ptr + info.gfh_offset); + + return mtk_image_verify_gfh(gfh, GFH_FLASH_TYPE_NAND, print); + } +@@ -581,7 +361,7 @@ static int mtk_image_verify_header(unsig + + img_size = image_size; + +- if (!strcmp((char *)ptr, NAND_BOOT_NAME)) ++ if (is_mtk_nand_header(ptr)) + return mtk_image_verify_nand_header(ptr, 0); + else + return mtk_image_verify_gen_header(ptr, 0); +@@ -601,7 +381,7 @@ static void mtk_image_print_header(const + + printf("Image Type: MediaTek BootROM Loadable Image\n"); + +- if (!strcmp((char *)ptr, NAND_BOOT_NAME)) ++ if (is_mtk_nand_header(ptr)) + mtk_image_verify_nand_header(ptr, 1); + else + mtk_image_verify_gen_header(ptr, 1); +@@ -732,36 +512,33 @@ static void mtk_image_set_gen_header(voi + static void mtk_image_set_nand_header(void *ptr, off_t filesize, + uint32_t loadaddr) + { +- union nand_boot_header *nh = (union nand_boot_header *)ptr; + struct brom_layout_header *brlyt; + struct gfh_header *gfh; +- uint32_t payload_pages; +- int i; ++ uint32_t payload_pages, nand_page_size; + +- /* NAND device header, repeat 4 times */ +- for (i = 0; i < 4; i++) +- memcpy(nh + i, hdr_nand, sizeof(union nand_boot_header)); ++ /* NAND header */ ++ nand_page_size = mtk_nand_header_put(hdr_nand, ptr); + +- /* BRLYT header */ +- payload_pages = (filesize + le16_to_cpu(hdr_nand->pagesize) - 1) / +- le16_to_cpu(hdr_nand->pagesize); +- brlyt = (struct brom_layout_header *) +- (ptr + le16_to_cpu(hdr_nand->pagesize)); +- put_brom_layout_header(brlyt, hdr_media); +- brlyt->header_size = cpu_to_le32(2); +- brlyt->total_size = cpu_to_le32(payload_pages); +- brlyt->header_size_2 = brlyt->header_size; +- brlyt->total_size_2 = brlyt->total_size; +- brlyt->unused = cpu_to_le32(1); ++ if (nand_page_size) { ++ /* BRLYT header */ ++ payload_pages = (filesize + nand_page_size - 1) / ++ nand_page_size; ++ brlyt = (struct brom_layout_header *)(ptr + nand_page_size); ++ put_brom_layout_header(brlyt, hdr_media); ++ brlyt->header_size = cpu_to_le32(2); ++ brlyt->total_size = cpu_to_le32(payload_pages); ++ brlyt->header_size_2 = brlyt->header_size; ++ brlyt->total_size_2 = brlyt->total_size; ++ brlyt->unused = cpu_to_le32(1); ++ } + + /* GFH header */ +- gfh = (struct gfh_header *)(ptr + 2 * le16_to_cpu(hdr_nand->pagesize)); +- put_ghf_header(gfh, filesize, 2 * le16_to_cpu(hdr_nand->pagesize), +- loadaddr, GFH_FLASH_TYPE_NAND); ++ gfh = (struct gfh_header *)(ptr + hdr_nand_size); ++ put_ghf_header(gfh, filesize, hdr_nand_size, loadaddr, ++ GFH_FLASH_TYPE_NAND); + + /* Generate SHA256 hash */ +- put_hash((uint8_t *)gfh, +- filesize - 2 * le16_to_cpu(hdr_nand->pagesize) - SHA256_SUM_LEN); ++ put_hash((uint8_t *)gfh, filesize - hdr_nand_size - SHA256_SUM_LEN); + } + + static void mtk_image_set_header(void *ptr, struct stat *sbuf, int ifd, +--- a/tools/mtk_image.h ++++ b/tools/mtk_image.h +@@ -26,31 +26,6 @@ union gen_boot_header { + #define SF_BOOT_NAME "SF_BOOT" + #define SDMMC_BOOT_NAME "SDMMC_BOOT" + +-/* Header for NAND */ +-union nand_boot_header { +- struct { +- char name[12]; +- char version[4]; +- char id[8]; +- uint16_t ioif; +- uint16_t pagesize; +- uint16_t addrcycles; +- uint16_t oobsize; +- uint16_t pages_of_block; +- uint16_t numblocks; +- uint16_t writesize_shift; +- uint16_t erasesize_shift; +- uint8_t dummy[60]; +- uint8_t ecc_parity[28]; +- }; +- +- uint8_t data[0x80]; +-}; +- +-#define NAND_BOOT_NAME "BOOTLOADER!" +-#define NAND_BOOT_VERSION "V006" +-#define NAND_BOOT_ID "NFIINFO" +- + /* BootROM layout header */ + struct brom_layout_header { + char name[8]; +--- /dev/null ++++ b/tools/mtk_nand_headers.c +@@ -0,0 +1,286 @@ ++// SPDX-License-Identifier: GPL-2.0+ ++/* ++ * MediaTek BootROM NAND header definitions ++ * ++ * Copyright (C) 2022 MediaTek Inc. ++ * Author: Weijie Gao ++ */ ++ ++#include ++#include ++#include "imagetool.h" ++#include "mtk_image.h" ++#include "mtk_nand_headers.h" ++ ++/* NAND header for SPI-NAND with 2KB page + 64B spare */ ++static const union nand_boot_header snand_hdr_2k_64_data = { ++ .data = { ++ 0x42, 0x4F, 0x4F, 0x54, 0x4C, 0x4F, 0x41, 0x44, ++ 0x45, 0x52, 0x21, 0x00, 0x56, 0x30, 0x30, 0x36, ++ 0x4E, 0x46, 0x49, 0x49, 0x4E, 0x46, 0x4F, 0x00, ++ 0x00, 0x00, 0x00, 0x08, 0x03, 0x00, 0x40, 0x00, ++ 0x40, 0x00, 0x00, 0x08, 0x10, 0x00, 0x16, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x7B, 0xC4, 0x17, 0x9D, ++ 0xCA, 0x42, 0x90, 0xD0, 0x98, 0xD0, 0xE0, 0xF7, ++ 0xDB, 0xCD, 0x16, 0xF6, 0x03, 0x73, 0xD2, 0xB8, ++ 0x93, 0xB2, 0x56, 0x5A, 0x84, 0x6E, 0x00, 0x00 ++ } ++}; ++ ++/* NAND header for SPI-NAND with 2KB page + 120B/128B spare */ ++static const union nand_boot_header snand_hdr_2k_128_data = { ++ .data = { ++ 0x42, 0x4F, 0x4F, 0x54, 0x4C, 0x4F, 0x41, 0x44, ++ 0x45, 0x52, 0x21, 0x00, 0x56, 0x30, 0x30, 0x36, ++ 0x4E, 0x46, 0x49, 0x49, 0x4E, 0x46, 0x4F, 0x00, ++ 0x00, 0x00, 0x00, 0x08, 0x05, 0x00, 0x70, 0x00, ++ 0x40, 0x00, 0x00, 0x08, 0x10, 0x00, 0x16, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x90, 0x28, 0xED, 0x13, ++ 0x7F, 0x12, 0x22, 0xCD, 0x3D, 0x06, 0xF1, 0xB3, ++ 0x6F, 0x2E, 0xD9, 0xA0, 0x9D, 0x7A, 0xBD, 0xD7, ++ 0xB3, 0x28, 0x3C, 0x13, 0xDB, 0x4E, 0x00, 0x00 ++ } ++}; ++ ++/* NAND header for SPI-NAND with 4KB page + 256B spare */ ++static const union nand_boot_header snand_hdr_4k_256_data = { ++ .data = { ++ 0x42, 0x4F, 0x4F, 0x54, 0x4C, 0x4F, 0x41, 0x44, ++ 0x45, 0x52, 0x21, 0x00, 0x56, 0x30, 0x30, 0x36, ++ 0x4E, 0x46, 0x49, 0x49, 0x4E, 0x46, 0x4F, 0x00, ++ 0x00, 0x00, 0x00, 0x10, 0x05, 0x00, 0xE0, 0x00, ++ 0x40, 0x00, 0x00, 0x08, 0x10, 0x00, 0x16, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x47, 0xED, 0x0E, 0xC3, ++ 0x83, 0xBF, 0x41, 0xD2, 0x85, 0x21, 0x97, 0x57, ++ 0xC4, 0x2E, 0x6B, 0x7A, 0x40, 0xE0, 0xCF, 0x8F, ++ 0x37, 0xBD, 0x17, 0xB6, 0xC7, 0xFE, 0x00, 0x00 ++ } ++}; ++ ++/* NAND header for Parallel NAND 1Gb with 2KB page + 64B spare */ ++static const union nand_boot_header nand_hdr_1gb_2k_64_data = { ++ .data = { ++ 0x42, 0x4F, 0x4F, 0x54, 0x4C, 0x4F, 0x41, 0x44, ++ 0x45, 0x52, 0x21, 0x00, 0x56, 0x30, 0x30, 0x36, ++ 0x4E, 0x46, 0x49, 0x49, 0x4E, 0x46, 0x4F, 0x00, ++ 0x00, 0x00, 0x00, 0x08, 0x05, 0x00, 0x40, 0x00, ++ 0x40, 0x00, 0x00, 0x04, 0x0B, 0x00, 0x11, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x12, 0x28, 0x1C, 0x12, ++ 0x8F, 0xFD, 0xF8, 0x32, 0x6F, 0x6D, 0xCF, 0x6C, ++ 0xDA, 0x21, 0x70, 0x8C, 0xDA, 0x0A, 0x22, 0x82, ++ 0xAA, 0x59, 0xFA, 0x7C, 0x42, 0x2D, 0x00, 0x00 ++ } ++}; ++ ++/* NAND header for Parallel NAND 2Gb with 2KB page + 64B spare */ ++static const union nand_boot_header nand_hdr_2gb_2k_64_data = { ++ .data = { ++ 0x42, 0x4F, 0x4F, 0x54, 0x4C, 0x4F, 0x41, 0x44, ++ 0x45, 0x52, 0x21, 0x00, 0x56, 0x30, 0x30, 0x36, ++ 0x4E, 0x46, 0x49, 0x49, 0x4E, 0x46, 0x4F, 0x00, ++ 0x00, 0x00, 0x00, 0x08, 0x05, 0x00, 0x40, 0x00, ++ 0x40, 0x00, 0x00, 0x08, 0x0B, 0x00, 0x11, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x20, 0x9C, 0x3D, 0x2D, ++ 0x7B, 0x68, 0x63, 0x52, 0x2E, 0x04, 0x63, 0xF1, ++ 0x35, 0x4E, 0x44, 0x3E, 0xF8, 0xAC, 0x9B, 0x95, ++ 0xAB, 0xFE, 0xE4, 0xE1, 0xD5, 0xF9, 0x00, 0x00 ++ } ++}; ++ ++/* NAND header for Parallel NAND 4Gb with 2KB page + 64B spare */ ++static const union nand_boot_header nand_hdr_4gb_2k_64_data = { ++ .data = { ++ 0x42, 0x4F, 0x4F, 0x54, 0x4C, 0x4F, 0x41, 0x44, ++ 0x45, 0x52, 0x21, 0x00, 0x56, 0x30, 0x30, 0x36, ++ 0x4E, 0x46, 0x49, 0x49, 0x4E, 0x46, 0x4F, 0x00, ++ 0x00, 0x00, 0x00, 0x08, 0x05, 0x00, 0x40, 0x00, ++ 0x40, 0x00, 0x00, 0x10, 0x0B, 0x00, 0x11, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0xE3, 0x0F, 0x86, 0x32, ++ 0x68, 0x05, 0xD9, 0xC8, 0x13, 0xDF, 0xC5, 0x0B, ++ 0x35, 0x3A, 0x68, 0xA5, 0x3C, 0x0C, 0x73, 0x87, ++ 0x63, 0xB0, 0xBE, 0xCC, 0x84, 0x47, 0x00, 0x00 ++ } ++}; ++ ++/* NAND header for Parallel NAND 2Gb with 2KB page + 128B spare */ ++static const union nand_boot_header nand_hdr_2gb_2k_128_data = { ++ .data = { ++ 0x42, 0x4F, 0x4F, 0x54, 0x4C, 0x4F, 0x41, 0x44, ++ 0x45, 0x52, 0x21, 0x00, 0x56, 0x30, 0x30, 0x36, ++ 0x4E, 0x46, 0x49, 0x49, 0x4E, 0x46, 0x4F, 0x00, ++ 0x00, 0x00, 0x00, 0x08, 0x05, 0x00, 0x70, 0x00, ++ 0x40, 0x00, 0x00, 0x08, 0x0B, 0x00, 0x11, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x01, 0xA5, 0xE9, 0x5A, ++ 0xDF, 0x58, 0x62, 0x41, 0xD6, 0x26, 0x77, 0xBC, ++ 0x76, 0x1F, 0x27, 0x4E, 0x4F, 0x6C, 0xC3, 0xF0, ++ 0x36, 0xDE, 0xD9, 0xB3, 0xFF, 0x93, 0x00, 0x00 ++ } ++}; ++ ++/* NAND header for Parallel NAND 4Gb with 2KB page + 128B spare */ ++static const union nand_boot_header nand_hdr_4gb_2k_128_data = { ++ .data = { ++ 0x42, 0x4F, 0x4F, 0x54, 0x4C, 0x4F, 0x41, 0x44, ++ 0x45, 0x52, 0x21, 0x00, 0x56, 0x30, 0x30, 0x36, ++ 0x4E, 0x46, 0x49, 0x49, 0x4E, 0x46, 0x4F, 0x00, ++ 0x00, 0x00, 0x00, 0x08, 0x05, 0x00, 0x70, 0x00, ++ 0x40, 0x00, 0x00, 0x10, 0x0B, 0x00, 0x11, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0xC2, 0x36, 0x52, 0x45, ++ 0xCC, 0x35, 0xD8, 0xDB, 0xEB, 0xFD, 0xD1, 0x46, ++ 0x76, 0x6B, 0x0B, 0xD5, 0x8B, 0xCC, 0x2B, 0xE2, ++ 0xFE, 0x90, 0x83, 0x9E, 0xAE, 0x2D, 0x00, 0x00 ++ } ++}; ++ ++static const struct nand_header_type { ++ const char *name; ++ const union nand_boot_header *data; ++} nand_headers[] = { ++ { ++ .name = "2k+64", ++ .data = &snand_hdr_2k_64_data ++ }, { ++ .name = "2k+120", ++ .data = &snand_hdr_2k_128_data ++ }, { ++ .name = "2k+128", ++ .data = &snand_hdr_2k_128_data ++ }, { ++ .name = "4k+256", ++ .data = &snand_hdr_4k_256_data ++ }, { ++ .name = "1g:2k+64", ++ .data = &nand_hdr_1gb_2k_64_data ++ }, { ++ .name = "2g:2k+64", ++ .data = &nand_hdr_2gb_2k_64_data ++ }, { ++ .name = "4g:2k+64", ++ .data = &nand_hdr_4gb_2k_64_data ++ }, { ++ .name = "2g:2k+128", ++ .data = &nand_hdr_2gb_2k_128_data ++ }, { ++ .name = "4g:2k+128", ++ .data = &nand_hdr_4gb_2k_128_data ++ } ++}; ++ ++const union nand_boot_header *mtk_nand_header_find(const char *name) ++{ ++ uint32_t i; ++ ++ for (i = 0; i < ARRAY_SIZE(nand_headers); i++) { ++ if (!strcmp(nand_headers[i].name, name)) ++ return nand_headers[i].data; ++ } ++ ++ return NULL; ++} ++ ++uint32_t mtk_nand_header_size(const union nand_boot_header *hdr_nand) ++{ ++ return 2 * le16_to_cpu(hdr_nand->pagesize); ++} ++ ++static int mtk_nand_header_ap_info(const void *ptr, ++ struct nand_header_info *info) ++{ ++ union nand_boot_header *nh = (union nand_boot_header *)ptr; ++ ++ if (strncmp(nh->version, NAND_BOOT_VERSION, sizeof(nh->version)) || ++ strcmp(nh->id, NAND_BOOT_ID)) ++ return -1; ++ ++ info->page_size = le16_to_cpu(nh->pagesize); ++ info->spare_size = le16_to_cpu(nh->oobsize); ++ info->gfh_offset = 2 * info->page_size; ++ ++ return 0; ++} ++ ++int mtk_nand_header_info(const void *ptr, struct nand_header_info *info) ++{ ++ if (!strcmp((char *)ptr, NAND_BOOT_NAME)) ++ return mtk_nand_header_ap_info(ptr, info); ++ ++ return -1; ++} ++ ++bool is_mtk_nand_header(const void *ptr) ++{ ++ struct nand_header_info info; ++ ++ if (mtk_nand_header_info(ptr, &info) >= 0) ++ return true; ++ ++ return false; ++} ++ ++uint32_t mtk_nand_header_put(const union nand_boot_header *hdr_nand, void *ptr) ++{ ++ union nand_boot_header *nh = (union nand_boot_header *)ptr; ++ int i; ++ ++ /* NAND device header, repeat 4 times */ ++ for (i = 0; i < 4; i++) ++ memcpy(nh + i, hdr_nand, sizeof(union nand_boot_header)); ++ ++ return le16_to_cpu(hdr_nand->pagesize); ++} +--- /dev/null ++++ b/tools/mtk_nand_headers.h +@@ -0,0 +1,61 @@ ++/* SPDX-License-Identifier: GPL-2.0+ */ ++/* ++ * MediaTek BootROM NAND header definitions ++ * ++ * Copyright (C) 2022 MediaTek Inc. ++ * Author: Weijie Gao ++ */ ++ ++#ifndef _MTK_NAND_HEADERS_H ++#define _MTK_NAND_HEADERS_H ++ ++#include ++#include ++ ++struct nand_header_info { ++ uint32_t page_size; ++ uint32_t spare_size; ++ uint32_t gfh_offset; ++}; ++ ++/* AP BROM Header for NAND */ ++union nand_boot_header { ++ struct { ++ char name[12]; ++ char version[4]; ++ char id[8]; ++ uint16_t ioif; /* I/O interface */ ++ uint16_t pagesize; /* NAND page size */ ++ uint16_t addrcycles; /* Address cycles */ ++ uint16_t oobsize; /* NAND page spare size */ ++ uint16_t pages_of_block; /* Pages of one block */ ++ uint16_t numblocks; /* Total blocks of NAND chip */ ++ uint16_t writesize_shift; ++ uint16_t erasesize_shift; ++ uint8_t dummy[60]; ++ uint8_t ecc_parity[28]; /* ECC parity of this header */ ++ }; ++ ++ uint8_t data[0x80]; ++}; ++ ++#define NAND_BOOT_NAME "BOOTLOADER!" ++#define NAND_BOOT_VERSION "V006" ++#define NAND_BOOT_ID "NFIINFO" ++ ++/* Find nand header data by name */ ++const union nand_boot_header *mtk_nand_header_find(const char *name); ++ ++/* Device header size using this nand header */ ++uint32_t mtk_nand_header_size(const union nand_boot_header *hdr_nand); ++ ++/* Get nand info from nand header (page size, spare size, ...) */ ++int mtk_nand_header_info(const void *ptr, struct nand_header_info *info); ++ ++/* Whether given header data is valid */ ++bool is_mtk_nand_header(const void *ptr); ++ ++/* Generate Device header using give nand header */ ++uint32_t mtk_nand_header_put(const union nand_boot_header *hdr_nand, void *ptr); ++ ++#endif /* _MTK_NAND_HEADERS_H */ diff --git a/tools/mkimage/patches/022-tools-mtk_image-add-support-for-nand-headers-used-by.patch b/tools/mkimage/patches/022-tools-mtk_image-add-support-for-nand-headers-used-by.patch new file mode 100644 index 00000000000..12ff7f32de5 --- /dev/null +++ b/tools/mkimage/patches/022-tools-mtk_image-add-support-for-nand-headers-used-by.patch @@ -0,0 +1,702 @@ +From fbf296f9ed5daab70020686e9ba072efe663bbab Mon Sep 17 00:00:00 2001 +From: Weijie Gao +Date: Wed, 3 Aug 2022 11:14:36 +0800 +Subject: [PATCH 30/31] tools: mtk_image: add support for nand headers used by + newer chips + +This patch adds more nand headers in two new types: +1. HSM header, used for spi-nand thru SNFI interface +2. SPIM header, used for spi-nand thru spi-mem interface + +The original nand header is renamed to AP header. + +Signed-off-by: Weijie Gao +--- + tools/mtk_image.c | 23 ++- + tools/mtk_nand_headers.c | 422 +++++++++++++++++++++++++++++++++++++-- + tools/mtk_nand_headers.h | 110 +++++++++- + 3 files changed, 525 insertions(+), 30 deletions(-) + +--- a/tools/mtk_image.c ++++ b/tools/mtk_image.c +@@ -31,6 +31,9 @@ static const struct brom_img_type { + }, { + .name = "snand", + .type = BRLYT_TYPE_SNAND ++ }, { ++ .name = "spim-nand", ++ .type = BRLYT_TYPE_SNAND + } + }; + +@@ -48,7 +51,7 @@ static bool is_arm64_image; + static char lk_name[32] = "U-Boot"; + + /* NAND header selected by user */ +-static const union nand_boot_header *hdr_nand; ++static const struct nand_header_type *hdr_nand; + static uint32_t hdr_nand_size; + + /* GFH header + 2 * 4KB pages of NAND */ +@@ -318,20 +321,26 @@ static int mtk_image_verify_nand_header( + if (ret < 0) + return ret; + +- bh = (struct brom_layout_header *)(ptr + info.page_size); ++ if (!ret) { ++ bh = (struct brom_layout_header *)(ptr + info.page_size); + +- if (strcmp(bh->name, BRLYT_NAME)) +- return -1; ++ if (strcmp(bh->name, BRLYT_NAME)) ++ return -1; ++ ++ if (le32_to_cpu(bh->magic) != BRLYT_MAGIC) ++ return -1; + +- if (le32_to_cpu(bh->magic) != BRLYT_MAGIC) { +- return -1; +- } else { + if (le32_to_cpu(bh->type) == BRLYT_TYPE_NAND) + bootmedia = "Parallel NAND"; + else if (le32_to_cpu(bh->type) == BRLYT_TYPE_SNAND) + bootmedia = "Serial NAND (SNFI/AP)"; + else + return -1; ++ } else { ++ if (info.snfi) ++ bootmedia = "Serial NAND (SNFI/HSM)"; ++ else ++ bootmedia = "Serial NAND (SPIM)"; + } + + if (print) { +--- a/tools/mtk_nand_headers.c ++++ b/tools/mtk_nand_headers.c +@@ -188,55 +188,346 @@ static const union nand_boot_header nand + } + }; + +-static const struct nand_header_type { ++/* HSM BROM NAND header for SPI NAND with 2KB page + 64B spare */ ++static const union hsm_nand_boot_header hsm_nand_hdr_2k_64_data = { ++ .data = { ++ 0x4E, 0x41, 0x4E, 0x44, 0x43, 0x46, 0x47, 0x21, ++ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, ++ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x08, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, ++ 0x40, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, ++ 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, ++ 0xFF, 0x00, 0x00, 0x00, 0x21, 0xD2, 0xEE, 0xF6, ++ 0xAE, 0xDD, 0x5E, 0xC2, 0x82, 0x8E, 0x9A, 0x62, ++ 0x09, 0x8E, 0x80, 0xE2, 0x37, 0x0D, 0xC9, 0xFA, ++ 0xA9, 0xDD, 0xFC, 0x92, 0x34, 0x2A, 0xED, 0x51, ++ 0xA4, 0x1B, 0xF7, 0x63, 0xCC, 0x5A, 0xC7, 0xFB, ++ 0xED, 0x21, 0x02, 0x23, 0x51, 0x31 ++ } ++}; ++ ++/* HSM BROM NAND header for SPI NAND with 2KB page + 128B spare */ ++static const union hsm_nand_boot_header hsm_nand_hdr_2k_128_data = { ++ .data = { ++ 0x4E, 0x41, 0x4E, 0x44, 0x43, 0x46, 0x47, 0x21, ++ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, ++ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x08, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, ++ 0x40, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, ++ 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, ++ 0xFF, 0x00, 0x00, 0x00, 0x71, 0x7f, 0x71, 0xAC, ++ 0x42, 0xD0, 0x5B, 0xD2, 0x12, 0x81, 0x15, 0x0A, ++ 0x0C, 0xD4, 0xF6, 0x32, 0x1E, 0x63, 0xE7, 0x81, ++ 0x8A, 0x7F, 0xDE, 0xF9, 0x4B, 0x91, 0xEC, 0xC2, ++ 0x70, 0x00, 0x7F, 0x57, 0xAF, 0xDC, 0xE4, 0x24, ++ 0x57, 0x09, 0xBC, 0xC5, 0x35, 0xDC ++ } ++}; ++ ++/* HSM BROM NAND header for SPI NAND with 4KB page + 256B spare */ ++static const union hsm_nand_boot_header hsm_nand_hdr_4k_256_data = { ++ .data = { ++ 0x4E, 0x41, 0x4E, 0x44, 0x43, 0x46, 0x47, 0x21, ++ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, ++ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, ++ 0x40, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, ++ 0x0C, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, ++ 0xFF, 0x00, 0x00, 0x00, 0x62, 0x04, 0xD6, 0x1F, ++ 0x2B, 0x57, 0x7A, 0x2D, 0xFE, 0xBB, 0x4A, 0x50, ++ 0xEC, 0xF8, 0x70, 0x1A, 0x44, 0x15, 0xF6, 0xA2, ++ 0x8E, 0xB0, 0xFD, 0xFA, 0xDC, 0xAA, 0x5A, 0x4E, ++ 0xCB, 0x8E, 0xC9, 0x72, 0x08, 0xDC, 0x20, 0xB9, ++ 0x98, 0xC8, 0x82, 0xD8, 0xBE, 0x44 ++ } ++}; ++ ++/* HSM2.0 BROM NAND header for SPI NAND with 2KB page + 64B spare */ ++static const union hsm20_nand_boot_header hsm20_nand_hdr_2k_64_data = { ++ .data = { ++ 0x4E, 0x41, 0x4E, 0x44, 0x43, 0x46, 0x47, 0x21, ++ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, ++ 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, ++ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x08, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, ++ 0x40, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, ++ 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, ++ 0x01, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, ++ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x5F, 0x4B, 0xB2, 0x5B, 0x8B, 0x1C, 0x35, 0xDA, ++ 0x83, 0xE6, 0x6C, 0xC3, 0xFB, 0x8C, 0x78, 0x23, ++ 0xD0, 0x89, 0x24, 0xD9, 0x6C, 0x35, 0x2C, 0x5D, ++ 0x8F, 0xBB, 0xFC, 0x10, 0xD0, 0xE2, 0x22, 0x7D, ++ 0xC8, 0x97, 0x9A, 0xEF, 0xC6, 0xB5, 0xA7, 0x4E, ++ 0x4E, 0x0E ++ } ++}; ++ ++/* HSM2.0 BROM NAND header for SPI NAND with 2KB page + 128B spare */ ++static const union hsm20_nand_boot_header hsm20_nand_hdr_2k_128_data = { ++ .data = { ++ 0x4E, 0x41, 0x4E, 0x44, 0x43, 0x46, 0x47, 0x21, ++ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, ++ 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, ++ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x08, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, ++ 0x40, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, ++ 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, ++ 0x01, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, ++ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0xF8, 0x7E, 0xC1, 0x5D, 0x61, 0x54, 0xEA, 0x9F, ++ 0x5E, 0x66, 0x39, 0x66, 0x21, 0xFF, 0x8C, 0x3B, ++ 0xBE, 0xA7, 0x5A, 0x9E, 0xD7, 0xBD, 0x9E, 0x89, ++ 0xEE, 0x7E, 0x10, 0x31, 0x9A, 0x1D, 0x82, 0x49, ++ 0xA3, 0x4E, 0xD8, 0x47, 0xD7, 0x19, 0xF4, 0x2D, ++ 0x8E, 0x53 ++ } ++}; ++ ++/* HSM2.0 BROM NAND header for SPI NAND with 4KB page + 256B spare */ ++static const union hsm20_nand_boot_header hsm20_nand_hdr_4k_256_data = { ++ .data = { ++ 0x4E, 0x41, 0x4E, 0x44, 0x43, 0x46, 0x47, 0x21, ++ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, ++ 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, ++ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, ++ 0x40, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, ++ 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, ++ 0x01, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, ++ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x79, 0x01, 0x1F, 0x86, 0x62, 0x6A, 0x43, 0xAE, ++ 0xE6, 0xF8, 0xDD, 0x5B, 0x29, 0xB7, 0xA2, 0x7F, ++ 0x29, 0x72, 0x54, 0x37, 0xBE, 0x50, 0xD4, 0x24, ++ 0xAB, 0x60, 0xF4, 0x44, 0x97, 0x3B, 0x65, 0x21, ++ 0x73, 0x24, 0x1F, 0x93, 0x0E, 0x9E, 0x96, 0x88, ++ 0x78, 0x6C ++ } ++}; ++ ++/* SPIM-NAND header for SPI NAND with 2KB page + 64B spare */ ++static const union spim_nand_boot_header spim_nand_hdr_2k_64_data = { ++ .data = { ++ 0x53, 0x50, 0x49, 0x4e, 0x41, 0x4e, 0x44, 0x21, ++ 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, ++ 0x00, 0x08, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, ++ 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x30, ++ 0x01, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ++ } ++}; ++ ++/* SPIM-NAND header for SPI NAND with 2KB page + 128B spare */ ++static const union spim_nand_boot_header spim_nand_hdr_2k_128_data = { ++ .data = { ++ 0x53, 0x50, 0x49, 0x4e, 0x41, 0x4e, 0x44, 0x21, ++ 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, ++ 0x00, 0x08, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, ++ 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x30, ++ 0x01, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ++ } ++}; ++ ++/* SPIM-NAND header for SPI NAND with 4KB page + 256B spare */ ++static const union spim_nand_boot_header spim_nand_hdr_4k_256_data = { ++ .data = { ++ 0x53, 0x50, 0x49, 0x4e, 0x41, 0x4e, 0x44, 0x21, ++ 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, ++ 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, ++ 0x40, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x30, ++ 0x01, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ++ } ++}; ++ ++struct nand_header_type { + const char *name; +- const union nand_boot_header *data; ++ enum nand_boot_header_type type; ++ union { ++ const union nand_boot_header *ap; ++ const union hsm_nand_boot_header *hsm; ++ const union hsm20_nand_boot_header *hsm20; ++ const union spim_nand_boot_header *spim; ++ }; + } nand_headers[] = { + { + .name = "2k+64", +- .data = &snand_hdr_2k_64_data ++ .type = NAND_BOOT_AP_HEADER, ++ .ap = &snand_hdr_2k_64_data, + }, { + .name = "2k+120", +- .data = &snand_hdr_2k_128_data ++ .type = NAND_BOOT_AP_HEADER, ++ .ap = &snand_hdr_2k_128_data, + }, { + .name = "2k+128", +- .data = &snand_hdr_2k_128_data ++ .type = NAND_BOOT_AP_HEADER, ++ .ap = &snand_hdr_2k_128_data, + }, { + .name = "4k+256", +- .data = &snand_hdr_4k_256_data ++ .type = NAND_BOOT_AP_HEADER, ++ .ap = &snand_hdr_4k_256_data, + }, { + .name = "1g:2k+64", +- .data = &nand_hdr_1gb_2k_64_data ++ .type = NAND_BOOT_AP_HEADER, ++ .ap = &nand_hdr_1gb_2k_64_data, + }, { + .name = "2g:2k+64", +- .data = &nand_hdr_2gb_2k_64_data ++ .type = NAND_BOOT_AP_HEADER, ++ .ap = &nand_hdr_2gb_2k_64_data, + }, { + .name = "4g:2k+64", +- .data = &nand_hdr_4gb_2k_64_data ++ .type = NAND_BOOT_AP_HEADER, ++ .ap = &nand_hdr_4gb_2k_64_data, + }, { + .name = "2g:2k+128", +- .data = &nand_hdr_2gb_2k_128_data ++ .type = NAND_BOOT_AP_HEADER, ++ .ap = &nand_hdr_2gb_2k_128_data, + }, { + .name = "4g:2k+128", +- .data = &nand_hdr_4gb_2k_128_data ++ .type = NAND_BOOT_AP_HEADER, ++ .ap = &nand_hdr_4gb_2k_128_data, ++ }, { ++ .name = "hsm:2k+64", ++ .type = NAND_BOOT_HSM_HEADER, ++ .hsm = &hsm_nand_hdr_2k_64_data, ++ }, { ++ .name = "hsm:2k+128", ++ .type = NAND_BOOT_HSM_HEADER, ++ .hsm = &hsm_nand_hdr_2k_128_data, ++ }, { ++ .name = "hsm:4k+256", ++ .type = NAND_BOOT_HSM_HEADER, ++ .hsm = &hsm_nand_hdr_4k_256_data, ++ }, { ++ .name = "hsm20:2k+64", ++ .type = NAND_BOOT_HSM20_HEADER, ++ .hsm20 = &hsm20_nand_hdr_2k_64_data, ++ }, { ++ .name = "hsm20:2k+128", ++ .type = NAND_BOOT_HSM20_HEADER, ++ .hsm20 = &hsm20_nand_hdr_2k_128_data, ++ }, { ++ .name = "hsm20:4k+256", ++ .type = NAND_BOOT_HSM20_HEADER, ++ .hsm20 = &hsm20_nand_hdr_4k_256_data, ++ }, { ++ .name = "spim:2k+64", ++ .type = NAND_BOOT_SPIM_HEADER, ++ .spim = &spim_nand_hdr_2k_64_data, ++ }, { ++ .name = "spim:2k+128", ++ .type = NAND_BOOT_SPIM_HEADER, ++ .spim = &spim_nand_hdr_2k_128_data, ++ }, { ++ .name = "spim:4k+256", ++ .type = NAND_BOOT_SPIM_HEADER, ++ .spim = &spim_nand_hdr_4k_256_data, + } + }; + +-const union nand_boot_header *mtk_nand_header_find(const char *name) ++const struct nand_header_type *mtk_nand_header_find(const char *name) + { + uint32_t i; + + for (i = 0; i < ARRAY_SIZE(nand_headers); i++) { + if (!strcmp(nand_headers[i].name, name)) +- return nand_headers[i].data; ++ return &nand_headers[i]; + } + + return NULL; + } + +-uint32_t mtk_nand_header_size(const union nand_boot_header *hdr_nand) ++uint32_t mtk_nand_header_size(const struct nand_header_type *hdr_nand) + { +- return 2 * le16_to_cpu(hdr_nand->pagesize); ++ switch (hdr_nand->type) { ++ case NAND_BOOT_HSM_HEADER: ++ return le32_to_cpu(hdr_nand->hsm->page_size); ++ ++ case NAND_BOOT_HSM20_HEADER: ++ return le32_to_cpu(hdr_nand->hsm20->page_size); ++ ++ case NAND_BOOT_SPIM_HEADER: ++ return le32_to_cpu(hdr_nand->spim->page_size); ++ ++ default: ++ return 2 * le16_to_cpu(hdr_nand->ap->pagesize); ++ } + } + + static int mtk_nand_header_ap_info(const void *ptr, +@@ -251,14 +542,45 @@ static int mtk_nand_header_ap_info(const + info->page_size = le16_to_cpu(nh->pagesize); + info->spare_size = le16_to_cpu(nh->oobsize); + info->gfh_offset = 2 * info->page_size; ++ info->snfi = true; + + return 0; + } + ++static int mtk_nand_header_hsm_info(const void *ptr, ++ struct nand_header_info *info) ++{ ++ union hsm_nand_boot_header *nh = (union hsm_nand_boot_header *)ptr; ++ ++ info->page_size = le16_to_cpu(nh->page_size); ++ info->spare_size = le16_to_cpu(nh->spare_size); ++ info->gfh_offset = info->page_size; ++ info->snfi = true; ++ ++ return 1; ++} ++ ++static int mtk_nand_header_spim_info(const void *ptr, ++ struct nand_header_info *info) ++{ ++ union spim_nand_boot_header *nh = (union spim_nand_boot_header *)ptr; ++ ++ info->page_size = le16_to_cpu(nh->page_size); ++ info->spare_size = le16_to_cpu(nh->spare_size); ++ info->gfh_offset = info->page_size; ++ info->snfi = false; ++ ++ return 1; ++} ++ + int mtk_nand_header_info(const void *ptr, struct nand_header_info *info) + { + if (!strcmp((char *)ptr, NAND_BOOT_NAME)) + return mtk_nand_header_ap_info(ptr, info); ++ else if (!strncmp((char *)ptr, HSM_NAND_BOOT_NAME, 8)) ++ return mtk_nand_header_hsm_info(ptr, info); ++ else if (!strncmp((char *)ptr, SPIM_NAND_BOOT_NAME, 8)) ++ return mtk_nand_header_spim_info(ptr, info); + + return -1; + } +@@ -273,14 +595,74 @@ bool is_mtk_nand_header(const void *ptr) + return false; + } + +-uint32_t mtk_nand_header_put(const union nand_boot_header *hdr_nand, void *ptr) ++static uint16_t crc16(const uint8_t *p, uint32_t len) ++{ ++ uint16_t crc = 0x4f4e; ++ uint32_t i; ++ ++ while (len--) { ++ crc ^= *p++ << 8; ++ for (i = 0; i < 8; i++) ++ crc = (crc << 1) ^ ((crc & 0x8000) ? 0x8005 : 0); ++ } ++ ++ return crc; ++} ++ ++static uint32_t mtk_nand_header_put_ap(const struct nand_header_type *hdr_nand, ++ void *ptr) + { +- union nand_boot_header *nh = (union nand_boot_header *)ptr; + int i; + + /* NAND device header, repeat 4 times */ +- for (i = 0; i < 4; i++) +- memcpy(nh + i, hdr_nand, sizeof(union nand_boot_header)); ++ for (i = 0; i < 4; i++) { ++ memcpy(ptr, hdr_nand->ap, sizeof(*hdr_nand->ap)); ++ ptr += sizeof(*hdr_nand->ap); ++ } ++ ++ return le16_to_cpu(hdr_nand->ap->pagesize); ++} + +- return le16_to_cpu(hdr_nand->pagesize); ++static uint32_t mtk_nand_header_put_hsm(const struct nand_header_type *hdr_nand, ++ void *ptr) ++{ ++ memcpy(ptr, hdr_nand->hsm, sizeof(*hdr_nand->hsm)); ++ return 0; ++} ++ ++static uint32_t mtk_nand_header_put_hsm20(const struct nand_header_type *hdr_nand, ++ void *ptr) ++{ ++ memcpy(ptr, hdr_nand->hsm20, sizeof(*hdr_nand->hsm20)); ++ return 0; ++} ++ ++static uint32_t mtk_nand_header_put_spim(const struct nand_header_type *hdr_nand, ++ void *ptr) ++{ ++ uint16_t crc; ++ ++ memcpy(ptr, hdr_nand->spim, sizeof(*hdr_nand->spim)); ++ ++ crc = crc16(ptr, 0x4e); ++ memcpy(ptr + 0x4e, &crc, sizeof(uint16_t)); ++ ++ return 0; ++} ++ ++uint32_t mtk_nand_header_put(const struct nand_header_type *hdr_nand, void *ptr) ++{ ++ switch (hdr_nand->type) { ++ case NAND_BOOT_HSM_HEADER: ++ return mtk_nand_header_put_hsm(hdr_nand, ptr); ++ ++ case NAND_BOOT_HSM20_HEADER: ++ return mtk_nand_header_put_hsm20(hdr_nand, ptr); ++ ++ case NAND_BOOT_SPIM_HEADER: ++ return mtk_nand_header_put_spim(hdr_nand, ptr); ++ ++ default: ++ return mtk_nand_header_put_ap(hdr_nand, ptr); ++ } + } +--- a/tools/mtk_nand_headers.h ++++ b/tools/mtk_nand_headers.h +@@ -16,6 +16,7 @@ struct nand_header_info { + uint32_t page_size; + uint32_t spare_size; + uint32_t gfh_offset; ++ bool snfi; + }; + + /* AP BROM Header for NAND */ +@@ -39,15 +40,117 @@ union nand_boot_header { + uint8_t data[0x80]; + }; + ++/* HSM BROM Header for NAND */ ++union hsm_nand_boot_header { ++ struct { ++ char id[8]; ++ uint32_t version; /* Header version */ ++ uint32_t config; /* Header config */ ++ uint32_t sector_size; /* ECC step size */ ++ uint32_t fdm_size; /* User OOB size of a step */ ++ uint32_t fdm_ecc_size; /* ECC parity size of a step */ ++ uint32_t lbs; ++ uint32_t page_size; /* NAND page size */ ++ uint32_t spare_size; /* NAND page spare size */ ++ uint32_t page_per_block; /* Pages of one block */ ++ uint32_t blocks; /* Total blocks of NAND chip */ ++ uint32_t plane_sel_position; /* Plane bit position */ ++ uint32_t pll; /* Value of pll reg */ ++ uint32_t acccon; /* Value of access timing reg */ ++ uint32_t strobe_sel; /* Value of DQS selection reg*/ ++ uint32_t acccon1; /* Value of access timing reg */ ++ uint32_t dqs_mux; /* Value of DQS mux reg */ ++ uint32_t dqs_ctrl; /* Value of DQS control reg */ ++ uint32_t delay_ctrl; /* Value of delay ctrl reg */ ++ uint32_t latch_lat; /* Value of latch latency reg */ ++ uint32_t sample_delay; /* Value of sample delay reg */ ++ uint32_t driving; /* Value of driving reg */ ++ uint32_t bl_start; /* Bootloader start addr */ ++ uint32_t bl_end; /* Bootloader end addr */ ++ uint8_t ecc_parity[42]; /* ECC parity of this header */ ++ }; ++ ++ uint8_t data[0x8E]; ++}; ++ ++/* HSM2.0 BROM Header for NAND */ ++union hsm20_nand_boot_header { ++ struct { ++ char id[8]; ++ uint32_t version; /* Header version */ ++ uint32_t config; /* Header config */ ++ uint32_t sector_size; /* ECC step size */ ++ uint32_t fdm_size; /* User OOB size of a step */ ++ uint32_t fdm_ecc_size; /* ECC parity size of a step */ ++ uint32_t lbs; ++ uint32_t page_size; /* NAND page size */ ++ uint32_t spare_size; /* NAND page spare size */ ++ uint32_t page_per_block; /* Pages of one block */ ++ uint32_t blocks; /* Total blocks of NAND chip */ ++ uint32_t plane_sel_position; /* Plane bit position */ ++ uint32_t pll; /* Value of pll reg */ ++ uint32_t acccon; /* Value of access timing reg */ ++ uint32_t strobe_sel; /* Value of DQS selection reg*/ ++ uint32_t acccon1; /* Value of access timing reg */ ++ uint32_t dqs_mux; /* Value of DQS mux reg */ ++ uint32_t dqs_ctrl; /* Value of DQS control reg */ ++ uint32_t delay_ctrl; /* Value of delay ctrl reg */ ++ uint32_t latch_lat; /* Value of latch latency reg */ ++ uint32_t sample_delay; /* Value of sample delay reg */ ++ uint32_t driving; /* Value of driving reg */ ++ uint32_t reserved; ++ uint32_t bl0_start; /* Bootloader start addr */ ++ uint32_t bl0_end; /* Bootloader end addr */ ++ uint32_t bl0_type; /* Bootloader type */ ++ uint8_t bl_reserve[84]; ++ uint8_t ecc_parity[42]; /* ECC parity of this header */ ++ }; ++ ++ uint8_t data[0xEA]; ++}; ++ ++/* SPIM BROM Header for SPI-NAND */ ++union spim_nand_boot_header { ++ struct { ++ char id[8]; ++ uint32_t version; /* Header version */ ++ uint32_t config; /* Header config */ ++ uint32_t page_size; /* NAND page size */ ++ uint32_t spare_size; /* NAND page spare size */ ++ uint16_t page_per_block; /* Pages of one block */ ++ uint16_t plane_sel_position; /* Plane bit position */ ++ uint16_t reserve_reg; ++ uint16_t reserve_val; ++ uint16_t ecc_error; /* ECC error reg addr */ ++ uint16_t ecc_mask; /* ECC error bit mask */ ++ uint32_t bl_start; /* Bootloader start addr */ ++ uint32_t bl_end; /* Bootloader end addr */ ++ uint8_t ecc_parity[32]; /* ECC parity of this header */ ++ uint32_t integrity_crc; /* CRC of this header */ ++ }; ++ ++ uint8_t data[0x50]; ++}; ++ ++enum nand_boot_header_type { ++ NAND_BOOT_AP_HEADER, ++ NAND_BOOT_HSM_HEADER, ++ NAND_BOOT_HSM20_HEADER, ++ NAND_BOOT_SPIM_HEADER ++}; ++ + #define NAND_BOOT_NAME "BOOTLOADER!" + #define NAND_BOOT_VERSION "V006" + #define NAND_BOOT_ID "NFIINFO" + ++#define HSM_NAND_BOOT_NAME "NANDCFG!" ++#define SPIM_NAND_BOOT_NAME "SPINAND!" ++ + /* Find nand header data by name */ +-const union nand_boot_header *mtk_nand_header_find(const char *name); ++const struct nand_header_type *mtk_nand_header_find(const char *name); + + /* Device header size using this nand header */ +-uint32_t mtk_nand_header_size(const union nand_boot_header *hdr_nand); ++uint32_t mtk_nand_header_size(const struct nand_header_type *hdr_nand); + + /* Get nand info from nand header (page size, spare size, ...) */ + int mtk_nand_header_info(const void *ptr, struct nand_header_info *info); +@@ -56,6 +159,7 @@ int mtk_nand_header_info(const void *ptr + bool is_mtk_nand_header(const void *ptr); + + /* Generate Device header using give nand header */ +-uint32_t mtk_nand_header_put(const union nand_boot_header *hdr_nand, void *ptr); ++uint32_t mtk_nand_header_put(const struct nand_header_type *hdr_nand, ++ void *ptr); + + #endif /* _MTK_NAND_HEADERS_H */ diff --git a/tools/mkimage/patches/030-allow-to-use-different-magic.patch b/tools/mkimage/patches/030-allow-to-use-different-magic.patch index c6de9a0aaf6..b97cd819cc4 100644 --- a/tools/mkimage/patches/030-allow-to-use-different-magic.patch +++ b/tools/mkimage/patches/030-allow-to-use-different-magic.patch @@ -1,6 +1,8 @@ +This patch makes it possible to set a custom image magic. + --- a/tools/mkimage.c +++ b/tools/mkimage.c -@@ -21,6 +21,7 @@ static struct image_tool_params params = +@@ -25,6 +25,7 @@ static struct image_tool_params params = .arch = IH_ARCH_PPC, .type = IH_TYPE_KERNEL, .comp = IH_COMP_GZIP, @@ -8,8 +10,8 @@ .dtc = MKIMAGE_DEFAULT_DTC_OPTIONS, .imagename = "", .imagename2 = "", -@@ -77,11 +78,12 @@ static void usage(const char *msg) - " -l ==> list image header information\n", +@@ -88,11 +89,12 @@ static void usage(const char *msg) + " -q ==> quiet\n", params.cmdname); fprintf(stderr, - " %s [-x] -A arch -O os -T type -C comp -a addr -e ep -n name -d data_file[:data_file...] image\n" @@ -22,16 +24,16 @@ " -a ==> set load address to 'addr' (hex)\n" " -e ==> set entry point to 'ep' (hex)\n" " -n ==> set image name to 'name'\n" -@@ -144,7 +146,7 @@ static void process_args(int argc, char +@@ -163,7 +165,7 @@ static void process_args(int argc, char int opt; while ((opt = getopt(argc, argv, -- "a:A:b:c:C:d:D:e:Ef:Fk:i:K:ln:N:p:O:rR:qsT:vVx")) != -1) { -+ "a:A:b:c:C:d:D:e:Ef:Fk:i:K:lM:n:N:p:O:rR:qsT:vVx")) != -1) { +- "a:A:b:B:c:C:d:D:e:Ef:FG:k:i:K:ln:N:p:o:O:rR:qstT:vVx")) != -1) { ++ "a:A:b:B:c:C:d:D:e:Ef:FG:k:i:K:lM:n:N:p:o:O:rR:qstT:vVx")) != -1) { switch (opt) { case 'a': params.addr = strtoull(optarg, &ptr, 16); -@@ -222,6 +224,14 @@ static void process_args(int argc, char +@@ -254,6 +256,14 @@ static void process_args(int argc, char case 'l': params.lflag = 1; break; @@ -48,18 +50,27 @@ break; --- a/tools/default_image.c +++ b/tools/default_image.c -@@ -106,7 +106,7 @@ static void image_set_header(void *ptr, - imagesize = sbuf->st_size - sizeof(image_header_t); +@@ -56,7 +56,7 @@ static int image_verify_header(unsigned + */ + memcpy(hdr, ptr, sizeof(image_header_t)); + +- if (be32_to_cpu(hdr->ih_magic) != IH_MAGIC) { ++ if (be32_to_cpu(hdr->ih_magic) != params->magic) { + debug("%s: Bad Magic Number: \"%s\" is no valid image\n", + params->cmdname, params->imagefile); + return -FDT_ERR_BADMAGIC; +@@ -120,7 +120,7 @@ static void image_set_header(void *ptr, + } /* Build new header */ - image_set_magic(hdr, IH_MAGIC); + image_set_magic(hdr, params->magic); image_set_time(hdr, time); image_set_size(hdr, imagesize); - image_set_load(hdr, params->addr); + image_set_load(hdr, addr); --- a/tools/imagetool.h +++ b/tools/imagetool.h -@@ -54,6 +54,7 @@ struct image_tool_params { +@@ -59,6 +59,7 @@ struct image_tool_params { int arch; int type; int comp; diff --git a/tools/mkimage/patches/050-Add-compatibility-with-non-Linux-hosts.patch b/tools/mkimage/patches/050-Add-compatibility-with-non-Linux-hosts.patch new file mode 100644 index 00000000000..7b71dce3b3f --- /dev/null +++ b/tools/mkimage/patches/050-Add-compatibility-with-non-Linux-hosts.patch @@ -0,0 +1,65 @@ +From 590b23a46b7ae0f5ec5e8f57a85c0e7578c71141 Mon Sep 17 00:00:00 2001 +From: Hauke Mehrtens +Date: Sun, 26 Apr 2020 17:15:17 +0200 +Subject: [PATCH 1/2] Add compatibility with non Linux hosts + +This adds some changes to the u-boot tools to make it possible to build +them on non Linux hosts like MacOS or FreeBSD. + +asm/byteorder.h, asm/posix_types.h, asm/types.h and linux/kernel.h are +not available on such systems. Remove the include and add the necessary +parts for these header files manually or remove the usage too. + +__u64 is not available on FreeBSD, remove its usage. + +Signed-off-by: Hauke Mehrtens +--- + include/image.h | 2 ++ + include/linux/posix_types.h | 2 ++ + include/linux/types.h | 4 +++- + 3 files changed, 7 insertions(+), 1 deletion(-) + +--- a/include/image.h ++++ b/include/image.h +@@ -16,7 +16,9 @@ + #define __IMAGE_H__ + + #include "compiler.h" ++#ifdef linux + #include ++#endif + #include + + /* Define this to avoid #ifdefs later on */ +--- a/include/linux/posix_types.h ++++ b/include/linux/posix_types.h +@@ -43,6 +43,8 @@ typedef void (*__kernel_sighandler_t)(in + /* Type of a SYSV IPC key. */ + typedef int __kernel_key_t; + ++#ifdef linux + #include ++#endif + + #endif /* _LINUX_POSIX_TYPES_H */ +--- a/include/linux/types.h ++++ b/include/linux/types.h +@@ -2,7 +2,9 @@ + #define _LINUX_TYPES_H + + #include ++#ifdef linux + #include ++#endif + #include + + #ifndef __KERNEL_STRICT_NAMES +@@ -142,7 +144,7 @@ typedef __u16 __bitwise __le16; + typedef __u16 __bitwise __be16; + typedef __u32 __bitwise __le32; + typedef __u32 __bitwise __be32; +-#if defined(__GNUC__) ++#if defined(__GNUC__) && defined(linux) + typedef __u64 __bitwise __le64; + typedef __u64 __bitwise __be64; + #endif diff --git a/tools/mkimage/patches/050-image_h_portability.patch b/tools/mkimage/patches/050-image_h_portability.patch deleted file mode 100644 index dabab399080..00000000000 --- a/tools/mkimage/patches/050-image_h_portability.patch +++ /dev/null @@ -1,31 +0,0 @@ ---- a/include/image.h -+++ b/include/image.h -@@ -17,7 +17,6 @@ - #define __IMAGE_H__ - - #include "compiler.h" --#include - - /* Define this to avoid #ifdefs later on */ - struct lmb; -@@ -308,13 +307,13 @@ enum { - * all data in network byte order (aka natural aka bigendian). - */ - typedef struct image_header { -- __be32 ih_magic; /* Image Header Magic Number */ -- __be32 ih_hcrc; /* Image Header CRC Checksum */ -- __be32 ih_time; /* Image Creation Timestamp */ -- __be32 ih_size; /* Image Data Size */ -- __be32 ih_load; /* Data Load Address */ -- __be32 ih_ep; /* Entry Point Address */ -- __be32 ih_dcrc; /* Image Data CRC Checksum */ -+ uint32_t ih_magic; /* Image Header Magic Number */ -+ uint32_t ih_hcrc; /* Image Header CRC Checksum */ -+ uint32_t ih_time; /* Image Creation Timestamp */ -+ uint32_t ih_size; /* Image Data Size */ -+ uint32_t ih_load; /* Data Load Address */ -+ uint32_t ih_ep; /* Entry Point Address */ -+ uint32_t ih_dcrc; /* Image Data CRC Checksum */ - uint8_t ih_os; /* Operating System */ - uint8_t ih_arch; /* CPU architecture */ - uint8_t ih_type; /* Image Type */ diff --git a/tools/mkimage/patches/050-increase-path-and-filename-length.patch b/tools/mkimage/patches/050-increase-path-and-filename-length.patch deleted file mode 100644 index b53d740889f..00000000000 --- a/tools/mkimage/patches/050-increase-path-and-filename-length.patch +++ /dev/null @@ -1,15 +0,0 @@ -Index: u-boot-2018.03/tools/mkimage.h -=================================================================== ---- u-boot-2018.03.orig/tools/mkimage.h -+++ u-boot-2018.03/tools/mkimage.h -@@ -41,8 +41,8 @@ static inline ulong map_to_sysmem(void * - } - - #define MKIMAGE_TMPFILE_SUFFIX ".tmp" --#define MKIMAGE_MAX_TMPFILE_LEN 256 -+#define MKIMAGE_MAX_TMPFILE_LEN 2048 - #define MKIMAGE_DEFAULT_DTC_OPTIONS "-I dts -O dtb -p 500" --#define MKIMAGE_MAX_DTC_CMDLINE_LEN 512 -+#define MKIMAGE_MAX_DTC_CMDLINE_LEN 2048 - - #endif /* _MKIIMAGE_H_ */ diff --git a/tools/mkimage/patches/051-increase-dtb-file-size.patch b/tools/mkimage/patches/051-increase-dtb-file-size.patch deleted file mode 100644 index 819d457f1ad..00000000000 --- a/tools/mkimage/patches/051-increase-dtb-file-size.patch +++ /dev/null @@ -1,13 +0,0 @@ -Index: u-boot-2018.03/tools/mkimage.h -=================================================================== ---- u-boot-2018.03.orig/tools/mkimage.h -+++ u-boot-2018.03/tools/mkimage.h -@@ -42,7 +42,7 @@ static inline ulong map_to_sysmem(void * - - #define MKIMAGE_TMPFILE_SUFFIX ".tmp" - #define MKIMAGE_MAX_TMPFILE_LEN 2048 --#define MKIMAGE_DEFAULT_DTC_OPTIONS "-I dts -O dtb -p 500" -+#define MKIMAGE_DEFAULT_DTC_OPTIONS "-I dts -O dtb -p 2000" - #define MKIMAGE_MAX_DTC_CMDLINE_LEN 2048 - - #endif /* _MKIIMAGE_H_ */ diff --git a/tools/mkimage/patches/060-remove_kernel_includes.patch b/tools/mkimage/patches/060-remove_kernel_includes.patch deleted file mode 100644 index 0d69b992143..00000000000 --- a/tools/mkimage/patches/060-remove_kernel_includes.patch +++ /dev/null @@ -1,34 +0,0 @@ ---- a/include/compiler.h -+++ b/include/compiler.h -@@ -66,6 +66,10 @@ typedef uint8_t __u8; - typedef uint16_t __u16; - typedef uint32_t __u32; - typedef unsigned int uint; -+#ifndef linux -+typedef int __kernel_daddr_t; -+typedef unsigned int __kernel_ino_t; -+#endif - - #define uswap_16(x) \ - ((((x) & 0xff00) >> 8) | \ ---- a/include/linux/posix_types.h -+++ b/include/linux/posix_types.h -@@ -43,6 +43,8 @@ typedef void (*__kernel_sighandler_t)(in - /* Type of a SYSV IPC key. */ - typedef int __kernel_key_t; - -+#ifdef linux - #include -+#endif - - #endif /* _LINUX_POSIX_TYPES_H */ ---- a/include/linux/types.h -+++ b/include/linux/types.h -@@ -2,7 +2,6 @@ - #define _LINUX_TYPES_H - - #include --#include - #include - - #ifndef __KERNEL_STRICT_NAMES diff --git a/tools/mkimage/patches/080-remove_compiler_check.patch b/tools/mkimage/patches/080-remove_compiler_check.patch deleted file mode 100644 index 5e0792f25f3..00000000000 --- a/tools/mkimage/patches/080-remove_compiler_check.patch +++ /dev/null @@ -1,16 +0,0 @@ ---- a/include/linux/compiler-gcc.h -+++ b/include/linux/compiler-gcc.h -@@ -146,13 +146,6 @@ - - #if GCC_VERSION >= 40000 - --/* GCC 4.1.[01] miscompiles __weak */ --#ifdef __KERNEL__ --# if GCC_VERSION >= 40100 && GCC_VERSION <= 40101 --# error Your version of gcc miscompiles the __weak directive --# endif --#endif -- - #define __used __attribute__((__used__)) - #define __compiler_offsetof(a, b) \ - __builtin_offsetof(a, b) diff --git a/tools/mkimage/patches/095-tools-disable-TOOLS_FIT_FULL_CHECK.patch b/tools/mkimage/patches/095-tools-disable-TOOLS_FIT_FULL_CHECK.patch new file mode 100644 index 00000000000..f2e3b9b0530 --- /dev/null +++ b/tools/mkimage/patches/095-tools-disable-TOOLS_FIT_FULL_CHECK.patch @@ -0,0 +1,25 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Huangbin Zhan +Date: Fri, 18 Feb 2022 14:19:23 +0800 +Subject: [PATCH] tools: disable TOOLS_FIT_FULL_CHECK + + U-Boot disallows unit addresses by default. Disable TOOLS_FIT_FULL_CHECK + to allow at symbol in node names. + +https://github.com/openwrt/openwrt/commits/master/scripts/mkits.sh +https://github.com/u-boot/u-boot/commit/3f04db891a353f4b127ed57279279f851c6b4917 +--- + tools/Kconfig | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/tools/Kconfig ++++ b/tools/Kconfig +@@ -31,7 +31,7 @@ config TOOLS_FIT + Enable FIT support in the tools builds. + + config TOOLS_FIT_FULL_CHECK +- def_bool y ++ bool "Do a full check of the FIT" + help + Do a full check of the FIT before using it in the tools builds + diff --git a/tools/mkimage/patches/100-freebsd-compat.patch b/tools/mkimage/patches/100-freebsd-compat.patch deleted file mode 100644 index 1567285714d..00000000000 --- a/tools/mkimage/patches/100-freebsd-compat.patch +++ /dev/null @@ -1,14 +0,0 @@ ---- a/Makefile -+++ b/Makefile -@@ -634,7 +634,10 @@ UBOOTINCLUDE := \ - -I$(srctree)/arch/$(ARCH)/include \ - -include $(srctree)/include/linux/kconfig.h - --NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include) -+ifneq ($(shell uname),FreeBSD) -+ NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include) -+endif -+ - CHECKFLAGS += $(NOSTDINC_FLAGS) - - # FIX ME diff --git a/tools/mkimage/patches/100-increase-tmpfile-name-length-limit.patch b/tools/mkimage/patches/100-increase-tmpfile-name-length-limit.patch new file mode 100644 index 00000000000..aae89356012 --- /dev/null +++ b/tools/mkimage/patches/100-increase-tmpfile-name-length-limit.patch @@ -0,0 +1,11 @@ +--- a/tools/mkimage.h ++++ b/tools/mkimage.h +@@ -44,7 +44,7 @@ static inline ulong map_to_sysmem(void * + #define ALLOC_CACHE_ALIGN_BUFFER(type, name, size) type name[size] + + #define MKIMAGE_TMPFILE_SUFFIX ".tmp" +-#define MKIMAGE_MAX_TMPFILE_LEN 256 ++#define MKIMAGE_MAX_TMPFILE_LEN 1024 + #define MKIMAGE_DEFAULT_DTC_OPTIONS "-I dts -O dtb -p 500" + #define MKIMAGE_MAX_DTC_CMDLINE_LEN 2 * MKIMAGE_MAX_TMPFILE_LEN + 35 + diff --git a/tools/mkimage/patches/200-rsa-sign-add-support-for-libressl.patch b/tools/mkimage/patches/200-rsa-sign-add-support-for-libressl.patch deleted file mode 100644 index 29058e22b71..00000000000 --- a/tools/mkimage/patches/200-rsa-sign-add-support-for-libressl.patch +++ /dev/null @@ -1,68 +0,0 @@ -From 69176c8602e29f4bd30457240374800d88dc39ed Mon Sep 17 00:00:00 2001 -From: Hauke Mehrtens -Date: Sat, 14 Apr 2018 22:39:34 +0200 -Subject: [PATCH] rsa-sign: add support for libressl - ---- - lib/rsa/rsa-sign.c | 15 +++++++++------ - 1 file changed, 9 insertions(+), 6 deletions(-) - ---- a/lib/rsa/rsa-sign.c -+++ b/lib/rsa/rsa-sign.c -@@ -21,7 +21,8 @@ - #define HAVE_ERR_REMOVE_THREAD_STATE - #endif - --#if OPENSSL_VERSION_NUMBER < 0x10100000L -+#if OPENSSL_VERSION_NUMBER < 0x10100000L || \ -+ (defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x2070000fL) - static void RSA_get0_key(const RSA *r, - const BIGNUM **n, const BIGNUM **e, const BIGNUM **d) - { -@@ -300,7 +301,8 @@ static int rsa_init(void) - { - int ret; - --#if OPENSSL_VERSION_NUMBER < 0x10100000L -+#if OPENSSL_VERSION_NUMBER < 0x10100000L || \ -+ (defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x2070000fL) - ret = SSL_library_init(); - #else - ret = OPENSSL_init_ssl(0, NULL); -@@ -309,7 +311,7 @@ static int rsa_init(void) - fprintf(stderr, "Failure to init SSL library\n"); - return -1; - } --#if OPENSSL_VERSION_NUMBER < 0x10100000L -+#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) - SSL_load_error_strings(); - - OpenSSL_add_all_algorithms(); -@@ -355,7 +357,7 @@ err_set_rsa: - err_engine_init: - ENGINE_free(e); - err_engine_by_id: --#if OPENSSL_VERSION_NUMBER < 0x10100000L -+#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) - ENGINE_cleanup(); - #endif - return ret; -@@ -363,7 +365,7 @@ err_engine_by_id: - - static void rsa_remove(void) - { --#if OPENSSL_VERSION_NUMBER < 0x10100000L -+#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) - CRYPTO_cleanup_all_ex_data(); - ERR_free_strings(); - #ifdef HAVE_ERR_REMOVE_THREAD_STATE -@@ -433,7 +435,8 @@ static int rsa_sign_with_key(RSA *rsa, s - ret = rsa_err("Could not obtain signature"); - goto err_sign; - } -- #if OPENSSL_VERSION_NUMBER < 0x10100000L -+ #if OPENSSL_VERSION_NUMBER < 0x10100000L || \ -+ defined(LIBRESSL_VERSION_NUMBER) - EVP_MD_CTX_cleanup(context); - #else - EVP_MD_CTX_reset(context); diff --git a/tools/mkimage/patches/210-link-libcrypto-static.patch b/tools/mkimage/patches/210-link-libcrypto-static.patch deleted file mode 100644 index 66412ce43b5..00000000000 --- a/tools/mkimage/patches/210-link-libcrypto-static.patch +++ /dev/null @@ -1,14 +0,0 @@ -OpenWrt links the libressl statically against mkimage, make sure all the -needed dependencies are added too. - ---- a/tools/Makefile -+++ b/tools/Makefile -@@ -145,7 +145,7 @@ endif - # MXSImage needs LibSSL - ifneq ($(CONFIG_MX23)$(CONFIG_MX28)$(CONFIG_ARMADA_38X)$(CONFIG_ARMADA_39X)$(CONFIG_FIT_SIGNATURE),) - HOSTLOADLIBES_mkimage += \ -- $(shell pkg-config --libs libssl libcrypto 2> /dev/null || echo "-lssl -lcrypto") -+ $(shell pkg-config --libs --static libssl libcrypto 2> /dev/null || echo "-lssl -lcrypto") - - # OS X deprecate openssl in favour of CommonCrypto, supress deprecation - # warnings on those systems diff --git a/tools/mklibs/Makefile b/tools/mklibs/Makefile index 8826840524c..efa912bf6df 100644 --- a/tools/mklibs/Makefile +++ b/tools/mklibs/Makefile @@ -7,11 +7,11 @@ include $(TOPDIR)/rules.mk PKG_NAME:=mklibs -PKG_VERSION:=0.1.35 +PKG_VERSION:=0.1.45 -PKG_SOURCE:=$(PKG_NAME)_$(PKG_VERSION).tar.gz -PKG_SOURCE_URL:=http://ftp.de.debian.org/debian/pool/main/m/mklibs/ -PKG_HASH:=ccb1023dc1729c5a37ca6c3eca8e4bac3491116763c8820dfce8eea4845c8567 +PKG_SOURCE:=$(PKG_NAME)_$(PKG_VERSION).tar.xz +PKG_SOURCE_URL:=@DEBIAN/pool/main/m/mklibs/ +PKG_HASH:=dd92a904b3942566f713fe536cd77dd1a5cfc62243c0e0bc6bb5d866e37422f3 HOST_FIXUP:=autoreconf diff --git a/tools/mklibs/patches/002-disable_symbol_checks.patch b/tools/mklibs/patches/002-disable_symbol_checks.patch index 44be637609d..96ca7a5f83f 100644 --- a/tools/mklibs/patches/002-disable_symbol_checks.patch +++ b/tools/mklibs/patches/002-disable_symbol_checks.patch @@ -1,20 +1,20 @@ --- a/src/mklibs +++ b/src/mklibs -@@ -524,7 +524,7 @@ while 1: +@@ -533,7 +533,7 @@ while 1: # No progress in last pass. Verify all remaining symbols are weak. for name in unresolved: if not needed_symbols[name].weak: - raise Exception("Unresolvable symbol %s" % name) -+ print "WARNING: Unresolvable symbol %s" % name ++ print("WARNING: Unresolvable symbol %s" % name) break previous_pass_unresolved = unresolved -@@ -559,7 +559,7 @@ while 1: +@@ -568,7 +568,7 @@ while 1: for name in needed_symbols: if not name in symbol_provider: if not needed_symbols[name].weak: - raise Exception("No library provides non-weak %s" % name) -+ print "WARNING: Unresolvable symbol %s" % name ++ print("WARNING: Unresolvable symbol %s" % name) else: lib = symbol_provider[name] library_symbols_used[lib].add(library_symbols[lib][name]) diff --git a/tools/mklibs/patches/003-no_copy.patch b/tools/mklibs/patches/003-no_copy.patch index e0ab2ac88d1..bc1ae8d73dd 100644 --- a/tools/mklibs/patches/003-no_copy.patch +++ b/tools/mklibs/patches/003-no_copy.patch @@ -1,6 +1,6 @@ --- a/src/mklibs +++ b/src/mklibs -@@ -463,7 +463,7 @@ while 1: +@@ -472,7 +472,7 @@ while 1: passnr = passnr + 1 # Gather all already reduced libraries and treat them as objects as well small_libs = [] @@ -9,7 +9,7 @@ obj = dest_path + "/" + lib small_libs.append(obj) inode = os.stat(obj)[ST_INO] -@@ -579,12 +579,7 @@ while 1: +@@ -588,12 +588,7 @@ while 1: if not so_file: sys.exit("File not found:" + library) pic_file = find_pic(library) @@ -23,7 +23,7 @@ # we have a pic file, recompile debug(DEBUG_SPAM, "extracting from:", pic_file, "so_file:", so_file) soname = extract_soname(so_file) -@@ -627,22 +622,14 @@ while 1: +@@ -636,22 +631,14 @@ while 1: cmd.append(library_depends_gcc_libnames(so_file)) command(target + "gcc", *cmd) @@ -32,11 +32,11 @@ - dest_path + "/" + so_file_name + "-so", - dest_path + "/" + so_file_name + "-so-stripped") ## DEBUG - debug(DEBUG_VERBOSE, so_file, "\t", `os.stat(so_file)[ST_SIZE]`) + debug(DEBUG_VERBOSE, so_file, "\t", str(os.stat(so_file)[ST_SIZE])) debug(DEBUG_VERBOSE, dest_path + "/" + so_file_name + "-so", "\t", - `os.stat(dest_path + "/" + so_file_name + "-so")[ST_SIZE]`) + str(os.stat(dest_path + "/" + so_file_name + "-so")[ST_SIZE])) - debug(DEBUG_VERBOSE, dest_path + "/" + so_file_name + "-so-stripped", -- "\t", `os.stat(dest_path + "/" + so_file_name + "-so-stripped")[ST_SIZE]`) +- "\t", str(os.stat(dest_path + "/" + so_file_name + "-so-stripped")[ST_SIZE])) # Finalising libs and cleaning up -for lib in regexpfilter(os.listdir(dest_path), "(.*)-so-stripped$"): @@ -47,4 +47,4 @@ + os.rename(dest_path + "/" + lib + "-so", dest_path + "/" + lib) # Canonicalize library names. - for lib in regexpfilter(os.listdir(dest_path), "(.*so[.\d]*)$"): + for lib in sorted(regexpfilter(os.listdir(dest_path), "(.*so[.\d]*)$")): diff --git a/tools/mklibs/patches/004-libpthread_link.patch b/tools/mklibs/patches/004-libpthread_link.patch index 657e232b0cb..3a630ea288a 100644 --- a/tools/mklibs/patches/004-libpthread_link.patch +++ b/tools/mklibs/patches/004-libpthread_link.patch @@ -17,7 +17,7 @@ if match.group('ld'): ret.append(find_lib(match.group(0))) elif match.group('lib'): -@@ -619,7 +619,7 @@ while 1: +@@ -628,7 +628,7 @@ while 1: cmd.extend(extra_flags) cmd.append("-lgcc") cmd.extend(["-L%s" % a for a in [dest_path] + [sysroot + b for b in lib_path if sysroot == "" or b not in ("/" + libdir + "/", "/usr/" + libdir + "/")]]) diff --git a/tools/mklibs/patches/005-duplicate_syms.patch b/tools/mklibs/patches/005-duplicate_syms.patch index 8428abfc9a0..2627203fabb 100644 --- a/tools/mklibs/patches/005-duplicate_syms.patch +++ b/tools/mklibs/patches/005-duplicate_syms.patch @@ -1,6 +1,6 @@ --- a/src/mklibs +++ b/src/mklibs -@@ -531,7 +531,6 @@ while 1: +@@ -540,7 +540,6 @@ while 1: library_symbols = {} library_symbols_used = {} @@ -8,7 +8,7 @@ # WORKAROUND: Always add libgcc on old-abi arm header = elf_header(find_lib(libraries.copy().pop())) -@@ -549,20 +548,13 @@ while 1: +@@ -558,20 +557,13 @@ while 1: library_symbols_used[library] = set() for symbol in symbols: for name in symbol.base_names(): @@ -23,7 +23,7 @@ for name in needed_symbols: - if not name in symbol_provider: - if not needed_symbols[name].weak: -- print "WARNING: Unresolvable symbol %s" % name +- print("WARNING: Unresolvable symbol %s" % name) - else: - lib = symbol_provider[name] - library_symbols_used[lib].add(library_symbols[lib][name]) @@ -32,4 +32,4 @@ + library_symbols_used[lib].add(library_symbols[lib][name]) # reduce libraries - for library in libraries: + for library in sorted(libraries): diff --git a/tools/mklibs/patches/006-uclibc_init.patch b/tools/mklibs/patches/006-uclibc_init.patch deleted file mode 100644 index 2df7fe43556..00000000000 --- a/tools/mklibs/patches/006-uclibc_init.patch +++ /dev/null @@ -1,14 +0,0 @@ ---- a/src/mklibs -+++ b/src/mklibs -@@ -595,6 +595,11 @@ while 1: - extra_post_obj.append(sysroot + libc_extras_dir + "/sofini.o") - symbols.add(ProvidedSymbol('__dso_handle', None, None, True)) - -+ if soname in ("libc.so.0"): -+ symbols.add(ProvidedSymbol('__uClibc_init', None, None, True)) -+ symbols.add(ProvidedSymbol('__uClibc_fini', None, None, True)) -+ extra_flags.append("-Wl,-init,__uClibc_init") -+ - map_file = find_pic_map(library) - if map_file: - extra_flags.append("-Wl,--version-script=" + map_file) diff --git a/tools/mklibs/patches/007-gc_sections.patch b/tools/mklibs/patches/007-gc_sections.patch index 068d88a532a..3d098ae4267 100644 --- a/tools/mklibs/patches/007-gc_sections.patch +++ b/tools/mklibs/patches/007-gc_sections.patch @@ -1,6 +1,6 @@ --- a/src/mklibs +++ b/src/mklibs -@@ -607,7 +607,7 @@ while 1: +@@ -611,7 +611,7 @@ while 1: # compile in only used symbols cmd = [] cmd.extend(gcc_options) diff --git a/tools/mklibs/patches/008-uclibc_libgcc_link.patch b/tools/mklibs/patches/008-uclibc_libgcc_link.patch index 432a313b6c3..a221278d2ad 100644 --- a/tools/mklibs/patches/008-uclibc_libgcc_link.patch +++ b/tools/mklibs/patches/008-uclibc_libgcc_link.patch @@ -14,7 +14,7 @@ return ' '.join(ret) class Symbol(object): -@@ -584,6 +581,7 @@ while 1: +@@ -593,6 +590,7 @@ while 1: extra_flags = [] extra_pre_obj = [] extra_post_obj = [] @@ -22,7 +22,7 @@ symbols.update(library_symbols_used[library]) -@@ -614,9 +612,10 @@ while 1: +@@ -618,9 +616,10 @@ while 1: cmd.append(pic_file) cmd.extend(extra_post_obj) cmd.extend(extra_flags) diff --git a/tools/mklibs/patches/009-uclibc_libpthread_symbols.patch b/tools/mklibs/patches/009-uclibc_libpthread_symbols.patch deleted file mode 100644 index 34866f72905..00000000000 --- a/tools/mklibs/patches/009-uclibc_libpthread_symbols.patch +++ /dev/null @@ -1,63 +0,0 @@ ---- a/src/mklibs -+++ b/src/mklibs -@@ -162,9 +162,10 @@ def undefined_symbols(obj): - return result - - class ProvidedSymbol(Symbol): -- def __init__(self, name, version, library, default_version): -+ def __init__(self, name, version, library, default_version, weak): - super(ProvidedSymbol, self).__init__(name, version, library) - self.default_version = default_version -+ self.weak = weak - - def base_names(self): - ret = [] -@@ -205,11 +206,15 @@ def provided_symbols(obj): - if version_string.lower() not in ('base', 'none'): - version = version_string - -+ weak = False -+ if weak_string.lower() == 'true': -+ weak = True -+ - default_version = False - if default_version_string.lower() == 'true': - default_version = True - -- result.append(ProvidedSymbol(name, version, library, default_version)) -+ result.append(ProvidedSymbol(name, version, library, default_version, weak)) - - return result - -@@ -500,6 +505,9 @@ while 1: - debug(DEBUG_SPAM, "present_symbols adding %s" % symbol) - names = symbol.base_names() - for name in names: -+ if name in present_symbols: -+ if symbol.library != present_symbols[name].library: -+ needed_symbols[name] = UndefinedSymbol(name, True, symbol.version, symbol.library) - present_symbols[name] = symbol - - # are we finished? -@@ -591,12 +599,16 @@ while 1: - # may segfault in ptmalloc_init due to undefined weak reference - extra_pre_obj.append(sysroot + libc_extras_dir + "/soinit.o") - extra_post_obj.append(sysroot + libc_extras_dir + "/sofini.o") -- symbols.add(ProvidedSymbol('__dso_handle', None, None, True)) -+ symbols.add(ProvidedSymbol('__dso_handle', None, None, True, True)) - -- if soname in ("libc.so.0"): -- symbols.add(ProvidedSymbol('__uClibc_init', None, None, True)) -- symbols.add(ProvidedSymbol('__uClibc_fini', None, None, True)) -- extra_flags.append("-Wl,-init,__uClibc_init") -+ if soname == "libc.so.0": -+ symbols.add(ProvidedSymbol('__uClibc_init', None, None, True, True)) -+ symbols.add(ProvidedSymbol('__uClibc_fini', None, None, True, True)) -+ extra_pre_obj.append("-Wl,-init,__uClibc_init") -+ -+ if soname == "libpthread.so.0": -+ symbols.add(ProvidedSymbol('__pthread_initialize_minimal_internal', None, None, True, True)) -+ extra_flags.append("-Wl,-z,nodelete,-z,initfirst,-init=__pthread_initialize_minimal_internal") - - map_file = find_pic_map(library) - if map_file: diff --git a/tools/mklibs/patches/011-remove_multiarch.patch b/tools/mklibs/patches/011-remove_multiarch.patch index a32d8ee17a8..8c0bfdf1a09 100644 --- a/tools/mklibs/patches/011-remove_multiarch.patch +++ b/tools/mklibs/patches/011-remove_multiarch.patch @@ -1,6 +1,6 @@ --- a/src/mklibs +++ b/src/mklibs -@@ -263,6 +263,7 @@ def extract_soname(so_file): +@@ -269,6 +269,7 @@ def extract_soname(so_file): return "" def multiarch(paths): diff --git a/tools/mklibs/patches/100-apply-2to3.patch b/tools/mklibs/patches/100-apply-2to3.patch new file mode 100644 index 00000000000..dcacbab2052 --- /dev/null +++ b/tools/mklibs/patches/100-apply-2to3.patch @@ -0,0 +1,154 @@ +--- a/src/mklibs ++++ b/src/mklibs +@@ -57,17 +57,17 @@ debuglevel = DEBUG_NORMAL + + def debug(level, *msg): + if debuglevel >= level: +- print(string.join(msg)) ++ print(' '.join(msg)) + + # return a list of lines of output of the command + def command(command, *args): +- debug(DEBUG_SPAM, "calling", command, string.join(args)) ++ debug(DEBUG_SPAM, "calling", command, ' '.join(args)) + pipe = os.popen(command + ' ' + ' '.join(args), 'r') + output = pipe.read().strip() + status = pipe.close() + if status is not None and os.WEXITSTATUS(status) != 0: + print("Command failed with status", os.WEXITSTATUS(status), ":", \ +- command, string.join(args)) ++ command, ' '.join(args)) + print("With output:", output) + sys.exit(1) + return [i for i in output.split('\n') if i] +@@ -296,7 +296,7 @@ def usage(was_err): + print("Make a set of minimal libraries for FILE(s, file=outfd) in DEST.", file=outfd) + print("" , file=outfd) + print(" -d, --dest-dir DIRECTORY create libraries in DIRECTORY", file=outfd) +- print(" -D, --no-default-lib omit default libpath (", ':'.join(default_lib_path, file=outfd), ", file=outfd)", file=outfd) ++ print(" -D, --no-default-lib omit default libpath (", ':'.join(default_lib_path), ")", file=outfd) + print(" -L DIRECTORY[:DIRECTORY]... add DIRECTORY(s, file=outfd) to the library search path", file=outfd) + print(" -l LIBRARY add LIBRARY always", file=outfd) + print(" --ldlib LDLIB use LDLIB for the dynamic linker", file=outfd) +@@ -372,7 +372,7 @@ for opt, arg in optlist: + if debuglevel < DEBUG_SPAM: + debuglevel = debuglevel + 1 + elif opt == "-L": +- lib_path.extend(string.split(arg, ":")) ++ lib_path.extend(arg.split(":")) + elif opt in ("-d", "--dest-dir"): + dest_path = arg + elif opt in ("-D", "--no-default-lib"): +@@ -391,7 +391,7 @@ for opt, arg in optlist: + elif opt in ("-l",): + force_libs.append(arg) + elif opt == "--gcc-options": +- gcc_options.extend(string.split(arg, " ")) ++ gcc_options.extend(arg.split(" ")) + elif opt == "--libdir": + libdir = arg + elif opt in ("--help", "-h"): +@@ -419,17 +419,17 @@ if ldlib == "LDLIB": + objects = {} # map from inode to filename + for prog in proglist: + inode = os.stat(prog)[ST_INO] +- if objects.has_key(inode): ++ if inode in objects: + debug(DEBUG_SPAM, prog, "is a hardlink to", objects[inode]) + elif so_pattern.match(prog): + debug(DEBUG_SPAM, prog, "is a library") +- elif script_pattern.match(open(prog).read(256)): ++ elif script_pattern.match(open(prog, 'r', encoding='iso-8859-1').read(256)): + debug(DEBUG_SPAM, prog, "is a script") + else: + objects[inode] = prog + + if not ldlib: +- for obj in objects.values(): ++ for obj in list(objects.values()): + output = command("mklibs-readelf", "--print-interp", obj) + if output: + ldlib = output.pop() +@@ -462,9 +462,9 @@ previous_pass_unresolved = set() + while 1: + debug(DEBUG_NORMAL, "I: library reduction pass", str(passnr)) + if debuglevel >= DEBUG_VERBOSE: +- print("Objects:",) +- for obj in sorted([x[string.rfind(x, '/') + 1:] for x in objects.values()]): +- print(obj,) ++ print("Objects:", end=' ') ++ for obj in sorted([x[x.rfind('/') + 1:] for x in list(objects.values())]): ++ print(obj, end=' ') + print() + + passnr = passnr + 1 +@@ -474,7 +474,7 @@ while 1: + obj = dest_path + "/" + lib + small_libs.append(obj) + inode = os.stat(obj)[ST_INO] +- if objects.has_key(inode): ++ if inode in objects: + debug(DEBUG_SPAM, obj, "is hardlink to", objects[inode]) + else: + objects[inode] = obj +@@ -504,7 +504,7 @@ while 1: + present_symbols = {} + checked_libs = small_libs + checked_libs.extend(available_libs) +- checked_libs.append(ldlib) ++ checked_libs.append(sysroot + "/" + ldlib) + for lib in checked_libs: + for symbol in provided_symbols(lib): + debug(DEBUG_SPAM, "present_symbols adding %s" % symbol) +--- a/src/mklibs-copy ++++ b/src/mklibs-copy +@@ -159,7 +159,7 @@ if include_default_lib_path: + objects = {} # map from inode to filename + for prog in proglist: + inode = os.stat(prog)[ST_INO] +- if objects.has_key(inode): ++ if inode in objects: + logger.debug("%s is a hardlink to %s", prog, objects[inode]) + elif so_pattern.match(prog): + logger.debug("%s is a library", prog) +@@ -169,7 +169,7 @@ for prog in proglist: + logger.debug("%s is no ELF", prog) + + if not ldlib: +- for obj in objects.values(): ++ for obj in list(objects.values()): + output = command("mklibs-readelf", "-i", obj) + for x in output: + ldlib = x +@@ -182,7 +182,7 @@ if not ldlib: + logger.info('Using %s as dynamic linker', ldlib) + + # Check for rpaths +-for obj in objects.values(): ++for obj in list(objects.values()): + rpath_val = rpath(obj) + if rpath_val: + if root: +@@ -208,18 +208,18 @@ while 1: + obj = dest_path + "/" + lib + small_libs.append(obj) + inode = os.stat(obj)[ST_INO] +- if objects.has_key(inode): ++ if inode in objects: + logger.debug("%s is hardlink to %s", obj, objects[inode]) + else: + objects[inode] = obj + +- for obj in objects.values(): ++ for obj in list(objects.values()): + small_libs.append(obj) + +- logger.verbose('Objects: %r', ' '.join([i[i.rfind('/') + 1:] for i in objects.itervalues()])) ++ logger.verbose('Objects: %r', ' '.join([i[i.rfind('/') + 1:] for i in objects.values()])) + + libraries = set() +- for obj in objects.values(): ++ for obj in list(objects.values()): + libraries.update(library_depends(obj)) + + if libraries == previous_pass_libraries: From f59f1e8289d0feb93493f37d24f8dfc8d34e42b1 Mon Sep 17 00:00:00 2001 From: Isaev Ruslan Date: Wed, 7 Sep 2022 05:59:09 -0400 Subject: [PATCH 07/12] tools/mkimage patch to recognize arch aarch64 not only arm64 Signed-off-by: Isaev Ruslan --- tools/mkimage/patches/0666-aarch64-alias-added.patch | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 tools/mkimage/patches/0666-aarch64-alias-added.patch diff --git a/tools/mkimage/patches/0666-aarch64-alias-added.patch b/tools/mkimage/patches/0666-aarch64-alias-added.patch new file mode 100644 index 00000000000..cd0176ca6a5 --- /dev/null +++ b/tools/mkimage/patches/0666-aarch64-alias-added.patch @@ -0,0 +1,11 @@ +diff '--color=auto' -aur a/boot/image.c b/boot/image.c +--- a/boot/image.c 2022-09-07 05:52:05.468537304 -0400 ++++ b/boot/image.c 2022-09-07 05:50:16.084542072 -0400 +@@ -91,6 +91,7 @@ + { IH_ARCH_OPENRISC, "or1k", "OpenRISC 1000",}, + { IH_ARCH_SANDBOX, "sandbox", "Sandbox", }, + { IH_ARCH_ARM64, "arm64", "AArch64", }, ++ { IH_ARCH_ARM64, "aarch64", "AArch64", }, + { IH_ARCH_ARC, "arc", "ARC", }, + { IH_ARCH_X86_64, "x86_64", "AMD x86_64", }, + { IH_ARCH_XTENSA, "xtensa", "Xtensa", }, From 8fdcafcec468b43e5fa869e033629ee07040ed3f Mon Sep 17 00:00:00 2001 From: Isaev Ruslan Date: Fri, 9 Sep 2022 05:43:18 -0400 Subject: [PATCH 08/12] Revert "tools/mkimage patch to recognize arch aarch64 not only arm64" Useless without same patch to u-boot. This reverts commit f59f1e8289d0feb93493f37d24f8dfc8d34e42b1. --- tools/mkimage/patches/0666-aarch64-alias-added.patch | 11 ----------- 1 file changed, 11 deletions(-) delete mode 100644 tools/mkimage/patches/0666-aarch64-alias-added.patch diff --git a/tools/mkimage/patches/0666-aarch64-alias-added.patch b/tools/mkimage/patches/0666-aarch64-alias-added.patch deleted file mode 100644 index cd0176ca6a5..00000000000 --- a/tools/mkimage/patches/0666-aarch64-alias-added.patch +++ /dev/null @@ -1,11 +0,0 @@ -diff '--color=auto' -aur a/boot/image.c b/boot/image.c ---- a/boot/image.c 2022-09-07 05:52:05.468537304 -0400 -+++ b/boot/image.c 2022-09-07 05:50:16.084542072 -0400 -@@ -91,6 +91,7 @@ - { IH_ARCH_OPENRISC, "or1k", "OpenRISC 1000",}, - { IH_ARCH_SANDBOX, "sandbox", "Sandbox", }, - { IH_ARCH_ARM64, "arm64", "AArch64", }, -+ { IH_ARCH_ARM64, "aarch64", "AArch64", }, - { IH_ARCH_ARC, "arc", "ARC", }, - { IH_ARCH_X86_64, "x86_64", "AMD x86_64", }, - { IH_ARCH_XTENSA, "xtensa", "Xtensa", }, From b335dfd38a612416dfea3f0470745db93c344963 Mon Sep 17 00:00:00 2001 From: Isaev Ruslan Date: Sun, 11 Sep 2022 21:11:47 -0400 Subject: [PATCH 09/12] add device yuncore ax840; luci updated to https://git.codelinaro.org/clo/qsdk/luci/-/tree/github/openwrt-19.07 Signed-off-by: Isaev Ruslan --- Makefile | 9 + configs/8dev_mango_open_64 | 7778 +++++++++++++++++ .../luci-app-adblock/po/el/adblock.po | 8 +- .../luci-app-adblock/po/es/adblock.po | 18 +- .../luci-app-aria2/po/el/aria2.po | 6 +- .../luci-app-aria2/po/ko/aria2.po | 12 +- .../po/el/attendedsysupgrade.po | 6 +- .../po/es/attendedsysupgrade.po | 8 +- .../po/zh_Hant/attendedsysupgrade.po | 6 +- .../luci-app-banip/po/el/banip.po | 4 +- .../luci-app-banip/po/es/banip.po | 6 +- .../applications/luci-app-bmx7/po/ko/bmx7.po | 8 +- .../luci-app-dcwapd/po/ko/dcwapd.po | 8 +- .../applications/luci-app-ddns/po/ko/ddns.po | 14 +- .../applications/luci-app-ddns/po/pt/ddns.po | 10 +- .../po/es/dnscrypt-proxy.po | 8 +- .../luci-app-dynapoint/po/sv/dynapoint.po | 34 +- .../luci-app-fwknopd/po/ko/fwknopd.po | 8 +- .../luci-app-hd-idle/po/pt/hd-idle.po | 8 +- .../luci-app-ksmbd/po/ko/ksmbd.po | 18 +- .../applications/luci-app-lxc/po/ko/lxc.po | 8 +- .../applications/luci-app-lxc/po/ru/lxc.po | 9 +- .../luci-app-minidlna/po/ko/minidlna.po | 8 +- .../luci-app-mwan3/po/el/mwan3.po | 8 +- .../luci-app-mwan3/po/ko/mwan3.po | 14 +- .../luci-app-mwan3/po/sv/mwan3.po | 8 +- .../luci-app-nft-qos/po/el/nft-qos.po | 8 +- .../luci-app-nlbwmon/po/ko/nlbwmon.po | 8 +- .../applications/luci-app-nut/po/ko/nut.po | 8 +- .../luci-app-ocserv/po/el/ocserv.po | 10 +- .../luci-app-ocserv/po/ko/ocserv.po | 8 +- .../applications/luci-app-olsr/po/ko/olsr.po | 12 +- .../luci-app-openvpn/po/sv/openvpn.po | 54 +- .../applications/luci-app-opkg/po/pt/opkg.po | 18 +- .../luci-app-p910nd/po/el/p910nd.po | 6 +- .../luci-app-p910nd/po/pt/p910nd.po | 8 +- .../luci-app-pagekitec/po/de/pagekitec.po | 12 +- .../luci-app-polipo/po/el/polipo.po | 10 +- .../applications/luci-app-qos/po/el/qos.po | 31 +- .../applications/luci-app-qos/po/ko/qos.po | 10 +- .../applications/luci-app-qos/po/vi/qos.po | 9 +- .../luci-app-radicale/po/ko/radicale.po | 14 +- .../luci-app-radicale2/po/el/radicale2.po | 8 +- .../luci-app-radicale2/po/ko/radicale2.po | 8 +- .../luci-app-samba4/po/ko/samba4.po | 28 +- .../po/ko/shadowsocks-libev.po | 6 +- .../po/pl/shadowsocks-libev.po | 16 +- .../po/pt/shadowsocks-libev.po | 4 +- .../po/pt_BR/shadowsocks-libev.po | 4 +- .../po/tr/shadowsocks-libev.po | 6 +- .../po/zh_Hans/shadowsocks-libev.po | 6 +- .../po/ko/simple-adblock.po | 12 +- .../luci-app-splash/po/el/splash.po | 8 +- .../luci-app-splash/po/ko/splash.po | 10 +- .../luci-app-squid/po/el/squid.po | 12 +- .../luci-app-statistics/po/el/statistics.po | 8 +- .../luci-app-statistics/po/ko/statistics.po | 14 +- .../luci-app-statistics/po/pt/statistics.po | 8 +- .../root/usr/bin/stat-genconfig | 10 +- .../luci-app-tinyproxy/po/el/tinyproxy.po | 95 +- .../po/ko/transmission.po | 14 +- .../luci-app-travelmate/po/el/travelmate.po | 6 +- .../applications/luci-app-ttyd/po/ko/ttyd.po | 8 +- .../luci-app-udpxy/po/de/udpxy.po | 18 +- .../luci-app-uhttpd/po/ru/uhttpd.po | 6 +- .../luci-app-uhttpd/po/sv/uhttpd.po | 12 +- .../applications/luci-app-upnp/po/el/upnp.po | 8 +- .../applications/luci-app-upnp/po/ko/upnp.po | 8 +- .../luci-app-vnstat/po/ko/vnstat.po | 34 +- .../po/el/vpn-policy-routing.po | 6 +- .../luci-app-wireguard/po/el/wireguard.po | 6 +- .../luci-app-wireguard/po/es/wireguard.po | 4 +- .../luci/contrib/package/lucihttp/Makefile | 3 +- .../luci-base/luasrc/sys/zoneinfo/tzdata.lua | 4 +- .../luci/modules/luci-base/po/el/base.po | 8 +- .../luci/modules/luci-base/po/es/base.po | 2 +- .../luci/modules/luci-base/po/ko/base.po | 28 +- .../luci/modules/luci-base/po/pl/base.po | 2 +- .../luci/modules/luci-base/po/pt/base.po | 14 +- .../luci/modules/luci-base/po/ru/base.po | 4 +- .../luci/modules/luci-base/po/zh_Hant/base.po | 8 +- qca/src/linux-5.4/arch/arm/boot/dts/Makefile | 3 +- .../arch/arm/boot/dts/yuncore-ax840.dts | 1 + .../arch/arm64/boot/dts/qcom/Makefile | 3 +- .../arm64/boot/dts/qcom/yuncore-ax840.dts | 1 + target/linux/ipq60xx/image/ipq60xx.mk | 31 +- 86 files changed, 8295 insertions(+), 468 deletions(-) create mode 100644 configs/8dev_mango_open_64 create mode 100644 qca/src/linux-5.4/arch/arm/boot/dts/yuncore-ax840.dts create mode 120000 qca/src/linux-5.4/arch/arm64/boot/dts/qcom/yuncore-ax840.dts diff --git a/Makefile b/Makefile index 2edac24f264..eb511cfccf7 100644 --- a/Makefile +++ b/Makefile @@ -134,6 +134,15 @@ world: prepare $(target/stamp-compile) $(package/stamp-compile) $(package/stamp- $(_SINGLE)$(SUBMAKE) -r json_overview_image_info $(_SINGLE)$(SUBMAKE) -r checksum + +include $(TOPDIR)/rules.mk +include $(TOPDIR)/include/image.mk +dts: + $(call Image/BuildDTB,$(DTS_DIR)/$(dts).dts,$(DTS_DIR)/$(dts).dtb) + + + + .PHONY: clean dirclean prereq prepare world package/symlinks package/symlinks-install package/symlinks-clean endif diff --git a/configs/8dev_mango_open_64 b/configs/8dev_mango_open_64 new file mode 100644 index 00000000000..f08eb11dec8 --- /dev/null +++ b/configs/8dev_mango_open_64 @@ -0,0 +1,7778 @@ +# +# Automatically generated file; DO NOT EDIT. +# OpenWrt Configuration +# +CONFIG_MODULES=y +CONFIG_HAVE_DOT_CONFIG=y +# CONFIG_TARGET_sunxi is not set +# CONFIG_TARGET_apm821xx is not set +# CONFIG_TARGET_ath25 is not set +# CONFIG_TARGET_ar71xx is not set +# CONFIG_TARGET_ath79 is not set +# CONFIG_TARGET_brcm2708 is not set +# CONFIG_TARGET_bcm53xx is not set +# CONFIG_TARGET_brcm47xx is not set +# CONFIG_TARGET_brcm63xx is not set +# CONFIG_TARGET_cns3xxx is not set +# CONFIG_TARGET_octeon is not set +# CONFIG_TARGET_gemini is not set +# CONFIG_TARGET_mpc85xx is not set +# CONFIG_TARGET_imx6 is not set +# CONFIG_TARGET_mxs is not set +# CONFIG_TARGET_lantiq is not set +# CONFIG_TARGET_malta is not set +# CONFIG_TARGET_pistachio is not set +# CONFIG_TARGET_mvebu is not set +# CONFIG_TARGET_kirkwood is not set +# CONFIG_TARGET_mediatek is not set +# CONFIG_TARGET_ramips is not set +# CONFIG_TARGET_at91 is not set +# CONFIG_TARGET_rb532 is not set +# CONFIG_TARGET_tegra is not set +# CONFIG_TARGET_layerscape is not set +# CONFIG_TARGET_octeontx is not set +# CONFIG_TARGET_oxnas is not set +# CONFIG_TARGET_armvirt is not set +# CONFIG_TARGET_ipq40xx is not set +# CONFIG_TARGET_ipq806x is not set +# CONFIG_TARGET_ipq807x is not set +# CONFIG_TARGET_ipq50xx is not set +CONFIG_TARGET_ipq60xx=y +# CONFIG_TARGET_ipq95xx is not set +# CONFIG_TARGET_samsung is not set +# CONFIG_TARGET_arc770 is not set +# CONFIG_TARGET_archs38 is not set +# CONFIG_TARGET_omap is not set +# CONFIG_TARGET_uml is not set +# CONFIG_TARGET_zynq is not set +# CONFIG_TARGET_x86 is not set +CONFIG_TARGET_ipq60xx_generic=y +# CONFIG_TARGET_ipq60xx_ipq60xx_32=n +# CONFIG_TARGET_MULTI_PROFILE is not set +# CONFIG_TARGET_ipq60xx_ipq60xx_32_Default is not set +# CONFIG_TARGET_ipq60xx_ipq60xx_32_QSDK_Premium is not set +#CONFIG_TARGET_ipq60xx_ipq60xx_32_QSDK_Open=n +CONFIG_TARGET_ipq60xx_generic_QSDK_Open=y +# CONFIG_TARGET_ipq60xx_ipq60xx_32_QSDK_QBuilder is not set +# CONFIG_TARGET_ipq60xx_ipq60xx_32_QSDK_Enterprise is not set +# CONFIG_TARGET_ipq60xx_ipq60xx_32_QSDK_MinEnt is not set +# CONFIG_TARGET_ipq60xx_ipq60xx_32_QSDK_256 is not set +# CONFIG_TARGET_ipq60xx_ipq60xx_32_QSDK_512 is not set +# CONFIG_TARGET_ipq60xx_ipq60xx_32_QSDK_8M is not set +# CONFIG_TARGET_ipq60xx_ipq60xx_32_QSDK_16M is not set +# CONFIG_TARGET_ipq60xx_ipq60xx_32_DEVICE_8devices-mango-dvk is not set +CONFIG_HAS_SUBTARGETS=y +CONFIG_HAS_DEVICES=y +CONFIG_TARGET_BOARD="ipq60xx" +CONFIG_TARGET_SUBTARGET="generic" +CONFIG_TARGET_PROFILE="QSDK_Open" +CONFIG_TARGET_ARCH_PACKAGES="aarch64_cortex-a53_neon-vfpv4" +CONFIG_DEFAULT_TARGET_OPTIMIZATION="-O2 -pipe -march=armv8-a -mcpu=cortex-a53+crypto" +CONFIG_CPU_TYPE="cortex-a53+neon-vfpv4" +CONFIG_LINUX_5_4=y +CONFIG_DEFAULT_464xlat=y +CONFIG_DEFAULT_6rd=y +CONFIG_DEFAULT_alsa=y +CONFIG_DEFAULT_arptables=y +CONFIG_DEFAULT_ath11k-fwtest=y +CONFIG_DEFAULT_ath11k-qdss=y +CONFIG_DEFAULT_athdiag=y +CONFIG_DEFAULT_athtestcmd-lith-nl=y +CONFIG_DEFAULT_base-files=y +CONFIG_DEFAULT_bridge=y +CONFIG_DEFAULT_busybox=y +CONFIG_DEFAULT_cfr_tools=y +CONFIG_DEFAULT_cnssdiag=y +CONFIG_DEFAULT_dashboard=y +CONFIG_DEFAULT_ddns-scripts=y +CONFIG_DEFAULT_dnsmasq-dhcpv6=y +CONFIG_DEFAULT_dropbear=y +CONFIG_DEFAULT_ds-lite=y +CONFIG_DEFAULT_e2fsprogs=y +CONFIG_DEFAULT_ethtool=y +CONFIG_DEFAULT_file=y +CONFIG_DEFAULT_firewall=y +CONFIG_DEFAULT_fstools=y +CONFIG_DEFAULT_ftm=y +CONFIG_DEFAULT_fwupgrade-tools=y +CONFIG_DEFAULT_hostapd-macsec=y +CONFIG_DEFAULT_hostapd-utils=y +CONFIG_DEFAULT_i2c-tools=y +CONFIG_DEFAULT_ip-bridge=y +CONFIG_DEFAULT_ip-full=y +CONFIG_DEFAULT_ip6tables=y +CONFIG_DEFAULT_iperf=y +CONFIG_DEFAULT_iptables=y +CONFIG_DEFAULT_iptables-mod-conntrack-extra=y +CONFIG_DEFAULT_iptables-mod-extra=y +CONFIG_DEFAULT_iptables-mod-filter=y +CONFIG_DEFAULT_iptables-mod-ipopt=y +CONFIG_DEFAULT_iptables-mod-ipsec=y +CONFIG_DEFAULT_iptables-mod-physdev=y +CONFIG_DEFAULT_iputils-tracepath=y +CONFIG_DEFAULT_iputils-tracepath6=y +CONFIG_DEFAULT_isc-dhcp-relay-ipv6=y +CONFIG_DEFAULT_iwinfo=y +CONFIG_DEFAULT_kmod-ata-ahci=y +CONFIG_DEFAULT_kmod-ata-ahci-platform=y +CONFIG_DEFAULT_kmod-ata-core=y +CONFIG_DEFAULT_kmod-ath11k=y +CONFIG_DEFAULT_kmod-bonding=y +CONFIG_DEFAULT_kmod-bootconfig=y +CONFIG_DEFAULT_kmod-button-hotplug=y +CONFIG_DEFAULT_kmod-diag-char=y +CONFIG_DEFAULT_kmod-emesh-sp=y +CONFIG_DEFAULT_kmod-fs-msdos=y +CONFIG_DEFAULT_kmod-fs-ntfs=y +CONFIG_DEFAULT_kmod-fs-vfat=y +CONFIG_DEFAULT_kmod-gpio-button-hotplug=y +CONFIG_DEFAULT_kmod-ifb=y +CONFIG_DEFAULT_kmod-ipsec=y +CONFIG_DEFAULT_kmod-ipsec4=y +CONFIG_DEFAULT_kmod-ipsec6=y +CONFIG_DEFAULT_kmod-ipt-ipopt=y +CONFIG_DEFAULT_kmod-ipt-nathelper-rtsp=y +CONFIG_DEFAULT_kmod-ipt-offload=y +CONFIG_DEFAULT_kmod-ipt-sctp=y +CONFIG_DEFAULT_kmod-ipv6=y +CONFIG_DEFAULT_kmod-leds-gpio=y +CONFIG_DEFAULT_kmod-nf-nathelper=y +CONFIG_DEFAULT_kmod-nf-nathelper-extra=y +CONFIG_DEFAULT_kmod-nft-netdev=y +CONFIG_DEFAULT_kmod-nft-offload=y +CONFIG_DEFAULT_kmod-nls-cp437=y +CONFIG_DEFAULT_kmod-nls-iso8859-1=y +CONFIG_DEFAULT_kmod-qca-nss-cfi-cryptoapi=y +CONFIG_DEFAULT_kmod-qca-nss-crypto=y +CONFIG_DEFAULT_kmod-qca-nss-dp=y +CONFIG_DEFAULT_kmod-qca-nss-drv=y +CONFIG_DEFAULT_kmod-qca-nss-drv-bridge-mgr=y +CONFIG_DEFAULT_kmod-qca-nss-drv-gre=y +CONFIG_DEFAULT_kmod-qca-nss-drv-igs=y +CONFIG_DEFAULT_kmod-qca-nss-drv-ipsecmgr=y +CONFIG_DEFAULT_kmod-qca-nss-drv-ipsecmgr-xfrm=y +CONFIG_DEFAULT_kmod-qca-nss-drv-l2tpv2=y +CONFIG_DEFAULT_kmod-qca-nss-drv-lag-mgr=y +CONFIG_DEFAULT_kmod-qca-nss-drv-map-t=y +CONFIG_DEFAULT_kmod-qca-nss-drv-match=y +CONFIG_DEFAULT_kmod-qca-nss-drv-mirror=y +CONFIG_DEFAULT_kmod-qca-nss-drv-mscs=y +CONFIG_DEFAULT_kmod-qca-nss-drv-netlink=y +CONFIG_DEFAULT_kmod-qca-nss-drv-ovpn-link=y +CONFIG_DEFAULT_kmod-qca-nss-drv-ovpn-mgr=y +CONFIG_DEFAULT_kmod-qca-nss-drv-pppoe=y +CONFIG_DEFAULT_kmod-qca-nss-drv-pptp=y +CONFIG_DEFAULT_kmod-qca-nss-drv-qdisc=y +CONFIG_DEFAULT_kmod-qca-nss-drv-tun6rd=y +CONFIG_DEFAULT_kmod-qca-nss-drv-tunipip6=y +CONFIG_DEFAULT_kmod-qca-nss-drv-vxlanmgr=y +CONFIG_DEFAULT_kmod-qca-nss-drv-wifi-meshmgr=y +CONFIG_DEFAULT_kmod-qca-nss-ecm-premium=y +CONFIG_DEFAULT_kmod-qca-nss-macsec=y +CONFIG_DEFAULT_kmod-qca-ovsmgr=y +CONFIG_DEFAULT_kmod-qca-ssdk-nohnat=y +CONFIG_DEFAULT_kmod-qmi_sample_client=y +CONFIG_DEFAULT_kmod-qpic_panel_ertft=y +CONFIG_DEFAULT_kmod-sched=y +CONFIG_DEFAULT_kmod-sched-connmark=y +CONFIG_DEFAULT_kmod-sched-core=y +CONFIG_DEFAULT_kmod-scsi-core=y +CONFIG_DEFAULT_kmod-sound-soc-ipq=y +CONFIG_DEFAULT_kmod-usb-dwc3-qcom-internal=y +CONFIG_DEFAULT_kmod-usb-f-diag=y +CONFIG_DEFAULT_kmod-usb-gdiag=y +CONFIG_DEFAULT_kmod-usb-net=y +CONFIG_DEFAULT_kmod-usb-net-rtl8152=y +CONFIG_DEFAULT_kmod-usb-phy-ipq807x=y +CONFIG_DEFAULT_kmod-usb-storage=y +CONFIG_DEFAULT_kmod-usb-uas=y +CONFIG_DEFAULT_kmod-usb2=y +CONFIG_DEFAULT_kmod-usb3=y +CONFIG_DEFAULT_libc=y +CONFIG_DEFAULT_libgcc=y +CONFIG_DEFAULT_libtirpc=y +CONFIG_DEFAULT_lk-ipq6018=y +CONFIG_DEFAULT_logd=y +CONFIG_DEFAULT_losetup=y +CONFIG_DEFAULT_luci=y +CONFIG_DEFAULT_luci-app-ddns=y +CONFIG_DEFAULT_luci-app-samba4=y +CONFIG_DEFAULT_luci-app-upnp=y +CONFIG_DEFAULT_luci-proto-ipv6=y +CONFIG_DEFAULT_map=y +CONFIG_DEFAULT_mcproxy=y +CONFIG_DEFAULT_mtd=y +CONFIG_DEFAULT_mwan3=y +CONFIG_DEFAULT_netifd=y +CONFIG_DEFAULT_nftables=y +CONFIG_DEFAULT_ntfs-3g=y +CONFIG_DEFAULT_odhcp6c=y +CONFIG_DEFAULT_odhcpd-ipv6only=y +CONFIG_DEFAULT_openssl-util=y +CONFIG_DEFAULT_openswan=y +CONFIG_DEFAULT_opkg=y +CONFIG_DEFAULT_pm-utils=y +CONFIG_DEFAULT_ppp=y +CONFIG_DEFAULT_ppp-mod-pppoe=y +CONFIG_DEFAULT_ppp-mod-pptp=y +CONFIG_DEFAULT_profilerd=y +CONFIG_DEFAULT_qca-cnss-daemon=y +CONFIG_DEFAULT_qca-diag=y +CONFIG_DEFAULT_qca-nss-fw-cp-retail=y +CONFIG_DEFAULT_qca-nss-fw-eip-cp=y +CONFIG_DEFAULT_qca-nss-fw-eip-hk=y +CONFIG_DEFAULT_qca-nss-fw-hk-retail=y +CONFIG_DEFAULT_qca-nss-fw-mp-retail=y +CONFIG_DEFAULT_qca-qmi-framework=y +CONFIG_DEFAULT_qca-ssdk-shell=y +CONFIG_DEFAULT_qca-time-services=y +CONFIG_DEFAULT_qca-wifi-hk-fw-hw1-10.4-asic=y +CONFIG_DEFAULT_qca-wifi-scripts=y +CONFIG_DEFAULT_qca-wlanfw-upgrade=y +CONFIG_DEFAULT_qrtr=y +CONFIG_DEFAULT_quagga=y +CONFIG_DEFAULT_quagga-ripd=y +CONFIG_DEFAULT_quagga-vtysh=y +CONFIG_DEFAULT_quagga-watchquagga=y +CONFIG_DEFAULT_quagga-zebra=y +CONFIG_DEFAULT_rng-tools=y +CONFIG_DEFAULT_rp-pppoe-relay=y +CONFIG_DEFAULT_rp-pppoe-server=y +CONFIG_DEFAULT_rstp=y +CONFIG_DEFAULT_sigma-dut-open=y +CONFIG_DEFAULT_swconfig=y +CONFIG_DEFAULT_sysstat=y +CONFIG_DEFAULT_tayga=y +CONFIG_DEFAULT_tc=y +CONFIG_DEFAULT_tcpdump=y +CONFIG_DEFAULT_uboot-2016-ipq6018=y +CONFIG_DEFAULT_uboot-2016-ipq6018_tiny=y +CONFIG_DEFAULT_uboot-envtools=y +CONFIG_DEFAULT_uci=y +CONFIG_DEFAULT_uclient-fetch=y +CONFIG_DEFAULT_urandom-seed=y +CONFIG_DEFAULT_urngd=y +CONFIG_DEFAULT_wififw_mount_script=y +CONFIG_DEFAULT_wpa-cli=y +CONFIG_DEFAULT_wpa-supplicant-macsec=y +CONFIG_DEFAULT_wpad-mesh=y +CONFIG_DEFAULT_xl2tpd=y +CONFIG_HAS_FPU=y +CONFIG_AUDIO_SUPPORT=y +CONFIG_GPIO_SUPPORT=y +CONFIG_PCI_SUPPORT=y +CONFIG_PCIE_SUPPORT=y +CONFIG_USB_SUPPORT=y +CONFIG_USB_GADGET_SUPPORT=y +CONFIG_RTC_SUPPORT=y +CONFIG_USES_DEVICETREE=y +CONFIG_USES_INITRAMFS=y +CONFIG_USES_SQUASHFS=y +CONFIG_USES_UBIFS=y +CONFIG_NAND_SUPPORT=y +CONFIG_arm=y +CONFIG_arm_v7=y +CONFIG_ARCH="arm" + +# +# Target Images +# +# CONFIG_TARGET_ROOTFS_INITRAMFS is not set +CONFIG_EXTERNAL_CPIO="" + +# +# Root filesystem archives +# +# CONFIG_TARGET_ROOTFS_CPIOGZ is not set +# CONFIG_TARGET_ROOTFS_TARGZ is not set + +# +# Root filesystem images +# +# CONFIG_TARGET_ROOTFS_EXT4FS is not set +CONFIG_TARGET_ROOTFS_SQUASHFS=y +CONFIG_TARGET_SQUASHFS_BLOCK_SIZE=256 +# CONFIG_TARGET_ROOTFS_UBIFS is not set +CONFIG_TARGET_UBIFS_FREE_SPACE_FIXUP=y +CONFIG_TARGET_UBIFS_JOURNAL_SIZE="" + +# +# Image Options +# + +# +# Global build settings +# +# CONFIG_JSON_OVERVIEW_IMAGE_INFO is not set +# CONFIG_ALL_NONSHARED is not set +# CONFIG_ALL_KMODS is not set +# CONFIG_ALL is not set +# CONFIG_BUILDBOT is not set +CONFIG_SIGNED_PACKAGES=y +CONFIG_SIGNATURE_CHECK=y + +# +# General build options +# +CONFIG_DISPLAY_SUPPORT=y +# CONFIG_BUILD_PATENTED is not set +# CONFIG_BUILD_NLS is not set +CONFIG_SHADOW_PASSWORDS=y +# CONFIG_CLEAN_IPKG is not set +# CONFIG_LOWMEM_FLASH is not set +# CONFIG_IPK_FILES_CHECKSUMS is not set +# CONFIG_INCLUDE_CONFIG is not set +CONFIG_COLLECT_KERNEL_DEBUG=y +# CONFIG_BUILD_SHORTENED_PATH is not set + +# +# Kernel build options +# +CONFIG_KERNEL_BUILD_USER="" +CONFIG_KERNEL_BUILD_DOMAIN="" +CONFIG_KERNEL_PRINTK=y +# CONFIG_KERNEL_SWAP is not set +CONFIG_KERNEL_DEBUG_FS=y +CONFIG_KERNEL_ARM_PMU=y +CONFIG_KERNEL_PERF_EVENTS=y +# CONFIG_KERNEL_PROFILING is not set +# CONFIG_KERNEL_TASKSTATS is not set +# CONFIG_KERNEL_KALLSYMS_ALL is not set +CONFIG_KERNEL_KALLSYMS=y +# CONFIG_KERNEL_KASAN is not set +CONFIG_KERNEL_I2C_COMPAT=y +# CONFIG_KERNEL_PAGE_OWNER is not set +CONFIG_KERNEL_IPQ_MEM_PROFILE=0 +# CONFIG_KERNEL_ARCH_IPQ256M is not set +# CONFIG_KERNEL_SKB_FIXED_SIZE_2K is not set +# CONFIG_KERNEL_FTRACE is not set +# CONFIG_KERNEL_DEBUG_KMEMLEAK is not set +# CONFIG_KERNEL_DEBUG_MEM_USAGE is not set +# CONFIG_KERNEL_IRQSOFF_TRACER is not set +# CONFIG_KERNEL_PREEMPT_TRACER is not set +CONFIG_KERNEL_DEBUG_KERNEL=y +# CONFIG_KERNEL_DEBUG_INFO_REDUCED is not set +CONFIG_KERNEL_DEBUG_INFO=y +# CONFIG_KERNEL_DEBUG_LL_UART_NONE is not set +# CONFIG_KERNEL_DEBUG_LL is not set +CONFIG_KERNEL_DYNAMIC_DEBUG=y +# CONFIG_KERNEL_EARLY_PRINTK is not set +# CONFIG_KERNEL_KPROBES is not set +# CONFIG_KERNEL_AIO is not set +# CONFIG_KERNEL_FHANDLE is not set +# CONFIG_KERNEL_FANOTIFY is not set +# CONFIG_KERNEL_BLK_DEV_BSG is not set +CONFIG_KERNEL_BLK_DEV_RAM=y +CONFIG_KERNEL_BLK_DEV_NVME=y +CONFIG_KERNEL_MAGIC_SYSRQ=y +# CONFIG_KERNEL_DEBUG_ATOMIC_SLEEP is not set +CONFIG_KERNEL_DEBUG_GPIO=y +CONFIG_KERNEL_DEBUG_BUGVERBOSE=y +# CONFIG_KERNEL_DEBUG_PINCTRL is not set +CONFIG_KERNEL_COREDUMP=y +CONFIG_KERNEL_ELF_CORE=y +# CONFIG_KERNEL_PROVE_LOCKING is not set +CONFIG_KERNEL_PRINTK_TIME=y +# CONFIG_KERNEL_SLUB_DEBUG is not set +# CONFIG_KERNEL_SLUB_DEBUG_ON is not set +# CONFIG_KERNEL_SLABINFO is not set +# CONFIG_KERNEL_PROC_PAGE_MONITOR is not set +CONFIG_KERNEL_KEXEC=y +CONFIG_KERNEL_PROC_VMCORE=y +CONFIG_KERNEL_CRASH_DUMP=y +# CONFIG_USE_RFKILL is not set +# CONFIG_USE_SPARSE is not set +# CONFIG_KERNEL_DEVTMPFS is not set +# CONFIG_KERNEL_SKB_DEBUG is not set +# CONFIG_KERNEL_SKB_RECYCLER_PREALLOC is not set +# CONFIG_KERNEL_ALLOC_SKB_PAGE_FRAG_DISABLE is not set +CONFIG_KERNEL_SKB_RECYCLER=y +CONFIG_KERNEL_SKB_RECYCLER_MULTI_CPU=y +# CONFIG_KERNEL_KEYS is not set +# CONFIG_KERNEL_MODULE_SIG is not set +CONFIG_KERNEL_CGROUPS=y +# CONFIG_KERNEL_CGROUP_DEBUG is not set +CONFIG_KERNEL_FREEZER=y +CONFIG_KERNEL_CGROUP_FREEZER=y +CONFIG_KERNEL_CGROUP_DEVICE=y +CONFIG_KERNEL_CGROUP_PIDS=y +CONFIG_KERNEL_CPUSETS=y +# CONFIG_KERNEL_PROC_PID_CPUSET is not set +CONFIG_KERNEL_CGROUP_CPUACCT=y +CONFIG_KERNEL_RESOURCE_COUNTERS=y +CONFIG_KERNEL_MM_OWNER=y +CONFIG_KERNEL_MEMCG=y +# CONFIG_KERNEL_MEMCG_SWAP is not set +CONFIG_KERNEL_MEMCG_KMEM=y +# CONFIG_KERNEL_CGROUP_PERF is not set +CONFIG_KERNEL_CGROUP_SCHED=y +CONFIG_KERNEL_FAIR_GROUP_SCHED=y +CONFIG_KERNEL_CFS_BANDWIDTH=y +CONFIG_KERNEL_RT_GROUP_SCHED=y +CONFIG_KERNEL_BLK_CGROUP=y +# CONFIG_KERNEL_CFQ_GROUP_IOSCHED is not set +# CONFIG_KERNEL_BLK_DEV_THROTTLING is not set +# CONFIG_KERNEL_DEBUG_BLK_CGROUP is not set +CONFIG_KERNEL_NET_CLS_CGROUP=y +CONFIG_KERNEL_NETPRIO_CGROUP=y +CONFIG_KERNEL_NET_IPGRE_BROADCAST=y +# CONFIG_KERNEL_CNSS2 is not set +CONFIG_KERNEL_NAMESPACES=y +CONFIG_KERNEL_UTS_NS=y +CONFIG_KERNEL_IPC_NS=y +CONFIG_KERNEL_USER_NS=y +CONFIG_KERNEL_PID_NS=y +CONFIG_KERNEL_NET_NS=y +CONFIG_KERNEL_LXC_MISC=y +CONFIG_KERNEL_DEVPTS_MULTIPLE_INSTANCES=y +CONFIG_KERNEL_POSIX_MQUEUE=y +# CONFIG_KERNEL_SECCOMP_FILTER is not set +# CONFIG_KERNEL_SECCOMP is not set +CONFIG_KERNEL_IP_MROUTE=y +CONFIG_KERNEL_IPV6=y +CONFIG_KERNEL_IPV6_MULTIPLE_TABLES=y +CONFIG_KERNEL_IPV6_SUBTREES=y +CONFIG_KERNEL_IPV6_MROUTE=y +# CONFIG_KERNEL_IPV6_PIMSM_V2 is not set +# CONFIG_KERNEL_IP_PNP is not set + +# +# Filesystem ACL and attr support options +# +# CONFIG_USE_FS_ACL_ATTR is not set +# CONFIG_KERNEL_FS_POSIX_ACL is not set +# CONFIG_KERNEL_BTRFS_FS_POSIX_ACL is not set +# CONFIG_KERNEL_EXT4_FS_POSIX_ACL is not set +# CONFIG_KERNEL_F2FS_FS_POSIX_ACL is not set +# CONFIG_KERNEL_JFFS2_FS_POSIX_ACL is not set +# CONFIG_KERNEL_TMPFS_POSIX_ACL is not set +# CONFIG_KERNEL_CIFS_ACL is not set +# CONFIG_KERNEL_HFS_FS_POSIX_ACL is not set +# CONFIG_KERNEL_HFSPLUS_FS_POSIX_ACL is not set +# CONFIG_KERNEL_NFS_ACL_SUPPORT is not set +# CONFIG_KERNEL_NFS_V3_ACL_SUPPORT is not set +# CONFIG_KERNEL_NFSD_V2_ACL_SUPPORT is not set +# CONFIG_KERNEL_NFSD_V3_ACL_SUPPORT is not set +# CONFIG_KERNEL_REISER_FS_POSIX_ACL is not set +# CONFIG_KERNEL_XFS_POSIX_ACL is not set +# CONFIG_KERNEL_JFS_POSIX_ACL is not set +CONFIG_KERNEL_DEVMEM=y +# CONFIG_KERNEL_DEVKMEM is not set +CONFIG_KERNEL_SQUASHFS_FRAGMENT_CACHE_SIZE=3 +# CONFIG_KERNEL_CC_OPTIMIZE_FOR_PERFORMANCE is not set +CONFIG_KERNEL_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_KERNEL_STRICT_KERNEL_RWX=y +CONFIG_KERNEL_STRICT_MODULE_RWX=y +# CONFIG_KERNEL_SRD_TRACE is not set +CONFIG_KERNEL_HWMON=y +CONFIG_HAS_IOMEM=y + +# +# Package build options +# +# CONFIG_DEBUG is not set +CONFIG_IPV6=y + +# +# Stripping options +# +# CONFIG_NO_STRIP is not set +# CONFIG_USE_STRIP is not set +CONFIG_USE_SSTRIP=y +# CONFIG_STRIP_KERNEL_EXPORTS is not set +# CONFIG_USE_MKLIBS is not set +CONFIG_USE_UCLIBCXX=y +# CONFIG_USE_LIBSTDCXX is not set + +# +# Hardening build options +# +CONFIG_PKG_CHECK_FORMAT_SECURITY=y +CONFIG_PKG_ASLR_PIE=y +# CONFIG_PKG_CC_STACKPROTECTOR_NONE is not set +CONFIG_PKG_CC_STACKPROTECTOR_STRONG=y +# CONFIG_KERNEL_CC_STACKPROTECTOR_NONE is not set +# CONFIG_KERNEL_CC_STACKPROTECTOR_REGULAR is not set +CONFIG_KERNEL_CC_STACKPROTECTOR_STRONG=y +CONFIG_KERNEL_STACKPROTECTOR=y +CONFIG_KERNEL_STACKPROTECTOR_STRONG=y +# CONFIG_PKG_FORTIFY_SOURCE_NONE is not set +# CONFIG_PKG_FORTIFY_SOURCE_1 is not set +CONFIG_PKG_FORTIFY_SOURCE_2=y +# CONFIG_PKG_RELRO_NONE is not set +# CONFIG_PKG_RELRO_PARTIAL is not set +CONFIG_PKG_RELRO_FULL=y +CONFIG_DEVEL=y +# CONFIG_BROKEN is not set +CONFIG_BINARY_FOLDER="" +CONFIG_DOWNLOAD_FOLDER="" +CONFIG_LOCALMIRROR="https://codelinaro.jfrog.io/artifactory/codelinaro-qsdk/" +CONFIG_GIT_MIRROR="https://git.codelinaro.org/clo/qsdk" +CONFIG_EXTERNAL_LINUX_CONFIG_NAME="" +CONFIG_AUTOREBUILD=y +# CONFIG_AUTOREMOVE is not set +CONFIG_BUILD_SUFFIX="" +CONFIG_TARGET_ROOTFS_DIR="" +# CONFIG_CCACHE is not set +CONFIG_EXTERNAL_KERNEL_TREE="" +CONFIG_KERNEL_GIT_CLONE_URI="" +# CONFIG_BUILD_LOG is not set +# CONFIG_SRC_TREE_OVERRIDE is not set +CONFIG_EXTRA_OPTIMIZATION="-fno-caller-saves -fno-plt" +# CONFIG_TARGET_OPTIONS is not set +CONFIG_TARGET_OPTIMIZATION="-Os -pipe" +# CONFIG_EXTERNAL_TOOLCHAIN is not set +CONFIG_NEED_TOOLCHAIN=y +CONFIG_TOOLCHAINOPTS=y +# CONFIG_EXTRA_TARGET_ARCH is not set + +# +# Binary tools +# +# CONFIG_BINUTILS_USE_VERSION_2_29_1 is not set +CONFIG_BINUTILS_USE_VERSION_2_31_1=y +# CONFIG_BINUTILS_USE_VERSION_2_32 is not set +CONFIG_EXTRA_BINUTILS_CONFIG_OPTIONS="" + +# +# Compiler +# +# CONFIG_GCC_USE_VERSION_5 is not set +CONFIG_GCC_USE_VERSION_7=y +# CONFIG_GCC_USE_VERSION_8 is not set +# CONFIG_GCC_USE_GRAPHITE is not set +CONFIG_EXTRA_GCC_CONFIG_OPTIONS="" +# CONFIG_GCC_DEFAULT_PIE is not set +# CONFIG_GCC_DEFAULT_SSP is not set +# CONFIG_SJLJ_EXCEPTIONS is not set +# CONFIG_INSTALL_GFORTRAN is not set + +# +# C Library +# +# CONFIG_LIBC_USE_GLIBC is not set +CONFIG_LIBC_USE_MUSL=y +# CONFIG_MUSL_DISABLE_CRYPT_SIZE_HACK is not set + +# +# Debuggers +# +CONFIG_GDB=y +CONFIG_USE_MUSL=y +CONFIG_SSP_SUPPORT=y +CONFIG_BINUTILS_VERSION_2_31_1=y +CONFIG_BINUTILS_VERSION="2.31.1" +# CONFIG_GCC_USE_EMBEDDED_PATH_REMAP is not set +CONFIG_GCC_VERSION="7.5.0" +CONFIG_LIBC="musl" +CONFIG_TARGET_SUFFIX="muslgnueabi" +# CONFIG_IB is not set +# CONFIG_SDK is not set +# CONFIG_MAKE_TOOLCHAIN is not set +CONFIG_IMAGEOPT=y +# CONFIG_PREINITOPT is not set +CONFIG_TARGET_PREINIT_SUPPRESS_STDERR=y +# CONFIG_TARGET_PREINIT_DISABLE_FAILSAFE is not set +CONFIG_TARGET_PREINIT_TIMEOUT=0 +# CONFIG_TARGET_PREINIT_SHOW_NETMSG is not set +# CONFIG_TARGET_PREINIT_SUPPRESS_FAILSAFE_NETMSG is not set +CONFIG_TARGET_PREINIT_IFNAME="" +CONFIG_TARGET_PREINIT_IP="192.168.2.5" +CONFIG_TARGET_PREINIT_NETMASK="255.255.255.0" +CONFIG_TARGET_PREINIT_BROADCAST="192.168.1.255" +# CONFIG_INITOPT is not set +CONFIG_TARGET_INIT_PATH="/usr/sbin:/usr/bin:/sbin:/bin" +CONFIG_TARGET_INIT_ENV="" +CONFIG_TARGET_INIT_CMD="/sbin/init" +CONFIG_TARGET_INIT_SUPPRESS_STDERR=y +CONFIG_VERSIONOPT=y +CONFIG_VERSION_DIST="OpenWrt" +CONFIG_VERSION_NUMBER="v4.2" +CONFIG_VERSION_CODE="" +CONFIG_VERSION_REPO="" +CONFIG_VERSION_HOME_URL="" +CONFIG_VERSION_MANUFACTURER="Netams llc" +CONFIG_VERSION_MANUFACTURER_URL="netams.com" +CONFIG_VERSION_BUG_URL="" +CONFIG_VERSION_SUPPORT_URL="" +CONFIG_VERSION_PRODUCT="yuncore ax840-p2" +CONFIG_VERSION_HWREV="" +CONFIG_VERSION_FILENAMES=y +CONFIG_VERSION_CODE_FILENAMES=y +CONFIG_PER_FEED_REPO=y +CONFIG_FEED_packages=y +CONFIG_FEED_networking=y +CONFIG_FEED_luci=y +CONFIG_FEED_routing=y +CONFIG_FEED_nss=y +CONFIG_FEED_nss_prop=y +CONFIG_FEED_nss_host=y +CONFIG_FEED_nss_cust=y +CONFIG_FEED_nss_userspace=y +# CONFIG_FEED_nss_sap is not set +CONFIG_FEED_wlan_open=y +CONFIG_FEED_wlan_hostapd=y +CONFIG_FEED_wlan_iw=y +CONFIG_FEED_sigma_dut_open=y +CONFIG_FEED_ath10k_firmware=y +CONFIG_FEED_wlan=y +CONFIG_FEED_qca=y +CONFIG_FEED_athdiag=y +CONFIG_FEED_art2=y +CONFIG_FEED_athtestcmd=y +CONFIG_FEED_wapid=y +CONFIG_FEED_qcom_utils_internal=y +CONFIG_FEED_qca_platform_utils=y +CONFIG_FEED_shortcut_fe=y +CONFIG_FEED_qca_mcs=y +CONFIG_FEED_qca_lib=y +CONFIG_FEED_apple_homekit=y +CONFIG_FEED_ieee1905_security=y +CONFIG_FEED_hyfi=y +CONFIG_FEED_qca_plc=y +CONFIG_FEED_whc=y +CONFIG_FEED_bluetopia=y +CONFIG_FEED_wigig_utils=y +CONFIG_FEED_wigig_utils_oss=y +CONFIG_FEED_wigig_firmware=y +CONFIG_FEED_ssdk=y +CONFIG_FEED_bluetooth=y +CONFIG_FEED_thread=y +CONFIG_FEED_ioe_bridges=y +CONFIG_FEED_qca_hk=y +CONFIG_FEED_qca_cp=y +CONFIG_FEED_qca_np=y +CONFIG_FEED_qca_lit=y +CONFIG_FEED_csrmesh=y +CONFIG_FEED_sigma_dut=y +CONFIG_FEED_qca_wapi=y +CONFIG_FEED_qca_IOT=y +CONFIG_FEED_bootloader=y +CONFIG_FEED_platform_utils=y +CONFIG_FEED_lte_data_oss=y +CONFIG_FEED_lte_data_prop=y +CONFIG_FEED_snpe=y +CONFIG_FEED_data_modem_monitor=y +CONFIG_FEED_wlan_utils=y +CONFIG_FEED_afc=y +CONFIG_FEED_qca_mad=y +CONFIG_FEED_qca_son_mem_debug=y +CONFIG_FEED_healthmonitor=y +CONFIG_FEED_minidump=y +CONFIG_FEED_btdaemon=y +CONFIG_FEED_kickstart=y +CONFIG_FEED_qca_ezmesh=y +CONFIG_FEED_qtip_server=y +CONFIG_FEED_wifi_fw_headers=y +CONFIG_FEED_odd=y +# CONFIG_FEED_wifi_debug_tools is not set + +# +# Base system +# +CONFIG_PACKAGE_alsa=y +# CONFIG_PACKAGE_attendedsysupgrade-common is not set +# CONFIG_PACKAGE_auc is not set +CONFIG_PACKAGE_base-files=y +# CONFIG_PACKAGE_block-mount is not set +# CONFIG_PACKAGE_blockd is not set +CONFIG_PACKAGE_bridge=y +CONFIG_PACKAGE_busybox=y +CONFIG_BUSYBOX_CUSTOM=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_EDITING_MAX_LEN=1024 +CONFIG_BUSYBOX_DEFAULT_FEATURE_EDITING_SAVEHISTORY=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_REVERSE_SEARCH=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_DD_THIRD_STATUS_LINE=y +CONFIG_BUSYBOX_DEFAULT_STAT=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_STAT_FORMAT=y +CONFIG_BUSYBOX_DEFAULT_USLEEP=y +CONFIG_BUSYBOX_DEFAULT_RUN_PARTS=y +CONFIG_BUSYBOX_DEFAULT_IPCS=y +CONFIG_BUSYBOX_DEFAULT_TASKSET=y +CONFIG_BUSYBOX_DEFAULT_FTPD=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_FTPD_WRITE=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_FTPD_AUTHENTICATION=y +CONFIG_BUSYBOX_DEFAULT_FTPGET=y +CONFIG_BUSYBOX_DEFAULT_FTPPUT=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_FTPGETPUT_LONG_OPTIONS=y +CONFIG_BUSYBOX_DEFAULT_TFTP=y +CONFIG_BUSYBOX_DEFAULT_TFTPD=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_TFTP_GET=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_TFTP_PUT=y +CONFIG_BUSYBOX_DEFAULT_BUSYBOX=y +CONFIG_BUSYBOX_DEFAULT_HOSTID=y +CONFIG_BUSYBOX_DEFAULT_DEVMEM=y +CONFIG_BUSYBOX_DEFAULT_ARPING=y +CONFIG_BUSYBOX_DEFAULT_INETD=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_INETD_SUPPORT_BUILTIN_ECHO=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_INETD_SUPPORT_BUILTIN_TIME=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN=y +CONFIG_BUSYBOX_DEFAULT_VCONFIG=y +CONFIG_BUSYBOX_DEFAULT_WGET=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_WGET_LONG_OPTIONS=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_WGET_STATUSBAR=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_WGET_AUTHENTICATION=y +CONFIG_BUSYBOX_DEFAULT_BASE64=y +CONFIG_BUSYBOX_DEFAULT_TELNET=y +CONFIG_BUSYBOX_DEFAULT_BOOTCHARTD=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_BOOTCHARTD_BLOATED_HEADER=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_BOOTCHARTD_CONFIG_FILE=y +CONFIG_BUSYBOX_DEFAULT_HAVE_DOT_CONFIG=y +# CONFIG_BUSYBOX_DEFAULT_DESKTOP is not set +# CONFIG_BUSYBOX_DEFAULT_EXTRA_COMPAT is not set +# CONFIG_BUSYBOX_DEFAULT_FEDORA_COMPAT is not set +CONFIG_BUSYBOX_DEFAULT_INCLUDE_SUSv2=y +CONFIG_BUSYBOX_DEFAULT_LONG_OPTS=y +CONFIG_BUSYBOX_DEFAULT_SHOW_USAGE=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_VERBOSE_USAGE=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_COMPRESS_USAGE is not set +CONFIG_BUSYBOX_DEFAULT_LFS=y +# CONFIG_BUSYBOX_DEFAULT_PAM is not set +CONFIG_BUSYBOX_DEFAULT_FEATURE_DEVPTS=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_UTMP is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_WTMP is not set +CONFIG_BUSYBOX_DEFAULT_FEATURE_PIDFILE=y +CONFIG_BUSYBOX_DEFAULT_PID_FILE_PATH="/var/run" +# CONFIG_BUSYBOX_DEFAULT_FEATURE_SHOW_SCRIPT is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_INSTALLER is not set +# CONFIG_BUSYBOX_DEFAULT_INSTALL_NO_USR is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_SUID is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_SUID_CONFIG is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_SUID_CONFIG_QUIET is not set +CONFIG_BUSYBOX_DEFAULT_FEATURE_PREFER_APPLETS=y +CONFIG_BUSYBOX_DEFAULT_BUSYBOX_EXEC_PATH="/proc/self/exe" +# CONFIG_BUSYBOX_DEFAULT_SELINUX is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_CLEAN_UP is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_SYSLOG_INFO is not set +CONFIG_BUSYBOX_DEFAULT_FEATURE_SYSLOG=y +# CONFIG_BUSYBOX_DEFAULT_STATIC is not set +CONFIG_BUSYBOX_DEFAULT_PIE=y +# CONFIG_BUSYBOX_DEFAULT_NOMMU is not set +# CONFIG_BUSYBOX_DEFAULT_BUILD_LIBBUSYBOX is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_LIBBUSYBOX_STATIC is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_INDIVIDUAL is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_SHARED_BUSYBOX is not set +CONFIG_BUSYBOX_DEFAULT_CROSS_COMPILER_PREFIX="" +CONFIG_BUSYBOX_DEFAULT_SYSROOT="" +CONFIG_BUSYBOX_DEFAULT_EXTRA_CFLAGS="" +CONFIG_BUSYBOX_DEFAULT_EXTRA_LDFLAGS="" +CONFIG_BUSYBOX_DEFAULT_EXTRA_LDLIBS="" +# CONFIG_BUSYBOX_DEFAULT_USE_PORTABLE_CODE is not set +# CONFIG_BUSYBOX_DEFAULT_STACK_OPTIMIZATION_386 is not set +# CONFIG_BUSYBOX_DEFAULT_STATIC_LIBGCC is not set +CONFIG_BUSYBOX_DEFAULT_INSTALL_APPLET_SYMLINKS=y +# CONFIG_BUSYBOX_DEFAULT_INSTALL_APPLET_HARDLINKS is not set +# CONFIG_BUSYBOX_DEFAULT_INSTALL_APPLET_SCRIPT_WRAPPERS is not set +# CONFIG_BUSYBOX_DEFAULT_INSTALL_APPLET_DONT is not set +# CONFIG_BUSYBOX_DEFAULT_INSTALL_SH_APPLET_SYMLINK is not set +# CONFIG_BUSYBOX_DEFAULT_INSTALL_SH_APPLET_HARDLINK is not set +# CONFIG_BUSYBOX_DEFAULT_INSTALL_SH_APPLET_SCRIPT_WRAPPER is not set +CONFIG_BUSYBOX_DEFAULT_PREFIX="./_install" +# CONFIG_BUSYBOX_DEFAULT_DEBUG is not set +# CONFIG_BUSYBOX_DEFAULT_DEBUG_PESSIMIZE is not set +# CONFIG_BUSYBOX_DEFAULT_DEBUG_SANITIZE is not set +# CONFIG_BUSYBOX_DEFAULT_UNIT_TEST is not set +# CONFIG_BUSYBOX_DEFAULT_WERROR is not set +# CONFIG_BUSYBOX_DEFAULT_WARN_SIMPLE_MSG is not set +CONFIG_BUSYBOX_DEFAULT_NO_DEBUG_LIB=y +# CONFIG_BUSYBOX_DEFAULT_DMALLOC is not set +# CONFIG_BUSYBOX_DEFAULT_EFENCE is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_USE_BSS_TAIL is not set +# CONFIG_BUSYBOX_DEFAULT_FLOAT_DURATION is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_RTMINMAX is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_RTMINMAX_USE_LIBC_DEFINITIONS is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_BUFFERS_USE_MALLOC is not set +CONFIG_BUSYBOX_DEFAULT_FEATURE_BUFFERS_GO_ON_STACK=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_BUFFERS_GO_IN_BSS is not set +CONFIG_BUSYBOX_DEFAULT_PASSWORD_MINLEN=6 +CONFIG_BUSYBOX_DEFAULT_MD5_SMALL=1 +CONFIG_BUSYBOX_DEFAULT_SHA3_SMALL=1 +CONFIG_BUSYBOX_DEFAULT_FEATURE_FAST_TOP=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_ETC_NETWORKS is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_ETC_SERVICES is not set +CONFIG_BUSYBOX_DEFAULT_FEATURE_EDITING=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_EDITING_VI is not set +CONFIG_BUSYBOX_DEFAULT_FEATURE_EDITING_HISTORY=256 +# CONFIG_BUSYBOX_DEFAULT_FEATURE_EDITING_SAVE_ON_EXIT is not set +CONFIG_BUSYBOX_DEFAULT_FEATURE_TAB_COMPLETION=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_USERNAME_COMPLETION is not set +CONFIG_BUSYBOX_DEFAULT_FEATURE_EDITING_FANCY_PROMPT=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_EDITING_WINCH is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_EDITING_ASK_TERMINAL is not set +# CONFIG_BUSYBOX_DEFAULT_LOCALE_SUPPORT is not set +# CONFIG_BUSYBOX_DEFAULT_UNICODE_SUPPORT is not set +# CONFIG_BUSYBOX_DEFAULT_UNICODE_USING_LOCALE is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_CHECK_UNICODE_IN_ENV is not set +CONFIG_BUSYBOX_DEFAULT_SUBST_WCHAR=0 +CONFIG_BUSYBOX_DEFAULT_LAST_SUPPORTED_WCHAR=0 +# CONFIG_BUSYBOX_DEFAULT_UNICODE_COMBINING_WCHARS is not set +# CONFIG_BUSYBOX_DEFAULT_UNICODE_WIDE_WCHARS is not set +# CONFIG_BUSYBOX_DEFAULT_UNICODE_BIDI_SUPPORT is not set +# CONFIG_BUSYBOX_DEFAULT_UNICODE_NEUTRAL_TABLE is not set +# CONFIG_BUSYBOX_DEFAULT_UNICODE_PRESERVE_BROKEN is not set +CONFIG_BUSYBOX_DEFAULT_FEATURE_NON_POSIX_CP=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_VERBOSE_CP_MESSAGE is not set +CONFIG_BUSYBOX_DEFAULT_FEATURE_USE_SENDFILE=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_COPYBUF_KB=4 +# CONFIG_BUSYBOX_DEFAULT_FEATURE_SKIP_ROOTFS is not set +CONFIG_BUSYBOX_DEFAULT_MONOTONIC_SYSCALL=y +CONFIG_BUSYBOX_DEFAULT_IOCTL_HEX2STR_ERROR=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_HWIB is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_SEAMLESS_XZ is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_SEAMLESS_LZMA is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_SEAMLESS_BZ2 is not set +CONFIG_BUSYBOX_DEFAULT_FEATURE_SEAMLESS_GZ=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_SEAMLESS_Z is not set +# CONFIG_BUSYBOX_DEFAULT_AR is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_AR_LONG_FILENAMES is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_AR_CREATE is not set +# CONFIG_BUSYBOX_DEFAULT_UNCOMPRESS is not set +CONFIG_BUSYBOX_DEFAULT_GUNZIP=y +CONFIG_BUSYBOX_DEFAULT_ZCAT=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_GUNZIP_LONG_OPTIONS is not set +CONFIG_BUSYBOX_DEFAULT_BUNZIP2=y +CONFIG_BUSYBOX_DEFAULT_BZCAT=y +# CONFIG_BUSYBOX_DEFAULT_UNLZMA is not set +# CONFIG_BUSYBOX_DEFAULT_LZCAT is not set +# CONFIG_BUSYBOX_DEFAULT_LZMA is not set +# CONFIG_BUSYBOX_DEFAULT_UNXZ is not set +# CONFIG_BUSYBOX_DEFAULT_XZCAT is not set +# CONFIG_BUSYBOX_DEFAULT_XZ is not set +# CONFIG_BUSYBOX_DEFAULT_BZIP2 is not set +CONFIG_BUSYBOX_DEFAULT_BZIP2_SMALL=0 +CONFIG_BUSYBOX_DEFAULT_FEATURE_BZIP2_DECOMPRESS=y +# CONFIG_BUSYBOX_DEFAULT_CPIO is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_CPIO_O is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_CPIO_P is not set +# CONFIG_BUSYBOX_DEFAULT_DPKG is not set +# CONFIG_BUSYBOX_DEFAULT_DPKG_DEB is not set +CONFIG_BUSYBOX_DEFAULT_GZIP=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_GZIP_LONG_OPTIONS is not set +CONFIG_BUSYBOX_DEFAULT_GZIP_FAST=0 +# CONFIG_BUSYBOX_DEFAULT_FEATURE_GZIP_LEVELS is not set +CONFIG_BUSYBOX_DEFAULT_FEATURE_GZIP_DECOMPRESS=y +# CONFIG_BUSYBOX_DEFAULT_LZOP is not set +# CONFIG_BUSYBOX_DEFAULT_UNLZOP is not set +# CONFIG_BUSYBOX_DEFAULT_LZOPCAT is not set +# CONFIG_BUSYBOX_DEFAULT_LZOP_COMPR_HIGH is not set +# CONFIG_BUSYBOX_DEFAULT_RPM is not set +# CONFIG_BUSYBOX_DEFAULT_RPM2CPIO is not set +CONFIG_BUSYBOX_DEFAULT_TAR=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_TAR_LONG_OPTIONS is not set +CONFIG_BUSYBOX_DEFAULT_FEATURE_TAR_CREATE=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_TAR_AUTODETECT is not set +CONFIG_BUSYBOX_DEFAULT_FEATURE_TAR_FROM=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_TAR_OLDGNU_COMPATIBILITY is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_TAR_OLDSUN_COMPATIBILITY is not set +CONFIG_BUSYBOX_DEFAULT_FEATURE_TAR_GNU_EXTENSIONS=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_TAR_TO_COMMAND is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_TAR_UNAME_GNAME is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_TAR_NOPRESERVE_TIME is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_TAR_SELINUX is not set +# CONFIG_BUSYBOX_DEFAULT_UNZIP is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_UNZIP_CDF is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_UNZIP_BZIP2 is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_UNZIP_LZMA is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_UNZIP_XZ is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_LZMA_FAST is not set +CONFIG_BUSYBOX_DEFAULT_BASENAME=y +CONFIG_BUSYBOX_DEFAULT_CAT=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_CATN is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_CATV is not set +CONFIG_BUSYBOX_DEFAULT_CHGRP=y +CONFIG_BUSYBOX_DEFAULT_CHMOD=y +CONFIG_BUSYBOX_DEFAULT_CHOWN=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_CHOWN_LONG_OPTIONS is not set +CONFIG_BUSYBOX_DEFAULT_CHROOT=y +# CONFIG_BUSYBOX_DEFAULT_CKSUM is not set +# CONFIG_BUSYBOX_DEFAULT_COMM is not set +CONFIG_BUSYBOX_DEFAULT_CP=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_CP_LONG_OPTIONS is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_CP_REFLINK is not set +CONFIG_BUSYBOX_DEFAULT_CUT=y +CONFIG_BUSYBOX_DEFAULT_DATE=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_DATE_ISOFMT=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_DATE_NANO is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_DATE_COMPAT is not set +CONFIG_BUSYBOX_DEFAULT_DD=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_DD_SIGNAL_HANDLING=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_DD_IBS_OBS=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_DD_STATUS is not set +CONFIG_BUSYBOX_DEFAULT_DF=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_DF_FANCY is not set +CONFIG_BUSYBOX_DEFAULT_DIRNAME=y +# CONFIG_BUSYBOX_DEFAULT_DOS2UNIX is not set +# CONFIG_BUSYBOX_DEFAULT_UNIX2DOS is not set +CONFIG_BUSYBOX_DEFAULT_DU=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y +CONFIG_BUSYBOX_DEFAULT_ECHO=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_FANCY_ECHO=y +CONFIG_BUSYBOX_DEFAULT_ENV=y +# CONFIG_BUSYBOX_DEFAULT_EXPAND is not set +# CONFIG_BUSYBOX_DEFAULT_UNEXPAND is not set +CONFIG_BUSYBOX_DEFAULT_EXPR=y +CONFIG_BUSYBOX_DEFAULT_EXPR_MATH_SUPPORT_64=y +# CONFIG_BUSYBOX_DEFAULT_FACTOR is not set +CONFIG_BUSYBOX_DEFAULT_FALSE=y +# CONFIG_BUSYBOX_DEFAULT_FOLD is not set +CONFIG_BUSYBOX_DEFAULT_HEAD=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_FANCY_HEAD=y +CONFIG_BUSYBOX_DEFAULT_ID=y +# CONFIG_BUSYBOX_DEFAULT_GROUPS is not set +# CONFIG_BUSYBOX_DEFAULT_INSTALL is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_INSTALL_LONG_OPTIONS is not set +# CONFIG_BUSYBOX_DEFAULT_LINK is not set +CONFIG_BUSYBOX_DEFAULT_LN=y +# CONFIG_BUSYBOX_DEFAULT_LOGNAME is not set +CONFIG_BUSYBOX_DEFAULT_LS=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_LS_FILETYPES=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_LS_FOLLOWLINKS=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_LS_RECURSIVE=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_LS_WIDTH=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_LS_SORTFILES=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_LS_TIMESTAMPS=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_LS_USERNAME=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_LS_COLOR=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_LS_COLOR_IS_DEFAULT=y +CONFIG_BUSYBOX_DEFAULT_MD5SUM=y +# CONFIG_BUSYBOX_DEFAULT_SHA1SUM is not set +CONFIG_BUSYBOX_DEFAULT_SHA256SUM=y +# CONFIG_BUSYBOX_DEFAULT_SHA512SUM is not set +# CONFIG_BUSYBOX_DEFAULT_SHA3SUM is not set +CONFIG_BUSYBOX_DEFAULT_FEATURE_MD5_SHA1_SUM_CHECK=y +CONFIG_BUSYBOX_DEFAULT_MKDIR=y +CONFIG_BUSYBOX_DEFAULT_MKFIFO=y +CONFIG_BUSYBOX_DEFAULT_MKNOD=y +CONFIG_BUSYBOX_DEFAULT_MKTEMP=y +CONFIG_BUSYBOX_DEFAULT_MV=y +CONFIG_BUSYBOX_DEFAULT_NICE=y +# CONFIG_BUSYBOX_DEFAULT_NL is not set +# CONFIG_BUSYBOX_DEFAULT_NOHUP is not set +# CONFIG_BUSYBOX_DEFAULT_NPROC is not set +# CONFIG_BUSYBOX_DEFAULT_OD is not set +# CONFIG_BUSYBOX_DEFAULT_PASTE is not set +# CONFIG_BUSYBOX_DEFAULT_PRINTENV is not set +CONFIG_BUSYBOX_DEFAULT_PRINTF=y +CONFIG_BUSYBOX_DEFAULT_PWD=y +CONFIG_BUSYBOX_DEFAULT_READLINK=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_READLINK_FOLLOW=y +# CONFIG_BUSYBOX_DEFAULT_REALPATH is not set +CONFIG_BUSYBOX_DEFAULT_RM=y +CONFIG_BUSYBOX_DEFAULT_RMDIR=y +CONFIG_BUSYBOX_DEFAULT_SEQ=y +# CONFIG_BUSYBOX_DEFAULT_SHRED is not set +# CONFIG_BUSYBOX_DEFAULT_SHUF is not set +CONFIG_BUSYBOX_DEFAULT_SLEEP=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_FANCY_SLEEP=y +CONFIG_BUSYBOX_DEFAULT_SORT=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_SORT_BIG is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_SORT_OPTIMIZE_MEMORY is not set +# CONFIG_BUSYBOX_DEFAULT_SPLIT is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_SPLIT_FANCY is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_STAT_FILESYSTEM is not set +# CONFIG_BUSYBOX_DEFAULT_STTY is not set +# CONFIG_BUSYBOX_DEFAULT_SUM is not set +CONFIG_BUSYBOX_DEFAULT_SYNC=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_SYNC_FANCY is not set +CONFIG_BUSYBOX_DEFAULT_FSYNC=y +# CONFIG_BUSYBOX_DEFAULT_TAC is not set +CONFIG_BUSYBOX_DEFAULT_TAIL=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_FANCY_TAIL=y +CONFIG_BUSYBOX_DEFAULT_TEE=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_TEE_USE_BLOCK_IO=y +CONFIG_BUSYBOX_DEFAULT_TEST=y +CONFIG_BUSYBOX_DEFAULT_TEST1=y +CONFIG_BUSYBOX_DEFAULT_TEST2=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_TEST_64=y +# CONFIG_BUSYBOX_DEFAULT_TIMEOUT is not set +CONFIG_BUSYBOX_DEFAULT_TOUCH=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_TOUCH_NODEREF is not set +CONFIG_BUSYBOX_DEFAULT_FEATURE_TOUCH_SUSV3=y +CONFIG_BUSYBOX_DEFAULT_TR=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_TR_CLASSES is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_TR_EQUIV is not set +CONFIG_BUSYBOX_DEFAULT_TRUE=y +# CONFIG_BUSYBOX_DEFAULT_TRUNCATE is not set +# CONFIG_BUSYBOX_DEFAULT_TTY is not set +CONFIG_BUSYBOX_DEFAULT_UNAME=y +CONFIG_BUSYBOX_DEFAULT_UNAME_OSNAME="GNU/Linux" +# CONFIG_BUSYBOX_DEFAULT_BB_ARCH is not set +CONFIG_BUSYBOX_DEFAULT_UNIQ=y +# CONFIG_BUSYBOX_DEFAULT_UNLINK is not set +# CONFIG_BUSYBOX_DEFAULT_UUDECODE is not set +# CONFIG_BUSYBOX_DEFAULT_BASE32 is not set +# CONFIG_BUSYBOX_DEFAULT_UUENCODE is not set +CONFIG_BUSYBOX_DEFAULT_WC=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_WC_LARGE is not set +# CONFIG_BUSYBOX_DEFAULT_WHO is not set +# CONFIG_BUSYBOX_DEFAULT_W is not set +# CONFIG_BUSYBOX_DEFAULT_USERS is not set +# CONFIG_BUSYBOX_DEFAULT_WHOAMI is not set +CONFIG_BUSYBOX_DEFAULT_YES=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_VERBOSE is not set +CONFIG_BUSYBOX_DEFAULT_FEATURE_PRESERVE_HARDLINKS=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_HUMAN_READABLE=y +# CONFIG_BUSYBOX_DEFAULT_CHVT is not set +CONFIG_BUSYBOX_DEFAULT_CLEAR=y +# CONFIG_BUSYBOX_DEFAULT_DEALLOCVT is not set +# CONFIG_BUSYBOX_DEFAULT_DUMPKMAP is not set +# CONFIG_BUSYBOX_DEFAULT_FGCONSOLE is not set +# CONFIG_BUSYBOX_DEFAULT_KBD_MODE is not set +# CONFIG_BUSYBOX_DEFAULT_LOADFONT is not set +# CONFIG_BUSYBOX_DEFAULT_SETFONT is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_SETFONT_TEXTUAL_MAP is not set +CONFIG_BUSYBOX_DEFAULT_DEFAULT_SETFONT_DIR="" +# CONFIG_BUSYBOX_DEFAULT_FEATURE_LOADFONT_PSF2 is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_LOADFONT_RAW is not set +# CONFIG_BUSYBOX_DEFAULT_LOADKMAP is not set +# CONFIG_BUSYBOX_DEFAULT_OPENVT is not set +CONFIG_BUSYBOX_DEFAULT_RESET=y +# CONFIG_BUSYBOX_DEFAULT_RESIZE is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_RESIZE_PRINT is not set +# CONFIG_BUSYBOX_DEFAULT_SETCONSOLE is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_SETCONSOLE_LONG_OPTIONS is not set +# CONFIG_BUSYBOX_DEFAULT_SETKEYCODES is not set +# CONFIG_BUSYBOX_DEFAULT_SETLOGCONS is not set +# CONFIG_BUSYBOX_DEFAULT_SHOWKEY is not set +# CONFIG_BUSYBOX_DEFAULT_PIPE_PROGRESS is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_RUN_PARTS_LONG_OPTIONS is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_RUN_PARTS_FANCY is not set +CONFIG_BUSYBOX_DEFAULT_START_STOP_DAEMON=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_START_STOP_DAEMON_LONG_OPTIONS is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_START_STOP_DAEMON_FANCY is not set +CONFIG_BUSYBOX_DEFAULT_WHICH=y +# CONFIG_BUSYBOX_DEFAULT_MINIPS is not set +# CONFIG_BUSYBOX_DEFAULT_NUKE is not set +# CONFIG_BUSYBOX_DEFAULT_RESUME is not set +# CONFIG_BUSYBOX_DEFAULT_RUN_INIT is not set +CONFIG_BUSYBOX_DEFAULT_AWK=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_AWK_LIBM=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_AWK_GNU_EXTENSIONS=y +CONFIG_BUSYBOX_DEFAULT_CMP=y +# CONFIG_BUSYBOX_DEFAULT_DIFF is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_DIFF_LONG_OPTIONS is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_DIFF_DIR is not set +# CONFIG_BUSYBOX_DEFAULT_ED is not set +# CONFIG_BUSYBOX_DEFAULT_PATCH is not set +CONFIG_BUSYBOX_DEFAULT_SED=y +CONFIG_BUSYBOX_DEFAULT_VI=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_VI_MAX_LEN=1024 +# CONFIG_BUSYBOX_DEFAULT_FEATURE_VI_8BIT is not set +CONFIG_BUSYBOX_DEFAULT_FEATURE_VI_COLON=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_VI_YANKMARK=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_VI_SEARCH=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_VI_REGEX_SEARCH is not set +CONFIG_BUSYBOX_DEFAULT_FEATURE_VI_USE_SIGNALS=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_VI_DOT_CMD=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_VI_READONLY=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_VI_SETOPTS=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_VI_SET=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_VI_WIN_RESIZE=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_VI_ASK_TERMINAL=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_VI_UNDO is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_VI_UNDO_QUEUE is not set +CONFIG_BUSYBOX_DEFAULT_FEATURE_VI_UNDO_QUEUE_MAX=0 +CONFIG_BUSYBOX_DEFAULT_FEATURE_ALLOW_EXEC=y +CONFIG_BUSYBOX_DEFAULT_FIND=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_FIND_PRINT0=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_FIND_MTIME=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_FIND_MMIN=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_FIND_PERM=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_FIND_TYPE=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_FIND_EXECUTABLE is not set +CONFIG_BUSYBOX_DEFAULT_FEATURE_FIND_XDEV=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_FIND_MAXDEPTH=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_FIND_NEWER=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_FIND_INUM is not set +CONFIG_BUSYBOX_DEFAULT_FEATURE_FIND_EXEC=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_FIND_EXEC_PLUS is not set +CONFIG_BUSYBOX_DEFAULT_FEATURE_FIND_USER=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_FIND_GROUP=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_FIND_NOT=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_FIND_DEPTH=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_FIND_PAREN=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_FIND_SIZE=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_FIND_PRUNE=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_FIND_QUIT is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_FIND_DELETE is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_FIND_EMPTY is not set +CONFIG_BUSYBOX_DEFAULT_FEATURE_FIND_PATH=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_FIND_REGEX=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_FIND_CONTEXT is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_FIND_LINKS is not set +CONFIG_BUSYBOX_DEFAULT_GREP=y +CONFIG_BUSYBOX_DEFAULT_EGREP=y +CONFIG_BUSYBOX_DEFAULT_FGREP=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_GREP_CONTEXT=y +CONFIG_BUSYBOX_DEFAULT_XARGS=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_XARGS_SUPPORT_CONFIRMATION=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_XARGS_SUPPORT_QUOTES=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_XARGS_SUPPORT_TERMOPT=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_XARGS_SUPPORT_ZERO_TERM=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_XARGS_SUPPORT_REPL_STR is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_XARGS_SUPPORT_PARALLEL is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_XARGS_SUPPORT_ARGS_FILE is not set +CONFIG_BUSYBOX_DEFAULT_HALT=y +CONFIG_BUSYBOX_DEFAULT_POWEROFF=y +CONFIG_BUSYBOX_DEFAULT_REBOOT=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_WAIT_FOR_INIT is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_CALL_TELINIT is not set +CONFIG_BUSYBOX_DEFAULT_TELINIT_PATH="" +# CONFIG_BUSYBOX_DEFAULT_INIT is not set +# CONFIG_BUSYBOX_DEFAULT_LINUXRC is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_USE_INITTAB is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_KILL_REMOVED is not set +CONFIG_BUSYBOX_DEFAULT_FEATURE_KILL_DELAY=0 +# CONFIG_BUSYBOX_DEFAULT_FEATURE_INIT_SCTTY is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_INIT_SYSLOG is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_INIT_QUIET is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_INIT_COREDUMPS is not set +CONFIG_BUSYBOX_DEFAULT_INIT_TERMINAL_TYPE="" +# CONFIG_BUSYBOX_DEFAULT_FEATURE_INIT_MODIFY_CMDLINE is not set +CONFIG_BUSYBOX_DEFAULT_FEATURE_SHADOWPASSWDS=y +# CONFIG_BUSYBOX_DEFAULT_USE_BB_PWD_GRP is not set +# CONFIG_BUSYBOX_DEFAULT_USE_BB_SHADOW is not set +# CONFIG_BUSYBOX_DEFAULT_USE_BB_CRYPT is not set +# CONFIG_BUSYBOX_DEFAULT_USE_BB_CRYPT_SHA is not set +# CONFIG_BUSYBOX_DEFAULT_ADD_SHELL is not set +# CONFIG_BUSYBOX_DEFAULT_REMOVE_SHELL is not set +# CONFIG_BUSYBOX_DEFAULT_ADDGROUP is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_ADDUSER_TO_GROUP is not set +# CONFIG_BUSYBOX_DEFAULT_ADDUSER is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_CHECK_NAMES is not set +CONFIG_BUSYBOX_DEFAULT_LAST_ID=0 +CONFIG_BUSYBOX_DEFAULT_FIRST_SYSTEM_ID=0 +CONFIG_BUSYBOX_DEFAULT_LAST_SYSTEM_ID=0 +# CONFIG_BUSYBOX_DEFAULT_CHPASSWD is not set +CONFIG_BUSYBOX_DEFAULT_FEATURE_DEFAULT_PASSWD_ALGO="md5" +# CONFIG_BUSYBOX_DEFAULT_CRYPTPW is not set +# CONFIG_BUSYBOX_DEFAULT_MKPASSWD is not set +# CONFIG_BUSYBOX_DEFAULT_DELUSER is not set +# CONFIG_BUSYBOX_DEFAULT_DELGROUP is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_DEL_USER_FROM_GROUP is not set +# CONFIG_BUSYBOX_DEFAULT_GETTY is not set +CONFIG_BUSYBOX_DEFAULT_LOGIN=y +CONFIG_BUSYBOX_DEFAULT_LOGIN_SESSION_AS_CHILD=y +# CONFIG_BUSYBOX_DEFAULT_LOGIN_SCRIPTS is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_NOLOGIN is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_SECURETTY is not set +CONFIG_BUSYBOX_DEFAULT_PASSWD=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_PASSWD_WEAK_CHECK=y +# CONFIG_BUSYBOX_DEFAULT_SU is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_SU_SYSLOG is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_SU_CHECKS_SHELLS is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_SU_BLANK_PW_NEEDS_SECURE_TTY is not set +# CONFIG_BUSYBOX_DEFAULT_SULOGIN is not set +# CONFIG_BUSYBOX_DEFAULT_VLOCK is not set +# CONFIG_BUSYBOX_DEFAULT_CHATTR is not set +# CONFIG_BUSYBOX_DEFAULT_FSCK is not set +# CONFIG_BUSYBOX_DEFAULT_LSATTR is not set +# CONFIG_BUSYBOX_DEFAULT_TUNE2FS is not set +# CONFIG_BUSYBOX_DEFAULT_MODPROBE_SMALL is not set +# CONFIG_BUSYBOX_DEFAULT_DEPMOD is not set +# CONFIG_BUSYBOX_DEFAULT_INSMOD is not set +# CONFIG_BUSYBOX_DEFAULT_LSMOD is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set +# CONFIG_BUSYBOX_DEFAULT_MODINFO is not set +# CONFIG_BUSYBOX_DEFAULT_MODPROBE is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_MODPROBE_BLACKLIST is not set +# CONFIG_BUSYBOX_DEFAULT_RMMOD is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_CMDLINE_MODULE_OPTIONS is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_2_4_MODULES is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_INSMOD_VERSION_CHECKING is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_INSMOD_LOADINKMEM is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_INSMOD_LOAD_MAP is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_INSMOD_LOAD_MAP_FULL is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_CHECK_TAINTED_MODULE is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_INSMOD_TRY_MMAP is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_MODUTILS_ALIAS is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_MODUTILS_SYMBOLS is not set +CONFIG_BUSYBOX_DEFAULT_DEFAULT_MODULES_DIR="" +CONFIG_BUSYBOX_DEFAULT_DEFAULT_DEPMOD_FILE="" +# CONFIG_BUSYBOX_DEFAULT_ACPID is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_ACPID_COMPAT is not set +# CONFIG_BUSYBOX_DEFAULT_BLKDISCARD is not set +# CONFIG_BUSYBOX_DEFAULT_BLKID is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_BLKID_TYPE is not set +# CONFIG_BUSYBOX_DEFAULT_BLOCKDEV is not set +# CONFIG_BUSYBOX_DEFAULT_CAL is not set +# CONFIG_BUSYBOX_DEFAULT_CHRT is not set +CONFIG_BUSYBOX_DEFAULT_DMESG=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_DMESG_PRETTY=y +# CONFIG_BUSYBOX_DEFAULT_EJECT is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_EJECT_SCSI is not set +# CONFIG_BUSYBOX_DEFAULT_FALLOCATE is not set +# CONFIG_BUSYBOX_DEFAULT_FATATTR is not set +# CONFIG_BUSYBOX_DEFAULT_FBSET is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_FBSET_FANCY is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_FBSET_READMODE is not set +# CONFIG_BUSYBOX_DEFAULT_FDFORMAT is not set +# CONFIG_BUSYBOX_DEFAULT_FDISK is not set +# CONFIG_BUSYBOX_DEFAULT_FDISK_SUPPORT_LARGE_DISKS is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_FDISK_WRITABLE is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_AIX_LABEL is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_SGI_LABEL is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_SUN_LABEL is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_OSF_LABEL is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_GPT_LABEL is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_FDISK_ADVANCED is not set +# CONFIG_BUSYBOX_DEFAULT_FINDFS is not set +CONFIG_BUSYBOX_DEFAULT_FLOCK=y +# CONFIG_BUSYBOX_DEFAULT_FDFLUSH is not set +# CONFIG_BUSYBOX_DEFAULT_FREERAMDISK is not set +# CONFIG_BUSYBOX_DEFAULT_FSCK_MINIX is not set +# CONFIG_BUSYBOX_DEFAULT_FSFREEZE is not set +# CONFIG_BUSYBOX_DEFAULT_FSTRIM is not set +# CONFIG_BUSYBOX_DEFAULT_GETOPT is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_GETOPT_LONG is not set +CONFIG_BUSYBOX_DEFAULT_HEXDUMP=y +# CONFIG_BUSYBOX_DEFAULT_HD is not set +# CONFIG_BUSYBOX_DEFAULT_XXD is not set +CONFIG_BUSYBOX_DEFAULT_HWCLOCK=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_HWCLOCK_ADJTIME_FHS is not set +# CONFIG_BUSYBOX_DEFAULT_IONICE is not set +# CONFIG_BUSYBOX_DEFAULT_IPCRM is not set +# CONFIG_BUSYBOX_DEFAULT_LAST is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_LAST_FANCY is not set +# CONFIG_BUSYBOX_DEFAULT_LOSETUP is not set +# CONFIG_BUSYBOX_DEFAULT_LSPCI is not set +# CONFIG_BUSYBOX_DEFAULT_LSUSB is not set +# CONFIG_BUSYBOX_DEFAULT_MDEV is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_MDEV_CONF is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_MDEV_RENAME is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_MDEV_RENAME_REGEXP is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_MDEV_EXEC is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_MDEV_LOAD_FIRMWARE is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_MDEV_DAEMON is not set +# CONFIG_BUSYBOX_DEFAULT_MESG is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_MESG_ENABLE_ONLY_GROUP is not set +# CONFIG_BUSYBOX_DEFAULT_MKE2FS is not set +# CONFIG_BUSYBOX_DEFAULT_MKFS_EXT2 is not set +# CONFIG_BUSYBOX_DEFAULT_MKFS_MINIX is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_MINIX2 is not set +# CONFIG_BUSYBOX_DEFAULT_MKFS_REISER is not set +# CONFIG_BUSYBOX_DEFAULT_MKDOSFS is not set +# CONFIG_BUSYBOX_DEFAULT_MKFS_VFAT is not set +CONFIG_BUSYBOX_DEFAULT_MKSWAP=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_MKSWAP_UUID is not set +# CONFIG_BUSYBOX_DEFAULT_MORE is not set +CONFIG_BUSYBOX_DEFAULT_MOUNT=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_MOUNT_FAKE is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_MOUNT_VERBOSE is not set +CONFIG_BUSYBOX_DEFAULT_FEATURE_MOUNT_HELPERS=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_MOUNT_LABEL is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_MOUNT_NFS is not set +CONFIG_BUSYBOX_DEFAULT_FEATURE_MOUNT_CIFS=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_MOUNT_FLAGS=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_MOUNT_FSTAB=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_MOUNT_OTHERTAB is not set +# CONFIG_BUSYBOX_DEFAULT_MOUNTPOINT is not set +# CONFIG_BUSYBOX_DEFAULT_NOLOGIN is not set +# CONFIG_BUSYBOX_DEFAULT_NOLOGIN_DEPENDENCIES is not set +# CONFIG_BUSYBOX_DEFAULT_NSENTER is not set +CONFIG_BUSYBOX_DEFAULT_PIVOT_ROOT=y +# CONFIG_BUSYBOX_DEFAULT_RDATE is not set +# CONFIG_BUSYBOX_DEFAULT_RDEV is not set +# CONFIG_BUSYBOX_DEFAULT_READPROFILE is not set +# CONFIG_BUSYBOX_DEFAULT_RENICE is not set +# CONFIG_BUSYBOX_DEFAULT_REV is not set +# CONFIG_BUSYBOX_DEFAULT_RTCWAKE is not set +# CONFIG_BUSYBOX_DEFAULT_SCRIPT is not set +# CONFIG_BUSYBOX_DEFAULT_SCRIPTREPLAY is not set +# CONFIG_BUSYBOX_DEFAULT_SETARCH is not set +# CONFIG_BUSYBOX_DEFAULT_LINUX32 is not set +# CONFIG_BUSYBOX_DEFAULT_LINUX64 is not set +# CONFIG_BUSYBOX_DEFAULT_SETPRIV is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_SETPRIV_DUMP is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_SETPRIV_CAPABILITIES is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_SETPRIV_CAPABILITY_NAMES is not set +# CONFIG_BUSYBOX_DEFAULT_SETSID is not set +CONFIG_BUSYBOX_DEFAULT_SWAPON=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_SWAPON_DISCARD=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_SWAPON_PRI=y +CONFIG_BUSYBOX_DEFAULT_SWAPOFF=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_SWAPONOFF_LABEL is not set +CONFIG_BUSYBOX_DEFAULT_SWITCH_ROOT=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_TASKSET_FANCY is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_TASKSET_CPULIST is not set +# CONFIG_BUSYBOX_DEFAULT_UEVENT is not set +CONFIG_BUSYBOX_DEFAULT_UMOUNT=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_UMOUNT_ALL=y +# CONFIG_BUSYBOX_DEFAULT_UNSHARE is not set +# CONFIG_BUSYBOX_DEFAULT_WALL is not set +CONFIG_BUSYBOX_DEFAULT_FEATURE_MOUNT_LOOP=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_MOUNT_LOOP_CREATE is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_MTAB_SUPPORT is not set +# CONFIG_BUSYBOX_DEFAULT_VOLUMEID is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_VOLUMEID_BCACHE is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_VOLUMEID_BTRFS is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_VOLUMEID_CRAMFS is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_VOLUMEID_EROFS is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_VOLUMEID_EXFAT is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_VOLUMEID_EXT is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_VOLUMEID_F2FS is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_VOLUMEID_FAT is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_VOLUMEID_HFS is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_VOLUMEID_ISO9660 is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_VOLUMEID_JFS is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_VOLUMEID_LFS is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_VOLUMEID_LINUXRAID is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_VOLUMEID_LINUXSWAP is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_VOLUMEID_LUKS is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_VOLUMEID_MINIX is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_VOLUMEID_NILFS is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_VOLUMEID_NTFS is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_VOLUMEID_OCFS2 is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_VOLUMEID_REISERFS is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_VOLUMEID_ROMFS is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_VOLUMEID_SQUASHFS is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_VOLUMEID_SYSV is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_VOLUMEID_UBIFS is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_VOLUMEID_UDF is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_VOLUMEID_XFS is not set +# CONFIG_BUSYBOX_DEFAULT_ADJTIMEX is not set +# CONFIG_BUSYBOX_DEFAULT_BBCONFIG is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_COMPRESS_BBCONFIG is not set +# CONFIG_BUSYBOX_DEFAULT_BC is not set +# CONFIG_BUSYBOX_DEFAULT_DC is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_DC_BIG is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_DC_LIBM is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_BC_INTERACTIVE is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_BC_LONG_OPTIONS is not set +# CONFIG_BUSYBOX_DEFAULT_BEEP is not set +CONFIG_BUSYBOX_DEFAULT_FEATURE_BEEP_FREQ=0 +CONFIG_BUSYBOX_DEFAULT_FEATURE_BEEP_LENGTH_MS=0 +# CONFIG_BUSYBOX_DEFAULT_CHAT is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_CHAT_NOFAIL is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_CHAT_TTY_HIFI is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_CHAT_IMPLICIT_CR is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_CHAT_SWALLOW_OPTS is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_CHAT_SEND_ESCAPES is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_CHAT_VAR_ABORT_LEN is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_CHAT_CLR_ABORT is not set +# CONFIG_BUSYBOX_DEFAULT_CONSPY is not set +CONFIG_BUSYBOX_DEFAULT_CROND=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_CROND_D is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_CROND_CALL_SENDMAIL is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_CROND_SPECIAL_TIMES is not set +CONFIG_BUSYBOX_DEFAULT_FEATURE_CROND_DIR="/etc" +CONFIG_BUSYBOX_DEFAULT_CRONTAB=y +# CONFIG_BUSYBOX_DEFAULT_DEVFSD is not set +# CONFIG_BUSYBOX_DEFAULT_DEVFSD_MODLOAD is not set +# CONFIG_BUSYBOX_DEFAULT_DEVFSD_FG_NP is not set +# CONFIG_BUSYBOX_DEFAULT_DEVFSD_VERBOSE is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_DEVFS is not set +# CONFIG_BUSYBOX_DEFAULT_FBSPLASH is not set +# CONFIG_BUSYBOX_DEFAULT_FLASH_ERASEALL is not set +# CONFIG_BUSYBOX_DEFAULT_FLASH_LOCK is not set +# CONFIG_BUSYBOX_DEFAULT_FLASH_UNLOCK is not set +# CONFIG_BUSYBOX_DEFAULT_FLASHCP is not set +# CONFIG_BUSYBOX_DEFAULT_HDPARM is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_HDPARM_GET_IDENTITY is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_HDPARM_HDIO_DRIVE_RESET is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_HDPARM_HDIO_TRISTATE_HWIF is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_HDPARM_HDIO_GETSET_DMA is not set +# CONFIG_BUSYBOX_DEFAULT_HEXEDIT is not set +# CONFIG_BUSYBOX_DEFAULT_I2CGET is not set +# CONFIG_BUSYBOX_DEFAULT_I2CSET is not set +# CONFIG_BUSYBOX_DEFAULT_I2CDUMP is not set +# CONFIG_BUSYBOX_DEFAULT_I2CDETECT is not set +# CONFIG_BUSYBOX_DEFAULT_I2CTRANSFER is not set +# CONFIG_BUSYBOX_DEFAULT_INOTIFYD is not set +CONFIG_BUSYBOX_DEFAULT_LESS=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_LESS_MAXLINES=9999999 +# CONFIG_BUSYBOX_DEFAULT_FEATURE_LESS_BRACKETS is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_LESS_FLAGS is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_LESS_TRUNCATE is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_LESS_MARKS is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_LESS_REGEXP is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_LESS_WINCH is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_LESS_ASK_TERMINAL is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_LESS_DASHCMD is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_LESS_LINENUMS is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_LESS_RAW is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_LESS_ENV is not set +CONFIG_BUSYBOX_DEFAULT_LOCK=y +# CONFIG_BUSYBOX_DEFAULT_LSSCSI is not set +# CONFIG_BUSYBOX_DEFAULT_MAKEDEVS is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_MAKEDEVS_LEAF is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_MAKEDEVS_TABLE is not set +# CONFIG_BUSYBOX_DEFAULT_MAN is not set +# CONFIG_BUSYBOX_DEFAULT_MICROCOM is not set +# CONFIG_BUSYBOX_DEFAULT_MIM is not set +# CONFIG_BUSYBOX_DEFAULT_MT is not set +# CONFIG_BUSYBOX_DEFAULT_NANDWRITE is not set +# CONFIG_BUSYBOX_DEFAULT_NANDDUMP is not set +# CONFIG_BUSYBOX_DEFAULT_PARTPROBE is not set +# CONFIG_BUSYBOX_DEFAULT_RAIDAUTORUN is not set +# CONFIG_BUSYBOX_DEFAULT_READAHEAD is not set +# CONFIG_BUSYBOX_DEFAULT_RFKILL is not set +# CONFIG_BUSYBOX_DEFAULT_RUNLEVEL is not set +# CONFIG_BUSYBOX_DEFAULT_RX is not set +# CONFIG_BUSYBOX_DEFAULT_SETFATTR is not set +# CONFIG_BUSYBOX_DEFAULT_SETSERIAL is not set +CONFIG_BUSYBOX_DEFAULT_STRINGS=y +CONFIG_BUSYBOX_DEFAULT_TIME=y +# CONFIG_BUSYBOX_DEFAULT_TS is not set +# CONFIG_BUSYBOX_DEFAULT_TTYSIZE is not set +# CONFIG_BUSYBOX_DEFAULT_UBIATTACH is not set +# CONFIG_BUSYBOX_DEFAULT_UBIDETACH is not set +# CONFIG_BUSYBOX_DEFAULT_UBIMKVOL is not set +# CONFIG_BUSYBOX_DEFAULT_UBIRMVOL is not set +# CONFIG_BUSYBOX_DEFAULT_UBIRSVOL is not set +# CONFIG_BUSYBOX_DEFAULT_UBIUPDATEVOL is not set +# CONFIG_BUSYBOX_DEFAULT_UBIRENAME is not set +# CONFIG_BUSYBOX_DEFAULT_VOLNAME is not set +# CONFIG_BUSYBOX_DEFAULT_WATCHDOG is not set +CONFIG_BUSYBOX_DEFAULT_FEATURE_IPV6=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_UNIX_LOCAL is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_PREFER_IPV4_ADDRESS is not set +CONFIG_BUSYBOX_DEFAULT_VERBOSE_RESOLUTION_ERRORS=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_TLS_SHA1 is not set +# CONFIG_BUSYBOX_DEFAULT_ARP is not set +CONFIG_BUSYBOX_DEFAULT_BRCTL=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_BRCTL_FANCY=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_BRCTL_SHOW=y +# CONFIG_BUSYBOX_DEFAULT_DNSD is not set +# CONFIG_BUSYBOX_DEFAULT_ETHER_WAKE is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_FTPD_ACCEPT_BROKEN_LIST is not set +# CONFIG_BUSYBOX_DEFAULT_HOSTNAME is not set +# CONFIG_BUSYBOX_DEFAULT_DNSDOMAINNAME is not set +# CONFIG_BUSYBOX_DEFAULT_HTTPD is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_HTTPD_RANGES is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_HTTPD_SETUID is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_HTTPD_BASIC_AUTH is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_HTTPD_AUTH_MD5 is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_HTTPD_CGI is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_HTTPD_ENCODE_URL_STR is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_HTTPD_ERROR_PAGES is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_HTTPD_PROXY is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_HTTPD_GZIP is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_HTTPD_ETAG is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_HTTPD_LAST_MODIFIED is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_HTTPD_DATE is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_HTTPD_ACL_IP is not set +CONFIG_BUSYBOX_DEFAULT_IFCONFIG=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_IFCONFIG_STATUS=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_IFCONFIG_SLIP is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set +CONFIG_BUSYBOX_DEFAULT_FEATURE_IFCONFIG_HW=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_IFCONFIG_BROADCAST_PLUS=y +# CONFIG_BUSYBOX_DEFAULT_IFENSLAVE is not set +# CONFIG_BUSYBOX_DEFAULT_IFPLUGD is not set +# CONFIG_BUSYBOX_DEFAULT_IFUP is not set +# CONFIG_BUSYBOX_DEFAULT_IFDOWN is not set +CONFIG_BUSYBOX_DEFAULT_IFUPDOWN_IFSTATE_PATH="" +# CONFIG_BUSYBOX_DEFAULT_FEATURE_IFUPDOWN_IP is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_IFUPDOWN_IPV4 is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_IFUPDOWN_IPV6 is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_IFUPDOWN_MAPPING is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_IFUPDOWN_EXTERNAL_DHCP is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_INETD_RPC is not set +CONFIG_BUSYBOX_DEFAULT_IP=y +# CONFIG_BUSYBOX_DEFAULT_IPADDR is not set +# CONFIG_BUSYBOX_DEFAULT_IPLINK is not set +# CONFIG_BUSYBOX_DEFAULT_IPROUTE is not set +# CONFIG_BUSYBOX_DEFAULT_IPTUNNEL is not set +# CONFIG_BUSYBOX_DEFAULT_IPRULE is not set +# CONFIG_BUSYBOX_DEFAULT_IPNEIGH is not set +CONFIG_BUSYBOX_DEFAULT_FEATURE_IP_ADDRESS=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_IP_LINK=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_IP_ROUTE=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_IP_ROUTE_DIR="/etc/iproute2" +# CONFIG_BUSYBOX_DEFAULT_FEATURE_IP_TUNNEL is not set +CONFIG_BUSYBOX_DEFAULT_FEATURE_IP_RULE=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_IP_NEIGH=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_IP_RARE_PROTOCOLS is not set +# CONFIG_BUSYBOX_DEFAULT_IPCALC is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_IPCALC_LONG_OPTIONS is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_IPCALC_FANCY is not set +# CONFIG_BUSYBOX_DEFAULT_FAKEIDENTD is not set +# CONFIG_BUSYBOX_DEFAULT_NAMEIF is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_NAMEIF_EXTENDED is not set +# CONFIG_BUSYBOX_DEFAULT_NBDCLIENT is not set +CONFIG_BUSYBOX_DEFAULT_NC=y +# CONFIG_BUSYBOX_DEFAULT_NETCAT is not set +# CONFIG_BUSYBOX_DEFAULT_NC_SERVER is not set +# CONFIG_BUSYBOX_DEFAULT_NC_EXTRA is not set +# CONFIG_BUSYBOX_DEFAULT_NC_110_COMPAT is not set +CONFIG_BUSYBOX_DEFAULT_NETMSG=y +CONFIG_BUSYBOX_DEFAULT_NETSTAT=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_NETSTAT_WIDE=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_NETSTAT_PRG=y +# CONFIG_BUSYBOX_DEFAULT_NSLOOKUP is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_NSLOOKUP_BIG is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_NSLOOKUP_LONG_OPTIONS is not set +CONFIG_BUSYBOX_DEFAULT_NSLOOKUP_OPENWRT=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_NSLOOKUP_OPENWRT_LONG_OPTIONS is not set +CONFIG_BUSYBOX_DEFAULT_NTPD=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_NTPD_SERVER=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_NTPD_CONF is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_NTP_AUTH is not set +CONFIG_BUSYBOX_DEFAULT_PING=y +CONFIG_BUSYBOX_DEFAULT_PING6=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_FANCY_PING=y +# CONFIG_BUSYBOX_DEFAULT_PSCAN is not set +CONFIG_BUSYBOX_DEFAULT_ROUTE=y +# CONFIG_BUSYBOX_DEFAULT_SLATTACH is not set +# CONFIG_BUSYBOX_DEFAULT_SSL_CLIENT is not set +# CONFIG_BUSYBOX_DEFAULT_TC is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_TC_INGRESS is not set +# CONFIG_BUSYBOX_DEFAULT_TCPSVD is not set +# CONFIG_BUSYBOX_DEFAULT_UDPSVD is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_TELNET_TTYPE is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_TELNET_AUTOLOGIN is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_TELNET_WIDTH is not set +# CONFIG_BUSYBOX_DEFAULT_TELNETD is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_TELNETD_STANDALONE is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_TELNETD_INETD_WAIT is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_TFTP_PROGRESS_BAR is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_TFTP_HPA_COMPAT is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_TFTP_BLOCKSIZE is not set +# CONFIG_BUSYBOX_DEFAULT_TFTP_DEBUG is not set +# CONFIG_BUSYBOX_DEFAULT_TLS is not set +CONFIG_BUSYBOX_DEFAULT_TRACEROUTE=y +CONFIG_BUSYBOX_DEFAULT_TRACEROUTE6=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_TRACEROUTE_VERBOSE=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_TRACEROUTE_USE_ICMP is not set +# CONFIG_BUSYBOX_DEFAULT_TUNCTL is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_TUNCTL_UG is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_WGET_TIMEOUT is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_WGET_HTTPS is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_WGET_OPENSSL is not set +# CONFIG_BUSYBOX_DEFAULT_WHOIS is not set +# CONFIG_BUSYBOX_DEFAULT_ZCIP is not set +# CONFIG_BUSYBOX_DEFAULT_UDHCPD is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_UDHCPD_BASE_IP_ON_MAC is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_UDHCPD_WRITE_LEASES_EARLY is not set +CONFIG_BUSYBOX_DEFAULT_DHCPD_LEASES_FILE="" +# CONFIG_BUSYBOX_DEFAULT_DUMPLEASES is not set +# CONFIG_BUSYBOX_DEFAULT_DHCPRELAY is not set +CONFIG_BUSYBOX_DEFAULT_UDHCPC=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_UDHCPC_ARPING is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_UDHCPC_SANITIZEOPT is not set +CONFIG_BUSYBOX_DEFAULT_UDHCPC_DEFAULT_SCRIPT="/usr/share/udhcpc/default.script" +# CONFIG_BUSYBOX_DEFAULT_UDHCPC6 is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_UDHCPC6_RFC3646 is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_UDHCPC6_RFC4704 is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_UDHCPC6_RFC4833 is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_UDHCPC6_RFC5970 is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_UDHCP_PORT is not set +CONFIG_BUSYBOX_DEFAULT_UDHCP_DEBUG=0 +CONFIG_BUSYBOX_DEFAULT_UDHCPC_SLACK_FOR_BUGGY_SERVERS=80 +CONFIG_BUSYBOX_DEFAULT_FEATURE_UDHCP_RFC3397=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_UDHCP_8021Q is not set +CONFIG_BUSYBOX_DEFAULT_IFUPDOWN_UDHCPC_CMD_OPTIONS="" +# CONFIG_BUSYBOX_DEFAULT_LPD is not set +# CONFIG_BUSYBOX_DEFAULT_LPR is not set +# CONFIG_BUSYBOX_DEFAULT_LPQ is not set +# CONFIG_BUSYBOX_DEFAULT_MAKEMIME is not set +# CONFIG_BUSYBOX_DEFAULT_POPMAILDIR is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_POPMAILDIR_DELIVERY is not set +# CONFIG_BUSYBOX_DEFAULT_REFORMIME is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_REFORMIME_COMPAT is not set +# CONFIG_BUSYBOX_DEFAULT_SENDMAIL is not set +CONFIG_BUSYBOX_DEFAULT_FEATURE_MIME_CHARSET="" +CONFIG_BUSYBOX_DEFAULT_FREE=y +# CONFIG_BUSYBOX_DEFAULT_FUSER is not set +# CONFIG_BUSYBOX_DEFAULT_IOSTAT is not set +CONFIG_BUSYBOX_DEFAULT_KILL=y +CONFIG_BUSYBOX_DEFAULT_KILLALL=y +# CONFIG_BUSYBOX_DEFAULT_KILLALL5 is not set +# CONFIG_BUSYBOX_DEFAULT_LSOF is not set +# CONFIG_BUSYBOX_DEFAULT_MPSTAT is not set +# CONFIG_BUSYBOX_DEFAULT_NMETER is not set +CONFIG_BUSYBOX_DEFAULT_PGREP=y +# CONFIG_BUSYBOX_DEFAULT_PKILL is not set +CONFIG_BUSYBOX_DEFAULT_PIDOF=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_PIDOF_SINGLE is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_PIDOF_OMIT is not set +# CONFIG_BUSYBOX_DEFAULT_PMAP is not set +# CONFIG_BUSYBOX_DEFAULT_POWERTOP is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_POWERTOP_INTERACTIVE is not set +CONFIG_BUSYBOX_DEFAULT_PS=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_PS_WIDE=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_PS_LONG is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_PS_TIME is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_PS_UNUSUAL_SYSTEMS is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_PS_ADDITIONAL_COLUMNS is not set +# CONFIG_BUSYBOX_DEFAULT_PSTREE is not set +# CONFIG_BUSYBOX_DEFAULT_PWDX is not set +# CONFIG_BUSYBOX_DEFAULT_SMEMCAP is not set +CONFIG_BUSYBOX_DEFAULT_BB_SYSCTL=y +CONFIG_BUSYBOX_DEFAULT_TOP=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_TOP_INTERACTIVE is not set +CONFIG_BUSYBOX_DEFAULT_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_TOP_CPU_GLOBAL_PERCENTS=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_TOP_SMP_CPU is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_TOP_DECIMALS is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_TOP_SMP_PROCESS is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_TOPMEM is not set +CONFIG_BUSYBOX_DEFAULT_UPTIME=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_UPTIME_UTMP_SUPPORT is not set +# CONFIG_BUSYBOX_DEFAULT_WATCH is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_SHOW_THREADS is not set +# CONFIG_BUSYBOX_DEFAULT_CHPST is not set +# CONFIG_BUSYBOX_DEFAULT_SETUIDGID is not set +# CONFIG_BUSYBOX_DEFAULT_ENVUIDGID is not set +# CONFIG_BUSYBOX_DEFAULT_ENVDIR is not set +# CONFIG_BUSYBOX_DEFAULT_SOFTLIMIT is not set +# CONFIG_BUSYBOX_DEFAULT_RUNSV is not set +# CONFIG_BUSYBOX_DEFAULT_RUNSVDIR is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_RUNSVDIR_LOG is not set +# CONFIG_BUSYBOX_DEFAULT_SV is not set +CONFIG_BUSYBOX_DEFAULT_SV_DEFAULT_SERVICE_DIR="" +# CONFIG_BUSYBOX_DEFAULT_SVC is not set +# CONFIG_BUSYBOX_DEFAULT_SVOK is not set +# CONFIG_BUSYBOX_DEFAULT_SVLOGD is not set +# CONFIG_BUSYBOX_DEFAULT_CHCON is not set +# CONFIG_BUSYBOX_DEFAULT_GETENFORCE is not set +# CONFIG_BUSYBOX_DEFAULT_GETSEBOOL is not set +# CONFIG_BUSYBOX_DEFAULT_LOAD_POLICY is not set +# CONFIG_BUSYBOX_DEFAULT_MATCHPATHCON is not set +# CONFIG_BUSYBOX_DEFAULT_RUNCON is not set +# CONFIG_BUSYBOX_DEFAULT_SELINUXENABLED is not set +# CONFIG_BUSYBOX_DEFAULT_SESTATUS is not set +# CONFIG_BUSYBOX_DEFAULT_SETENFORCE is not set +# CONFIG_BUSYBOX_DEFAULT_SETFILES is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_SETFILES_CHECK_OPTION is not set +# CONFIG_BUSYBOX_DEFAULT_RESTORECON is not set +# CONFIG_BUSYBOX_DEFAULT_SETSEBOOL is not set +CONFIG_BUSYBOX_DEFAULT_SH_IS_ASH=y +# CONFIG_BUSYBOX_DEFAULT_SH_IS_HUSH is not set +# CONFIG_BUSYBOX_DEFAULT_SH_IS_NONE is not set +# CONFIG_BUSYBOX_DEFAULT_BASH_IS_ASH is not set +# CONFIG_BUSYBOX_DEFAULT_BASH_IS_HUSH is not set +CONFIG_BUSYBOX_DEFAULT_BASH_IS_NONE=y +CONFIG_BUSYBOX_DEFAULT_SHELL_ASH=y +CONFIG_BUSYBOX_DEFAULT_ASH=y +# CONFIG_BUSYBOX_DEFAULT_ASH_OPTIMIZE_FOR_SIZE is not set +CONFIG_BUSYBOX_DEFAULT_ASH_INTERNAL_GLOB=y +CONFIG_BUSYBOX_DEFAULT_ASH_BASH_COMPAT=y +# CONFIG_BUSYBOX_DEFAULT_ASH_BASH_SOURCE_CURDIR is not set +# CONFIG_BUSYBOX_DEFAULT_ASH_BASH_NOT_FOUND_HOOK is not set +CONFIG_BUSYBOX_DEFAULT_ASH_JOB_CONTROL=y +CONFIG_BUSYBOX_DEFAULT_ASH_ALIAS=y +# CONFIG_BUSYBOX_DEFAULT_ASH_RANDOM_SUPPORT is not set +CONFIG_BUSYBOX_DEFAULT_ASH_EXPAND_PRMT=y +# CONFIG_BUSYBOX_DEFAULT_ASH_IDLE_TIMEOUT is not set +# CONFIG_BUSYBOX_DEFAULT_ASH_MAIL is not set +CONFIG_BUSYBOX_DEFAULT_ASH_ECHO=y +CONFIG_BUSYBOX_DEFAULT_ASH_PRINTF=y +CONFIG_BUSYBOX_DEFAULT_ASH_TEST=y +# CONFIG_BUSYBOX_DEFAULT_ASH_HELP is not set +CONFIG_BUSYBOX_DEFAULT_ASH_GETOPTS=y +CONFIG_BUSYBOX_DEFAULT_ASH_CMDCMD=y +# CONFIG_BUSYBOX_DEFAULT_CTTYHACK is not set +# CONFIG_BUSYBOX_DEFAULT_HUSH is not set +# CONFIG_BUSYBOX_DEFAULT_SHELL_HUSH is not set +# CONFIG_BUSYBOX_DEFAULT_HUSH_BASH_COMPAT is not set +# CONFIG_BUSYBOX_DEFAULT_HUSH_BRACE_EXPANSION is not set +# CONFIG_BUSYBOX_DEFAULT_HUSH_LINENO_VAR is not set +# CONFIG_BUSYBOX_DEFAULT_HUSH_BASH_SOURCE_CURDIR is not set +# CONFIG_BUSYBOX_DEFAULT_HUSH_INTERACTIVE is not set +# CONFIG_BUSYBOX_DEFAULT_HUSH_SAVEHISTORY is not set +# CONFIG_BUSYBOX_DEFAULT_HUSH_JOB is not set +# CONFIG_BUSYBOX_DEFAULT_HUSH_TICK is not set +# CONFIG_BUSYBOX_DEFAULT_HUSH_IF is not set +# CONFIG_BUSYBOX_DEFAULT_HUSH_LOOPS is not set +# CONFIG_BUSYBOX_DEFAULT_HUSH_CASE is not set +# CONFIG_BUSYBOX_DEFAULT_HUSH_FUNCTIONS is not set +# CONFIG_BUSYBOX_DEFAULT_HUSH_LOCAL is not set +# CONFIG_BUSYBOX_DEFAULT_HUSH_RANDOM_SUPPORT is not set +# CONFIG_BUSYBOX_DEFAULT_HUSH_MODE_X is not set +# CONFIG_BUSYBOX_DEFAULT_HUSH_ECHO is not set +# CONFIG_BUSYBOX_DEFAULT_HUSH_PRINTF is not set +# CONFIG_BUSYBOX_DEFAULT_HUSH_TEST is not set +# CONFIG_BUSYBOX_DEFAULT_HUSH_HELP is not set +# CONFIG_BUSYBOX_DEFAULT_HUSH_EXPORT is not set +# CONFIG_BUSYBOX_DEFAULT_HUSH_EXPORT_N is not set +# CONFIG_BUSYBOX_DEFAULT_HUSH_READONLY is not set +# CONFIG_BUSYBOX_DEFAULT_HUSH_KILL is not set +# CONFIG_BUSYBOX_DEFAULT_HUSH_WAIT is not set +# CONFIG_BUSYBOX_DEFAULT_HUSH_COMMAND is not set +# CONFIG_BUSYBOX_DEFAULT_HUSH_TRAP is not set +# CONFIG_BUSYBOX_DEFAULT_HUSH_TYPE is not set +# CONFIG_BUSYBOX_DEFAULT_HUSH_TIMES is not set +# CONFIG_BUSYBOX_DEFAULT_HUSH_READ is not set +# CONFIG_BUSYBOX_DEFAULT_HUSH_SET is not set +# CONFIG_BUSYBOX_DEFAULT_HUSH_UNSET is not set +# CONFIG_BUSYBOX_DEFAULT_HUSH_ULIMIT is not set +# CONFIG_BUSYBOX_DEFAULT_HUSH_UMASK is not set +# CONFIG_BUSYBOX_DEFAULT_HUSH_GETOPTS is not set +# CONFIG_BUSYBOX_DEFAULT_HUSH_MEMLEAK is not set +CONFIG_BUSYBOX_DEFAULT_FEATURE_SH_MATH=y +CONFIG_BUSYBOX_DEFAULT_FEATURE_SH_MATH_64=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_SH_MATH_BASE is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_SH_EXTRA_QUIET is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_SH_STANDALONE is not set +CONFIG_BUSYBOX_DEFAULT_FEATURE_SH_NOFORK=y +# CONFIG_BUSYBOX_DEFAULT_FEATURE_SH_READ_FRAC is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_SH_HISTFILESIZE is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_SH_EMBEDDED_SCRIPTS is not set +# CONFIG_BUSYBOX_DEFAULT_KLOGD is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_KLOGD_KLOGCTL is not set +CONFIG_BUSYBOX_DEFAULT_LOGGER=y +# CONFIG_BUSYBOX_DEFAULT_LOGREAD is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_LOGREAD_REDUCED_LOCKING is not set +# CONFIG_BUSYBOX_DEFAULT_SYSLOGD is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_ROTATE_LOGFILE is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_REMOTE_LOG is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_SYSLOGD_DUP is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_SYSLOGD_CFG is not set +# CONFIG_BUSYBOX_DEFAULT_FEATURE_SYSLOGD_PRECISE_TIMESTAMPS is not set +CONFIG_BUSYBOX_DEFAULT_FEATURE_SYSLOGD_READ_BUFFER_SIZE=0 +# CONFIG_BUSYBOX_DEFAULT_FEATURE_IPC_SYSLOG is not set +CONFIG_BUSYBOX_DEFAULT_FEATURE_IPC_SYSLOG_BUFFER_SIZE=0 +# CONFIG_BUSYBOX_DEFAULT_FEATURE_KMSG_SYSLOG is not set +CONFIG_BUSYBOX_CONFIG_HAVE_DOT_CONFIG=y + +# +# Settings +# +# CONFIG_BUSYBOX_CONFIG_DESKTOP is not set +# CONFIG_BUSYBOX_CONFIG_EXTRA_COMPAT is not set +# CONFIG_BUSYBOX_CONFIG_FEDORA_COMPAT is not set +CONFIG_BUSYBOX_CONFIG_INCLUDE_SUSv2=y +CONFIG_BUSYBOX_CONFIG_LONG_OPTS=y +CONFIG_BUSYBOX_CONFIG_SHOW_USAGE=y +CONFIG_BUSYBOX_CONFIG_FEATURE_VERBOSE_USAGE=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_COMPRESS_USAGE is not set +CONFIG_BUSYBOX_CONFIG_LFS=y +# CONFIG_BUSYBOX_CONFIG_PAM is not set +CONFIG_BUSYBOX_CONFIG_FEATURE_DEVPTS=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_UTMP is not set +CONFIG_BUSYBOX_CONFIG_FEATURE_PIDFILE=y +CONFIG_BUSYBOX_CONFIG_PID_FILE_PATH="/var/run" +CONFIG_BUSYBOX_CONFIG_BUSYBOX=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_SHOW_SCRIPT is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_INSTALLER is not set +# CONFIG_BUSYBOX_CONFIG_INSTALL_NO_USR is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_SUID is not set +CONFIG_BUSYBOX_CONFIG_FEATURE_PREFER_APPLETS=y +CONFIG_BUSYBOX_CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe" +# CONFIG_BUSYBOX_CONFIG_SELINUX is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_CLEAN_UP is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_SYSLOG_INFO is not set +CONFIG_BUSYBOX_CONFIG_FEATURE_SYSLOG=y + +# +# Build Options +# +# CONFIG_BUSYBOX_CONFIG_STATIC is not set +CONFIG_BUSYBOX_CONFIG_PIE=y +# CONFIG_BUSYBOX_CONFIG_NOMMU is not set +CONFIG_BUSYBOX_CONFIG_CROSS_COMPILER_PREFIX="" +CONFIG_BUSYBOX_CONFIG_SYSROOT="" +CONFIG_BUSYBOX_CONFIG_EXTRA_CFLAGS="" +CONFIG_BUSYBOX_CONFIG_EXTRA_LDFLAGS="" +CONFIG_BUSYBOX_CONFIG_EXTRA_LDLIBS="" +# CONFIG_BUSYBOX_CONFIG_USE_PORTABLE_CODE is not set +# CONFIG_BUSYBOX_CONFIG_STACK_OPTIMIZATION_386 is not set +# CONFIG_BUSYBOX_CONFIG_STATIC_LIBGCC is not set + +# +# Installation Options ("make install" behavior) +# +CONFIG_BUSYBOX_CONFIG_INSTALL_APPLET_SYMLINKS=y +# CONFIG_BUSYBOX_CONFIG_INSTALL_APPLET_HARDLINKS is not set +# CONFIG_BUSYBOX_CONFIG_INSTALL_APPLET_SCRIPT_WRAPPERS is not set +# CONFIG_BUSYBOX_CONFIG_INSTALL_APPLET_DONT is not set +CONFIG_BUSYBOX_CONFIG_PREFIX="./_install" + +# +# Debugging Options +# +# CONFIG_BUSYBOX_CONFIG_DEBUG is not set +# CONFIG_BUSYBOX_CONFIG_DEBUG_SANITIZE is not set +# CONFIG_BUSYBOX_CONFIG_UNIT_TEST is not set +# CONFIG_BUSYBOX_CONFIG_WERROR is not set +# CONFIG_BUSYBOX_CONFIG_WARN_SIMPLE_MSG is not set +CONFIG_BUSYBOX_CONFIG_NO_DEBUG_LIB=y +# CONFIG_BUSYBOX_CONFIG_DMALLOC is not set +# CONFIG_BUSYBOX_CONFIG_EFENCE is not set + +# +# Library Tuning +# +# CONFIG_BUSYBOX_CONFIG_FEATURE_USE_BSS_TAIL is not set +# CONFIG_BUSYBOX_CONFIG_FLOAT_DURATION is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_RTMINMAX is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_BUFFERS_USE_MALLOC is not set +CONFIG_BUSYBOX_CONFIG_FEATURE_BUFFERS_GO_ON_STACK=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set +CONFIG_BUSYBOX_CONFIG_PASSWORD_MINLEN=6 +CONFIG_BUSYBOX_CONFIG_MD5_SMALL=1 +CONFIG_BUSYBOX_CONFIG_SHA3_SMALL=1 +CONFIG_BUSYBOX_CONFIG_FEATURE_FAST_TOP=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_ETC_NETWORKS is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_ETC_SERVICES is not set +CONFIG_BUSYBOX_CONFIG_FEATURE_EDITING=y +CONFIG_BUSYBOX_CONFIG_FEATURE_EDITING_MAX_LEN=1024 +# CONFIG_BUSYBOX_CONFIG_FEATURE_EDITING_VI is not set +CONFIG_BUSYBOX_CONFIG_FEATURE_EDITING_HISTORY=256 +CONFIG_BUSYBOX_CONFIG_FEATURE_EDITING_SAVEHISTORY=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_EDITING_SAVE_ON_EXIT is not set +CONFIG_BUSYBOX_CONFIG_FEATURE_REVERSE_SEARCH=y +CONFIG_BUSYBOX_CONFIG_FEATURE_TAB_COMPLETION=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_USERNAME_COMPLETION is not set +CONFIG_BUSYBOX_CONFIG_FEATURE_EDITING_FANCY_PROMPT=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_EDITING_WINCH is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_EDITING_ASK_TERMINAL is not set +# CONFIG_BUSYBOX_CONFIG_LOCALE_SUPPORT is not set +# CONFIG_BUSYBOX_CONFIG_UNICODE_SUPPORT is not set +CONFIG_BUSYBOX_CONFIG_FEATURE_NON_POSIX_CP=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_VERBOSE_CP_MESSAGE is not set +CONFIG_BUSYBOX_CONFIG_FEATURE_USE_SENDFILE=y +CONFIG_BUSYBOX_CONFIG_FEATURE_COPYBUF_KB=4 +# CONFIG_BUSYBOX_CONFIG_FEATURE_SKIP_ROOTFS is not set +CONFIG_BUSYBOX_CONFIG_MONOTONIC_SYSCALL=y +CONFIG_BUSYBOX_CONFIG_IOCTL_HEX2STR_ERROR=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_HWIB is not set + +# +# Applets +# + +# +# Archival Utilities +# +CONFIG_BUSYBOX_CONFIG_FEATURE_SEAMLESS_XZ=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_SEAMLESS_LZMA is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_SEAMLESS_BZ2 is not set +CONFIG_BUSYBOX_CONFIG_FEATURE_SEAMLESS_GZ=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_SEAMLESS_Z is not set +# CONFIG_BUSYBOX_CONFIG_AR is not set +# CONFIG_BUSYBOX_CONFIG_UNCOMPRESS is not set +CONFIG_BUSYBOX_CONFIG_GUNZIP=y +CONFIG_BUSYBOX_CONFIG_ZCAT=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_GUNZIP_LONG_OPTIONS is not set +CONFIG_BUSYBOX_CONFIG_BUNZIP2=y +CONFIG_BUSYBOX_CONFIG_BZCAT=y +# CONFIG_BUSYBOX_CONFIG_UNLZMA is not set +# CONFIG_BUSYBOX_CONFIG_LZCAT is not set +# CONFIG_BUSYBOX_CONFIG_LZMA is not set +CONFIG_BUSYBOX_CONFIG_UNXZ=y +# CONFIG_BUSYBOX_CONFIG_XZCAT is not set +CONFIG_BUSYBOX_CONFIG_XZ=y +# CONFIG_BUSYBOX_CONFIG_BZIP2 is not set +CONFIG_BUSYBOX_CONFIG_FEATURE_BZIP2_DECOMPRESS=y +# CONFIG_BUSYBOX_CONFIG_CPIO is not set +# CONFIG_BUSYBOX_CONFIG_DPKG is not set +# CONFIG_BUSYBOX_CONFIG_DPKG_DEB is not set +CONFIG_BUSYBOX_CONFIG_GZIP=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_GZIP_LONG_OPTIONS is not set +CONFIG_BUSYBOX_CONFIG_GZIP_FAST=0 +# CONFIG_BUSYBOX_CONFIG_FEATURE_GZIP_LEVELS is not set +CONFIG_BUSYBOX_CONFIG_FEATURE_GZIP_DECOMPRESS=y +# CONFIG_BUSYBOX_CONFIG_LZOP is not set +# CONFIG_BUSYBOX_CONFIG_UNLZOP is not set +# CONFIG_BUSYBOX_CONFIG_LZOPCAT is not set +# CONFIG_BUSYBOX_CONFIG_RPM is not set +# CONFIG_BUSYBOX_CONFIG_RPM2CPIO is not set +CONFIG_BUSYBOX_CONFIG_TAR=y +CONFIG_BUSYBOX_CONFIG_FEATURE_TAR_LONG_OPTIONS=y +CONFIG_BUSYBOX_CONFIG_FEATURE_TAR_CREATE=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_TAR_AUTODETECT is not set +CONFIG_BUSYBOX_CONFIG_FEATURE_TAR_FROM=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY is not set +CONFIG_BUSYBOX_CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_TAR_TO_COMMAND is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_TAR_UNAME_GNAME is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_TAR_NOPRESERVE_TIME is not set +# CONFIG_BUSYBOX_CONFIG_UNZIP is not set + +# +# Coreutils +# +CONFIG_BUSYBOX_CONFIG_BASENAME=y +CONFIG_BUSYBOX_CONFIG_CAT=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_CATN is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_CATV is not set +CONFIG_BUSYBOX_CONFIG_CHGRP=y +CONFIG_BUSYBOX_CONFIG_CHMOD=y +CONFIG_BUSYBOX_CONFIG_CHOWN=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_CHOWN_LONG_OPTIONS is not set +CONFIG_BUSYBOX_CONFIG_CHROOT=y +# CONFIG_BUSYBOX_CONFIG_CKSUM is not set +# CONFIG_BUSYBOX_CONFIG_COMM is not set +CONFIG_BUSYBOX_CONFIG_CP=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_CP_LONG_OPTIONS is not set +CONFIG_BUSYBOX_CONFIG_CUT=y +CONFIG_BUSYBOX_CONFIG_DATE=y +CONFIG_BUSYBOX_CONFIG_FEATURE_DATE_ISOFMT=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_DATE_NANO is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_DATE_COMPAT is not set +CONFIG_BUSYBOX_CONFIG_DD=y +CONFIG_BUSYBOX_CONFIG_FEATURE_DD_SIGNAL_HANDLING=y +CONFIG_BUSYBOX_CONFIG_FEATURE_DD_THIRD_STATUS_LINE=y +CONFIG_BUSYBOX_CONFIG_FEATURE_DD_IBS_OBS=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_DD_STATUS is not set +CONFIG_BUSYBOX_CONFIG_DF=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_DF_FANCY is not set +CONFIG_BUSYBOX_CONFIG_DIRNAME=y +# CONFIG_BUSYBOX_CONFIG_DOS2UNIX is not set +# CONFIG_BUSYBOX_CONFIG_UNIX2DOS is not set +CONFIG_BUSYBOX_CONFIG_DU=y +CONFIG_BUSYBOX_CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y +CONFIG_BUSYBOX_CONFIG_ECHO=y +CONFIG_BUSYBOX_CONFIG_FEATURE_FANCY_ECHO=y +CONFIG_BUSYBOX_CONFIG_ENV=y +# CONFIG_BUSYBOX_CONFIG_EXPAND is not set +# CONFIG_BUSYBOX_CONFIG_UNEXPAND is not set +CONFIG_BUSYBOX_CONFIG_EXPR=y +CONFIG_BUSYBOX_CONFIG_EXPR_MATH_SUPPORT_64=y +# CONFIG_BUSYBOX_CONFIG_FACTOR is not set +CONFIG_BUSYBOX_CONFIG_FALSE=y +# CONFIG_BUSYBOX_CONFIG_FOLD is not set +CONFIG_BUSYBOX_CONFIG_HEAD=y +CONFIG_BUSYBOX_CONFIG_FEATURE_FANCY_HEAD=y +CONFIG_BUSYBOX_CONFIG_HOSTID=y +CONFIG_BUSYBOX_CONFIG_ID=y +# CONFIG_BUSYBOX_CONFIG_GROUPS is not set +# CONFIG_BUSYBOX_CONFIG_INSTALL is not set +# CONFIG_BUSYBOX_CONFIG_LINK is not set +CONFIG_BUSYBOX_CONFIG_LN=y +# CONFIG_BUSYBOX_CONFIG_LOGNAME is not set +CONFIG_BUSYBOX_CONFIG_LS=y +CONFIG_BUSYBOX_CONFIG_FEATURE_LS_FILETYPES=y +CONFIG_BUSYBOX_CONFIG_FEATURE_LS_FOLLOWLINKS=y +CONFIG_BUSYBOX_CONFIG_FEATURE_LS_RECURSIVE=y +CONFIG_BUSYBOX_CONFIG_FEATURE_LS_WIDTH=y +CONFIG_BUSYBOX_CONFIG_FEATURE_LS_SORTFILES=y +CONFIG_BUSYBOX_CONFIG_FEATURE_LS_TIMESTAMPS=y +CONFIG_BUSYBOX_CONFIG_FEATURE_LS_USERNAME=y +CONFIG_BUSYBOX_CONFIG_FEATURE_LS_COLOR=y +CONFIG_BUSYBOX_CONFIG_FEATURE_LS_COLOR_IS_DEFAULT=y +CONFIG_BUSYBOX_CONFIG_MD5SUM=y +# CONFIG_BUSYBOX_CONFIG_SHA1SUM is not set +CONFIG_BUSYBOX_CONFIG_SHA256SUM=y +# CONFIG_BUSYBOX_CONFIG_SHA512SUM is not set +# CONFIG_BUSYBOX_CONFIG_SHA3SUM is not set + +# +# Common options for md5sum, sha1sum, sha256sum, sha512sum, sha3sum +# +CONFIG_BUSYBOX_CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y +CONFIG_BUSYBOX_CONFIG_MKDIR=y +CONFIG_BUSYBOX_CONFIG_MKFIFO=y +CONFIG_BUSYBOX_CONFIG_MKNOD=y +CONFIG_BUSYBOX_CONFIG_MKTEMP=y +CONFIG_BUSYBOX_CONFIG_MV=y +CONFIG_BUSYBOX_CONFIG_NICE=y +# CONFIG_BUSYBOX_CONFIG_NL is not set +# CONFIG_BUSYBOX_CONFIG_NOHUP is not set +# CONFIG_BUSYBOX_CONFIG_NPROC is not set +# CONFIG_BUSYBOX_CONFIG_OD is not set +# CONFIG_BUSYBOX_CONFIG_PASTE is not set +# CONFIG_BUSYBOX_CONFIG_PRINTENV is not set +CONFIG_BUSYBOX_CONFIG_PRINTF=y +CONFIG_BUSYBOX_CONFIG_PWD=y +CONFIG_BUSYBOX_CONFIG_READLINK=y +CONFIG_BUSYBOX_CONFIG_FEATURE_READLINK_FOLLOW=y +# CONFIG_BUSYBOX_CONFIG_REALPATH is not set +CONFIG_BUSYBOX_CONFIG_RM=y +CONFIG_BUSYBOX_CONFIG_RMDIR=y +CONFIG_BUSYBOX_CONFIG_SEQ=y +# CONFIG_BUSYBOX_CONFIG_SHRED is not set +# CONFIG_BUSYBOX_CONFIG_SHUF is not set +CONFIG_BUSYBOX_CONFIG_SLEEP=y +CONFIG_BUSYBOX_CONFIG_FEATURE_FANCY_SLEEP=y +CONFIG_BUSYBOX_CONFIG_SORT=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_SORT_BIG is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_SORT_OPTIMIZE_MEMORY is not set +# CONFIG_BUSYBOX_CONFIG_SPLIT is not set +CONFIG_BUSYBOX_CONFIG_STAT=y +CONFIG_BUSYBOX_CONFIG_FEATURE_STAT_FORMAT=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_STAT_FILESYSTEM is not set +# CONFIG_BUSYBOX_CONFIG_STTY is not set +# CONFIG_BUSYBOX_CONFIG_SUM is not set +CONFIG_BUSYBOX_CONFIG_SYNC=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_SYNC_FANCY is not set +CONFIG_BUSYBOX_CONFIG_FSYNC=y +# CONFIG_BUSYBOX_CONFIG_TAC is not set +CONFIG_BUSYBOX_CONFIG_TAIL=y +CONFIG_BUSYBOX_CONFIG_FEATURE_FANCY_TAIL=y +CONFIG_BUSYBOX_CONFIG_TEE=y +CONFIG_BUSYBOX_CONFIG_FEATURE_TEE_USE_BLOCK_IO=y +CONFIG_BUSYBOX_CONFIG_TEST=y +CONFIG_BUSYBOX_CONFIG_TEST1=y +CONFIG_BUSYBOX_CONFIG_TEST2=y +CONFIG_BUSYBOX_CONFIG_FEATURE_TEST_64=y +# CONFIG_BUSYBOX_CONFIG_TIMEOUT is not set +CONFIG_BUSYBOX_CONFIG_TOUCH=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_TOUCH_NODEREF is not set +CONFIG_BUSYBOX_CONFIG_FEATURE_TOUCH_SUSV3=y +CONFIG_BUSYBOX_CONFIG_TR=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_TR_CLASSES is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_TR_EQUIV is not set +CONFIG_BUSYBOX_CONFIG_TRUE=y +# CONFIG_BUSYBOX_CONFIG_TRUNCATE is not set +# CONFIG_BUSYBOX_CONFIG_TTY is not set +CONFIG_BUSYBOX_CONFIG_UNAME=y +CONFIG_BUSYBOX_CONFIG_UNAME_OSNAME="GNU/Linux" +# CONFIG_BUSYBOX_CONFIG_BB_ARCH is not set +CONFIG_BUSYBOX_CONFIG_UNIQ=y +# CONFIG_BUSYBOX_CONFIG_UNLINK is not set +CONFIG_BUSYBOX_CONFIG_USLEEP=y +# CONFIG_BUSYBOX_CONFIG_UUDECODE is not set +# CONFIG_BUSYBOX_CONFIG_BASE32 is not set +CONFIG_BUSYBOX_CONFIG_BASE64=y +# CONFIG_BUSYBOX_CONFIG_UUENCODE is not set +CONFIG_BUSYBOX_CONFIG_WC=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_WC_LARGE is not set +# CONFIG_BUSYBOX_CONFIG_WHOAMI is not set +CONFIG_BUSYBOX_CONFIG_YES=y + +# +# Common options +# +# CONFIG_BUSYBOX_CONFIG_FEATURE_VERBOSE is not set + +# +# Common options for cp and mv +# +CONFIG_BUSYBOX_CONFIG_FEATURE_PRESERVE_HARDLINKS=y + +# +# Common options for df, du, ls +# +CONFIG_BUSYBOX_CONFIG_FEATURE_HUMAN_READABLE=y + +# +# Console Utilities +# +# CONFIG_BUSYBOX_CONFIG_CHVT is not set +CONFIG_BUSYBOX_CONFIG_CLEAR=y +# CONFIG_BUSYBOX_CONFIG_DEALLOCVT is not set +# CONFIG_BUSYBOX_CONFIG_DUMPKMAP is not set +# CONFIG_BUSYBOX_CONFIG_FGCONSOLE is not set +# CONFIG_BUSYBOX_CONFIG_KBD_MODE is not set +# CONFIG_BUSYBOX_CONFIG_LOADFONT is not set +# CONFIG_BUSYBOX_CONFIG_SETFONT is not set +# CONFIG_BUSYBOX_CONFIG_LOADKMAP is not set +# CONFIG_BUSYBOX_CONFIG_OPENVT is not set +CONFIG_BUSYBOX_CONFIG_RESET=y +# CONFIG_BUSYBOX_CONFIG_RESIZE is not set +# CONFIG_BUSYBOX_CONFIG_SETCONSOLE is not set +# CONFIG_BUSYBOX_CONFIG_SETKEYCODES is not set +# CONFIG_BUSYBOX_CONFIG_SETLOGCONS is not set +# CONFIG_BUSYBOX_CONFIG_SHOWKEY is not set + +# +# Debian Utilities +# +# CONFIG_BUSYBOX_CONFIG_PIPE_PROGRESS is not set +CONFIG_BUSYBOX_CONFIG_RUN_PARTS=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_RUN_PARTS_FANCY is not set +CONFIG_BUSYBOX_CONFIG_START_STOP_DAEMON=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_START_STOP_DAEMON_FANCY is not set +CONFIG_BUSYBOX_CONFIG_WHICH=y + +# +# klibc-utils +# +# CONFIG_BUSYBOX_CONFIG_MINIPS is not set +# CONFIG_BUSYBOX_CONFIG_NUKE is not set +# CONFIG_BUSYBOX_CONFIG_RESUME is not set +# CONFIG_BUSYBOX_CONFIG_RUN_INIT is not set + +# +# Editors +# +CONFIG_BUSYBOX_CONFIG_AWK=y +CONFIG_BUSYBOX_CONFIG_FEATURE_AWK_LIBM=y +CONFIG_BUSYBOX_CONFIG_FEATURE_AWK_GNU_EXTENSIONS=y +CONFIG_BUSYBOX_CONFIG_CMP=y +# CONFIG_BUSYBOX_CONFIG_DIFF is not set +# CONFIG_BUSYBOX_CONFIG_ED is not set +# CONFIG_BUSYBOX_CONFIG_PATCH is not set +CONFIG_BUSYBOX_CONFIG_SED=y +CONFIG_BUSYBOX_CONFIG_VI=y +CONFIG_BUSYBOX_CONFIG_FEATURE_VI_MAX_LEN=1024 +# CONFIG_BUSYBOX_CONFIG_FEATURE_VI_8BIT is not set +CONFIG_BUSYBOX_CONFIG_FEATURE_VI_COLON=y +CONFIG_BUSYBOX_CONFIG_FEATURE_VI_YANKMARK=y +CONFIG_BUSYBOX_CONFIG_FEATURE_VI_SEARCH=y +CONFIG_BUSYBOX_CONFIG_FEATURE_VI_USE_SIGNALS=y +CONFIG_BUSYBOX_CONFIG_FEATURE_VI_DOT_CMD=y +CONFIG_BUSYBOX_CONFIG_FEATURE_VI_READONLY=y +CONFIG_BUSYBOX_CONFIG_FEATURE_VI_SETOPTS=y +CONFIG_BUSYBOX_CONFIG_FEATURE_VI_SET=y +CONFIG_BUSYBOX_CONFIG_FEATURE_VI_WIN_RESIZE=y +CONFIG_BUSYBOX_CONFIG_FEATURE_VI_ASK_TERMINAL=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_VI_UNDO is not set +CONFIG_BUSYBOX_CONFIG_FEATURE_ALLOW_EXEC=y + +# +# Finding Utilities +# +CONFIG_BUSYBOX_CONFIG_FIND=y +CONFIG_BUSYBOX_CONFIG_FEATURE_FIND_PRINT0=y +CONFIG_BUSYBOX_CONFIG_FEATURE_FIND_MTIME=y +CONFIG_BUSYBOX_CONFIG_FEATURE_FIND_MMIN=y +CONFIG_BUSYBOX_CONFIG_FEATURE_FIND_PERM=y +CONFIG_BUSYBOX_CONFIG_FEATURE_FIND_TYPE=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_FIND_EXECUTABLE is not set +CONFIG_BUSYBOX_CONFIG_FEATURE_FIND_XDEV=y +CONFIG_BUSYBOX_CONFIG_FEATURE_FIND_MAXDEPTH=y +CONFIG_BUSYBOX_CONFIG_FEATURE_FIND_NEWER=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_FIND_INUM is not set +CONFIG_BUSYBOX_CONFIG_FEATURE_FIND_EXEC=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_FIND_EXEC_PLUS is not set +CONFIG_BUSYBOX_CONFIG_FEATURE_FIND_USER=y +CONFIG_BUSYBOX_CONFIG_FEATURE_FIND_GROUP=y +CONFIG_BUSYBOX_CONFIG_FEATURE_FIND_NOT=y +CONFIG_BUSYBOX_CONFIG_FEATURE_FIND_DEPTH=y +CONFIG_BUSYBOX_CONFIG_FEATURE_FIND_PAREN=y +CONFIG_BUSYBOX_CONFIG_FEATURE_FIND_SIZE=y +CONFIG_BUSYBOX_CONFIG_FEATURE_FIND_PRUNE=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_FIND_QUIT is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_FIND_DELETE is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_FIND_EMPTY is not set +CONFIG_BUSYBOX_CONFIG_FEATURE_FIND_PATH=y +CONFIG_BUSYBOX_CONFIG_FEATURE_FIND_REGEX=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_FIND_LINKS is not set +CONFIG_BUSYBOX_CONFIG_GREP=y +CONFIG_BUSYBOX_CONFIG_EGREP=y +CONFIG_BUSYBOX_CONFIG_FGREP=y +CONFIG_BUSYBOX_CONFIG_FEATURE_GREP_CONTEXT=y +CONFIG_BUSYBOX_CONFIG_XARGS=y +CONFIG_BUSYBOX_CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION=y +CONFIG_BUSYBOX_CONFIG_FEATURE_XARGS_SUPPORT_QUOTES=y +CONFIG_BUSYBOX_CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT=y +CONFIG_BUSYBOX_CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_XARGS_SUPPORT_REPL_STR is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_XARGS_SUPPORT_PARALLEL is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_XARGS_SUPPORT_ARGS_FILE is not set + +# +# Init Utilities +# +CONFIG_BUSYBOX_CONFIG_BOOTCHARTD=y +CONFIG_BUSYBOX_CONFIG_FEATURE_BOOTCHARTD_BLOATED_HEADER=y +CONFIG_BUSYBOX_CONFIG_FEATURE_BOOTCHARTD_CONFIG_FILE=y +CONFIG_BUSYBOX_CONFIG_HALT=y +CONFIG_BUSYBOX_CONFIG_POWEROFF=y +CONFIG_BUSYBOX_CONFIG_REBOOT=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_WAIT_FOR_INIT is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_CALL_TELINIT is not set +# CONFIG_BUSYBOX_CONFIG_INIT is not set +# CONFIG_BUSYBOX_CONFIG_LINUXRC is not set + +# +# Login/Password Management Utilities +# +CONFIG_BUSYBOX_CONFIG_FEATURE_SHADOWPASSWDS=y +# CONFIG_BUSYBOX_CONFIG_USE_BB_PWD_GRP is not set +# CONFIG_BUSYBOX_CONFIG_USE_BB_CRYPT is not set +# CONFIG_BUSYBOX_CONFIG_ADD_SHELL is not set +# CONFIG_BUSYBOX_CONFIG_REMOVE_SHELL is not set +# CONFIG_BUSYBOX_CONFIG_ADDGROUP is not set +# CONFIG_BUSYBOX_CONFIG_ADDUSER is not set +# CONFIG_BUSYBOX_CONFIG_CHPASSWD is not set +CONFIG_BUSYBOX_CONFIG_FEATURE_DEFAULT_PASSWD_ALGO="md5" +# CONFIG_BUSYBOX_CONFIG_CRYPTPW is not set +# CONFIG_BUSYBOX_CONFIG_MKPASSWD is not set +# CONFIG_BUSYBOX_CONFIG_DELUSER is not set +# CONFIG_BUSYBOX_CONFIG_DELGROUP is not set +# CONFIG_BUSYBOX_CONFIG_GETTY is not set +CONFIG_BUSYBOX_CONFIG_LOGIN=y +# CONFIG_BUSYBOX_CONFIG_LOGIN_SESSION_AS_CHILD is not set +# CONFIG_BUSYBOX_CONFIG_LOGIN_SCRIPTS is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_NOLOGIN is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_SECURETTY is not set +CONFIG_BUSYBOX_CONFIG_PASSWD=y +CONFIG_BUSYBOX_CONFIG_FEATURE_PASSWD_WEAK_CHECK=y +# CONFIG_BUSYBOX_CONFIG_SU is not set +# CONFIG_BUSYBOX_CONFIG_SULOGIN is not set +# CONFIG_BUSYBOX_CONFIG_VLOCK is not set + +# +# Linux Ext2 FS Progs +# +# CONFIG_BUSYBOX_CONFIG_CHATTR is not set +# CONFIG_BUSYBOX_CONFIG_FSCK is not set +# CONFIG_BUSYBOX_CONFIG_LSATTR is not set +# CONFIG_BUSYBOX_CONFIG_TUNE2FS is not set + +# +# Linux Module Utilities +# +# CONFIG_BUSYBOX_CONFIG_MODPROBE_SMALL is not set +# CONFIG_BUSYBOX_CONFIG_DEPMOD is not set +# CONFIG_BUSYBOX_CONFIG_INSMOD is not set +# CONFIG_BUSYBOX_CONFIG_LSMOD is not set +# CONFIG_BUSYBOX_CONFIG_MODINFO is not set +# CONFIG_BUSYBOX_CONFIG_MODPROBE is not set +# CONFIG_BUSYBOX_CONFIG_RMMOD is not set + +# +# Options common to multiple modutils +# + +# +# Linux System Utilities +# +# CONFIG_BUSYBOX_CONFIG_ACPID is not set +# CONFIG_BUSYBOX_CONFIG_BLKDISCARD is not set +# CONFIG_BUSYBOX_CONFIG_BLKID is not set +# CONFIG_BUSYBOX_CONFIG_BLOCKDEV is not set +# CONFIG_BUSYBOX_CONFIG_CAL is not set +# CONFIG_BUSYBOX_CONFIG_CHRT is not set +CONFIG_BUSYBOX_CONFIG_DMESG=y +CONFIG_BUSYBOX_CONFIG_FEATURE_DMESG_PRETTY=y +# CONFIG_BUSYBOX_CONFIG_EJECT is not set +# CONFIG_BUSYBOX_CONFIG_FALLOCATE is not set +# CONFIG_BUSYBOX_CONFIG_FATATTR is not set +# CONFIG_BUSYBOX_CONFIG_FBSET is not set +# CONFIG_BUSYBOX_CONFIG_FDFORMAT is not set +# CONFIG_BUSYBOX_CONFIG_FDISK is not set +# CONFIG_BUSYBOX_CONFIG_FINDFS is not set +CONFIG_BUSYBOX_CONFIG_FLOCK=y +# CONFIG_BUSYBOX_CONFIG_FDFLUSH is not set +# CONFIG_BUSYBOX_CONFIG_FREERAMDISK is not set +# CONFIG_BUSYBOX_CONFIG_FSCK_MINIX is not set +# CONFIG_BUSYBOX_CONFIG_FSFREEZE is not set +# CONFIG_BUSYBOX_CONFIG_FSTRIM is not set +CONFIG_BUSYBOX_CONFIG_GETOPT=y +CONFIG_BUSYBOX_CONFIG_FEATURE_GETOPT_LONG=y +CONFIG_BUSYBOX_CONFIG_HEXDUMP=y +# CONFIG_BUSYBOX_CONFIG_HD is not set +# CONFIG_BUSYBOX_CONFIG_XXD is not set +CONFIG_BUSYBOX_CONFIG_HWCLOCK=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS is not set +# CONFIG_BUSYBOX_CONFIG_IONICE is not set +# CONFIG_BUSYBOX_CONFIG_IPCRM is not set +CONFIG_BUSYBOX_CONFIG_IPCS=y +# CONFIG_BUSYBOX_CONFIG_LOSETUP is not set +# CONFIG_BUSYBOX_CONFIG_LSPCI is not set +# CONFIG_BUSYBOX_CONFIG_LSUSB is not set +# CONFIG_BUSYBOX_CONFIG_MDEV is not set +# CONFIG_BUSYBOX_CONFIG_MESG is not set +# CONFIG_BUSYBOX_CONFIG_MKE2FS is not set +# CONFIG_BUSYBOX_CONFIG_MKFS_EXT2 is not set +# CONFIG_BUSYBOX_CONFIG_MKFS_MINIX is not set +# CONFIG_BUSYBOX_CONFIG_MKFS_REISER is not set +# CONFIG_BUSYBOX_CONFIG_MKDOSFS is not set +# CONFIG_BUSYBOX_CONFIG_MKFS_VFAT is not set +CONFIG_BUSYBOX_CONFIG_MKSWAP=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_MKSWAP_UUID is not set +# CONFIG_BUSYBOX_CONFIG_MORE is not set +CONFIG_BUSYBOX_CONFIG_MOUNT=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_MOUNT_FAKE is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_MOUNT_VERBOSE is not set +CONFIG_BUSYBOX_CONFIG_FEATURE_MOUNT_HELPERS=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_MOUNT_LABEL is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_MOUNT_NFS is not set +CONFIG_BUSYBOX_CONFIG_FEATURE_MOUNT_CIFS=y +CONFIG_BUSYBOX_CONFIG_FEATURE_MOUNT_FLAGS=y +CONFIG_BUSYBOX_CONFIG_FEATURE_MOUNT_FSTAB=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_MOUNT_OTHERTAB is not set +# CONFIG_BUSYBOX_CONFIG_MOUNTPOINT is not set +# CONFIG_BUSYBOX_CONFIG_NSENTER is not set +CONFIG_BUSYBOX_CONFIG_PIVOT_ROOT=y +# CONFIG_BUSYBOX_CONFIG_RDATE is not set +# CONFIG_BUSYBOX_CONFIG_RDEV is not set +# CONFIG_BUSYBOX_CONFIG_READPROFILE is not set +# CONFIG_BUSYBOX_CONFIG_RENICE is not set +# CONFIG_BUSYBOX_CONFIG_REV is not set +# CONFIG_BUSYBOX_CONFIG_RTCWAKE is not set +# CONFIG_BUSYBOX_CONFIG_SCRIPT is not set +# CONFIG_BUSYBOX_CONFIG_SCRIPTREPLAY is not set +# CONFIG_BUSYBOX_CONFIG_SETARCH is not set +# CONFIG_BUSYBOX_CONFIG_LINUX32 is not set +# CONFIG_BUSYBOX_CONFIG_LINUX64 is not set +# CONFIG_BUSYBOX_CONFIG_SETPRIV is not set +# CONFIG_BUSYBOX_CONFIG_SETSID is not set +CONFIG_BUSYBOX_CONFIG_SWAPON=y +CONFIG_BUSYBOX_CONFIG_FEATURE_SWAPON_DISCARD=y +CONFIG_BUSYBOX_CONFIG_FEATURE_SWAPON_PRI=y +CONFIG_BUSYBOX_CONFIG_SWAPOFF=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_SWAPONOFF_LABEL is not set +CONFIG_BUSYBOX_CONFIG_SWITCH_ROOT=y +CONFIG_BUSYBOX_CONFIG_TASKSET=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_TASKSET_FANCY is not set +# CONFIG_BUSYBOX_CONFIG_UEVENT is not set +CONFIG_BUSYBOX_CONFIG_UMOUNT=y +CONFIG_BUSYBOX_CONFIG_FEATURE_UMOUNT_ALL=y +# CONFIG_BUSYBOX_CONFIG_UNSHARE is not set + +# +# Common options for mount/umount +# +CONFIG_BUSYBOX_CONFIG_FEATURE_MOUNT_LOOP=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_MOUNT_LOOP_CREATE is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_MTAB_SUPPORT is not set +# CONFIG_BUSYBOX_CONFIG_VOLUMEID is not set + +# +# Miscellaneous Utilities +# +# CONFIG_BUSYBOX_CONFIG_ADJTIMEX is not set +# CONFIG_BUSYBOX_CONFIG_BBCONFIG is not set +# CONFIG_BUSYBOX_CONFIG_BC is not set +# CONFIG_BUSYBOX_CONFIG_DC is not set +# CONFIG_BUSYBOX_CONFIG_BEEP is not set +# CONFIG_BUSYBOX_CONFIG_CHAT is not set +# CONFIG_BUSYBOX_CONFIG_CONSPY is not set +CONFIG_BUSYBOX_CONFIG_CROND=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_CROND_D is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_CROND_SPECIAL_TIMES is not set +CONFIG_BUSYBOX_CONFIG_FEATURE_CROND_DIR="/etc" +CONFIG_BUSYBOX_CONFIG_CRONTAB=y +# CONFIG_BUSYBOX_CONFIG_DEVFSD is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_DEVFS is not set +CONFIG_BUSYBOX_CONFIG_DEVMEM=y +# CONFIG_BUSYBOX_CONFIG_FBSPLASH is not set +# CONFIG_BUSYBOX_CONFIG_FLASH_ERASEALL is not set +# CONFIG_BUSYBOX_CONFIG_FLASH_LOCK is not set +# CONFIG_BUSYBOX_CONFIG_FLASH_UNLOCK is not set +# CONFIG_BUSYBOX_CONFIG_FLASHCP is not set +# CONFIG_BUSYBOX_CONFIG_HDPARM is not set +# CONFIG_BUSYBOX_CONFIG_HEXEDIT is not set +# CONFIG_BUSYBOX_CONFIG_I2CGET is not set +# CONFIG_BUSYBOX_CONFIG_I2CSET is not set +# CONFIG_BUSYBOX_CONFIG_I2CDUMP is not set +# CONFIG_BUSYBOX_CONFIG_I2CDETECT is not set +# CONFIG_BUSYBOX_CONFIG_I2CTRANSFER is not set +# CONFIG_BUSYBOX_CONFIG_INOTIFYD is not set +CONFIG_BUSYBOX_CONFIG_LESS=y +CONFIG_BUSYBOX_CONFIG_FEATURE_LESS_MAXLINES=9999999 +# CONFIG_BUSYBOX_CONFIG_FEATURE_LESS_BRACKETS is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_LESS_FLAGS is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_LESS_TRUNCATE is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_LESS_MARKS is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_LESS_REGEXP is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_LESS_WINCH is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_LESS_DASHCMD is not set +CONFIG_BUSYBOX_CONFIG_LOCK=y +# CONFIG_BUSYBOX_CONFIG_LSSCSI is not set +# CONFIG_BUSYBOX_CONFIG_MAKEDEVS is not set +# CONFIG_BUSYBOX_CONFIG_MAN is not set +# CONFIG_BUSYBOX_CONFIG_MICROCOM is not set +# CONFIG_BUSYBOX_CONFIG_MT is not set +# CONFIG_BUSYBOX_CONFIG_NANDWRITE is not set +# CONFIG_BUSYBOX_CONFIG_NANDDUMP is not set +# CONFIG_BUSYBOX_CONFIG_PARTPROBE is not set +# CONFIG_BUSYBOX_CONFIG_RAIDAUTORUN is not set +# CONFIG_BUSYBOX_CONFIG_READAHEAD is not set +# CONFIG_BUSYBOX_CONFIG_RFKILL is not set +# CONFIG_BUSYBOX_CONFIG_RX is not set +# CONFIG_BUSYBOX_CONFIG_SETFATTR is not set +# CONFIG_BUSYBOX_CONFIG_SETSERIAL is not set +CONFIG_BUSYBOX_CONFIG_STRINGS=y +CONFIG_BUSYBOX_CONFIG_TIME=y +# CONFIG_BUSYBOX_CONFIG_TS is not set +# CONFIG_BUSYBOX_CONFIG_TTYSIZE is not set +# CONFIG_BUSYBOX_CONFIG_UBIATTACH is not set +# CONFIG_BUSYBOX_CONFIG_UBIDETACH is not set +# CONFIG_BUSYBOX_CONFIG_UBIMKVOL is not set +# CONFIG_BUSYBOX_CONFIG_UBIRMVOL is not set +# CONFIG_BUSYBOX_CONFIG_UBIRSVOL is not set +# CONFIG_BUSYBOX_CONFIG_UBIUPDATEVOL is not set +# CONFIG_BUSYBOX_CONFIG_UBIRENAME is not set +# CONFIG_BUSYBOX_CONFIG_VOLNAME is not set +# CONFIG_BUSYBOX_CONFIG_WATCHDOG is not set + +# +# Networking Utilities +# +CONFIG_BUSYBOX_CONFIG_FEATURE_IPV6=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_UNIX_LOCAL is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_PREFER_IPV4_ADDRESS is not set +CONFIG_BUSYBOX_CONFIG_VERBOSE_RESOLUTION_ERRORS=y +# CONFIG_BUSYBOX_CONFIG_ARP is not set +CONFIG_BUSYBOX_CONFIG_ARPING=y +CONFIG_BUSYBOX_CONFIG_BRCTL=y +CONFIG_BUSYBOX_CONFIG_FEATURE_BRCTL_FANCY=y +CONFIG_BUSYBOX_CONFIG_FEATURE_BRCTL_SHOW=y +# CONFIG_BUSYBOX_CONFIG_DNSD is not set +# CONFIG_BUSYBOX_CONFIG_ETHER_WAKE is not set +CONFIG_BUSYBOX_CONFIG_FTPD=y +CONFIG_BUSYBOX_CONFIG_FEATURE_FTPD_WRITE=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_FTPD_ACCEPT_BROKEN_LIST is not set +CONFIG_BUSYBOX_CONFIG_FEATURE_FTPD_AUTHENTICATION=y +CONFIG_BUSYBOX_CONFIG_FTPGET=y +CONFIG_BUSYBOX_CONFIG_FTPPUT=y +CONFIG_BUSYBOX_CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS=y +# CONFIG_BUSYBOX_CONFIG_HOSTNAME is not set +# CONFIG_BUSYBOX_CONFIG_DNSDOMAINNAME is not set +# CONFIG_BUSYBOX_CONFIG_HTTPD is not set +CONFIG_BUSYBOX_CONFIG_IFCONFIG=y +CONFIG_BUSYBOX_CONFIG_FEATURE_IFCONFIG_STATUS=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_IFCONFIG_SLIP is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set +CONFIG_BUSYBOX_CONFIG_FEATURE_IFCONFIG_HW=y +CONFIG_BUSYBOX_CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS=y +# CONFIG_BUSYBOX_CONFIG_IFENSLAVE is not set +# CONFIG_BUSYBOX_CONFIG_IFPLUGD is not set +# CONFIG_BUSYBOX_CONFIG_IFUP is not set +# CONFIG_BUSYBOX_CONFIG_IFDOWN is not set +CONFIG_BUSYBOX_CONFIG_INETD=y +CONFIG_BUSYBOX_CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO=y +CONFIG_BUSYBOX_CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD=y +CONFIG_BUSYBOX_CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME=y +CONFIG_BUSYBOX_CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME=y +CONFIG_BUSYBOX_CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_INETD_RPC is not set +CONFIG_BUSYBOX_CONFIG_IP=y +# CONFIG_BUSYBOX_CONFIG_IPADDR is not set +# CONFIG_BUSYBOX_CONFIG_IPLINK is not set +# CONFIG_BUSYBOX_CONFIG_IPROUTE is not set +# CONFIG_BUSYBOX_CONFIG_IPTUNNEL is not set +# CONFIG_BUSYBOX_CONFIG_IPRULE is not set +# CONFIG_BUSYBOX_CONFIG_IPNEIGH is not set +CONFIG_BUSYBOX_CONFIG_FEATURE_IP_ADDRESS=y +CONFIG_BUSYBOX_CONFIG_FEATURE_IP_LINK=y +CONFIG_BUSYBOX_CONFIG_FEATURE_IP_ROUTE=y +CONFIG_BUSYBOX_CONFIG_FEATURE_IP_ROUTE_DIR="/etc/iproute2" +# CONFIG_BUSYBOX_CONFIG_FEATURE_IP_TUNNEL is not set +CONFIG_BUSYBOX_CONFIG_FEATURE_IP_RULE=y +CONFIG_BUSYBOX_CONFIG_FEATURE_IP_NEIGH=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_IP_RARE_PROTOCOLS is not set +# CONFIG_BUSYBOX_CONFIG_IPCALC is not set +# CONFIG_BUSYBOX_CONFIG_FAKEIDENTD is not set +# CONFIG_BUSYBOX_CONFIG_NAMEIF is not set +# CONFIG_BUSYBOX_CONFIG_NBDCLIENT is not set +CONFIG_BUSYBOX_CONFIG_NC=y +# CONFIG_BUSYBOX_CONFIG_NETCAT is not set +# CONFIG_BUSYBOX_CONFIG_NC_SERVER is not set +# CONFIG_BUSYBOX_CONFIG_NC_EXTRA is not set +# CONFIG_BUSYBOX_CONFIG_NC_110_COMPAT is not set +CONFIG_BUSYBOX_CONFIG_NETMSG=y +CONFIG_BUSYBOX_CONFIG_NETSTAT=y +CONFIG_BUSYBOX_CONFIG_FEATURE_NETSTAT_WIDE=y +CONFIG_BUSYBOX_CONFIG_FEATURE_NETSTAT_PRG=y +# CONFIG_BUSYBOX_CONFIG_NSLOOKUP is not set +CONFIG_BUSYBOX_CONFIG_NSLOOKUP_OPENWRT=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_NSLOOKUP_OPENWRT_LONG_OPTIONS is not set +CONFIG_BUSYBOX_CONFIG_NTPD=y +CONFIG_BUSYBOX_CONFIG_FEATURE_NTPD_SERVER=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_NTPD_CONF is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_NTP_AUTH is not set +CONFIG_BUSYBOX_CONFIG_PING=y +CONFIG_BUSYBOX_CONFIG_PING6=y +CONFIG_BUSYBOX_CONFIG_FEATURE_FANCY_PING=y +# CONFIG_BUSYBOX_CONFIG_PSCAN is not set +CONFIG_BUSYBOX_CONFIG_ROUTE=y +# CONFIG_BUSYBOX_CONFIG_SLATTACH is not set +# CONFIG_BUSYBOX_CONFIG_SSL_CLIENT is not set +# CONFIG_BUSYBOX_CONFIG_TC is not set +# CONFIG_BUSYBOX_CONFIG_TCPSVD is not set +# CONFIG_BUSYBOX_CONFIG_UDPSVD is not set +CONFIG_BUSYBOX_CONFIG_TELNET=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_TELNET_TTYPE is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_TELNET_AUTOLOGIN is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_TELNET_WIDTH is not set +# CONFIG_BUSYBOX_CONFIG_TELNETD is not set +CONFIG_BUSYBOX_CONFIG_TFTP=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_TFTP_PROGRESS_BAR is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_TFTP_HPA_COMPAT is not set +CONFIG_BUSYBOX_CONFIG_TFTPD=y +CONFIG_BUSYBOX_CONFIG_FEATURE_TFTP_GET=y +CONFIG_BUSYBOX_CONFIG_FEATURE_TFTP_PUT=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_TFTP_BLOCKSIZE is not set +# CONFIG_BUSYBOX_CONFIG_TFTP_DEBUG is not set +# CONFIG_BUSYBOX_CONFIG_TLS is not set +CONFIG_BUSYBOX_CONFIG_TRACEROUTE=y +CONFIG_BUSYBOX_CONFIG_TRACEROUTE6=y +CONFIG_BUSYBOX_CONFIG_FEATURE_TRACEROUTE_VERBOSE=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set +# CONFIG_BUSYBOX_CONFIG_TUNCTL is not set +CONFIG_BUSYBOX_CONFIG_VCONFIG=y +CONFIG_BUSYBOX_CONFIG_WGET=y +CONFIG_BUSYBOX_CONFIG_FEATURE_WGET_LONG_OPTIONS=y +CONFIG_BUSYBOX_CONFIG_FEATURE_WGET_STATUSBAR=y +CONFIG_BUSYBOX_CONFIG_FEATURE_WGET_AUTHENTICATION=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_WGET_TIMEOUT is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_WGET_HTTPS is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_WGET_OPENSSL is not set +# CONFIG_BUSYBOX_CONFIG_WHOIS is not set +# CONFIG_BUSYBOX_CONFIG_ZCIP is not set +# CONFIG_BUSYBOX_CONFIG_UDHCPD is not set +# CONFIG_BUSYBOX_CONFIG_DUMPLEASES is not set +# CONFIG_BUSYBOX_CONFIG_DHCPRELAY is not set +CONFIG_BUSYBOX_CONFIG_UDHCPC=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_UDHCPC_ARPING is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_UDHCPC_SANITIZEOPT is not set +CONFIG_BUSYBOX_CONFIG_UDHCPC_DEFAULT_SCRIPT="/usr/share/udhcpc/default.script" +# CONFIG_BUSYBOX_CONFIG_UDHCPC6 is not set + +# +# Common options for DHCP applets +# +# CONFIG_BUSYBOX_CONFIG_FEATURE_UDHCP_PORT is not set +CONFIG_BUSYBOX_CONFIG_UDHCP_DEBUG=0 +CONFIG_BUSYBOX_CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS=80 +CONFIG_BUSYBOX_CONFIG_FEATURE_UDHCP_RFC3397=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_UDHCP_8021Q is not set + +# +# Print Utilities +# +# CONFIG_BUSYBOX_CONFIG_LPD is not set +# CONFIG_BUSYBOX_CONFIG_LPR is not set +# CONFIG_BUSYBOX_CONFIG_LPQ is not set + +# +# Mail Utilities +# +# CONFIG_BUSYBOX_CONFIG_MAKEMIME is not set +# CONFIG_BUSYBOX_CONFIG_POPMAILDIR is not set +# CONFIG_BUSYBOX_CONFIG_REFORMIME is not set +# CONFIG_BUSYBOX_CONFIG_SENDMAIL is not set + +# +# Process Utilities +# +CONFIG_BUSYBOX_CONFIG_FREE=y +# CONFIG_BUSYBOX_CONFIG_FUSER is not set +# CONFIG_BUSYBOX_CONFIG_IOSTAT is not set +CONFIG_BUSYBOX_CONFIG_KILL=y +CONFIG_BUSYBOX_CONFIG_KILLALL=y +# CONFIG_BUSYBOX_CONFIG_KILLALL5 is not set +# CONFIG_BUSYBOX_CONFIG_LSOF is not set +# CONFIG_BUSYBOX_CONFIG_MPSTAT is not set +# CONFIG_BUSYBOX_CONFIG_NMETER is not set +CONFIG_BUSYBOX_CONFIG_PGREP=y +# CONFIG_BUSYBOX_CONFIG_PKILL is not set +CONFIG_BUSYBOX_CONFIG_PIDOF=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_PIDOF_SINGLE is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_PIDOF_OMIT is not set +# CONFIG_BUSYBOX_CONFIG_PMAP is not set +# CONFIG_BUSYBOX_CONFIG_POWERTOP is not set +CONFIG_BUSYBOX_CONFIG_PS=y +CONFIG_BUSYBOX_CONFIG_FEATURE_PS_WIDE=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_PS_LONG is not set +# CONFIG_BUSYBOX_CONFIG_PSTREE is not set +# CONFIG_BUSYBOX_CONFIG_PWDX is not set +# CONFIG_BUSYBOX_CONFIG_SMEMCAP is not set +CONFIG_BUSYBOX_CONFIG_BB_SYSCTL=y +CONFIG_BUSYBOX_CONFIG_TOP=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_TOP_INTERACTIVE is not set +CONFIG_BUSYBOX_CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y +CONFIG_BUSYBOX_CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_TOP_SMP_CPU is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_TOP_DECIMALS is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_TOP_SMP_PROCESS is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_TOPMEM is not set +CONFIG_BUSYBOX_CONFIG_UPTIME=y +# CONFIG_BUSYBOX_CONFIG_WATCH is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_SHOW_THREADS is not set + +# +# Runit Utilities +# +# CONFIG_BUSYBOX_CONFIG_CHPST is not set +# CONFIG_BUSYBOX_CONFIG_SETUIDGID is not set +# CONFIG_BUSYBOX_CONFIG_ENVUIDGID is not set +# CONFIG_BUSYBOX_CONFIG_ENVDIR is not set +# CONFIG_BUSYBOX_CONFIG_SOFTLIMIT is not set +# CONFIG_BUSYBOX_CONFIG_RUNSV is not set +# CONFIG_BUSYBOX_CONFIG_RUNSVDIR is not set +# CONFIG_BUSYBOX_CONFIG_SV is not set +# CONFIG_BUSYBOX_CONFIG_SVC is not set +# CONFIG_BUSYBOX_CONFIG_SVOK is not set +# CONFIG_BUSYBOX_CONFIG_SVLOGD is not set + +# +# Shells +# +CONFIG_BUSYBOX_CONFIG_SH_IS_ASH=y +# CONFIG_BUSYBOX_CONFIG_SH_IS_HUSH is not set +# CONFIG_BUSYBOX_CONFIG_SH_IS_NONE is not set +# CONFIG_BUSYBOX_CONFIG_BASH_IS_ASH is not set +# CONFIG_BUSYBOX_CONFIG_BASH_IS_HUSH is not set +CONFIG_BUSYBOX_CONFIG_BASH_IS_NONE=y +CONFIG_BUSYBOX_CONFIG_SHELL_ASH=y +CONFIG_BUSYBOX_CONFIG_ASH=y +# CONFIG_BUSYBOX_CONFIG_ASH_OPTIMIZE_FOR_SIZE is not set +CONFIG_BUSYBOX_CONFIG_ASH_INTERNAL_GLOB=y +CONFIG_BUSYBOX_CONFIG_ASH_BASH_COMPAT=y +# CONFIG_BUSYBOX_CONFIG_ASH_BASH_SOURCE_CURDIR is not set +# CONFIG_BUSYBOX_CONFIG_ASH_BASH_NOT_FOUND_HOOK is not set +CONFIG_BUSYBOX_CONFIG_ASH_JOB_CONTROL=y +CONFIG_BUSYBOX_CONFIG_ASH_ALIAS=y +# CONFIG_BUSYBOX_CONFIG_ASH_RANDOM_SUPPORT is not set +CONFIG_BUSYBOX_CONFIG_ASH_EXPAND_PRMT=y +# CONFIG_BUSYBOX_CONFIG_ASH_IDLE_TIMEOUT is not set +# CONFIG_BUSYBOX_CONFIG_ASH_MAIL is not set +CONFIG_BUSYBOX_CONFIG_ASH_ECHO=y +CONFIG_BUSYBOX_CONFIG_ASH_PRINTF=y +CONFIG_BUSYBOX_CONFIG_ASH_TEST=y +# CONFIG_BUSYBOX_CONFIG_ASH_HELP is not set +CONFIG_BUSYBOX_CONFIG_ASH_GETOPTS=y +CONFIG_BUSYBOX_CONFIG_ASH_CMDCMD=y +# CONFIG_BUSYBOX_CONFIG_CTTYHACK is not set +# CONFIG_BUSYBOX_CONFIG_HUSH is not set +# CONFIG_BUSYBOX_CONFIG_SHELL_HUSH is not set + +# +# Options common to all shells +# +CONFIG_BUSYBOX_CONFIG_FEATURE_SH_MATH=y +CONFIG_BUSYBOX_CONFIG_FEATURE_SH_MATH_64=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_SH_MATH_BASE is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_SH_EXTRA_QUIET is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_SH_STANDALONE is not set +CONFIG_BUSYBOX_CONFIG_FEATURE_SH_NOFORK=y +# CONFIG_BUSYBOX_CONFIG_FEATURE_SH_READ_FRAC is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_SH_HISTFILESIZE is not set +# CONFIG_BUSYBOX_CONFIG_FEATURE_SH_EMBEDDED_SCRIPTS is not set + +# +# System Logging Utilities +# +# CONFIG_BUSYBOX_CONFIG_KLOGD is not set +CONFIG_BUSYBOX_CONFIG_LOGGER=y +# CONFIG_BUSYBOX_CONFIG_LOGREAD is not set +# CONFIG_BUSYBOX_CONFIG_SYSLOGD is not set +# CONFIG_PACKAGE_busybox-selinux is not set +CONFIG_PACKAGE_ca-bundle=y +# CONFIG_PACKAGE_ca-certificates is not set +# CONFIG_PACKAGE_dnsmasq is not set +CONFIG_PACKAGE_dnsmasq-dhcpv6=y +# CONFIG_PACKAGE_dnsmasq-full is not set +CONFIG_PACKAGE_dropbear=y + +# +# Configuration +# +CONFIG_DROPBEAR_CURVE25519=y +# CONFIG_DROPBEAR_ECC is not set +# CONFIG_DROPBEAR_ZLIB is not set +CONFIG_DROPBEAR_DBCLIENT=y +# CONFIG_PACKAGE_ead is not set +CONFIG_PACKAGE_firewall=y +CONFIG_PACKAGE_fstools=y +CONFIG_FSTOOLS_UBIFS_EXTROOT=y +# CONFIG_FSTOOLS_OVL_MOUNT_FULL_ACCESS_TIME is not set +# CONFIG_FSTOOLS_OVL_MOUNT_COMPRESS_ZLIB is not set +CONFIG_PACKAGE_fwtool=y +CONFIG_PACKAGE_getrandom=y +CONFIG_PACKAGE_jsonfilter=y +CONFIG_PACKAGE_libatomic=m +CONFIG_PACKAGE_libc=y +CONFIG_PACKAGE_libgcc=y +# CONFIG_PACKAGE_libgomp is not set +CONFIG_PACKAGE_libpthread=y +CONFIG_PACKAGE_librt=y +CONFIG_PACKAGE_libstdcpp=y +CONFIG_PACKAGE_logd=y +CONFIG_PACKAGE_mtd=y +CONFIG_PACKAGE_netifd=y +# CONFIG_PACKAGE_nft-qos is not set +# CONFIG_PACKAGE_om-watchdog is not set +CONFIG_PACKAGE_openwrt-keyring=y +CONFIG_PACKAGE_opkg=y +CONFIG_PACKAGE_procd=y + +# +# Configuration +# +# CONFIG_PROCD_SHOW_BOOT is not set +# CONFIG_PROCD_ZRAM_TMPFS is not set +# CONFIG_PACKAGE_procd-ujail is not set +# CONFIG_PACKAGE_qos-scripts is not set +CONFIG_PACKAGE_resolveip=y +CONFIG_PACKAGE_rpcd=y +CONFIG_PACKAGE_rpcd-mod-file=y +CONFIG_PACKAGE_rpcd-mod-iwinfo=y +# CONFIG_PACKAGE_rpcd-mod-rpcsys is not set +# CONFIG_PACKAGE_snapshot-tool is not set +# CONFIG_PACKAGE_sqm-scripts is not set +# CONFIG_PACKAGE_sqm-scripts-extra is not set +CONFIG_PACKAGE_swconfig=y +CONFIG_PACKAGE_ubox=y +CONFIG_PACKAGE_ubus=y +CONFIG_PACKAGE_ubusd=y +# CONFIG_PACKAGE_ucert is not set +# CONFIG_PACKAGE_ucert-full is not set +CONFIG_PACKAGE_uci=y +CONFIG_PACKAGE_urandom-seed=y +CONFIG_PACKAGE_urngd=y +CONFIG_PACKAGE_usign=y +CONFIG_PACKAGE_wireless-tools=y +# CONFIG_PACKAGE_zram-swap is not set + +# +# Administration +# + +# +# openwisp +# +# CONFIG_PACKAGE_openwisp-config-mbedtls is not set +# CONFIG_PACKAGE_openwisp-config-nossl is not set +# CONFIG_PACKAGE_openwisp-config-openssl is not set +# CONFIG_PACKAGE_openwisp-config-wolfssl is not set + +# +# zabbix +# +# CONFIG_PACKAGE_zabbix-agentd is not set + +# +# SSL support +# +# CONFIG_ZABBIX_OPENSSL is not set +# CONFIG_ZABBIX_GNUTLS is not set +CONFIG_ZABBIX_NOSSL=y +# CONFIG_PACKAGE_zabbix-extra-mac80211 is not set +# CONFIG_PACKAGE_zabbix-extra-network is not set +# CONFIG_PACKAGE_zabbix-extra-wifi is not set +# CONFIG_PACKAGE_zabbix-get is not set +# CONFIG_PACKAGE_zabbix-proxy is not set +# CONFIG_PACKAGE_zabbix-sender is not set +# CONFIG_PACKAGE_zabbix-server is not set + +# +# Database Software +# +# CONFIG_ZABBIX_MYSQL is not set +CONFIG_ZABBIX_POSTGRESQL=y +# CONFIG_PACKAGE_zabbix-server-frontend is not set +# CONFIG_PACKAGE_atop is not set +# CONFIG_PACKAGE_debootstrap is not set +# CONFIG_PACKAGE_gkrellmd is not set +# CONFIG_PACKAGE_htop is not set +# CONFIG_PACKAGE_ipmitool is not set +# CONFIG_PACKAGE_monit is not set +# CONFIG_PACKAGE_monit-nossl is not set +# CONFIG_PACKAGE_muninlite is not set +# CONFIG_PACKAGE_netatop is not set +# CONFIG_PACKAGE_netdata is not set +# CONFIG_PACKAGE_sudo is not set +# CONFIG_PACKAGE_syslog-ng is not set + +# +# ALEXA software +# +# CONFIG_PACKAGE_avs-device-sdk is not set + +# +# Boot Loaders +# +# CONFIG_PACKAGE_fwupgrade-tools is not set +# CONFIG_PACKAGE_lk-ipq6018 is not set +# CONFIG_PACKAGE_uboot-2016-ipq6018 is not set +# CONFIG_PACKAGE_uboot-2016-ipq6018_tiny is not set + +# +# Breakpad Software Utilities +# + +# +# Breakpad +# +# CONFIG_PACKAGE_breakpad is not set + +# +# breakpad-wrapper +# +# CONFIG_PACKAGE_breakpad-wrapper is not set + +# +# Data Services Open Source Software +# +# CONFIG_PACKAGE_rmnetctl is not set + +# +# Development +# + +# +# Libraries +# +# CONFIG_PACKAGE_libncurses-dev is not set +# CONFIG_PACKAGE_libxml2-dev is not set +# CONFIG_PACKAGE_zlib-dev is not set +# CONFIG_PACKAGE_ar is not set +# CONFIG_PACKAGE_autoconf is not set +# CONFIG_PACKAGE_automake is not set +# CONFIG_PACKAGE_binutils is not set +# CONFIG_PACKAGE_diffutils is not set +# CONFIG_PACKAGE_gcc is not set +CONFIG_PACKAGE_gdb=m +# CONFIG_PACKAGE_gdbserver is not set +# CONFIG_PACKAGE_libtool-bin is not set +# CONFIG_PACKAGE_lpc21isp is not set +# CONFIG_PACKAGE_lttng-tools is not set +# CONFIG_PACKAGE_m4 is not set +# CONFIG_PACKAGE_make is not set +# CONFIG_PACKAGE_meson is not set +# CONFIG_PACKAGE_meson-src is not set +# CONFIG_PACKAGE_ninja is not set +# CONFIG_PACKAGE_objdump is not set +# CONFIG_PACKAGE_patch is not set +# CONFIG_PACKAGE_perf is not set +# CONFIG_PACKAGE_pkg-config is not set +# CONFIG_PACKAGE_trace-cmd is not set +# CONFIG_PACKAGE_trace-cmd-extra is not set +# CONFIG_PACKAGE_valgrind is not set + +# +# Extra packages +# + +# +# Wireless Drivers +# +# CONFIG_PACKAGE_mac80211-scripts is not set +# CONFIG_PACKAGE_civetweb is not set +# CONFIG_PACKAGE_jose is not set +# CONFIG_PACKAGE_libjose is not set +# CONFIG_PACKAGE_tang is not set +# CONFIG_PACKAGE_uriparser is not set + +# +# Firmware +# + +# +# ath10k Board-Specific Overrides +# + +# +# ath11k Board-Specific Overrides +# +# CONFIG_PACKAGE_aircard-pcmcia-firmware is not set +# CONFIG_PACKAGE_amdgpu-firmware is not set +CONFIG_PACKAGE_ar3k-firmware=m +# CONFIG_PACKAGE_ath10k-firmware-qca4019 is not set +# CONFIG_PACKAGE_ath10k-firmware-qca4019-ct is not set +# CONFIG_PACKAGE_ath10k-firmware-qca4019-ct-htt is not set +# CONFIG_PACKAGE_ath10k-firmware-qca6174 is not set +# CONFIG_PACKAGE_ath10k-firmware-qca9887 is not set +# CONFIG_PACKAGE_ath10k-firmware-qca9887-ct is not set +# CONFIG_PACKAGE_ath10k-firmware-qca9887-ct-htt is not set +# CONFIG_PACKAGE_ath10k-firmware-qca9888 is not set +# CONFIG_PACKAGE_ath10k-firmware-qca9888-ct is not set +# CONFIG_PACKAGE_ath10k-firmware-qca9888-ct-htt is not set +# CONFIG_PACKAGE_ath10k-firmware-qca988x is not set +# CONFIG_PACKAGE_ath10k-firmware-qca988x-ct is not set +# CONFIG_PACKAGE_ath10k-firmware-qca988x-ct-htt is not set +# CONFIG_PACKAGE_ath10k-firmware-qca9984 is not set +# CONFIG_PACKAGE_ath10k-firmware-qca9984-ct is not set +# CONFIG_PACKAGE_ath10k-firmware-qca9984-ct-htt is not set +# CONFIG_PACKAGE_ath10k-firmware-qca99x0 is not set +# CONFIG_PACKAGE_ath10k-firmware-qca99x0-ct is not set +# CONFIG_PACKAGE_ath10k-firmware-qca99x0-ct-htt is not set +CONFIG_PACKAGE_ath11k-firmware-ipq60xx=y +# CONFIG_PACKAGE_ath6k-firmware is not set +# CONFIG_PACKAGE_ath9k-htc-firmware is not set +# CONFIG_PACKAGE_b43legacy-firmware is not set +# CONFIG_PACKAGE_bnx2-firmware is not set +# CONFIG_PACKAGE_brcmfmac-firmware-4329-sdio is not set +# CONFIG_PACKAGE_brcmfmac-firmware-43362-sdio is not set +# CONFIG_PACKAGE_brcmfmac-firmware-43430-sdio is not set +# CONFIG_PACKAGE_brcmfmac-firmware-43430a0-sdio is not set +# CONFIG_PACKAGE_brcmfmac-firmware-43455-sdio is not set +# CONFIG_PACKAGE_brcmfmac-firmware-43602a1-pcie is not set +# CONFIG_PACKAGE_brcmfmac-firmware-4366b1-pcie is not set +# CONFIG_PACKAGE_brcmfmac-firmware-4366c0-pcie is not set +# CONFIG_PACKAGE_brcmfmac-firmware-usb is not set +# CONFIG_PACKAGE_brcmsmac-firmware is not set +# CONFIG_PACKAGE_carl9170-firmware is not set +# CONFIG_PACKAGE_e100-firmware is not set +# CONFIG_PACKAGE_edgeport-firmware is not set +# CONFIG_PACKAGE_ibt-firmware is not set +# CONFIG_PACKAGE_iwl3945-firmware is not set +# CONFIG_PACKAGE_iwl4965-firmware is not set +# CONFIG_PACKAGE_iwlwifi-firmware-iwl100 is not set +# CONFIG_PACKAGE_iwlwifi-firmware-iwl1000 is not set +# CONFIG_PACKAGE_iwlwifi-firmware-iwl105 is not set +# CONFIG_PACKAGE_iwlwifi-firmware-iwl135 is not set +# CONFIG_PACKAGE_iwlwifi-firmware-iwl2000 is not set +# CONFIG_PACKAGE_iwlwifi-firmware-iwl2030 is not set +# CONFIG_PACKAGE_iwlwifi-firmware-iwl3160 is not set +# CONFIG_PACKAGE_iwlwifi-firmware-iwl3168 is not set +# CONFIG_PACKAGE_iwlwifi-firmware-iwl5000 is not set +# CONFIG_PACKAGE_iwlwifi-firmware-iwl5150 is not set +# CONFIG_PACKAGE_iwlwifi-firmware-iwl6000g2 is not set +# CONFIG_PACKAGE_iwlwifi-firmware-iwl6000g2a is not set +# CONFIG_PACKAGE_iwlwifi-firmware-iwl6000g2b is not set +# CONFIG_PACKAGE_iwlwifi-firmware-iwl6050 is not set +# CONFIG_PACKAGE_iwlwifi-firmware-iwl7260 is not set +# CONFIG_PACKAGE_iwlwifi-firmware-iwl7265 is not set +# CONFIG_PACKAGE_iwlwifi-firmware-iwl7265d is not set +# CONFIG_PACKAGE_iwlwifi-firmware-iwl8260c is not set +# CONFIG_PACKAGE_iwlwifi-firmware-iwl8265 is not set +# CONFIG_PACKAGE_iwlwifi-firmware-iwl9000 is not set +# CONFIG_PACKAGE_iwlwifi-firmware-iwl9260 is not set +# CONFIG_PACKAGE_libertas-sdio-firmware is not set +# CONFIG_PACKAGE_libertas-spi-firmware is not set +# CONFIG_PACKAGE_libertas-usb-firmware is not set +# CONFIG_PACKAGE_mt7601u-firmware is not set +# CONFIG_PACKAGE_mwifiex-pcie-firmware is not set +# CONFIG_PACKAGE_mwifiex-sdio-firmware is not set +# CONFIG_PACKAGE_mwl8k-firmware is not set +# CONFIG_PACKAGE_p54-pci-firmware is not set +# CONFIG_PACKAGE_p54-spi-firmware is not set +# CONFIG_PACKAGE_p54-usb-firmware is not set +# CONFIG_PACKAGE_prism54-firmware is not set +# CONFIG_PACKAGE_r8169-firmware is not set +# CONFIG_PACKAGE_radeon-firmware is not set +# CONFIG_PACKAGE_rs9113-firmware is not set +# CONFIG_PACKAGE_rt2800-pci-firmware is not set +# CONFIG_PACKAGE_rt2800-usb-firmware is not set +# CONFIG_PACKAGE_rt61-pci-firmware is not set +# CONFIG_PACKAGE_rt73-usb-firmware is not set +# CONFIG_PACKAGE_rtl8188eu-firmware is not set +# CONFIG_PACKAGE_rtl8192ce-firmware is not set +# CONFIG_PACKAGE_rtl8192cu-firmware is not set +# CONFIG_PACKAGE_rtl8192de-firmware is not set +# CONFIG_PACKAGE_rtl8192eu-firmware is not set +# CONFIG_PACKAGE_rtl8192se-firmware is not set +# CONFIG_PACKAGE_rtl8192su-firmware is not set +# CONFIG_PACKAGE_rtl8723au-firmware is not set +# CONFIG_PACKAGE_rtl8723bu-firmware is not set +# CONFIG_PACKAGE_rtl8821ae-firmware is not set +# CONFIG_PACKAGE_ti-3410-firmware is not set +# CONFIG_PACKAGE_ti-5052-firmware is not set +CONFIG_PACKAGE_wireless-regdb=y +# CONFIG_PACKAGE_wl12xx-firmware is not set +# CONFIG_PACKAGE_wl18xx-firmware is not set + +# +# Fonts +# + +# +# DejaVu +# +# CONFIG_PACKAGE_dejavu-fonts-ttf-DejaVuMathTeXGyre is not set +# CONFIG_PACKAGE_dejavu-fonts-ttf-DejaVuSans is not set +# CONFIG_PACKAGE_dejavu-fonts-ttf-DejaVuSans-Bold is not set +# CONFIG_PACKAGE_dejavu-fonts-ttf-DejaVuSans-BoldOblique is not set +# CONFIG_PACKAGE_dejavu-fonts-ttf-DejaVuSans-ExtraLight is not set +# CONFIG_PACKAGE_dejavu-fonts-ttf-DejaVuSans-Oblique is not set +# CONFIG_PACKAGE_dejavu-fonts-ttf-DejaVuSansCondensed is not set +# CONFIG_PACKAGE_dejavu-fonts-ttf-DejaVuSansCondensed-Bold is not set +# CONFIG_PACKAGE_dejavu-fonts-ttf-DejaVuSansCondensed-BoldOblique is not set +# CONFIG_PACKAGE_dejavu-fonts-ttf-DejaVuSansCondensed-Oblique is not set +# CONFIG_PACKAGE_dejavu-fonts-ttf-DejaVuSansMono is not set +# CONFIG_PACKAGE_dejavu-fonts-ttf-DejaVuSansMono-Bold is not set +# CONFIG_PACKAGE_dejavu-fonts-ttf-DejaVuSansMono-BoldOblique is not set +# CONFIG_PACKAGE_dejavu-fonts-ttf-DejaVuSansMono-Oblique is not set +# CONFIG_PACKAGE_dejavu-fonts-ttf-DejaVuSerif is not set +# CONFIG_PACKAGE_dejavu-fonts-ttf-DejaVuSerif-Bold is not set +# CONFIG_PACKAGE_dejavu-fonts-ttf-DejaVuSerif-BoldItalic is not set +# CONFIG_PACKAGE_dejavu-fonts-ttf-DejaVuSerif-Italic is not set +# CONFIG_PACKAGE_dejavu-fonts-ttf-DejaVuSerifCondensed is not set +# CONFIG_PACKAGE_dejavu-fonts-ttf-DejaVuSerifCondensed-Bold is not set +# CONFIG_PACKAGE_dejavu-fonts-ttf-DejaVuSerifCondensed-BoldItalic is not set +# CONFIG_PACKAGE_dejavu-fonts-ttf-DejaVuSerifCondensed-Italic is not set + +# +# Kernel modules +# + +# +# Block Devices +# +# CONFIG_PACKAGE_kmod-aoe is not set +# CONFIG_PACKAGE_kmod-ata-core is not set +CONFIG_PACKAGE_kmod-block2mtd=m +# CONFIG_PACKAGE_kmod-dax is not set +CONFIG_PACKAGE_kmod-dm=m +# CONFIG_PACKAGE_kmod-loop is not set +CONFIG_PACKAGE_kmod-md-mod=m +# CONFIG_PACKAGE_kmod-md-linear is not set +# CONFIG_PACKAGE_kmod-md-multipath is not set +CONFIG_PACKAGE_kmod-md-raid0=m +CONFIG_PACKAGE_kmod-md-raid1=m +CONFIG_PACKAGE_kmod-md-raid10=m +# CONFIG_PACKAGE_kmod-md-raid456 is not set +# CONFIG_PACKAGE_kmod-nbd is not set +# CONFIG_PACKAGE_kmod-scsi-cdrom is not set +CONFIG_PACKAGE_kmod-scsi-core=y +# CONFIG_PACKAGE_kmod-scsi-generic is not set +# CONFIG_PACKAGE_kmod-scsi-tape is not set + +# +# CAN Support +# +# CONFIG_PACKAGE_kmod-can is not set + +# +# Cryptographic API modules +# +CONFIG_PACKAGE_kmod-crypto-acompress=y +CONFIG_PACKAGE_kmod-crypto-aead=y +CONFIG_PACKAGE_kmod-crypto-authenc=y +CONFIG_PACKAGE_kmod-crypto-cbc=y +# CONFIG_PACKAGE_kmod-crypto-ccm is not set +CONFIG_PACKAGE_kmod-crypto-cmac=m +CONFIG_PACKAGE_kmod-crypto-crc32c=y +# CONFIG_PACKAGE_kmod-crypto-ctr is not set +# CONFIG_PACKAGE_kmod-crypto-cts is not set +CONFIG_PACKAGE_kmod-crypto-deflate=y +CONFIG_PACKAGE_kmod-crypto-des=y +CONFIG_PACKAGE_kmod-crypto-ecb=y +CONFIG_PACKAGE_kmod-crypto-ecdh=m +CONFIG_PACKAGE_kmod-crypto-echainiv=y +# CONFIG_PACKAGE_kmod-crypto-fcrypt is not set +# CONFIG_PACKAGE_kmod-crypto-gcm is not set +# CONFIG_PACKAGE_kmod-crypto-gf128 is not set +# CONFIG_PACKAGE_kmod-crypto-ghash is not set +CONFIG_PACKAGE_kmod-crypto-hash=y +CONFIG_PACKAGE_kmod-crypto-hmac=y +# CONFIG_PACKAGE_kmod-crypto-hw-ccp is not set +# CONFIG_PACKAGE_kmod-crypto-hw-geode is not set +# CONFIG_PACKAGE_kmod-crypto-hw-hifn-795x is not set +# CONFIG_PACKAGE_kmod-crypto-hw-padlock is not set +# CONFIG_PACKAGE_kmod-crypto-hw-talitos is not set +CONFIG_PACKAGE_kmod-crypto-iv=y +CONFIG_PACKAGE_kmod-crypto-kpp=m +CONFIG_PACKAGE_kmod-crypto-manager=y +# CONFIG_PACKAGE_kmod-crypto-md4 is not set +CONFIG_PACKAGE_kmod-crypto-md5=y +# CONFIG_PACKAGE_kmod-crypto-michael-mic is not set +# CONFIG_PACKAGE_kmod-crypto-misc is not set +CONFIG_PACKAGE_kmod-crypto-null=y +# CONFIG_PACKAGE_kmod-crypto-pcbc is not set +CONFIG_PACKAGE_kmod-crypto-pcompress=y +CONFIG_PACKAGE_kmod-crypto-qce=m +# CONFIG_PACKAGE_kmod-crypto-rmd160 is not set +CONFIG_PACKAGE_kmod-crypto-rng=y +# CONFIG_PACKAGE_kmod-crypto-seqiv is not set +CONFIG_PACKAGE_kmod-crypto-sha1=y +CONFIG_PACKAGE_kmod-crypto-sha256=y +# CONFIG_PACKAGE_kmod-crypto-sha512 is not set +CONFIG_PACKAGE_kmod-crypto-test=m +CONFIG_PACKAGE_kmod-crypto-user=m +CONFIG_PACKAGE_kmod-crypto-wq=y +# CONFIG_PACKAGE_kmod-crypto-xcbc is not set +# CONFIG_PACKAGE_kmod-crypto-xts is not set +# CONFIG_PACKAGE_kmod-cryptodev is not set + +# +# Filesystems +# +# CONFIG_PACKAGE_kmod-fs-afs is not set +# CONFIG_PACKAGE_kmod-fs-autofs4 is not set +# CONFIG_PACKAGE_kmod-fs-btrfs is not set +# CONFIG_PACKAGE_kmod-fs-cifs is not set +CONFIG_PACKAGE_kmod-fs-configfs=y +# CONFIG_PACKAGE_kmod-fs-cramfs is not set +# CONFIG_PACKAGE_kmod-fs-exfat is not set +# CONFIG_PACKAGE_kmod-fs-exportfs is not set +# CONFIG_PACKAGE_kmod-fs-ext4 is not set +# CONFIG_PACKAGE_kmod-fs-f2fs is not set +# CONFIG_PACKAGE_kmod-fs-fscache is not set +# CONFIG_PACKAGE_kmod-fs-hfs is not set +# CONFIG_PACKAGE_kmod-fs-hfsplus is not set +# CONFIG_PACKAGE_kmod-fs-isofs is not set +# CONFIG_PACKAGE_kmod-fs-jfs is not set +# CONFIG_PACKAGE_kmod-fs-ksmbd is not set +# CONFIG_PACKAGE_kmod-fs-minix is not set +# CONFIG_PACKAGE_kmod-fs-msdos is not set +# CONFIG_PACKAGE_kmod-fs-nfs is not set +# CONFIG_PACKAGE_kmod-fs-nfs-common is not set +# CONFIG_PACKAGE_kmod-fs-nfs-common-rpcsec is not set +# CONFIG_PACKAGE_kmod-fs-nfs-v3 is not set +# CONFIG_PACKAGE_kmod-fs-nfs-v4 is not set +# CONFIG_PACKAGE_kmod-fs-nfsd is not set +# CONFIG_PACKAGE_kmod-fs-ntfs is not set +# CONFIG_PACKAGE_kmod-fs-reiserfs is not set +# CONFIG_PACKAGE_kmod-fs-squashfs is not set +# CONFIG_PACKAGE_kmod-fs-udf is not set +# CONFIG_PACKAGE_kmod-fs-vfat is not set +# CONFIG_PACKAGE_kmod-fs-xfs is not set +CONFIG_PACKAGE_kmod-fuse=m + +# +# FireWire support +# +# CONFIG_PACKAGE_kmod-firewire is not set + +# +# Hardware Monitoring Support +# +# CONFIG_PACKAGE_kmod-hwmon-core is not set + +# +# I2C support +# +CONFIG_PACKAGE_kmod-i2c-core=m +# CONFIG_PACKAGE_kmod-i2c-algo-bit is not set +# CONFIG_PACKAGE_kmod-i2c-algo-pca is not set +# CONFIG_PACKAGE_kmod-i2c-algo-pcf is not set +# CONFIG_PACKAGE_kmod-i2c-gpio is not set +# CONFIG_PACKAGE_kmod-i2c-gpio-custom is not set +# CONFIG_PACKAGE_kmod-i2c-mux is not set +# CONFIG_PACKAGE_kmod-i2c-smbus is not set +# CONFIG_PACKAGE_kmod-i2c-tiny-usb is not set + +# +# Industrial I/O Modules +# +# CONFIG_PACKAGE_kmod-iio-ad799x is not set +# CONFIG_PACKAGE_kmod-iio-am2315 is not set +# CONFIG_PACKAGE_kmod-iio-bh1750 is not set +# CONFIG_PACKAGE_kmod-iio-bmp280 is not set +# CONFIG_PACKAGE_kmod-iio-bmp280-i2c is not set +# CONFIG_PACKAGE_kmod-iio-bmp280-spi is not set +# CONFIG_PACKAGE_kmod-iio-ccs811 is not set +# CONFIG_PACKAGE_kmod-iio-core is not set +# CONFIG_PACKAGE_kmod-iio-dht11 is not set +# CONFIG_PACKAGE_kmod-iio-hmc5843 is not set +# CONFIG_PACKAGE_kmod-iio-htu21 is not set +# CONFIG_PACKAGE_kmod-iio-si7020 is not set +# CONFIG_PACKAGE_kmod-iio-tsl4531 is not set + +# +# Input modules +# +CONFIG_PACKAGE_kmod-hid=m +# CONFIG_PACKAGE_kmod-hid-generic is not set +CONFIG_PACKAGE_kmod-input-core=y +CONFIG_PACKAGE_kmod-input-evdev=m +# CONFIG_PACKAGE_kmod-input-gpio-encoder is not set +# CONFIG_PACKAGE_kmod-input-gpio-keys is not set +# CONFIG_PACKAGE_kmod-input-gpio-keys-polled is not set +# CONFIG_PACKAGE_kmod-input-joydev is not set +# CONFIG_PACKAGE_kmod-input-matrixkmap is not set +# CONFIG_PACKAGE_kmod-input-polldev is not set +# CONFIG_PACKAGE_kmod-input-touchscreen-ads7846 is not set +# CONFIG_PACKAGE_kmod-input-uinput is not set + +# +# LED modules +# +CONFIG_PACKAGE_kmod-leds-gpio=y +# CONFIG_PACKAGE_kmod-leds-pca963x is not set +# CONFIG_PACKAGE_kmod-leds-tlc591xx is not set +# CONFIG_PACKAGE_kmod-ledtrig-default-on is not set +# CONFIG_PACKAGE_kmod-ledtrig-gpio is not set +# CONFIG_PACKAGE_kmod-ledtrig-heartbeat is not set +# CONFIG_PACKAGE_kmod-ledtrig-netdev is not set +# CONFIG_PACKAGE_kmod-ledtrig-oneshot is not set +# CONFIG_PACKAGE_kmod-ledtrig-timer is not set +# CONFIG_PACKAGE_kmod-ledtrig-transient is not set + +# +# Libraries +# +CONFIG_PACKAGE_kmod-asn1-decoder=y +# CONFIG_PACKAGE_kmod-lib-cordic is not set +CONFIG_PACKAGE_kmod-lib-crc-ccitt=y +# CONFIG_PACKAGE_kmod-lib-crc-itu-t is not set +CONFIG_PACKAGE_kmod-lib-crc16=m +CONFIG_PACKAGE_kmod-lib-crc32c=y +# CONFIG_PACKAGE_kmod-lib-crc7 is not set +# CONFIG_PACKAGE_kmod-lib-crc8 is not set +CONFIG_PACKAGE_kmod-lib-textsearch=y +CONFIG_PACKAGE_kmod-lib-zlib-deflate=y +CONFIG_PACKAGE_kmod-lib-zlib-inflate=y + +# +# Native Language Support +# +CONFIG_PACKAGE_kmod-nls-base=y +# CONFIG_PACKAGE_kmod-nls-cp1250 is not set +# CONFIG_PACKAGE_kmod-nls-cp1251 is not set +CONFIG_PACKAGE_kmod-nls-cp437=y +# CONFIG_PACKAGE_kmod-nls-cp775 is not set +# CONFIG_PACKAGE_kmod-nls-cp850 is not set +# CONFIG_PACKAGE_kmod-nls-cp852 is not set +# CONFIG_PACKAGE_kmod-nls-cp862 is not set +# CONFIG_PACKAGE_kmod-nls-cp864 is not set +# CONFIG_PACKAGE_kmod-nls-cp866 is not set +# CONFIG_PACKAGE_kmod-nls-cp932 is not set +# CONFIG_PACKAGE_kmod-nls-cp936 is not set +# CONFIG_PACKAGE_kmod-nls-cp950 is not set +CONFIG_PACKAGE_kmod-nls-iso8859-1=y +# CONFIG_PACKAGE_kmod-nls-iso8859-13 is not set +# CONFIG_PACKAGE_kmod-nls-iso8859-15 is not set +# CONFIG_PACKAGE_kmod-nls-iso8859-2 is not set +# CONFIG_PACKAGE_kmod-nls-iso8859-6 is not set +# CONFIG_PACKAGE_kmod-nls-iso8859-8 is not set +# CONFIG_PACKAGE_kmod-nls-koi8r is not set +CONFIG_PACKAGE_kmod-nls-utf8=y + +# +# Netfilter Extensions +# +CONFIG_PACKAGE_kmod-arptables=y +CONFIG_PACKAGE_kmod-br-netfilter=y +CONFIG_PACKAGE_kmod-ebtables=y +CONFIG_PACKAGE_kmod-ebtables-ipv4=m +CONFIG_PACKAGE_kmod-ebtables-ipv6=m +# CONFIG_PACKAGE_kmod-ebtables-watchers is not set +CONFIG_PACKAGE_kmod-ip6tables=y +# CONFIG_PACKAGE_kmod-ip6tables-extra is not set +# CONFIG_PACKAGE_kmod-ipt-account is not set +# CONFIG_PACKAGE_kmod-ipt-chaos is not set +# CONFIG_PACKAGE_kmod-ipt-checksum is not set +# CONFIG_PACKAGE_kmod-ipt-cluster is not set +# CONFIG_PACKAGE_kmod-ipt-clusterip is not set +# CONFIG_PACKAGE_kmod-ipt-compat-xtables is not set +# CONFIG_PACKAGE_kmod-ipt-condition is not set +CONFIG_PACKAGE_kmod-ipt-conntrack=y +CONFIG_PACKAGE_kmod-ipt-conntrack-extra=y +# CONFIG_PACKAGE_kmod-ipt-conntrack-label is not set +CONFIG_PACKAGE_kmod-ipt-core=y +# CONFIG_PACKAGE_kmod-ipt-debug is not set +# CONFIG_PACKAGE_kmod-ipt-delude is not set +# CONFIG_PACKAGE_kmod-ipt-dhcpmac is not set +# CONFIG_PACKAGE_kmod-ipt-dnetmap is not set +CONFIG_PACKAGE_kmod-ipt-extra=y +CONFIG_PACKAGE_kmod-ipt-filter=y +# CONFIG_PACKAGE_kmod-ipt-fuzzy is not set +# CONFIG_PACKAGE_kmod-ipt-geoip is not set +# CONFIG_PACKAGE_kmod-ipt-hashlimit is not set +# CONFIG_PACKAGE_kmod-ipt-iface is not set +# CONFIG_PACKAGE_kmod-ipt-ipmark is not set +CONFIG_PACKAGE_kmod-ipt-ipopt=y +# CONFIG_PACKAGE_kmod-ipt-ipp2p is not set +# CONFIG_PACKAGE_kmod-ipt-iprange is not set +CONFIG_PACKAGE_kmod-ipt-ipsec=y +CONFIG_PACKAGE_kmod-ipt-ipset=y +# CONFIG_PACKAGE_kmod-ipt-ipv4options is not set +# CONFIG_PACKAGE_kmod-ipt-led is not set +# CONFIG_PACKAGE_kmod-ipt-length2 is not set +# CONFIG_PACKAGE_kmod-ipt-logmark is not set +# CONFIG_PACKAGE_kmod-ipt-lscan is not set +# CONFIG_PACKAGE_kmod-ipt-lua is not set +CONFIG_PACKAGE_kmod-ipt-nat=y +# CONFIG_PACKAGE_kmod-ipt-nat-extra is not set +# CONFIG_PACKAGE_kmod-ipt-nat6 is not set +CONFIG_PACKAGE_kmod-ipt-nathelper-rtsp=y +# CONFIG_PACKAGE_kmod-ipt-nflog is not set +# CONFIG_PACKAGE_kmod-ipt-nfqueue is not set +CONFIG_PACKAGE_kmod-ipt-offload=y +CONFIG_PACKAGE_kmod-ipt-physdev=y +# CONFIG_PACKAGE_kmod-ipt-psd is not set +# CONFIG_PACKAGE_kmod-ipt-quota2 is not set +CONFIG_PACKAGE_kmod-ipt-raw=y +# CONFIG_PACKAGE_kmod-ipt-raw6 is not set +# CONFIG_PACKAGE_kmod-ipt-rpfilter is not set +CONFIG_PACKAGE_kmod-ipt-sctp=y +# CONFIG_PACKAGE_kmod-ipt-sysrq is not set +# CONFIG_PACKAGE_kmod-ipt-tarpit is not set +# CONFIG_PACKAGE_kmod-ipt-tee is not set +# CONFIG_PACKAGE_kmod-ipt-tproxy is not set +# CONFIG_PACKAGE_kmod-ipt-u32 is not set +# CONFIG_PACKAGE_kmod-ipt-ulog is not set +# CONFIG_PACKAGE_kmod-netatop is not set +CONFIG_PACKAGE_kmod-nf-conntrack=y +# CONFIG_PACKAGE_kmod-nf-conntrack-netlink is not set +CONFIG_PACKAGE_kmod-nf-conntrack6=y +CONFIG_PACKAGE_kmod-nf-flow=y +CONFIG_PACKAGE_kmod-nf-ipt=y +CONFIG_PACKAGE_kmod-nf-ipt6=y +# CONFIG_PACKAGE_kmod-nf-ipvs is not set +CONFIG_PACKAGE_kmod-nf-nat=y +CONFIG_PACKAGE_kmod-nf-nat6=y +CONFIG_PACKAGE_kmod-nf-nathelper=y +CONFIG_PACKAGE_kmod-nf-nathelper-extra=y +CONFIG_PACKAGE_kmod-nf-reject=y +CONFIG_PACKAGE_kmod-nf-reject6=y +CONFIG_PACKAGE_kmod-nfnetlink=y +# CONFIG_PACKAGE_kmod-nfnetlink-log is not set +# CONFIG_PACKAGE_kmod-nfnetlink-queue is not set +# CONFIG_PACKAGE_kmod-nft-arp is not set +# CONFIG_PACKAGE_kmod-nft-bridge is not set +CONFIG_PACKAGE_kmod-nft-core=y +# CONFIG_PACKAGE_kmod-nft-fib is not set +CONFIG_PACKAGE_kmod-nft-nat=y +# CONFIG_PACKAGE_kmod-nft-nat6 is not set +CONFIG_PACKAGE_kmod-nft-netdev=y +CONFIG_PACKAGE_kmod-nft-offload=y + +# +# Network Devices +# +# CONFIG_PACKAGE_kmod-3c59x is not set +# CONFIG_PACKAGE_kmod-8139cp is not set +# CONFIG_PACKAGE_kmod-8139too is not set +# CONFIG_PACKAGE_kmod-atl1 is not set +# CONFIG_PACKAGE_kmod-atl1c is not set +# CONFIG_PACKAGE_kmod-atl1e is not set +# CONFIG_PACKAGE_kmod-atl2 is not set +# CONFIG_PACKAGE_kmod-b44 is not set +# CONFIG_PACKAGE_kmod-be2net is not set +# CONFIG_PACKAGE_kmod-bnx2 is not set +# CONFIG_PACKAGE_kmod-dm9000 is not set +# CONFIG_PACKAGE_kmod-dummy is not set +# CONFIG_PACKAGE_kmod-e100 is not set +# CONFIG_PACKAGE_kmod-e1000 is not set +# CONFIG_PACKAGE_kmod-e1000e is not set +# CONFIG_PACKAGE_kmod-et131x is not set +# CONFIG_PACKAGE_kmod-ethoc is not set +# CONFIG_PACKAGE_kmod-forcedeth is not set +# CONFIG_PACKAGE_kmod-gigaset is not set +# CONFIG_PACKAGE_kmod-hfcmulti is not set +# CONFIG_PACKAGE_kmod-hfcpci is not set +CONFIG_PACKAGE_kmod-ifb=y +# CONFIG_PACKAGE_kmod-igb is not set +# CONFIG_PACKAGE_kmod-ixgbe is not set +# CONFIG_PACKAGE_kmod-ixgbevf is not set +CONFIG_PACKAGE_kmod-libphy=m +# CONFIG_PACKAGE_kmod-macvlan is not set +# CONFIG_PACKAGE_kmod-mdio-gpio is not set +CONFIG_PACKAGE_kmod-mii=y +# CONFIG_PACKAGE_kmod-natsemi is not set +# CONFIG_PACKAGE_kmod-ne2k-pci is not set +# CONFIG_PACKAGE_kmod-niu is not set +# CONFIG_PACKAGE_kmod-of-mdio is not set +# CONFIG_PACKAGE_kmod-pcnet32 is not set +# CONFIG_PACKAGE_kmod-phy-broadcom is not set +# CONFIG_PACKAGE_kmod-phy-realtek is not set +# CONFIG_PACKAGE_kmod-qca-cnss is not set +# CONFIG_CNSS2_MODULE is not set +CONFIG_PACKAGE_kmod-qca-nss-cfi-cryptoapi=y +# CONFIG_PACKAGE_kmod-qca-nss-cfi-ocf is not set +CONFIG_PACKAGE_kmod-qca-nss-crypto=y +CONFIG_PACKAGE_kmod-qca-nss-dp=y +CONFIG_PACKAGE_kmod-qca-nss-drv=y +CONFIG_PACKAGE_kmod-qca-nss-drv-bridge-mgr=y +# CONFIG_PACKAGE_kmod-qca-nss-drv-capwapmgr is not set +# CONFIG_PACKAGE_kmod-qca-nss-drv-clmapmgr is not set +# CONFIG_PACKAGE_kmod-qca-nss-drv-dtlsmgr is not set +# CONFIG_PACKAGE_kmod-qca-nss-drv-eogremgr is not set +CONFIG_PACKAGE_kmod-qca-nss-drv-gre=y +CONFIG_PACKAGE_kmod-qca-nss-drv-ipsecmgr=y +CONFIG_PACKAGE_kmod-qca-nss-drv-ipsecmgr-xfrm=y +CONFIG_PACKAGE_kmod-qca-nss-drv-l2tpv2=y +CONFIG_PACKAGE_kmod-qca-nss-drv-lag-mgr=y +CONFIG_PACKAGE_kmod-qca-nss-drv-map-t=y +CONFIG_PACKAGE_kmod-qca-nss-drv-match=y +CONFIG_PACKAGE_kmod-qca-nss-drv-netlink=y +CONFIG_PACKAGE_kmod-qca-nss-drv-ovpn-mgr=y +CONFIG_PACKAGE_kmod-qca-nss-drv-ovpn-link=y +CONFIG_PACKAGE_kmod-qca-nss-drv-pppoe=y +CONFIG_PACKAGE_kmod-qca-nss-drv-pptp=y +# CONFIG_PACKAGE_kmod-qca-nss-drv-profile is not set +# CONFIG_PACKAGE_kmod-qca-nss-drv-pvxlanmgr is not set +# CONFIG_PACKAGE_kmod-qca-nss-drv-tlsmgr is not set +CONFIG_PACKAGE_kmod-qca-nss-drv-tun6rd=y +CONFIG_PACKAGE_kmod-qca-nss-drv-tunipip6=y +CONFIG_PACKAGE_kmod-qca-nss-drv-vlan-mgr=y +CONFIG_PACKAGE_kmod-qca-nss-drv-vxlanmgr=y +CONFIG_PACKAGE_kmod-qca-nss-drv-wifi-meshmgr=y +CONFIG_PACKAGE_kmod-qca-nss-macsec=y +CONFIG_PACKAGE_kmod-qca-ovsmgr=y +CONFIG_PACKAGE_kmod-qca-psdk=m +CONFIG_PACKAGE_kmod-qca-ssdk-nohnat=y +# CONFIG_PACKAGE_kmod-r6040 is not set +# CONFIG_PACKAGE_kmod-r8169 is not set +# CONFIG_PACKAGE_kmod-siit is not set +# CONFIG_PACKAGE_kmod-sis190 is not set +# CONFIG_PACKAGE_kmod-sis900 is not set +# CONFIG_PACKAGE_kmod-skge is not set +# CONFIG_PACKAGE_kmod-sky2 is not set +# CONFIG_PACKAGE_kmod-solos-pci is not set +# CONFIG_PACKAGE_kmod-spi-ks8995 is not set +# CONFIG_PACKAGE_kmod-swconfig is not set +# CONFIG_PACKAGE_kmod-switch-ip17xx is not set +# CONFIG_PACKAGE_kmod-switch-mvsw61xx is not set +# CONFIG_PACKAGE_kmod-switch-rtl8306 is not set +# CONFIG_PACKAGE_kmod-switch-rtl8366-smi is not set +# CONFIG_PACKAGE_kmod-switch-rtl8366rb is not set +# CONFIG_PACKAGE_kmod-switch-rtl8366s is not set +# CONFIG_PACKAGE_kmod-switch-rtl8367b is not set +# CONFIG_PACKAGE_kmod-tg3 is not set +# CONFIG_PACKAGE_kmod-tulip is not set +# CONFIG_PACKAGE_kmod-via-rhine is not set +# CONFIG_PACKAGE_kmod-via-velocity is not set +# CONFIG_PACKAGE_kmod-vmxnet3 is not set + +# +# Network Support +# +# CONFIG_PACKAGE_kmod-atm is not set +# CONFIG_PACKAGE_kmod-ax25 is not set +# CONFIG_PACKAGE_kmod-batman-adv is not set +CONFIG_PACKAGE_kmod-bonding=y +# CONFIG_PACKAGE_kmod-bpf-test is not set +# CONFIG_PACKAGE_kmod-capi is not set +# CONFIG_PACKAGE_kmod-dnsresolver is not set +CONFIG_PACKAGE_kmod-emesh-sp=y +# CONFIG_PACKAGE_kmod-fou is not set +# CONFIG_PACKAGE_kmod-fou6 is not set +# CONFIG_PACKAGE_kmod-geneve is not set +CONFIG_PACKAGE_kmod-gre=y +CONFIG_PACKAGE_kmod-gre6=y +# CONFIG_PACKAGE_kmod-ip-vti is not set +CONFIG_PACKAGE_kmod-ip6-tunnel=y +# CONFIG_PACKAGE_kmod-ip6-vti is not set +# CONFIG_PACKAGE_kmod-ipip is not set +CONFIG_PACKAGE_kmod-ipsec=y +CONFIG_PACKAGE_kmod-ipsec4=y +CONFIG_PACKAGE_kmod-ipsec6=y +CONFIG_PACKAGE_kmod-iptunnel=y +CONFIG_PACKAGE_kmod-iptunnel4=y +CONFIG_PACKAGE_kmod-iptunnel6=y +# CONFIG_PACKAGE_kmod-isdn4linux is not set +# CONFIG_PACKAGE_kmod-jool is not set +CONFIG_PACKAGE_kmod-l2tp=y +# CONFIG_PACKAGE_kmod-l2tp-eth is not set +# CONFIG_PACKAGE_kmod-l2tp-ip is not set +# CONFIG_PACKAGE_kmod-macremapper is not set +# CONFIG_PACKAGE_kmod-macsec is not set +# CONFIG_PACKAGE_kmod-misdn is not set +# CONFIG_PACKAGE_kmod-mpls is not set +CONFIG_PACKAGE_kmod-nat46=y +# CONFIG_PACKAGE_kmod-netem is not set +# CONFIG_PACKAGE_kmod-nlmon is not set +CONFIG_PACKAGE_kmod-nsh=y +# CONFIG_PACKAGE_kmod-openswan is not set +CONFIG_PACKAGE_kmod-openvswitch=y +# CONFIG_PACKAGE_kmod-openvswitch-geneve is not set +# CONFIG_PACKAGE_kmod-openvswitch-geneve-intree is not set +# CONFIG_PACKAGE_kmod-openvswitch-gre is not set +# CONFIG_PACKAGE_kmod-openvswitch-gre-intree is not set +# CONFIG_PACKAGE_kmod-openvswitch-intree is not set +# CONFIG_PACKAGE_kmod-openvswitch-lisp-intree is not set +# CONFIG_PACKAGE_kmod-openvswitch-stt-intree is not set +# CONFIG_PACKAGE_kmod-openvswitch-vxlan is not set +# CONFIG_PACKAGE_kmod-openvswitch-vxlan-intree is not set +# CONFIG_PACKAGE_kmod-pf-ring is not set +# CONFIG_PACKAGE_kmod-pktgen is not set +CONFIG_PACKAGE_kmod-ppp=y +# CONFIG_PACKAGE_kmod-mppe is not set +# CONFIG_PACKAGE_kmod-ppp-synctty is not set +# CONFIG_PACKAGE_kmod-pppoa is not set +CONFIG_PACKAGE_kmod-pppoe=y +CONFIG_PACKAGE_kmod-pppol2tp=y +CONFIG_PACKAGE_kmod-pppox=y +CONFIG_PACKAGE_kmod-pptp=y +CONFIG_PACKAGE_kmod-qca-nss-drv-igs=y +CONFIG_PACKAGE_kmod-qca-nss-drv-mirror=y +CONFIG_PACKAGE_kmod-qca-nss-drv-qdisc=y +CONFIG_PACKAGE_kmod-qca-nss-ecm-premium=y + +# +# ECM Configuration +# +# CONFIG_QCA_NSS_ECM_EXAMPLES_PCC is not set +# CONFIG_QCA_NSS_ECM_EXAMPLES_MARK is not set +# CONFIG_QCA_NSS_ECM_OVS is not set +# CONFIG_PACKAGE_kmod-qca-nss-ecm-premium-noload is not set +# CONFIG_PACKAGE_kmod-qca-nss-ecm-noload is not set +# CONFIG_PACKAGE_kmod-qca-nss-ecm-standard is not set +CONFIG_PACKAGE_kmod-sched=y +# CONFIG_PACKAGE_kmod-sched-act-vlan is not set +# CONFIG_PACKAGE_kmod-sched-bpf is not set +# CONFIG_PACKAGE_kmod-sched-cake is not set +CONFIG_PACKAGE_kmod-sched-connmark=y +CONFIG_PACKAGE_kmod-sched-core=y +# CONFIG_PACKAGE_kmod-sched-ctinfo is not set +# CONFIG_PACKAGE_kmod-sched-flower is not set +# CONFIG_PACKAGE_kmod-sched-ipset is not set +# CONFIG_PACKAGE_kmod-sched-mqprio is not set +# CONFIG_PACKAGE_kmod-sctp is not set +CONFIG_PACKAGE_kmod-sit=y +CONFIG_PACKAGE_kmod-slhc=y +# CONFIG_PACKAGE_kmod-slip is not set +# CONFIG_PACKAGE_kmod-tcp-bbr is not set +# CONFIG_PACKAGE_kmod-trelay is not set +CONFIG_PACKAGE_kmod-tun=y +CONFIG_PACKAGE_kmod-udptunnel4=y +CONFIG_PACKAGE_kmod-udptunnel6=y +# CONFIG_PACKAGE_kmod-veth is not set +CONFIG_PACKAGE_kmod-vxlan=y +# CONFIG_PACKAGE_kmod-wireguard is not set +# CONFIG_PACKAGE_kmod-xfrm-interface is not set + +# +# Other modules +# +# CONFIG_PACKAGE_kmod-6lowpan is not set +CONFIG_PACKAGE_kmod-ath3k=m +# CONFIG_PACKAGE_kmod-bcma is not set +CONFIG_PACKAGE_kmod-bluetooth=m +# CONFIG_PACKAGE_kmod-bluetooth_6lowpan is not set +# CONFIG_PACKAGE_kmod-bmp085 is not set +# CONFIG_PACKAGE_kmod-bmp085-i2c is not set +# CONFIG_PACKAGE_kmod-bmp085-spi is not set +CONFIG_PACKAGE_kmod-bootconfig=y +# CONFIG_PACKAGE_kmod-btmrvl is not set +CONFIG_PACKAGE_kmod-button-hotplug=y +# CONFIG_PACKAGE_kmod-echo is not set +# CONFIG_PACKAGE_kmod-eeprom-93cx6 is not set +# CONFIG_PACKAGE_kmod-eeprom-at24 is not set +# CONFIG_PACKAGE_kmod-eeprom-at25 is not set +# CONFIG_PACKAGE_kmod-fw-auth-test is not set +# CONFIG_PACKAGE_kmod-gpio-beeper is not set +CONFIG_PACKAGE_kmod-gpio-button-hotplug=y +# CONFIG_PACKAGE_kmod-gpio-dev is not set +# CONFIG_PACKAGE_kmod-gpio-mcp23s08 is not set +# CONFIG_PACKAGE_kmod-gpio-nxp-74hc164 is not set +# CONFIG_PACKAGE_kmod-gpio-pca953x is not set +CONFIG_PACKAGE_kmod-gpio-pcf857x=m +CONFIG_PACKAGE_kmod-ikconfig=y +# CONFIG_PACKAGE_kmod-it87-wdt is not set +# CONFIG_PACKAGE_kmod-itco-wdt is not set +# CONFIG_PACKAGE_kmod-lp is not set +CONFIG_PACKAGE_kmod-mhitest_mod=m +# CONFIG_PACKAGE_kmod-mmc is not set +# CONFIG_PACKAGE_kmod-mtd-rw is not set +# CONFIG_PACKAGE_kmod-mtdoops is not set +# CONFIG_PACKAGE_kmod-mtdram is not set +# CONFIG_PACKAGE_kmod-mtdtests is not set +# CONFIG_PACKAGE_kmod-parport-pc is not set +# CONFIG_PACKAGE_kmod-ppdev is not set +CONFIG_PACKAGE_kmod-pps=y +# CONFIG_PACKAGE_kmod-pps-gpio is not set +# CONFIG_PACKAGE_kmod-pps-ldisc is not set +# CONFIG_PACKAGE_kmod-ptp is not set +CONFIG_PACKAGE_kmod-qmi_sample_client=y +CONFIG_PACKAGE_kmod-qseecom=m +# CONFIG_PACKAGE_kmod-random-core is not set +# CONFIG_PACKAGE_kmod-random-tpm is not set +CONFIG_PACKAGE_kmod-regmap-core=m +# CONFIG_PACKAGE_kmod-rtc-ds1307 is not set +# CONFIG_PACKAGE_kmod-rtc-ds1374 is not set +# CONFIG_PACKAGE_kmod-rtc-ds1672 is not set +# CONFIG_PACKAGE_kmod-rtc-em3027 is not set +# CONFIG_PACKAGE_kmod-rtc-isl1208 is not set +# CONFIG_PACKAGE_kmod-rtc-pcf2123 is not set +# CONFIG_PACKAGE_kmod-rtc-pcf8563 is not set +# CONFIG_PACKAGE_kmod-rtc-pt7c4338 is not set +# CONFIG_PACKAGE_kmod-rtc-rs5c372a is not set +# CONFIG_PACKAGE_kmod-sdhci is not set +# CONFIG_PACKAGE_kmod-serial-8250 is not set +# CONFIG_PACKAGE_kmod-serial-8250-exar is not set +# CONFIG_PACKAGE_kmod-softdog is not set +# CONFIG_PACKAGE_kmod-ssb is not set +CONFIG_PACKAGE_kmod-test-udelay=y +# CONFIG_PACKAGE_kmod-tpm is not set +# CONFIG_PACKAGE_kmod-tpm-i2c-atmel is not set +# CONFIG_PACKAGE_kmod-tpm-i2c-infineon is not set +# CONFIG_PACKAGE_kmod-w83627hf-wdt is not set +# CONFIG_PACKAGE_kmod-wifidog-ng is not set +# CONFIG_PACKAGE_kmod-zram is not set + +# +# PCMCIA support +# + +# +# SPI Support +# +# CONFIG_PACKAGE_kmod-mmc-spi is not set +# CONFIG_PACKAGE_kmod-spi-bitbang is not set +# CONFIG_PACKAGE_kmod-spi-dev is not set +# CONFIG_PACKAGE_kmod-spi-gpio is not set +# CONFIG_PACKAGE_kmod-spi-gpio-custom is not set + +# +# Sound Support +# +CONFIG_PACKAGE_kmod-sound-core=y +# CONFIG_PACKAGE_kmod-ac97 is not set +# CONFIG_PACKAGE_kmod-sound-dummy is not set +# CONFIG_PACKAGE_kmod-sound-ens1371 is not set +# CONFIG_PACKAGE_kmod-sound-hda-core is not set +# CONFIG_PACKAGE_kmod-sound-i8x0 is not set +# CONFIG_PACKAGE_kmod-sound-mpu401 is not set +# CONFIG_PACKAGE_kmod-sound-seq is not set +# CONFIG_PACKAGE_kmod-sound-soc-ac97 is not set +# CONFIG_PACKAGE_kmod-sound-soc-core is not set +# CONFIG_PACKAGE_kmod-sound-via82xx is not set +# CONFIG_PACKAGE_kmod-usb-audio is not set + +# +# USB Support +# +# CONFIG_PACKAGE_kmod-chaoskey is not set +# CONFIG_PACKAGE_kmod-usb-acm is not set +# CONFIG_PACKAGE_kmod-usb-atm is not set +# CONFIG_PACKAGE_kmod-usb-cm109 is not set +CONFIG_PACKAGE_kmod-usb-configfs=y +CONFIG_PACKAGE_kmod-usb-core=y +# CONFIG_PACKAGE_kmod-usb-dwc2 is not set +# CONFIG_PACKAGE_kmod-usb-dwc3 is not set +CONFIG_PACKAGE_kmod-usb-dwc3-internal=y +CONFIG_PACKAGE_kmod-usb-dwc3-qcom-internal=y +CONFIG_PACKAGE_kmod-usb-f-diag=y +# CONFIG_PACKAGE_kmod-usb-f_ss_lb is not set +CONFIG_PACKAGE_kmod-usb-gadget=y +# CONFIG_PACKAGE_kmod-usb-gadget-cdc-composite is not set +# CONFIG_PACKAGE_kmod-usb-gadget-ehci-debug is not set +# CONFIG_PACKAGE_kmod-usb-gadget-eth is not set +# CONFIG_PACKAGE_kmod-usb-gadget-hid is not set +# CONFIG_PACKAGE_kmod-usb-gadget-mass-storage is not set +# CONFIG_PACKAGE_kmod-usb-gadget-serial is not set +CONFIG_PACKAGE_kmod-usb-gdiag=y +# CONFIG_PACKAGE_kmod-usb-gzero is not set +# CONFIG_PACKAGE_kmod-usb-hid is not set +# CONFIG_PACKAGE_kmod-usb-ledtrig-usbport is not set +CONFIG_PACKAGE_kmod-usb-lib-composite=y +CONFIG_PACKAGE_kmod-usb-net=y +# CONFIG_PACKAGE_kmod-usb-net-asix is not set +CONFIG_PACKAGE_kmod-usb-net-asix-ax88179=m +# CONFIG_PACKAGE_kmod-usb-net-cdc-eem is not set +# CONFIG_PACKAGE_kmod-usb-net-cdc-ether is not set +# CONFIG_PACKAGE_kmod-usb-net-cdc-mbim is not set +# CONFIG_PACKAGE_kmod-usb-net-cdc-ncm is not set +# CONFIG_PACKAGE_kmod-usb-net-cdc-subset is not set +# CONFIG_PACKAGE_kmod-usb-net-dm9601-ether is not set +# CONFIG_PACKAGE_kmod-usb-net-hso is not set +# CONFIG_PACKAGE_kmod-usb-net-huawei-cdc-ncm is not set +# CONFIG_PACKAGE_kmod-usb-net-ipheth is not set +# CONFIG_PACKAGE_kmod-usb-net-kalmia is not set +# CONFIG_PACKAGE_kmod-usb-net-kaweth is not set +# CONFIG_PACKAGE_kmod-usb-net-mcs7830 is not set +# CONFIG_PACKAGE_kmod-usb-net-pegasus is not set +# CONFIG_PACKAGE_kmod-usb-net-pl is not set +# CONFIG_PACKAGE_kmod-usb-net-qmi-wwan is not set +# CONFIG_PACKAGE_kmod-usb-net-rndis is not set +# CONFIG_PACKAGE_kmod-usb-net-rtl8150 is not set +# CONFIG_PACKAGE_kmod-usb-net-rtl8152 is not set +# CONFIG_PACKAGE_kmod-usb-net-sierrawireless is not set +# CONFIG_PACKAGE_kmod-usb-net-smsc95xx is not set +# CONFIG_PACKAGE_kmod-usb-net-sr9700 is not set +# CONFIG_PACKAGE_kmod-usb-net2280 is not set +# CONFIG_PACKAGE_kmod-usb-ohci is not set +# CONFIG_PACKAGE_kmod-usb-ohci-pci is not set +CONFIG_PACKAGE_kmod-usb-phy-ipq807x=y +# CONFIG_PACKAGE_kmod-usb-printer is not set +# CONFIG_PACKAGE_kmod-usb-serial is not set +CONFIG_PACKAGE_kmod-usb-storage=y +# CONFIG_PACKAGE_kmod-usb-storage-extras is not set +# CONFIG_PACKAGE_kmod-usb-storage-uas is not set +# CONFIG_PACKAGE_kmod-usb-test is not set +# CONFIG_PACKAGE_kmod-usb-uas is not set +# CONFIG_PACKAGE_kmod-usb-uhci is not set +# CONFIG_PACKAGE_kmod-usb-wdm is not set +# CONFIG_PACKAGE_kmod-usb-yealink is not set +# CONFIG_PACKAGE_kmod-usb2 is not set +# CONFIG_PACKAGE_kmod-usb2-pci is not set +CONFIG_PACKAGE_kmod-usb3=y +# CONFIG_PACKAGE_kmod-usbip is not set +# CONFIG_PACKAGE_kmod-usbip-client is not set +# CONFIG_PACKAGE_kmod-usbip-server is not set +# CONFIG_PACKAGE_kmod-usbmon is not set + +# +# Video Support +# +# CONFIG_PACKAGE_kmod-backlight-pwm is not set +# CONFIG_PACKAGE_kmod-drm-kms-helper is not set +# CONFIG_PACKAGE_kmod-drm-ttm is not set +# CONFIG_PACKAGE_kmod-fb is not set +# CONFIG_PACKAGE_kmod-fb-cfb-copyarea is not set +# CONFIG_PACKAGE_kmod-fb-cfb-fillrect is not set +# CONFIG_PACKAGE_kmod-fb-cfb-imgblt is not set +# CONFIG_PACKAGE_kmod-fb-sys-fops is not set +# CONFIG_PACKAGE_kmod-fb-sys-ram is not set +# CONFIG_PACKAGE_kmod-fb-tft is not set +# CONFIG_PACKAGE_kmod-fb-tft-ili9486 is not set +# CONFIG_PACKAGE_kmod-qpic_panel_ertft is not set +# CONFIG_PACKAGE_kmod-qpic_panel_ili_qvga is not set +# CONFIG_PACKAGE_kmod-video-core is not set + +# +# Virtualization +# + +# +# Voice over IP +# + +# +# W1 support +# +# CONFIG_PACKAGE_kmod-w1 is not set + +# +# WPAN 802.15.4 Support +# +# CONFIG_PACKAGE_kmod-at86rf230 is not set +# CONFIG_PACKAGE_kmod-atusb is not set +# CONFIG_PACKAGE_kmod-cc2520 is not set +# CONFIG_PACKAGE_kmod-fakelb is not set +# CONFIG_PACKAGE_kmod-ieee802154 is not set +# CONFIG_PACKAGE_kmod-ieee802154_6lowpan is not set +# CONFIG_PACKAGE_kmod-mac802154 is not set +# CONFIG_PACKAGE_kmod-mrf24j40 is not set + +# +# Wireless Drivers +# +CONFIG_PACKAGE_kmod-ath=y +CONFIG_ATH_USER_REGD=y +CONFIG_PACKAGE_ATH_DEBUG=y +# CONFIG_PACKAGE_kmod-ath10k is not set +# CONFIG_PACKAGE_kmod-ath10k-ct is not set +# CONFIG_PACKAGE_kmod-ath10k-ct-smallbuffers is not set +CONFIG_PACKAGE_kmod-ath11k=y +# CONFIG_PACKAGE_kmod-ath9k is not set +# CONFIG_PACKAGE_kmod-ath9k-common is not set +# CONFIG_PACKAGE_kmod-ath9k-htc is not set +CONFIG_PACKAGE_kmod-cfg80211=y +# CONFIG_PACKAGE_kmod-cfg80211-linux is not set +CONFIG_PACKAGE_kmod-mac80211=y +CONFIG_PACKAGE_MAC80211_NSS_SUPPORT=y +CONFIG_PACKAGE_MAC80211_DEBUGFS=y +CONFIG_PACKAGE_MAC80211_MESH=y +# CONFIG_PACKAGE_MAC80211_MESSAGE_TRACING is not set +# CONFIG_PACKAGE_MAC80211_DEBUG_MENU is not set +# CONFIG_PACKAGE_kmod-mt76 is not set +# CONFIG_PACKAGE_kmod-mt7603 is not set +# CONFIG_PACKAGE_kmod-mt7615e is not set +# CONFIG_PACKAGE_kmod-mt76x0e is not set +# CONFIG_PACKAGE_kmod-mt76x0u is not set +# CONFIG_PACKAGE_kmod-mt76x2 is not set +# CONFIG_PACKAGE_kmod-mt76x2u is not set +# CONFIG_PACKAGE_kmod-net-prism54 is not set +# CONFIG_PACKAGE_kmod-net-rtl8192su is not set +# CONFIG_PACKAGE_kmod-owl-loader is not set +# CONFIG_PACKAGE_kmod-rtl8812au-ct is not set +# CONFIG_PACKAGE_kmod-crypto-aes-internal is not set +CONFIG_PACKAGE_kmod-diag-char=y +# CONFIG_PACKAGE_kmod-qca-nss-ecm-wifi-plugin is not set + +# +# Languages +# + +# +# Erlang +# +# CONFIG_PACKAGE_erlang is not set +# CONFIG_PACKAGE_erlang-asn1 is not set +# CONFIG_PACKAGE_erlang-compiler is not set +# CONFIG_PACKAGE_erlang-crypto is not set +# CONFIG_PACKAGE_erlang-erl-interface is not set +# CONFIG_PACKAGE_erlang-hipe is not set +# CONFIG_PACKAGE_erlang-inets is not set +# CONFIG_PACKAGE_erlang-mnesia is not set +# CONFIG_PACKAGE_erlang-os_mon is not set +# CONFIG_PACKAGE_erlang-public-key is not set +# CONFIG_PACKAGE_erlang-reltool is not set +# CONFIG_PACKAGE_erlang-runtime-tools is not set +# CONFIG_PACKAGE_erlang-snmp is not set +# CONFIG_PACKAGE_erlang-ssh is not set +# CONFIG_PACKAGE_erlang-ssl is not set +# CONFIG_PACKAGE_erlang-syntax-tools is not set +# CONFIG_PACKAGE_erlang-tools is not set +# CONFIG_PACKAGE_erlang-xmerl is not set + +# +# Go +# +# CONFIG_PACKAGE_golang is not set +# CONFIG_PACKAGE_golang-doc is not set +# CONFIG_PACKAGE_golang-github-jedisct1-dnscrypt-proxy2-dev is not set +# CONFIG_PACKAGE_golang-github-nextdns-nextdns-dev is not set +# CONFIG_PACKAGE_golang-gitlab-yawning-obfs4-dev is not set +# CONFIG_PACKAGE_golang-src is not set +# CONFIG_PACKAGE_golang-torproject-tor-fw-helper-dev is not set + +# +# Java +# +# CONFIG_PACKAGE_jamvm is not set + +# +# Lua +# +# CONFIG_PACKAGE_dkjson is not set +# CONFIG_PACKAGE_json4lua is not set +# CONFIG_PACKAGE_ldbus is not set +CONFIG_PACKAGE_libiwinfo-lua=y +# CONFIG_PACKAGE_lpeg is not set +# CONFIG_PACKAGE_lsqlite3 is not set +CONFIG_PACKAGE_lua=y +# CONFIG_PACKAGE_lua-bencode is not set +# CONFIG_PACKAGE_lua-cjson is not set +# CONFIG_PACKAGE_lua-copas is not set +# CONFIG_PACKAGE_lua-coxpcall is not set +# CONFIG_PACKAGE_lua-ev is not set +# CONFIG_PACKAGE_lua-examples is not set +# CONFIG_PACKAGE_lua-libmodbus is not set +# CONFIG_PACKAGE_lua-lzlib is not set +# CONFIG_PACKAGE_lua-md5 is not set +# CONFIG_PACKAGE_lua-mobdebug is not set +# CONFIG_PACKAGE_lua-mosquitto is not set +# CONFIG_PACKAGE_lua-openssl is not set +# CONFIG_PACKAGE_lua-penlight is not set +# CONFIG_PACKAGE_lua-rings is not set +# CONFIG_PACKAGE_lua-rs232 is not set +# CONFIG_PACKAGE_lua-sha2 is not set +# CONFIG_PACKAGE_lua-wsapi-base is not set +# CONFIG_PACKAGE_lua-wsapi-xavante is not set +# CONFIG_PACKAGE_lua-xavante is not set +# CONFIG_PACKAGE_luabitop is not set +# CONFIG_PACKAGE_luac is not set +# CONFIG_PACKAGE_luaexpat is not set +# CONFIG_PACKAGE_luafilesystem is not set +# CONFIG_PACKAGE_luajit is not set +# CONFIG_PACKAGE_lualanes is not set +# CONFIG_PACKAGE_luaposix is not set +# CONFIG_PACKAGE_luarocks is not set +# CONFIG_PACKAGE_luasec is not set +# CONFIG_PACKAGE_luasoap is not set +# CONFIG_PACKAGE_luasocket is not set +# CONFIG_PACKAGE_luasql-mysql is not set +# CONFIG_PACKAGE_luasql-pgsql is not set +# CONFIG_PACKAGE_luasql-sqlite3 is not set +# CONFIG_PACKAGE_luasrcdiet is not set +# CONFIG_PACKAGE_luv is not set +# CONFIG_PACKAGE_lzmq is not set +# CONFIG_PACKAGE_uuid is not set + +# +# Node.js +# +# CONFIG_PACKAGE_node is not set +# CONFIG_PACKAGE_node-arduino-firmata is not set +# CONFIG_PACKAGE_node-cylon is not set +# CONFIG_PACKAGE_node-cylon-firmata is not set +# CONFIG_PACKAGE_node-cylon-gpio is not set +# CONFIG_PACKAGE_node-cylon-i2c is not set +# CONFIG_PACKAGE_node-hid is not set +# CONFIG_PACKAGE_node-homebridge is not set +# CONFIG_PACKAGE_node-npm is not set +# CONFIG_PACKAGE_node-serialport is not set +# CONFIG_PACKAGE_node-serialport-bindings is not set + +# +# PHP +# +# CONFIG_PACKAGE_php7 is not set + +# +# Perl +# +# CONFIG_PACKAGE_perl is not set + +# +# Python +# +# CONFIG_PACKAGE_gunicorn is not set +# CONFIG_PACKAGE_micropython is not set +# CONFIG_PACKAGE_micropython-lib is not set +# CONFIG_PACKAGE_python is not set +# CONFIG_PACKAGE_python-asn1crypto is not set +# CONFIG_PACKAGE_python-astral is not set +# CONFIG_PACKAGE_python-astral-src is not set +# CONFIG_PACKAGE_python-attrs is not set +# CONFIG_PACKAGE_python-attrs-src is not set +# CONFIG_PACKAGE_python-automat is not set +# CONFIG_PACKAGE_python-automat-src is not set +# CONFIG_PACKAGE_python-awscli is not set +# CONFIG_PACKAGE_python-awscli-src is not set +# CONFIG_PACKAGE_python-base is not set +# CONFIG_PACKAGE_python-base-src is not set +# CONFIG_PACKAGE_python-bcrypt is not set +# CONFIG_PACKAGE_python-bcrypt-src is not set +# CONFIG_PACKAGE_python-botocore is not set +# CONFIG_PACKAGE_python-botocore-src is not set +# CONFIG_PACKAGE_python-certifi is not set +# CONFIG_PACKAGE_python-certifi-src is not set +# CONFIG_PACKAGE_python-cffi is not set +# CONFIG_PACKAGE_python-cffi-src is not set +# CONFIG_PACKAGE_python-chardet is not set +# CONFIG_PACKAGE_python-chardet-src is not set +# CONFIG_PACKAGE_python-codecs is not set +# CONFIG_PACKAGE_python-codecs-src is not set +# CONFIG_PACKAGE_python-colorama is not set +# CONFIG_PACKAGE_python-colorama-src is not set +# CONFIG_PACKAGE_python-compiler is not set +# CONFIG_PACKAGE_python-compiler-src is not set +# CONFIG_PACKAGE_python-constantly is not set +# CONFIG_PACKAGE_python-constantly-src is not set +# CONFIG_PACKAGE_python-crcmod is not set +# CONFIG_PACKAGE_python-crypto is not set +# CONFIG_PACKAGE_python-crypto-src is not set +# CONFIG_PACKAGE_python-cryptodome is not set +# CONFIG_PACKAGE_python-cryptodome-src is not set +# CONFIG_PACKAGE_python-cryptodomex is not set +# CONFIG_PACKAGE_python-cryptodomex-src is not set +# CONFIG_PACKAGE_python-cryptography is not set +# CONFIG_PACKAGE_python-cryptography-src is not set +# CONFIG_PACKAGE_python-ctypes is not set +# CONFIG_PACKAGE_python-ctypes-src is not set +# CONFIG_PACKAGE_python-curl is not set +# CONFIG_PACKAGE_python-curl-src is not set +# CONFIG_PACKAGE_python-dateutil is not set +# CONFIG_PACKAGE_python-dateutil-src is not set +# CONFIG_PACKAGE_python-db is not set +# CONFIG_PACKAGE_python-db-src is not set +# CONFIG_PACKAGE_python-decimal is not set +# CONFIG_PACKAGE_python-decimal-src is not set +# CONFIG_PACKAGE_python-defusedxml is not set +# CONFIG_PACKAGE_python-defusedxml-src is not set +# CONFIG_PACKAGE_python-dev is not set +# CONFIG_PACKAGE_python-dev-src is not set +# CONFIG_PACKAGE_python-distutils is not set +# CONFIG_PACKAGE_python-distutils-src is not set +# CONFIG_PACKAGE_python-django is not set +# CONFIG_PACKAGE_python-dns is not set +# CONFIG_PACKAGE_python-dns-src is not set +# CONFIG_PACKAGE_python-docutils is not set +# CONFIG_PACKAGE_python-docutils-src is not set +# CONFIG_PACKAGE_python-dpkt is not set +# CONFIG_PACKAGE_python-egenix-mx-base is not set +# CONFIG_PACKAGE_python-email is not set +# CONFIG_PACKAGE_python-email-src is not set +# CONFIG_PACKAGE_python-enum34 is not set +# CONFIG_PACKAGE_python-enum34-src is not set +# CONFIG_PACKAGE_python-et_xmlfile is not set +# CONFIG_PACKAGE_python-et_xmlfile-src is not set +# CONFIG_PACKAGE_python-evdev is not set +# CONFIG_PACKAGE_python-flup is not set +# CONFIG_PACKAGE_python-flup-src is not set +# CONFIG_PACKAGE_python-futures is not set +# CONFIG_PACKAGE_python-futures-src is not set +# CONFIG_PACKAGE_python-gdbm is not set +# CONFIG_PACKAGE_python-gdbm-src is not set +# CONFIG_PACKAGE_python-gmpy2 is not set +# CONFIG_PACKAGE_python-gmpy2-src is not set +# CONFIG_PACKAGE_python-gnupg is not set +# CONFIG_PACKAGE_python-hyperlink is not set +# CONFIG_PACKAGE_python-hyperlink-src is not set +# CONFIG_PACKAGE_python-idna is not set +# CONFIG_PACKAGE_python-idna-src is not set +# CONFIG_PACKAGE_python-incremental is not set +# CONFIG_PACKAGE_python-incremental-src is not set +# CONFIG_PACKAGE_python-ipaddress is not set +# CONFIG_PACKAGE_python-ipaddress-src is not set +# CONFIG_PACKAGE_python-jdcal is not set +# CONFIG_PACKAGE_python-jdcal-src is not set +# CONFIG_PACKAGE_python-jmespath is not set +# CONFIG_PACKAGE_python-jmespath-src is not set +# CONFIG_PACKAGE_python-ldap is not set +# CONFIG_PACKAGE_python-lib2to3 is not set +# CONFIG_PACKAGE_python-lib2to3-src is not set +# CONFIG_PACKAGE_python-light is not set + +# +# Configuration +# +# CONFIG_PYTHON_BLUETOOTH_SUPPORT is not set +# CONFIG_PACKAGE_python-light-src is not set +# CONFIG_PACKAGE_python-logging is not set +# CONFIG_PACKAGE_python-logging-src is not set +# CONFIG_PACKAGE_python-lxml is not set +# CONFIG_PACKAGE_python-multiprocessing is not set +# CONFIG_PACKAGE_python-multiprocessing-src is not set +# CONFIG_PACKAGE_python-mysql is not set +# CONFIG_PACKAGE_python-ncurses is not set +# CONFIG_PACKAGE_python-ncurses-src is not set +# CONFIG_PACKAGE_python-oauthlib is not set +# CONFIG_PACKAGE_python-oauthlib-src is not set +# CONFIG_PACKAGE_python-openpyxl is not set +# CONFIG_PACKAGE_python-openpyxl-src is not set +# CONFIG_PACKAGE_python-openssl is not set +# CONFIG_PACKAGE_python-openssl-src is not set +# CONFIG_PACKAGE_python-packages is not set +# CONFIG_PACKAGE_python-parsley is not set +# CONFIG_PACKAGE_python-parsley-src is not set +# CONFIG_PACKAGE_python-passlib is not set +# CONFIG_PACKAGE_python-passlib-src is not set +# CONFIG_PACKAGE_python-pcapy is not set +# CONFIG_PACKAGE_python-pillow is not set +# CONFIG_PACKAGE_python-pillow-src is not set +# CONFIG_PACKAGE_python-pip is not set +# CONFIG_PACKAGE_python-pip-conf is not set +# CONFIG_PACKAGE_python-pip-src is not set +# CONFIG_PACKAGE_python-pkg-resources is not set +# CONFIG_PACKAGE_python-pkg-resources-src is not set +# CONFIG_PACKAGE_python-ply is not set +# CONFIG_PACKAGE_python-ply-src is not set +# CONFIG_PACKAGE_python-psycopg2 is not set +# CONFIG_PACKAGE_python-pyasn1 is not set +# CONFIG_PACKAGE_python-pyasn1-modules is not set +# CONFIG_PACKAGE_python-pyasn1-modules-src is not set +# CONFIG_PACKAGE_python-pyasn1-src is not set +# CONFIG_PACKAGE_python-pycparser is not set +# CONFIG_PACKAGE_python-pycparser-src is not set +# CONFIG_PACKAGE_python-pydoc is not set +# CONFIG_PACKAGE_python-pydoc-src is not set +# CONFIG_PACKAGE_python-pyjwt is not set +# CONFIG_PACKAGE_python-pyjwt-src is not set +# CONFIG_PACKAGE_python-pyodbc is not set +# CONFIG_PACKAGE_python-pyopenssl is not set +# CONFIG_PACKAGE_python-pyopenssl-src is not set +# CONFIG_PACKAGE_python-pyptlib is not set +# CONFIG_PACKAGE_python-pyptlib-src is not set +# CONFIG_PACKAGE_python-pyserial is not set +# CONFIG_PACKAGE_python-pyserial-src is not set +# CONFIG_PACKAGE_python-pytz is not set +# CONFIG_PACKAGE_python-pytz-src is not set +# CONFIG_PACKAGE_python-qrcode is not set +# CONFIG_PACKAGE_python-qrcode-src is not set +# CONFIG_PACKAGE_python-rcssmin is not set +# CONFIG_PACKAGE_python-rcssmin-src is not set +# CONFIG_PACKAGE_python-requests is not set +# CONFIG_PACKAGE_python-requests-oauthlib is not set +# CONFIG_PACKAGE_python-requests-oauthlib-src is not set +# CONFIG_PACKAGE_python-requests-src is not set +# CONFIG_PACKAGE_python-rsa is not set +# CONFIG_PACKAGE_python-rsa-src is not set +# CONFIG_PACKAGE_python-ruamel-yaml is not set +# CONFIG_PACKAGE_python-ruamel-yaml-src is not set +# CONFIG_PACKAGE_python-s3transfer is not set +# CONFIG_PACKAGE_python-s3transfer-src is not set +# CONFIG_PACKAGE_python-service-identity is not set +# CONFIG_PACKAGE_python-service-identity-src is not set +# CONFIG_PACKAGE_python-setuptools is not set +# CONFIG_PACKAGE_python-setuptools-src is not set +# CONFIG_PACKAGE_python-simplejson is not set +# CONFIG_PACKAGE_python-simplejson-src is not set +# CONFIG_PACKAGE_python-six is not set +# CONFIG_PACKAGE_python-six-src is not set +# CONFIG_PACKAGE_python-smbus is not set +# CONFIG_PACKAGE_python-sqlite3 is not set +# CONFIG_PACKAGE_python-sqlite3-src is not set +# CONFIG_PACKAGE_python-text-unidecode is not set +# CONFIG_PACKAGE_python-text-unidecode-src is not set +# CONFIG_PACKAGE_python-twisted is not set +# CONFIG_PACKAGE_python-twisted-src is not set +# CONFIG_PACKAGE_python-txsocksx is not set +# CONFIG_PACKAGE_python-txsocksx-src is not set +# CONFIG_PACKAGE_python-unittest is not set +# CONFIG_PACKAGE_python-unittest-src is not set +# CONFIG_PACKAGE_python-urllib3 is not set +# CONFIG_PACKAGE_python-urllib3-src is not set +# CONFIG_PACKAGE_python-vobject is not set +# CONFIG_PACKAGE_python-vobject-src is not set +# CONFIG_PACKAGE_python-voluptuous is not set +# CONFIG_PACKAGE_python-voluptuous-src is not set +# CONFIG_PACKAGE_python-xml is not set +# CONFIG_PACKAGE_python-xml-src is not set +# CONFIG_PACKAGE_python-yaml is not set +# CONFIG_PACKAGE_python-yaml-src is not set +# CONFIG_PACKAGE_python-zope-interface is not set +# CONFIG_PACKAGE_python-zope-interface-src is not set +# CONFIG_PACKAGE_python3 is not set +# CONFIG_PACKAGE_python3-aiohttp is not set +# CONFIG_PACKAGE_python3-aiohttp-cors is not set +# CONFIG_PACKAGE_python3-aiohttp-cors-src is not set +# CONFIG_PACKAGE_python3-aiohttp-src is not set +# CONFIG_PACKAGE_python3-appdirs is not set +# CONFIG_PACKAGE_python3-appdirs-src is not set +# CONFIG_PACKAGE_python3-asn1crypto is not set +# CONFIG_PACKAGE_python3-astral is not set +# CONFIG_PACKAGE_python3-astral-src is not set +# CONFIG_PACKAGE_python3-async-timeout is not set +# CONFIG_PACKAGE_python3-async-timeout-src is not set +# CONFIG_PACKAGE_python3-asyncio is not set +# CONFIG_PACKAGE_python3-asyncio-src is not set +# CONFIG_PACKAGE_python3-attrs is not set +# CONFIG_PACKAGE_python3-attrs-src is not set +# CONFIG_PACKAGE_python3-automat is not set +# CONFIG_PACKAGE_python3-automat-src is not set +# CONFIG_PACKAGE_python3-awscli is not set +# CONFIG_PACKAGE_python3-awscli-src is not set +# CONFIG_PACKAGE_python3-base is not set +# CONFIG_PACKAGE_python3-base-src is not set +# CONFIG_PACKAGE_python3-bcrypt is not set +# CONFIG_PACKAGE_python3-bcrypt-src is not set +# CONFIG_PACKAGE_python3-boto3 is not set +# CONFIG_PACKAGE_python3-boto3-src is not set +# CONFIG_PACKAGE_python3-botocore is not set +# CONFIG_PACKAGE_python3-botocore-src is not set +# CONFIG_PACKAGE_python3-bottle is not set +# CONFIG_PACKAGE_python3-bottle-src is not set +# CONFIG_PACKAGE_python3-cachelib is not set +# CONFIG_PACKAGE_python3-cachelib-src is not set +# CONFIG_PACKAGE_python3-cachetools is not set +# CONFIG_PACKAGE_python3-cachetools-src is not set +# CONFIG_PACKAGE_python3-certifi is not set +# CONFIG_PACKAGE_python3-certifi-src is not set +# CONFIG_PACKAGE_python3-cffi is not set +# CONFIG_PACKAGE_python3-cffi-src is not set +# CONFIG_PACKAGE_python3-cgi is not set +# CONFIG_PACKAGE_python3-cgi-src is not set +# CONFIG_PACKAGE_python3-cgitb is not set +# CONFIG_PACKAGE_python3-cgitb-src is not set +# CONFIG_PACKAGE_python3-chardet is not set +# CONFIG_PACKAGE_python3-chardet-src is not set +# CONFIG_PACKAGE_python3-click is not set +# CONFIG_PACKAGE_python3-click-log is not set +# CONFIG_PACKAGE_python3-click-log-src is not set +# CONFIG_PACKAGE_python3-click-src is not set +# CONFIG_PACKAGE_python3-codecs is not set +# CONFIG_PACKAGE_python3-codecs-src is not set +# CONFIG_PACKAGE_python3-colorama is not set +# CONFIG_PACKAGE_python3-colorama-src is not set +# CONFIG_PACKAGE_python3-constantly is not set +# CONFIG_PACKAGE_python3-constantly-src is not set +# CONFIG_PACKAGE_python3-contextlib2 is not set +# CONFIG_PACKAGE_python3-contextlib2-src is not set +# CONFIG_PACKAGE_python3-crypto is not set +# CONFIG_PACKAGE_python3-crypto-src is not set +# CONFIG_PACKAGE_python3-cryptodome is not set +# CONFIG_PACKAGE_python3-cryptodome-src is not set +# CONFIG_PACKAGE_python3-cryptodomex is not set +# CONFIG_PACKAGE_python3-cryptodomex-src is not set +# CONFIG_PACKAGE_python3-cryptography is not set +# CONFIG_PACKAGE_python3-cryptography-src is not set +# CONFIG_PACKAGE_python3-ctypes is not set +# CONFIG_PACKAGE_python3-ctypes-src is not set +# CONFIG_PACKAGE_python3-curl is not set +# CONFIG_PACKAGE_python3-curl-src is not set +# CONFIG_PACKAGE_python3-dateutil is not set +# CONFIG_PACKAGE_python3-dateutil-src is not set +# CONFIG_PACKAGE_python3-dbm is not set +# CONFIG_PACKAGE_python3-dbm-src is not set +# CONFIG_PACKAGE_python3-decimal is not set +# CONFIG_PACKAGE_python3-decimal-src is not set +# CONFIG_PACKAGE_python3-decorator is not set +# CONFIG_PACKAGE_python3-decorator-src is not set +# CONFIG_PACKAGE_python3-defusedxml is not set +# CONFIG_PACKAGE_python3-defusedxml-src is not set +# CONFIG_PACKAGE_python3-dev is not set +# CONFIG_PACKAGE_python3-dev-src is not set +# CONFIG_PACKAGE_python3-distutils is not set +# CONFIG_PACKAGE_python3-distutils-src is not set +# CONFIG_PACKAGE_python3-django is not set +# CONFIG_PACKAGE_python3-dns is not set +# CONFIG_PACKAGE_python3-dns-src is not set +# CONFIG_PACKAGE_python3-docutils is not set +# CONFIG_PACKAGE_python3-docutils-src is not set +# CONFIG_PACKAGE_python3-email is not set +# CONFIG_PACKAGE_python3-email-src is not set +# CONFIG_PACKAGE_python3-et_xmlfile is not set +# CONFIG_PACKAGE_python3-et_xmlfile-src is not set +# CONFIG_PACKAGE_python3-evdev is not set +# CONFIG_PACKAGE_python3-flask is not set +# CONFIG_PACKAGE_python3-flask-login is not set +# CONFIG_PACKAGE_python3-flask-login-src is not set +# CONFIG_PACKAGE_python3-flask-src is not set +# CONFIG_PACKAGE_python3-flup is not set +# CONFIG_PACKAGE_python3-flup-src is not set +# CONFIG_PACKAGE_python3-gdbm is not set +# CONFIG_PACKAGE_python3-gdbm-src is not set +# CONFIG_PACKAGE_python3-gmpy2 is not set +# CONFIG_PACKAGE_python3-gmpy2-src is not set +# CONFIG_PACKAGE_python3-gnupg is not set +# CONFIG_PACKAGE_python3-hyperlink is not set +# CONFIG_PACKAGE_python3-hyperlink-src is not set +# CONFIG_PACKAGE_python3-idna is not set +# CONFIG_PACKAGE_python3-idna-src is not set +# CONFIG_PACKAGE_python3-ifaddr is not set +# CONFIG_PACKAGE_python3-ifaddr-src is not set +# CONFIG_PACKAGE_python3-importlib-metadata is not set +# CONFIG_PACKAGE_python3-importlib-metadata-src is not set +# CONFIG_PACKAGE_python3-incremental is not set +# CONFIG_PACKAGE_python3-incremental-src is not set +# CONFIG_PACKAGE_python3-influxdb is not set +# CONFIG_PACKAGE_python3-influxdb-src is not set +# CONFIG_PACKAGE_python3-intelhex is not set +# CONFIG_PACKAGE_python3-intelhex-src is not set +# CONFIG_PACKAGE_python3-itsdangerous is not set +# CONFIG_PACKAGE_python3-jdcal is not set +# CONFIG_PACKAGE_python3-jdcal-src is not set +# CONFIG_PACKAGE_python3-jinja2 is not set +# CONFIG_PACKAGE_python3-jinja2-src is not set +# CONFIG_PACKAGE_python3-jmespath is not set +# CONFIG_PACKAGE_python3-jmespath-src is not set +# CONFIG_PACKAGE_python3-jsonpath-ng is not set +# CONFIG_PACKAGE_python3-jsonpath-ng-src is not set +# CONFIG_PACKAGE_python3-lib2to3 is not set +# CONFIG_PACKAGE_python3-lib2to3-src is not set +# CONFIG_PACKAGE_python3-light is not set + +# +# Configuration +# +# CONFIG_PYTHON3_BLUETOOTH_SUPPORT is not set +# CONFIG_PACKAGE_python3-light-src is not set +# CONFIG_PACKAGE_python3-logging is not set +# CONFIG_PACKAGE_python3-logging-src is not set +# CONFIG_PACKAGE_python3-lxml is not set +# CONFIG_PACKAGE_python3-lzma is not set +# CONFIG_PACKAGE_python3-lzma-src is not set +# CONFIG_PACKAGE_python3-markdown is not set +# CONFIG_PACKAGE_python3-markdown-src is not set +# CONFIG_PACKAGE_python3-markupsafe is not set +# CONFIG_PACKAGE_python3-maxminddb is not set +# CONFIG_PACKAGE_python3-maxminddb-src is not set +# CONFIG_PACKAGE_python3-more-itertools is not set +# CONFIG_PACKAGE_python3-more-itertools-src is not set +# CONFIG_PACKAGE_python3-multidict is not set +# CONFIG_PACKAGE_python3-multidict-src is not set +# CONFIG_PACKAGE_python3-multiprocessing is not set +# CONFIG_PACKAGE_python3-multiprocessing-src is not set +# CONFIG_PACKAGE_python3-mysql is not set +# CONFIG_PACKAGE_python3-ncurses is not set +# CONFIG_PACKAGE_python3-ncurses-src is not set +# CONFIG_PACKAGE_python3-netdisco is not set +# CONFIG_PACKAGE_python3-netdisco-src is not set +# CONFIG_PACKAGE_python3-netifaces is not set +# CONFIG_PACKAGE_python3-netifaces-src is not set +# CONFIG_PACKAGE_python3-newt is not set +# CONFIG_PACKAGE_python3-newt-src is not set +# CONFIG_PACKAGE_python3-oauthlib is not set +# CONFIG_PACKAGE_python3-oauthlib-src is not set +# CONFIG_PACKAGE_python3-openpyxl is not set +# CONFIG_PACKAGE_python3-openpyxl-src is not set +# CONFIG_PACKAGE_python3-openssl is not set +# CONFIG_PACKAGE_python3-openssl-src is not set +# CONFIG_PACKAGE_python3-packages is not set +# CONFIG_PACKAGE_python3-paho-mqtt is not set +# CONFIG_PACKAGE_python3-paho-mqtt-src is not set +# CONFIG_PACKAGE_python3-parsley is not set +# CONFIG_PACKAGE_python3-parsley-src is not set +# CONFIG_PACKAGE_python3-passlib is not set +# CONFIG_PACKAGE_python3-passlib-src is not set +# CONFIG_PACKAGE_python3-pillow is not set +# CONFIG_PACKAGE_python3-pillow-src is not set +# CONFIG_PACKAGE_python3-pip is not set +# CONFIG_PACKAGE_python3-pip-src is not set +# CONFIG_PACKAGE_python3-pkg-resources is not set +# CONFIG_PACKAGE_python3-pkg-resources-src is not set +# CONFIG_PACKAGE_python3-ply is not set +# CONFIG_PACKAGE_python3-ply-src is not set +# CONFIG_PACKAGE_python3-pyasn1 is not set +# CONFIG_PACKAGE_python3-pyasn1-modules is not set +# CONFIG_PACKAGE_python3-pyasn1-modules-src is not set +# CONFIG_PACKAGE_python3-pyasn1-src is not set +# CONFIG_PACKAGE_python3-pycparser is not set +# CONFIG_PACKAGE_python3-pycparser-src is not set +# CONFIG_PACKAGE_python3-pydoc is not set +# CONFIG_PACKAGE_python3-pydoc-src is not set +# CONFIG_PACKAGE_python3-pyjwt is not set +# CONFIG_PACKAGE_python3-pyjwt-src is not set +# CONFIG_PACKAGE_python3-pyodbc is not set +# CONFIG_PACKAGE_python3-pyopenssl is not set +# CONFIG_PACKAGE_python3-pyopenssl-src is not set +# CONFIG_PACKAGE_python3-pyotp is not set +# CONFIG_PACKAGE_python3-pyotp-src is not set +# CONFIG_PACKAGE_python3-pyroute2 is not set +# CONFIG_PACKAGE_python3-pyroute2-src is not set +# CONFIG_PACKAGE_python3-pyrsistent is not set +# CONFIG_PACKAGE_python3-pyrsistent-src is not set +# CONFIG_PACKAGE_python3-pyserial is not set +# CONFIG_PACKAGE_python3-pyserial-src is not set +# CONFIG_PACKAGE_python3-pytz is not set +# CONFIG_PACKAGE_python3-pytz-src is not set +# CONFIG_PACKAGE_python3-qrcode is not set +# CONFIG_PACKAGE_python3-qrcode-src is not set +# CONFIG_PACKAGE_python3-rcssmin is not set +# CONFIG_PACKAGE_python3-rcssmin-src is not set +# CONFIG_PACKAGE_python3-requests is not set +# CONFIG_PACKAGE_python3-requests-oauthlib is not set +# CONFIG_PACKAGE_python3-requests-oauthlib-src is not set +# CONFIG_PACKAGE_python3-requests-src is not set +# CONFIG_PACKAGE_python3-rsa is not set +# CONFIG_PACKAGE_python3-rsa-src is not set +# CONFIG_PACKAGE_python3-ruamel-yaml is not set +# CONFIG_PACKAGE_python3-ruamel-yaml-src is not set +# CONFIG_PACKAGE_python3-s3transfer is not set +# CONFIG_PACKAGE_python3-s3transfer-src is not set +# CONFIG_PACKAGE_python3-schema is not set +# CONFIG_PACKAGE_python3-schema-src is not set +# CONFIG_PACKAGE_python3-sentry-sdk is not set +# CONFIG_PACKAGE_python3-sentry-sdk-src is not set +# CONFIG_PACKAGE_python3-service-identity is not set +# CONFIG_PACKAGE_python3-service-identity-src is not set +# CONFIG_PACKAGE_python3-setuptools is not set +# CONFIG_PACKAGE_python3-setuptools-src is not set +# CONFIG_PACKAGE_python3-simplejson is not set +# CONFIG_PACKAGE_python3-simplejson-src is not set +# CONFIG_PACKAGE_python3-six is not set +# CONFIG_PACKAGE_python3-six-src is not set +# CONFIG_PACKAGE_python3-slugify is not set +# CONFIG_PACKAGE_python3-slugify-src is not set +# CONFIG_PACKAGE_python3-smbus is not set +# CONFIG_PACKAGE_python3-sqlalchemy is not set +# CONFIG_PACKAGE_python3-sqlalchemy-src is not set +# CONFIG_PACKAGE_python3-sqlite3 is not set +# CONFIG_PACKAGE_python3-sqlite3-src is not set +# CONFIG_PACKAGE_python3-text-unidecode is not set +# CONFIG_PACKAGE_python3-text-unidecode-src is not set +# CONFIG_PACKAGE_python3-twisted is not set +# CONFIG_PACKAGE_python3-twisted-src is not set +# CONFIG_PACKAGE_python3-unidecode is not set +# CONFIG_PACKAGE_python3-unidecode-src is not set +# CONFIG_PACKAGE_python3-unittest is not set +# CONFIG_PACKAGE_python3-unittest-src is not set +# CONFIG_PACKAGE_python3-urllib is not set +# CONFIG_PACKAGE_python3-urllib-src is not set +# CONFIG_PACKAGE_python3-urllib3 is not set +# CONFIG_PACKAGE_python3-urllib3-src is not set +# CONFIG_PACKAGE_python3-vobject is not set +# CONFIG_PACKAGE_python3-vobject-src is not set +# CONFIG_PACKAGE_python3-voluptuous is not set +# CONFIG_PACKAGE_python3-voluptuous-serialize is not set +# CONFIG_PACKAGE_python3-voluptuous-serialize-src is not set +# CONFIG_PACKAGE_python3-voluptuous-src is not set +# CONFIG_PACKAGE_python3-werkzeug is not set +# CONFIG_PACKAGE_python3-werkzeug-src is not set +# CONFIG_PACKAGE_python3-xml is not set +# CONFIG_PACKAGE_python3-xml-src is not set +# CONFIG_PACKAGE_python3-xmltodict is not set +# CONFIG_PACKAGE_python3-xmltodict-src is not set +# CONFIG_PACKAGE_python3-yaml is not set +# CONFIG_PACKAGE_python3-yaml-src is not set +# CONFIG_PACKAGE_python3-yarl is not set +# CONFIG_PACKAGE_python3-yarl-src is not set +# CONFIG_PACKAGE_python3-zeroconf is not set +# CONFIG_PACKAGE_python3-zeroconf-src is not set +# CONFIG_PACKAGE_python3-zipp is not set +# CONFIG_PACKAGE_python3-zipp-src is not set +# CONFIG_PACKAGE_python3-zope-interface is not set +# CONFIG_PACKAGE_python3-zope-interface-src is not set + +# +# Ruby +# +# CONFIG_PACKAGE_ruby is not set +# CONFIG_PACKAGE_ruby-dev is not set + +# +# Tcl +# +# CONFIG_PACKAGE_tcl is not set +# CONFIG_PACKAGE_chicken-scheme-interpreter is not set +# CONFIG_PACKAGE_slsh is not set +# CONFIG_PACKAGE_vala is not set + +# +# Libraries +# + +# +# Compression +# +CONFIG_PACKAGE_libbz2=y +# CONFIG_PACKAGE_liblz4 is not set +CONFIG_PACKAGE_liblzma=y +# CONFIG_PACKAGE_libunrar is not set +# CONFIG_PACKAGE_libzip-gnutls is not set +# CONFIG_PACKAGE_libzip-mbedtls is not set +# CONFIG_PACKAGE_libzip-nossl is not set +# CONFIG_PACKAGE_libzip-openssl is not set +# CONFIG_PACKAGE_libzstd is not set + +# +# Filesystem +# +# CONFIG_PACKAGE_libacl is not set +CONFIG_PACKAGE_libattr=m +# CONFIG_PACKAGE_libfuse is not set +# CONFIG_PACKAGE_libow is not set +# CONFIG_PACKAGE_libow-capi is not set +CONFIG_PACKAGE_libsysfs=y + +# +# Firewall +# +# CONFIG_PACKAGE_libfko is not set +CONFIG_PACKAGE_libip4tc=y +CONFIG_PACKAGE_libip6tc=y +# CONFIG_PACKAGE_libiptc is not set +CONFIG_PACKAGE_libxtables=y +# CONFIG_PACKAGE_libxtables-nft is not set + +# +# Instant Messaging +# +# CONFIG_PACKAGE_quasselc is not set + +# +# IoT +# +# CONFIG_PACKAGE_libmraa is not set +# CONFIG_PACKAGE_libmraa-node is not set +# CONFIG_PACKAGE_libmraa-python is not set +# CONFIG_PACKAGE_libmraa-python3 is not set +# CONFIG_PACKAGE_libupm is not set +# CONFIG_PACKAGE_libupm-a110x is not set +# CONFIG_PACKAGE_libupm-a110x-node is not set +# CONFIG_PACKAGE_libupm-a110x-python is not set +# CONFIG_PACKAGE_libupm-a110x-python3 is not set +# CONFIG_PACKAGE_libupm-abp is not set +# CONFIG_PACKAGE_libupm-abp-node is not set +# CONFIG_PACKAGE_libupm-abp-python is not set +# CONFIG_PACKAGE_libupm-abp-python3 is not set +# CONFIG_PACKAGE_libupm-ad8232 is not set +# CONFIG_PACKAGE_libupm-ad8232-node is not set +# CONFIG_PACKAGE_libupm-ad8232-python is not set +# CONFIG_PACKAGE_libupm-ad8232-python3 is not set +# CONFIG_PACKAGE_libupm-adafruitms1438 is not set +# CONFIG_PACKAGE_libupm-adafruitms1438-node is not set +# CONFIG_PACKAGE_libupm-adafruitms1438-python is not set +# CONFIG_PACKAGE_libupm-adafruitms1438-python3 is not set +# CONFIG_PACKAGE_libupm-adafruitss is not set +# CONFIG_PACKAGE_libupm-adafruitss-node is not set +# CONFIG_PACKAGE_libupm-adafruitss-python is not set +# CONFIG_PACKAGE_libupm-adafruitss-python3 is not set +# CONFIG_PACKAGE_libupm-adc121c021 is not set +# CONFIG_PACKAGE_libupm-adc121c021-node is not set +# CONFIG_PACKAGE_libupm-adc121c021-python is not set +# CONFIG_PACKAGE_libupm-adc121c021-python3 is not set +# CONFIG_PACKAGE_libupm-adis16448 is not set +# CONFIG_PACKAGE_libupm-adis16448-node is not set +# CONFIG_PACKAGE_libupm-adis16448-python is not set +# CONFIG_PACKAGE_libupm-adis16448-python3 is not set +# CONFIG_PACKAGE_libupm-ads1x15 is not set +# CONFIG_PACKAGE_libupm-ads1x15-node is not set +# CONFIG_PACKAGE_libupm-ads1x15-python is not set +# CONFIG_PACKAGE_libupm-ads1x15-python3 is not set +# CONFIG_PACKAGE_libupm-adxl335 is not set +# CONFIG_PACKAGE_libupm-adxl335-node is not set +# CONFIG_PACKAGE_libupm-adxl335-python is not set +# CONFIG_PACKAGE_libupm-adxl335-python3 is not set +# CONFIG_PACKAGE_libupm-adxl345 is not set +# CONFIG_PACKAGE_libupm-adxl345-node is not set +# CONFIG_PACKAGE_libupm-adxl345-python is not set +# CONFIG_PACKAGE_libupm-adxl345-python3 is not set +# CONFIG_PACKAGE_libupm-adxrs610 is not set +# CONFIG_PACKAGE_libupm-adxrs610-node is not set +# CONFIG_PACKAGE_libupm-adxrs610-python is not set +# CONFIG_PACKAGE_libupm-adxrs610-python3 is not set +# CONFIG_PACKAGE_libupm-am2315 is not set +# CONFIG_PACKAGE_libupm-am2315-node is not set +# CONFIG_PACKAGE_libupm-am2315-python is not set +# CONFIG_PACKAGE_libupm-am2315-python3 is not set +# CONFIG_PACKAGE_libupm-apa102 is not set +# CONFIG_PACKAGE_libupm-apa102-node is not set +# CONFIG_PACKAGE_libupm-apa102-python is not set +# CONFIG_PACKAGE_libupm-apa102-python3 is not set +# CONFIG_PACKAGE_libupm-apds9002 is not set +# CONFIG_PACKAGE_libupm-apds9002-node is not set +# CONFIG_PACKAGE_libupm-apds9002-python is not set +# CONFIG_PACKAGE_libupm-apds9002-python3 is not set +# CONFIG_PACKAGE_libupm-apds9930 is not set +# CONFIG_PACKAGE_libupm-apds9930-node is not set +# CONFIG_PACKAGE_libupm-apds9930-python is not set +# CONFIG_PACKAGE_libupm-apds9930-python3 is not set +# CONFIG_PACKAGE_libupm-at42qt1070 is not set +# CONFIG_PACKAGE_libupm-at42qt1070-node is not set +# CONFIG_PACKAGE_libupm-at42qt1070-python is not set +# CONFIG_PACKAGE_libupm-at42qt1070-python3 is not set +# CONFIG_PACKAGE_libupm-bh1749 is not set +# CONFIG_PACKAGE_libupm-bh1749-node is not set +# CONFIG_PACKAGE_libupm-bh1749-python is not set +# CONFIG_PACKAGE_libupm-bh1749-python3 is not set +# CONFIG_PACKAGE_libupm-bh1750 is not set +# CONFIG_PACKAGE_libupm-bh1750-node is not set +# CONFIG_PACKAGE_libupm-bh1750-python is not set +# CONFIG_PACKAGE_libupm-bh1750-python3 is not set +# CONFIG_PACKAGE_libupm-bh1792 is not set +# CONFIG_PACKAGE_libupm-bh1792-node is not set +# CONFIG_PACKAGE_libupm-bh1792-python is not set +# CONFIG_PACKAGE_libupm-bh1792-python3 is not set +# CONFIG_PACKAGE_libupm-biss0001 is not set +# CONFIG_PACKAGE_libupm-biss0001-node is not set +# CONFIG_PACKAGE_libupm-biss0001-python is not set +# CONFIG_PACKAGE_libupm-biss0001-python3 is not set +# CONFIG_PACKAGE_libupm-bma220 is not set +# CONFIG_PACKAGE_libupm-bma220-node is not set +# CONFIG_PACKAGE_libupm-bma220-python is not set +# CONFIG_PACKAGE_libupm-bma220-python3 is not set +# CONFIG_PACKAGE_libupm-bma250e is not set +# CONFIG_PACKAGE_libupm-bma250e-node is not set +# CONFIG_PACKAGE_libupm-bma250e-python is not set +# CONFIG_PACKAGE_libupm-bma250e-python3 is not set +# CONFIG_PACKAGE_libupm-bmg160 is not set +# CONFIG_PACKAGE_libupm-bmg160-node is not set +# CONFIG_PACKAGE_libupm-bmg160-python is not set +# CONFIG_PACKAGE_libupm-bmg160-python3 is not set +# CONFIG_PACKAGE_libupm-bmi160 is not set +# CONFIG_PACKAGE_libupm-bmi160-node is not set +# CONFIG_PACKAGE_libupm-bmi160-python is not set +# CONFIG_PACKAGE_libupm-bmi160-python3 is not set +# CONFIG_PACKAGE_libupm-bmm150 is not set +# CONFIG_PACKAGE_libupm-bmm150-node is not set +# CONFIG_PACKAGE_libupm-bmm150-python is not set +# CONFIG_PACKAGE_libupm-bmm150-python3 is not set +# CONFIG_PACKAGE_libupm-bmp280 is not set +# CONFIG_PACKAGE_libupm-bmp280-node is not set +# CONFIG_PACKAGE_libupm-bmp280-python is not set +# CONFIG_PACKAGE_libupm-bmp280-python3 is not set +# CONFIG_PACKAGE_libupm-bmpx8x is not set +# CONFIG_PACKAGE_libupm-bmpx8x-node is not set +# CONFIG_PACKAGE_libupm-bmpx8x-python is not set +# CONFIG_PACKAGE_libupm-bmpx8x-python3 is not set +# CONFIG_PACKAGE_libupm-bmx055 is not set +# CONFIG_PACKAGE_libupm-bmx055-node is not set +# CONFIG_PACKAGE_libupm-bmx055-python is not set +# CONFIG_PACKAGE_libupm-bmx055-python3 is not set +# CONFIG_PACKAGE_libupm-bno055 is not set +# CONFIG_PACKAGE_libupm-bno055-node is not set +# CONFIG_PACKAGE_libupm-bno055-python is not set +# CONFIG_PACKAGE_libupm-bno055-python3 is not set +# CONFIG_PACKAGE_libupm-button is not set +# CONFIG_PACKAGE_libupm-button-node is not set +# CONFIG_PACKAGE_libupm-button-python is not set +# CONFIG_PACKAGE_libupm-button-python3 is not set +# CONFIG_PACKAGE_libupm-buzzer is not set +# CONFIG_PACKAGE_libupm-buzzer-node is not set +# CONFIG_PACKAGE_libupm-buzzer-python is not set +# CONFIG_PACKAGE_libupm-buzzer-python3 is not set +# CONFIG_PACKAGE_libupm-cjq4435 is not set +# CONFIG_PACKAGE_libupm-cjq4435-node is not set +# CONFIG_PACKAGE_libupm-cjq4435-python is not set +# CONFIG_PACKAGE_libupm-cjq4435-python3 is not set +# CONFIG_PACKAGE_libupm-collision is not set +# CONFIG_PACKAGE_libupm-collision-node is not set +# CONFIG_PACKAGE_libupm-collision-python is not set +# CONFIG_PACKAGE_libupm-collision-python3 is not set +# CONFIG_PACKAGE_libupm-curieimu is not set +# CONFIG_PACKAGE_libupm-curieimu-node is not set +# CONFIG_PACKAGE_libupm-curieimu-python is not set +# CONFIG_PACKAGE_libupm-curieimu-python3 is not set +# CONFIG_PACKAGE_libupm-cwlsxxa is not set +# CONFIG_PACKAGE_libupm-cwlsxxa-node is not set +# CONFIG_PACKAGE_libupm-cwlsxxa-python is not set +# CONFIG_PACKAGE_libupm-cwlsxxa-python3 is not set +# CONFIG_PACKAGE_libupm-dfrec is not set +# CONFIG_PACKAGE_libupm-dfrec-node is not set +# CONFIG_PACKAGE_libupm-dfrec-python is not set +# CONFIG_PACKAGE_libupm-dfrec-python3 is not set +# CONFIG_PACKAGE_libupm-dfrorp is not set +# CONFIG_PACKAGE_libupm-dfrorp-node is not set +# CONFIG_PACKAGE_libupm-dfrorp-python is not set +# CONFIG_PACKAGE_libupm-dfrorp-python3 is not set +# CONFIG_PACKAGE_libupm-dfrph is not set +# CONFIG_PACKAGE_libupm-dfrph-node is not set +# CONFIG_PACKAGE_libupm-dfrph-python is not set +# CONFIG_PACKAGE_libupm-dfrph-python3 is not set +# CONFIG_PACKAGE_libupm-ds1307 is not set +# CONFIG_PACKAGE_libupm-ds1307-node is not set +# CONFIG_PACKAGE_libupm-ds1307-python is not set +# CONFIG_PACKAGE_libupm-ds1307-python3 is not set +# CONFIG_PACKAGE_libupm-ds1808lc is not set +# CONFIG_PACKAGE_libupm-ds1808lc-node is not set +# CONFIG_PACKAGE_libupm-ds1808lc-python is not set +# CONFIG_PACKAGE_libupm-ds1808lc-python3 is not set +# CONFIG_PACKAGE_libupm-ds18b20 is not set +# CONFIG_PACKAGE_libupm-ds18b20-node is not set +# CONFIG_PACKAGE_libupm-ds18b20-python is not set +# CONFIG_PACKAGE_libupm-ds18b20-python3 is not set +# CONFIG_PACKAGE_libupm-ds2413 is not set +# CONFIG_PACKAGE_libupm-ds2413-node is not set +# CONFIG_PACKAGE_libupm-ds2413-python is not set +# CONFIG_PACKAGE_libupm-ds2413-python3 is not set +# CONFIG_PACKAGE_libupm-ecezo is not set +# CONFIG_PACKAGE_libupm-ecezo-node is not set +# CONFIG_PACKAGE_libupm-ecezo-python is not set +# CONFIG_PACKAGE_libupm-ecezo-python3 is not set +# CONFIG_PACKAGE_libupm-ecs1030 is not set +# CONFIG_PACKAGE_libupm-ecs1030-node is not set +# CONFIG_PACKAGE_libupm-ecs1030-python is not set +# CONFIG_PACKAGE_libupm-ecs1030-python3 is not set +# CONFIG_PACKAGE_libupm-ehr is not set +# CONFIG_PACKAGE_libupm-ehr-node is not set +# CONFIG_PACKAGE_libupm-ehr-python is not set +# CONFIG_PACKAGE_libupm-ehr-python3 is not set +# CONFIG_PACKAGE_libupm-eldriver is not set +# CONFIG_PACKAGE_libupm-eldriver-node is not set +# CONFIG_PACKAGE_libupm-eldriver-python is not set +# CONFIG_PACKAGE_libupm-eldriver-python3 is not set +# CONFIG_PACKAGE_libupm-electromagnet is not set +# CONFIG_PACKAGE_libupm-electromagnet-node is not set +# CONFIG_PACKAGE_libupm-electromagnet-python is not set +# CONFIG_PACKAGE_libupm-electromagnet-python3 is not set +# CONFIG_PACKAGE_libupm-emg is not set +# CONFIG_PACKAGE_libupm-emg-node is not set +# CONFIG_PACKAGE_libupm-emg-python is not set +# CONFIG_PACKAGE_libupm-emg-python3 is not set +# CONFIG_PACKAGE_libupm-enc03r is not set +# CONFIG_PACKAGE_libupm-enc03r-node is not set +# CONFIG_PACKAGE_libupm-enc03r-python is not set +# CONFIG_PACKAGE_libupm-enc03r-python3 is not set +# CONFIG_PACKAGE_libupm-flex is not set +# CONFIG_PACKAGE_libupm-flex-node is not set +# CONFIG_PACKAGE_libupm-flex-python is not set +# CONFIG_PACKAGE_libupm-flex-python3 is not set +# CONFIG_PACKAGE_libupm-gas is not set +# CONFIG_PACKAGE_libupm-gas-node is not set +# CONFIG_PACKAGE_libupm-gas-python is not set +# CONFIG_PACKAGE_libupm-gas-python3 is not set +# CONFIG_PACKAGE_libupm-gp2y0a is not set +# CONFIG_PACKAGE_libupm-gp2y0a-node is not set +# CONFIG_PACKAGE_libupm-gp2y0a-python is not set +# CONFIG_PACKAGE_libupm-gp2y0a-python3 is not set +# CONFIG_PACKAGE_libupm-gprs is not set +# CONFIG_PACKAGE_libupm-gprs-node is not set +# CONFIG_PACKAGE_libupm-gprs-python is not set +# CONFIG_PACKAGE_libupm-gprs-python3 is not set +# CONFIG_PACKAGE_libupm-grove is not set +# CONFIG_PACKAGE_libupm-grove-node is not set +# CONFIG_PACKAGE_libupm-grove-python is not set +# CONFIG_PACKAGE_libupm-grove-python3 is not set +# CONFIG_PACKAGE_libupm-grovecollision is not set +# CONFIG_PACKAGE_libupm-grovecollision-node is not set +# CONFIG_PACKAGE_libupm-grovecollision-python is not set +# CONFIG_PACKAGE_libupm-grovecollision-python3 is not set +# CONFIG_PACKAGE_libupm-groveehr is not set +# CONFIG_PACKAGE_libupm-groveehr-node is not set +# CONFIG_PACKAGE_libupm-groveehr-python is not set +# CONFIG_PACKAGE_libupm-groveehr-python3 is not set +# CONFIG_PACKAGE_libupm-groveeldriver is not set +# CONFIG_PACKAGE_libupm-groveeldriver-node is not set +# CONFIG_PACKAGE_libupm-groveeldriver-python is not set +# CONFIG_PACKAGE_libupm-groveeldriver-python3 is not set +# CONFIG_PACKAGE_libupm-groveelectromagnet is not set +# CONFIG_PACKAGE_libupm-groveelectromagnet-node is not set +# CONFIG_PACKAGE_libupm-groveelectromagnet-python is not set +# CONFIG_PACKAGE_libupm-groveelectromagnet-python3 is not set +# CONFIG_PACKAGE_libupm-groveemg is not set +# CONFIG_PACKAGE_libupm-groveemg-node is not set +# CONFIG_PACKAGE_libupm-groveemg-python is not set +# CONFIG_PACKAGE_libupm-groveemg-python3 is not set +# CONFIG_PACKAGE_libupm-grovegprs is not set +# CONFIG_PACKAGE_libupm-grovegprs-node is not set +# CONFIG_PACKAGE_libupm-grovegprs-python is not set +# CONFIG_PACKAGE_libupm-grovegprs-python3 is not set +# CONFIG_PACKAGE_libupm-grovegsr is not set +# CONFIG_PACKAGE_libupm-grovegsr-node is not set +# CONFIG_PACKAGE_libupm-grovegsr-python is not set +# CONFIG_PACKAGE_libupm-grovegsr-python3 is not set +# CONFIG_PACKAGE_libupm-grovelinefinder is not set +# CONFIG_PACKAGE_libupm-grovelinefinder-node is not set +# CONFIG_PACKAGE_libupm-grovelinefinder-python is not set +# CONFIG_PACKAGE_libupm-grovelinefinder-python3 is not set +# CONFIG_PACKAGE_libupm-grovemd is not set +# CONFIG_PACKAGE_libupm-grovemd-node is not set +# CONFIG_PACKAGE_libupm-grovemd-python is not set +# CONFIG_PACKAGE_libupm-grovemd-python3 is not set +# CONFIG_PACKAGE_libupm-grovemoisture is not set +# CONFIG_PACKAGE_libupm-grovemoisture-node is not set +# CONFIG_PACKAGE_libupm-grovemoisture-python is not set +# CONFIG_PACKAGE_libupm-grovemoisture-python3 is not set +# CONFIG_PACKAGE_libupm-groveo2 is not set +# CONFIG_PACKAGE_libupm-groveo2-node is not set +# CONFIG_PACKAGE_libupm-groveo2-python is not set +# CONFIG_PACKAGE_libupm-groveo2-python3 is not set +# CONFIG_PACKAGE_libupm-grovescam is not set +# CONFIG_PACKAGE_libupm-grovescam-node is not set +# CONFIG_PACKAGE_libupm-grovescam-python is not set +# CONFIG_PACKAGE_libupm-grovescam-python3 is not set +# CONFIG_PACKAGE_libupm-grovespeaker is not set +# CONFIG_PACKAGE_libupm-grovespeaker-node is not set +# CONFIG_PACKAGE_libupm-grovespeaker-python is not set +# CONFIG_PACKAGE_libupm-grovespeaker-python3 is not set +# CONFIG_PACKAGE_libupm-groveultrasonic is not set +# CONFIG_PACKAGE_libupm-groveultrasonic-node is not set +# CONFIG_PACKAGE_libupm-groveultrasonic-python is not set +# CONFIG_PACKAGE_libupm-groveultrasonic-python3 is not set +# CONFIG_PACKAGE_libupm-grovevdiv is not set +# CONFIG_PACKAGE_libupm-grovevdiv-node is not set +# CONFIG_PACKAGE_libupm-grovevdiv-python is not set +# CONFIG_PACKAGE_libupm-grovevdiv-python3 is not set +# CONFIG_PACKAGE_libupm-grovewater is not set +# CONFIG_PACKAGE_libupm-grovewater-node is not set +# CONFIG_PACKAGE_libupm-grovewater-python is not set +# CONFIG_PACKAGE_libupm-grovewater-python3 is not set +# CONFIG_PACKAGE_libupm-grovewfs is not set +# CONFIG_PACKAGE_libupm-grovewfs-node is not set +# CONFIG_PACKAGE_libupm-grovewfs-python is not set +# CONFIG_PACKAGE_libupm-grovewfs-python3 is not set +# CONFIG_PACKAGE_libupm-gsr is not set +# CONFIG_PACKAGE_libupm-gsr-node is not set +# CONFIG_PACKAGE_libupm-gsr-python is not set +# CONFIG_PACKAGE_libupm-gsr-python3 is not set +# CONFIG_PACKAGE_libupm-guvas12d is not set +# CONFIG_PACKAGE_libupm-guvas12d-node is not set +# CONFIG_PACKAGE_libupm-guvas12d-python is not set +# CONFIG_PACKAGE_libupm-guvas12d-python3 is not set +# CONFIG_PACKAGE_libupm-h3lis331dl is not set +# CONFIG_PACKAGE_libupm-h3lis331dl-node is not set +# CONFIG_PACKAGE_libupm-h3lis331dl-python is not set +# CONFIG_PACKAGE_libupm-h3lis331dl-python3 is not set +# CONFIG_PACKAGE_libupm-h803x is not set +# CONFIG_PACKAGE_libupm-h803x-node is not set +# CONFIG_PACKAGE_libupm-h803x-python is not set +# CONFIG_PACKAGE_libupm-h803x-python3 is not set +# CONFIG_PACKAGE_libupm-hcsr04 is not set +# CONFIG_PACKAGE_libupm-hcsr04-node is not set +# CONFIG_PACKAGE_libupm-hcsr04-python is not set +# CONFIG_PACKAGE_libupm-hcsr04-python3 is not set +# CONFIG_PACKAGE_libupm-hdc1000 is not set +# CONFIG_PACKAGE_libupm-hdc1000-node is not set +# CONFIG_PACKAGE_libupm-hdc1000-python is not set +# CONFIG_PACKAGE_libupm-hdc1000-python3 is not set +# CONFIG_PACKAGE_libupm-hdxxvxta is not set +# CONFIG_PACKAGE_libupm-hdxxvxta-node is not set +# CONFIG_PACKAGE_libupm-hdxxvxta-python is not set +# CONFIG_PACKAGE_libupm-hdxxvxta-python3 is not set +# CONFIG_PACKAGE_libupm-hka5 is not set +# CONFIG_PACKAGE_libupm-hka5-node is not set +# CONFIG_PACKAGE_libupm-hka5-python is not set +# CONFIG_PACKAGE_libupm-hka5-python3 is not set +# CONFIG_PACKAGE_libupm-hlg150h is not set +# CONFIG_PACKAGE_libupm-hlg150h-node is not set +# CONFIG_PACKAGE_libupm-hlg150h-python is not set +# CONFIG_PACKAGE_libupm-hlg150h-python3 is not set +# CONFIG_PACKAGE_libupm-hm11 is not set +# CONFIG_PACKAGE_libupm-hm11-node is not set +# CONFIG_PACKAGE_libupm-hm11-python is not set +# CONFIG_PACKAGE_libupm-hm11-python3 is not set +# CONFIG_PACKAGE_libupm-hmc5883l is not set +# CONFIG_PACKAGE_libupm-hmc5883l-node is not set +# CONFIG_PACKAGE_libupm-hmc5883l-python is not set +# CONFIG_PACKAGE_libupm-hmc5883l-python3 is not set +# CONFIG_PACKAGE_libupm-hmtrp is not set +# CONFIG_PACKAGE_libupm-hmtrp-node is not set +# CONFIG_PACKAGE_libupm-hmtrp-python is not set +# CONFIG_PACKAGE_libupm-hmtrp-python3 is not set +# CONFIG_PACKAGE_libupm-hp20x is not set +# CONFIG_PACKAGE_libupm-hp20x-node is not set +# CONFIG_PACKAGE_libupm-hp20x-python is not set +# CONFIG_PACKAGE_libupm-hp20x-python3 is not set +# CONFIG_PACKAGE_libupm-ht9170 is not set +# CONFIG_PACKAGE_libupm-ht9170-node is not set +# CONFIG_PACKAGE_libupm-ht9170-python is not set +# CONFIG_PACKAGE_libupm-ht9170-python3 is not set +# CONFIG_PACKAGE_libupm-htu21d is not set +# CONFIG_PACKAGE_libupm-htu21d-node is not set +# CONFIG_PACKAGE_libupm-htu21d-python is not set +# CONFIG_PACKAGE_libupm-htu21d-python3 is not set +# CONFIG_PACKAGE_libupm-hwxpxx is not set +# CONFIG_PACKAGE_libupm-hwxpxx-node is not set +# CONFIG_PACKAGE_libupm-hwxpxx-python is not set +# CONFIG_PACKAGE_libupm-hwxpxx-python3 is not set +# CONFIG_PACKAGE_libupm-hx711 is not set +# CONFIG_PACKAGE_libupm-hx711-node is not set +# CONFIG_PACKAGE_libupm-hx711-python is not set +# CONFIG_PACKAGE_libupm-hx711-python3 is not set +# CONFIG_PACKAGE_libupm-ili9341 is not set +# CONFIG_PACKAGE_libupm-ili9341-node is not set +# CONFIG_PACKAGE_libupm-ili9341-python is not set +# CONFIG_PACKAGE_libupm-ili9341-python3 is not set +# CONFIG_PACKAGE_libupm-ims is not set +# CONFIG_PACKAGE_libupm-ims-node is not set +# CONFIG_PACKAGE_libupm-ims-python is not set +# CONFIG_PACKAGE_libupm-ims-python3 is not set +# CONFIG_PACKAGE_libupm-ina132 is not set +# CONFIG_PACKAGE_libupm-ina132-node is not set +# CONFIG_PACKAGE_libupm-ina132-python is not set +# CONFIG_PACKAGE_libupm-ina132-python3 is not set +# CONFIG_PACKAGE_libupm-interfaces is not set +# CONFIG_PACKAGE_libupm-interfaces-node is not set +# CONFIG_PACKAGE_libupm-interfaces-python is not set +# CONFIG_PACKAGE_libupm-interfaces-python3 is not set +# CONFIG_PACKAGE_libupm-isd1820 is not set +# CONFIG_PACKAGE_libupm-isd1820-node is not set +# CONFIG_PACKAGE_libupm-isd1820-python is not set +# CONFIG_PACKAGE_libupm-isd1820-python3 is not set +# CONFIG_PACKAGE_libupm-itg3200 is not set +# CONFIG_PACKAGE_libupm-itg3200-node is not set +# CONFIG_PACKAGE_libupm-itg3200-python is not set +# CONFIG_PACKAGE_libupm-itg3200-python3 is not set +# CONFIG_PACKAGE_libupm-jhd1313m1 is not set +# CONFIG_PACKAGE_libupm-jhd1313m1-node is not set +# CONFIG_PACKAGE_libupm-jhd1313m1-python is not set +# CONFIG_PACKAGE_libupm-jhd1313m1-python3 is not set +# CONFIG_PACKAGE_libupm-joystick12 is not set +# CONFIG_PACKAGE_libupm-joystick12-node is not set +# CONFIG_PACKAGE_libupm-joystick12-python is not set +# CONFIG_PACKAGE_libupm-joystick12-python3 is not set +# CONFIG_PACKAGE_libupm-kx122 is not set +# CONFIG_PACKAGE_libupm-kx122-node is not set +# CONFIG_PACKAGE_libupm-kx122-python is not set +# CONFIG_PACKAGE_libupm-kx122-python3 is not set +# CONFIG_PACKAGE_libupm-kxcjk1013 is not set +# CONFIG_PACKAGE_libupm-kxcjk1013-node is not set +# CONFIG_PACKAGE_libupm-kxcjk1013-python is not set +# CONFIG_PACKAGE_libupm-kxcjk1013-python3 is not set +# CONFIG_PACKAGE_libupm-kxtj3 is not set +# CONFIG_PACKAGE_libupm-kxtj3-node is not set +# CONFIG_PACKAGE_libupm-kxtj3-python is not set +# CONFIG_PACKAGE_libupm-kxtj3-python3 is not set +# CONFIG_PACKAGE_libupm-l298 is not set +# CONFIG_PACKAGE_libupm-l298-node is not set +# CONFIG_PACKAGE_libupm-l298-python is not set +# CONFIG_PACKAGE_libupm-l298-python3 is not set +# CONFIG_PACKAGE_libupm-l3gd20 is not set +# CONFIG_PACKAGE_libupm-l3gd20-node is not set +# CONFIG_PACKAGE_libupm-l3gd20-python is not set +# CONFIG_PACKAGE_libupm-l3gd20-python3 is not set +# CONFIG_PACKAGE_libupm-lcd is not set +# CONFIG_PACKAGE_libupm-lcd-node is not set +# CONFIG_PACKAGE_libupm-lcd-python is not set +# CONFIG_PACKAGE_libupm-lcd-python3 is not set +# CONFIG_PACKAGE_libupm-lcdks is not set +# CONFIG_PACKAGE_libupm-lcdks-node is not set +# CONFIG_PACKAGE_libupm-lcdks-python is not set +# CONFIG_PACKAGE_libupm-lcdks-python3 is not set +# CONFIG_PACKAGE_libupm-lcm1602 is not set +# CONFIG_PACKAGE_libupm-lcm1602-node is not set +# CONFIG_PACKAGE_libupm-lcm1602-python is not set +# CONFIG_PACKAGE_libupm-lcm1602-python3 is not set +# CONFIG_PACKAGE_libupm-ldt0028 is not set +# CONFIG_PACKAGE_libupm-ldt0028-node is not set +# CONFIG_PACKAGE_libupm-ldt0028-python is not set +# CONFIG_PACKAGE_libupm-ldt0028-python3 is not set +# CONFIG_PACKAGE_libupm-led is not set +# CONFIG_PACKAGE_libupm-led-node is not set +# CONFIG_PACKAGE_libupm-led-python is not set +# CONFIG_PACKAGE_libupm-led-python3 is not set +# CONFIG_PACKAGE_libupm-lidarlitev3 is not set +# CONFIG_PACKAGE_libupm-lidarlitev3-node is not set +# CONFIG_PACKAGE_libupm-lidarlitev3-python is not set +# CONFIG_PACKAGE_libupm-lidarlitev3-python3 is not set +# CONFIG_PACKAGE_libupm-light is not set +# CONFIG_PACKAGE_libupm-light-node is not set +# CONFIG_PACKAGE_libupm-light-python is not set +# CONFIG_PACKAGE_libupm-light-python3 is not set +# CONFIG_PACKAGE_libupm-linefinder is not set +# CONFIG_PACKAGE_libupm-linefinder-node is not set +# CONFIG_PACKAGE_libupm-linefinder-python is not set +# CONFIG_PACKAGE_libupm-linefinder-python3 is not set +# CONFIG_PACKAGE_libupm-lis2ds12 is not set +# CONFIG_PACKAGE_libupm-lis2ds12-node is not set +# CONFIG_PACKAGE_libupm-lis2ds12-python is not set +# CONFIG_PACKAGE_libupm-lis2ds12-python3 is not set +# CONFIG_PACKAGE_libupm-lis3dh is not set +# CONFIG_PACKAGE_libupm-lis3dh-node is not set +# CONFIG_PACKAGE_libupm-lis3dh-python is not set +# CONFIG_PACKAGE_libupm-lis3dh-python3 is not set +# CONFIG_PACKAGE_libupm-lm35 is not set +# CONFIG_PACKAGE_libupm-lm35-node is not set +# CONFIG_PACKAGE_libupm-lm35-python is not set +# CONFIG_PACKAGE_libupm-lm35-python3 is not set +# CONFIG_PACKAGE_libupm-lol is not set +# CONFIG_PACKAGE_libupm-lol-node is not set +# CONFIG_PACKAGE_libupm-lol-python is not set +# CONFIG_PACKAGE_libupm-lol-python3 is not set +# CONFIG_PACKAGE_libupm-loudness is not set +# CONFIG_PACKAGE_libupm-loudness-node is not set +# CONFIG_PACKAGE_libupm-loudness-python is not set +# CONFIG_PACKAGE_libupm-loudness-python3 is not set +# CONFIG_PACKAGE_libupm-lp8860 is not set +# CONFIG_PACKAGE_libupm-lp8860-node is not set +# CONFIG_PACKAGE_libupm-lp8860-python is not set +# CONFIG_PACKAGE_libupm-lp8860-python3 is not set +# CONFIG_PACKAGE_libupm-lpd8806 is not set +# CONFIG_PACKAGE_libupm-lpd8806-node is not set +# CONFIG_PACKAGE_libupm-lpd8806-python is not set +# CONFIG_PACKAGE_libupm-lpd8806-python3 is not set +# CONFIG_PACKAGE_libupm-lsm303agr is not set +# CONFIG_PACKAGE_libupm-lsm303agr-node is not set +# CONFIG_PACKAGE_libupm-lsm303agr-python is not set +# CONFIG_PACKAGE_libupm-lsm303agr-python3 is not set +# CONFIG_PACKAGE_libupm-lsm303d is not set +# CONFIG_PACKAGE_libupm-lsm303d-node is not set +# CONFIG_PACKAGE_libupm-lsm303d-python is not set +# CONFIG_PACKAGE_libupm-lsm303d-python3 is not set +# CONFIG_PACKAGE_libupm-lsm303dlh is not set +# CONFIG_PACKAGE_libupm-lsm303dlh-node is not set +# CONFIG_PACKAGE_libupm-lsm303dlh-python is not set +# CONFIG_PACKAGE_libupm-lsm303dlh-python3 is not set +# CONFIG_PACKAGE_libupm-lsm6ds3h is not set +# CONFIG_PACKAGE_libupm-lsm6ds3h-node is not set +# CONFIG_PACKAGE_libupm-lsm6ds3h-python is not set +# CONFIG_PACKAGE_libupm-lsm6ds3h-python3 is not set +# CONFIG_PACKAGE_libupm-lsm6dsl is not set +# CONFIG_PACKAGE_libupm-lsm6dsl-node is not set +# CONFIG_PACKAGE_libupm-lsm6dsl-python is not set +# CONFIG_PACKAGE_libupm-lsm6dsl-python3 is not set +# CONFIG_PACKAGE_libupm-lsm9ds0 is not set +# CONFIG_PACKAGE_libupm-lsm9ds0-node is not set +# CONFIG_PACKAGE_libupm-lsm9ds0-python is not set +# CONFIG_PACKAGE_libupm-lsm9ds0-python3 is not set +# CONFIG_PACKAGE_libupm-m24lr64e is not set +# CONFIG_PACKAGE_libupm-m24lr64e-node is not set +# CONFIG_PACKAGE_libupm-m24lr64e-python is not set +# CONFIG_PACKAGE_libupm-m24lr64e-python3 is not set +# CONFIG_PACKAGE_libupm-mag3110 is not set +# CONFIG_PACKAGE_libupm-mag3110-node is not set +# CONFIG_PACKAGE_libupm-mag3110-python is not set +# CONFIG_PACKAGE_libupm-mag3110-python3 is not set +# CONFIG_PACKAGE_libupm-max30100 is not set +# CONFIG_PACKAGE_libupm-max30100-node is not set +# CONFIG_PACKAGE_libupm-max30100-python is not set +# CONFIG_PACKAGE_libupm-max30100-python3 is not set +# CONFIG_PACKAGE_libupm-max31723 is not set +# CONFIG_PACKAGE_libupm-max31723-node is not set +# CONFIG_PACKAGE_libupm-max31723-python is not set +# CONFIG_PACKAGE_libupm-max31723-python3 is not set +# CONFIG_PACKAGE_libupm-max31855 is not set +# CONFIG_PACKAGE_libupm-max31855-node is not set +# CONFIG_PACKAGE_libupm-max31855-python is not set +# CONFIG_PACKAGE_libupm-max31855-python3 is not set +# CONFIG_PACKAGE_libupm-max44000 is not set +# CONFIG_PACKAGE_libupm-max44000-node is not set +# CONFIG_PACKAGE_libupm-max44000-python is not set +# CONFIG_PACKAGE_libupm-max44000-python3 is not set +# CONFIG_PACKAGE_libupm-max44009 is not set +# CONFIG_PACKAGE_libupm-max44009-node is not set +# CONFIG_PACKAGE_libupm-max44009-python is not set +# CONFIG_PACKAGE_libupm-max44009-python3 is not set +# CONFIG_PACKAGE_libupm-max5487 is not set +# CONFIG_PACKAGE_libupm-max5487-node is not set +# CONFIG_PACKAGE_libupm-max5487-python is not set +# CONFIG_PACKAGE_libupm-max5487-python3 is not set +# CONFIG_PACKAGE_libupm-maxds3231m is not set +# CONFIG_PACKAGE_libupm-maxds3231m-node is not set +# CONFIG_PACKAGE_libupm-maxds3231m-python is not set +# CONFIG_PACKAGE_libupm-maxds3231m-python3 is not set +# CONFIG_PACKAGE_libupm-maxsonarez is not set +# CONFIG_PACKAGE_libupm-maxsonarez-node is not set +# CONFIG_PACKAGE_libupm-maxsonarez-python is not set +# CONFIG_PACKAGE_libupm-maxsonarez-python3 is not set +# CONFIG_PACKAGE_libupm-mb704x is not set +# CONFIG_PACKAGE_libupm-mb704x-node is not set +# CONFIG_PACKAGE_libupm-mb704x-python is not set +# CONFIG_PACKAGE_libupm-mb704x-python3 is not set +# CONFIG_PACKAGE_libupm-mcp2515 is not set +# CONFIG_PACKAGE_libupm-mcp2515-node is not set +# CONFIG_PACKAGE_libupm-mcp2515-python is not set +# CONFIG_PACKAGE_libupm-mcp2515-python3 is not set +# CONFIG_PACKAGE_libupm-mcp9808 is not set +# CONFIG_PACKAGE_libupm-mcp9808-node is not set +# CONFIG_PACKAGE_libupm-mcp9808-python is not set +# CONFIG_PACKAGE_libupm-mcp9808-python3 is not set +# CONFIG_PACKAGE_libupm-md is not set +# CONFIG_PACKAGE_libupm-md-node is not set +# CONFIG_PACKAGE_libupm-md-python is not set +# CONFIG_PACKAGE_libupm-md-python3 is not set +# CONFIG_PACKAGE_libupm-mg811 is not set +# CONFIG_PACKAGE_libupm-mg811-node is not set +# CONFIG_PACKAGE_libupm-mg811-python is not set +# CONFIG_PACKAGE_libupm-mg811-python3 is not set +# CONFIG_PACKAGE_libupm-mhz16 is not set +# CONFIG_PACKAGE_libupm-mhz16-node is not set +# CONFIG_PACKAGE_libupm-mhz16-python is not set +# CONFIG_PACKAGE_libupm-mhz16-python3 is not set +# CONFIG_PACKAGE_libupm-mic is not set +# CONFIG_PACKAGE_libupm-mic-node is not set +# CONFIG_PACKAGE_libupm-mic-python is not set +# CONFIG_PACKAGE_libupm-mic-python3 is not set +# CONFIG_PACKAGE_libupm-micsv89 is not set +# CONFIG_PACKAGE_libupm-micsv89-node is not set +# CONFIG_PACKAGE_libupm-micsv89-python is not set +# CONFIG_PACKAGE_libupm-micsv89-python3 is not set +# CONFIG_PACKAGE_libupm-mlx90614 is not set +# CONFIG_PACKAGE_libupm-mlx90614-node is not set +# CONFIG_PACKAGE_libupm-mlx90614-python is not set +# CONFIG_PACKAGE_libupm-mlx90614-python3 is not set +# CONFIG_PACKAGE_libupm-mma7361 is not set +# CONFIG_PACKAGE_libupm-mma7361-node is not set +# CONFIG_PACKAGE_libupm-mma7361-python is not set +# CONFIG_PACKAGE_libupm-mma7361-python3 is not set +# CONFIG_PACKAGE_libupm-mma7455 is not set +# CONFIG_PACKAGE_libupm-mma7455-node is not set +# CONFIG_PACKAGE_libupm-mma7455-python is not set +# CONFIG_PACKAGE_libupm-mma7455-python3 is not set +# CONFIG_PACKAGE_libupm-mma7660 is not set +# CONFIG_PACKAGE_libupm-mma7660-node is not set +# CONFIG_PACKAGE_libupm-mma7660-python is not set +# CONFIG_PACKAGE_libupm-mma7660-python3 is not set +# CONFIG_PACKAGE_libupm-mma8x5x is not set +# CONFIG_PACKAGE_libupm-mma8x5x-node is not set +# CONFIG_PACKAGE_libupm-mma8x5x-python is not set +# CONFIG_PACKAGE_libupm-mma8x5x-python3 is not set +# CONFIG_PACKAGE_libupm-mmc35240 is not set +# CONFIG_PACKAGE_libupm-mmc35240-node is not set +# CONFIG_PACKAGE_libupm-mmc35240-python is not set +# CONFIG_PACKAGE_libupm-mmc35240-python3 is not set +# CONFIG_PACKAGE_libupm-moisture is not set +# CONFIG_PACKAGE_libupm-moisture-node is not set +# CONFIG_PACKAGE_libupm-moisture-python is not set +# CONFIG_PACKAGE_libupm-moisture-python3 is not set +# CONFIG_PACKAGE_libupm-mpl3115a2 is not set +# CONFIG_PACKAGE_libupm-mpl3115a2-node is not set +# CONFIG_PACKAGE_libupm-mpl3115a2-python is not set +# CONFIG_PACKAGE_libupm-mpl3115a2-python3 is not set +# CONFIG_PACKAGE_libupm-mpr121 is not set +# CONFIG_PACKAGE_libupm-mpr121-node is not set +# CONFIG_PACKAGE_libupm-mpr121-python is not set +# CONFIG_PACKAGE_libupm-mpr121-python3 is not set +# CONFIG_PACKAGE_libupm-mpu9150 is not set +# CONFIG_PACKAGE_libupm-mpu9150-node is not set +# CONFIG_PACKAGE_libupm-mpu9150-python is not set +# CONFIG_PACKAGE_libupm-mpu9150-python3 is not set +# CONFIG_PACKAGE_libupm-mq303a is not set +# CONFIG_PACKAGE_libupm-mq303a-node is not set +# CONFIG_PACKAGE_libupm-mq303a-python is not set +# CONFIG_PACKAGE_libupm-mq303a-python3 is not set +# CONFIG_PACKAGE_libupm-ms5611 is not set +# CONFIG_PACKAGE_libupm-ms5611-node is not set +# CONFIG_PACKAGE_libupm-ms5611-python is not set +# CONFIG_PACKAGE_libupm-ms5611-python3 is not set +# CONFIG_PACKAGE_libupm-ms5803 is not set +# CONFIG_PACKAGE_libupm-ms5803-node is not set +# CONFIG_PACKAGE_libupm-ms5803-python is not set +# CONFIG_PACKAGE_libupm-ms5803-python3 is not set +# CONFIG_PACKAGE_libupm-my9221 is not set +# CONFIG_PACKAGE_libupm-my9221-node is not set +# CONFIG_PACKAGE_libupm-my9221-python is not set +# CONFIG_PACKAGE_libupm-my9221-python3 is not set +# CONFIG_PACKAGE_libupm-nlgpio16 is not set +# CONFIG_PACKAGE_libupm-nlgpio16-node is not set +# CONFIG_PACKAGE_libupm-nlgpio16-python is not set +# CONFIG_PACKAGE_libupm-nlgpio16-python3 is not set +# CONFIG_PACKAGE_libupm-nmea_gps is not set +# CONFIG_PACKAGE_libupm-nmea_gps-node is not set +# CONFIG_PACKAGE_libupm-nmea_gps-python is not set +# CONFIG_PACKAGE_libupm-nmea_gps-python3 is not set +# CONFIG_PACKAGE_libupm-nrf24l01 is not set +# CONFIG_PACKAGE_libupm-nrf24l01-node is not set +# CONFIG_PACKAGE_libupm-nrf24l01-python is not set +# CONFIG_PACKAGE_libupm-nrf24l01-python3 is not set +# CONFIG_PACKAGE_libupm-nrf8001 is not set +# CONFIG_PACKAGE_libupm-nrf8001-node is not set +# CONFIG_PACKAGE_libupm-nrf8001-python is not set +# CONFIG_PACKAGE_libupm-nrf8001-python3 is not set +# CONFIG_PACKAGE_libupm-nunchuck is not set +# CONFIG_PACKAGE_libupm-nunchuck-node is not set +# CONFIG_PACKAGE_libupm-nunchuck-python is not set +# CONFIG_PACKAGE_libupm-nunchuck-python3 is not set +# CONFIG_PACKAGE_libupm-o2 is not set +# CONFIG_PACKAGE_libupm-o2-node is not set +# CONFIG_PACKAGE_libupm-o2-python is not set +# CONFIG_PACKAGE_libupm-o2-python3 is not set +# CONFIG_PACKAGE_libupm-otp538u is not set +# CONFIG_PACKAGE_libupm-otp538u-node is not set +# CONFIG_PACKAGE_libupm-otp538u-python is not set +# CONFIG_PACKAGE_libupm-otp538u-python3 is not set +# CONFIG_PACKAGE_libupm-ozw is not set +# CONFIG_PACKAGE_libupm-ozw-node is not set +# CONFIG_PACKAGE_libupm-ozw-python is not set +# CONFIG_PACKAGE_libupm-ozw-python3 is not set +# CONFIG_PACKAGE_libupm-p9813 is not set +# CONFIG_PACKAGE_libupm-p9813-node is not set +# CONFIG_PACKAGE_libupm-p9813-python is not set +# CONFIG_PACKAGE_libupm-p9813-python3 is not set +# CONFIG_PACKAGE_libupm-pca9685 is not set +# CONFIG_PACKAGE_libupm-pca9685-node is not set +# CONFIG_PACKAGE_libupm-pca9685-python is not set +# CONFIG_PACKAGE_libupm-pca9685-python3 is not set +# CONFIG_PACKAGE_libupm-pn532 is not set +# CONFIG_PACKAGE_libupm-pn532-node is not set +# CONFIG_PACKAGE_libupm-pn532-python is not set +# CONFIG_PACKAGE_libupm-pn532-python3 is not set +# CONFIG_PACKAGE_libupm-ppd42ns is not set +# CONFIG_PACKAGE_libupm-ppd42ns-node is not set +# CONFIG_PACKAGE_libupm-ppd42ns-python is not set +# CONFIG_PACKAGE_libupm-ppd42ns-python3 is not set +# CONFIG_PACKAGE_libupm-pulsensor is not set +# CONFIG_PACKAGE_libupm-pulsensor-node is not set +# CONFIG_PACKAGE_libupm-pulsensor-python is not set +# CONFIG_PACKAGE_libupm-pulsensor-python3 is not set +# CONFIG_PACKAGE_libupm-relay is not set +# CONFIG_PACKAGE_libupm-relay-node is not set +# CONFIG_PACKAGE_libupm-relay-python is not set +# CONFIG_PACKAGE_libupm-relay-python3 is not set +# CONFIG_PACKAGE_libupm-rf22 is not set +# CONFIG_PACKAGE_libupm-rf22-node is not set +# CONFIG_PACKAGE_libupm-rf22-python is not set +# CONFIG_PACKAGE_libupm-rf22-python3 is not set +# CONFIG_PACKAGE_libupm-rfr359f is not set +# CONFIG_PACKAGE_libupm-rfr359f-node is not set +# CONFIG_PACKAGE_libupm-rfr359f-python is not set +# CONFIG_PACKAGE_libupm-rfr359f-python3 is not set +# CONFIG_PACKAGE_libupm-rgbringcoder is not set +# CONFIG_PACKAGE_libupm-rgbringcoder-node is not set +# CONFIG_PACKAGE_libupm-rgbringcoder-python is not set +# CONFIG_PACKAGE_libupm-rgbringcoder-python3 is not set +# CONFIG_PACKAGE_libupm-rhusb is not set +# CONFIG_PACKAGE_libupm-rhusb-node is not set +# CONFIG_PACKAGE_libupm-rhusb-python is not set +# CONFIG_PACKAGE_libupm-rhusb-python3 is not set +# CONFIG_PACKAGE_libupm-rn2903 is not set +# CONFIG_PACKAGE_libupm-rn2903-node is not set +# CONFIG_PACKAGE_libupm-rn2903-python is not set +# CONFIG_PACKAGE_libupm-rn2903-python3 is not set +# CONFIG_PACKAGE_libupm-rotary is not set +# CONFIG_PACKAGE_libupm-rotary-node is not set +# CONFIG_PACKAGE_libupm-rotary-python is not set +# CONFIG_PACKAGE_libupm-rotary-python3 is not set +# CONFIG_PACKAGE_libupm-rotaryencoder is not set +# CONFIG_PACKAGE_libupm-rotaryencoder-node is not set +# CONFIG_PACKAGE_libupm-rotaryencoder-python is not set +# CONFIG_PACKAGE_libupm-rotaryencoder-python3 is not set +# CONFIG_PACKAGE_libupm-rpr220 is not set +# CONFIG_PACKAGE_libupm-rpr220-node is not set +# CONFIG_PACKAGE_libupm-rpr220-python is not set +# CONFIG_PACKAGE_libupm-rpr220-python3 is not set +# CONFIG_PACKAGE_libupm-rsc is not set +# CONFIG_PACKAGE_libupm-rsc-node is not set +# CONFIG_PACKAGE_libupm-rsc-python is not set +# CONFIG_PACKAGE_libupm-rsc-python3 is not set +# CONFIG_PACKAGE_libupm-scam is not set +# CONFIG_PACKAGE_libupm-scam-node is not set +# CONFIG_PACKAGE_libupm-scam-python is not set +# CONFIG_PACKAGE_libupm-scam-python3 is not set +# CONFIG_PACKAGE_libupm-sensortemplate is not set +# CONFIG_PACKAGE_libupm-sensortemplate-node is not set +# CONFIG_PACKAGE_libupm-sensortemplate-python is not set +# CONFIG_PACKAGE_libupm-sensortemplate-python3 is not set +# CONFIG_PACKAGE_libupm-servo is not set +# CONFIG_PACKAGE_libupm-servo-node is not set +# CONFIG_PACKAGE_libupm-servo-python is not set +# CONFIG_PACKAGE_libupm-servo-python3 is not set +# CONFIG_PACKAGE_libupm-sht1x is not set +# CONFIG_PACKAGE_libupm-sht1x-node is not set +# CONFIG_PACKAGE_libupm-sht1x-python is not set +# CONFIG_PACKAGE_libupm-sht1x-python3 is not set +# CONFIG_PACKAGE_libupm-si1132 is not set +# CONFIG_PACKAGE_libupm-si1132-node is not set +# CONFIG_PACKAGE_libupm-si1132-python is not set +# CONFIG_PACKAGE_libupm-si1132-python3 is not set +# CONFIG_PACKAGE_libupm-si114x is not set +# CONFIG_PACKAGE_libupm-si114x-node is not set +# CONFIG_PACKAGE_libupm-si114x-python is not set +# CONFIG_PACKAGE_libupm-si114x-python3 is not set +# CONFIG_PACKAGE_libupm-si7005 is not set +# CONFIG_PACKAGE_libupm-si7005-node is not set +# CONFIG_PACKAGE_libupm-si7005-python is not set +# CONFIG_PACKAGE_libupm-si7005-python3 is not set +# CONFIG_PACKAGE_libupm-slide is not set +# CONFIG_PACKAGE_libupm-slide-node is not set +# CONFIG_PACKAGE_libupm-slide-python is not set +# CONFIG_PACKAGE_libupm-slide-python3 is not set +# CONFIG_PACKAGE_libupm-sm130 is not set +# CONFIG_PACKAGE_libupm-sm130-node is not set +# CONFIG_PACKAGE_libupm-sm130-python is not set +# CONFIG_PACKAGE_libupm-sm130-python3 is not set +# CONFIG_PACKAGE_libupm-smartdrive is not set +# CONFIG_PACKAGE_libupm-smartdrive-node is not set +# CONFIG_PACKAGE_libupm-smartdrive-python is not set +# CONFIG_PACKAGE_libupm-smartdrive-python3 is not set +# CONFIG_PACKAGE_libupm-speaker is not set +# CONFIG_PACKAGE_libupm-speaker-node is not set +# CONFIG_PACKAGE_libupm-speaker-python is not set +# CONFIG_PACKAGE_libupm-speaker-python3 is not set +# CONFIG_PACKAGE_libupm-ssd1351 is not set +# CONFIG_PACKAGE_libupm-ssd1351-node is not set +# CONFIG_PACKAGE_libupm-ssd1351-python is not set +# CONFIG_PACKAGE_libupm-ssd1351-python3 is not set +# CONFIG_PACKAGE_libupm-st7735 is not set +# CONFIG_PACKAGE_libupm-st7735-node is not set +# CONFIG_PACKAGE_libupm-st7735-python is not set +# CONFIG_PACKAGE_libupm-st7735-python3 is not set +# CONFIG_PACKAGE_libupm-stepmotor is not set +# CONFIG_PACKAGE_libupm-stepmotor-node is not set +# CONFIG_PACKAGE_libupm-stepmotor-python is not set +# CONFIG_PACKAGE_libupm-stepmotor-python3 is not set +# CONFIG_PACKAGE_libupm-sx1276 is not set +# CONFIG_PACKAGE_libupm-sx1276-node is not set +# CONFIG_PACKAGE_libupm-sx1276-python is not set +# CONFIG_PACKAGE_libupm-sx1276-python3 is not set +# CONFIG_PACKAGE_libupm-sx6119 is not set +# CONFIG_PACKAGE_libupm-sx6119-node is not set +# CONFIG_PACKAGE_libupm-sx6119-python is not set +# CONFIG_PACKAGE_libupm-sx6119-python3 is not set +# CONFIG_PACKAGE_libupm-t3311 is not set +# CONFIG_PACKAGE_libupm-t3311-node is not set +# CONFIG_PACKAGE_libupm-t3311-python is not set +# CONFIG_PACKAGE_libupm-t3311-python3 is not set +# CONFIG_PACKAGE_libupm-t6713 is not set +# CONFIG_PACKAGE_libupm-t6713-node is not set +# CONFIG_PACKAGE_libupm-t6713-python is not set +# CONFIG_PACKAGE_libupm-t6713-python3 is not set +# CONFIG_PACKAGE_libupm-ta12200 is not set +# CONFIG_PACKAGE_libupm-ta12200-node is not set +# CONFIG_PACKAGE_libupm-ta12200-python is not set +# CONFIG_PACKAGE_libupm-ta12200-python3 is not set +# CONFIG_PACKAGE_libupm-tca9548a is not set +# CONFIG_PACKAGE_libupm-tca9548a-node is not set +# CONFIG_PACKAGE_libupm-tca9548a-python is not set +# CONFIG_PACKAGE_libupm-tca9548a-python3 is not set +# CONFIG_PACKAGE_libupm-tcs3414cs is not set +# CONFIG_PACKAGE_libupm-tcs3414cs-node is not set +# CONFIG_PACKAGE_libupm-tcs3414cs-python is not set +# CONFIG_PACKAGE_libupm-tcs3414cs-python3 is not set +# CONFIG_PACKAGE_libupm-tcs37727 is not set +# CONFIG_PACKAGE_libupm-tcs37727-node is not set +# CONFIG_PACKAGE_libupm-tcs37727-python is not set +# CONFIG_PACKAGE_libupm-tcs37727-python3 is not set +# CONFIG_PACKAGE_libupm-teams is not set +# CONFIG_PACKAGE_libupm-teams-node is not set +# CONFIG_PACKAGE_libupm-teams-python is not set +# CONFIG_PACKAGE_libupm-teams-python3 is not set +# CONFIG_PACKAGE_libupm-temperature is not set +# CONFIG_PACKAGE_libupm-temperature-node is not set +# CONFIG_PACKAGE_libupm-temperature-python is not set +# CONFIG_PACKAGE_libupm-temperature-python3 is not set +# CONFIG_PACKAGE_libupm-tex00 is not set +# CONFIG_PACKAGE_libupm-tex00-node is not set +# CONFIG_PACKAGE_libupm-tex00-python is not set +# CONFIG_PACKAGE_libupm-tex00-python3 is not set +# CONFIG_PACKAGE_libupm-th02 is not set +# CONFIG_PACKAGE_libupm-th02-node is not set +# CONFIG_PACKAGE_libupm-th02-python is not set +# CONFIG_PACKAGE_libupm-th02-python3 is not set +# CONFIG_PACKAGE_libupm-tm1637 is not set +# CONFIG_PACKAGE_libupm-tm1637-node is not set +# CONFIG_PACKAGE_libupm-tm1637-python is not set +# CONFIG_PACKAGE_libupm-tm1637-python3 is not set +# CONFIG_PACKAGE_libupm-tmp006 is not set +# CONFIG_PACKAGE_libupm-tmp006-node is not set +# CONFIG_PACKAGE_libupm-tmp006-python is not set +# CONFIG_PACKAGE_libupm-tmp006-python3 is not set +# CONFIG_PACKAGE_libupm-tsl2561 is not set +# CONFIG_PACKAGE_libupm-tsl2561-node is not set +# CONFIG_PACKAGE_libupm-tsl2561-python is not set +# CONFIG_PACKAGE_libupm-tsl2561-python3 is not set +# CONFIG_PACKAGE_libupm-ttp223 is not set +# CONFIG_PACKAGE_libupm-ttp223-node is not set +# CONFIG_PACKAGE_libupm-ttp223-python is not set +# CONFIG_PACKAGE_libupm-ttp223-python3 is not set +# CONFIG_PACKAGE_libupm-uartat is not set +# CONFIG_PACKAGE_libupm-uartat-node is not set +# CONFIG_PACKAGE_libupm-uartat-python is not set +# CONFIG_PACKAGE_libupm-uartat-python3 is not set +# CONFIG_PACKAGE_libupm-uln200xa is not set +# CONFIG_PACKAGE_libupm-uln200xa-node is not set +# CONFIG_PACKAGE_libupm-uln200xa-python is not set +# CONFIG_PACKAGE_libupm-uln200xa-python3 is not set +# CONFIG_PACKAGE_libupm-ultrasonic is not set +# CONFIG_PACKAGE_libupm-ultrasonic-node is not set +# CONFIG_PACKAGE_libupm-ultrasonic-python is not set +# CONFIG_PACKAGE_libupm-ultrasonic-python3 is not set +# CONFIG_PACKAGE_libupm-urm37 is not set +# CONFIG_PACKAGE_libupm-urm37-node is not set +# CONFIG_PACKAGE_libupm-urm37-python is not set +# CONFIG_PACKAGE_libupm-urm37-python3 is not set +# CONFIG_PACKAGE_libupm-utilities is not set +# CONFIG_PACKAGE_libupm-utilities-node is not set +# CONFIG_PACKAGE_libupm-utilities-python is not set +# CONFIG_PACKAGE_libupm-utilities-python3 is not set +# CONFIG_PACKAGE_libupm-vcap is not set +# CONFIG_PACKAGE_libupm-vcap-node is not set +# CONFIG_PACKAGE_libupm-vcap-python is not set +# CONFIG_PACKAGE_libupm-vcap-python3 is not set +# CONFIG_PACKAGE_libupm-vdiv is not set +# CONFIG_PACKAGE_libupm-vdiv-node is not set +# CONFIG_PACKAGE_libupm-vdiv-python is not set +# CONFIG_PACKAGE_libupm-vdiv-python3 is not set +# CONFIG_PACKAGE_libupm-veml6070 is not set +# CONFIG_PACKAGE_libupm-veml6070-node is not set +# CONFIG_PACKAGE_libupm-veml6070-python is not set +# CONFIG_PACKAGE_libupm-veml6070-python3 is not set +# CONFIG_PACKAGE_libupm-water is not set +# CONFIG_PACKAGE_libupm-water-node is not set +# CONFIG_PACKAGE_libupm-water-python is not set +# CONFIG_PACKAGE_libupm-water-python3 is not set +# CONFIG_PACKAGE_libupm-waterlevel is not set +# CONFIG_PACKAGE_libupm-waterlevel-node is not set +# CONFIG_PACKAGE_libupm-waterlevel-python is not set +# CONFIG_PACKAGE_libupm-waterlevel-python3 is not set +# CONFIG_PACKAGE_libupm-wfs is not set +# CONFIG_PACKAGE_libupm-wfs-node is not set +# CONFIG_PACKAGE_libupm-wfs-python is not set +# CONFIG_PACKAGE_libupm-wfs-python3 is not set +# CONFIG_PACKAGE_libupm-wheelencoder is not set +# CONFIG_PACKAGE_libupm-wheelencoder-node is not set +# CONFIG_PACKAGE_libupm-wheelencoder-python is not set +# CONFIG_PACKAGE_libupm-wheelencoder-python3 is not set +# CONFIG_PACKAGE_libupm-wt5001 is not set +# CONFIG_PACKAGE_libupm-wt5001-node is not set +# CONFIG_PACKAGE_libupm-wt5001-python is not set +# CONFIG_PACKAGE_libupm-wt5001-python3 is not set +# CONFIG_PACKAGE_libupm-xbee is not set +# CONFIG_PACKAGE_libupm-xbee-node is not set +# CONFIG_PACKAGE_libupm-xbee-python is not set +# CONFIG_PACKAGE_libupm-xbee-python3 is not set +# CONFIG_PACKAGE_libupm-yg1006 is not set +# CONFIG_PACKAGE_libupm-yg1006-node is not set +# CONFIG_PACKAGE_libupm-yg1006-python is not set +# CONFIG_PACKAGE_libupm-yg1006-python3 is not set +# CONFIG_PACKAGE_libupm-zfm20 is not set +# CONFIG_PACKAGE_libupm-zfm20-node is not set +# CONFIG_PACKAGE_libupm-zfm20-python is not set +# CONFIG_PACKAGE_libupm-zfm20-python3 is not set + +# +# Languages +# +# CONFIG_PACKAGE_libyaml is not set + +# +# Networking +# +# CONFIG_PACKAGE_libdcwproto is not set +# CONFIG_PACKAGE_libdcwsocket is not set +# CONFIG_PACKAGE_libsctp is not set +# CONFIG_PACKAGE_libuhttpd-mbedtls is not set +# CONFIG_PACKAGE_libuhttpd-nossl is not set +# CONFIG_PACKAGE_libuhttpd-openssl is not set +# CONFIG_PACKAGE_libuhttpd-wolfssl is not set +# CONFIG_PACKAGE_libunbound-heavy is not set +# CONFIG_PACKAGE_libunbound-light is not set +# CONFIG_PACKAGE_libuwsc-mbedtls is not set +# CONFIG_PACKAGE_libuwsc-nossl is not set +# CONFIG_PACKAGE_libuwsc-openssl is not set +# CONFIG_PACKAGE_libuwsc-wolfssl is not set + +# +# SSL +# +# CONFIG_PACKAGE_libbotan is not set +CONFIG_PACKAGE_libgnutls=m + +# +# Configuration +# +CONFIG_GNUTLS_DTLS_SRTP=y +CONFIG_GNUTLS_ALPN=y +CONFIG_GNUTLS_OCSP=y +# CONFIG_GNUTLS_CRYPTODEV is not set +CONFIG_GNUTLS_HEARTBEAT=y +# CONFIG_GNUTLS_SRP is not set +CONFIG_GNUTLS_PSK=y +CONFIG_GNUTLS_ANON=y +# CONFIG_GNUTLS_TPM is not set +# CONFIG_GNUTLS_PKCS11 is not set +# CONFIG_GNUTLS_EXT_LIBTASN1 is not set +# CONFIG_PACKAGE_libmbedtls is not set +# CONFIG_PACKAGE_libnss is not set +CONFIG_PACKAGE_libopenssl=y + +# +# Build Options +# +# CONFIG_OPENSSL_OPTIMIZE_SPEED is not set +CONFIG_OPENSSL_WITH_ASM=y +CONFIG_OPENSSL_WITH_DEPRECATED=y +# CONFIG_OPENSSL_NO_DEPRECATED is not set +CONFIG_OPENSSL_WITH_ERROR_MESSAGES=y + +# +# Protocol Support +# +CONFIG_OPENSSL_WITH_TLS13=y +# CONFIG_OPENSSL_WITH_DTLS is not set +# CONFIG_OPENSSL_WITH_NPN is not set +CONFIG_OPENSSL_WITH_SRP=y +CONFIG_OPENSSL_WITH_CMS=y + +# +# Algorithm Selection +# +# CONFIG_OPENSSL_WITH_EC2M is not set +CONFIG_OPENSSL_WITH_CHACHA_POLY1305=y +# CONFIG_OPENSSL_PREFER_CHACHA_OVER_GCM is not set +CONFIG_OPENSSL_WITH_PSK=y + +# +# Less commonly used build options +# +# CONFIG_OPENSSL_WITH_ARIA is not set +# CONFIG_OPENSSL_WITH_CAMELLIA is not set +# CONFIG_OPENSSL_WITH_IDEA is not set +# CONFIG_OPENSSL_WITH_SEED is not set +# CONFIG_OPENSSL_WITH_SM234 is not set +# CONFIG_OPENSSL_WITH_BLAKE2 is not set +# CONFIG_OPENSSL_WITH_MDC2 is not set +# CONFIG_OPENSSL_WITH_WHIRLPOOL is not set +# CONFIG_OPENSSL_WITH_COMPRESSION is not set +# CONFIG_OPENSSL_WITH_RFC3779 is not set + +# +# Engine/Hardware Support +# +CONFIG_OPENSSL_ENGINE=y +# CONFIG_OPENSSL_ENGINE_BUILTIN is not set +# CONFIG_OPENSSL_WITH_GOST is not set +# CONFIG_PACKAGE_libopenssl-afalg_sync is not set +CONFIG_PACKAGE_libopenssl-conf=y +# CONFIG_PACKAGE_libopenssl-devcrypto is not set +CONFIG_PACKAGE_libwolfssl=y +CONFIG_WOLFSSL_HAS_AES_CCM=y +CONFIG_WOLFSSL_HAS_CHACHA_POLY=y +CONFIG_WOLFSSL_HAS_DH=y +CONFIG_WOLFSSL_HAS_ARC4=y +CONFIG_WOLFSSL_HAS_TLSV10=y +CONFIG_WOLFSSL_HAS_TLSV13=y +CONFIG_WOLFSSL_HAS_SESSION_TICKET=y +# CONFIG_WOLFSSL_HAS_DTLS is not set +CONFIG_WOLFSSL_HAS_OCSP=y +CONFIG_WOLFSSL_HAS_WPAS=y +# CONFIG_WOLFSSL_HAS_ECC25519 is not set +CONFIG_WOLFSSL_ALT_NAMES=y +CONFIG_WOLFSSL_HAS_NO_HW=y +# CONFIG_WOLFSSL_HAS_AFALG is not set +# CONFIG_WOLFSSL_HAS_DEVCRYPTO_CBC is not set +# CONFIG_WOLFSSL_HAS_DEVCRYPTO_AES is not set +# CONFIG_WOLFSSL_HAS_DEVCRYPTO_FULL is not set + +# +# Sound +# +# CONFIG_PACKAGE_liblo is not set + +# +# database +# +# CONFIG_PACKAGE_libpq is not set +# CONFIG_PACKAGE_libsqlite3 is not set +# CONFIG_PACKAGE_pgsqlodbc is not set +# CONFIG_PACKAGE_psqlodbca is not set +# CONFIG_PACKAGE_psqlodbcw is not set +# CONFIG_PACKAGE_tdb is not set +# CONFIG_PACKAGE_unixodbc is not set + +# +# libelektra +# +# CONFIG_PACKAGE_libelektra-boost is not set +# CONFIG_PACKAGE_libelektra-core is not set +# CONFIG_PACKAGE_libelektra-cpp is not set +# CONFIG_PACKAGE_libelektra-crypto is not set +# CONFIG_PACKAGE_libelektra-curlget is not set +# CONFIG_PACKAGE_libelektra-dbus is not set +# CONFIG_PACKAGE_libelektra-extra is not set +# CONFIG_PACKAGE_libelektra-lua is not set +# CONFIG_PACKAGE_libelektra-plugins is not set +# CONFIG_PACKAGE_libelektra-python2 is not set +# CONFIG_PACKAGE_libelektra-python3 is not set +# CONFIG_PACKAGE_libelektra-resolvers is not set +# CONFIG_PACKAGE_libelektra-xerces is not set +# CONFIG_PACKAGE_libelektra-xml is not set +# CONFIG_PACKAGE_libelektra-yajl is not set +# CONFIG_PACKAGE_libelektra-yamlcpp is not set + +# +# libimobiledevice +# +# CONFIG_PACKAGE_libimobiledevice is not set +# CONFIG_PACKAGE_libirecovery is not set +# CONFIG_PACKAGE_libplist is not set +# CONFIG_PACKAGE_libplistcxx is not set +# CONFIG_PACKAGE_libusbmuxd is not set +CONFIG_PACKAGE_alsa-lib=y +# CONFIG_PACKAGE_argp-standalone is not set +# CONFIG_PACKAGE_avro-c is not set +# CONFIG_PACKAGE_bind-libs is not set +# CONFIG_PACKAGE_bluez-libs is not set +# CONFIG_PACKAGE_boost is not set +# CONFIG_boost-context-exclude is not set +# CONFIG_boost-coroutine-exclude is not set +# CONFIG_boost-fiber-exclude is not set +# CONFIG_PACKAGE_ccid is not set +# CONFIG_PACKAGE_check is not set +# CONFIG_PACKAGE_classpath is not set +# CONFIG_PACKAGE_classpath-tools is not set +# CONFIG_PACKAGE_confuse is not set +# CONFIG_PACKAGE_czmq is not set +# CONFIG_PACKAGE_dtndht is not set +# CONFIG_PACKAGE_fbthrift is not set +# CONFIG_PACKAGE_fbzmq is not set +# CONFIG_PACKAGE_fcgi is not set +# CONFIG_PACKAGE_fftw3 is not set +# CONFIG_PACKAGE_fftw3f is not set +# CONFIG_PACKAGE_fftw3l is not set +# CONFIG_PACKAGE_getdns is not set +# CONFIG_PACKAGE_gflags is not set +# CONFIG_PACKAGE_giflib is not set +# CONFIG_PACKAGE_glib2 is not set +# CONFIG_PACKAGE_glog is not set +# CONFIG_PACKAGE_google-authenticator-libpam is not set +# CONFIG_PACKAGE_hidapi is not set +# CONFIG_PACKAGE_ibrcommon is not set +# CONFIG_PACKAGE_ibrdtn is not set +# CONFIG_PACKAGE_icu is not set +# CONFIG_PACKAGE_icu-data-tools is not set +# CONFIG_PACKAGE_icu-full-data is not set +# CONFIG_PACKAGE_jansson is not set +# CONFIG_PACKAGE_jsoncpp is not set +# CONFIG_PACKAGE_knot-libs is not set +# CONFIG_PACKAGE_knot-libzscanner is not set +CONFIG_PACKAGE_libaio=m +# CONFIG_PACKAGE_libantlr3c is not set +# CONFIG_PACKAGE_libao is not set +# CONFIG_PACKAGE_libapr is not set +# CONFIG_PACKAGE_libaprutil is not set +# CONFIG_PACKAGE_libarchive is not set +# CONFIG_PACKAGE_libarchive-noopenssl is not set +# CONFIG_PACKAGE_libartnet is not set +# CONFIG_PACKAGE_libasm is not set +# CONFIG_PACKAGE_libaudiofile is not set +CONFIG_PACKAGE_libavahi-client=m +# CONFIG_PACKAGE_libavahi-compat-libdnssd is not set +CONFIG_PACKAGE_libavahi-dbus-support=m +# CONFIG_PACKAGE_libavahi-nodbus-support is not set +# CONFIG_PACKAGE_libavl is not set +CONFIG_PACKAGE_libbfd=m +CONFIG_PACKAGE_libblkid=y +CONFIG_PACKAGE_libblobmsg-json=y +# CONFIG_PACKAGE_libbsd is not set +# CONFIG_PACKAGE_libcanfestival is not set +CONFIG_PACKAGE_libcap=y +# CONFIG_PACKAGE_libcap-bin is not set +CONFIG_PACKAGE_libcares=y +# CONFIG_PACKAGE_libcgroup is not set +# CONFIG_PACKAGE_libcharset is not set +# CONFIG_PACKAGE_libcoap is not set +CONFIG_PACKAGE_libcomerr=y +# CONFIG_PACKAGE_libconfig is not set +CONFIG_PACKAGE_libctf=m +CONFIG_PACKAGE_libcurl=y + +# +# SSL support +# +# CONFIG_LIBCURL_MBEDTLS is not set +CONFIG_LIBCURL_WOLFSSL=y +# CONFIG_LIBCURL_OPENSSL is not set +# CONFIG_LIBCURL_GNUTLS is not set +# CONFIG_LIBCURL_NOSSL is not set + +# +# Supported protocols +# +# CONFIG_LIBCURL_DICT is not set +CONFIG_LIBCURL_FILE=y +CONFIG_LIBCURL_FTP=y +# CONFIG_LIBCURL_GOPHER is not set +CONFIG_LIBCURL_HTTP=y +CONFIG_LIBCURL_COOKIES=y +# CONFIG_LIBCURL_IMAP is not set +# CONFIG_LIBCURL_LDAP is not set +# CONFIG_LIBCURL_POP3 is not set +# CONFIG_LIBCURL_RTSP is not set +# CONFIG_LIBCURL_SSH2 is not set +CONFIG_LIBCURL_NO_SMB="!" +# CONFIG_LIBCURL_SMTP is not set +# CONFIG_LIBCURL_TELNET is not set +# CONFIG_LIBCURL_TFTP is not set +CONFIG_LIBCURL_NGHTTP2=y + +# +# Miscellaneous +# +CONFIG_LIBCURL_PROXY=y +# CONFIG_LIBCURL_CRYPTO_AUTH is not set +# CONFIG_LIBCURL_TLS_SRP is not set +# CONFIG_LIBCURL_LIBIDN2 is not set +# CONFIG_LIBCURL_THREADED_RESOLVER is not set +# CONFIG_LIBCURL_ZLIB is not set +# CONFIG_LIBCURL_ZSTD is not set +# CONFIG_LIBCURL_UNIX_SOCKETS is not set +# CONFIG_LIBCURL_LIBCURL_OPTION is not set +# CONFIG_LIBCURL_VERBOSE is not set +CONFIG_PACKAGE_libdaemon=m +# CONFIG_PACKAGE_libdaq is not set +# CONFIG_PACKAGE_libdaq3 is not set +# CONFIG_PACKAGE_libdb47 is not set +# CONFIG_PACKAGE_libdb47xx is not set +# CONFIG_PACKAGE_libdbi is not set +CONFIG_PACKAGE_libdbus=m +CONFIG_PACKAGE_libdevmapper=m +# CONFIG_PACKAGE_libdmapsharing is not set +# CONFIG_PACKAGE_libdnet is not set +# CONFIG_PACKAGE_libdouble-conversion is not set +# CONFIG_PACKAGE_libdrm is not set +CONFIG_PACKAGE_libdw=m +# CONFIG_PACKAGE_libecdsautil is not set +# CONFIG_PACKAGE_libedit is not set +CONFIG_PACKAGE_libelf=y +# CONFIG_PACKAGE_libesmtp is not set +# CONFIG_PACKAGE_libestr is not set +# CONFIG_PACKAGE_libev is not set +# CONFIG_PACKAGE_libevdev is not set +CONFIG_PACKAGE_libevent2=y +# CONFIG_PACKAGE_libevent2-core is not set +# CONFIG_PACKAGE_libevent2-extra is not set +# CONFIG_PACKAGE_libevent2-openssl is not set +# CONFIG_PACKAGE_libevent2-pthreads is not set +# CONFIG_PACKAGE_libexif is not set +CONFIG_PACKAGE_libexpat=m +# CONFIG_PACKAGE_libexslt is not set +CONFIG_PACKAGE_libext2fs=y +# CONFIG_PACKAGE_libextractor is not set +# CONFIG_PACKAGE_libf2fs is not set +# CONFIG_PACKAGE_libfaad2 is not set +# CONFIG_PACKAGE_libfastjson is not set +CONFIG_PACKAGE_libfdisk=m +# CONFIG_PACKAGE_libfdt is not set +# CONFIG_PACKAGE_libffi is not set +# CONFIG_PACKAGE_libffmpeg-audio-dec is not set +# CONFIG_PACKAGE_libffmpeg-custom is not set +# CONFIG_PACKAGE_libffmpeg-full is not set +# CONFIG_PACKAGE_libffmpeg-mini is not set +# CONFIG_PACKAGE_libfizz is not set +# CONFIG_PACKAGE_libflac is not set +# CONFIG_PACKAGE_libfmt is not set +# CONFIG_PACKAGE_libfolly is not set +# CONFIG_PACKAGE_libfreetype is not set +# CONFIG_PACKAGE_libfstrm is not set +# CONFIG_PACKAGE_libftdi is not set +# CONFIG_PACKAGE_libftdi1 is not set +# CONFIG_PACKAGE_libgabe is not set +# CONFIG_PACKAGE_libgcrypt is not set +# CONFIG_PACKAGE_libgd is not set +# CONFIG_PACKAGE_libgdbm is not set +# CONFIG_PACKAGE_libgee is not set +# CONFIG_PACKAGE_libglpk is not set +CONFIG_PACKAGE_libgmp=y +# CONFIG_PACKAGE_libgnurl is not set +# CONFIG_PACKAGE_libgpg-error is not set +# CONFIG_PACKAGE_libgphoto2 is not set +# CONFIG_PACKAGE_libgpiod is not set +# CONFIG_PACKAGE_libgps is not set +# CONFIG_PACKAGE_libhamlib is not set +# CONFIG_PACKAGE_libhavege is not set +# CONFIG_PACKAGE_libhiredis is not set +# CONFIG_PACKAGE_libhttp-parser is not set +# CONFIG_PACKAGE_libhwloc is not set +CONFIG_PACKAGE_libi2c=y +# CONFIG_PACKAGE_libical is not set +# CONFIG_PACKAGE_libiconv is not set +# CONFIG_PACKAGE_libiconv-full is not set +# CONFIG_PACKAGE_libid3tag is not set +# CONFIG_PACKAGE_libidn is not set +# CONFIG_PACKAGE_libidn2 is not set +# CONFIG_PACKAGE_libiio is not set +# CONFIG_PACKAGE_libinotifytools is not set +# CONFIG_PACKAGE_libinput is not set +# CONFIG_PACKAGE_libintl is not set +# CONFIG_PACKAGE_libintl-full is not set +# CONFIG_PACKAGE_libiw is not set +CONFIG_PACKAGE_libiwinfo=y +# CONFIG_PACKAGE_libjpeg is not set +CONFIG_PACKAGE_libjson-c=y +# CONFIG_PACKAGE_libkeyutils is not set +# CONFIG_PACKAGE_libkmod is not set +# CONFIG_PACKAGE_libldns is not set +# CONFIG_PACKAGE_libloragw is not set +# CONFIG_PACKAGE_libltdl is not set +CONFIG_PACKAGE_liblua=y +CONFIG_PACKAGE_liblucihttp=y +CONFIG_PACKAGE_liblucihttp-lua=y +CONFIG_PACKAGE_liblxc=m +# CONFIG_PACKAGE_liblzo is not set +# CONFIG_PACKAGE_libmad is not set +CONFIG_PACKAGE_libmagic=y +# CONFIG_PACKAGE_libmariadb is not set +# CONFIG_PACKAGE_libmaxminddb is not set +# CONFIG_PACKAGE_libmbim is not set +# CONFIG_PACKAGE_libmcrypt is not set +# CONFIG_PACKAGE_libmicrohttpd-no-ssl is not set +# CONFIG_PACKAGE_libmicrohttpd-ssl is not set +CONFIG_PACKAGE_libmicroxml=m +# CONFIG_PACKAGE_libmilter-sendmail is not set +# CONFIG_PACKAGE_libminiupnpc is not set +# CONFIG_PACKAGE_libmms is not set +CONFIG_PACKAGE_libmnl=y +# CONFIG_PACKAGE_libmodbus is not set +# CONFIG_PACKAGE_libmosquitto-nossl is not set +# CONFIG_PACKAGE_libmosquitto-ssl is not set +# CONFIG_PACKAGE_libmount is not set +# CONFIG_PACKAGE_libmpdclient is not set +# CONFIG_PACKAGE_libmpeg2 is not set +# CONFIG_PACKAGE_libmpg123 is not set +# CONFIG_PACKAGE_libmstch is not set +# CONFIG_PACKAGE_libnatpmp is not set +CONFIG_PACKAGE_libncurses=y +# CONFIG_PACKAGE_libndpi is not set +# CONFIG_PACKAGE_libneon is not set +# CONFIG_PACKAGE_libnet-1.2.x is not set +# CONFIG_PACKAGE_libnetconf2 is not set +# CONFIG_PACKAGE_libnetfilter-acct is not set +# CONFIG_PACKAGE_libnetfilter-conntrack is not set +# CONFIG_PACKAGE_libnetfilter-cthelper is not set +# CONFIG_PACKAGE_libnetfilter-cttimeout is not set +# CONFIG_PACKAGE_libnetfilter-log is not set +# CONFIG_PACKAGE_libnetfilter-queue is not set +# CONFIG_PACKAGE_libnetsnmp is not set +CONFIG_PACKAGE_libnettle=m + +# +# Configuration +# +# CONFIG_LIBNETTLE_MINI is not set +# CONFIG_PACKAGE_libnewt is not set +# CONFIG_PACKAGE_libnfnetlink is not set +CONFIG_PACKAGE_libnftnl=y +CONFIG_PACKAGE_libnghttp2=y +CONFIG_PACKAGE_libnl=y +CONFIG_PACKAGE_libnl-core=y +CONFIG_PACKAGE_libnl-genl=y +CONFIG_PACKAGE_libnl-nf=y +# CONFIG_PACKAGE_libnl-nss is not set +CONFIG_PACKAGE_libnl-route=y +CONFIG_PACKAGE_libnl-tiny=y +# CONFIG_PACKAGE_libnopoll is not set +# CONFIG_PACKAGE_libogg is not set +# CONFIG_PACKAGE_liboil is not set +CONFIG_PACKAGE_libopcodes=m +# CONFIG_PACKAGE_libopendkim is not set +# CONFIG_PACKAGE_libopenobex is not set +# CONFIG_PACKAGE_libopensc is not set +# CONFIG_PACKAGE_libopenzwave is not set +# CONFIG_PACKAGE_liboping is not set +# CONFIG_PACKAGE_libopus is not set +# CONFIG_PACKAGE_libopusenc is not set +# CONFIG_PACKAGE_libopusfile is not set +# CONFIG_PACKAGE_libout123 is not set +# CONFIG_PACKAGE_libp11 is not set +# CONFIG_PACKAGE_libpagekite is not set +CONFIG_PACKAGE_libpam=m +# CONFIG_PACKAGE_libpbc is not set +CONFIG_PACKAGE_libpcap=y + +# +# Configuration +# +# CONFIG_PCAP_HAS_USB is not set +# CONFIG_PCAP_HAS_NETFILTER is not set +# CONFIG_PACKAGE_libpci is not set +# CONFIG_PACKAGE_libpciaccess is not set +# CONFIG_PACKAGE_libpcre is not set +# CONFIG_PACKAGE_libpcre16 is not set +# CONFIG_PACKAGE_libpcre2 is not set +# CONFIG_PACKAGE_libpcre2-16 is not set +# CONFIG_PACKAGE_libpcre2-32 is not set +# CONFIG_PACKAGE_libpcrecpp is not set +# CONFIG_PACKAGE_libpcsclite is not set +# CONFIG_PACKAGE_libpfring is not set +# CONFIG_PACKAGE_libpkcs11-spy is not set +# CONFIG_PACKAGE_libpng is not set +CONFIG_PACKAGE_libpopt=m +# CONFIG_PACKAGE_libprotobuf-c is not set +# CONFIG_PACKAGE_libpsl is not set +# CONFIG_PACKAGE_libqmi is not set +# CONFIG_PACKAGE_libqrencode is not set +# CONFIG_PACKAGE_libradcli is not set +CONFIG_PACKAGE_libreadline=y +# CONFIG_PACKAGE_libredblack is not set +# CONFIG_PACKAGE_librouteros is not set +# CONFIG_PACKAGE_libroxml is not set +# CONFIG_PACKAGE_librrd1 is not set +# CONFIG_PACKAGE_librsocket-cpp is not set +# CONFIG_PACKAGE_librtlsdr is not set +# CONFIG_PACKAGE_libruby is not set +# CONFIG_PACKAGE_libsamplerate is not set +# CONFIG_PACKAGE_libsane is not set +# CONFIG_PACKAGE_libsasl2 is not set +# CONFIG_PACKAGE_libsearpc is not set +# CONFIG_PACKAGE_libseccomp is not set +# CONFIG_PACKAGE_libsensors is not set +# CONFIG_PACKAGE_libshout is not set +# CONFIG_PACKAGE_libshout-full is not set +# CONFIG_PACKAGE_libshout-nossl is not set +# CONFIG_PACKAGE_libsigar is not set +# CONFIG_PACKAGE_libsispmctl is not set +# CONFIG_PACKAGE_libslang2 is not set +# CONFIG_PACKAGE_libslang2-mod-base64 is not set +# CONFIG_PACKAGE_libslang2-mod-chksum is not set +# CONFIG_PACKAGE_libslang2-mod-csv is not set +# CONFIG_PACKAGE_libslang2-mod-fcntl is not set +# CONFIG_PACKAGE_libslang2-mod-fork is not set +# CONFIG_PACKAGE_libslang2-mod-histogram is not set +# CONFIG_PACKAGE_libslang2-mod-iconv is not set +# CONFIG_PACKAGE_libslang2-mod-json is not set +# CONFIG_PACKAGE_libslang2-mod-onig is not set +# CONFIG_PACKAGE_libslang2-mod-pcre is not set +# CONFIG_PACKAGE_libslang2-mod-png is not set +# CONFIG_PACKAGE_libslang2-mod-rand is not set +# CONFIG_PACKAGE_libslang2-mod-select is not set +# CONFIG_PACKAGE_libslang2-mod-slsmg is not set +# CONFIG_PACKAGE_libslang2-mod-socket is not set +# CONFIG_PACKAGE_libslang2-mod-stats is not set +# CONFIG_PACKAGE_libslang2-mod-sysconf is not set +# CONFIG_PACKAGE_libslang2-mod-termios is not set +# CONFIG_PACKAGE_libslang2-mod-varray is not set +# CONFIG_PACKAGE_libslang2-mod-zlib is not set +# CONFIG_PACKAGE_libslang2-modules is not set +CONFIG_PACKAGE_libsmartcols=y +# CONFIG_PACKAGE_libsndfile is not set +# CONFIG_PACKAGE_libsoc is not set +# CONFIG_PACKAGE_libsocks is not set +# CONFIG_PACKAGE_libsodium is not set +# CONFIG_PACKAGE_libsoup is not set +# CONFIG_PACKAGE_libsoxr is not set +# CONFIG_PACKAGE_libspeex is not set +# CONFIG_PACKAGE_libspeexdsp is not set +CONFIG_PACKAGE_libss=y +# CONFIG_PACKAGE_libssh is not set +# CONFIG_PACKAGE_libssh2 is not set +# CONFIG_PACKAGE_libstoken is not set +# CONFIG_PACKAGE_libstrophe is not set +# CONFIG_PACKAGE_libtalloc is not set +CONFIG_PACKAGE_libtasn1=m +# CONFIG_PACKAGE_libtheora is not set +# CONFIG_PACKAGE_libtiff is not set +# CONFIG_PACKAGE_libtiffxx is not set +# CONFIG_PACKAGE_libtins is not set +CONFIG_PACKAGE_libtirpc=m +CONFIG_PACKAGE_libubox=y +# CONFIG_PACKAGE_libubox-lua is not set +CONFIG_PACKAGE_libubus=y +CONFIG_PACKAGE_libubus-lua=y +CONFIG_PACKAGE_libuci=y +# CONFIG_PACKAGE_libuci-lua is not set +CONFIG_PACKAGE_libuclient=y +# CONFIG_PACKAGE_libudev-fbsd is not set +# CONFIG_PACKAGE_libudns is not set +# CONFIG_PACKAGE_libuecc is not set +# CONFIG_PACKAGE_libugpio is not set +# CONFIG_PACKAGE_libunistring is not set +# CONFIG_PACKAGE_libunwind is not set +# CONFIG_PACKAGE_libupnp is not set +# CONFIG_PACKAGE_libupnpp is not set +# CONFIG_PACKAGE_liburcu is not set +# CONFIG_PACKAGE_liburiparser is not set +# CONFIG_PACKAGE_libusb-1.0 is not set +# CONFIG_PACKAGE_libusb-compat is not set +# CONFIG_PACKAGE_libustream-mbedtls is not set +# CONFIG_PACKAGE_libustream-openssl is not set +# CONFIG_PACKAGE_libustream-wolfssl is not set +CONFIG_PACKAGE_libuuid=y +# CONFIG_PACKAGE_libuv is not set +# CONFIG_PACKAGE_libuvc is not set +# CONFIG_PACKAGE_libv4l is not set +# CONFIG_PACKAGE_libvorbis is not set +# CONFIG_PACKAGE_libvorbisidec is not set +# CONFIG_PACKAGE_libvpx is not set +# CONFIG_PACKAGE_libwangle is not set +# CONFIG_PACKAGE_libwebcam is not set +# CONFIG_PACKAGE_libwebsockets-full is not set +# CONFIG_PACKAGE_libwebsockets-mbedtls is not set +# CONFIG_PACKAGE_libwebsockets-openssl is not set +# CONFIG_PACKAGE_libwrap is not set +# CONFIG_PACKAGE_libxerces-c is not set +# CONFIG_PACKAGE_libxerces-c-samples is not set +# CONFIG_PACKAGE_libxml2 is not set +# CONFIG_PACKAGE_libxslt is not set +# CONFIG_PACKAGE_libyaml-cpp is not set +# CONFIG_PACKAGE_libyang is not set +# CONFIG_PACKAGE_libyarpl is not set +# CONFIG_PACKAGE_libyubikey is not set +# CONFIG_PACKAGE_libzdb is not set +# CONFIG_PACKAGE_libzmq-curve is not set +# CONFIG_PACKAGE_libzmq-nc is not set +# CONFIG_PACKAGE_linux-atm is not set +# CONFIG_PACKAGE_lmdb is not set +# CONFIG_PACKAGE_log4cplus is not set +# CONFIG_PACKAGE_loudmouth is not set +# CONFIG_PACKAGE_lttng-ust is not set +# CONFIG_PACKAGE_measurement-kit is not set +# CONFIG_PACKAGE_msgpack-c is not set +# CONFIG_PACKAGE_mtdev is not set +# CONFIG_PACKAGE_musl-fts is not set +# CONFIG_PACKAGE_mxml is not set +# CONFIG_PACKAGE_nspr is not set +# CONFIG_PACKAGE_oniguruma is not set +# CONFIG_PACKAGE_opencore-amr is not set +# CONFIG_PACKAGE_opencv is not set +# CONFIG_PACKAGE_p11-kit is not set +# CONFIG_PACKAGE_pixman is not set +# CONFIG_PACKAGE_poco is not set +# CONFIG_PACKAGE_protobuf is not set +# CONFIG_PACKAGE_protobuf-lite is not set +# CONFIG_PACKAGE_pthsem is not set +# CONFIG_PACKAGE_re2 is not set +CONFIG_RE2_SHARED=y +# CONFIG_RE2_STATIC is not set +CONFIG_PACKAGE_rpcd-mod-luci=y +CONFIG_PACKAGE_rpcd-mod-lxc=m +# CONFIG_PACKAGE_rpcd-mod-rad2-enc is not set +CONFIG_PACKAGE_rpcd-mod-rrdns=y +# CONFIG_PACKAGE_rxtx is not set +# CONFIG_PACKAGE_sbc is not set +CONFIG_PACKAGE_terminfo=y +# CONFIG_PACKAGE_tinycdb is not set +# CONFIG_PACKAGE_uclibcxx is not set +# CONFIG_PACKAGE_uw-imap is not set +# CONFIG_PACKAGE_xmlrpc-c is not set +# CONFIG_PACKAGE_xmlrpc-c-client is not set +# CONFIG_PACKAGE_xmlrpc-c-server is not set +# CONFIG_PACKAGE_yajl is not set +# CONFIG_PACKAGE_yubico-pam is not set +CONFIG_PACKAGE_zlib=y + +# +# Configuration +# +# CONFIG_ZLIB_OPTIMIZE_SPEED is not set + +# +# LuCI +# + +# +# 1. Collections +# +CONFIG_PACKAGE_luci=y +# CONFIG_PACKAGE_luci-nginx is not set +# CONFIG_PACKAGE_luci-ssl is not set +# CONFIG_PACKAGE_luci-ssl-nginx is not set +# CONFIG_PACKAGE_luci-ssl-openssl is not set + +# +# 2. Modules +# +CONFIG_PACKAGE_luci-base=y +# CONFIG_LUCI_SRCDIET is not set +CONFIG_LUCI_JSMIN=y +CONFIG_LUCI_CSSTIDY=y + +# +# Translations +# +# CONFIG_LUCI_LANG_bg is not set +# CONFIG_LUCI_LANG_ca is not set +# CONFIG_LUCI_LANG_cs is not set +# CONFIG_LUCI_LANG_de is not set +# CONFIG_LUCI_LANG_el is not set +# CONFIG_LUCI_LANG_en is not set +# CONFIG_LUCI_LANG_es is not set +# CONFIG_LUCI_LANG_fr is not set +# CONFIG_LUCI_LANG_he is not set +# CONFIG_LUCI_LANG_hi is not set +# CONFIG_LUCI_LANG_hu is not set +# CONFIG_LUCI_LANG_it is not set +# CONFIG_LUCI_LANG_ja is not set +# CONFIG_LUCI_LANG_ko is not set +# CONFIG_LUCI_LANG_mr is not set +# CONFIG_LUCI_LANG_ms is not set +# CONFIG_LUCI_LANG_nb_NO is not set +# CONFIG_LUCI_LANG_pl is not set +# CONFIG_LUCI_LANG_pt is not set +# CONFIG_LUCI_LANG_pt_BR is not set +# CONFIG_LUCI_LANG_ro is not set +# CONFIG_LUCI_LANG_ru is not set +# CONFIG_LUCI_LANG_sk is not set +# CONFIG_LUCI_LANG_sv is not set +# CONFIG_LUCI_LANG_tr is not set +# CONFIG_LUCI_LANG_uk is not set +# CONFIG_LUCI_LANG_vi is not set +# CONFIG_LUCI_LANG_zh_Hans is not set +# CONFIG_LUCI_LANG_zh_Hant is not set +CONFIG_PACKAGE_luci-compat=y +CONFIG_PACKAGE_luci-mod-admin-full=y +# CONFIG_PACKAGE_luci-mod-failsafe is not set +CONFIG_PACKAGE_luci-mod-network=y +# CONFIG_PACKAGE_luci-mod-rpc is not set +CONFIG_PACKAGE_luci-mod-status=y +CONFIG_PACKAGE_luci-mod-system=y + +# +# 3. Applications +# +# CONFIG_PACKAGE_luci-app-acme is not set +# CONFIG_PACKAGE_luci-app-adblock is not set +# CONFIG_PACKAGE_luci-app-advanced-reboot is not set +# CONFIG_PACKAGE_luci-app-ahcp is not set +# CONFIG_PACKAGE_luci-app-aria2 is not set +# CONFIG_PACKAGE_luci-app-attendedsysupgrade is not set +# CONFIG_PACKAGE_luci-app-banip is not set +# CONFIG_PACKAGE_luci-app-bcp38 is not set +# CONFIG_PACKAGE_luci-app-bird1-ipv4 is not set +# CONFIG_PACKAGE_luci-app-bird1-ipv6 is not set +# CONFIG_PACKAGE_luci-app-bmx6 is not set +# CONFIG_PACKAGE_luci-app-bmx7 is not set +# CONFIG_PACKAGE_luci-app-cjdns is not set +# CONFIG_PACKAGE_luci-app-clamav is not set +# CONFIG_PACKAGE_luci-app-commands is not set +# CONFIG_PACKAGE_luci-app-cshark is not set +# CONFIG_PACKAGE_luci-app-dcwapd is not set +CONFIG_PACKAGE_luci-app-ddns=y +# CONFIG_PACKAGE_luci-app-diag-core is not set +# CONFIG_PACKAGE_luci-app-dnscrypt-proxy is not set +# CONFIG_PACKAGE_luci-app-dump1090 is not set +# CONFIG_PACKAGE_luci-app-dynapoint is not set +# CONFIG_PACKAGE_luci-app-e2guardian is not set +CONFIG_PACKAGE_luci-app-firewall=y +# CONFIG_PACKAGE_luci-app-fwknopd is not set +# CONFIG_PACKAGE_luci-app-hd-idle is not set +# CONFIG_PACKAGE_luci-app-hnet is not set +# CONFIG_PACKAGE_luci-app-https-dns-proxy is not set +# CONFIG_PACKAGE_luci-app-ksmbd is not set +# CONFIG_PACKAGE_luci-app-lxc is not set +# CONFIG_PACKAGE_luci-app-minidlna is not set +# CONFIG_PACKAGE_luci-app-mjpg-streamer is not set +# CONFIG_PACKAGE_luci-app-mwan3 is not set +# CONFIG_PACKAGE_luci-app-nextdns is not set +# CONFIG_PACKAGE_luci-app-nft-qos is not set +# CONFIG_PACKAGE_luci-app-nlbwmon is not set +# CONFIG_PACKAGE_luci-app-ntpc is not set +# CONFIG_PACKAGE_luci-app-nut is not set +# CONFIG_PACKAGE_luci-app-ocserv is not set +# CONFIG_PACKAGE_luci-app-olsr is not set +# CONFIG_PACKAGE_luci-app-olsr-services is not set +# CONFIG_PACKAGE_luci-app-olsr-viz is not set +# CONFIG_PACKAGE_luci-app-openvpn is not set +CONFIG_PACKAGE_luci-app-opkg=y +# CONFIG_PACKAGE_luci-app-p910nd is not set +# CONFIG_PACKAGE_luci-app-pagekitec is not set +# CONFIG_PACKAGE_luci-app-polipo is not set +# CONFIG_PACKAGE_luci-app-privoxy is not set +# CONFIG_PACKAGE_luci-app-qos is not set +# CONFIG_PACKAGE_luci-app-radicale is not set +# CONFIG_PACKAGE_luci-app-radicale2 is not set +# CONFIG_PACKAGE_luci-app-rosy-file-server is not set +# CONFIG_PACKAGE_luci-app-samba is not set +# CONFIG_PACKAGE_luci-app-samba4 is not set +# CONFIG_PACKAGE_luci-app-shadowsocks-libev is not set +# CONFIG_PACKAGE_luci-app-shairplay is not set +# CONFIG_PACKAGE_luci-app-siitwizard is not set +# CONFIG_PACKAGE_luci-app-simple-adblock is not set +# CONFIG_PACKAGE_luci-app-snmpd is not set +# CONFIG_PACKAGE_luci-app-splash is not set +# CONFIG_PACKAGE_luci-app-sqm is not set +# CONFIG_PACKAGE_luci-app-squid is not set +# CONFIG_PACKAGE_luci-app-statistics is not set +# CONFIG_PACKAGE_luci-app-tinyproxy is not set +# CONFIG_PACKAGE_luci-app-transmission is not set +# CONFIG_PACKAGE_luci-app-travelmate is not set +# CONFIG_PACKAGE_luci-app-ttyd is not set +# CONFIG_PACKAGE_luci-app-udpxy is not set +# CONFIG_PACKAGE_luci-app-uhttpd is not set +# CONFIG_PACKAGE_luci-app-unbound is not set +CONFIG_PACKAGE_luci-app-upnp=y +# CONFIG_PACKAGE_luci-app-vnstat is not set +# CONFIG_PACKAGE_luci-app-vpn-policy-routing is not set +# CONFIG_PACKAGE_luci-app-vpnbypass is not set +# CONFIG_PACKAGE_luci-app-watchcat is not set +# CONFIG_PACKAGE_luci-app-wifischedule is not set +# CONFIG_PACKAGE_luci-app-wireguard is not set +# CONFIG_PACKAGE_luci-app-wol is not set + +# +# 4. Themes +# +CONFIG_PACKAGE_luci-theme-bootstrap=y +# CONFIG_PACKAGE_luci-theme-material is not set +# CONFIG_PACKAGE_luci-theme-openwrt is not set + +# +# 5. Protocols +# +# CONFIG_PACKAGE_luci-proto-3g is not set +# CONFIG_PACKAGE_luci-proto-gre is not set +# CONFIG_PACKAGE_luci-proto-hnet is not set +# CONFIG_PACKAGE_luci-proto-ipip is not set +CONFIG_PACKAGE_luci-proto-ipv6=y +# CONFIG_PACKAGE_luci-proto-openconnect is not set +CONFIG_PACKAGE_luci-proto-ppp=y +# CONFIG_PACKAGE_luci-proto-pppossh is not set +# CONFIG_PACKAGE_luci-proto-qmi is not set +# CONFIG_PACKAGE_luci-proto-relay is not set +# CONFIG_PACKAGE_luci-proto-vpnc is not set +# CONFIG_PACKAGE_luci-proto-wireguard is not set + +# +# 6. Libraries +# +# CONFIG_PACKAGE_luci-lib-dracula is not set +# CONFIG_PACKAGE_luci-lib-httpclient is not set +# CONFIG_PACKAGE_luci-lib-httpprotoutils is not set +CONFIG_PACKAGE_luci-lib-ip=y +CONFIG_PACKAGE_luci-lib-ipkg=y +# CONFIG_PACKAGE_luci-lib-iptparser is not set +# CONFIG_PACKAGE_luci-lib-jquery-1-4 is not set +# CONFIG_PACKAGE_luci-lib-json is not set +CONFIG_PACKAGE_luci-lib-jsonc=y +CONFIG_PACKAGE_luci-lib-nixio=y +CONFIG_PACKAGE_luci-lib-nixio_notls=y +# CONFIG_PACKAGE_luci-lib-nixio_axtls is not set +# CONFIG_PACKAGE_luci-lib-nixio_cyassl is not set +# CONFIG_PACKAGE_luci-lib-nixio_openssl is not set +# CONFIG_PACKAGE_luci-lib-px5g is not set +# CONFIG_PACKAGE_luci-i18n-base-bg is not set +# CONFIG_PACKAGE_luci-i18n-base-ca is not set +# CONFIG_PACKAGE_luci-i18n-base-cs is not set +# CONFIG_PACKAGE_luci-i18n-base-de is not set +# CONFIG_PACKAGE_luci-i18n-base-el is not set +# CONFIG_PACKAGE_luci-i18n-base-en is not set +# CONFIG_PACKAGE_luci-i18n-base-es is not set +# CONFIG_PACKAGE_luci-i18n-base-fr is not set +# CONFIG_PACKAGE_luci-i18n-base-he is not set +# CONFIG_PACKAGE_luci-i18n-base-hi is not set +# CONFIG_PACKAGE_luci-i18n-base-hu is not set +# CONFIG_PACKAGE_luci-i18n-base-it is not set +# CONFIG_PACKAGE_luci-i18n-base-ja is not set +# CONFIG_PACKAGE_luci-i18n-base-ko is not set +# CONFIG_PACKAGE_luci-i18n-base-mr is not set +# CONFIG_PACKAGE_luci-i18n-base-ms is not set +# CONFIG_PACKAGE_luci-i18n-base-no is not set +# CONFIG_PACKAGE_luci-i18n-base-pl is not set +# CONFIG_PACKAGE_luci-i18n-base-pt is not set +# CONFIG_PACKAGE_luci-i18n-base-pt-br is not set +# CONFIG_PACKAGE_luci-i18n-base-ro is not set +# CONFIG_PACKAGE_luci-i18n-base-ru is not set +# CONFIG_PACKAGE_luci-i18n-base-sk is not set +# CONFIG_PACKAGE_luci-i18n-base-sv is not set +# CONFIG_PACKAGE_luci-i18n-base-tr is not set +# CONFIG_PACKAGE_luci-i18n-base-uk is not set +# CONFIG_PACKAGE_luci-i18n-base-vi is not set +# CONFIG_PACKAGE_luci-i18n-base-zh-cn is not set +# CONFIG_PACKAGE_luci-i18n-base-zh-tw is not set +# CONFIG_PACKAGE_luci-i18n-ddns-bg is not set +# CONFIG_PACKAGE_luci-i18n-ddns-ca is not set +# CONFIG_PACKAGE_luci-i18n-ddns-cs is not set +# CONFIG_PACKAGE_luci-i18n-ddns-de is not set +# CONFIG_PACKAGE_luci-i18n-ddns-el is not set +# CONFIG_PACKAGE_luci-i18n-ddns-en is not set +# CONFIG_PACKAGE_luci-i18n-ddns-es is not set +# CONFIG_PACKAGE_luci-i18n-ddns-fr is not set +# CONFIG_PACKAGE_luci-i18n-ddns-he is not set +# CONFIG_PACKAGE_luci-i18n-ddns-hi is not set +# CONFIG_PACKAGE_luci-i18n-ddns-hu is not set +# CONFIG_PACKAGE_luci-i18n-ddns-it is not set +# CONFIG_PACKAGE_luci-i18n-ddns-ja is not set +# CONFIG_PACKAGE_luci-i18n-ddns-ko is not set +# CONFIG_PACKAGE_luci-i18n-ddns-mr is not set +# CONFIG_PACKAGE_luci-i18n-ddns-ms is not set +# CONFIG_PACKAGE_luci-i18n-ddns-no is not set +# CONFIG_PACKAGE_luci-i18n-ddns-pl is not set +# CONFIG_PACKAGE_luci-i18n-ddns-pt is not set +# CONFIG_PACKAGE_luci-i18n-ddns-pt-br is not set +# CONFIG_PACKAGE_luci-i18n-ddns-ro is not set +# CONFIG_PACKAGE_luci-i18n-ddns-ru is not set +# CONFIG_PACKAGE_luci-i18n-ddns-sk is not set +# CONFIG_PACKAGE_luci-i18n-ddns-sv is not set +# CONFIG_PACKAGE_luci-i18n-ddns-tr is not set +# CONFIG_PACKAGE_luci-i18n-ddns-uk is not set +# CONFIG_PACKAGE_luci-i18n-ddns-vi is not set +# CONFIG_PACKAGE_luci-i18n-ddns-zh-cn is not set +# CONFIG_PACKAGE_luci-i18n-ddns-zh-tw is not set +# CONFIG_PACKAGE_luci-i18n-firewall-bg is not set +# CONFIG_PACKAGE_luci-i18n-firewall-ca is not set +# CONFIG_PACKAGE_luci-i18n-firewall-cs is not set +# CONFIG_PACKAGE_luci-i18n-firewall-de is not set +# CONFIG_PACKAGE_luci-i18n-firewall-el is not set +# CONFIG_PACKAGE_luci-i18n-firewall-en is not set +# CONFIG_PACKAGE_luci-i18n-firewall-es is not set +# CONFIG_PACKAGE_luci-i18n-firewall-fr is not set +# CONFIG_PACKAGE_luci-i18n-firewall-he is not set +# CONFIG_PACKAGE_luci-i18n-firewall-hi is not set +# CONFIG_PACKAGE_luci-i18n-firewall-hu is not set +# CONFIG_PACKAGE_luci-i18n-firewall-it is not set +# CONFIG_PACKAGE_luci-i18n-firewall-ja is not set +# CONFIG_PACKAGE_luci-i18n-firewall-ko is not set +# CONFIG_PACKAGE_luci-i18n-firewall-mr is not set +# CONFIG_PACKAGE_luci-i18n-firewall-ms is not set +# CONFIG_PACKAGE_luci-i18n-firewall-no is not set +# CONFIG_PACKAGE_luci-i18n-firewall-pl is not set +# CONFIG_PACKAGE_luci-i18n-firewall-pt is not set +# CONFIG_PACKAGE_luci-i18n-firewall-pt-br is not set +# CONFIG_PACKAGE_luci-i18n-firewall-ro is not set +# CONFIG_PACKAGE_luci-i18n-firewall-ru is not set +# CONFIG_PACKAGE_luci-i18n-firewall-sk is not set +# CONFIG_PACKAGE_luci-i18n-firewall-sv is not set +# CONFIG_PACKAGE_luci-i18n-firewall-tr is not set +# CONFIG_PACKAGE_luci-i18n-firewall-uk is not set +# CONFIG_PACKAGE_luci-i18n-firewall-vi is not set +# CONFIG_PACKAGE_luci-i18n-firewall-zh-cn is not set +# CONFIG_PACKAGE_luci-i18n-firewall-zh-tw is not set +# CONFIG_PACKAGE_luci-i18n-opkg-bg is not set +# CONFIG_PACKAGE_luci-i18n-opkg-ca is not set +# CONFIG_PACKAGE_luci-i18n-opkg-cs is not set +# CONFIG_PACKAGE_luci-i18n-opkg-de is not set +# CONFIG_PACKAGE_luci-i18n-opkg-el is not set +# CONFIG_PACKAGE_luci-i18n-opkg-en is not set +# CONFIG_PACKAGE_luci-i18n-opkg-es is not set +# CONFIG_PACKAGE_luci-i18n-opkg-fr is not set +# CONFIG_PACKAGE_luci-i18n-opkg-he is not set +# CONFIG_PACKAGE_luci-i18n-opkg-hi is not set +# CONFIG_PACKAGE_luci-i18n-opkg-hu is not set +# CONFIG_PACKAGE_luci-i18n-opkg-it is not set +# CONFIG_PACKAGE_luci-i18n-opkg-ja is not set +# CONFIG_PACKAGE_luci-i18n-opkg-ko is not set +# CONFIG_PACKAGE_luci-i18n-opkg-mr is not set +# CONFIG_PACKAGE_luci-i18n-opkg-ms is not set +# CONFIG_PACKAGE_luci-i18n-opkg-no is not set +# CONFIG_PACKAGE_luci-i18n-opkg-pl is not set +# CONFIG_PACKAGE_luci-i18n-opkg-pt is not set +# CONFIG_PACKAGE_luci-i18n-opkg-pt-br is not set +# CONFIG_PACKAGE_luci-i18n-opkg-ro is not set +# CONFIG_PACKAGE_luci-i18n-opkg-ru is not set +# CONFIG_PACKAGE_luci-i18n-opkg-sk is not set +# CONFIG_PACKAGE_luci-i18n-opkg-sv is not set +# CONFIG_PACKAGE_luci-i18n-opkg-tr is not set +# CONFIG_PACKAGE_luci-i18n-opkg-uk is not set +# CONFIG_PACKAGE_luci-i18n-opkg-vi is not set +# CONFIG_PACKAGE_luci-i18n-opkg-zh-cn is not set +# CONFIG_PACKAGE_luci-i18n-opkg-zh-tw is not set +# CONFIG_PACKAGE_luci-i18n-upnp-bg is not set +# CONFIG_PACKAGE_luci-i18n-upnp-ca is not set +# CONFIG_PACKAGE_luci-i18n-upnp-cs is not set +# CONFIG_PACKAGE_luci-i18n-upnp-de is not set +# CONFIG_PACKAGE_luci-i18n-upnp-el is not set +# CONFIG_PACKAGE_luci-i18n-upnp-en is not set +# CONFIG_PACKAGE_luci-i18n-upnp-es is not set +# CONFIG_PACKAGE_luci-i18n-upnp-fr is not set +# CONFIG_PACKAGE_luci-i18n-upnp-he is not set +# CONFIG_PACKAGE_luci-i18n-upnp-hi is not set +# CONFIG_PACKAGE_luci-i18n-upnp-hu is not set +# CONFIG_PACKAGE_luci-i18n-upnp-it is not set +# CONFIG_PACKAGE_luci-i18n-upnp-ja is not set +# CONFIG_PACKAGE_luci-i18n-upnp-ko is not set +# CONFIG_PACKAGE_luci-i18n-upnp-mr is not set +# CONFIG_PACKAGE_luci-i18n-upnp-ms is not set +# CONFIG_PACKAGE_luci-i18n-upnp-no is not set +# CONFIG_PACKAGE_luci-i18n-upnp-pl is not set +# CONFIG_PACKAGE_luci-i18n-upnp-pt is not set +# CONFIG_PACKAGE_luci-i18n-upnp-pt-br is not set +# CONFIG_PACKAGE_luci-i18n-upnp-ro is not set +# CONFIG_PACKAGE_luci-i18n-upnp-ru is not set +# CONFIG_PACKAGE_luci-i18n-upnp-sk is not set +# CONFIG_PACKAGE_luci-i18n-upnp-sv is not set +# CONFIG_PACKAGE_luci-i18n-upnp-tr is not set +# CONFIG_PACKAGE_luci-i18n-upnp-uk is not set +# CONFIG_PACKAGE_luci-i18n-upnp-vi is not set +# CONFIG_PACKAGE_luci-i18n-upnp-zh-cn is not set +# CONFIG_PACKAGE_luci-i18n-upnp-zh-tw is not set + +# +# Mail +# +# CONFIG_PACKAGE_alpine is not set +# CONFIG_PACKAGE_alpine-nossl is not set +# CONFIG_PACKAGE_bogofilter is not set +# CONFIG_PACKAGE_clamsmtp is not set +# CONFIG_PACKAGE_dovecot is not set +# CONFIG_PACKAGE_dovecot-pigeonhole is not set +# CONFIG_PACKAGE_dovecot-utils is not set +# CONFIG_PACKAGE_emailrelay is not set +# CONFIG_PACKAGE_fdm is not set +# CONFIG_PACKAGE_greyfix is not set +# CONFIG_PACKAGE_mailman is not set +# CONFIG_PACKAGE_mailsend is not set +# CONFIG_PACKAGE_mailsend-nossl is not set +# CONFIG_PACKAGE_msmtp is not set +# CONFIG_PACKAGE_msmtp-mta is not set +# CONFIG_PACKAGE_msmtp-nossl is not set +# CONFIG_PACKAGE_msmtp-queue is not set +# CONFIG_PACKAGE_mutt is not set +# CONFIG_PACKAGE_nail is not set +# CONFIG_PACKAGE_opendkim is not set +# CONFIG_PACKAGE_opendkim-tools is not set +# CONFIG_PACKAGE_postfix is not set + +# +# Select postfix build options +# +CONFIG_POSTFIX_TLS=y +CONFIG_POSTFIX_SASL=y +CONFIG_POSTFIX_LDAP=y +# CONFIG_POSTFIX_DB is not set +CONFIG_POSTFIX_CDB=y +CONFIG_POSTFIX_SQLITE=y +# CONFIG_POSTFIX_MYSQL is not set +# CONFIG_POSTFIX_PGSQL is not set +CONFIG_POSTFIX_PCRE=y +# CONFIG_POSTFIX_EAI is not set +# CONFIG_PACKAGE_ssmtp is not set + +# +# Multimedia +# + +# +# Streaming +# +# CONFIG_PACKAGE_oggfwd is not set +# CONFIG_PACKAGE_crtmpserver is not set +# CONFIG_PACKAGE_ffmpeg is not set +# CONFIG_PACKAGE_ffprobe is not set +# CONFIG_PACKAGE_ffserver is not set +# CONFIG_PACKAGE_fswebcam is not set +# CONFIG_PACKAGE_gerbera is not set +# CONFIG_PACKAGE_gphoto2 is not set +# CONFIG_PACKAGE_graphicsmagick is not set +# CONFIG_PACKAGE_grilo is not set +# CONFIG_PACKAGE_grilo-plugins is not set +# CONFIG_PACKAGE_gst1-libav is not set +# CONFIG_PACKAGE_gstreamer1-libs is not set +# CONFIG_PACKAGE_gstreamer1-plugins-bad is not set +# CONFIG_PACKAGE_gstreamer1-plugins-base is not set +# CONFIG_PACKAGE_gstreamer1-plugins-good is not set +# CONFIG_PACKAGE_gstreamer1-plugins-ugly is not set +# CONFIG_PACKAGE_gstreamer1-utils is not set +# CONFIG_PACKAGE_icecast is not set +# CONFIG_PACKAGE_lcdgrilo is not set +# CONFIG_PACKAGE_minidlna is not set +# CONFIG_PACKAGE_mjpg-streamer is not set +# CONFIG_PACKAGE_motion is not set +# CONFIG_PACKAGE_tvheadend is not set +# CONFIG_PACKAGE_v4l2rtspserver is not set +# CONFIG_PACKAGE_vips is not set +# CONFIG_PACKAGE_xupnpd is not set +# CONFIG_PACKAGE_youtube-dl is not set +# CONFIG_PACKAGE_youtube-dl-src is not set + +# +# Network +# + +# +# BitTorrent +# +# CONFIG_PACKAGE_mktorrent is not set +# CONFIG_PACKAGE_opentracker is not set +# CONFIG_PACKAGE_opentracker6 is not set +# CONFIG_PACKAGE_rtorrent is not set +# CONFIG_PACKAGE_rtorrent-rpc is not set +# CONFIG_PACKAGE_transmission-cli-mbedtls is not set +# CONFIG_PACKAGE_transmission-cli-openssl is not set +# CONFIG_PACKAGE_transmission-daemon-mbedtls is not set +# CONFIG_PACKAGE_transmission-daemon-openssl is not set +# CONFIG_PACKAGE_transmission-remote-mbedtls is not set +# CONFIG_PACKAGE_transmission-remote-openssl is not set + +# +# Captive Portals +# +# CONFIG_PACKAGE_apfree-wifidog is not set +# CONFIG_PACKAGE_coova-chilli is not set +# CONFIG_PACKAGE_nodogsplash is not set +# CONFIG_PACKAGE_opennds is not set +# CONFIG_PACKAGE_wifidog is not set +# CONFIG_PACKAGE_wifidog-ng-mbedtls is not set +# CONFIG_PACKAGE_wifidog-ng-nossl is not set +# CONFIG_PACKAGE_wifidog-ng-openssl is not set +# CONFIG_PACKAGE_wifidog-ng-wolfssl is not set +# CONFIG_PACKAGE_wifidog-tls is not set + +# +# Download Manager +# +# CONFIG_PACKAGE_ariang is not set +# CONFIG_PACKAGE_ariang-nginx is not set +# CONFIG_PACKAGE_webui-aria2 is not set + +# +# File Transfer +# +# CONFIG_PACKAGE_aria2 is not set +# CONFIG_PACKAGE_atftp is not set +# CONFIG_PACKAGE_atftpd is not set +CONFIG_PACKAGE_curl=y +# CONFIG_PACKAGE_gnurl is not set +# CONFIG_PACKAGE_lftp is not set +# CONFIG_PACKAGE_rosy-file-server is not set +# CONFIG_PACKAGE_rsync is not set +# CONFIG_PACKAGE_rsyncd is not set +# CONFIG_PACKAGE_vsftpd is not set +# CONFIG_PACKAGE_vsftpd-tls is not set +# CONFIG_PACKAGE_wget is not set +# CONFIG_PACKAGE_wget-nossl is not set + +# +# Filesystem +# +# CONFIG_PACKAGE_davfs2 is not set +# CONFIG_PACKAGE_ksmbd-avahi-service is not set +# CONFIG_PACKAGE_ksmbd-server is not set +# CONFIG_PACKAGE_ksmbd-utils is not set +# CONFIG_PACKAGE_netatalk is not set +# CONFIG_PACKAGE_nfs-kernel-server is not set +# CONFIG_PACKAGE_owftpd is not set +# CONFIG_PACKAGE_owhttpd is not set +# CONFIG_PACKAGE_owserver is not set +# CONFIG_PACKAGE_sshfs is not set + +# +# Firewall +# +CONFIG_PACKAGE_arptables=y +# CONFIG_PACKAGE_conntrack is not set +# CONFIG_PACKAGE_conntrackd is not set +CONFIG_PACKAGE_ebtables=y +# CONFIG_PACKAGE_ebtables-utils is not set +# CONFIG_PACKAGE_fwknop is not set +# CONFIG_PACKAGE_fwknopd is not set +CONFIG_PACKAGE_ip6tables=y +# CONFIG_PACKAGE_ip6tables-extra is not set +# CONFIG_PACKAGE_ip6tables-mod-nat is not set +CONFIG_PACKAGE_iptables=y +# CONFIG_IPTABLES_CONNLABEL is not set +# CONFIG_IPTABLES_NFTABLES is not set +# CONFIG_PACKAGE_iptables-mod-account is not set +# CONFIG_PACKAGE_iptables-mod-chaos is not set +# CONFIG_PACKAGE_iptables-mod-checksum is not set +# CONFIG_PACKAGE_iptables-mod-cluster is not set +# CONFIG_PACKAGE_iptables-mod-clusterip is not set +# CONFIG_PACKAGE_iptables-mod-condition is not set +CONFIG_PACKAGE_iptables-mod-conntrack-extra=y +# CONFIG_PACKAGE_iptables-mod-delude is not set +# CONFIG_PACKAGE_iptables-mod-dhcpmac is not set +# CONFIG_PACKAGE_iptables-mod-dnetmap is not set +CONFIG_PACKAGE_iptables-mod-extra=y +CONFIG_PACKAGE_iptables-mod-filter=y +# CONFIG_PACKAGE_iptables-mod-fuzzy is not set +# CONFIG_PACKAGE_iptables-mod-geoip is not set +# CONFIG_PACKAGE_iptables-mod-hashlimit is not set +# CONFIG_PACKAGE_iptables-mod-iface is not set +# CONFIG_PACKAGE_iptables-mod-ipmark is not set +CONFIG_PACKAGE_iptables-mod-ipopt=y +# CONFIG_PACKAGE_iptables-mod-ipp2p is not set +# CONFIG_PACKAGE_iptables-mod-iprange is not set +CONFIG_PACKAGE_iptables-mod-ipsec=y +# CONFIG_PACKAGE_iptables-mod-ipv4options is not set +# CONFIG_PACKAGE_iptables-mod-led is not set +# CONFIG_PACKAGE_iptables-mod-length2 is not set +# CONFIG_PACKAGE_iptables-mod-logmark is not set +# CONFIG_PACKAGE_iptables-mod-lscan is not set +# CONFIG_PACKAGE_iptables-mod-lua is not set +# CONFIG_PACKAGE_iptables-mod-nat-extra is not set +# CONFIG_PACKAGE_iptables-mod-nflog is not set +# CONFIG_PACKAGE_iptables-mod-nfqueue is not set +CONFIG_PACKAGE_iptables-mod-physdev=y +# CONFIG_PACKAGE_iptables-mod-psd is not set +# CONFIG_PACKAGE_iptables-mod-quota2 is not set +# CONFIG_PACKAGE_iptables-mod-rpfilter is not set +# CONFIG_PACKAGE_iptables-mod-sysrq is not set +# CONFIG_PACKAGE_iptables-mod-tarpit is not set +# CONFIG_PACKAGE_iptables-mod-tee is not set +# CONFIG_PACKAGE_iptables-mod-tproxy is not set +# CONFIG_PACKAGE_iptables-mod-trace is not set +# CONFIG_PACKAGE_iptables-mod-u32 is not set +# CONFIG_PACKAGE_iptables-mod-ulog is not set +# CONFIG_PACKAGE_iptaccount is not set +# CONFIG_PACKAGE_iptgeoip is not set +# CONFIG_PACKAGE_miniupnpc is not set +CONFIG_PACKAGE_miniupnpd=y +# CONFIG_PACKAGE_natpmpc is not set +CONFIG_PACKAGE_nftables=y +# CONFIG_PACKAGE_NFT_WITH_JSON is not set +# CONFIG_PACKAGE_shorewall is not set +# CONFIG_PACKAGE_shorewall-core is not set +# CONFIG_PACKAGE_shorewall-lite is not set +# CONFIG_PACKAGE_shorewall6 is not set +# CONFIG_PACKAGE_shorewall6-lite is not set +# CONFIG_PACKAGE_snort is not set +# CONFIG_PACKAGE_snort3 is not set + +# +# Firewall Tunnel +# +# CONFIG_PACKAGE_iodine is not set +# CONFIG_PACKAGE_iodined is not set + +# +# FreeRADIUS (version 3) +# +# CONFIG_PACKAGE_freeradius3 is not set +# CONFIG_PACKAGE_freeradius3-common is not set +# CONFIG_PACKAGE_freeradius3-utils is not set + +# +# IP Addresses and Names +# +# CONFIG_PACKAGE_aggregate is not set +# CONFIG_PACKAGE_announce is not set +# CONFIG_PACKAGE_avahi-autoipd is not set +# CONFIG_PACKAGE_avahi-daemon-service-http is not set +# CONFIG_PACKAGE_avahi-daemon-service-ssh is not set +CONFIG_PACKAGE_avahi-dbus-daemon=m +# CONFIG_PACKAGE_avahi-dnsconfd is not set +# CONFIG_PACKAGE_avahi-nodbus-daemon is not set +# CONFIG_PACKAGE_avahi-utils is not set +# CONFIG_PACKAGE_bind-check is not set +# CONFIG_PACKAGE_bind-client is not set +# CONFIG_PACKAGE_bind-dig is not set +# CONFIG_PACKAGE_bind-dnssec is not set +# CONFIG_PACKAGE_bind-host is not set +# CONFIG_PACKAGE_bind-nslookup is not set +# CONFIG_PACKAGE_bind-rndc is not set +# CONFIG_PACKAGE_bind-server is not set +# CONFIG_PACKAGE_bind-tools is not set +# CONFIG_PACKAGE_danish is not set +CONFIG_PACKAGE_ddns-scripts=y +# CONFIG_PACKAGE_ddns-scripts_cloudflare.com-v4 is not set +# CONFIG_PACKAGE_ddns-scripts_freedns_42_pl is not set +# CONFIG_PACKAGE_ddns-scripts_godaddy.com-v1 is not set +# CONFIG_PACKAGE_ddns-scripts_no-ip_com is not set +# CONFIG_PACKAGE_ddns-scripts_nsupdate is not set +# CONFIG_PACKAGE_ddns-scripts_route53-v1 is not set +# CONFIG_PACKAGE_dhcp-forwarder is not set +# CONFIG_PACKAGE_dnscrypt-proxy is not set +# CONFIG_PACKAGE_dnscrypt-proxy-resolvers is not set +# CONFIG_PACKAGE_dnsdist is not set + +# +# SSL support +# +CONFIG_DNSDIST_OPENSSL=y +# CONFIG_DNSDIST_GNUTLS is not set +# CONFIG_DNSDIST_NOSSL is not set +# CONFIG_PACKAGE_drill is not set +# CONFIG_PACKAGE_hostip is not set +# CONFIG_PACKAGE_idn is not set +# CONFIG_PACKAGE_idn2 is not set +# CONFIG_PACKAGE_inadyn is not set +# CONFIG_PACKAGE_isc-dhcp-client-ipv4 is not set +# CONFIG_PACKAGE_isc-dhcp-client-ipv6 is not set +# CONFIG_PACKAGE_isc-dhcp-omshell-ipv4 is not set +# CONFIG_PACKAGE_isc-dhcp-omshell-ipv6 is not set +# CONFIG_PACKAGE_isc-dhcp-relay-ipv4 is not set +CONFIG_PACKAGE_isc-dhcp-relay-ipv6=y +# CONFIG_PACKAGE_isc-dhcp-server-ipv4 is not set +# CONFIG_PACKAGE_isc-dhcp-server-ipv6 is not set +# CONFIG_PACKAGE_kadnode is not set +# CONFIG_PACKAGE_kea-admin is not set +# CONFIG_PACKAGE_kea-ctrl is not set +# CONFIG_PACKAGE_kea-dhcp-ddns is not set +# CONFIG_PACKAGE_kea-dhcp4 is not set +# CONFIG_PACKAGE_kea-dhcp6 is not set +# CONFIG_PACKAGE_kea-lfc is not set +# CONFIG_PACKAGE_kea-libs is not set +# CONFIG_PACKAGE_kea-perfdhcp is not set +# CONFIG_PACKAGE_knot is not set +# CONFIG_PACKAGE_knot-dig is not set +# CONFIG_PACKAGE_knot-host is not set +# CONFIG_PACKAGE_knot-keymgr is not set +# CONFIG_PACKAGE_knot-nsupdate is not set +# CONFIG_PACKAGE_knot-tests is not set +# CONFIG_PACKAGE_knot-zonecheck is not set +# CONFIG_PACKAGE_mdns-utils is not set +# CONFIG_PACKAGE_mdnsd is not set +# CONFIG_PACKAGE_mdnsresponder is not set +# CONFIG_PACKAGE_nsd is not set +# CONFIG_PACKAGE_nsd-control is not set +# CONFIG_PACKAGE_nsd-control-setup is not set +# CONFIG_PACKAGE_nsd-nossl is not set +# CONFIG_PACKAGE_ohybridproxy is not set +# CONFIG_PACKAGE_stubby is not set +# CONFIG_PACKAGE_tor-hs is not set +# CONFIG_PACKAGE_torsocks is not set +# CONFIG_PACKAGE_unbound-anchor is not set +# CONFIG_PACKAGE_unbound-checkconf is not set +# CONFIG_PACKAGE_unbound-control is not set +# CONFIG_PACKAGE_unbound-control-setup is not set +# CONFIG_PACKAGE_unbound-daemon is not set +# CONFIG_PACKAGE_unbound-daemon-heavy is not set +# CONFIG_PACKAGE_unbound-host is not set +CONFIG_PACKAGE_wsdd2=m +# CONFIG_PACKAGE_zonestitcher is not set + +# +# Instant Messaging +# +# CONFIG_PACKAGE_bitlbee is not set +# CONFIG_PACKAGE_irssi is not set +# CONFIG_PACKAGE_ngircd is not set +# CONFIG_PACKAGE_ngircd-nossl is not set +# CONFIG_PACKAGE_prosody is not set +# CONFIG_PACKAGE_quassel-irssi is not set +# CONFIG_PACKAGE_umurmur-mbedtls is not set +# CONFIG_PACKAGE_umurmur-openssl is not set +# CONFIG_PACKAGE_znc is not set + +# +# Linux ATM tools +# +# CONFIG_PACKAGE_atm-aread is not set +# CONFIG_PACKAGE_atm-atmaddr is not set +# CONFIG_PACKAGE_atm-atmdiag is not set +# CONFIG_PACKAGE_atm-atmdump is not set +# CONFIG_PACKAGE_atm-atmloop is not set +# CONFIG_PACKAGE_atm-atmsigd is not set +# CONFIG_PACKAGE_atm-atmswitch is not set +# CONFIG_PACKAGE_atm-atmtcp is not set +# CONFIG_PACKAGE_atm-awrite is not set +# CONFIG_PACKAGE_atm-bus is not set +# CONFIG_PACKAGE_atm-debug-tools is not set +# CONFIG_PACKAGE_atm-diagnostics is not set +# CONFIG_PACKAGE_atm-esi is not set +# CONFIG_PACKAGE_atm-ilmid is not set +# CONFIG_PACKAGE_atm-ilmidiag is not set +# CONFIG_PACKAGE_atm-lecs is not set +# CONFIG_PACKAGE_atm-les is not set +# CONFIG_PACKAGE_atm-mpcd is not set +# CONFIG_PACKAGE_atm-saaldump is not set +# CONFIG_PACKAGE_atm-sonetdiag is not set +# CONFIG_PACKAGE_atm-svc_recv is not set +# CONFIG_PACKAGE_atm-svc_send is not set +# CONFIG_PACKAGE_atm-tools is not set +# CONFIG_PACKAGE_atm-ttcp_atm is not set +# CONFIG_PACKAGE_atm-zeppelin is not set +# CONFIG_PACKAGE_br2684ctl is not set + +# +# LoRaWAN +# +# CONFIG_PACKAGE_libloragw-tests is not set +# CONFIG_PACKAGE_libloragw-utils is not set + +# +# NMAP Suite +# +# CONFIG_PACKAGE_ncat is not set +# CONFIG_PACKAGE_ncat-ssl is not set +# CONFIG_PACKAGE_ndiff is not set +# CONFIG_PACKAGE_nmap is not set +# CONFIG_PACKAGE_nmap-ssl is not set +# CONFIG_PACKAGE_nping is not set + +# +# NTRIP +# +# CONFIG_PACKAGE_ntripcaster is not set +# CONFIG_PACKAGE_ntripclient is not set +# CONFIG_PACKAGE_ntripserver is not set + +# +# OLSR.org network framework +# +# CONFIG_PACKAGE_oonf-dlep-proxy is not set +# CONFIG_PACKAGE_oonf-dlep-radio is not set +# CONFIG_PACKAGE_oonf-init-scripts is not set +# CONFIG_PACKAGE_oonf-olsrd2 is not set + +# +# Open vSwitch +# +# CONFIG_PACKAGE_openvswitch is not set +# CONFIG_PACKAGE_openvswitch-ovn-host is not set +# CONFIG_PACKAGE_openvswitch-ovn-north is not set +# CONFIG_PACKAGE_openvswitch-python is not set +# CONFIG_PACKAGE_openvswitch-python3 is not set + +# +# OpenLDAP +# +# CONFIG_PACKAGE_libopenldap is not set +CONFIG_OPENLDAP_DEBUG=y +# CONFIG_OPENLDAP_CRYPT is not set +# CONFIG_OPENLDAP_MONITOR is not set +# CONFIG_OPENLDAP_DB47 is not set +# CONFIG_OPENLDAP_ICU is not set +# CONFIG_PACKAGE_openldap-server is not set +# CONFIG_PACKAGE_openldap-utils is not set + +# +# Printing +# +CONFIG_PACKAGE_p910nd=m + +# +# Routing and Redirection +# +# CONFIG_PACKAGE_babel-pinger is not set +# CONFIG_PACKAGE_babeld is not set +# CONFIG_PACKAGE_batmand is not set +# CONFIG_PACKAGE_bcp38 is not set +# CONFIG_PACKAGE_bird1-ipv4 is not set +# CONFIG_PACKAGE_bird1-ipv4-uci is not set +# CONFIG_PACKAGE_bird1-ipv6 is not set +# CONFIG_PACKAGE_bird1-ipv6-uci is not set +# CONFIG_PACKAGE_bird1c-ipv4 is not set +# CONFIG_PACKAGE_bird1c-ipv6 is not set +# CONFIG_PACKAGE_bird1cl-ipv4 is not set +# CONFIG_PACKAGE_bird1cl-ipv6 is not set +# CONFIG_PACKAGE_bird2 is not set +# CONFIG_PACKAGE_bird2c is not set +# CONFIG_PACKAGE_bird2cl is not set +# CONFIG_PACKAGE_bmx6 is not set +# CONFIG_PACKAGE_bmx7 is not set +# CONFIG_PACKAGE_cjdns is not set +# CONFIG_PACKAGE_cjdns-tests is not set +# CONFIG_PACKAGE_dcstad is not set +# CONFIG_PACKAGE_dcwapd is not set +# CONFIG_PACKAGE_devlink is not set +# CONFIG_PACKAGE_genl is not set +# CONFIG_PACKAGE_igmpproxy is not set +CONFIG_PACKAGE_ip-bridge=y +CONFIG_PACKAGE_ip-full=y +# CONFIG_PACKAGE_ip-tiny is not set +# CONFIG_PACKAGE_lldpd is not set +# CONFIG_PACKAGE_mcproxy is not set +# CONFIG_PACKAGE_mrmctl is not set +# CONFIG_PACKAGE_mwan3 is not set +# CONFIG_PACKAGE_nstat is not set +# CONFIG_PACKAGE_olsrd is not set +# CONFIG_PACKAGE_prince is not set +# CONFIG_PACKAGE_quagga is not set +# CONFIG_PACKAGE_rdma is not set +# CONFIG_PACKAGE_relayd is not set +# CONFIG_PACKAGE_smcroute is not set +# CONFIG_PACKAGE_ss is not set +# CONFIG_PACKAGE_sslh is not set +# CONFIG_PACKAGE_tc is not set +# CONFIG_PACKAGE_tcpproxy is not set +# CONFIG_PACKAGE_vis is not set +# CONFIG_PACKAGE_yggdrasil is not set + +# +# SSH +# +# CONFIG_PACKAGE_autossh is not set +# CONFIG_PACKAGE_openssh-client is not set +# CONFIG_PACKAGE_openssh-client-utils is not set +# CONFIG_PACKAGE_openssh-keygen is not set +# CONFIG_PACKAGE_openssh-moduli is not set +# CONFIG_PACKAGE_openssh-server is not set +# CONFIG_PACKAGE_openssh-server-pam is not set +# CONFIG_PACKAGE_openssh-sftp-avahi-service is not set +# CONFIG_PACKAGE_openssh-sftp-client is not set +CONFIG_PACKAGE_openssh-sftp-server=m +# CONFIG_PACKAGE_sshtunnel is not set +# CONFIG_PACKAGE_tmate is not set + +# +# THC-IPv6 attack and analyzing toolkit +# +# CONFIG_PACKAGE_thc-ipv6-address6 is not set +# CONFIG_PACKAGE_thc-ipv6-alive6 is not set +# CONFIG_PACKAGE_thc-ipv6-covert-send6 is not set +# CONFIG_PACKAGE_thc-ipv6-covert-send6d is not set +# CONFIG_PACKAGE_thc-ipv6-denial6 is not set +# CONFIG_PACKAGE_thc-ipv6-detect-new-ip6 is not set +# CONFIG_PACKAGE_thc-ipv6-detect-sniffer6 is not set +# CONFIG_PACKAGE_thc-ipv6-dnsdict6 is not set +# CONFIG_PACKAGE_thc-ipv6-dnsrevenum6 is not set +# CONFIG_PACKAGE_thc-ipv6-dos-new-ip6 is not set +# CONFIG_PACKAGE_thc-ipv6-dump-router6 is not set +# CONFIG_PACKAGE_thc-ipv6-exploit6 is not set +# CONFIG_PACKAGE_thc-ipv6-fake-advertise6 is not set +# CONFIG_PACKAGE_thc-ipv6-fake-dhcps6 is not set +# CONFIG_PACKAGE_thc-ipv6-fake-dns6d is not set +# CONFIG_PACKAGE_thc-ipv6-fake-dnsupdate6 is not set +# CONFIG_PACKAGE_thc-ipv6-fake-mipv6 is not set +# CONFIG_PACKAGE_thc-ipv6-fake-mld26 is not set +# CONFIG_PACKAGE_thc-ipv6-fake-mld6 is not set +# CONFIG_PACKAGE_thc-ipv6-fake-mldrouter6 is not set +# CONFIG_PACKAGE_thc-ipv6-fake-router26 is not set +# CONFIG_PACKAGE_thc-ipv6-fake-router6 is not set +# CONFIG_PACKAGE_thc-ipv6-fake-solicitate6 is not set +# CONFIG_PACKAGE_thc-ipv6-flood-advertise6 is not set +# CONFIG_PACKAGE_thc-ipv6-flood-dhcpc6 is not set +# CONFIG_PACKAGE_thc-ipv6-flood-mld26 is not set +# CONFIG_PACKAGE_thc-ipv6-flood-mld6 is not set +# CONFIG_PACKAGE_thc-ipv6-flood-mldrouter6 is not set +# CONFIG_PACKAGE_thc-ipv6-flood-router26 is not set +# CONFIG_PACKAGE_thc-ipv6-flood-router6 is not set +# CONFIG_PACKAGE_thc-ipv6-flood-solicitate6 is not set +# CONFIG_PACKAGE_thc-ipv6-fragmentation6 is not set +# CONFIG_PACKAGE_thc-ipv6-fuzz-dhcpc6 is not set +# CONFIG_PACKAGE_thc-ipv6-fuzz-dhcps6 is not set +# CONFIG_PACKAGE_thc-ipv6-fuzz-ip6 is not set +# CONFIG_PACKAGE_thc-ipv6-implementation6 is not set +# CONFIG_PACKAGE_thc-ipv6-implementation6d is not set +# CONFIG_PACKAGE_thc-ipv6-inverse-lookup6 is not set +# CONFIG_PACKAGE_thc-ipv6-kill-router6 is not set +# CONFIG_PACKAGE_thc-ipv6-ndpexhaust6 is not set +# CONFIG_PACKAGE_thc-ipv6-node-query6 is not set +# CONFIG_PACKAGE_thc-ipv6-parasite6 is not set +# CONFIG_PACKAGE_thc-ipv6-passive-discovery6 is not set +# CONFIG_PACKAGE_thc-ipv6-randicmp6 is not set +# CONFIG_PACKAGE_thc-ipv6-redir6 is not set +# CONFIG_PACKAGE_thc-ipv6-rsmurf6 is not set +# CONFIG_PACKAGE_thc-ipv6-sendpees6 is not set +# CONFIG_PACKAGE_thc-ipv6-sendpeesmp6 is not set +# CONFIG_PACKAGE_thc-ipv6-smurf6 is not set +# CONFIG_PACKAGE_thc-ipv6-thcping6 is not set +# CONFIG_PACKAGE_thc-ipv6-toobig6 is not set +# CONFIG_PACKAGE_thc-ipv6-trace6 is not set + +# +# Time Synchronization +# +# CONFIG_PACKAGE_chrony is not set +# CONFIG_PACKAGE_htpdate is not set +CONFIG_PACKAGE_linuxptp=m +# CONFIG_PACKAGE_ntp-keygen is not set +# CONFIG_PACKAGE_ntp-utils is not set +# CONFIG_PACKAGE_ntpclient is not set +# CONFIG_PACKAGE_ntpd is not set +# CONFIG_PACKAGE_ntpdate is not set + +# +# VPN +# +# CONFIG_PACKAGE_chaosvpn is not set +# CONFIG_PACKAGE_fastd is not set +# CONFIG_PACKAGE_ipsec-tools is not set +# CONFIG_PACKAGE_libreswan is not set +# CONFIG_PACKAGE_ocserv is not set +# CONFIG_PACKAGE_openconnect is not set +# CONFIG_PACKAGE_opennhrp is not set +CONFIG_PACKAGE_openswan=y +# CONFIG_PACKAGE_openvpn-easy-rsa is not set +# CONFIG_PACKAGE_openvpn-mbedtls is not set +# CONFIG_PACKAGE_openvpn-nossl is not set +# CONFIG_PACKAGE_openvpn-openssl is not set +# CONFIG_PACKAGE_pptpd is not set +# CONFIG_PACKAGE_softethervpn-base is not set +# CONFIG_PACKAGE_softethervpn-bridge is not set +# CONFIG_PACKAGE_softethervpn-client is not set +# CONFIG_PACKAGE_softethervpn-server is not set +# CONFIG_PACKAGE_softethervpn5-bridge is not set +# CONFIG_PACKAGE_softethervpn5-client is not set +# CONFIG_PACKAGE_softethervpn5-server is not set +# CONFIG_PACKAGE_sstp-client is not set +# CONFIG_PACKAGE_strongswan is not set +# CONFIG_PACKAGE_tinc is not set +# CONFIG_PACKAGE_uanytun is not set +# CONFIG_PACKAGE_uanytun-nettle is not set +# CONFIG_PACKAGE_uanytun-nocrypt is not set +# CONFIG_PACKAGE_uanytun-sslcrypt is not set +# CONFIG_PACKAGE_vpnc is not set +# CONFIG_PACKAGE_vpnc-scripts is not set +# CONFIG_PACKAGE_wireguard is not set +# CONFIG_PACKAGE_wireguard-tools is not set +# CONFIG_PACKAGE_zerotier is not set + +# +# Version Control Systems +# +# CONFIG_PACKAGE_git is not set +# CONFIG_PACKAGE_git-http is not set +# CONFIG_PACKAGE_subversion-client is not set +# CONFIG_PACKAGE_subversion-libs is not set +# CONFIG_PACKAGE_subversion-server is not set + +# +# WWAN +# +# CONFIG_PACKAGE_adb-enablemodem is not set +# CONFIG_PACKAGE_comgt is not set +# CONFIG_PACKAGE_comgt-directip is not set +# CONFIG_PACKAGE_uqmi is not set + +# +# Web Servers/Proxies +# +# CONFIG_PACKAGE_apache is not set +CONFIG_PACKAGE_cgi-io=y +# CONFIG_PACKAGE_clamav is not set +# CONFIG_PACKAGE_e2guardian is not set +# CONFIG_PACKAGE_freshclam is not set +# CONFIG_PACKAGE_haproxy is not set +# CONFIG_PACKAGE_haproxy-nossl is not set +# CONFIG_PACKAGE_kcptun-c is not set +# CONFIG_PACKAGE_kcptun-s is not set +# CONFIG_PACKAGE_lighttpd is not set +# CONFIG_PACKAGE_nginx is not set +# CONFIG_PACKAGE_nginx-all-module is not set +# CONFIG_PACKAGE_nginx-mod-luci is not set +# CONFIG_PACKAGE_nginx-mod-luci-ssl is not set +# CONFIG_PACKAGE_nginx-ssl is not set +# CONFIG_PACKAGE_polipo is not set +# CONFIG_PACKAGE_privoxy is not set +# CONFIG_PACKAGE_radicale-py2 is not set +# CONFIG_PACKAGE_radicale-py3 is not set +# CONFIG_PACKAGE_radicale2 is not set +# CONFIG_PACKAGE_radicale2-examples is not set +# CONFIG_PACKAGE_radicale2-src is not set +# CONFIG_PACKAGE_shadowsocks-libev-config is not set +# CONFIG_PACKAGE_shadowsocks-libev-ss-local is not set +# CONFIG_PACKAGE_shadowsocks-libev-ss-redir is not set +# CONFIG_PACKAGE_shadowsocks-libev-ss-rules is not set +# CONFIG_PACKAGE_shadowsocks-libev-ss-server is not set +# CONFIG_PACKAGE_shadowsocks-libev-ss-tunnel is not set +# CONFIG_PACKAGE_sockd is not set +# CONFIG_PACKAGE_socksify is not set +# CONFIG_PACKAGE_spawn-fcgi is not set +# CONFIG_PACKAGE_squid is not set +# CONFIG_PACKAGE_tinyproxy is not set +CONFIG_PACKAGE_uhttpd=y +# CONFIG_PACKAGE_uhttpd-mod-lua is not set +# CONFIG_PACKAGE_uhttpd-mod-ubus is not set +# CONFIG_PACKAGE_uwsgi is not set + +# +# Wireless +# +# CONFIG_PACKAGE_hcxdumptool is not set +# CONFIG_PACKAGE_hcxtools is not set + +# +# dial-in/up +# + +# +# tcprelay +# +# CONFIG_PACKAGE_tcpbridge is not set +# CONFIG_PACKAGE_tcpcapinfo is not set +# CONFIG_PACKAGE_tcpliveplay is not set +# CONFIG_PACKAGE_tcpprep is not set +# CONFIG_PACKAGE_tcpreplay is not set +# CONFIG_PACKAGE_tcpreplay-all is not set +# CONFIG_PACKAGE_tcpreplay-edit is not set +# CONFIG_PACKAGE_tcprewrite is not set + +# +# wireless +# +# CONFIG_PACKAGE_aircrack-ng is not set +# CONFIG_PACKAGE_airmon-ng is not set +# CONFIG_PACKAGE_dynapoint is not set +# CONFIG_PACKAGE_horst is not set +# CONFIG_PACKAGE_kismet-client is not set +# CONFIG_PACKAGE_kismet-drone is not set +# CONFIG_PACKAGE_kismet-server is not set +# CONFIG_PACKAGE_pixiewps is not set +# CONFIG_PACKAGE_reaver is not set +# CONFIG_PACKAGE_wavemon is not set +# CONFIG_PACKAGE_wifischedule is not set +# CONFIG_PACKAGE_464xlat is not set +# CONFIG_PACKAGE_6in4 is not set +CONFIG_PACKAGE_6rd=y +CONFIG_PACKAGE_6to4=y +# CONFIG_PACKAGE_acme is not set +# CONFIG_PACKAGE_acme-dnsapi is not set +# CONFIG_PACKAGE_adblock is not set +# CONFIG_PACKAGE_addrwatch is not set +# CONFIG_PACKAGE_ahcpd is not set +# CONFIG_PACKAGE_alfred is not set +# CONFIG_PACKAGE_apcupsd is not set +# CONFIG_PACKAGE_apcupsd-cgi is not set +# CONFIG_PACKAGE_apinger is not set +# CONFIG_PACKAGE_arp-scan is not set +# CONFIG_PACKAGE_banip is not set +# CONFIG_PACKAGE_batctl-default is not set +# CONFIG_PACKAGE_batctl-full is not set +# CONFIG_PACKAGE_batctl-tiny is not set +# CONFIG_PACKAGE_beanstalkd is not set +# CONFIG_PACKAGE_bmon is not set +# CONFIG_PACKAGE_boinc is not set +# CONFIG_PACKAGE_bwm-ng is not set +# CONFIG_PACKAGE_chat is not set +# CONFIG_PACKAGE_cifsmount is not set +# CONFIG_PACKAGE_coap-server is not set +# CONFIG_PACKAGE_conserver is not set +# CONFIG_PACKAGE_cshark is not set +# CONFIG_PACKAGE_daemonlogger is not set +# CONFIG_PACKAGE_darkstat is not set +# CONFIG_PACKAGE_dhcpcd is not set +# CONFIG_PACKAGE_dmapd is not set +# CONFIG_PACKAGE_dnscrypt-proxy2 is not set +# CONFIG_PACKAGE_ds-lite is not set +# CONFIG_PACKAGE_eapol-test is not set +# CONFIG_PACKAGE_esniper is not set +# CONFIG_PACKAGE_etherwake is not set +CONFIG_PACKAGE_ethtool=y +# CONFIG_ETHTOOL_PRETTY_DUMP is not set +# CONFIG_PACKAGE_fakeidentd is not set +# CONFIG_PACKAGE_foolsm is not set +# CONFIG_PACKAGE_fping is not set +# CONFIG_PACKAGE_geth is not set +# CONFIG_PACKAGE_gnunet is not set +# CONFIG_PACKAGE_gre is not set +# CONFIG_PACKAGE_hnet-full is not set +# CONFIG_PACKAGE_hnet-full-l2tp is not set +# CONFIG_PACKAGE_hnet-full-secure is not set +# CONFIG_PACKAGE_hnetd-nossl is not set +# CONFIG_PACKAGE_hnetd-openssl is not set +# CONFIG_PACKAGE_hostapd is not set +CONFIG_PACKAGE_hostapd-common=y +# CONFIG_PACKAGE_hostapd-common-old is not set +# CONFIG_PACKAGE_hostapd-macsec is not set +# CONFIG_PACKAGE_hostapd-mini is not set +CONFIG_PACKAGE_hostapd-utils=y +# CONFIG_PACKAGE_httping is not set +# CONFIG_PACKAGE_httping-nossl is not set +# CONFIG_PACKAGE_https-dns-proxy is not set +# CONFIG_PACKAGE_i2pd is not set +# CONFIG_PACKAGE_ibrdtn-tools is not set +# CONFIG_PACKAGE_ibrdtnd is not set +# CONFIG_PACKAGE_ifstat is not set +# CONFIG_PACKAGE_iftop is not set +# CONFIG_PACKAGE_iiod is not set +# CONFIG_PACKAGE_iotivity is not set +# CONFIG_PACKAGE_iotivity-cpp is not set +# CONFIG_PACKAGE_iotivity-example-garage is not set +# CONFIG_PACKAGE_iotivity-example-simple is not set +# CONFIG_PACKAGE_iotivity-oic-middle is not set +# CONFIG_PACKAGE_iotivity-resource-container-hue is not set +# CONFIG_PACKAGE_iotivity-resource-container-lib is not set +# CONFIG_PACKAGE_iotivity-resource-container-sample is not set +# CONFIG_PACKAGE_iotivity-resource-directory-lib is not set +# CONFIG_PACKAGE_iperf is not set +# CONFIG_PACKAGE_iperf3 is not set +# CONFIG_PACKAGE_iperf3-ssl is not set +# CONFIG_PACKAGE_ipip is not set +CONFIG_PACKAGE_ipset=y +# CONFIG_PACKAGE_ipset-dns is not set +# CONFIG_PACKAGE_iptraf-ng is not set +# CONFIG_PACKAGE_iputils-arping is not set +# CONFIG_PACKAGE_iputils-clockdiff is not set +# CONFIG_PACKAGE_iputils-ping is not set +# CONFIG_PACKAGE_iputils-ping6 is not set +# CONFIG_PACKAGE_iputils-tftpd is not set +# CONFIG_PACKAGE_iputils-tracepath is not set +# CONFIG_PACKAGE_iputils-tracepath6 is not set +# CONFIG_PACKAGE_iputils-traceroute6 is not set +# CONFIG_PACKAGE_ipvsadm is not set +CONFIG_PACKAGE_iw=y +# CONFIG_PACKAGE_jool is not set +# CONFIG_PACKAGE_jool-tools is not set +# CONFIG_PACKAGE_keepalived is not set +# CONFIG_PACKAGE_knxd is not set +# CONFIG_PACKAGE_kplex is not set +# CONFIG_PACKAGE_krb5-client is not set +# CONFIG_PACKAGE_krb5-libs is not set +# CONFIG_PACKAGE_krb5-server is not set +# CONFIG_PACKAGE_krb5-server-extras is not set +# CONFIG_PACKAGE_lacpd is not set +CONFIG_PACKAGE_libipset=y +# CONFIG_PACKAGE_libndp is not set +# CONFIG_PACKAGE_linknx is not set +# CONFIG_PACKAGE_lynx is not set +# CONFIG_PACKAGE_mac-telnet-client is not set +# CONFIG_PACKAGE_mac-telnet-discover is not set +# CONFIG_PACKAGE_mac-telnet-ping is not set +# CONFIG_PACKAGE_mac-telnet-server is not set +# CONFIG_PACKAGE_map is not set +# CONFIG_PACKAGE_memcached is not set +# CONFIG_PACKAGE_mii-tool is not set +# CONFIG_PACKAGE_mikrotik-btest is not set +# CONFIG_PACKAGE_mini_snmpd is not set +# CONFIG_PACKAGE_minimalist-pcproxy is not set +# CONFIG_PACKAGE_modemmanager is not set +# CONFIG_PACKAGE_mosquitto-client-nossl is not set +# CONFIG_PACKAGE_mosquitto-client-ssl is not set +# CONFIG_PACKAGE_mosquitto-nossl is not set +# CONFIG_PACKAGE_mosquitto-ssl is not set +# CONFIG_PACKAGE_mrd6 is not set +# CONFIG_PACKAGE_mtr is not set +# CONFIG_PACKAGE_nbd is not set +# CONFIG_PACKAGE_nbd-server is not set +# CONFIG_PACKAGE_ncp is not set +# CONFIG_PACKAGE_ndppd is not set +# CONFIG_PACKAGE_ndptool is not set +# CONFIG_PACKAGE_netcat is not set +# CONFIG_PACKAGE_netdiscover is not set +# CONFIG_PACKAGE_netifyd is not set +# CONFIG_PACKAGE_netperf is not set +# CONFIG_PACKAGE_nextdns is not set +# CONFIG_PACKAGE_nlbwmon is not set +# CONFIG_PACKAGE_noping is not set +# CONFIG_PACKAGE_nut is not set +# CONFIG_PACKAGE_obfs4proxy is not set +# CONFIG_PACKAGE_obfsproxy is not set +# CONFIG_PACKAGE_obfsproxy-src is not set +# CONFIG_PACKAGE_odhcp6c is not set +# CONFIG_PACKAGE_odhcpd is not set +# CONFIG_PACKAGE_odhcpd-ipv6only is not set +# CONFIG_PACKAGE_ola is not set +# CONFIG_PACKAGE_omcproxy is not set +# CONFIG_PACKAGE_oor is not set +# CONFIG_PACKAGE_oping is not set +# CONFIG_PACKAGE_pagekitec is not set +# CONFIG_PACKAGE_pen is not set +# CONFIG_PACKAGE_phantap is not set +# CONFIG_PACKAGE_pimbd is not set +# CONFIG_PACKAGE_pingcheck is not set +# CONFIG_PACKAGE_port-mirroring is not set +# CONFIG_PACKAGE_ppp is not set +# CONFIG_PACKAGE_ppp-multilink is not set +# CONFIG_PACKAGE_pppossh is not set +# CONFIG_PACKAGE_proto-bonding is not set +# CONFIG_PACKAGE_ptunnel-ng is not set +# CONFIG_PACKAGE_radsecproxy is not set +# CONFIG_PACKAGE_ratechecker is not set +# CONFIG_PACKAGE_redsocks is not set +# CONFIG_PACKAGE_remserial is not set +# CONFIG_PACKAGE_restic-rest-server is not set +# CONFIG_PACKAGE_rpcbind is not set +# CONFIG_PACKAGE_rssileds is not set +# CONFIG_PACKAGE_rstp is not set +# CONFIG_PACKAGE_rsyslog is not set +# CONFIG_PACKAGE_safe-search is not set +# CONFIG_PACKAGE_samba36-client is not set +# CONFIG_PACKAGE_samba36-hotplug is not set +# CONFIG_PACKAGE_samba36-net is not set +# CONFIG_PACKAGE_samba36-server is not set +# CONFIG_PACKAGE_samba4-admin is not set +# CONFIG_PACKAGE_samba4-client is not set +CONFIG_PACKAGE_samba4-libs=m +CONFIG_PACKAGE_samba4-server=m +# CONFIG_SAMBA4_SERVER_NETBIOS is not set +# CONFIG_SAMBA4_SERVER_AVAHI is not set +# CONFIG_SAMBA4_SERVER_VFS is not set +# CONFIG_SAMBA4_SERVER_VFSX is not set +# CONFIG_SAMBA4_SERVER_AD_DC is not set +# CONFIG_PACKAGE_samba4-utils is not set +# CONFIG_PACKAGE_scapy is not set +# CONFIG_PACKAGE_sctp-tools is not set +# CONFIG_PACKAGE_seafile-ccnet is not set +# CONFIG_PACKAGE_seafile-seahub is not set +# CONFIG_PACKAGE_seafile-server is not set +# CONFIG_PACKAGE_ser2net is not set +# CONFIG_PACKAGE_simple-adblock is not set +# CONFIG_PACKAGE_smartsnmpd is not set +# CONFIG_PACKAGE_snmp-mibs is not set +# CONFIG_PACKAGE_snmp-utils is not set +# CONFIG_PACKAGE_snmpd is not set +# CONFIG_PACKAGE_snmptrapd is not set +# CONFIG_PACKAGE_socat is not set +# CONFIG_PACKAGE_softflowd is not set +# CONFIG_PACKAGE_soloscli is not set +# CONFIG_PACKAGE_speedtest-netperf is not set +# CONFIG_PACKAGE_spoofer is not set +# CONFIG_PACKAGE_stunnel is not set +# CONFIG_PACKAGE_tac_plus is not set +# CONFIG_PACKAGE_tac_plus-pam is not set +# CONFIG_PACKAGE_tayga is not set +CONFIG_PACKAGE_tcpdump=y +# CONFIG_PACKAGE_tcpdump-mini is not set +# CONFIG_PACKAGE_tgt is not set +# CONFIG_PACKAGE_tor is not set +# CONFIG_PACKAGE_tor-fw-helper is not set +# CONFIG_PACKAGE_tor-gencert is not set +# CONFIG_PACKAGE_tor-geoip is not set +# CONFIG_PACKAGE_tor-resolve is not set +# CONFIG_PACKAGE_trafficshaper is not set +# CONFIG_PACKAGE_travelmate is not set +# CONFIG_PACKAGE_u2pnpd is not set +CONFIG_PACKAGE_uclient-fetch=y +# CONFIG_PACKAGE_udptunnel is not set +# CONFIG_PACKAGE_udpxy is not set +# CONFIG_PACKAGE_ulogd is not set +# CONFIG_PACKAGE_umbim is not set +# CONFIG_PACKAGE_umdns is not set +# CONFIG_PACKAGE_usbip is not set +# CONFIG_PACKAGE_vallumd is not set +# CONFIG_PACKAGE_vncrepeater is not set +# CONFIG_PACKAGE_vnstat is not set +# CONFIG_PACKAGE_vpn-policy-routing is not set +# CONFIG_PACKAGE_vpnbypass is not set +# CONFIG_PACKAGE_vti is not set +# CONFIG_PACKAGE_vxlan is not set +# CONFIG_PACKAGE_wakeonlan is not set +CONFIG_PACKAGE_wpa-cli=y +# CONFIG_PACKAGE_wpa-supplicant is not set +CONFIG_WPA_SUPPLICANT_OPENSSL=y +# CONFIG_WPA_RFKILL_SUPPORT is not set +CONFIG_WPA_MSG_MIN_PRIORITY=0 +# CONFIG_DRIVER_WEXT_SUPPORT is not set +CONFIG_DRIVER_11N_SUPPORT=y +CONFIG_DRIVER_11W_SUPPORT=y +# CONFIG_PACKAGE_wpa-supplicant-macsec is not set +# CONFIG_PACKAGE_wpa-supplicant-mesh is not set +# CONFIG_PACKAGE_wpa-supplicant-mini is not set +# CONFIG_PACKAGE_wpa-supplicant-p2p is not set +# CONFIG_PACKAGE_wpad is not set +CONFIG_PACKAGE_wpad-mesh=y +# CONFIG_PACKAGE_wpad-mini is not set +# CONFIG_PACKAGE_wpan-tools is not set +# CONFIG_PACKAGE_wwan is not set +# CONFIG_PACKAGE_xfrm is not set +# CONFIG_PACKAGE_xinetd is not set + +# +# QCA firmware mount +# +CONFIG_PACKAGE_wififw_mount_script=y + +# +# QCA software +# +CONFIG_PACKAGE_qca-wifi-scripts=y +CONFIG_PACKAGE_sigma-dut-open=y + +# +# QTI software +# + +# +# Network Devices +# +# CONFIG_PACKAGE_qca-nss-fw-cp-enterprise is not set +# CONFIG_PACKAGE_qca-nss-fw-cp-retail is not set + +# +# Sound +# +CONFIG_PACKAGE_alsa-utils=y +# CONFIG_PACKAGE_alsa-utils-seq is not set +# CONFIG_PACKAGE_alsa-utils-tests is not set +# CONFIG_PACKAGE_espeak is not set +# CONFIG_PACKAGE_faad2 is not set +# CONFIG_PACKAGE_forked-daapd is not set +# CONFIG_PACKAGE_ices is not set +# CONFIG_PACKAGE_lame is not set +# CONFIG_PACKAGE_lame-lib is not set +# CONFIG_PACKAGE_liblo-utils is not set +# CONFIG_PACKAGE_madplay is not set +# CONFIG_PACKAGE_madplay-alsa is not set +# CONFIG_PACKAGE_moc is not set +# CONFIG_PACKAGE_mpc is not set +# CONFIG_PACKAGE_mpd-avahi-service is not set +# CONFIG_PACKAGE_mpd-full is not set +# CONFIG_PACKAGE_mpd-mini is not set +# CONFIG_PACKAGE_mpg123 is not set +# CONFIG_PACKAGE_opus-tools is not set +# CONFIG_PACKAGE_pianod is not set +# CONFIG_PACKAGE_pianod-client is not set +# CONFIG_PACKAGE_portaudio is not set +# CONFIG_PACKAGE_pulseaudio-daemon is not set +# CONFIG_PACKAGE_pulseaudio-daemon-avahi is not set +# CONFIG_PACKAGE_shairplay is not set +# CONFIG_PACKAGE_shairport-sync-mbedtls is not set +# CONFIG_PACKAGE_shairport-sync-mini is not set +# CONFIG_PACKAGE_shairport-sync-openssl is not set +# CONFIG_PACKAGE_shine is not set +# CONFIG_PACKAGE_sox is not set +# CONFIG_PACKAGE_squeezelite-full is not set +# CONFIG_PACKAGE_squeezelite-mini is not set +# CONFIG_PACKAGE_svox is not set +# CONFIG_PACKAGE_upmpdcli is not set + +# +# testAppUsingBreakpad +# +# CONFIG_PACKAGE_testAppUsingBreakpad is not set + +# +# Utilities +# + +# +# BigClown +# +# CONFIG_PACKAGE_bigclown-control-tool is not set +# CONFIG_PACKAGE_bigclown-firmware-tool is not set +# CONFIG_PACKAGE_bigclown-mqtt2influxdb is not set + +# +# Boot Loaders +# +# CONFIG_PACKAGE_fconfig is not set +CONFIG_PACKAGE_uboot-envtools=y + +# +# Compression +# +# CONFIG_PACKAGE_bsdtar is not set +# CONFIG_PACKAGE_bsdtar-noopenssl is not set +# CONFIG_PACKAGE_bzip2 is not set +# CONFIG_PACKAGE_gzip is not set +# CONFIG_PACKAGE_lz4 is not set +# CONFIG_PACKAGE_unrar is not set +# CONFIG_PACKAGE_unzip is not set +# CONFIG_PACKAGE_xz-utils is not set +# CONFIG_PACKAGE_zipcmp is not set +# CONFIG_PACKAGE_zipmerge is not set +# CONFIG_PACKAGE_ziptool is not set +# CONFIG_PACKAGE_zstd is not set + +# +# Disc +# +# CONFIG_PACKAGE_blkdiscard is not set +# CONFIG_PACKAGE_blkid is not set +# CONFIG_PACKAGE_blockdev is not set +# CONFIG_PACKAGE_cfdisk is not set +# CONFIG_PACKAGE_cgdisk is not set +# CONFIG_PACKAGE_eject is not set +CONFIG_PACKAGE_fdisk=m +# CONFIG_PACKAGE_findfs is not set +# CONFIG_PACKAGE_fio is not set +# CONFIG_PACKAGE_fixparts is not set +# CONFIG_PACKAGE_gdisk is not set +# CONFIG_PACKAGE_hd-idle is not set +# CONFIG_PACKAGE_hdparm is not set +# CONFIG_PACKAGE_lsblk is not set +CONFIG_PACKAGE_lvm2=m +CONFIG_PACKAGE_mdadm=m +# CONFIG_PACKAGE_partx-utils is not set +# CONFIG_PACKAGE_sfdisk is not set +# CONFIG_PACKAGE_sgdisk is not set +# CONFIG_PACKAGE_wipefs is not set + +# +# Editors +# +# CONFIG_PACKAGE_joe is not set +# CONFIG_PACKAGE_jupp is not set +# CONFIG_PACKAGE_mg is not set +# CONFIG_PACKAGE_nano is not set +# CONFIG_PACKAGE_nano-plus is not set +# CONFIG_PACKAGE_vim is not set +# CONFIG_PACKAGE_vim-full is not set +# CONFIG_PACKAGE_vim-fuller is not set +# CONFIG_PACKAGE_vim-help is not set +# CONFIG_PACKAGE_vim-runtime is not set +# CONFIG_PACKAGE_zile is not set + +# +# Encryption +# +# CONFIG_PACKAGE_ccrypt is not set +# CONFIG_PACKAGE_certtool is not set +CONFIG_PACKAGE_cryptsetup=m +# CONFIG_PACKAGE_gnupg is not set +# CONFIG_PACKAGE_gnutls-utils is not set +# CONFIG_PACKAGE_gpgv is not set +# CONFIG_PACKAGE_keyctl is not set +# CONFIG_PACKAGE_px5g-mbedtls is not set +# CONFIG_PACKAGE_px5g-standalone is not set +# CONFIG_PACKAGE_stoken is not set + +# +# Filesystem +# +# CONFIG_PACKAGE_acl is not set +CONFIG_PACKAGE_attr=m +# CONFIG_PACKAGE_badblocks is not set +# CONFIG_PACKAGE_btrfs-progs is not set +# CONFIG_PACKAGE_chattr is not set +# CONFIG_PACKAGE_debugfs is not set +CONFIG_PACKAGE_dosfstools=m +# CONFIG_PACKAGE_dumpe2fs is not set +# CONFIG_PACKAGE_e2freefrag is not set +CONFIG_PACKAGE_e2fsprogs=y +# CONFIG_PACKAGE_e4crypt is not set +# CONFIG_PACKAGE_f2fs-tools is not set +# CONFIG_PACKAGE_f2fsck is not set +# CONFIG_PACKAGE_filefrag is not set +# CONFIG_PACKAGE_fstrim is not set +# CONFIG_PACKAGE_fuse-utils is not set +# CONFIG_PACKAGE_hfsfsck is not set +# CONFIG_PACKAGE_lsattr is not set +# CONFIG_PACKAGE_mkf2fs is not set +# CONFIG_PACKAGE_mkhfs is not set +# CONFIG_PACKAGE_ncdu is not set +# CONFIG_PACKAGE_nfs-utils is not set +# CONFIG_PACKAGE_nfs-utils-libs is not set +CONFIG_PACKAGE_ntfs-3g=m +# CONFIG_PACKAGE_NTFS-3G_USE_LIBFUSE is not set +CONFIG_PACKAGE_NTFS-3G_HAS_PROBE=y +# CONFIG_PACKAGE_ntfs-3g-low is not set +# CONFIG_PACKAGE_ntfs-3g-utils is not set +# CONFIG_PACKAGE_owfs is not set +# CONFIG_PACKAGE_owshell is not set +# CONFIG_PACKAGE_resize2fs is not set +# CONFIG_PACKAGE_squashfs-tools-mksquashfs is not set +# CONFIG_PACKAGE_squashfs-tools-unsquashfs is not set +# CONFIG_PACKAGE_swap-utils is not set +# CONFIG_PACKAGE_sysfsutils is not set +# CONFIG_PACKAGE_tune2fs is not set +# CONFIG_PACKAGE_xfs-admin is not set +# CONFIG_PACKAGE_xfs-fsck is not set +# CONFIG_PACKAGE_xfs-growfs is not set +# CONFIG_PACKAGE_xfs-mkfs is not set + +# +# Image Manipulation +# +# CONFIG_PACKAGE_jpeg-tools is not set +# CONFIG_PACKAGE_tiff-utils is not set + +# +# Microcontroller programming +# +# CONFIG_PACKAGE_avrdude is not set +# CONFIG_PACKAGE_dfu-programmer is not set +# CONFIG_PACKAGE_stm32flash is not set + +# +# RTKLIB Suite +# +# CONFIG_PACKAGE_convbin is not set +# CONFIG_PACKAGE_pos2kml is not set +# CONFIG_PACKAGE_rnx2rtkp is not set +# CONFIG_PACKAGE_rtkrcv is not set +# CONFIG_PACKAGE_str2str is not set + +# +# Shells +# +# CONFIG_PACKAGE_bash is not set +# CONFIG_PACKAGE_fish is not set +# CONFIG_PACKAGE_klish is not set +# CONFIG_PACKAGE_mksh is not set +# CONFIG_PACKAGE_tcsh is not set +# CONFIG_PACKAGE_zsh is not set + +# +# Terminal +# +# CONFIG_PACKAGE_agetty is not set +# CONFIG_PACKAGE_dvtm is not set +CONFIG_PACKAGE_minicom=m +# CONFIG_PACKAGE_picocom is not set +# CONFIG_PACKAGE_rtty-mbedtls is not set +# CONFIG_PACKAGE_rtty-nossl is not set +# CONFIG_PACKAGE_rtty-openssl is not set +# CONFIG_PACKAGE_rtty-wolfssl is not set +# CONFIG_PACKAGE_screen is not set +# CONFIG_PACKAGE_script-utils is not set +# CONFIG_PACKAGE_serialconsole is not set +# CONFIG_PACKAGE_setterm is not set +# CONFIG_PACKAGE_tio is not set +# CONFIG_PACKAGE_tmux is not set +# CONFIG_PACKAGE_ttyd is not set +# CONFIG_PACKAGE_wall is not set + +# +# Virtualization +# + +# +# Zoneinfo +# +# CONFIG_PACKAGE_zoneinfo-africa is not set +# CONFIG_PACKAGE_zoneinfo-all is not set +# CONFIG_PACKAGE_zoneinfo-asia is not set +# CONFIG_PACKAGE_zoneinfo-atlantic is not set +# CONFIG_PACKAGE_zoneinfo-australia-nz is not set +# CONFIG_PACKAGE_zoneinfo-core is not set +# CONFIG_PACKAGE_zoneinfo-europe is not set +# CONFIG_PACKAGE_zoneinfo-india is not set +# CONFIG_PACKAGE_zoneinfo-northamerica is not set +# CONFIG_PACKAGE_zoneinfo-pacific is not set +# CONFIG_PACKAGE_zoneinfo-poles is not set +# CONFIG_PACKAGE_zoneinfo-simple is not set +# CONFIG_PACKAGE_zoneinfo-southamerica is not set + +# +# database +# +# CONFIG_PACKAGE_mariadb-common is not set +# CONFIG_PACKAGE_pgsql-cli is not set +# CONFIG_PACKAGE_pgsql-cli-extra is not set +# CONFIG_PACKAGE_pgsql-server is not set +# CONFIG_PACKAGE_rrdcgi1 is not set +# CONFIG_PACKAGE_rrdtool1 is not set +# CONFIG_PACKAGE_sqlite3-cli is not set +# CONFIG_PACKAGE_unixodbc-tools is not set + +# +# libimobiledevice +# +# CONFIG_PACKAGE_idevicerestore is not set +# CONFIG_PACKAGE_irecovery is not set +# CONFIG_PACKAGE_libimobiledevice-utils is not set +# CONFIG_PACKAGE_libusbmuxd-utils is not set +# CONFIG_PACKAGE_plistutil is not set +# CONFIG_PACKAGE_usbmuxd is not set +# CONFIG_PACKAGE_acpid is not set +# CONFIG_PACKAGE_adb is not set +# CONFIG_PACKAGE_ap51-flash is not set +# CONFIG_PACKAGE_at is not set +# CONFIG_PACKAGE_bandwidthd is not set +# CONFIG_PACKAGE_bandwidthd-pgsql is not set +# CONFIG_PACKAGE_bandwidthd-php is not set +# CONFIG_PACKAGE_bandwidthd-sqlite is not set +# CONFIG_PACKAGE_banhostlist is not set +# CONFIG_PACKAGE_bc is not set +# CONFIG_PACKAGE_bluelog is not set +# CONFIG_PACKAGE_bluez-daemon is not set +# CONFIG_PACKAGE_bluez-utils is not set +# CONFIG_PACKAGE_bonniexx is not set +# CONFIG_PACKAGE_bsdiff is not set +# CONFIG_PACKAGE_bspatch is not set +# CONFIG_PACKAGE_byobu is not set +# CONFIG_PACKAGE_byobu-utils is not set +# CONFIG_PACKAGE_cal is not set +# CONFIG_PACKAGE_canutils is not set +# CONFIG_PACKAGE_cgroup-tools is not set +# CONFIG_PACKAGE_cmdpad is not set +# CONFIG_PACKAGE_coap-client is not set +# CONFIG_PACKAGE_collectd is not set +# CONFIG_PACKAGE_coremark is not set +# CONFIG_PACKAGE_coreutils is not set +# CONFIG_PACKAGE_crconf is not set +# CONFIG_PACKAGE_crelay is not set +# CONFIG_PACKAGE_csstidy is not set +# CONFIG_PACKAGE_ct-bugcheck is not set +CONFIG_PACKAGE_dbus=m +# CONFIG_PACKAGE_dbus-utils is not set +# CONFIG_PACKAGE_device-observatory is not set +# CONFIG_PACKAGE_dfu-util is not set +# CONFIG_PACKAGE_digitemp is not set +# CONFIG_PACKAGE_digitemp-usb is not set +# CONFIG_PACKAGE_dmesg is not set +# CONFIG_PACKAGE_dropbearconvert is not set +# CONFIG_PACKAGE_dtc is not set +# CONFIG_PACKAGE_dump1090 is not set +# CONFIG_PACKAGE_easycwmp is not set +# CONFIG_PACKAGE_ecdsautils is not set +# CONFIG_PACKAGE_elektra-kdb is not set +# CONFIG_PACKAGE_evtest is not set +# CONFIG_PACKAGE_extract is not set +# CONFIG_PACKAGE_fbtest is not set +# CONFIG_PACKAGE_fdt-utils is not set +CONFIG_PACKAGE_file=y +# CONFIG_PACKAGE_findutils is not set +# CONFIG_PACKAGE_findutils-find is not set +# CONFIG_PACKAGE_findutils-locate is not set +# CONFIG_PACKAGE_findutils-xargs is not set +# CONFIG_PACKAGE_flashrom is not set +# CONFIG_PACKAGE_flashrom-pci is not set +# CONFIG_PACKAGE_flashrom-spi is not set +# CONFIG_PACKAGE_flashrom-usb is not set +# CONFIG_PACKAGE_flent-tools is not set +CONFIG_PACKAGE_flock=y +# CONFIG_PACKAGE_fritz-caldata is not set +# CONFIG_PACKAGE_fritz-tffs is not set +# CONFIG_PACKAGE_fritz-tffs-nand is not set +# CONFIG_PACKAGE_ftdi_eeprom is not set +# CONFIG_PACKAGE_gammu is not set +# CONFIG_PACKAGE_gawk is not set +# CONFIG_PACKAGE_gddrescue is not set +CONFIG_PACKAGE_getopt=m +# CONFIG_PACKAGE_gkermit is not set +# CONFIG_PACKAGE_gpioctl-sysfs is not set +# CONFIG_PACKAGE_gpiod-tools is not set +# CONFIG_PACKAGE_gpsd is not set +# CONFIG_PACKAGE_gpsd-clients is not set +# CONFIG_PACKAGE_grep is not set +# CONFIG_PACKAGE_hamlib is not set +# CONFIG_PACKAGE_haserl is not set +# CONFIG_PACKAGE_hashdeep is not set +# CONFIG_PACKAGE_haveged is not set +# CONFIG_PACKAGE_hplip-common is not set +# CONFIG_PACKAGE_hplip-sane is not set +# CONFIG_PACKAGE_hub-ctrl is not set +# CONFIG_PACKAGE_hwclock is not set +# CONFIG_PACKAGE_hwloc-utils is not set +CONFIG_PACKAGE_i2c-tools=y +# CONFIG_PACKAGE_iconv is not set +# CONFIG_PACKAGE_iio-utils is not set +# CONFIG_PACKAGE_inotifywait is not set +# CONFIG_PACKAGE_inotifywatch is not set +# CONFIG_PACKAGE_io is not set +# CONFIG_PACKAGE_iozone is not set +# CONFIG_PACKAGE_irqbalance is not set +# CONFIG_PACKAGE_iwcap is not set +CONFIG_PACKAGE_iwinfo=y +# CONFIG_PACKAGE_jq is not set +CONFIG_PACKAGE_jshn=y +# CONFIG_PACKAGE_kdump is not set +# CONFIG_PACKAGE_kexec is not set +# CONFIG_PACKAGE_kexec-tools is not set +# CONFIG_PACKAGE_kmod is not set +# CONFIG_PACKAGE_lcd4linux-custom is not set +# CONFIG_PACKAGE_lcd4linux-full is not set +# CONFIG_PACKAGE_lcdproc-clients is not set +# CONFIG_PACKAGE_lcdproc-drivers is not set +# CONFIG_PACKAGE_lcdproc-server is not set +# CONFIG_PACKAGE_less is not set +# CONFIG_PACKAGE_less-wide is not set +CONFIG_PACKAGE_libjson-script=y +# CONFIG_PACKAGE_libsysrepo is not set +# CONFIG_PACKAGE_libxml2-utils is not set +# CONFIG_PACKAGE_lm-sensors is not set +# CONFIG_PACKAGE_lm-sensors-detect is not set +# CONFIG_PACKAGE_logger is not set +# CONFIG_PACKAGE_logrotate is not set +# CONFIG_PACKAGE_look is not set +# CONFIG_PACKAGE_losetup is not set +# CONFIG_PACKAGE_lrzsz is not set +# CONFIG_PACKAGE_lscpu is not set +# CONFIG_PACKAGE_lsof is not set +CONFIG_PACKAGE_lxc=y + +# +# Configuration +# +CONFIG_LXC_KERNEL_OPTIONS=y +CONFIG_LXC_BUSYBOX_OPTIONS=y +# CONFIG_LXC_SECCOMP is not set +# CONFIG_LXC_NETWORKING is not set +CONFIG_PACKAGE_lxc-attach=m +# CONFIG_PACKAGE_lxc-auto is not set +# CONFIG_PACKAGE_lxc-autostart is not set +CONFIG_PACKAGE_lxc-cgroup=m +# CONFIG_PACKAGE_lxc-checkconfig is not set +CONFIG_PACKAGE_lxc-common=m +# CONFIG_PACKAGE_lxc-config is not set +CONFIG_PACKAGE_lxc-configs=m +CONFIG_PACKAGE_lxc-console=m +# CONFIG_PACKAGE_lxc-copy is not set +CONFIG_PACKAGE_lxc-create=m +CONFIG_PACKAGE_lxc-destroy=m +# CONFIG_PACKAGE_lxc-device is not set +# CONFIG_PACKAGE_lxc-execute is not set +# CONFIG_PACKAGE_lxc-freeze is not set +CONFIG_PACKAGE_lxc-hooks=m +CONFIG_PACKAGE_lxc-info=m +# CONFIG_PACKAGE_lxc-init is not set +# CONFIG_PACKAGE_lxc-ls is not set +CONFIG_PACKAGE_lxc-lua=m +# CONFIG_PACKAGE_lxc-monitor is not set +CONFIG_PACKAGE_lxc-monitord=m +# CONFIG_PACKAGE_lxc-snapshot is not set +CONFIG_PACKAGE_lxc-start=m +CONFIG_PACKAGE_lxc-stop=m +CONFIG_PACKAGE_lxc-templates=m +# CONFIG_PACKAGE_lxc-top is not set +# CONFIG_PACKAGE_lxc-unfreeze is not set +# CONFIG_PACKAGE_lxc-unprivileged is not set +# CONFIG_PACKAGE_lxc-unshare is not set +# CONFIG_PACKAGE_lxc-user-nic is not set +# CONFIG_PACKAGE_lxc-usernsexec is not set +# CONFIG_PACKAGE_lxc-wait is not set +# CONFIG_PACKAGE_maccalc is not set +# CONFIG_PACKAGE_macchanger is not set +# CONFIG_PACKAGE_mbedtls-util is not set +# CONFIG_PACKAGE_mbim-utils is not set +# CONFIG_PACKAGE_mbtools is not set +# CONFIG_PACKAGE_mc is not set +# CONFIG_PACKAGE_mcookie is not set +# CONFIG_PACKAGE_micrond is not set +# CONFIG_PACKAGE_mmc-utils is not set +# CONFIG_PACKAGE_moreutils is not set +# CONFIG_PACKAGE_mosh-client is not set +# CONFIG_PACKAGE_mosh-server is not set +# CONFIG_PACKAGE_mount-utils is not set +# CONFIG_PACKAGE_mpack is not set +# CONFIG_PACKAGE_mt-st is not set +# CONFIG_PACKAGE_namei is not set +CONFIG_PACKAGE_nand-utils=m +# CONFIG_PACKAGE_netopeer2-cli is not set +# CONFIG_PACKAGE_netopeer2-keystored is not set +# CONFIG_PACKAGE_netopeer2-server is not set +# CONFIG_PACKAGE_netwhere is not set +# CONFIG_PACKAGE_nnn is not set +# CONFIG_PACKAGE_nsenter is not set +# CONFIG_PACKAGE_nss-utils is not set +# CONFIG_PACKAGE_nssinfo is not set +# CONFIG_PACKAGE_oath-toolkit is not set +# CONFIG_PACKAGE_open-plc-utils is not set +# CONFIG_PACKAGE_open2300 is not set +# CONFIG_PACKAGE_openobex is not set +# CONFIG_PACKAGE_openobex-apps is not set +# CONFIG_PACKAGE_openocd is not set +# CONFIG_PACKAGE_opensc-utils is not set +# CONFIG_PACKAGE_openssl-util is not set +# CONFIG_PACKAGE_openzwave is not set +# CONFIG_PACKAGE_openzwave-config is not set +# CONFIG_PACKAGE_owipcalc is not set +# CONFIG_PACKAGE_pciutils is not set +# CONFIG_PACKAGE_pcsc-tools is not set +# CONFIG_PACKAGE_pcscd is not set +# CONFIG_PACKAGE_pm-utils is not set +# CONFIG_PACKAGE_powertop is not set +# CONFIG_PACKAGE_pps-tools is not set +# CONFIG_PACKAGE_prlimit is not set +# CONFIG_PACKAGE_procps-ng is not set +# CONFIG_PACKAGE_progress is not set +# CONFIG_PACKAGE_prometheus is not set +# CONFIG_PACKAGE_prometheus-node-exporter-lua is not set +# CONFIG_PACKAGE_prometheus-statsd-exporter is not set +# CONFIG_PACKAGE_pv is not set +CONFIG_PACKAGE_qca-psdk-cli=m +CONFIG_PACKAGE_qca-ssdk-shell=y +# CONFIG_PACKAGE_qmi-utils is not set +# CONFIG_PACKAGE_qrencode is not set +CONFIG_PACKAGE_qrtr=y +# CONFIG_PACKAGE_relayctl is not set +# CONFIG_PACKAGE_rename is not set +# CONFIG_PACKAGE_restic is not set +CONFIG_PACKAGE_rng-tools=y +# CONFIG_PACKAGE_rtl-ais is not set +# CONFIG_PACKAGE_rtl-sdr is not set +# CONFIG_PACKAGE_rtl_433 is not set +# CONFIG_PACKAGE_sane-daemon is not set +# CONFIG_PACKAGE_sane-frontends is not set +# CONFIG_PACKAGE_setserial is not set +# CONFIG_PACKAGE_shadow-chage is not set +# CONFIG_PACKAGE_shadow-chfn is not set +# CONFIG_PACKAGE_shadow-chgpasswd is not set +# CONFIG_PACKAGE_shadow-chpasswd is not set +# CONFIG_PACKAGE_shadow-chsh is not set +CONFIG_PACKAGE_shadow-common=m +# CONFIG_PACKAGE_shadow-expiry is not set +# CONFIG_PACKAGE_shadow-faillog is not set +# CONFIG_PACKAGE_shadow-gpasswd is not set +# CONFIG_PACKAGE_shadow-groupadd is not set +# CONFIG_PACKAGE_shadow-groupdel is not set +# CONFIG_PACKAGE_shadow-groupmems is not set +# CONFIG_PACKAGE_shadow-groupmod is not set +# CONFIG_PACKAGE_shadow-groups is not set +# CONFIG_PACKAGE_shadow-grpck is not set +# CONFIG_PACKAGE_shadow-grpconv is not set +# CONFIG_PACKAGE_shadow-grpunconv is not set +# CONFIG_PACKAGE_shadow-lastlog is not set +# CONFIG_PACKAGE_shadow-login is not set +# CONFIG_PACKAGE_shadow-logoutd is not set +# CONFIG_PACKAGE_shadow-newgidmap is not set +# CONFIG_PACKAGE_shadow-newgrp is not set +# CONFIG_PACKAGE_shadow-newuidmap is not set +# CONFIG_PACKAGE_shadow-newusers is not set +# CONFIG_PACKAGE_shadow-nologin is not set +# CONFIG_PACKAGE_shadow-passwd is not set +# CONFIG_PACKAGE_shadow-pwck is not set +# CONFIG_PACKAGE_shadow-pwconv is not set +# CONFIG_PACKAGE_shadow-pwunconv is not set +# CONFIG_PACKAGE_shadow-su is not set +CONFIG_PACKAGE_shadow-useradd=m +CONFIG_PACKAGE_shadow-userdel=m +# CONFIG_PACKAGE_shadow-usermod is not set +CONFIG_PACKAGE_shadow-utils=m + +# +# Select shadow utilities +# +# CONFIG_shadow-all is not set + +# +# Utilities +# +# CONFIG_PACKAGE_shadow-vipw is not set +# CONFIG_PACKAGE_shinit is not set +# CONFIG_PACKAGE_sispmctl is not set +# CONFIG_PACKAGE_slide-switch is not set +# CONFIG_PACKAGE_smartd is not set +# CONFIG_PACKAGE_smartmontools is not set +# CONFIG_PACKAGE_smartmontools-drivedb is not set +# CONFIG_PACKAGE_smstools3 is not set +# CONFIG_PACKAGE_sockread is not set +# CONFIG_PACKAGE_spi-tools is not set +# CONFIG_PACKAGE_spidev-test is not set +# CONFIG_PACKAGE_squashfs4 is not set +# CONFIG_PACKAGE_ssdeep is not set +# CONFIG_PACKAGE_sshpass is not set +# CONFIG_PACKAGE_strace is not set +CONFIG_STRACE_NONE=y +# CONFIG_STRACE_LIBDW is not set +# CONFIG_STRACE_LIBUNWIND is not set +# CONFIG_PACKAGE_stress is not set +# CONFIG_PACKAGE_sumo is not set +# CONFIG_PACKAGE_syncthing is not set +# CONFIG_PACKAGE_sysrepo is not set +# CONFIG_PACKAGE_sysrepocfg is not set +# CONFIG_PACKAGE_sysrepoctl is not set +# CONFIG_PACKAGE_sysstat is not set +# CONFIG_PACKAGE_tar is not set +# CONFIG_PACKAGE_taskwarrior is not set +# CONFIG_PACKAGE_telldus-core is not set +# CONFIG_PACKAGE_temperusb is not set +# CONFIG_PACKAGE_tinymembench is not set +# CONFIG_PACKAGE_tracertools is not set +# CONFIG_PACKAGE_tree is not set +# CONFIG_PACKAGE_triggerhappy is not set +CONFIG_PACKAGE_ubi-utils=y +# CONFIG_PACKAGE_udns-dnsget is not set +# CONFIG_PACKAGE_udns-ex-rdns is not set +# CONFIG_PACKAGE_udns-rblcheck is not set +# CONFIG_PACKAGE_ugps is not set +# CONFIG_PACKAGE_uledd is not set +# CONFIG_PACKAGE_unshare is not set +# CONFIG_PACKAGE_upx is not set +# CONFIG_PACKAGE_usb-modeswitch is not set +# CONFIG_PACKAGE_usbreset is not set +# CONFIG_PACKAGE_usbutils is not set +# CONFIG_PACKAGE_uuidd is not set +# CONFIG_PACKAGE_uuidgen is not set +# CONFIG_PACKAGE_uvcdynctrl is not set +# CONFIG_PACKAGE_v4l-utils is not set +# CONFIG_PACKAGE_view1090 is not set +# CONFIG_PACKAGE_watchcat is not set +# CONFIG_PACKAGE_whereis is not set +# CONFIG_PACKAGE_whiptail is not set +# CONFIG_PACKAGE_wifitoggle is not set +# CONFIG_PACKAGE_xsltproc is not set +# CONFIG_PACKAGE_xxd is not set +# CONFIG_PACKAGE_yanglint is not set +# CONFIG_PACKAGE_yara is not set +# CONFIG_PACKAGE_ykclient is not set +# CONFIG_PACKAGE_ykpers is not set +# CONFIG_PACKAGE_yunbridge is not set + +# +# Xorg +# + +# +# font-utils +# +# CONFIG_PACKAGE_fontconfig is not set +CONFIG_OVERRIDE_PKGS="hostapd iw mac80211" diff --git a/qca/feeds/luci/applications/luci-app-adblock/po/el/adblock.po b/qca/feeds/luci/applications/luci-app-adblock/po/el/adblock.po index ceb685817b7..55082044b5a 100644 --- a/qca/feeds/luci/applications/luci-app-adblock/po/el/adblock.po +++ b/qca/feeds/luci/applications/luci-app-adblock/po/el/adblock.po @@ -1,14 +1,14 @@ msgid "" msgstr "" -"PO-Revision-Date: 2021-01-23 03:57+0000\n" -"Last-Translator: Savvas Sfantos \n" +"PO-Revision-Date: 2022-03-25 12:08+0000\n" +"Last-Translator: MarioK239 \n" "Language-Team: Greek \n" "Language: el\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.5-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-adblock/htdocs/luci-static/resources/view/adblock/overview.js:369 #: applications/luci-app-adblock/htdocs/luci-static/resources/view/adblock/overview.js:384 @@ -564,7 +564,7 @@ msgstr "" #: applications/luci-app-adblock/htdocs/luci-static/resources/view/adblock/overview.js:264 msgid "Settings" -msgstr "" +msgstr "Ρυθμίσεις" #: applications/luci-app-adblock/htdocs/luci-static/resources/view/adblock/overview.js:344 msgid "" diff --git a/qca/feeds/luci/applications/luci-app-adblock/po/es/adblock.po b/qca/feeds/luci/applications/luci-app-adblock/po/es/adblock.po index b8380c6cad4..d3890a0f7e9 100644 --- a/qca/feeds/luci/applications/luci-app-adblock/po/es/adblock.po +++ b/qca/feeds/luci/applications/luci-app-adblock/po/es/adblock.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2022-02-14 11:56+0000\n" -"Last-Translator: Alfredo Pepote \n" +"PO-Revision-Date: 2022-04-05 19:06+0000\n" +"Last-Translator: Lanchon \n" "Language-Team: Spanish \n" "Language: es\n" @@ -11,7 +11,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.11-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-adblock/htdocs/luci-static/resources/view/adblock/overview.js:369 #: applications/luci-app-adblock/htdocs/luci-static/resources/view/adblock/overview.js:384 @@ -547,19 +547,19 @@ msgstr "Relajar SafeSearch" #: applications/luci-app-adblock/htdocs/luci-static/resources/view/adblock/overview.js:442 msgid "Report Chunk Count" -msgstr "Informe de recuento de fragmentos" +msgstr "Informar recuento de fragmentos" #: applications/luci-app-adblock/htdocs/luci-static/resources/view/adblock/overview.js:447 msgid "Report Chunk Size" -msgstr "Tamaño del fragmento de informe" +msgstr "Informar tamaño de fragmentos" #: applications/luci-app-adblock/htdocs/luci-static/resources/view/adblock/overview.js:437 msgid "Report Directory" -msgstr "Directorio de informes" +msgstr "Informar directorio" #: applications/luci-app-adblock/htdocs/luci-static/resources/view/adblock/overview.js:432 msgid "Report Interface" -msgstr "Interfaz de informe" +msgstr "Informar interfaz" #: applications/luci-app-adblock/htdocs/luci-static/resources/view/adblock/overview.js:452 msgid "Report Ports" @@ -567,11 +567,11 @@ msgstr "Informar puertos" #: applications/luci-app-adblock/htdocs/luci-static/resources/view/adblock/overview.js:442 msgid "Report chunk count used by tcpdump." -msgstr "Informe el recuento de fragmentos utilizado por tcpdump." +msgstr "Informar recuento de fragmentos utilizados por tcpdump." #: applications/luci-app-adblock/htdocs/luci-static/resources/view/adblock/overview.js:447 msgid "Report chunk size used by tcpdump in MByte." -msgstr "Informe el tamaño del fragmento utilizado por tcpdump en MByte." +msgstr "Informar tamaño de fragmentos utilizados por tcpdump en MByte." #: applications/luci-app-adblock/htdocs/luci-static/resources/view/adblock/overview.js:406 msgid "" diff --git a/qca/feeds/luci/applications/luci-app-aria2/po/el/aria2.po b/qca/feeds/luci/applications/luci-app-aria2/po/el/aria2.po index 2298123fc17..886f7dbe0d5 100644 --- a/qca/feeds/luci/applications/luci-app-aria2/po/el/aria2.po +++ b/qca/feeds/luci/applications/luci-app-aria2/po/el/aria2.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"PO-Revision-Date: 2022-02-12 20:10+0000\n" +"PO-Revision-Date: 2022-03-25 12:08+0000\n" "Last-Translator: MarioK239 \n" "Language-Team: Greek \n" @@ -8,7 +8,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.11-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-aria2/luasrc/model/cbi/aria2/config.lua:296 msgid "LPD enabled" @@ -321,7 +321,7 @@ msgstr "Αρχείο καταγραφής" #: applications/luci-app-aria2/luasrc/model/cbi/aria2/config.lua:85 msgid "Log level" -msgstr "" +msgstr "Επίπεδο καταγραφής" #: applications/luci-app-aria2/luasrc/model/cbi/aria2/config.lua:240 msgid "Lowest speed limit" diff --git a/qca/feeds/luci/applications/luci-app-aria2/po/ko/aria2.po b/qca/feeds/luci/applications/luci-app-aria2/po/ko/aria2.po index 097848c8642..6e5ddc5cb90 100644 --- a/qca/feeds/luci/applications/luci-app-aria2/po/ko/aria2.po +++ b/qca/feeds/luci/applications/luci-app-aria2/po/ko/aria2.po @@ -1,14 +1,14 @@ msgid "" msgstr "" -"PO-Revision-Date: 2021-06-07 10:49+0000\n" -"Last-Translator: Sunggu Choi \n" +"PO-Revision-Date: 2022-03-26 23:10+0000\n" +"Last-Translator: dikastia \n" "Language-Team: Korean \n" "Language: ko\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.7-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-aria2/luasrc/model/cbi/aria2/config.lua:296 msgid "LPD enabled" @@ -108,7 +108,7 @@ msgstr "" #: applications/luci-app-aria2/luasrc/model/cbi/aria2/config.lua:87 msgid "Debug" -msgstr "" +msgstr "디버그" #: applications/luci-app-aria2/luasrc/model/cbi/aria2/config.lua:422 msgid "" @@ -175,7 +175,7 @@ msgstr "활성화" #: applications/luci-app-aria2/luasrc/model/cbi/aria2/config.lua:91 msgid "Error" -msgstr "" +msgstr "에러" #: applications/luci-app-aria2/luasrc/model/cbi/aria2/config.lua:44 msgid "Error: Can't find aria2c in PATH, please reinstall aria2." @@ -265,7 +265,7 @@ msgstr "" #: applications/luci-app-aria2/luasrc/model/cbi/aria2/config.lua:88 msgid "Info" -msgstr "" +msgstr "정보" #: applications/luci-app-aria2/luasrc/view/aria2/settings_header.htm:33 msgid "Installed web interface:" diff --git a/qca/feeds/luci/applications/luci-app-attendedsysupgrade/po/el/attendedsysupgrade.po b/qca/feeds/luci/applications/luci-app-attendedsysupgrade/po/el/attendedsysupgrade.po index ea06b1caf86..767ff9f1f1a 100644 --- a/qca/feeds/luci/applications/luci-app-attendedsysupgrade/po/el/attendedsysupgrade.po +++ b/qca/feeds/luci/applications/luci-app-attendedsysupgrade/po/el/attendedsysupgrade.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"PO-Revision-Date: 2021-04-17 10:26+0000\n" +"PO-Revision-Date: 2022-03-25 12:08+0000\n" "Last-Translator: MarioK239 \n" "Language-Team: Greek \n" @@ -8,7 +8,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.6-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-attendedsysupgrade/htdocs/luci-static/resources/view/attendedsysupgrade/configuration.js:16 msgid "Address" @@ -158,7 +158,7 @@ msgstr "" #: applications/luci-app-attendedsysupgrade/htdocs/luci-static/resources/view/attendedsysupgrade/overview.js:121 msgid "Target" -msgstr "" +msgstr "Στόχος" #: applications/luci-app-attendedsysupgrade/htdocs/luci-static/resources/view/attendedsysupgrade/overview.js:372 msgid "" diff --git a/qca/feeds/luci/applications/luci-app-attendedsysupgrade/po/es/attendedsysupgrade.po b/qca/feeds/luci/applications/luci-app-attendedsysupgrade/po/es/attendedsysupgrade.po index a2d58fcdcba..f7409af049d 100644 --- a/qca/feeds/luci/applications/luci-app-attendedsysupgrade/po/es/attendedsysupgrade.po +++ b/qca/feeds/luci/applications/luci-app-attendedsysupgrade/po/es/attendedsysupgrade.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" "POT-Creation-Date: 2019-07-22 17:43-0300\n" -"PO-Revision-Date: 2022-03-06 15:27+0000\n" -"Last-Translator: Franco Castillo \n" +"PO-Revision-Date: 2022-04-05 19:06+0000\n" +"Last-Translator: Lanchon \n" "Language-Team: Spanish \n" "Language: es\n" @@ -65,10 +65,9 @@ msgid "Configuration" msgstr "Configuración" #: applications/luci-app-attendedsysupgrade/htdocs/luci-static/resources/view/attendedsysupgrade/overview.js:326 -#, fuzzy msgid "Could not reach API at \"%s\". Please try again later." msgstr "" -"No se pudo alcanzar la API en \"%s\". Por favor, inténtelo de nuevo más " +"No se pudo contactar la API en \"%s\". Por favor, inténtelo de nuevo más " "tarde." #: applications/luci-app-attendedsysupgrade/htdocs/luci-static/resources/view/attendedsysupgrade/overview.js:37 @@ -80,7 +79,6 @@ msgid "Error building the sysupgrade" msgstr "Error al compilar el sysupgrade" #: applications/luci-app-attendedsysupgrade/htdocs/luci-static/resources/view/attendedsysupgrade/overview.js:325 -#, fuzzy msgid "Error connecting to upgrade server" msgstr "Error al conectarse al servidor de actualizaciones" diff --git a/qca/feeds/luci/applications/luci-app-attendedsysupgrade/po/zh_Hant/attendedsysupgrade.po b/qca/feeds/luci/applications/luci-app-attendedsysupgrade/po/zh_Hant/attendedsysupgrade.po index 63519b8b889..f964ca6f898 100644 --- a/qca/feeds/luci/applications/luci-app-attendedsysupgrade/po/zh_Hant/attendedsysupgrade.po +++ b/qca/feeds/luci/applications/luci-app-attendedsysupgrade/po/zh_Hant/attendedsysupgrade.po @@ -1,14 +1,14 @@ msgid "" msgstr "" -"PO-Revision-Date: 2021-08-18 10:44+0000\n" -"Last-Translator: Hulen \n" +"PO-Revision-Date: 2022-03-29 18:08+0000\n" +"Last-Translator: Barlos Lee \n" "Language-Team: Chinese (Traditional) \n" "Language: zh_Hant\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.8-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-attendedsysupgrade/htdocs/luci-static/resources/view/attendedsysupgrade/configuration.js:16 msgid "Address" diff --git a/qca/feeds/luci/applications/luci-app-banip/po/el/banip.po b/qca/feeds/luci/applications/luci-app-banip/po/el/banip.po index 3ad21642444..50237d91c31 100644 --- a/qca/feeds/luci/applications/luci-app-banip/po/el/banip.po +++ b/qca/feeds/luci/applications/luci-app-banip/po/el/banip.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"PO-Revision-Date: 2021-04-17 10:26+0000\n" +"PO-Revision-Date: 2022-03-25 12:08+0000\n" "Last-Translator: MarioK239 \n" "Language-Team: Greek \n" @@ -8,7 +8,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.6-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-banip/luasrc/view/banip/ripeview.htm:89 msgid "ASN Overview" diff --git a/qca/feeds/luci/applications/luci-app-banip/po/es/banip.po b/qca/feeds/luci/applications/luci-app-banip/po/es/banip.po index 98034326813..824d6b9e0fd 100644 --- a/qca/feeds/luci/applications/luci-app-banip/po/es/banip.po +++ b/qca/feeds/luci/applications/luci-app-banip/po/es/banip.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" "POT-Creation-Date: 2019-07-23 22:17-0300\n" -"PO-Revision-Date: 2021-08-19 17:38+0000\n" -"Last-Translator: Franco Castillo \n" +"PO-Revision-Date: 2022-04-05 19:06+0000\n" +"Last-Translator: Lanchon \n" "Language-Team: Spanish \n" "Language: es\n" @@ -11,7 +11,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.8-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-banip/luasrc/view/banip/ripeview.htm:89 msgid "ASN Overview" diff --git a/qca/feeds/luci/applications/luci-app-bmx7/po/ko/bmx7.po b/qca/feeds/luci/applications/luci-app-bmx7/po/ko/bmx7.po index 7c9122e3248..6479d0bd155 100644 --- a/qca/feeds/luci/applications/luci-app-bmx7/po/ko/bmx7.po +++ b/qca/feeds/luci/applications/luci-app-bmx7/po/ko/bmx7.po @@ -1,14 +1,14 @@ msgid "" msgstr "" -"PO-Revision-Date: 2021-01-17 20:54+0000\n" -"Last-Translator: ANTEGRAL \n" +"PO-Revision-Date: 2022-03-26 23:10+0000\n" +"Last-Translator: dikastia \n" "Language-Team: Korean \n" "Language: ko\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.5-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-bmx7/root/usr/lib/lua/luci/view/bmx7/tunnels_j.htm:33 msgid "Announcements" @@ -90,7 +90,7 @@ msgstr "" #: applications/luci-app-bmx7/root/usr/lib/lua/luci/view/bmx7/tunnels_j.htm:40 msgid "Network" -msgstr "" +msgstr "네트워크" #: applications/luci-app-bmx7/root/usr/lib/lua/luci/view/bmx7/status_j.htm:53 msgid "Network interfaces" diff --git a/qca/feeds/luci/applications/luci-app-dcwapd/po/ko/dcwapd.po b/qca/feeds/luci/applications/luci-app-dcwapd/po/ko/dcwapd.po index ca28d3ddc75..ec548aed2a2 100644 --- a/qca/feeds/luci/applications/luci-app-dcwapd/po/ko/dcwapd.po +++ b/qca/feeds/luci/applications/luci-app-dcwapd/po/ko/dcwapd.po @@ -1,14 +1,14 @@ msgid "" msgstr "" -"PO-Revision-Date: 2021-01-17 20:54+0000\n" -"Last-Translator: ANTEGRAL \n" +"PO-Revision-Date: 2022-03-26 19:08+0000\n" +"Last-Translator: dikastia \n" "Language-Team: Korean \n" "Language: ko\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.5-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-dcwapd/luasrc/model/cbi/dcwapd/dcwapd.lua:72 #: applications/luci-app-dcwapd/luasrc/model/cbi/dcwapd/dcwapd.lua:121 @@ -74,7 +74,7 @@ msgstr "기본 설정" #: applications/luci-app-dcwapd/luasrc/model/cbi/dcwapd/dcwapd.lua:138 msgid "Interfaces" -msgstr "" +msgstr "인터페이스" #: applications/luci-app-dcwapd/luasrc/model/cbi/dcwapd/dcwapd.lua:161 msgid "MAC Address" diff --git a/qca/feeds/luci/applications/luci-app-ddns/po/ko/ddns.po b/qca/feeds/luci/applications/luci-app-ddns/po/ko/ddns.po index 06ef2e4c693..89d30bfb005 100644 --- a/qca/feeds/luci/applications/luci-app-ddns/po/ko/ddns.po +++ b/qca/feeds/luci/applications/luci-app-ddns/po/ko/ddns.po @@ -1,14 +1,14 @@ msgid "" msgstr "" -"PO-Revision-Date: 2021-06-07 10:49+0000\n" -"Last-Translator: Sunggu Choi \n" +"PO-Revision-Date: 2022-03-26 23:10+0000\n" +"Last-Translator: dikastia \n" "Language-Team: Korean \n" "Language: ko\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.7-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-ddns/luasrc/view/ddns/overview_status.htm:145 msgid "&" @@ -256,7 +256,7 @@ msgstr "활성화" #: applications/luci-app-ddns/luasrc/model/cbi/ddns/detail.lua:1286 msgid "Error" -msgstr "" +msgstr "에러" #: applications/luci-app-ddns/luasrc/model/cbi/ddns/detail.lua:1425 msgid "Error Retry Counter" @@ -418,7 +418,7 @@ msgstr "" #: applications/luci-app-ddns/luasrc/model/cbi/ddns/detail.lua:1283 msgid "Info" -msgstr "" +msgstr "정보" #: applications/luci-app-ddns/luasrc/model/cbi/ddns/hints.lua:162 msgid "" @@ -505,7 +505,7 @@ msgstr "" #: applications/luci-app-ddns/luasrc/model/cbi/ddns/detail.lua:802 #: applications/luci-app-ddns/luasrc/view/ddns/system_status.htm:52 msgid "Network" -msgstr "" +msgstr "네트워크" #: applications/luci-app-ddns/luasrc/model/cbi/ddns/detail.lua:1020 #: applications/luci-app-ddns/luasrc/model/cbi/ddns/detail.lua:1066 @@ -793,7 +793,7 @@ msgstr "" #: applications/luci-app-ddns/luasrc/model/cbi/ddns/detail.lua:1285 msgid "Warning" -msgstr "" +msgstr "경고" #: applications/luci-app-ddns/luasrc/model/cbi/ddns/detail.lua:1294 msgid "" diff --git a/qca/feeds/luci/applications/luci-app-ddns/po/pt/ddns.po b/qca/feeds/luci/applications/luci-app-ddns/po/pt/ddns.po index e16c25f4e8b..a0305441b23 100644 --- a/qca/feeds/luci/applications/luci-app-ddns/po/pt/ddns.po +++ b/qca/feeds/luci/applications/luci-app-ddns/po/pt/ddns.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: luci-app-ddns 2.4.0-1\n" "POT-Creation-Date: 2016-01-30 11:07+0100\n" -"PO-Revision-Date: 2021-06-13 21:32+0000\n" -"Last-Translator: ssantos \n" +"PO-Revision-Date: 2022-03-16 09:23+0000\n" +"Last-Translator: moonlightz \n" "Language-Team: Portuguese \n" "Language: pt\n" @@ -11,7 +11,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.7-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-ddns/luasrc/view/ddns/overview_status.htm:145 msgid "&" @@ -43,7 +43,7 @@ msgstr "" #: applications/luci-app-ddns/luasrc/model/cbi/ddns/detail.lua:50 #: applications/luci-app-ddns/luasrc/model/cbi/ddns/detail.lua:263 msgid "Basic Settings" -msgstr "Configurações Básicas" +msgstr "Definições Básicas" #: applications/luci-app-ddns/luasrc/model/cbi/ddns/hints.lua:25 msgid "" @@ -64,7 +64,7 @@ msgstr "Ligar Rede" #: applications/luci-app-ddns/luasrc/model/cbi/ddns/detail.lua:1124 #: applications/luci-app-ddns/luasrc/model/cbi/ddns/hints.lua:82 msgid "Binding to a specific network not supported" -msgstr "Ligação a uma rede específica não suportada" +msgstr "Ligar a uma rede específica não suportada" #: applications/luci-app-ddns/luasrc/model/cbi/ddns/hints.lua:113 msgid "" diff --git a/qca/feeds/luci/applications/luci-app-dnscrypt-proxy/po/es/dnscrypt-proxy.po b/qca/feeds/luci/applications/luci-app-dnscrypt-proxy/po/es/dnscrypt-proxy.po index 1b92fb7777a..819eb91df12 100644 --- a/qca/feeds/luci/applications/luci-app-dnscrypt-proxy/po/es/dnscrypt-proxy.po +++ b/qca/feeds/luci/applications/luci-app-dnscrypt-proxy/po/es/dnscrypt-proxy.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2021-07-25 17:13+0000\n" -"Last-Translator: Franco Castillo \n" +"PO-Revision-Date: 2022-04-05 19:06+0000\n" +"Last-Translator: Lanchon \n" "Language-Team: Spanish \n" "Language: es\n" @@ -11,7 +11,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.7.2-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-dnscrypt-proxy/luasrc/model/cbi/dnscrypt-proxy/overview_tab.lua:139 #: applications/luci-app-dnscrypt-proxy/luasrc/model/cbi/dnscrypt-proxy/overview_tab.lua:161 @@ -251,7 +251,7 @@ msgstr "Actualizar lista de resolución" #: applications/luci-app-dnscrypt-proxy/luasrc/model/cbi/dnscrypt-proxy/overview_tab.lua:200 msgid "Resolver (LOC/SEC/NOLOG)" -msgstr "Resolver (LOC/SEC/NOLOG)" +msgstr "Resolvedor (LOC/SEC/NOLOG)" #: applications/luci-app-dnscrypt-proxy/luasrc/model/cbi/dnscrypt-proxy/cfg_dnsmasq_tab.lua:17 #: applications/luci-app-dnscrypt-proxy/luasrc/model/cbi/dnscrypt-proxy/cfg_resolvcrypt_tab.lua:17 diff --git a/qca/feeds/luci/applications/luci-app-dynapoint/po/sv/dynapoint.po b/qca/feeds/luci/applications/luci-app-dynapoint/po/sv/dynapoint.po index d4db65a2b36..fbc68ec9616 100644 --- a/qca/feeds/luci/applications/luci-app-dynapoint/po/sv/dynapoint.po +++ b/qca/feeds/luci/applications/luci-app-dynapoint/po/sv/dynapoint.po @@ -1,26 +1,27 @@ msgid "" msgstr "" -"PO-Revision-Date: 2021-10-29 12:38+0000\n" -"Last-Translator: Leif Romell \n" +"PO-Revision-Date: 2022-03-21 17:48+0000\n" +"Last-Translator: Kristoffer Grundström \n" "Language-Team: Swedish \n" "Language: sv\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.9-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-dynapoint/luasrc/model/cbi/dynapoint.lua:90 msgid "Activate this wVIF if status is:" -msgstr "" +msgstr "Aktivera det här wVIF om statusen är:" #: applications/luci-app-dynapoint/luasrc/model/cbi/dynapoint.lua:31 msgid "Append hostname to ssid" -msgstr "" +msgstr "Lägg till värdnamn till ssid" #: applications/luci-app-dynapoint/luasrc/model/cbi/dynapoint.lua:31 msgid "Append the router's hostname to the SSID when connectivity check fails" msgstr "" +"Lägg till SSID i routerns värdnamn när anslutningskontrollen misslyckas" #: applications/luci-app-dynapoint/luasrc/model/cbi/dynapoint.lua:18 msgid "Check Internet connectivity via HTTP header download" @@ -32,7 +33,7 @@ msgstr "Konfiguration" #: applications/luci-app-dynapoint/luasrc/model/cbi/dynapoint.lua:44 msgid "Curl is currently not installed. Please install the package in the" -msgstr "" +msgstr "Curl är för närvarande inte installerat. Vänligen installera paketet i" #: applications/luci-app-dynapoint/luasrc/model/cbi/dynapoint.lua:71 msgid "Device" @@ -45,11 +46,11 @@ msgstr "Avaktiverad" #: applications/luci-app-dynapoint/luasrc/controller/dynapoint.lua:7 msgid "DynaPoint" -msgstr "" +msgstr "DynaPoint" #: applications/luci-app-dynapoint/luasrc/model/cbi/dynapoint.lua:54 msgid "Dynamic Access Point Manager" -msgstr "" +msgstr "Hanterare för Dynamisk Accesspunkt" #: applications/luci-app-dynapoint/luasrc/model/cbi/dynapoint.lua:67 msgid "Enabled" @@ -63,16 +64,17 @@ msgstr "" #: applications/luci-app-dynapoint/luasrc/model/cbi/dynapoint.lua:56 msgid "List of Wireless Virtual Interfaces (wVIF)" -msgstr "" +msgstr "Lista över Trådlösa Virtuella Gränssnitt (wVIF)" #: applications/luci-app-dynapoint/luasrc/model/cbi/dynapoint.lua:20 msgid "List of host addresses" -msgstr "" +msgstr "Lista över värdadresser" #: applications/luci-app-dynapoint/luasrc/model/cbi/dynapoint.lua:20 msgid "" "List of host addresses (url or IP) to track and request http headers from" msgstr "" +"Lista över värdadresser (url eller IP) att spåra och begära http-headers från" #: applications/luci-app-dynapoint/luasrc/model/cbi/dynapoint.lua:85 msgid "Mode" @@ -80,15 +82,15 @@ msgstr "Läge" #: applications/luci-app-dynapoint/luasrc/model/cbi/dynapoint.lua:94 msgid "Not used by DynaPoint" -msgstr "" +msgstr "Används inte av DynaPoint" #: applications/luci-app-dynapoint/luasrc/model/cbi/dynapoint.lua:93 msgid "Offline" -msgstr "" +msgstr "Urkopplad" #: applications/luci-app-dynapoint/luasrc/model/cbi/dynapoint.lua:92 msgid "Online" -msgstr "" +msgstr "Uppkopplad" #: applications/luci-app-dynapoint/luasrc/model/cbi/dynapoint.lua:87 msgid "SSID" @@ -108,15 +110,15 @@ msgstr "" #: applications/luci-app-dynapoint/luasrc/model/cbi/dynapoint.lua:23 msgid "Time interval in seconds to re-start a new test run" -msgstr "" +msgstr "Tidsintervall i sekunder att starta om körning av ett nytt test" #: applications/luci-app-dynapoint/luasrc/model/cbi/dynapoint.lua:36 msgid "Use curl" -msgstr "" +msgstr "Använd curl" #: applications/luci-app-dynapoint/luasrc/model/cbi/dynapoint.lua:44 msgid "Use curl instead of wget" -msgstr "" +msgstr "Använd curl istället för wget" #: applications/luci-app-dynapoint/luasrc/model/cbi/dynapoint.lua:36 msgid "Use curl instead of wget for testing the connectivity." diff --git a/qca/feeds/luci/applications/luci-app-fwknopd/po/ko/fwknopd.po b/qca/feeds/luci/applications/luci-app-fwknopd/po/ko/fwknopd.po index ae95c281649..8f2e309ff12 100644 --- a/qca/feeds/luci/applications/luci-app-fwknopd/po/ko/fwknopd.po +++ b/qca/feeds/luci/applications/luci-app-fwknopd/po/ko/fwknopd.po @@ -1,14 +1,16 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"PO-Revision-Date: 2015-05-12 21:03-0500\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" +"PO-Revision-Date: 2022-03-26 23:10+0000\n" +"Last-Translator: dikastia \n" +"Language-Team: Korean \n" "Language: ko\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-fwknopd/luasrc/model/cbi/fwknopd.lua:51 msgid "" diff --git a/qca/feeds/luci/applications/luci-app-hd-idle/po/pt/hd-idle.po b/qca/feeds/luci/applications/luci-app-hd-idle/po/pt/hd-idle.po index bc2bd387263..7c0adbe882e 100644 --- a/qca/feeds/luci/applications/luci-app-hd-idle/po/pt/hd-idle.po +++ b/qca/feeds/luci/applications/luci-app-hd-idle/po/pt/hd-idle.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-04-14 10:33+0200\n" -"PO-Revision-Date: 2021-10-31 13:37+0000\n" -"Last-Translator: ssantos \n" +"PO-Revision-Date: 2022-03-16 09:23+0000\n" +"Last-Translator: moonlightz \n" "Language-Team: Portuguese \n" "Language: pt\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.9-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-hd-idle/luasrc/model/cbi/hd_idle.lua:15 msgid "Disk" @@ -45,7 +45,7 @@ msgstr "Unidade de tempo de ociosidade" #: applications/luci-app-hd-idle/luasrc/model/cbi/hd_idle.lua:10 msgid "Settings" -msgstr "Configurações" +msgstr "Definições" # Hours #: applications/luci-app-hd-idle/luasrc/model/cbi/hd_idle.lua:26 diff --git a/qca/feeds/luci/applications/luci-app-ksmbd/po/ko/ksmbd.po b/qca/feeds/luci/applications/luci-app-ksmbd/po/ko/ksmbd.po index 19516a213b7..efb3611cebe 100644 --- a/qca/feeds/luci/applications/luci-app-ksmbd/po/ko/ksmbd.po +++ b/qca/feeds/luci/applications/luci-app-ksmbd/po/ko/ksmbd.po @@ -1,36 +1,38 @@ msgid "" msgstr "" -"PO-Revision-Date: 2021-01-17 20:54+0000\n" -"Last-Translator: ANTEGRAL \n" +"PO-Revision-Date: 2022-03-26 13:17+0000\n" +"Last-Translator: dikastia \n" "Language-Team: Korean \n" "Language: ko\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.5-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-ksmbd/htdocs/luci-static/resources/view/ksmbd.js:86 msgid "Allow guests" -msgstr "" +msgstr "손님 허용" #: applications/luci-app-ksmbd/htdocs/luci-static/resources/view/ksmbd.js:43 msgid "Allow legacy (insecure) protocols/authentication." -msgstr "" +msgstr "레거시(안전하지 않는) 프로토콜/인증을 허용." #: applications/luci-app-ksmbd/htdocs/luci-static/resources/view/ksmbd.js:44 msgid "" "Allow legacy smb(v1)/Lanman connections, needed for older devices without " "smb(v2.1/3) support." msgstr "" +"레거시 smb(v1)/Lanman 연결을 허용합니다. smb(v2.1/3) 지원되지 않는 이전 장치" +"에 필요합니다." #: applications/luci-app-ksmbd/htdocs/luci-static/resources/view/ksmbd.js:83 msgid "Allowed users" -msgstr "" +msgstr "허용된 사용자" #: applications/luci-app-ksmbd/htdocs/luci-static/resources/view/ksmbd.js:70 msgid "Browse-able" -msgstr "" +msgstr "탐색가능" #: applications/luci-app-ksmbd/htdocs/luci-static/resources/view/ksmbd.js:102 msgid "Create mask" @@ -46,7 +48,7 @@ msgstr "" #: applications/luci-app-ksmbd/htdocs/luci-static/resources/view/ksmbd.js:32 msgid "Edit Template" -msgstr "" +msgstr "템플릿 편집" #: applications/luci-app-ksmbd/htdocs/luci-static/resources/view/ksmbd.js:47 msgid "Edit the template that is used for generating the ksmbd configuration." diff --git a/qca/feeds/luci/applications/luci-app-lxc/po/ko/lxc.po b/qca/feeds/luci/applications/luci-app-lxc/po/ko/lxc.po index 89fc010adec..cb9da0f4d7b 100644 --- a/qca/feeds/luci/applications/luci-app-lxc/po/ko/lxc.po +++ b/qca/feeds/luci/applications/luci-app-lxc/po/ko/lxc.po @@ -1,14 +1,14 @@ msgid "" msgstr "" -"PO-Revision-Date: 2020-04-19 00:53+0000\n" -"Last-Translator: EP45 \n" +"PO-Revision-Date: 2022-03-26 19:08+0000\n" +"Last-Translator: dikastia \n" "Language-Team: Korean \n" "Language: ko\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.0.2-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-lxc/luasrc/model/cbi/lxc.lua:18 msgid "" @@ -38,7 +38,7 @@ msgstr "" #: applications/luci-app-lxc/luasrc/view/lxc.htm:133 msgid "Delete" -msgstr "" +msgstr "삭제" #: applications/luci-app-lxc/luasrc/model/cbi/lxc.lua:31 msgid "Enable SSL" diff --git a/qca/feeds/luci/applications/luci-app-lxc/po/ru/lxc.po b/qca/feeds/luci/applications/luci-app-lxc/po/ru/lxc.po index 8a3da2a639e..97e55214b37 100644 --- a/qca/feeds/luci/applications/luci-app-lxc/po/ru/lxc.po +++ b/qca/feeds/luci/applications/luci-app-lxc/po/ru/lxc.po @@ -1,7 +1,7 @@ msgid "" msgstr "" -"PO-Revision-Date: 2021-06-28 11:33+0000\n" -"Last-Translator: Artem \n" +"PO-Revision-Date: 2022-03-30 01:31+0000\n" +"Last-Translator: Anton Kikin \n" "Language-Team: Russian \n" "Language: ru\n" @@ -9,7 +9,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 4.7.1-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-lxc/luasrc/model/cbi/lxc.lua:18 msgid "" @@ -50,6 +50,9 @@ msgid "" "Enable optional SSL encryption support. This requires additional packages " "like 'wget', 'ca-certificates', 'gnupg' and 'gnupg-utils'." msgstr "" +"Включить необязательную поддержку шифрования SSL. Это требуется некоторым " +"дополнительным пакетам, например: 'wget', 'ca-certificates', 'gnupg' и " +"'gnupg-utils'." #: applications/luci-app-lxc/luasrc/view/lxc.htm:50 msgid "Enter new name" diff --git a/qca/feeds/luci/applications/luci-app-minidlna/po/ko/minidlna.po b/qca/feeds/luci/applications/luci-app-minidlna/po/ko/minidlna.po index 2b87389b8fb..518cd6bcfc4 100644 --- a/qca/feeds/luci/applications/luci-app-minidlna/po/ko/minidlna.po +++ b/qca/feeds/luci/applications/luci-app-minidlna/po/ko/minidlna.po @@ -1,8 +1,8 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"PO-Revision-Date: 2021-06-07 10:49+0000\n" -"Last-Translator: Sunggu Choi \n" +"PO-Revision-Date: 2022-03-26 19:08+0000\n" +"Last-Translator: dikastia \n" "Language-Team: Korean \n" "Language: ko\n" @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.7-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-minidlna/luasrc/model/cbi/minidlna.lua:16 msgid "Advanced Settings" @@ -66,7 +66,7 @@ msgstr "기본 설정" #: applications/luci-app-minidlna/luasrc/model/cbi/minidlna.lua:43 msgid "Interfaces" -msgstr "" +msgstr "인터페이스" #: applications/luci-app-minidlna/luasrc/model/cbi/minidlna.lua:82 msgid "Log directory" diff --git a/qca/feeds/luci/applications/luci-app-mwan3/po/el/mwan3.po b/qca/feeds/luci/applications/luci-app-mwan3/po/el/mwan3.po index 18e51662d86..e45017bec8f 100644 --- a/qca/feeds/luci/applications/luci-app-mwan3/po/el/mwan3.po +++ b/qca/feeds/luci/applications/luci-app-mwan3/po/el/mwan3.po @@ -1,14 +1,14 @@ msgid "" msgstr "" -"PO-Revision-Date: 2021-02-01 16:02+0000\n" -"Last-Translator: ChriZathens \n" +"PO-Revision-Date: 2022-03-25 12:08+0000\n" +"Last-Translator: MarioK239 \n" "Language-Team: Greek \n" "Language: el\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.5-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-mwan3/luasrc/model/cbi/mwan/interfaceconfig.lua:171 #: applications/luci-app-mwan3/luasrc/model/cbi/mwan/interfaceconfig.lua:187 @@ -552,7 +552,7 @@ msgstr "" #: applications/luci-app-mwan3/luasrc/model/cbi/mwan/policy.lua:51 msgid "Policy" -msgstr "" +msgstr "Πολιτική" #: applications/luci-app-mwan3/luasrc/model/cbi/mwan/rule.lua:99 #: applications/luci-app-mwan3/luasrc/model/cbi/mwan/ruleconfig.lua:66 diff --git a/qca/feeds/luci/applications/luci-app-mwan3/po/ko/mwan3.po b/qca/feeds/luci/applications/luci-app-mwan3/po/ko/mwan3.po index 989a82d9eef..12f45b20a55 100644 --- a/qca/feeds/luci/applications/luci-app-mwan3/po/ko/mwan3.po +++ b/qca/feeds/luci/applications/luci-app-mwan3/po/ko/mwan3.po @@ -1,14 +1,14 @@ msgid "" msgstr "" -"PO-Revision-Date: 2021-06-07 10:49+0000\n" -"Last-Translator: Sunggu Choi \n" +"PO-Revision-Date: 2022-03-26 23:10+0000\n" +"Last-Translator: dikastia \n" "Language-Team: Korean \n" "Language: ko\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.7-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-mwan3/luasrc/model/cbi/mwan/interfaceconfig.lua:171 #: applications/luci-app-mwan3/luasrc/model/cbi/mwan/interfaceconfig.lua:187 @@ -130,7 +130,7 @@ msgstr "" #: applications/luci-app-mwan3/luasrc/model/cbi/mwan/globalsconfig.lua:38 msgid "Debug" -msgstr "" +msgstr "디버그" #: applications/luci-app-mwan3/luasrc/model/cbi/mwan/rule.lua:81 #: applications/luci-app-mwan3/luasrc/model/cbi/mwan/ruleconfig.lua:29 @@ -189,7 +189,7 @@ msgstr "" #: applications/luci-app-mwan3/luasrc/model/cbi/mwan/globalsconfig.lua:34 msgid "Error" -msgstr "" +msgstr "에러" #: applications/luci-app-mwan3/luasrc/view/mwan/status_diagnostics.htm:88 msgid "Execute" @@ -255,7 +255,7 @@ msgstr "" #: applications/luci-app-mwan3/luasrc/model/cbi/mwan/globalsconfig.lua:37 msgid "Info" -msgstr "" +msgstr "정보" #: applications/luci-app-mwan3/luasrc/model/cbi/mwan/interfaceconfig.lua:25 msgid "Initial state" @@ -744,7 +744,7 @@ msgstr "" #: applications/luci-app-mwan3/luasrc/model/cbi/mwan/globalsconfig.lua:35 msgid "Warning" -msgstr "" +msgstr "경고" #: applications/luci-app-mwan3/luasrc/model/cbi/mwan/member.lua:39 #: applications/luci-app-mwan3/luasrc/model/cbi/mwan/memberconfig.lua:29 diff --git a/qca/feeds/luci/applications/luci-app-mwan3/po/sv/mwan3.po b/qca/feeds/luci/applications/luci-app-mwan3/po/sv/mwan3.po index cc2ba186e5a..043686f5868 100644 --- a/qca/feeds/luci/applications/luci-app-mwan3/po/sv/mwan3.po +++ b/qca/feeds/luci/applications/luci-app-mwan3/po/sv/mwan3.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"PO-Revision-Date: 2021-12-14 02:53+0000\n" +"PO-Revision-Date: 2022-03-21 17:48+0000\n" "Last-Translator: Kristoffer Grundström \n" "Language-Team: Swedish \n" @@ -8,7 +8,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.10-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-mwan3/luasrc/model/cbi/mwan/interfaceconfig.lua:171 #: applications/luci-app-mwan3/luasrc/model/cbi/mwan/interfaceconfig.lua:187 @@ -489,12 +489,12 @@ msgstr "" #: applications/luci-app-mwan3/luasrc/model/cbi/mwan/interfaceconfig.lua:29 #: applications/luci-app-mwan3/luasrc/view/mwan/overview_status_interface.htm:42 msgid "Offline" -msgstr "" +msgstr "Urkopplad" #: applications/luci-app-mwan3/luasrc/model/cbi/mwan/interfaceconfig.lua:28 #: applications/luci-app-mwan3/luasrc/view/mwan/overview_status_interface.htm:34 msgid "Online" -msgstr "" +msgstr "Uppkopplad" #: applications/luci-app-mwan3/luasrc/controller/mwan3.lua:182 #: applications/luci-app-mwan3/luasrc/controller/mwan3.lua:186 diff --git a/qca/feeds/luci/applications/luci-app-nft-qos/po/el/nft-qos.po b/qca/feeds/luci/applications/luci-app-nft-qos/po/el/nft-qos.po index 57aa1724753..187eedd54f5 100644 --- a/qca/feeds/luci/applications/luci-app-nft-qos/po/el/nft-qos.po +++ b/qca/feeds/luci/applications/luci-app-nft-qos/po/el/nft-qos.po @@ -1,14 +1,14 @@ msgid "" msgstr "" -"PO-Revision-Date: 2020-12-01 16:16+0000\n" -"Last-Translator: Marios Koutsoukis \n" +"PO-Revision-Date: 2022-03-25 12:08+0000\n" +"Last-Translator: MarioK239 \n" "Language-Team: Greek \n" "Language: el\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.4-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-nft-qos/luasrc/view/nft-qos/rate.htm:136 #: applications/luci-app-nft-qos/luasrc/view/nft-qos/rate.htm:155 @@ -22,7 +22,7 @@ msgstr "Συλλογή δεδομένων..." #: applications/luci-app-nft-qos/luasrc/model/cbi/nft-qos/nft-qos.lua:224 msgid "Comment" -msgstr "" +msgstr "Σχόλιο" #: applications/luci-app-nft-qos/luasrc/model/cbi/nft-qos/nft-qos.lua:48 msgid "Default Download Rate" diff --git a/qca/feeds/luci/applications/luci-app-nlbwmon/po/ko/nlbwmon.po b/qca/feeds/luci/applications/luci-app-nlbwmon/po/ko/nlbwmon.po index 9e259a959f7..186c5cb371f 100644 --- a/qca/feeds/luci/applications/luci-app-nlbwmon/po/ko/nlbwmon.po +++ b/qca/feeds/luci/applications/luci-app-nlbwmon/po/ko/nlbwmon.po @@ -1,14 +1,14 @@ msgid "" msgstr "" -"PO-Revision-Date: 2021-01-17 20:54+0000\n" -"Last-Translator: ANTEGRAL \n" +"PO-Revision-Date: 2022-03-26 23:10+0000\n" +"Last-Translator: dikastia \n" "Language-Team: Korean \n" "Language: ko\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.5-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-nlbwmon/htdocs/luci-static/resources/view/nlbw.js:661 msgid "%d IPv4-only hosts" @@ -493,7 +493,7 @@ msgstr "" #: applications/luci-app-nlbwmon/luasrc/model/cbi/nlbw/config.lua:51 msgid "Warning" -msgstr "" +msgstr "경고" #: applications/luci-app-nlbwmon/luasrc/model/cbi/nlbw/config.lua:165 msgid "" diff --git a/qca/feeds/luci/applications/luci-app-nut/po/ko/nut.po b/qca/feeds/luci/applications/luci-app-nut/po/ko/nut.po index 85774ff1901..a781ce44ca8 100644 --- a/qca/feeds/luci/applications/luci-app-nut/po/ko/nut.po +++ b/qca/feeds/luci/applications/luci-app-nut/po/ko/nut.po @@ -1,8 +1,8 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"PO-Revision-Date: 2021-06-07 10:49+0000\n" -"Last-Translator: Sunggu Choi \n" +"PO-Revision-Date: 2022-03-26 23:10+0000\n" +"Last-Translator: dikastia \n" "Language-Team: Korean \n" "Language: ko\n" @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.7-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:216 msgid "Additional Shutdown Time(s)" @@ -84,7 +84,7 @@ msgstr "" #: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:132 msgid "Driver" -msgstr "" +msgstr "드라이버" #: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:114 msgid "Driver Configuration" diff --git a/qca/feeds/luci/applications/luci-app-ocserv/po/el/ocserv.po b/qca/feeds/luci/applications/luci-app-ocserv/po/el/ocserv.po index 63783854da7..a92a91438c4 100644 --- a/qca/feeds/luci/applications/luci-app-ocserv/po/el/ocserv.po +++ b/qca/feeds/luci/applications/luci-app-ocserv/po/el/ocserv.po @@ -1,14 +1,14 @@ msgid "" msgstr "" -"PO-Revision-Date: 2021-02-01 16:02+0000\n" -"Last-Translator: ChriZathens \n" +"PO-Revision-Date: 2022-03-25 12:08+0000\n" +"Last-Translator: MarioK239 \n" "Language-Team: Greek \n" "Language: el\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.5-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-ocserv/luasrc/model/cbi/ocserv/main.lua:124 #: applications/luci-app-ocserv/luasrc/model/cbi/ocserv/user-config.lua:80 @@ -191,7 +191,7 @@ msgstr "" #: applications/luci-app-ocserv/luasrc/controller/ocserv.lua:19 msgid "Server Settings" -msgstr "" +msgstr "Ρυθμίσεις διακομιστή" #: applications/luci-app-ocserv/luasrc/model/cbi/ocserv/main.lua:20 msgid "Server's Public Key ID" @@ -276,7 +276,7 @@ msgstr "" #: applications/luci-app-ocserv/luasrc/view/ocserv_status.htm:51 msgid "User" -msgstr "" +msgstr "Χρήστης" #: applications/luci-app-ocserv/luasrc/model/cbi/ocserv/main.lua:49 #: applications/luci-app-ocserv/luasrc/model/cbi/ocserv/user-config.lua:37 diff --git a/qca/feeds/luci/applications/luci-app-ocserv/po/ko/ocserv.po b/qca/feeds/luci/applications/luci-app-ocserv/po/ko/ocserv.po index 573a146645b..8f43a63af27 100644 --- a/qca/feeds/luci/applications/luci-app-ocserv/po/ko/ocserv.po +++ b/qca/feeds/luci/applications/luci-app-ocserv/po/ko/ocserv.po @@ -1,14 +1,14 @@ msgid "" msgstr "" -"PO-Revision-Date: 2021-06-07 10:49+0000\n" -"Last-Translator: Sunggu Choi \n" +"PO-Revision-Date: 2022-03-26 13:17+0000\n" +"Last-Translator: dikastia \n" "Language-Team: Korean \n" "Language: ko\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.7-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-ocserv/luasrc/model/cbi/ocserv/main.lua:124 #: applications/luci-app-ocserv/luasrc/model/cbi/ocserv/user-config.lua:80 @@ -66,7 +66,7 @@ msgstr "" #: applications/luci-app-ocserv/luasrc/model/cbi/ocserv/main.lua:14 #: applications/luci-app-ocserv/luasrc/model/cbi/ocserv/user-config.lua:14 msgid "Edit Template" -msgstr "" +msgstr "템플릿 편집" #: applications/luci-app-ocserv/luasrc/model/cbi/ocserv/main.lua:80 #: applications/luci-app-ocserv/luasrc/model/cbi/ocserv/user-config.lua:85 diff --git a/qca/feeds/luci/applications/luci-app-olsr/po/ko/olsr.po b/qca/feeds/luci/applications/luci-app-olsr/po/ko/olsr.po index 2f3f313b232..c06e4c27f09 100644 --- a/qca/feeds/luci/applications/luci-app-olsr/po/ko/olsr.po +++ b/qca/feeds/luci/applications/luci-app-olsr/po/ko/olsr.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-05-19 19:35+0200\n" -"PO-Revision-Date: 2021-06-07 10:49+0000\n" -"Last-Translator: Sunggu Choi \n" +"PO-Revision-Date: 2022-03-26 23:10+0000\n" +"Last-Translator: dikastia \n" "Language-Team: Korean \n" "Language: ko\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.7-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-olsr/luasrc/view/status-olsr/mid.htm:13 msgid "Active MID announcements" @@ -168,7 +168,7 @@ msgstr "" #: applications/luci-app-olsr/luasrc/view/status-olsr/smartgw.htm:55 #: applications/luci-app-olsr/luasrc/view/status-olsr/smartgw.htm:107 msgid "Gateway" -msgstr "" +msgstr "게이트웨이" #: applications/luci-app-olsr/luasrc/model/cbi/olsr/olsrd.lua:42 #: applications/luci-app-olsr/luasrc/model/cbi/olsr/olsrd.lua:222 @@ -428,7 +428,7 @@ msgstr "" #: applications/luci-app-olsr/luasrc/view/status-olsr/interfaces.htm:14 #: applications/luci-app-olsr/luasrc/view/status-olsr/overview.htm:163 msgid "Interfaces" -msgstr "" +msgstr "인터페이스" #: applications/luci-app-olsr/luasrc/model/cbi/olsr/olsrd.lua:218 #: applications/luci-app-olsr/luasrc/model/cbi/olsr/olsrd6.lua:212 @@ -666,7 +666,7 @@ msgstr "" #: applications/luci-app-olsr/luasrc/model/cbi/olsr/olsrdiface6.lua:44 #: applications/luci-app-olsr/luasrc/view/status-olsr/overview.htm:160 msgid "Network" -msgstr "" +msgstr "네트워크" #: applications/luci-app-olsr/luasrc/model/cbi/olsr/olsrdhna.lua:17 #: applications/luci-app-olsr/luasrc/model/cbi/olsr/olsrdhna.lua:34 diff --git a/qca/feeds/luci/applications/luci-app-openvpn/po/sv/openvpn.po b/qca/feeds/luci/applications/luci-app-openvpn/po/sv/openvpn.po index 001b575c1a6..e5b0de8f5c0 100644 --- a/qca/feeds/luci/applications/luci-app-openvpn/po/sv/openvpn.po +++ b/qca/feeds/luci/applications/luci-app-openvpn/po/sv/openvpn.po @@ -1,8 +1,8 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"PO-Revision-Date: 2021-11-05 14:38+0000\n" -"Last-Translator: Paul Dee \n" +"PO-Revision-Date: 2022-04-02 20:06+0000\n" +"Last-Translator: Kristoffer Grundström \n" "Language-Team: Swedish \n" "Language: sv\n" @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.9-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua:821 #: applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua:824 @@ -23,7 +23,7 @@ msgstr "'net30', 'p2p', eller 'subnät'" #: applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua:480 msgid "Accept options pushed from server" -msgstr "" +msgstr "Acceptera alternativ som skickas från server" #: applications/luci-app-openvpn/luasrc/view/openvpn/cbi-select-input-add.htm:92 msgid "Add" @@ -31,11 +31,11 @@ msgstr "Lägg till" #: applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua:224 msgid "Add route after establishing connection" -msgstr "" +msgstr "Lägg till rutt efter att anslutningen har etablerats" #: applications/luci-app-openvpn/luasrc/view/openvpn/cbi-select-input-add.htm:92 msgid "Add template based configuration" -msgstr "" +msgstr "Lägg till mall-baserad konfiguration" #: applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua:745 msgid "Additional authentication over TLS" @@ -48,11 +48,11 @@ msgstr "Tillåt klient-till-klienttraffik" #: applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua:421 msgid "Allow multiple clients with same certificate" -msgstr "" +msgstr "Tillåt flertalet klienter med samma certifikat" #: applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua:737 msgid "Allow only one session" -msgstr "" +msgstr "Tillåt endast en session" #: applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua:192 msgid "Allow remote to change its IP or port" @@ -60,7 +60,7 @@ msgstr "" #: applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua:456 msgid "Allowed maximum of connected clients" -msgstr "" +msgstr "Maximalt antalet tillåtna ansluta klienter" #: applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua:461 msgid "Allowed maximum of internal" @@ -68,7 +68,7 @@ msgstr "" #: applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua:466 msgid "Allowed maximum of new connections" -msgstr "" +msgstr "Maximalt antalet nya tillåtna anslutningar" #: applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua:67 msgid "Append log to file" @@ -76,7 +76,7 @@ msgstr "" #: applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua:485 msgid "Authenticate using username/password" -msgstr "" +msgstr "Autentisera med användarnamn/lösenord" #: applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua:555 msgid "Automatically redirect default route" @@ -85,6 +85,8 @@ msgstr "" #: applications/luci-app-openvpn/luasrc/model/cbi/openvpn.lua:11 msgid "Below is a list of configured OpenVPN instances and their current state" msgstr "" +"Nedan är en lista över konfigurerade OpenVPN-instanser och deras nuvarande " +"tillstånd" #: applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua:119 msgid "Call down cmd/script before TUN/TAP close" @@ -98,7 +100,7 @@ msgstr "" #: applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua:79 #: applications/luci-app-openvpn/luasrc/model/cbi/openvpn-basic.lua:17 msgid "Change process priority" -msgstr "" +msgstr "Ändra process-prioritet" #: applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua:39 msgid "Change to directory before initialization" @@ -114,7 +116,7 @@ msgstr "" #: applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua:391 msgid "Client is disabled" -msgstr "" +msgstr "Klienten är avstängd" #: applications/luci-app-openvpn/luasrc/view/openvpn/pageswitch.htm:20 msgid "Configuration category" @@ -123,7 +125,7 @@ msgstr "" #: applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua:476 #: applications/luci-app-openvpn/luasrc/model/cbi/openvpn-basic.lua:53 msgid "Configure client mode" -msgstr "" +msgstr "Ställ in klient-läge" #: applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua:376 #: applications/luci-app-openvpn/luasrc/model/cbi/openvpn-basic.lua:37 @@ -133,15 +135,15 @@ msgstr "" #: applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua:371 #: applications/luci-app-openvpn/luasrc/model/cbi/openvpn-basic.lua:33 msgid "Configure server mode" -msgstr "" +msgstr "Ställ in server-läge" #: applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua:539 msgid "Connect through Socks5 proxy" -msgstr "" +msgstr "Anslut genom Socks5-proxy" #: applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua:519 msgid "Connect to remote host through an HTTP proxy" -msgstr "" +msgstr "Anslut till en fjärrvärd genom en HTTP-proxy" #: applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua:514 msgid "Connection retry interval" @@ -183,7 +185,7 @@ msgstr "" #: applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua:236 msgid "Don't add routes automatically" -msgstr "" +msgstr "Lägg inte till rutter automatiskt" #: applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua:757 msgid "Don't cache --askpass or --auth-user-pass passwords" @@ -191,7 +193,7 @@ msgstr "" #: applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua:244 msgid "Don't drop incoming tun packets with same destination as host" -msgstr "" +msgstr "Släpp inte inkommande tun-paket med samma destination som värden" #: applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua:386 msgid "Don't inherit global push options" @@ -199,7 +201,7 @@ msgstr "" #: applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua:71 msgid "Don't log timestamps" -msgstr "" +msgstr "Logga inte tidsstämplar" #: applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua:240 msgid "Don't pull routes automatically" @@ -207,11 +209,11 @@ msgstr "" #: applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua:331 msgid "Don't re-read key on restart" -msgstr "" +msgstr "Läs inte om nyckel vid omstart" #: applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua:260 msgid "Don't use adaptive lzo compression" -msgstr "" +msgstr "Använd inte adaptiv lzo-komprimering" #: applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua:220 msgid "Don't warn on ifconfig inconsistencies" @@ -219,7 +221,7 @@ msgstr "" #: applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua:87 msgid "Echo parameters to log" -msgstr "" +msgstr "Eka parametrar till logg" #: applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua:252 msgid "Empirically measure MTU" @@ -241,11 +243,11 @@ msgstr "" #: applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua:652 #: applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua:677 msgid "Enable TLS and assume client role" -msgstr "" +msgstr "Aktivera TLS och anta klient-roll" #: applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua:647 msgid "Enable TLS and assume server role" -msgstr "" +msgstr "Aktivera TLS och anta server-roll" #: applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua:164 msgid "Enable a compression algorithm" @@ -273,7 +275,7 @@ msgstr "" #: applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua:127 msgid "Execute shell cmd after routes are added" -msgstr "" +msgstr "Kör skal-kommando efter att rutterna har lagts till" #: applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua:131 msgid "Execute shell command on remote ip change" diff --git a/qca/feeds/luci/applications/luci-app-opkg/po/pt/opkg.po b/qca/feeds/luci/applications/luci-app-opkg/po/pt/opkg.po index 473c3dca78d..56a95b3828f 100644 --- a/qca/feeds/luci/applications/luci-app-opkg/po/pt/opkg.po +++ b/qca/feeds/luci/applications/luci-app-opkg/po/pt/opkg.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-05-26 19:03+0200\n" -"PO-Revision-Date: 2020-05-03 18:57+0000\n" -"Last-Translator: ssantos \n" +"PO-Revision-Date: 2022-03-16 09:23+0000\n" +"Last-Translator: moonlightz \n" "Language-Team: Portuguese \n" "Language: pt\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.1-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-opkg/luasrc/view/opkg.htm:112 msgid "Actions" @@ -20,7 +20,7 @@ msgstr "Ações" #: applications/luci-app-opkg/htdocs/luci-static/resources/view/opkg.js:727 msgid "Automatically remove unused dependencies" -msgstr "Remover automaticamente dependências não usadas" +msgstr "Remover automaticamente dependências não utilizadas" #: applications/luci-app-opkg/luasrc/view/opkg.htm:122 msgid "Available" @@ -33,8 +33,8 @@ msgid "" "custom repository entries. The configuration in the other files may be " "changed but is usually not preserved by sysupgrade." msgstr "" -"Abaixo encontra-se uma lista dos vários ficheiros de configuração usados " -"pelo opkg. Use opkg.conf para definições globais e " +"Em baixo está uma listagem dos vários ficheiros de configuração utilizados " +"pelo opkg. Utilize opkg.conf para definições globais e " "customfeeds.conf para entradas de repositórios personalizados. A " "configuração dos outros ficheiros pode ser alterada mas geralmente não é " "preservada pelo sysupgrade." @@ -149,15 +149,15 @@ msgstr "Próxima página" #: applications/luci-app-opkg/htdocs/luci-static/resources/view/opkg.js:250 msgid "No information available" -msgstr "Sem informação disponível" +msgstr "Não há informação disponível" #: applications/luci-app-opkg/htdocs/luci-static/resources/view/opkg.js:238 msgid "No packages" -msgstr "Sem pacotes" +msgstr "Não há pacotes" #: applications/luci-app-opkg/htdocs/luci-static/resources/view/opkg.js:254 msgid "No packages matching \"%h\"." -msgstr "Sem pacotes com correspondência a \"%h\"." +msgstr "Não há pacotes com correspondência a \"%h\"." #: applications/luci-app-opkg/htdocs/luci-static/resources/view/opkg.js:419 msgid "Not available" diff --git a/qca/feeds/luci/applications/luci-app-p910nd/po/el/p910nd.po b/qca/feeds/luci/applications/luci-app-p910nd/po/el/p910nd.po index 02bc43990f7..135201fff38 100644 --- a/qca/feeds/luci/applications/luci-app-p910nd/po/el/p910nd.po +++ b/qca/feeds/luci/applications/luci-app-p910nd/po/el/p910nd.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-05-28 02:08+0200\n" -"PO-Revision-Date: 2020-12-01 16:16+0000\n" -"Last-Translator: Marios Koutsoukis \n" +"PO-Revision-Date: 2022-03-25 12:08+0000\n" +"Last-Translator: MarioK239 \n" "Language-Team: Greek \n" "Language: el\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.4-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-p910nd/luasrc/model/cbi/p910nd.lua:47 msgid "Bidirectional mode" diff --git a/qca/feeds/luci/applications/luci-app-p910nd/po/pt/p910nd.po b/qca/feeds/luci/applications/luci-app-p910nd/po/pt/p910nd.po index 68f6ec9911f..cfec4601431 100644 --- a/qca/feeds/luci/applications/luci-app-p910nd/po/pt/p910nd.po +++ b/qca/feeds/luci/applications/luci-app-p910nd/po/pt/p910nd.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-05-26 19:03+0200\n" -"PO-Revision-Date: 2020-05-02 10:21+0000\n" -"Last-Translator: ssantos \n" +"PO-Revision-Date: 2022-03-16 09:23+0000\n" +"Last-Translator: moonlightz \n" "Language-Team: Portuguese \n" "Language: pt\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.1-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-p910nd/luasrc/model/cbi/p910nd.lua:47 msgid "Bidirectional mode" @@ -40,7 +40,7 @@ msgstr "Porta" #: applications/luci-app-p910nd/luasrc/model/cbi/p910nd.lua:14 msgid "Settings" -msgstr "Configurações" +msgstr "Definições" #: applications/luci-app-p910nd/luasrc/model/cbi/p910nd.lua:22 msgid "Specifies the interface to listen on." diff --git a/qca/feeds/luci/applications/luci-app-pagekitec/po/de/pagekitec.po b/qca/feeds/luci/applications/luci-app-pagekitec/po/de/pagekitec.po index 109602a7137..88d4b0a0b04 100644 --- a/qca/feeds/luci/applications/luci-app-pagekitec/po/de/pagekitec.po +++ b/qca/feeds/luci/applications/luci-app-pagekitec/po/de/pagekitec.po @@ -1,14 +1,14 @@ msgid "" msgstr "" -"PO-Revision-Date: 2021-02-08 04:46+0000\n" -"Last-Translator: Zocker1012 \n" +"PO-Revision-Date: 2022-03-26 23:10+0000\n" +"Last-Translator: ssantos \n" "Language-Team: German \n" "Language: de\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.5-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-pagekitec/luasrc/model/cbi/pagekitec.lua:2 msgid "" @@ -27,11 +27,11 @@ msgstr "" #: applications/luci-app-pagekitec/luasrc/model/cbi/pagekitec.lua:20 msgid "Basic HTTP" -msgstr "" +msgstr "Einfaches HTTP" #: applications/luci-app-pagekitec/luasrc/model/cbi/pagekitec.lua:23 msgid "Basic SSH" -msgstr "" +msgstr "EInfaches SSH" #: applications/luci-app-pagekitec/luasrc/model/cbi/pagekitec.lua:21 msgid "" @@ -67,3 +67,5 @@ msgid "" "Static setup, disable FE failover and DDNS updates, set this if you are " "running your own frontend without a pagekite.me account" msgstr "" +"Statische Einrichtung, FE-Failover und DDNS-Updates deaktivieren, wenn Sie " +"Ihr eigenes Frontend ohne pagekite.me-Konto betreiben" diff --git a/qca/feeds/luci/applications/luci-app-polipo/po/el/polipo.po b/qca/feeds/luci/applications/luci-app-polipo/po/el/polipo.po index 83a81a270f4..148a48ccc7e 100644 --- a/qca/feeds/luci/applications/luci-app-polipo/po/el/polipo.po +++ b/qca/feeds/luci/applications/luci-app-polipo/po/el/polipo.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-05-28 02:08+0200\n" -"PO-Revision-Date: 2021-01-23 03:57+0000\n" -"Last-Translator: Savvas Sfantos \n" +"PO-Revision-Date: 2022-03-25 12:08+0000\n" +"Last-Translator: MarioK239 \n" "Language-Team: Greek \n" "Language: el\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.5-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-polipo/luasrc/model/cbi/polipo.lua:121 msgid "Advanced Settings" @@ -79,11 +79,11 @@ msgstr "" #: applications/luci-app-polipo/luasrc/model/cbi/polipo.lua:18 msgid "Listen address" -msgstr "" +msgstr "Διεύθυνση ακοής" #: applications/luci-app-polipo/luasrc/model/cbi/polipo.lua:26 msgid "Listen port" -msgstr "" +msgstr "Θύρα ακοής" #: applications/luci-app-polipo/luasrc/model/cbi/polipo.lua:126 msgid "" diff --git a/qca/feeds/luci/applications/luci-app-qos/po/el/qos.po b/qca/feeds/luci/applications/luci-app-qos/po/el/qos.po index f34e7f855bf..73f2233d413 100644 --- a/qca/feeds/luci/applications/luci-app-qos/po/el/qos.po +++ b/qca/feeds/luci/applications/luci-app-qos/po/el/qos.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-03-25 22:10+0100\n" -"PO-Revision-Date: 2022-02-12 15:57+0000\n" +"PO-Revision-Date: 2022-03-25 12:08+0000\n" "Last-Translator: MarioK239 \n" "Language-Team: Greek \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.11-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-qos/luasrc/model/cbi/qos/qos.lua:23 msgid "Calculate overhead" @@ -28,24 +28,23 @@ msgstr "Γκρούπ classification" #: applications/luci-app-qos/luasrc/model/cbi/qos/qos.lua:79 msgid "Comment" -msgstr "" +msgstr "Σχόλιο" #: applications/luci-app-qos/luasrc/model/cbi/qos/qos.lua:61 msgid "Destination host" -msgstr "" +msgstr "Host προορισμού" #: applications/luci-app-qos/luasrc/model/cbi/qos/qos.lua:27 msgid "Download speed (kbit/s)" -msgstr "" +msgstr "Ταχύτητα λήψης (kbit/s)" #: applications/luci-app-qos/luasrc/model/cbi/qos/qos.lua:16 msgid "Enable" msgstr "Ενεργοποίηση" #: applications/luci-app-qos/luasrc/model/cbi/qos/qos.lua:25 -#, fuzzy msgid "Half-duplex" -msgstr "Μη-ταυτόχρονη αμφίδρομη επικοινωνία" +msgstr "Μη ταυτόχρονη αμφίδρομη επικοινωνία" #: applications/luci-app-qos/luasrc/model/cbi/qos/qos.lua:12 msgid "Interfaces" @@ -53,7 +52,7 @@ msgstr "Διεπαφές" #: applications/luci-app-qos/luasrc/model/cbi/qos/qos.lua:77 msgid "Number of bytes" -msgstr "" +msgstr "Αριθμός byte" #: applications/luci-app-qos/luasrc/model/cbi/qos/qos.lua:73 msgid "Ports" @@ -72,34 +71,32 @@ msgid "Quality of Service" msgstr "Ποιότητα Υπηρεσίας" #: applications/luci-app-qos/luasrc/model/cbi/qos/qos.lua:56 -#, fuzzy msgid "Source host" -msgstr "Διεύθυνση πηγής" +msgstr "Host πηγής" #: applications/luci-app-qos/luasrc/model/cbi/qos/qos.lua:39 -#, fuzzy msgid "Target" -msgstr "Διεύθυνση στόχου" +msgstr "Στόχος" #: applications/luci-app-qos/luasrc/model/cbi/qos/qos.lua:30 msgid "Upload speed (kbit/s)" -msgstr "" +msgstr "Ταχύτητα μεταφόρτωσης (kbit/s)" #: applications/luci-app-qos/luasrc/model/cbi/qos/qos.lua:8 -#, fuzzy msgid "" "With QoS you can prioritize " "network traffic selected by addresses, ports or services." msgstr "" -"Με το QoS μπορείτε να ορίσετε προτεραιότητες στην κίνηση του δικτύου με βάση " -"διευθύνσεις, θύρες ή υπηρεσίες." +"Με το QoS μπορείτε να δώσετε " +"προτεραιότητα στην κυκλοφορία δικτύου που επιλέγεται από διευθύνσεις, θύρες " +"ή υπηρεσίες." #: applications/luci-app-qos/luasrc/model/cbi/qos/qos.lua:58 #: applications/luci-app-qos/luasrc/model/cbi/qos/qos.lua:63 #: applications/luci-app-qos/luasrc/model/cbi/qos/qos.lua:67 #: applications/luci-app-qos/luasrc/model/cbi/qos/qos.lua:75 msgid "all" -msgstr "" +msgstr "όλα" #: applications/luci-app-qos/luasrc/model/cbi/qos/qos.lua:20 msgid "default" diff --git a/qca/feeds/luci/applications/luci-app-qos/po/ko/qos.po b/qca/feeds/luci/applications/luci-app-qos/po/ko/qos.po index 0d08993beff..fc72ef8bd53 100644 --- a/qca/feeds/luci/applications/luci-app-qos/po/ko/qos.po +++ b/qca/feeds/luci/applications/luci-app-qos/po/ko/qos.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-03-25 22:10+0100\n" -"PO-Revision-Date: 2020-04-19 00:53+0000\n" -"Last-Translator: EP45 \n" +"PO-Revision-Date: 2022-03-26 19:08+0000\n" +"Last-Translator: dikastia \n" "Language-Team: Korean \n" "Language: ko\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.0.2-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-qos/luasrc/model/cbi/qos/qos.lua:23 msgid "Calculate overhead" @@ -48,7 +48,7 @@ msgstr "" #: applications/luci-app-qos/luasrc/model/cbi/qos/qos.lua:12 msgid "Interfaces" -msgstr "" +msgstr "인터페이스" #: applications/luci-app-qos/luasrc/model/cbi/qos/qos.lua:77 msgid "Number of bytes" @@ -56,7 +56,7 @@ msgstr "" #: applications/luci-app-qos/luasrc/model/cbi/qos/qos.lua:73 msgid "Ports" -msgstr "" +msgstr "포트" #: applications/luci-app-qos/luasrc/model/cbi/qos/qos.lua:66 msgid "Protocol" diff --git a/qca/feeds/luci/applications/luci-app-qos/po/vi/qos.po b/qca/feeds/luci/applications/luci-app-qos/po/vi/qos.po index e180e51b1ec..f92b311e842 100644 --- a/qca/feeds/luci/applications/luci-app-qos/po/vi/qos.po +++ b/qca/feeds/luci/applications/luci-app-qos/po/vi/qos.po @@ -5,8 +5,8 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-03-25 22:10+0100\n" -"PO-Revision-Date: 2020-11-21 12:21+0000\n" -"Last-Translator: Darias \n" +"PO-Revision-Date: 2022-03-26 11:55+0000\n" +"Last-Translator: Jeffeditae \n" "Language-Team: Vietnamese \n" "Language: vi\n" @@ -14,10 +14,9 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.4-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-qos/luasrc/model/cbi/qos/qos.lua:23 -#, fuzzy msgid "Calculate overhead" msgstr "Tính toán tổng quát" @@ -48,7 +47,7 @@ msgstr "Kích hoạt" #: applications/luci-app-qos/luasrc/model/cbi/qos/qos.lua:25 #, fuzzy msgid "Half-duplex" -msgstr "Half-Duplex" +msgstr "Bán song công" #: applications/luci-app-qos/luasrc/model/cbi/qos/qos.lua:12 msgid "Interfaces" diff --git a/qca/feeds/luci/applications/luci-app-radicale/po/ko/radicale.po b/qca/feeds/luci/applications/luci-app-radicale/po/ko/radicale.po index e6538a7da2b..f8ee7af9555 100644 --- a/qca/feeds/luci/applications/luci-app-radicale/po/ko/radicale.po +++ b/qca/feeds/luci/applications/luci-app-radicale/po/ko/radicale.po @@ -1,14 +1,14 @@ msgid "" msgstr "" -"PO-Revision-Date: 2021-06-07 10:49+0000\n" -"Last-Translator: Sunggu Choi \n" +"PO-Revision-Date: 2022-03-26 23:10+0000\n" +"Last-Translator: dikastia \n" "Language-Team: Korean \n" "Language: ko\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.7-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-radicale/luasrc/model/cbi/radicale.lua:268 msgid "" @@ -120,7 +120,7 @@ msgstr "" #: applications/luci-app-radicale/luasrc/model/cbi/radicale.lua:570 #: applications/luci-app-radicale/luasrc/model/cbi/radicale.lua:592 msgid "Debug" -msgstr "" +msgstr "디버그" #: applications/luci-app-radicale/luasrc/model/cbi/radicale.lua:191 msgid "Delay (in seconds) during system boot before Radicale start" @@ -175,7 +175,7 @@ msgstr "" #: applications/luci-app-radicale/luasrc/model/cbi/radicale.lua:573 #: applications/luci-app-radicale/luasrc/model/cbi/radicale.lua:595 msgid "Error" -msgstr "" +msgstr "에러" #: applications/luci-app-radicale/luasrc/model/cbi/radicale.lua:120 msgid "File '%s' not found !" @@ -224,7 +224,7 @@ msgstr "" #: applications/luci-app-radicale/luasrc/model/cbi/radicale.lua:571 #: applications/luci-app-radicale/luasrc/model/cbi/radicale.lua:593 msgid "Info" -msgstr "" +msgstr "정보" #: applications/luci-app-radicale/luasrc/model/cbi/radicale.lua:83 msgid "Keep in mind to use the correct hashing algorithm !" @@ -488,7 +488,7 @@ msgstr "" #: applications/luci-app-radicale/luasrc/model/cbi/radicale.lua:572 #: applications/luci-app-radicale/luasrc/model/cbi/radicale.lua:594 msgid "Warning" -msgstr "" +msgstr "경고" #: applications/luci-app-radicale/luasrc/model/cbi/radicale.lua:90 msgid "" diff --git a/qca/feeds/luci/applications/luci-app-radicale2/po/el/radicale2.po b/qca/feeds/luci/applications/luci-app-radicale2/po/el/radicale2.po index 9f87d670e0a..ab16263630e 100644 --- a/qca/feeds/luci/applications/luci-app-radicale2/po/el/radicale2.po +++ b/qca/feeds/luci/applications/luci-app-radicale2/po/el/radicale2.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: luci-app-radicale 2\n" -"PO-Revision-Date: 2022-02-12 20:10+0000\n" +"PO-Revision-Date: 2022-03-25 12:08+0000\n" "Last-Translator: MarioK239 \n" "Language-Team: Greek \n" @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.11-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-radicale2/luasrc/model/cbi/radicale2/auth.lua:8 #: applications/luci-app-radicale2/luasrc/model/cbi/radicale2/logging.lua:4 @@ -397,7 +397,7 @@ msgstr "" #: applications/luci-app-radicale2/luasrc/controller/radicale2.lua:16 #: applications/luci-app-radicale2/luasrc/model/cbi/radicale2/server.lua:18 msgid "Server Settings" -msgstr "" +msgstr "Ρυθμίσεις διακομιστή" #: applications/luci-app-radicale2/luasrc/model/cbi/radicale2/server.lua:47 msgid "Socket timeout (seconds)" @@ -439,7 +439,7 @@ msgstr "" #: applications/luci-app-radicale2/luasrc/model/cbi/radicale2/auth.lua:66 msgid "User" -msgstr "" +msgstr "Χρήστης" #: applications/luci-app-radicale2/luasrc/model/cbi/radicale2/auth.lua:162 msgid "User-based ACL Settings" diff --git a/qca/feeds/luci/applications/luci-app-radicale2/po/ko/radicale2.po b/qca/feeds/luci/applications/luci-app-radicale2/po/ko/radicale2.po index 8b9801b7389..c533b0b332e 100644 --- a/qca/feeds/luci/applications/luci-app-radicale2/po/ko/radicale2.po +++ b/qca/feeds/luci/applications/luci-app-radicale2/po/ko/radicale2.po @@ -1,8 +1,8 @@ msgid "" msgstr "" "Project-Id-Version: luci-app-radicale 2\n" -"PO-Revision-Date: 2021-01-17 20:54+0000\n" -"Last-Translator: ANTEGRAL \n" +"PO-Revision-Date: 2022-03-26 23:10+0000\n" +"Last-Translator: dikastia \n" "Language-Team: Korean \n" "Language: ko\n" @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.5-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-radicale2/luasrc/model/cbi/radicale2/auth.lua:8 #: applications/luci-app-radicale2/luasrc/model/cbi/radicale2/logging.lua:4 @@ -77,7 +77,7 @@ msgstr "" #: applications/luci-app-radicale2/luasrc/model/cbi/radicale2/logging.lua:26 msgid "Debug" -msgstr "" +msgstr "디버그" #: applications/luci-app-radicale2/luasrc/model/cbi/radicale2/auth.lua:15 msgid "Default (htpasswd file from users below)" diff --git a/qca/feeds/luci/applications/luci-app-samba4/po/ko/samba4.po b/qca/feeds/luci/applications/luci-app-samba4/po/ko/samba4.po index 4ec888fe1b2..aa08b7b56af 100644 --- a/qca/feeds/luci/applications/luci-app-samba4/po/ko/samba4.po +++ b/qca/feeds/luci/applications/luci-app-samba4/po/ko/samba4.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-03-22 15:23+0100\n" -"PO-Revision-Date: 2021-01-17 20:54+0000\n" -"Last-Translator: ANTEGRAL \n" +"PO-Revision-Date: 2022-03-26 13:17+0000\n" +"Last-Translator: dikastia \n" "Language-Team: Korean \n" "Language: ko\n" @@ -12,33 +12,35 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.5-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:101 msgid "Allow guests" -msgstr "" +msgstr "손님 허용" #: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:48 msgid "Allow legacy (insecure) protocols/authentication." -msgstr "" +msgstr "레거시(안전하지 않는) 프로토콜/인증을 허용." #: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:49 msgid "" "Allow legacy smb(v1)/Lanman connections, needed for older devices without " "smb(v2.1/3) support." msgstr "" +"레거시 smb(v1)/Lanman 연결을 허용합니다. smb(v2.1/3) 지원되지 않는 이전 장치" +"에 필요합니다." #: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:98 msgid "Allowed users" -msgstr "" +msgstr "허용된 사용자" #: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:132 msgid "Apple Time-machine share" -msgstr "" +msgstr "Apple 타임머신 공유" #: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:85 msgid "Browse-able" -msgstr "" +msgstr "탐색가능" #: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:117 msgid "Create mask" @@ -58,23 +60,23 @@ msgstr "" #: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:52 msgid "Disable Netbios" -msgstr "" +msgstr "Netbios를 비활성화" #: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:58 msgid "Disable Winbind" -msgstr "" +msgstr "Winbind를 비활성화" #: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:31 msgid "Edit Template" -msgstr "" +msgstr "템플릿 편집" #: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:62 msgid "Edit the template that is used for generating the samba configuration." -msgstr "" +msgstr "amba 설정을 생성하는 템플릿을 편집합니다." #: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:45 msgid "Enable macOS compatible shares" -msgstr "" +msgstr "macOS 호환 공유 사용" #: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:46 msgid "" diff --git a/qca/feeds/luci/applications/luci-app-shadowsocks-libev/po/ko/shadowsocks-libev.po b/qca/feeds/luci/applications/luci-app-shadowsocks-libev/po/ko/shadowsocks-libev.po index 503831e309e..8728cc9172f 100644 --- a/qca/feeds/luci/applications/luci-app-shadowsocks-libev/po/ko/shadowsocks-libev.po +++ b/qca/feeds/luci/applications/luci-app-shadowsocks-libev/po/ko/shadowsocks-libev.po @@ -1,14 +1,14 @@ msgid "" msgstr "" -"PO-Revision-Date: 2021-06-07 10:49+0000\n" -"Last-Translator: Sunggu Choi \n" +"PO-Revision-Date: 2022-03-26 23:10+0000\n" +"Last-Translator: dikastia \n" "Language-Team: Korean \n" "Language: ko\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.7-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:176 msgid "" diff --git a/qca/feeds/luci/applications/luci-app-shadowsocks-libev/po/pl/shadowsocks-libev.po b/qca/feeds/luci/applications/luci-app-shadowsocks-libev/po/pl/shadowsocks-libev.po index 04deea8eb71..0255d0ce07f 100644 --- a/qca/feeds/luci/applications/luci-app-shadowsocks-libev/po/pl/shadowsocks-libev.po +++ b/qca/feeds/luci/applications/luci-app-shadowsocks-libev/po/pl/shadowsocks-libev.po @@ -1,7 +1,7 @@ msgid "" msgstr "" -"PO-Revision-Date: 2020-08-06 15:32+0000\n" -"Last-Translator: Marcin Net \n" +"PO-Revision-Date: 2022-03-26 11:55+0000\n" +"Last-Translator: Matthaiks \n" "Language-Team: Polish \n" "Language: pl\n" @@ -9,7 +9,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 4.2-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:176 msgid "" @@ -99,11 +99,11 @@ msgstr "Plik obejściowy dst ip/net" #: applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/rules.lua:75 msgid "Dst ip/net forward" -msgstr "Przekazuj Dst ip/net" +msgstr "Przekazuj dst ip/net" #: applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/rules.lua:83 msgid "Dst ip/net forward file" -msgstr "Plik przekazywania Dst ip/net" +msgstr "Plik przekazywania dst ip/net" #: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:132 msgid "Enable SO_REUSEPORT" @@ -324,15 +324,15 @@ msgstr "Domyślnie src" #: applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/rules.lua:58 msgid "Src ip/net bypass" -msgstr "Obejście ip/sieci Src" +msgstr "Obejście src ip/net" #: applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/rules.lua:64 msgid "Src ip/net checkdst" -msgstr "Src ip/net checkdst" +msgstr "Checkdst src ip/net" #: applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/rules.lua:61 msgid "Src ip/net forward" -msgstr "Przekazuj Src ip/net" +msgstr "Przekazuj src ip/net" #: applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/instance-details.lua:33 msgid "The address ss-server will initiate connection from" diff --git a/qca/feeds/luci/applications/luci-app-shadowsocks-libev/po/pt/shadowsocks-libev.po b/qca/feeds/luci/applications/luci-app-shadowsocks-libev/po/pt/shadowsocks-libev.po index 84aae9ea555..050336fd962 100644 --- a/qca/feeds/luci/applications/luci-app-shadowsocks-libev/po/pt/shadowsocks-libev.po +++ b/qca/feeds/luci/applications/luci-app-shadowsocks-libev/po/pt/shadowsocks-libev.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"PO-Revision-Date: 2020-11-05 13:59+0000\n" +"PO-Revision-Date: 2022-03-26 23:10+0000\n" "Last-Translator: ssantos \n" "Language-Team: Portuguese \n" @@ -8,7 +8,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.3.2-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:176 msgid "" diff --git a/qca/feeds/luci/applications/luci-app-shadowsocks-libev/po/pt_BR/shadowsocks-libev.po b/qca/feeds/luci/applications/luci-app-shadowsocks-libev/po/pt_BR/shadowsocks-libev.po index 031a31211c1..6038967cbea 100644 --- a/qca/feeds/luci/applications/luci-app-shadowsocks-libev/po/pt_BR/shadowsocks-libev.po +++ b/qca/feeds/luci/applications/luci-app-shadowsocks-libev/po/pt_BR/shadowsocks-libev.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"PO-Revision-Date: 2021-09-06 16:34+0000\n" +"PO-Revision-Date: 2022-03-26 23:10+0000\n" "Last-Translator: Wellington Terumi Uemura \n" "Language-Team: Portuguese (Brazil) \n" @@ -8,7 +8,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.8.1-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:176 msgid "" diff --git a/qca/feeds/luci/applications/luci-app-shadowsocks-libev/po/tr/shadowsocks-libev.po b/qca/feeds/luci/applications/luci-app-shadowsocks-libev/po/tr/shadowsocks-libev.po index 3c0e06faa62..db3420ff708 100644 --- a/qca/feeds/luci/applications/luci-app-shadowsocks-libev/po/tr/shadowsocks-libev.po +++ b/qca/feeds/luci/applications/luci-app-shadowsocks-libev/po/tr/shadowsocks-libev.po @@ -1,14 +1,14 @@ msgid "" msgstr "" -"PO-Revision-Date: 2021-05-15 14:32+0000\n" -"Last-Translator: semih \n" +"PO-Revision-Date: 2022-03-26 11:55+0000\n" +"Last-Translator: Oğuz Ersen \n" "Language-Team: Turkish \n" "Language: tr\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.7-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:176 msgid "" diff --git a/qca/feeds/luci/applications/luci-app-shadowsocks-libev/po/zh_Hans/shadowsocks-libev.po b/qca/feeds/luci/applications/luci-app-shadowsocks-libev/po/zh_Hans/shadowsocks-libev.po index 15597c94b28..9bec756a49f 100644 --- a/qca/feeds/luci/applications/luci-app-shadowsocks-libev/po/zh_Hans/shadowsocks-libev.po +++ b/qca/feeds/luci/applications/luci-app-shadowsocks-libev/po/zh_Hans/shadowsocks-libev.po @@ -1,7 +1,7 @@ msgid "" msgstr "" -"PO-Revision-Date: 2021-04-12 08:24+0000\n" -"Last-Translator: xiazhang \n" +"PO-Revision-Date: 2022-03-26 11:55+0000\n" +"Last-Translator: Eric \n" "Language-Team: Chinese (Simplified) \n" "Language: zh_Hans\n" @@ -9,7 +9,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.6-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:176 msgid "" diff --git a/qca/feeds/luci/applications/luci-app-simple-adblock/po/ko/simple-adblock.po b/qca/feeds/luci/applications/luci-app-simple-adblock/po/ko/simple-adblock.po index 492d2ed4680..a2ed59b9bb7 100644 --- a/qca/feeds/luci/applications/luci-app-simple-adblock/po/ko/simple-adblock.po +++ b/qca/feeds/luci/applications/luci-app-simple-adblock/po/ko/simple-adblock.po @@ -1,14 +1,14 @@ msgid "" msgstr "" -"PO-Revision-Date: 2021-06-07 10:49+0000\n" -"Last-Translator: Sunggu Choi \n" +"PO-Revision-Date: 2022-03-26 23:10+0000\n" +"Last-Translator: dikastia \n" "Language-Team: Korean \n" "Language: ko\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.7-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:221 msgid "%s Error: %s" @@ -168,7 +168,7 @@ msgstr "" #: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:139 msgid "Error" -msgstr "" +msgstr "에러" #: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:141 msgid "Fail" @@ -215,7 +215,7 @@ msgstr "" #: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:190 #: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:194 msgid "Info" -msgstr "" +msgstr "정보" #: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:258 msgid "LED to indicate status" @@ -370,7 +370,7 @@ msgstr "" #: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:140 msgid "Warning" -msgstr "" +msgstr "경고" #: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:145 msgid "failed to access shared memory" diff --git a/qca/feeds/luci/applications/luci-app-splash/po/el/splash.po b/qca/feeds/luci/applications/luci-app-splash/po/el/splash.po index 46ec96c4e4d..f5e0587dd93 100644 --- a/qca/feeds/luci/applications/luci-app-splash/po/el/splash.po +++ b/qca/feeds/luci/applications/luci-app-splash/po/el/splash.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2012-03-18 15:31+0200\n" -"PO-Revision-Date: 2020-12-01 16:16+0000\n" -"Last-Translator: Marios Koutsoukis \n" +"PO-Revision-Date: 2022-03-25 12:08+0000\n" +"Last-Translator: MarioK239 \n" "Language-Team: Greek \n" "Language: el\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.4-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-splash/luasrc/view/splash/splash.htm:65 #: applications/luci-app-splash/luasrc/view/splash_splash/splash.htm:13 @@ -238,7 +238,7 @@ msgstr "" #: applications/luci-app-splash/luasrc/view/admin_status/splash.htm:210 msgid "Policy" -msgstr "" +msgstr "Πολιτική" #: applications/luci-app-splash/luasrc/model/cbi/splash/splash.lua:11 msgid "Redirect target" diff --git a/qca/feeds/luci/applications/luci-app-splash/po/ko/splash.po b/qca/feeds/luci/applications/luci-app-splash/po/ko/splash.po index 7cb91dc5e09..471ae9e1806 100644 --- a/qca/feeds/luci/applications/luci-app-splash/po/ko/splash.po +++ b/qca/feeds/luci/applications/luci-app-splash/po/ko/splash.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-10-17 00:31+0200\n" -"PO-Revision-Date: 2021-01-17 20:54+0000\n" -"Last-Translator: ANTEGRAL \n" +"PO-Revision-Date: 2022-03-26 23:10+0000\n" +"Last-Translator: dikastia \n" "Language-Team: Korean \n" "Language: ko\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.5-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-splash/luasrc/view/splash/splash.htm:65 #: applications/luci-app-splash/luasrc/view/splash_splash/splash.htm:13 @@ -181,7 +181,7 @@ msgstr "" #: applications/luci-app-splash/luasrc/model/cbi/splash/splash.lua:21 msgid "Interfaces" -msgstr "" +msgstr "인터페이스" #: applications/luci-app-splash/luasrc/model/cbi/splash/splash.lua:21 msgid "Interfaces that are used for Splash." @@ -223,7 +223,7 @@ msgstr "" #: applications/luci-app-splash/luasrc/model/cbi/splash/splash.lua:37 msgid "Network" -msgstr "" +msgstr "네트워크" #: applications/luci-app-splash/luasrc/view/admin_status/splash.htm:147 #: applications/luci-app-splash/luasrc/view/admin_status/splash.htm:261 diff --git a/qca/feeds/luci/applications/luci-app-squid/po/el/squid.po b/qca/feeds/luci/applications/luci-app-squid/po/el/squid.po index 5908e4314bf..1ae3263adaa 100644 --- a/qca/feeds/luci/applications/luci-app-squid/po/el/squid.po +++ b/qca/feeds/luci/applications/luci-app-squid/po/el/squid.po @@ -1,14 +1,14 @@ msgid "" msgstr "" -"PO-Revision-Date: 2021-01-23 03:57+0000\n" -"Last-Translator: Savvas Sfantos \n" +"PO-Revision-Date: 2022-03-25 12:08+0000\n" +"Last-Translator: MarioK239 \n" "Language-Team: Greek \n" "Language: el\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.5-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-squid/luasrc/model/cbi/squid.lua:42 msgid "Advanced Settings" @@ -16,7 +16,7 @@ msgstr "Ρυθμίσεις για προχωρημένους" #: applications/luci-app-squid/luasrc/model/cbi/squid.lua:38 msgid "Coredump files directory" -msgstr "" +msgstr "Κατάλογος αρχείων Coredump" #: applications/luci-app-squid/luasrc/model/cbi/squid.lua:28 msgid "General Settings" @@ -29,8 +29,8 @@ msgstr "Θύρα" #: applications/luci-app-squid/luasrc/controller/squid.lua:20 #: applications/luci-app-squid/luasrc/model/cbi/squid.lua:21 msgid "Squid" -msgstr "" +msgstr "Squid" #: applications/luci-app-squid/luasrc/model/cbi/squid.lua:34 msgid "Visible Hostname" -msgstr "" +msgstr "Ορατό Hostname" diff --git a/qca/feeds/luci/applications/luci-app-statistics/po/el/statistics.po b/qca/feeds/luci/applications/luci-app-statistics/po/el/statistics.po index 69b03019bee..05a6452ecff 100644 --- a/qca/feeds/luci/applications/luci-app-statistics/po/el/statistics.po +++ b/qca/feeds/luci/applications/luci-app-statistics/po/el/statistics.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-06-10 03:40+0200\n" -"PO-Revision-Date: 2022-02-12 20:10+0000\n" +"PO-Revision-Date: 2022-03-25 12:08+0000\n" "Last-Translator: MarioK239 \n" "Language-Team: Greek \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.11-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-statistics/luasrc/statistics/plugins/apcups.lua:7 #: applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/apcups.lua:7 @@ -396,7 +396,7 @@ msgstr "" #: applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/network.lua:37 msgid "Listen port" -msgstr "" +msgstr "Θύρα ακοής" #: applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/network.lua:24 msgid "Listener interfaces" @@ -1048,7 +1048,7 @@ msgstr "Αρχείο PID σε χρήση" #: applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/exec.lua:36 #: applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/exec.lua:65 msgid "User" -msgstr "" +msgstr "Χρήστης" #: applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/netlink.lua:35 msgid "Verbose monitoring" diff --git a/qca/feeds/luci/applications/luci-app-statistics/po/ko/statistics.po b/qca/feeds/luci/applications/luci-app-statistics/po/ko/statistics.po index 4c96f0411d2..7e09d9249eb 100644 --- a/qca/feeds/luci/applications/luci-app-statistics/po/ko/statistics.po +++ b/qca/feeds/luci/applications/luci-app-statistics/po/ko/statistics.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-05-19 19:35+0200\n" -"PO-Revision-Date: 2021-06-07 10:49+0000\n" -"Last-Translator: Sunggu Choi \n" +"PO-Revision-Date: 2022-03-26 23:10+0000\n" +"Last-Translator: dikastia \n" "Language-Team: Korean \n" "Language: ko\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.7-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-statistics/luasrc/statistics/plugins/apcups.lua:7 #: applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/apcups.lua:7 @@ -305,7 +305,7 @@ msgstr "" #: applications/luci-app-statistics/luasrc/controller/luci_statistics/luci_statistics.lua:73 msgid "Graphs" -msgstr "" +msgstr "그래프" #: applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/exec.lua:42 #: applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/exec.lua:71 @@ -366,7 +366,7 @@ msgstr "" #: applications/luci-app-statistics/luasrc/statistics/plugins/interface.lua:7 #: applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/interface.lua:7 msgid "Interfaces" -msgstr "" +msgstr "인터페이스" #: applications/luci-app-statistics/luasrc/statistics/plugins/irq.lua:7 #: applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/irq.lua:7 @@ -467,7 +467,7 @@ msgstr "" #: applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/interface.lua:22 #: applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/iwinfo.lua:15 msgid "Monitor interfaces" -msgstr "" +msgstr "모니터 인터페이스" #: applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/irq.lua:20 msgid "Monitor interrupts" @@ -512,7 +512,7 @@ msgstr "" #: applications/luci-app-statistics/luasrc/statistics/plugins/network.lua:2 msgid "Network" -msgstr "" +msgstr "네트워크" #: applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/network.lua:5 msgid "Network Plugin Configuration" diff --git a/qca/feeds/luci/applications/luci-app-statistics/po/pt/statistics.po b/qca/feeds/luci/applications/luci-app-statistics/po/pt/statistics.po index 38e77119ab5..15c6b08f9ac 100644 --- a/qca/feeds/luci/applications/luci-app-statistics/po/pt/statistics.po +++ b/qca/feeds/luci/applications/luci-app-statistics/po/pt/statistics.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-05-26 19:03+0200\n" -"PO-Revision-Date: 2022-01-25 09:41+0000\n" -"Last-Translator: ssantos \n" +"PO-Revision-Date: 2022-03-15 15:17+0000\n" +"Last-Translator: moonlightz \n" "Language-Team: Portuguese \n" "Language: pt\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.11-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-statistics/luasrc/statistics/plugins/apcups.lua:7 #: applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/apcups.lua:7 @@ -1153,7 +1153,7 @@ msgstr "Quando definido como verdadeiro solicitamos valores percentuais" #: applications/luci-app-statistics/luasrc/statistics/plugins/iwinfo.lua:7 #: applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/iwinfo.lua:7 msgid "Wireless" -msgstr "Wireless" +msgstr "Rede sem fios" #: applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/iwinfo.lua:7 msgid "Wireless iwinfo Plugin Configuration" diff --git a/qca/feeds/luci/applications/luci-app-statistics/root/usr/bin/stat-genconfig b/qca/feeds/luci/applications/luci-app-statistics/root/usr/bin/stat-genconfig index 82431fbd391..24a2ca0e012 100755 --- a/qca/feeds/luci/applications/luci-app-statistics/root/usr/bin/stat-genconfig +++ b/qca/feeds/luci/applications/luci-app-statistics/root/usr/bin/stat-genconfig @@ -238,13 +238,13 @@ function _bool( s, n, nopad ) local pad = "" if not nopad then pad = "\t" end - if s and s == "1" then - str = pad .. n .. " true" - else - str = pad .. n .. " false" + if s == "1" then + str = pad .. n .. " true\n" + elseif s == "0" then + str = pad .. n .. " false\n" end - return str .. "\n" + return str end function _string( s, n, nopad ) diff --git a/qca/feeds/luci/applications/luci-app-tinyproxy/po/el/tinyproxy.po b/qca/feeds/luci/applications/luci-app-tinyproxy/po/el/tinyproxy.po index df517eaccae..f2270ab3676 100644 --- a/qca/feeds/luci/applications/luci-app-tinyproxy/po/el/tinyproxy.po +++ b/qca/feeds/luci/applications/luci-app-tinyproxy/po/el/tinyproxy.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-05-28 02:08+0200\n" -"PO-Revision-Date: 2020-04-25 16:36+0000\n" -"Last-Translator: george k \n" +"PO-Revision-Date: 2022-03-25 12:08+0000\n" +"Last-Translator: MarioK239 \n" "Language-Team: Greek \n" "Language: el\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.0.2-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua:219 msgid "" @@ -42,7 +42,6 @@ msgid "Allowed connect ports" msgstr "Επιτρεπόμενες θύρες σύνδεσης" #: applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua:47 -#, fuzzy msgid "Bind address" msgstr "Διεύθυνση στην οποία ακούει η υπηρεσία" @@ -111,7 +110,7 @@ msgstr "Σελίδα σφάλματος" #: applications/luci-app-tinyproxy/luasrc/view/tinyproxy_status.htm:36 msgid "Failed to retrieve statistics from url:" -msgstr "" +msgstr "Απέτυχε η ανάκτηση στατιστικών στοιχείων από τη διεύθυνση url:" #: applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua:148 msgid "Filter by RegExp" @@ -166,14 +165,16 @@ msgid "" "List of allowed ports for the CONNECT method. A single value \"0\" allows " "all ports" msgstr "" +"Λίστα επιτρεπόμενων θυρών για τη μέθοδο CONNECT. Μια ενιαία τιμή \"0\" " +"επιτρέπει όλες τις θύρες" #: applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua:39 msgid "Listen address" -msgstr "" +msgstr "Διεύθυνση ακοής" #: applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua:31 msgid "Listen port" -msgstr "" +msgstr "Θύρα ακοής" #: applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua:73 msgid "Log file" @@ -181,126 +182,142 @@ msgstr "Αρχείο καταγραφής" #: applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua:74 msgid "Log file to use for dumping messages" -msgstr "" +msgstr "Αρχείο καταγραφής που θα χρησιμοποιηθεί για την καταγραφή μηνυμάτων" #: applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua:80 msgid "Log level" -msgstr "" +msgstr "Επίπεδο καταγραφής" #: applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua:81 msgid "Logging verbosity of the Tinyproxy process" -msgstr "" +msgstr "Επίπεδο καταγραφής της υπηρεσίας Tinyproxy" #: applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua:172 msgid "Max. clients" -msgstr "" +msgstr "Μέγ. πελάτες" #: applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua:200 msgid "Max. requests per server" -msgstr "" +msgstr "Μέγ. αιτήματα ανά διακομιστή" #: applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua:186 msgid "Max. spare servers" -msgstr "" +msgstr "Μέγ. εφεδρικοί διακομιστές" #: applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua:173 msgid "Maximum allowed number of concurrently connected clients" -msgstr "" +msgstr "Μέγιστος επιτρεπόμενος αριθμός ταυτόχρονα συνδεδεμένων πελατών" #: applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua:201 msgid "" "Maximum allowed number of requests per process. If it is exeeded, the " "process is restarted. Zero means unlimited." msgstr "" +"Μέγιστος επιτρεπόμενος αριθμός αιτημάτων ανά υπηρεσία. Σε περίπτωση " +"υπέρβασης, η υπηρεσία επανεκκινείται. Μηδέν σημαίνει απεριόριστα." #: applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua:187 msgid "Maximum number of prepared idle processes" -msgstr "" +msgstr "Μέγιστος αριθμός προετοιμασμένων αδρανών υπηρεσιών" #: applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua:165 msgid "Maximum number of seconds an inactive connection is held open" msgstr "" +"Μέγιστος αριθμός δευτερολέπτων που παραμένει ανοιχτή μια ανενεργή σύνδεση" #: applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua:179 msgid "Min. spare servers" -msgstr "" +msgstr "Ελάχ. εφεδρικοί διακομιστές" #: applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua:180 msgid "Minimum number of prepared idle processes" -msgstr "" +msgstr "Ελάχιστος αριθμός προετοιμασμένων αδρανών υπηρεσιών" #: applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua:194 msgid "Number of idle processes to start when launching Tinyproxy" msgstr "" +"Αριθμός αδρανών υπηρεσιών που θα ξεκινήσουν κατά την εκκίνηση του Tinyproxy" #: applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua:141 msgid "Plaintext file with URLs or domains to filter. One entry per line" msgstr "" +"Αρχείο απλού κειμένου με διευθύνσεις URL ή domains προς φιλτράρισμα. Μία " +"καταχώρηση ανά γραμμή" #: applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua:218 msgid "Policy" -msgstr "" +msgstr "Πολιτική" #: applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua:12 msgid "Privacy settings" -msgstr "" +msgstr "Ρυθμίσεις απορρήτου" #: applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua:222 msgid "Reject access" -msgstr "" +msgstr "Απόρριψη πρόσβασης" #: applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua:8 msgid "Server Settings" -msgstr "" +msgstr "Ρυθμίσεις διακομιστή" #: applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua:14 msgid "Server limits" -msgstr "" +msgstr "Όρια διακομιστή" #: applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua:119 msgid "" "Specifies HTTP header names which are allowed to pass-through, all others " "are discarded. Leave empty to disable header filtering" msgstr "" +"Καθορίζει ονόματα κεφαλίδων HTTP που επιτρέπεται να διαβιβάζονται, όλα τα " +"άλλα απορρίπτονται. Αφήστε το κενό για να απενεργοποιήσετε το φιλτράρισμα " +"κεφαλίδων" #: applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua:32 msgid "Specifies the HTTP port Tinyproxy is listening on for requests" -msgstr "" +msgstr "Καθορίζει τη θύρα HTTP που ακούει το Tinyproxy για αιτήματα" #: applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua:112 msgid "Specifies the Tinyproxy hostname to use in the Via HTTP header" msgstr "" +"Καθορίζει το hostname του Tinyproxy που θα χρησιμοποιηθεί στην κεφαλίδα Via " +"HTTP" #: applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua:48 msgid "" "Specifies the address Tinyproxy binds to for outbound forwarded requests" msgstr "" +"Καθορίζει τη διεύθυνση με την οποία συνδέεται το Tinyproxy για εξερχόμενα " +"προωθημένα αιτήματα" #: applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua:40 msgid "Specifies the addresses Tinyproxy is listening on for requests" -msgstr "" +msgstr "Καθορίζει τις διευθύνσεις που ακούει το Tinyproxy για αιτήματα" #: applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua:98 msgid "Specifies the group name the Tinyproxy process is running as" msgstr "" +"Καθορίζει το όνομα της ομάδας στην οποία εκτελείται η υπηρεσία Tinyproxy" #: applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua:234 msgid "" "Specifies the upstream proxy to use for accessing the target host. Format is " "address:port" msgstr "" +"Καθορίζει το upstream proxy που θα χρησιμοποιηθεί για την πρόσβαση στον " +"κεντρικό υπολογιστή προορισμού. Η μορφή είναι address:port" #: applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua:92 msgid "Specifies the user name the Tinyproxy process is running as" -msgstr "" +msgstr "Καθορίζει το όνομα χρήστη με το οποίο εκτελείται η υπηρεσία Tinyproxy" #: applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua:193 msgid "Start spare servers" -msgstr "" +msgstr "Ξεκινήστε τους εφεδρικούς διακομιστές" #: applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua:62 msgid "Statistics page" -msgstr "" +msgstr "Σελίδα στατιστικών" #: applications/luci-app-tinyproxy/luasrc/controller/tinyproxy.lua:13 msgid "Status" @@ -308,52 +325,56 @@ msgstr "Κατάσταση" #: applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua:225 msgid "Target host" -msgstr "" +msgstr "Host προορισμού" #: applications/luci-app-tinyproxy/luasrc/controller/tinyproxy.lua:12 #: applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua:5 msgid "Tinyproxy" -msgstr "" +msgstr "Tinyproxy" #: applications/luci-app-tinyproxy/luasrc/view/tinyproxy_status.htm:51 msgid "Tinyproxy Status" -msgstr "" +msgstr "Κατάσταση Tinyproxy" #: applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua:6 msgid "Tinyproxy is a small and fast non-caching HTTP(S)-Proxy" msgstr "" +"Το Tinyproxy είναι ένας μικρός και γρήγορος διακομιστής μεσολάβησης HTTP(S) " +"χωρίς προσωρινή αποθήκευση" #: applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua:211 msgid "Upstream Proxies" -msgstr "" +msgstr "Upstream μεσολαβητές" #: applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua:212 msgid "" "Upstream proxy rules define proxy servers to use when accessing certain IP " "addresses or domains." msgstr "" +"Οι κανόνες μεσολάβησης upstream ορίζουν τους διακομιστές μεσολάβησης που θα " +"χρησιμοποιηθούν κατά την πρόσβαση σε συγκεκριμένες διευθύνσεις IP ή domains." #: applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua:69 msgid "Use syslog" -msgstr "" +msgstr "Χρήση του syslog" #: applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua:91 msgid "User" -msgstr "" +msgstr "Χρήστης" #: applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua:111 msgid "Via hostname" -msgstr "" +msgstr "Μέσω hostname" #: applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua:221 #: applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua:233 msgid "Via proxy" -msgstr "" +msgstr "Μέσω μεσολαβητή" #: applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua:70 msgid "Writes log messages to syslog instead of a log file" -msgstr "" +msgstr "Γράφει μηνύματα καταγραφής στο syslog αντί για ένα αρχείο καταγραφής" #: applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua:107 msgid "X-Tinyproxy header" -msgstr "" +msgstr "Κεφαλίδα X-Tinyproxy" diff --git a/qca/feeds/luci/applications/luci-app-transmission/po/ko/transmission.po b/qca/feeds/luci/applications/luci-app-transmission/po/ko/transmission.po index 7a1988f0f3a..fdcc6858907 100644 --- a/qca/feeds/luci/applications/luci-app-transmission/po/ko/transmission.po +++ b/qca/feeds/luci/applications/luci-app-transmission/po/ko/transmission.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-10-17 00:31+0200\n" -"PO-Revision-Date: 2021-03-21 14:31+0000\n" -"Last-Translator: asdf1234 \n" +"PO-Revision-Date: 2022-03-26 23:10+0000\n" +"Last-Translator: dikastia \n" "Language-Team: Korean \n" "Language: ko\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.5.2-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-transmission/luasrc/model/cbi/transmission.lua:39 msgid "Alternative download speed" @@ -88,7 +88,7 @@ msgstr "" #: applications/luci-app-transmission/luasrc/model/cbi/transmission.lua:111 msgid "Debug" -msgstr "" +msgstr "디버그" #: applications/luci-app-transmission/luasrc/model/cbi/transmission.lua:65 msgid "Download directory" @@ -116,7 +116,7 @@ msgstr "" #: applications/luci-app-transmission/luasrc/model/cbi/transmission.lua:109 msgid "Error" -msgstr "" +msgstr "에러" #: applications/luci-app-transmission/luasrc/model/cbi/transmission.lua:73 msgid "Fast" @@ -140,7 +140,7 @@ msgstr "" #: applications/luci-app-transmission/luasrc/model/cbi/transmission.lua:19 msgid "Global settings" -msgstr "" +msgstr "전역 설정" #: applications/luci-app-transmission/luasrc/model/cbi/transmission.lua:123 msgid "Idle seeding limit" @@ -160,7 +160,7 @@ msgstr "" #: applications/luci-app-transmission/luasrc/model/cbi/transmission.lua:110 msgid "Info" -msgstr "" +msgstr "정보" #: applications/luci-app-transmission/luasrc/model/cbi/transmission.lua:104 msgid "LPD enabled" diff --git a/qca/feeds/luci/applications/luci-app-travelmate/po/el/travelmate.po b/qca/feeds/luci/applications/luci-app-travelmate/po/el/travelmate.po index 92bff929031..1c88ceb49af 100644 --- a/qca/feeds/luci/applications/luci-app-travelmate/po/el/travelmate.po +++ b/qca/feeds/luci/applications/luci-app-travelmate/po/el/travelmate.po @@ -1,14 +1,14 @@ msgid "" msgstr "" -"PO-Revision-Date: 2021-01-23 03:57+0000\n" -"Last-Translator: Savvas Sfantos \n" +"PO-Revision-Date: 2022-03-25 12:08+0000\n" +"Last-Translator: MarioK239 \n" "Language-Team: Greek \n" "Language: el\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.5-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-travelmate/luasrc/view/travelmate/runtime.htm:206 msgid "AP on" diff --git a/qca/feeds/luci/applications/luci-app-ttyd/po/ko/ttyd.po b/qca/feeds/luci/applications/luci-app-ttyd/po/ko/ttyd.po index 415d5dadc06..3832ce88946 100644 --- a/qca/feeds/luci/applications/luci-app-ttyd/po/ko/ttyd.po +++ b/qca/feeds/luci/applications/luci-app-ttyd/po/ko/ttyd.po @@ -1,14 +1,14 @@ msgid "" msgstr "" -"PO-Revision-Date: 2021-06-07 10:49+0000\n" -"Last-Translator: Sunggu Choi \n" +"PO-Revision-Date: 2022-03-26 23:10+0000\n" +"Last-Translator: dikastia \n" "Language-Team: Korean \n" "Language: ko\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.7-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-ttyd/htdocs/luci-static/resources/view/ttyd/config.js:56 msgid "Accept only one client and exit on disconnection" @@ -58,7 +58,7 @@ msgstr "" #: applications/luci-app-ttyd/htdocs/luci-static/resources/view/ttyd/config.js:73 msgid "Debug" -msgstr "" +msgstr "디버그" #: applications/luci-app-ttyd/htdocs/luci-static/resources/view/ttyd/config.js:42 msgid "Do not allow clients to write to the TTY" diff --git a/qca/feeds/luci/applications/luci-app-udpxy/po/de/udpxy.po b/qca/feeds/luci/applications/luci-app-udpxy/po/de/udpxy.po index 5b79a720fed..75448b12c78 100644 --- a/qca/feeds/luci/applications/luci-app-udpxy/po/de/udpxy.po +++ b/qca/feeds/luci/applications/luci-app-udpxy/po/de/udpxy.po @@ -1,14 +1,14 @@ msgid "" msgstr "" -"PO-Revision-Date: 2021-10-13 19:44+0000\n" -"Last-Translator: Jan Kindler \n" +"PO-Revision-Date: 2022-04-04 16:09+0000\n" +"Last-Translator: ssantos \n" "Language-Team: German \n" "Language: de\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.9-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-udpxy/luasrc/model/cbi/udpxy.lua:23 msgid "Bind IP/Interface" @@ -16,15 +16,15 @@ msgstr "IP/Schnittstelle anbinden" #: applications/luci-app-udpxy/luasrc/model/cbi/udpxy.lua:47 msgid "Buffer messages" -msgstr "" +msgstr "Nachrichten zwischenpuffern" #: applications/luci-app-udpxy/luasrc/model/cbi/udpxy.lua:43 msgid "Buffer size" -msgstr "" +msgstr "Puffergröße" #: applications/luci-app-udpxy/luasrc/model/cbi/udpxy.lua:51 msgid "Buffer time" -msgstr "" +msgstr "Pufferdauer" #: applications/luci-app-udpxy/luasrc/model/cbi/udpxy.lua:10 msgid "Enabled" @@ -40,7 +40,7 @@ msgstr "Maximale Clients" #: applications/luci-app-udpxy/luasrc/model/cbi/udpxy.lua:59 msgid "Multicast subscription renew" -msgstr "" +msgstr "Multicast-Abonnement erneuern" #: applications/luci-app-udpxy/luasrc/model/cbi/udpxy.lua:55 msgid "Nice increment" @@ -56,7 +56,7 @@ msgstr "Erneut starten" #: applications/luci-app-udpxy/luasrc/model/cbi/udpxy.lua:31 msgid "Source IP/Interface" -msgstr "" +msgstr "Quell-IP/Schnittstelle" #: applications/luci-app-udpxy/luasrc/model/cbi/udpxy.lua:21 msgid "Status" @@ -68,7 +68,7 @@ msgstr "Ausührlich" #: applications/luci-app-udpxy/luasrc/controller/udpxy.lua:11 msgid "udpxy" -msgstr "" +msgstr "udpxy" #: applications/luci-app-udpxy/luasrc/model/cbi/udpxy.lua:4 msgid "" diff --git a/qca/feeds/luci/applications/luci-app-uhttpd/po/ru/uhttpd.po b/qca/feeds/luci/applications/luci-app-uhttpd/po/ru/uhttpd.po index 836b31a89be..e013b8dec0c 100644 --- a/qca/feeds/luci/applications/luci-app-uhttpd/po/ru/uhttpd.po +++ b/qca/feeds/luci/applications/luci-app-uhttpd/po/ru/uhttpd.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: LuCI: uhttpd\n" "POT-Creation-Date: 2017-12-06 22:30+0300\n" -"PO-Revision-Date: 2021-03-11 08:13+0000\n" -"Last-Translator: Artem \n" +"PO-Revision-Date: 2022-03-30 01:31+0000\n" +"Last-Translator: Anton Kikin \n" "Language-Team: Russian \n" "Language: ru\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 4.5.2-dev\n" +"X-Generator: Weblate 4.12-dev\n" "Project-Info: Это технический перевод, не дословный. Главное-удобный русский " "интерфейс, все проверялось в графическом режиме, совместим с другими apps\n" diff --git a/qca/feeds/luci/applications/luci-app-uhttpd/po/sv/uhttpd.po b/qca/feeds/luci/applications/luci-app-uhttpd/po/sv/uhttpd.po index 70fb561a26a..e08609b5c0b 100644 --- a/qca/feeds/luci/applications/luci-app-uhttpd/po/sv/uhttpd.po +++ b/qca/feeds/luci/applications/luci-app-uhttpd/po/sv/uhttpd.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"PO-Revision-Date: 2021-11-07 15:53+0000\n" +"PO-Revision-Date: 2022-03-21 17:48+0000\n" "Last-Translator: Kristoffer Grundström \n" "Language-Team: Swedish \n" @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.9-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:135 msgid "" @@ -25,7 +25,7 @@ msgstr "404-fel" #: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:7 msgid "A lightweight single-threaded HTTP(S) server" -msgstr "" +msgstr "En resurssnål enkeltrådad HTTP(S)-server" #: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:20 msgid "Advanced Settings" @@ -37,7 +37,7 @@ msgstr "Alias" #: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:149 msgid "Base directory for files to be served" -msgstr "" +msgstr "Basmapp för filer som ska publiceras" #: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:22 #: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:50 @@ -51,11 +51,11 @@ msgstr "" #: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:153 msgid "CGI is disabled if not present." -msgstr "" +msgstr "CGI är avstängt om ej närvarande." #: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:142 msgid "Config file (e.g. for credentials for Basic Auth)" -msgstr "" +msgstr "Konfig-fil (t.ex för uppgifter till standardautentisering)" #: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:187 msgid "Connection reuse" diff --git a/qca/feeds/luci/applications/luci-app-upnp/po/el/upnp.po b/qca/feeds/luci/applications/luci-app-upnp/po/el/upnp.po index 3c06ee8d19a..b342e5dba35 100644 --- a/qca/feeds/luci/applications/luci-app-upnp/po/el/upnp.po +++ b/qca/feeds/luci/applications/luci-app-upnp/po/el/upnp.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-05-28 02:08+0200\n" -"PO-Revision-Date: 2021-01-23 03:57+0000\n" -"Last-Translator: Savvas Sfantos \n" +"PO-Revision-Date: 2022-03-25 12:08+0000\n" +"Last-Translator: MarioK239 \n" "Language-Team: Greek \n" "Language: el\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.5-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-upnp/luasrc/model/cbi/upnp/upnp.lua:81 msgid "" @@ -70,7 +70,7 @@ msgstr "Συλλογή δεδομένων..." #: applications/luci-app-upnp/luasrc/model/cbi/upnp/upnp.lua:88 msgid "Comment" -msgstr "" +msgstr "Σχόλιο" #: applications/luci-app-upnp/luasrc/view/upnp_status.htm:29 msgid "Delete" diff --git a/qca/feeds/luci/applications/luci-app-upnp/po/ko/upnp.po b/qca/feeds/luci/applications/luci-app-upnp/po/ko/upnp.po index c015bd77afb..2a6a0d418d4 100644 --- a/qca/feeds/luci/applications/luci-app-upnp/po/ko/upnp.po +++ b/qca/feeds/luci/applications/luci-app-upnp/po/ko/upnp.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-05-19 19:36+0200\n" -"PO-Revision-Date: 2021-06-07 10:49+0000\n" -"Last-Translator: Sunggu Choi \n" +"PO-Revision-Date: 2022-03-26 19:08+0000\n" +"Last-Translator: dikastia \n" "Language-Team: Korean \n" "Language: ko\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.7-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-upnp/luasrc/model/cbi/upnp/upnp.lua:81 msgid "" @@ -74,7 +74,7 @@ msgstr "" #: applications/luci-app-upnp/luasrc/view/upnp_status.htm:29 msgid "Delete" -msgstr "" +msgstr "삭제" #: applications/luci-app-upnp/luasrc/view/upnp_status.htm:47 msgid "Description" diff --git a/qca/feeds/luci/applications/luci-app-vnstat/po/ko/vnstat.po b/qca/feeds/luci/applications/luci-app-vnstat/po/ko/vnstat.po index aa9e1aba04a..5b5e6d74b5e 100644 --- a/qca/feeds/luci/applications/luci-app-vnstat/po/ko/vnstat.po +++ b/qca/feeds/luci/applications/luci-app-vnstat/po/ko/vnstat.po @@ -1,8 +1,8 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"PO-Revision-Date: 2020-07-28 17:55+0000\n" -"Last-Translator: TheNoFace \n" +"PO-Revision-Date: 2022-03-26 19:03+0000\n" +"Last-Translator: dikastia \n" "Language-Team: Korean \n" "Language: ko\n" @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.2-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-vnstat/luasrc/controller/vnstat.lua:6 #: applications/luci-app-vnstat/luasrc/controller/vnstat.lua:10 @@ -19,62 +19,66 @@ msgstr "설정" #: applications/luci-app-vnstat/luasrc/view/vnstat.htm:68 msgid "Daily traffic" -msgstr "" +msgstr "일일 트래픽" #: applications/luci-app-vnstat/luasrc/controller/vnstat.lua:5 #: applications/luci-app-vnstat/luasrc/controller/vnstat.lua:9 msgid "Graphs" -msgstr "" +msgstr "그래프" #: applications/luci-app-vnstat/luasrc/view/vnstat.htm:67 msgid "Hourly traffic" -msgstr "" +msgstr "시간당 트래픽" #: applications/luci-app-vnstat/luasrc/model/cbi/vnstat.lua:49 msgid "Monitor selected interfaces" -msgstr "" +msgstr "선택한 인터페이스 모니터링" #: applications/luci-app-vnstat/luasrc/view/vnstat.htm:69 msgid "Monthly traffic" -msgstr "" +msgstr "월별 트래픽" #: applications/luci-app-vnstat/luasrc/view/vnstat.htm:97 msgid "" "No database has been set up yet. Go to the VnStat configuration and enable " "monitoring for one or more interfaces." msgstr "" +"데이터베이스가 설정되지 않았습니다. VnStat 설정 페이지로 이동하여 하나 이상" +"의 인터페이스 모니터링을 활성화합니다." #: applications/luci-app-vnstat/luasrc/model/cbi/vnstat.lua:22 msgid "Restart VnStat" -msgstr "" +msgstr "VnStat 재실행" #: applications/luci-app-vnstat/luasrc/view/vnstat.htm:65 msgid "Summary display" -msgstr "" +msgstr "요약 표시" #: applications/luci-app-vnstat/luasrc/view/vnstat.htm:66 msgid "Top 10 display" -msgstr "" +msgstr "상위 10개 표시" #: applications/luci-app-vnstat/luasrc/view/vnstat.htm:72 msgid "Update »" -msgstr "" +msgstr "업데이트 »" #: applications/luci-app-vnstat/luasrc/model/cbi/vnstat.lua:19 msgid "VnStat" -msgstr "" +msgstr "VnStat" #: applications/luci-app-vnstat/luasrc/view/vnstat.htm:60 msgid "VnStat Graphs" -msgstr "" +msgstr "VnStat 그래프" #: applications/luci-app-vnstat/luasrc/controller/vnstat.lua:4 #: applications/luci-app-vnstat/luasrc/controller/vnstat.lua:8 msgid "VnStat Traffic Monitor" -msgstr "" +msgstr "VnStat 트래픽 모니터" #: applications/luci-app-vnstat/luasrc/model/cbi/vnstat.lua:20 msgid "" "VnStat is a network traffic monitor for Linux that keeps a log of network " "traffic for the selected interface(s)." msgstr "" +"vnStat는 선택된 인터페이스의 네트워크 트래픽을 모니터링하는 Linux 네트워크 트" +"래픽 모니터입니다." diff --git a/qca/feeds/luci/applications/luci-app-vpn-policy-routing/po/el/vpn-policy-routing.po b/qca/feeds/luci/applications/luci-app-vpn-policy-routing/po/el/vpn-policy-routing.po index 9f5709556f4..4dba7fea463 100644 --- a/qca/feeds/luci/applications/luci-app-vpn-policy-routing/po/el/vpn-policy-routing.po +++ b/qca/feeds/luci/applications/luci-app-vpn-policy-routing/po/el/vpn-policy-routing.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"PO-Revision-Date: 2022-02-12 15:56+0000\n" +"PO-Revision-Date: 2022-03-25 12:08+0000\n" "Last-Translator: MarioK239 \n" "Language-Team: Greek \n" @@ -8,7 +8,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.11-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-vpn-policy-routing/luasrc/model/cbi/vpn-policy-routing.lua:62 msgid "%s (disabled)" @@ -75,7 +75,7 @@ msgstr "" #: applications/luci-app-vpn-policy-routing/luasrc/model/cbi/vpn-policy-routing.lua:286 msgid "Comment" -msgstr "" +msgstr "Σχόλιο" #: applications/luci-app-vpn-policy-routing/luasrc/model/cbi/vpn-policy-routing.lua:269 msgid "" diff --git a/qca/feeds/luci/applications/luci-app-wireguard/po/el/wireguard.po b/qca/feeds/luci/applications/luci-app-wireguard/po/el/wireguard.po index 34e941c63b0..133958f8452 100644 --- a/qca/feeds/luci/applications/luci-app-wireguard/po/el/wireguard.po +++ b/qca/feeds/luci/applications/luci-app-wireguard/po/el/wireguard.po @@ -1,14 +1,14 @@ msgid "" msgstr "" -"PO-Revision-Date: 2020-12-01 16:16+0000\n" -"Last-Translator: Marios Koutsoukis \n" +"PO-Revision-Date: 2022-03-25 12:08+0000\n" +"Last-Translator: MarioK239 \n" "Language-Team: Greek \n" "Language: el\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.4-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-wireguard/luasrc/view/wireguard.htm:149 msgid "Allowed IPs" diff --git a/qca/feeds/luci/applications/luci-app-wireguard/po/es/wireguard.po b/qca/feeds/luci/applications/luci-app-wireguard/po/es/wireguard.po index b1a97802dee..e5833b2db20 100644 --- a/qca/feeds/luci/applications/luci-app-wireguard/po/es/wireguard.po +++ b/qca/feeds/luci/applications/luci-app-wireguard/po/es/wireguard.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2021-11-27 23:39+0000\n" +"PO-Revision-Date: 2022-04-04 16:09+0000\n" "Last-Translator: Franco Castillo \n" "Language-Team: Spanish \n" @@ -11,7 +11,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.10-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: applications/luci-app-wireguard/luasrc/view/wireguard.htm:149 msgid "Allowed IPs" diff --git a/qca/feeds/luci/contrib/package/lucihttp/Makefile b/qca/feeds/luci/contrib/package/lucihttp/Makefile index 0b6cb2c5f40..a1b740deedf 100644 --- a/qca/feeds/luci/contrib/package/lucihttp/Makefile +++ b/qca/feeds/luci/contrib/package/lucihttp/Makefile @@ -9,7 +9,6 @@ PKG_SOURCE_DATE:=2019-07-05 PKG_SOURCE_VERSION:=a34a17d501c0e23f0a91dd9d3e87697347c861ba PKG_MIRROR_HASH:=f08b526515b4a654e5529457da9d0676696170846288c55863dba087417a0483 CMAKE_INSTALL:=1 -PKG_MIRROR_MD5SUM:=skip PKG_LICENSE:=ISC PKG_LICENSE_FILES:=LICENSE @@ -36,7 +35,7 @@ endef TARGET_CFLAGS += -I$(STAGING_DIR)/usr/include -CMAKE_OPTIONS += \ +CMAKE_OPTIONS = \ -DLUAPATH=/usr/lib/lua \ -DBUILD_LUA=$(if $(CONFIG_PACKAGE_liblucihttp-lua),ON,OFF) \ -DBUILD_TESTS=OFF diff --git a/qca/feeds/luci/modules/luci-base/luasrc/sys/zoneinfo/tzdata.lua b/qca/feeds/luci/modules/luci-base/luasrc/sys/zoneinfo/tzdata.lua index faf7761fe5f..ab6c469ed6d 100644 --- a/qca/feeds/luci/modules/luci-base/luasrc/sys/zoneinfo/tzdata.lua +++ b/qca/feeds/luci/modules/luci-base/luasrc/sys/zoneinfo/tzdata.lua @@ -239,8 +239,8 @@ TZ = { { 'Asia/Dubai', '<+04>-4' }, { 'Asia/Dushanbe', '<+05>-5' }, { 'Asia/Famagusta', 'EET-2EEST,M3.5.0/3,M10.5.0/4' }, - { 'Asia/Gaza', 'EET-2EEST,M3.4.4/48,M10.5.5/1' }, - { 'Asia/Hebron', 'EET-2EEST,M3.4.4/48,M10.5.5/1' }, + { 'Asia/Gaza', 'EET-2EEST,M3.4.4/72,M10.4.4/25' }, + { 'Asia/Hebron', 'EET-2EEST,M3.4.4/72,M10.4.4/25' }, { 'Asia/Ho Chi Minh', '<+07>-7' }, { 'Asia/Hong Kong', 'HKT-8' }, { 'Asia/Hovd', '<+07>-7' }, diff --git a/qca/feeds/luci/modules/luci-base/po/el/base.po b/qca/feeds/luci/modules/luci-base/po/el/base.po index 61a49e1874a..7cd21439f16 100644 --- a/qca/feeds/luci/modules/luci-base/po/el/base.po +++ b/qca/feeds/luci/modules/luci-base/po/el/base.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-06-10 03:40+0200\n" -"PO-Revision-Date: 2022-02-27 04:55+0000\n" +"PO-Revision-Date: 2022-03-25 12:08+0000\n" "Last-Translator: MarioK239 \n" "Language-Team: Greek \n" "Language: el\n" @@ -11,7 +11,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.11.1-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:916 msgid "%.1f dB" @@ -1138,7 +1138,7 @@ msgstr "" #: modules/luci-mod-status/htdocs/luci-static/resources/view/status/iptables.js:72 msgid "Comment" -msgstr "" +msgstr "Σχόλιο" #: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1595 msgid "" @@ -4245,7 +4245,7 @@ msgstr "" #: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:90 msgid "Peers" -msgstr "" +msgstr "Ομότιμοι" #: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:80 msgid "Perfect Forward Secrecy" diff --git a/qca/feeds/luci/modules/luci-base/po/es/base.po b/qca/feeds/luci/modules/luci-base/po/es/base.po index cee8c1cd9ab..6bcbf7d9349 100644 --- a/qca/feeds/luci/modules/luci-base/po/es/base.po +++ b/qca/feeds/luci/modules/luci-base/po/es/base.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-06-10 03:41+0200\n" -"PO-Revision-Date: 2022-03-06 15:26+0000\n" +"PO-Revision-Date: 2022-04-05 19:06+0000\n" "Last-Translator: Franco Castillo \n" "Language-Team: Spanish \n" diff --git a/qca/feeds/luci/modules/luci-base/po/ko/base.po b/qca/feeds/luci/modules/luci-base/po/ko/base.po index ff5b8302d9d..763ee4a1cf8 100644 --- a/qca/feeds/luci/modules/luci-base/po/ko/base.po +++ b/qca/feeds/luci/modules/luci-base/po/ko/base.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-06-10 03:40+0200\n" -"PO-Revision-Date: 2021-12-13 23:52+0000\n" -"Last-Translator: Josef Schlehofer \n" +"PO-Revision-Date: 2022-03-28 07:52+0000\n" +"Last-Translator: dikastia \n" "Language-Team: Korean \n" "Language: ko\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n == 1 ? 0 : 1;\n" -"X-Generator: Weblate 4.10-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:916 msgid "%.1f dB" @@ -700,7 +700,7 @@ msgstr "" #: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:154 msgid "Attempt to enable configured mount points for attached devices" -msgstr "" +msgstr "연결된 장치에 대해 설정된 마운트 연결 시도" #: protocols/luci-proto-openconnect/htdocs/luci-static/resources/protocol/openconnect.js:104 #: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:64 @@ -2030,7 +2030,7 @@ msgstr "" #: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:191 #: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:313 msgid "Filesystem" -msgstr "" +msgstr "파일 시스템" #: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:213 msgid "Filter private" @@ -2050,6 +2050,8 @@ msgid "" "Find all currently attached filesystems and swap and replace configuration " "with defaults based on what was detected" msgstr "" +"현재 연결된 모든 파일/스왑 시스템을 찾고 감지된 항목에 따라 설정을 교체/기본" +"값으로 바꿉니다." #: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:813 msgid "Find and join network" @@ -2236,7 +2238,7 @@ msgstr "기본 설정" #: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:150 msgid "Generate Config" -msgstr "" +msgstr "설정 생성" #: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1445 msgid "Generate PMK locally" @@ -2252,11 +2254,11 @@ msgstr "" #: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:146 msgid "Global Settings" -msgstr "" +msgstr "전역 설정" #: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:865 msgid "Global network options" -msgstr "" +msgstr "전역 네트워크 옵션" #: themes/luci-theme-bootstrap/luasrc/view/themes/bootstrap/header.htm:57 #: themes/luci-theme-material/luasrc/view/themes/material/header.htm:215 @@ -2947,7 +2949,7 @@ msgstr "" #: modules/luci-mod-system/root/usr/share/luci/menu.d/luci-mod-system.json:83 msgid "LED Configuration" -msgstr "" +msgstr "LED 설정" #: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:961 msgid "LLC" @@ -3458,7 +3460,7 @@ msgstr "" #: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:227 #: modules/luci-mod-system/root/usr/share/luci/menu.d/luci-mod-system.json:71 msgid "Mount Points" -msgstr "" +msgstr "마운트 포인트" #: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:228 msgid "Mount Points - Mount Entry" @@ -3476,7 +3478,7 @@ msgstr "" #: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:154 msgid "Mount attached devices" -msgstr "" +msgstr "연결된 장치 마운트" #: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:162 msgid "Mount filesystems not specifically configured" @@ -4163,7 +4165,7 @@ msgstr "" #: modules/luci-mod-system/htdocs/luci-static/resources/view/system/sshkeys.js:253 msgid "Paste or drag SSH key file…" -msgstr "" +msgstr "SSH 키 파일 붙여넣기 또는 드래그…" #: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1483 msgid "Path to CA-Certificate" @@ -6166,7 +6168,7 @@ msgstr "" #: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/20_memory.js:36 #: modules/luci-mod-system/htdocs/luci-static/resources/view/system/mounts.js:194 msgid "Used" -msgstr "" +msgstr "사용된" #: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1379 msgid "Used Key Slot" diff --git a/qca/feeds/luci/modules/luci-base/po/pl/base.po b/qca/feeds/luci/modules/luci-base/po/pl/base.po index e3b88c3c5a1..8f00bdbd06f 100644 --- a/qca/feeds/luci/modules/luci-base/po/pl/base.po +++ b/qca/feeds/luci/modules/luci-base/po/pl/base.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: LuCI\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-04-20 09:40+0200\n" -"PO-Revision-Date: 2022-03-09 17:31+0000\n" +"PO-Revision-Date: 2022-04-04 16:09+0000\n" "Last-Translator: Matthaiks \n" "Language-Team: Polish \n" diff --git a/qca/feeds/luci/modules/luci-base/po/pt/base.po b/qca/feeds/luci/modules/luci-base/po/pt/base.po index 3e7cb30230f..99d0aea69a2 100644 --- a/qca/feeds/luci/modules/luci-base/po/pt/base.po +++ b/qca/feeds/luci/modules/luci-base/po/pt/base.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-05-26 19:03+0200\n" -"PO-Revision-Date: 2022-01-25 09:41+0000\n" -"Last-Translator: ssantos \n" +"PO-Revision-Date: 2022-03-16 09:23+0000\n" +"Last-Translator: moonlightz \n" "Language-Team: Portuguese \n" "Language: pt\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.11-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:916 msgid "%.1f dB" @@ -1222,7 +1222,7 @@ msgstr "Confirmação" #: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:44 #: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:51 msgid "Connected" -msgstr "Conectado" +msgstr "Ligado" #: modules/luci-base/htdocs/luci-static/resources/network.js:9 #: modules/luci-compat/luasrc/model/network.lua:27 @@ -2149,7 +2149,7 @@ msgstr "Ficheiro de Firmware" #: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/10_system.js:57 msgid "Firmware Version" -msgstr "Versão de firmware" +msgstr "Versão do firmware" #: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:320 msgid "Fixed source port for outbound DNS queries" @@ -3770,7 +3770,7 @@ msgstr "Nenhuma rota para o host" #: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:229 #: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:59 msgid "No information available" -msgstr "Sem informação disponível" +msgstr "Não há informação disponível" #: modules/luci-compat/luasrc/model/network/proto_4x6.lua:63 #: protocols/luci-proto-ipv6/htdocs/luci-static/resources/protocol/map.js:8 @@ -6567,7 +6567,7 @@ msgstr "VPN WireGuard" #: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js:79 #: modules/luci-mod-status/root/usr/share/luci/menu.d/luci-mod-status.json:84 msgid "Wireless" -msgstr "Wireless" +msgstr "Rede sem fios" #: modules/luci-base/htdocs/luci-static/resources/network.js:2852 #: modules/luci-compat/luasrc/model/network.lua:1418 diff --git a/qca/feeds/luci/modules/luci-base/po/ru/base.po b/qca/feeds/luci/modules/luci-base/po/ru/base.po index 966d4c67c88..80914db4038 100644 --- a/qca/feeds/luci/modules/luci-base/po/ru/base.po +++ b/qca/feeds/luci/modules/luci-base/po/ru/base.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: LuCI: base\n" "POT-Creation-Date: 2010-05-09 01:01+0300\n" -"PO-Revision-Date: 2022-03-09 17:31+0000\n" -"Last-Translator: Anton Kikin \n" +"PO-Revision-Date: 2022-03-15 23:07+0000\n" +"Last-Translator: Alexey \n" "Language-Team: Russian \n" "Language: ru\n" diff --git a/qca/feeds/luci/modules/luci-base/po/zh_Hant/base.po b/qca/feeds/luci/modules/luci-base/po/zh_Hant/base.po index d4031ba808c..fe5bcc2cb74 100644 --- a/qca/feeds/luci/modules/luci-base/po/zh_Hant/base.po +++ b/qca/feeds/luci/modules/luci-base/po/zh_Hant/base.po @@ -1,8 +1,8 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"PO-Revision-Date: 2022-02-05 09:21+0000\n" -"Last-Translator: Hulen \n" +"PO-Revision-Date: 2022-03-20 02:55+0000\n" +"Last-Translator: Barlos Lee \n" "Language-Team: Chinese (Traditional) \n" "Language: zh_Hant\n" @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.11-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:916 msgid "%.1f dB" @@ -6905,7 +6905,7 @@ msgstr "最多有 %d 字的值" #: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js:1302 msgid "weak security" -msgstr "不安全" +msgstr "安全性不足" #: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:44 msgid "yes" diff --git a/qca/src/linux-5.4/arch/arm/boot/dts/Makefile b/qca/src/linux-5.4/arch/arm/boot/dts/Makefile index 3f09e737a26..121c6abf947 100644 --- a/qca/src/linux-5.4/arch/arm/boot/dts/Makefile +++ b/qca/src/linux-5.4/arch/arm/boot/dts/Makefile @@ -865,8 +865,9 @@ dtb-$(CONFIG_ARCH_QCOM) += \ ipq5018-mp03.6-c2.dtb \ ipq5018-tb-mp04.dtb \ devsoc-emulation.dtb \ - ipq6018-cp01-c1.dtb \ + yuncore-ax840.dtb \ ipq6018-8dev-mango.dtb \ + ipq6018-cp01-c1.dtb \ ipq6018-cp01-c3.dtb \ ipq6018-cp01-c4.dtb \ ipq6018-cp01-c5.dtb \ diff --git a/qca/src/linux-5.4/arch/arm/boot/dts/yuncore-ax840.dts b/qca/src/linux-5.4/arch/arm/boot/dts/yuncore-ax840.dts new file mode 100644 index 00000000000..62c8ef2e99c --- /dev/null +++ b/qca/src/linux-5.4/arch/arm/boot/dts/yuncore-ax840.dts @@ -0,0 +1 @@ +#include "../../../arm64/boot/dts/qcom/yuncore-ax840.dts" diff --git a/qca/src/linux-5.4/arch/arm64/boot/dts/qcom/Makefile b/qca/src/linux-5.4/arch/arm64/boot/dts/qcom/Makefile index 7a903309eab..b385e4938bf 100644 --- a/qca/src/linux-5.4/arch/arm64/boot/dts/qcom/Makefile +++ b/qca/src/linux-5.4/arch/arm64/boot/dts/qcom/Makefile @@ -1,8 +1,9 @@ # SPDX-License-Identifier: GPL-2.0 dtb-$(CONFIG_ARCH_QCOM) += apq8016-sbc.dtb dtb-$(CONFIG_ARCH_QCOM) += apq8096-db820c.dtb -dtb-$(CONFIG_ARCH_QCOM) += ipq6018-cp01-c1.dtb +dtb-$(CONFIG_ARCH_QCOM) += yuncore-ax840.dtb dtb-$(CONFIG_ARCH_QCOM) += ipq6018-8dev-mango.dtb +dtb-$(CONFIG_ARCH_QCOM) += ipq6018-cp01-c1.dtb dtb-$(CONFIG_ARCH_QCOM) += ipq6018-cp01-c3.dtb dtb-$(CONFIG_ARCH_QCOM) += ipq6018-cp01-c4.dtb dtb-$(CONFIG_ARCH_QCOM) += ipq6018-cp01-c5.dtb diff --git a/qca/src/linux-5.4/arch/arm64/boot/dts/qcom/yuncore-ax840.dts b/qca/src/linux-5.4/arch/arm64/boot/dts/qcom/yuncore-ax840.dts new file mode 120000 index 00000000000..de183ad8464 --- /dev/null +++ b/qca/src/linux-5.4/arch/arm64/boot/dts/qcom/yuncore-ax840.dts @@ -0,0 +1 @@ +../../../../../../../../../../../mnt/storage/dts/yuncore-ax840.dts \ No newline at end of file diff --git a/target/linux/ipq60xx/image/ipq60xx.mk b/target/linux/ipq60xx/image/ipq60xx.mk index 19fa3dd4177..ab0381f0326 100644 --- a/target/linux/ipq60xx/image/ipq60xx.mk +++ b/target/linux/ipq60xx/image/ipq60xx.mk @@ -7,6 +7,9 @@ KERNEL_ENTRY := $(KERNEL_LOADADDR) INFO_IMG_PATH = $(TMP_DIR)/info.tmp INFO_IMG_SIZE = 152 +ifeq ($(ARCH),aarch64) + ARCH = arm64 +endif define Build/fit-dummy-info dd if=/dev/zero of=$(INFO_IMG_PATH) bs=1 count=$(INFO_IMG_SIZE) @@ -26,30 +29,28 @@ define Build/insert-info --version $(BOARDNAME) endef -DEVICE_NAME := mango define Device/8devices-mango-dvk - DEVICE_TITLE := 8Devices Mango DVK - DEVICE_DTS := ipq6018-8dev-mango - BOARDNAME := mango - IMAGE_SIZE := 27776k + DEVICE_NAME = mango + DEVICE_TITLE = 8Devices Mango DVK + DEVICE_DTS = ipq6018-8dev-mango + BOARDNAME = mango + IMAGE_SIZE = 27776k BLOCKSIZE = 64k - KERNEL = kernel-bin | lzma | fit-dummy-info lzma $$(DEVICE_DTS_DIR)/$$(DEVICE_DTS).dtb - IMAGE/sysupgrade.bin := insert-info | append-kernel $$$$(BLOCKSIZE) | append-rootfs | pad-rootfs | check-size $$$$(IMAGE_SIZE) + KERNEL = kernel-bin | gzip | fit-dummy-info gzip $$(DEVICE_DTS_DIR)/$$(DEVICE_DTS).dtb + IMAGE/sysupgrade.bin = insert-info | append-kernel $$$$(BLOCKSIZE) | append-rootfs | pad-rootfs | check-size $$$$(IMAGE_SIZE) endef TARGET_DEVICES += 8devices-mango-dvk -DEVICE_NAME := yuncore-ax840 define Device/yuncore-ax840 - DEVICE_TITLE := Yuncore ax840 - DEVICE_DTS := ipq6018-8dev-mango - BOARDNAME := yuncore-ax840 - DEVICE_VENDOR := yuncore - DEVICE_MODEL := ax840 - IMAGE_SIZE := 27776k + DEVICE_NAME = yuncore + DEVICE_TITLE = yuncore ax840 + DEVICE_DTS = yuncore-ax840 + BOARDNAME = ax-840-ax840 + IMAGE_SIZE = 27776k BLOCKSIZE = 64k KERNEL = kernel-bin | gzip | fit-dummy-info gzip $$(DEVICE_DTS_DIR)/$$(DEVICE_DTS).dtb - IMAGE/sysupgrade.bin := insert-info | append-kernel $$$$(BLOCKSIZE) | append-rootfs | pad-rootfs | check-size $$$$(IMAGE_SIZE) + IMAGE/sysupgrade.bin = insert-info | append-kernel $$$$(BLOCKSIZE) | append-rootfs | pad-rootfs | check-size $$$$(IMAGE_SIZE) endef TARGET_DEVICES += yuncore-ax840 From f4c5c94df41a844ea3a4c3f3abda33d0c498098c Mon Sep 17 00:00:00 2001 From: Isaev Ruslan Date: Sun, 11 Sep 2022 21:13:13 -0400 Subject: [PATCH 10/12] remove changes to root Makefile Signed-off-by: Isaev Ruslan --- Makefile | 4 ---- 1 file changed, 4 deletions(-) diff --git a/Makefile b/Makefile index eb511cfccf7..ee8f42b0cdf 100644 --- a/Makefile +++ b/Makefile @@ -135,10 +135,6 @@ world: prepare $(target/stamp-compile) $(package/stamp-compile) $(package/stamp- $(_SINGLE)$(SUBMAKE) -r checksum -include $(TOPDIR)/rules.mk -include $(TOPDIR)/include/image.mk -dts: - $(call Image/BuildDTB,$(DTS_DIR)/$(dts).dts,$(DTS_DIR)/$(dts).dtb) From 6214631e283b641ffafd10f339c997fe359ed93c Mon Sep 17 00:00:00 2001 From: Isaev Ruslan Date: Sun, 11 Sep 2022 21:20:59 -0400 Subject: [PATCH 11/12] package/lucihttp fix to make it compile with ninja Signed-off-by: Isaev Ruslan --- qca/feeds/luci/contrib/package/lucihttp/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qca/feeds/luci/contrib/package/lucihttp/Makefile b/qca/feeds/luci/contrib/package/lucihttp/Makefile index a1b740deedf..cf52624ed78 100644 --- a/qca/feeds/luci/contrib/package/lucihttp/Makefile +++ b/qca/feeds/luci/contrib/package/lucihttp/Makefile @@ -35,7 +35,7 @@ endef TARGET_CFLAGS += -I$(STAGING_DIR)/usr/include -CMAKE_OPTIONS = \ +CMAKE_OPTIONS += \ -DLUAPATH=/usr/lib/lua \ -DBUILD_LUA=$(if $(CONFIG_PACKAGE_liblucihttp-lua),ON,OFF) \ -DBUILD_TESTS=OFF From 639038d8e4e3953cf71fcc886a640d556d2b9b94 Mon Sep 17 00:00:00 2001 From: Isaev Ruslan Date: Sun, 11 Sep 2022 21:43:44 -0400 Subject: [PATCH 12/12] some packages update to make fw work properly Signed-off-by: Isaev Ruslan --- package/network/utils/iwinfo/Makefile | 49 ++-- package/system/rpcd/Makefile | 18 +- .../rpcd/files/50-migrate-rpcd-ubus-sock.sh | 8 + package/system/rpcd/files/rpcd.config | 2 +- package/system/rpcd/files/rpcd.init | 4 - ...0010-uloop_timeout_remaining-replace.patch | 12 - package/utils/ucode/Makefile | 244 ++++++++++++++++++ 7 files changed, 290 insertions(+), 47 deletions(-) create mode 100755 package/system/rpcd/files/50-migrate-rpcd-ubus-sock.sh delete mode 100644 package/system/rpcd/patches/0010-uloop_timeout_remaining-replace.patch create mode 100644 package/utils/ucode/Makefile diff --git a/package/network/utils/iwinfo/Makefile b/package/network/utils/iwinfo/Makefile index cee7253a3aa..4735181712f 100644 --- a/package/network/utils/iwinfo/Makefile +++ b/package/network/utils/iwinfo/Makefile @@ -11,19 +11,13 @@ PKG_RELEASE:=1 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL=$(PROJECT_GIT)/project/iwinfo.git -PKG_SOURCE_DATE:=2019-10-16 -PKG_SOURCE_VERSION:=07315b6fdb2566a8626d8a1e4de76eb30456fe17 -PKG_MIRROR_HASH:=924914a51b8a668779e41dc2f40adfc1ae51846ea8b013de3e45999b4d04eecd +PKG_SOURCE_DATE:=2022-08-19 +PKG_SOURCE_VERSION:=0dad3e6660594592071ae49a77a907e2b11a98fe +PKG_MIRROR_HASH:=2162ee3158328ffe39018e50f34d74b47a6c7a26460e30d7984ca16cbc859d80 PKG_MAINTAINER:=Jo-Philipp Wich PKG_LICENSE:=GPL-2.0 -PKG_FLAGS := nonshared - -PKG_CONFIG_DEPENDS := \ - CONFIG_PACKAGE_kmod-brcm-wl \ - CONFIG_PACKAGE_kmod-brcm-wl-mini \ - CONFIG_PACKAGE_kmod-brcm-wl-mimo \ - CONFIG_PACKAGE_kmod-cfg80211 +IWINFO_ABI_VERSION:=20210430 include $(INCLUDE_DIR)/package.mk @@ -32,13 +26,13 @@ define Package/libiwinfo SECTION:=libs CATEGORY:=Libraries TITLE:=Generalized Wireless Information Library (iwinfo) - DEPENDS:=+PACKAGE_kmod-cfg80211:libnl-tiny +libuci +libubus - ABI_VERSION:=20181126 + DEPENDS:=+libnl-tiny +libuci +libubus +libiwinfo-data + ABI_VERSION:=$(IWINFO_ABI_VERSION) endef define Package/libiwinfo/description - Wireless information library with consistent interface for proprietary Broadcom, - nl80211 and wext driver interfaces. + Wireless information library with simplified API for nl80211 + and wext driver interfaces. endef @@ -56,6 +50,12 @@ define Package/libiwinfo-lua/description endef +define Package/libiwinfo-data + TITLE:=libiwinfo Lua binding + HIDDEN:=1 +endef + + define Package/iwinfo SECTION:=utils CATEGORY:=Utilities @@ -71,12 +71,6 @@ endef define Build/Configure endef -IWINFO_BACKENDS := \ - $(if $(CONFIG_PACKAGE_kmod-brcm-wl),wl) \ - $(if $(CONFIG_PACKAGE_kmod-brcm-wl-mini),wl) \ - $(if $(CONFIG_PACKAGE_kmod-brcm-wl-mimo),wl) \ - $(if $(CONFIG_PACKAGE_kmod-cfg80211),nl80211) - TARGET_CFLAGS += \ -I$(STAGING_DIR)/usr/include/libnl-tiny \ -I$(STAGING_DIR)/usr/include \ @@ -86,23 +80,22 @@ MAKE_FLAGS += \ FPIC="$(FPIC)" \ CFLAGS="$(TARGET_CFLAGS)" \ LDFLAGS="$(TARGET_LDFLAGS)" \ - BACKENDS="$(IWINFO_BACKENDS)" + BACKENDS="nl80211" \ + SOVERSION="$(IWINFO_ABI_VERSION)" define Build/InstallDev $(INSTALL_DIR) $(1)/usr/include/iwinfo $(CP) $(PKG_BUILD_DIR)/include/iwinfo.h $(1)/usr/include/ $(CP) $(PKG_BUILD_DIR)/include/iwinfo/* $(1)/usr/include/iwinfo/ $(INSTALL_DIR) $(1)/usr/lib - $(INSTALL_BIN) $(PKG_BUILD_DIR)/libiwinfo.so $(1)/usr/lib/libiwinfo.so + $(CP) $(PKG_BUILD_DIR)/libiwinfo.so* $(1)/usr/lib/ $(INSTALL_DIR) $(1)/usr/lib/lua $(INSTALL_BIN) $(PKG_BUILD_DIR)/iwinfo.so $(1)/usr/lib/lua/iwinfo.so endef define Package/libiwinfo/install $(INSTALL_DIR) $(1)/usr/lib - $(INSTALL_BIN) $(PKG_BUILD_DIR)/libiwinfo.so $(1)/usr/lib/libiwinfo.so - $(INSTALL_DIR) $(1)/usr/share/libiwinfo - $(INSTALL_DATA) $(PKG_BUILD_DIR)/hardware.txt $(1)/usr/share/libiwinfo/hardware.txt + $(INSTALL_BIN) $(PKG_BUILD_DIR)/libiwinfo.so.$(IWINFO_ABI_VERSION) $(1)/usr/lib/libiwinfo.so.$(IWINFO_ABI_VERSION) endef define Package/libiwinfo-lua/install @@ -110,6 +103,11 @@ define Package/libiwinfo-lua/install $(INSTALL_BIN) $(PKG_BUILD_DIR)/iwinfo.so $(1)/usr/lib/lua/iwinfo.so endef +define Package/libiwinfo-data/install + $(INSTALL_DIR) $(1)/usr/share/libiwinfo + $(INSTALL_DATA) $(PKG_BUILD_DIR)/devices.txt $(1)/usr/share/libiwinfo/devices.txt +endef + define Package/iwinfo/install $(INSTALL_DIR) $(1)/usr/bin $(INSTALL_BIN) $(PKG_BUILD_DIR)/iwinfo $(1)/usr/bin/iwinfo @@ -117,4 +115,5 @@ endef $(eval $(call BuildPackage,libiwinfo)) $(eval $(call BuildPackage,libiwinfo-lua)) +$(eval $(call BuildPackage,libiwinfo-data)) $(eval $(call BuildPackage,iwinfo)) diff --git a/package/system/rpcd/Makefile b/package/system/rpcd/Makefile index 69d7d672cf8..6571ca9c551 100644 --- a/package/system/rpcd/Makefile +++ b/package/system/rpcd/Makefile @@ -12,15 +12,15 @@ PKG_RELEASE:=1 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL=$(PROJECT_GIT)/project/rpcd.git -PKG_SOURCE_DATE:=2020-05-26 -PKG_SOURCE_VERSION:=67c8a3fda26e441d3ec4a19f50ac72eca8deb14b +PKG_MIRROR_HASH:=52ca9beab4b18afec9717a5f05c5232ef6160c3ece82a020851ac3aeaa52a29a +PKG_SOURCE_DATE:=2022-08-24 +PKG_SOURCE_VERSION:=82904bd4f92e5928d047db6396cc14ca2b07d89f PKG_MAINTAINER:=Jo-Philipp Wich -PKG_MIRROR_HASH:=cfe44e600093a424d1133b55a141c5becb708f48ee4fc8b7a98a82495ced7c72 PKG_LICENSE:=ISC PKG_LICENSE_FILES:= -PKG_BUILD_PARALLEL:=1 +PKG_ASLR_PIE_REGULAR:=1 include $(INCLUDE_DIR)/package.mk include $(INCLUDE_DIR)/cmake.mk @@ -62,6 +62,8 @@ define Package/rpcd/install $(INSTALL_DATA) $(PKG_BUILD_DIR)/unauthenticated.json $(1)/usr/share/rpcd/acl.d/unauthenticated.json $(INSTALL_DIR) $(1)/etc/config $(INSTALL_CONF) ./files/rpcd.config $(1)/etc/config/rpcd + $(INSTALL_DIR) $(1)/etc/uci-defaults + $(INSTALL_BIN) ./files/50-migrate-rpcd-ubus-sock.sh $(1)/etc/uci-defaults endef @@ -70,7 +72,7 @@ endef # 3: plugin title/description define BuildPlugin - PKG_CONFIG_DEPENDS += CONFIG_PACKAGE_luci-rpc-mod-$(1) + PKG_CONFIG_DEPENDS += CONFIG_PACKAGE_rpcd-mod-$(1) define Package/rpcd-mod-$(1) $(Package/rpcd/default) @@ -82,6 +84,11 @@ define BuildPlugin $(3) endef + define Package/rpcd-mod-$(1)/postinst +#!/bin/sh +[ -n "$$$${IPKG_INSTROOT}" ] || /etc/init.d/rpcd reload + endef + define Package/rpcd-mod-$(1)/install $(INSTALL_DIR) $$(1)/usr/lib/rpcd $(INSTALL_BIN) $(PKG_BUILD_DIR)/$(1).so $$(1)/usr/lib/rpcd/ @@ -95,3 +102,4 @@ $(eval $(call BuildPackage,rpcd)) $(eval $(call BuildPlugin,file,,Provides ubus calls for file and directory operations.)) $(eval $(call BuildPlugin,rpcsys,,Provides ubus calls for sysupgrade and password changing.)) $(eval $(call BuildPlugin,iwinfo,+libiwinfo,Provides ubus calls for accessing iwinfo data.)) +$(eval $(call BuildPlugin,ucode,+libucode,Allows implementing plugins using ucode scripts.)) diff --git a/package/system/rpcd/files/50-migrate-rpcd-ubus-sock.sh b/package/system/rpcd/files/50-migrate-rpcd-ubus-sock.sh new file mode 100755 index 00000000000..609b0f98353 --- /dev/null +++ b/package/system/rpcd/files/50-migrate-rpcd-ubus-sock.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +[ "$(uci get rpcd.@rpcd[0].socket)" = "/var/run/ubus.sock" ] || exit 0 + +uci set rpcd.@rpcd[0].socket='/var/run/ubus/ubus.sock' +uci commit rpcd + +exit 0 diff --git a/package/system/rpcd/files/rpcd.config b/package/system/rpcd/files/rpcd.config index faaed7f538d..176c643f172 100644 --- a/package/system/rpcd/files/rpcd.config +++ b/package/system/rpcd/files/rpcd.config @@ -1,5 +1,5 @@ config rpcd - option socket /var/run/ubus.sock + option socket /var/run/ubus/ubus.sock option timeout 30 config login diff --git a/package/system/rpcd/files/rpcd.init b/package/system/rpcd/files/rpcd.init index 4c701a28e6b..f75d0e0f0ee 100755 --- a/package/system/rpcd/files/rpcd.init +++ b/package/system/rpcd/files/rpcd.init @@ -19,7 +19,3 @@ start_service() { reload_service() { procd_send_signal rpcd } - -service_running() { - procd_running rpcd -} diff --git a/package/system/rpcd/patches/0010-uloop_timeout_remaining-replace.patch b/package/system/rpcd/patches/0010-uloop_timeout_remaining-replace.patch deleted file mode 100644 index 952607782d7..00000000000 --- a/package/system/rpcd/patches/0010-uloop_timeout_remaining-replace.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff '--color=auto' -aur a/session.c b/session.c ---- a/session.c 2020-05-26 11:24:24.000000000 -0400 -+++ b/session.c 2022-09-06 22:07:42.397504073 -0400 -@@ -226,7 +226,7 @@ - - blobmsg_add_string(&buf, "ubus_rpc_session", ses->id); - blobmsg_add_u32(&buf, "timeout", ses->timeout); -- blobmsg_add_u32(&buf, "expires", uloop_timeout_remaining(&ses->t) / 1000); -+ blobmsg_add_u32(&buf, "expires", uloop_timeout_remaining64(&ses->t) / 1000); - - if (acls) { - c = blobmsg_open_table(&buf, "acls"); diff --git a/package/utils/ucode/Makefile b/package/utils/ucode/Makefile new file mode 100644 index 00000000000..025f9973870 --- /dev/null +++ b/package/utils/ucode/Makefile @@ -0,0 +1,244 @@ +# +# Copyright (C) 2020-2021 Jo-Philipp Wich +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=ucode +PKG_RELEASE:=1 + +PKG_SOURCE_PROTO:=git +PKG_SOURCE_URL=https://github.com/jow-/ucode.git +PKG_SOURCE_DATE:=2022-08-29 +PKG_SOURCE_VERSION:=344fa9e69da43ecdc4d8f7768d85d42639352405 +PKG_MIRROR_HASH:=94e1ae6779536b2bd8957db8c2922ec32dcef75258401707505b1d34b6f16d0b +PKG_MAINTAINER:=Jo-Philipp Wich +PKG_LICENSE:=ISC + +PKG_ABI_VERSION:=20220812 + +include $(INCLUDE_DIR)/package.mk +include $(INCLUDE_DIR)/host-build.mk +include $(INCLUDE_DIR)/cmake.mk + +CMAKE_OPTIONS += -DSOVERSION=$(PKG_ABI_VERSION) +CMAKE_HOST_OPTIONS += \ + -DSOVERSION=$(PKG_ABI_VERSION) \ + -DFS_SUPPORT=ON \ + -DMATH_SUPPORT=ON \ + -DNL80211_SUPPORT=OFF \ + -DRESOLV_SUPPORT=OFF \ + -DRTNL_SUPPORT=OFF \ + -DSTRUCT_SUPPORT=ON \ + -DUBUS_SUPPORT=OFF \ + -DUCI_SUPPORT=OFF \ + -DULOOP_SUPPORT=OFF + + +define Package/ucode/default + SECTION:=utils + CATEGORY:=Utilities + TITLE:=ucode - Tiny scripting and templating language +endef + +define Package/ucode + $(Package/ucode/default) + DEPENDS:=+libucode +endef + +define Package/ucode/description + ucode is a tiny script interpreter featuring an ECMAScript oriented + script language and Jinja-inspired templating. +endef + + +define Package/libucode + $(Package/ucode/default) + TITLE+= - runtime library + ABI_VERSION:=$(PKG_ABI_VERSION) + DEPENDS:=+libjson-c +endef + +define Package/libucode/description + The libucode package provides the shared runtime library for the ucode interpreter. +endef + + +define Package/ucode-mod-fs + $(Package/ucode/default) + TITLE+= (filesystem module) + DEPENDS:=ucode +endef + +define Package/ucode-mod-fs/description + The filesystem plugin module allows interaction with the local file system. +endef + + +define Package/ucode-mod-math + $(Package/ucode/default) + TITLE+= (math module) + DEPENDS:=ucode +endef + +define Package/ucode-mod-math/description + The math plugin provides access to various procedures. +endef + + +define Package/ucode-mod-nl80211 + $(Package/ucode/default) + TITLE+= (nl80211 module) + DEPENDS:=ucode +libnl-tiny +endef + +define Package/ucode-mod-nl80211/description + The nl80211 plugin provides access to the Linux wireless 802.11 netlink API. +endef + + +define Package/ucode-mod-resolv + $(Package/ucode/default) + TITLE+= (resolv module) + DEPENDS:=ucode +endef + +define Package/ucode-mod-resolv/description + The resolv plugin implements simple DNS resolving. +endef + + +define Package/ucode-mod-rtnl + $(Package/ucode/default) + TITLE+= (rtnl module) + DEPENDS:=ucode +libnl-tiny +endef + +define Package/ucode-mod-rtnl/description + The rtnl plugin provides access to the Linux routing netlink API. +endef + + +define Package/ucode-mod-struct + $(Package/ucode/default) + TITLE+= (struct module) + DEPENDS:=ucode +endef + +define Package/ucode-mod-struct/description + The struct plugin implemnts Python 3 compatible struct.pack/unpack functionality. +endef + + +define Package/ucode-mod-ubus + $(Package/ucode/default) + TITLE+= (ubus module) + DEPENDS:=ucode +libubus +libblobmsg-json +endef + +define Package/ucode-mod-ubus/description + The ubus module allows ucode template scripts to enumerate and invoke ubus + procedures. +endef + + +define Package/ucode-mod-uci + $(Package/ucode/default) + TITLE+= (uci module) + DEPENDS:=ucode +libuci +endef + +define Package/ucode-mod-uci/description + The uci module allows templates to read and modify uci configuration. +endef + + +define Package/ucode-mod-uloop + $(Package/ucode/default) + TITLE+= (uloop module) + DEPENDS:=ucode +libubox +endef + +define Package/ucode-mod-uloop/description + The uloop module allows ucode scripts to interact with OpenWrt uloop event + loop implementation. +endef + + +define Build/InstallDev + $(INSTALL_DIR) $(1)/usr/lib $(1)/usr/include/ucode + $(CP) $(PKG_INSTALL_DIR)/usr/include/ucode/*.h $(1)/usr/include/ucode/ + $(CP) $(PKG_INSTALL_DIR)/usr/lib/libucode.so* $(1)/usr/lib/ +endef + + +define Package/ucode/install + $(INSTALL_DIR) $(1)/usr/bin + $(CP) $(PKG_INSTALL_DIR)/usr/bin/u* $(1)/usr/bin/ +endef + +define Package/libucode/install + $(INSTALL_DIR) $(1)/usr/lib + $(CP) $(PKG_INSTALL_DIR)/usr/lib/libucode.so.* $(1)/usr/lib/ +endef + +define Package/ucode-mod-fs/install + $(INSTALL_DIR) $(1)/usr/lib/ucode + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/ucode/fs.so $(1)/usr/lib/ucode/ +endef + +define Package/ucode-mod-math/install + $(INSTALL_DIR) $(1)/usr/lib/ucode + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/ucode/math.so $(1)/usr/lib/ucode/ +endef + +define Package/ucode-mod-nl80211/install + $(INSTALL_DIR) $(1)/usr/lib/ucode + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/ucode/nl80211.so $(1)/usr/lib/ucode/ +endef + +define Package/ucode-mod-resolv/install + $(INSTALL_DIR) $(1)/usr/lib/ucode + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/ucode/resolv.so $(1)/usr/lib/ucode/ +endef + +define Package/ucode-mod-rtnl/install + $(INSTALL_DIR) $(1)/usr/lib/ucode + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/ucode/rtnl.so $(1)/usr/lib/ucode/ +endef + +define Package/ucode-mod-struct/install + $(INSTALL_DIR) $(1)/usr/lib/ucode + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/ucode/struct.so $(1)/usr/lib/ucode/ +endef + +define Package/ucode-mod-ubus/install + $(INSTALL_DIR) $(1)/usr/lib/ucode + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/ucode/ubus.so $(1)/usr/lib/ucode/ +endef + +define Package/ucode-mod-uci/install + $(INSTALL_DIR) $(1)/usr/lib/ucode + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/ucode/uci.so $(1)/usr/lib/ucode/ +endef + +define Package/ucode-mod-uloop/install + $(INSTALL_DIR) $(1)/usr/lib/ucode + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/ucode/uloop.so $(1)/usr/lib/ucode/ +endef + +$(eval $(call BuildPackage,libucode)) +$(eval $(call BuildPackage,ucode)) +$(eval $(call BuildPackage,ucode-mod-fs)) +$(eval $(call BuildPackage,ucode-mod-math)) +$(eval $(call BuildPackage,ucode-mod-nl80211)) +$(eval $(call BuildPackage,ucode-mod-resolv)) +$(eval $(call BuildPackage,ucode-mod-rtnl)) +$(eval $(call BuildPackage,ucode-mod-struct)) +$(eval $(call BuildPackage,ucode-mod-ubus)) +$(eval $(call BuildPackage,ucode-mod-uci)) +$(eval $(call BuildPackage,ucode-mod-uloop)) +$(eval $(call HostBuild))