diff --git a/config/Config-devel.in b/config/Config-devel.in index fd7c3ead1e..70ec0ce9a7 100644 --- a/config/Config-devel.in +++ b/config/Config-devel.in @@ -105,6 +105,13 @@ menuconfig DEVEL help If enabled, log files will be written to the ./log directory. + config BUILD_LOG_DIR + string "Log folder" if DEVEL + default "" + help + Store build logs in this directory. + If not set, uses './logs' + config SRC_TREE_OVERRIDE bool "Enable package source tree override" if DEVEL help diff --git a/config/Config-images.in b/config/Config-images.in index 2bfa6bc536..d93f9c2e5d 100644 --- a/config/Config-images.in +++ b/config/Config-images.in @@ -14,11 +14,12 @@ menu "Target Images" choice prompt "Compression" - default TARGET_INITRAMFS_COMPRESSION_LZMA if TARGET_ar71xx - default TARGET_INITRAMFS_COMPRESSION_LZMA if TARGET_ramips default TARGET_INITRAMFS_COMPRESSION_LZMA if TARGET_apm821xx - default TARGET_INITRAMFS_COMPRESSION_LZMA if TARGET_mpc85xx + default TARGET_INITRAMFS_COMPRESSION_LZMA if TARGET_ar71xx default TARGET_INITRAMFS_COMPRESSION_LZMA if TARGET_ipq40xx + default TARGET_INITRAMFS_COMPRESSION_LZMA if TARGET_lantiq + default TARGET_INITRAMFS_COMPRESSION_LZMA if TARGET_mpc85xx + default TARGET_INITRAMFS_COMPRESSION_LZMA if TARGET_ramips default TARGET_INITRAMFS_COMPRESSION_NONE depends on TARGET_ROOTFS_INITRAMFS help @@ -194,7 +195,7 @@ menu "Target Images" depends on TARGET_ROOTFS_EXT4FS || TARGET_ROOTFS_ISO || TARGET_ROOTFS_JFFS2 || TARGET_ROOTFS_SQUASHFS select PACKAGE_grub2 default y - + config EFI_IMAGES bool "Build EFI GRUB images (Linux x86 or x86_64 host only)" depends on TARGET_x86 @@ -254,6 +255,7 @@ menu "Target Images" select GRUB_IMAGES select TARGET_IMAGES_PAD select PACKAGE_kmod-e1000 + default n config VMDK_IMAGES bool "Build VMware image files (VMDK)" @@ -262,22 +264,22 @@ menu "Target Images" select TARGET_IMAGES_PAD select PACKAGE_kmod-e1000 default y - + config VHD_IMAGES bool "Build Hyper-V image files (VHD)" depends on TARGET_x86 || TARGET_x86_64 - default n depends on GRUB_IMAGES || EFI_IMAGES select TARGET_IMAGES_PAD - select PACKAGE_kmod-tulip - + select PACKAGE_kmod-tulip + default n + config QCOW2_IMAGES bool "Build PVE/KVM image files (QCOW2)" depends on TARGET_x86 || TARGET_x86_64 - default n depends on GRUB_IMAGES || EFI_IMAGES select TARGET_IMAGES_PAD - select PACKAGE_kmod-e1000 + select PACKAGE_kmod-e1000 + default n config TARGET_IMAGES_PAD bool "Pad images to filesystem size (for JFFS2)" @@ -286,7 +288,7 @@ menu "Target Images" config TARGET_IMAGES_GZIP bool "GZip images" - depends on TARGET_IMAGES_PAD || TARGET_ROOTFS_EXT4FS || TARGET_x86 + depends on TARGET_ROOTFS_EXT4FS || TARGET_x86 || TARGET_armvirt || TARGET_malta default n comment "Image Options" diff --git a/config/Config-kernel.in b/config/Config-kernel.in index 9a82b9ecc8..4aa7e2bdbd 100644 --- a/config/Config-kernel.in +++ b/config/Config-kernel.in @@ -46,7 +46,7 @@ config KERNEL_DEBUG_FS config KERNEL_MIPS_FPU_EMULATOR bool "Compile the kernel with MIPS FPU Emulator" - default y + default y if TARGET_pistachio depends on (mips || mipsel || mips64 || mips64el) config KERNEL_ARM_PMU @@ -596,7 +596,7 @@ endif config KERNEL_NAMESPACES bool "Enable kernel namespaces" - default n + default y if !SMALL_FLASH if KERNEL_NAMESPACES @@ -665,13 +665,13 @@ config KERNEL_POSIX_MQUEUE config KERNEL_SECCOMP_FILTER bool - default n + default y if !SMALL_FLASH config KERNEL_SECCOMP bool "Enable seccomp support" depends on !(TARGET_uml) select KERNEL_SECCOMP_FILTER - default n + default y if !SMALL_FLASH help Build kernel with support for seccomp. diff --git a/include/debug.mk b/include/debug.mk index 59a99c0f77..0cedb9cec7 100644 --- a/include/debug.mk +++ b/include/debug.mk @@ -48,4 +48,3 @@ debug_eval:= warn_eval = $(4) endif - diff --git a/include/download.mk b/include/download.mk index 33141910fc..a020273e8c 100644 --- a/include/download.mk +++ b/include/download.mk @@ -288,6 +288,7 @@ endef define Download/default FILE:=$(PKG_SOURCE) URL:=$(PKG_SOURCE_URL) + URL_FILE:=$(PKG_SOURCE_URL_FILE) SUBDIR:=$(PKG_SOURCE_SUBDIR) PROTO:=$(PKG_SOURCE_PROTO) $(if $(PKG_SOURCE_MIRROR),MIRROR:=$(filter 1,$(PKG_MIRROR))) diff --git a/include/hardening.mk b/include/hardening.mk index 4e49e6b1b9..3a065aeea2 100644 --- a/include/hardening.mk +++ b/include/hardening.mk @@ -61,4 +61,3 @@ ifdef CONFIG_PKG_RELRO_FULL TARGET_LDFLAGS += -znow -zrelro endif endif - diff --git a/include/image-commands.mk b/include/image-commands.mk index 5dfd6a2c2f..4cf1293726 100644 --- a/include/image-commands.mk +++ b/include/image-commands.mk @@ -3,6 +3,10 @@ IMAGE_KERNEL = $(word 1,$^) IMAGE_ROOTFS = $(word 2,$^) +define rootfs_align +$(patsubst %-256k,0x40000,$(patsubst %-128k,0x20000,$(patsubst %-64k,0x10000,$(patsubst squashfs%,0x4,$(patsubst root.%,%,$(1)))))) +endef + define Build/uImage mkimage -A $(LINUX_KARCH) \ -O linux -T kernel \ @@ -271,6 +275,13 @@ define Build/check-size } endef +define Build/check-kernel-size + @[ $$(($(subst k,* 1024,$(subst m, * 1024k,$(1))))) -ge "$$(stat -c%s $(IMAGE_KERNEL))" ] || { \ + echo "WARNING: Kernel for $@ is too big > $(1)" >&2; \ + rm -f $@; \ + } +endef + define Build/combined-image -sh $(TOPDIR)/scripts/combined-image.sh \ "$(IMAGE_KERNEL)" \ @@ -308,7 +319,7 @@ endef define Build/qsdk-ipq-factory-nor $(TOPDIR)/scripts/mkits-qsdk-ipq-image.sh \ - $@.its hlos $(IMAGE_KERNEL) rootfs $(IMAGE_ROOTFS) + $@.its kernel $(IMAGE_KERNEL) rootfs $(IMAGE_ROOTFS) PATH=$(LINUX_DIR)/scripts/dtc:$(PATH) mkimage -f $@.its $@.new @mv $@.new $@ endef @@ -335,6 +346,24 @@ define Build/tplink-v1-header @mv $@.new $@ endef +# combine kernel and rootfs into one image +# mktplinkfw +# is "sysupgrade" or "factory" +# +# -a align the rootfs start on an bytes boundary +# -j add jffs2 end-of-filesystem markers +# -s strip padding from end of the image +# -X reserve bytes in the firmware image (hexval prefixed with 0x) +define Build/tplink-v1-image + -$(STAGING_DIR_HOST)/bin/mktplinkfw \ + -H $(TPLINK_HWID) -W $(TPLINK_HWREV) -F $(TPLINK_FLASHLAYOUT) \ + -N "$(VERSION_DIST)" -V $(REVISION) -m $(TPLINK_HEADER_VERSION) \ + -k $(IMAGE_KERNEL) -r $(IMAGE_ROOTFS) -o $@.new -j -X 0x40000 \ + -a $(call rootfs_align,$(FILESYSTEM)) \ + $(wordlist 2,$(words $(1)),$(1)) \ + $(if $(findstring sysupgrade,$(word 1,$(1))),-s) && mv $@.new $@ || rm -f $@ +endef + define Build/tplink-v2-header $(STAGING_DIR_HOST)/bin/mktplinkfw2 \ -c -H $(TPLINK_HWID) -W $(TPLINK_HWREV) -L $(KERNEL_LOADADDR) \ diff --git a/include/image.mk b/include/image.mk index 8592c19b99..26da4d6819 100644 --- a/include/image.mk +++ b/include/image.mk @@ -420,6 +420,7 @@ define Device/Init DEVICE_DTS := DEVICE_DTS_CONFIG := DEVICE_DTS_DIR := + SOC := BOARD_NAME := UIMAGE_NAME := @@ -437,7 +438,7 @@ DEFAULT_DEVICE_VARS := \ DEVICE_NAME KERNEL KERNEL_INITRAMFS KERNEL_INITRAMFS_IMAGE KERNEL_SIZE \ CMDLINE UBOOTENV_IN_UBI KERNEL_IN_UBI BLOCKSIZE PAGESIZE SUBPAGESIZE \ VID_HDR_OFFSET UBINIZE_OPTS UBINIZE_PARTS MKUBIFS_OPTS DEVICE_DTS \ - DEVICE_DTS_CONFIG DEVICE_DTS_DIR BOARD_NAME UIMAGE_NAME SUPPORTED_DEVICES \ + DEVICE_DTS_CONFIG DEVICE_DTS_DIR SOC BOARD_NAME UIMAGE_NAME SUPPORTED_DEVICES \ IMAGE_METADATA KERNEL_ENTRY KERNEL_LOADADDR UBOOT_PATH DEVICE_VENDOR \ DEVICE_MODEL DEVICE_VARIANT \ DEVICE_ALT0_VENDOR DEVICE_ALT0_MODEL DEVICE_ALT0_VARIANT \ diff --git a/include/kernel-defaults.mk b/include/kernel-defaults.mk index cc1e2361be..6ae68d918c 100644 --- a/include/kernel-defaults.mk +++ b/include/kernel-defaults.mk @@ -160,5 +160,3 @@ define Kernel/Clean/Default rm -f $(LINUX_KERNEL) $(_SINGLE)$(MAKE) -C $(KERNEL_BUILD_DIR)/linux-$(LINUX_VERSION) clean endef - - diff --git a/include/kernel.mk b/include/kernel.mk index 0313486bbc..deaac7e886 100644 --- a/include/kernel.mk +++ b/include/kernel.mk @@ -114,6 +114,7 @@ KERNEL_MAKE_FLAGS = \ KBUILD_BUILD_TIMESTAMP="$(KBUILD_BUILD_TIMESTAMP)" \ KBUILD_BUILD_VERSION="0" \ HOST_LOADLIBES="-L$(STAGING_DIR_HOST)/lib" \ + KBUILD_HOSTLDLIBS="-L$(STAGING_DIR_HOST)/lib" \ CONFIG_SHELL="$(BASH)" \ $(if $(findstring c,$(OPENWRT_VERBOSE)),V=1,V='') \ $(if $(PKG_BUILD_ID),LDFLAGS_MODULE=--build-id=0x$(PKG_BUILD_ID)) \ @@ -130,6 +131,11 @@ ifdef CONFIG_USE_SPARSE KERNEL_MAKEOPTS += C=1 CHECK=$(STAGING_DIR_HOST)/bin/sparse endif +ifneq ($(HOST_OS),Linux) + KERNEL_MAKEOPTS += CONFIG_STACK_VALIDATION= + export SKIP_STACK_VALIDATION:=1 +endif + PKG_EXTMOD_SUBDIRS ?= . define populate_module_symvers @@ -295,4 +301,3 @@ kernel_patchver_ge=$(call kernel_version_cmp,-ge,$(KERNEL_PATCHVER),$(1)) kernel_patchver_eq=$(call kernel_version_cmp,-eq,$(KERNEL_PATCHVER),$(1)) kernel_patchver_le=$(call kernel_version_cmp,-le,$(KERNEL_PATCHVER),$(1)) kernel_patchver_lt=$(call kernel_version_cmp,-lt,$(KERNEL_PATCHVER),$(1)) - diff --git a/include/toolchain-build.mk b/include/toolchain-build.mk index 883d74d25c..35d8c9380e 100644 --- a/include/toolchain-build.mk +++ b/include/toolchain-build.mk @@ -12,6 +12,7 @@ HOST_BUILD_PREFIX:=$(TOOLCHAIN_DIR) BUILD_DIR_HOST:=$(BUILD_DIR_TOOLCHAIN) include $(INCLUDE_DIR)/host-build.mk +include $(INCLUDE_DIR)/hardening.mk HOST_STAMP_PREPARED=$(HOST_BUILD_DIR)/.prepared diff --git a/include/u-boot.mk b/include/u-boot.mk index babb76497a..9ba9c50968 100644 --- a/include/u-boot.mk +++ b/include/u-boot.mk @@ -3,7 +3,7 @@ PKG_NAME ?= u-boot ifndef PKG_SOURCE_PROTO PKG_SOURCE = $(PKG_NAME)-$(PKG_VERSION).tar.bz2 PKG_SOURCE_URL = \ - http://sources.lede-project.org \ + https://sources.openwrt.org \ ftp://ftp.denx.de/pub/u-boot endif diff --git a/include/version.mk b/include/version.mk index 8ef0a7e65e..32483c1017 100644 --- a/include/version.mk +++ b/include/version.mk @@ -42,16 +42,16 @@ VERSION_MANUFACTURER:=$(call qstrip,$(CONFIG_VERSION_MANUFACTURER)) VERSION_MANUFACTURER:=$(if $(VERSION_MANUFACTURER),$(VERSION_MANUFACTURER),OpenWrt) VERSION_MANUFACTURER_URL:=$(call qstrip,$(CONFIG_VERSION_MANUFACTURER_URL)) -VERSION_MANUFACTURER_URL:=$(if $(VERSION_MANUFACTURER_URL),$(VERSION_MANUFACTURER_URL),http://openwrt.org/) +VERSION_MANUFACTURER_URL:=$(if $(VERSION_MANUFACTURER_URL),$(VERSION_MANUFACTURER_URL),https://openwrt.org/) VERSION_BUG_URL:=$(call qstrip,$(CONFIG_VERSION_BUG_URL)) -VERSION_BUG_URL:=$(if $(VERSION_BUG_URL),$(VERSION_BUG_URL),http://bugs.openwrt.org/) +VERSION_BUG_URL:=$(if $(VERSION_BUG_URL),$(VERSION_BUG_URL),https://bugs.openwrt.org/) VERSION_HOME_URL:=$(call qstrip,$(CONFIG_VERSION_HOME_URL)) -VERSION_HOME_URL:=$(if $(VERSION_HOME_URL),$(VERSION_HOME_URL),http://openwrt.org/) +VERSION_HOME_URL:=$(if $(VERSION_HOME_URL),$(VERSION_HOME_URL),https://openwrt.org/) VERSION_SUPPORT_URL:=$(call qstrip,$(CONFIG_VERSION_SUPPORT_URL)) -VERSION_SUPPORT_URL:=$(if $(VERSION_SUPPORT_URL),$(VERSION_SUPPORT_URL),http://forum.lede-project.org/) +VERSION_SUPPORT_URL:=$(if $(VERSION_SUPPORT_URL),$(VERSION_SUPPORT_URL),https://forum.openwrt.org/) VERSION_PRODUCT:=$(call qstrip,$(CONFIG_VERSION_PRODUCT)) VERSION_PRODUCT:=$(if $(VERSION_PRODUCT),$(VERSION_PRODUCT),Generic) @@ -108,4 +108,3 @@ VERSION_SED_SCRIPT:=$(SED) 's,%U,$(call sed_escape,$(VERSION_REPO)),g' \ -e 's,%s,$(call sed_escape,$(VERSION_SUPPORT_URL)),g' \ -e 's,%P,$(call sed_escape,$(VERSION_PRODUCT)),g' \ -e 's,%h,$(call sed_escape,$(VERSION_HWREV)),g' - diff --git a/package/base-files/files/bin/config_generate b/package/base-files/files/bin/config_generate index df221cc26c..1c0334475b 100755 --- a/package/base-files/files/bin/config_generate +++ b/package/base-files/files/bin/config_generate @@ -85,12 +85,16 @@ generate_network() { set network.$1.proto='none' EOF - [ -n "$macaddr" ] && uci -q batch <<-EOF - delete network.$1_dev - set network.$1_dev='device' - set network.$1_dev.name='$ifname' - set network.$1_dev.macaddr='$macaddr' - EOF + if [ -n "$macaddr" ]; then + for name in $ifname; do + uci -q batch <<-EOF + delete network.$1_${name/./_}_dev + set network.$1_${name/./_}_dev='device' + set network.$1_${name/./_}_dev.name='$name' + set network.$1_${name/./_}_dev.macaddr='$macaddr' + EOF + done + fi case "$protocol" in static) @@ -213,7 +217,8 @@ generate_switch() { json_select switch json_select "$key" - json_get_vars enable reset blinkrate cpu_port + json_get_vars enable reset blinkrate cpu_port \ + ar8xxx_mib_type ar8xxx_mib_poll_interval uci -q batch <<-EOF add network switch @@ -221,6 +226,8 @@ generate_switch() { set network.@switch[-1].reset='$reset' set network.@switch[-1].enable_vlan='$enable' set network.@switch[-1].blinkrate='$blinkrate' + set network.@switch[-1].ar8xxx_mib_type='$ar8xxx_mib_type' + set network.@switch[-1].ar8xxx_mib_poll_interval='$ar8xxx_mib_poll_interval' EOF generate_switch_vlans_ports "$1" @@ -244,10 +251,10 @@ generate_static_system() { set system.ntp='timeserver' set system.ntp.enabled='1' set system.ntp.enable_server='0' - add_list system.ntp.server='0.openwrt.pool.ntp.org' - add_list system.ntp.server='1.openwrt.pool.ntp.org' - add_list system.ntp.server='2.openwrt.pool.ntp.org' - add_list system.ntp.server='3.openwrt.pool.ntp.org' + add_list system.ntp.server='ntp1.aliyun.com' + add_list system.ntp.server='time1.cloud.tencent.com' + add_list system.ntp.server='time.ustc.edu.cn' + add_list system.ntp.server='pool.ntp.org' EOF if json_is_a system object; then diff --git a/package/base-files/files/etc/group b/package/base-files/files/etc/group index e8e2adf4ac..5b06dc6db9 100644 --- a/package/base-files/files/etc/group +++ b/package/base-files/files/etc/group @@ -1,8 +1,8 @@ root:x:0: daemon:x:1: adm:x:4: -tty:x:5: mail:x:8: +dialout:x:20: audio:x:29: www-data:x:33: ftp:x:55: diff --git a/package/base-files/files/etc/init.d/boot b/package/base-files/files/etc/init.d/boot index 31f245ffc7..44311c9e23 100755 --- a/package/base-files/files/etc/init.d/boot +++ b/package/base-files/files/etc/init.d/boot @@ -2,7 +2,7 @@ # Copyright (C) 2006-2011 OpenWrt.org START=10 -STOP=98 +STOP=90 uci_apply_defaults() { . /lib/functions/system.sh @@ -31,8 +31,9 @@ boot() { chmod 0700 /tmp/.uci touch /var/log/wtmp touch /var/log/lastlog - touch /tmp/resolv.conf.auto - ln -sf /tmp/resolv.conf.auto /tmp/resolv.conf + mkdir -p /tmp/resolv.conf.d + touch /tmp/resolv.conf.d/resolv.conf.auto + ln -sf /tmp/resolv.conf.d/resolv.conf.auto /tmp/resolv.conf grep -q debugfs /proc/filesystems && /bin/mount -o noatime -t debugfs debugfs /sys/kernel/debug [ "$FAILSAFE" = "true" ] && touch /tmp/.failsafe diff --git a/package/base-files/files/etc/init.d/umount b/package/base-files/files/etc/init.d/umount index 349b2b3264..b764ae1582 100755 --- a/package/base-files/files/etc/init.d/umount +++ b/package/base-files/files/etc/init.d/umount @@ -1,7 +1,12 @@ #!/bin/sh /etc/rc.common # Copyright (C) 2006 OpenWrt.org -STOP=99 +STOP=90 + +restart() { + : +} + stop() { sync /bin/umount -a -d -r diff --git a/package/base-files/files/etc/rc.button/reboot b/package/base-files/files/etc/rc.button/reboot new file mode 100755 index 0000000000..cd547e3329 --- /dev/null +++ b/package/base-files/files/etc/rc.button/reboot @@ -0,0 +1,12 @@ +#!/bin/sh + +[ "${ACTION}" = "released" ] || exit 0 + +if [ "$SEEN" -ge 5 ] +then + echo "REBOOT" > /dev/console + sync + reboot +fi + +return 0 diff --git a/package/base-files/files/etc/sysctl.d/10-default.conf b/package/base-files/files/etc/sysctl.d/10-default.conf index 46d079b36b..bc8c579695 100644 --- a/package/base-files/files/etc/sysctl.d/10-default.conf +++ b/package/base-files/files/etc/sysctl.d/10-default.conf @@ -8,6 +8,8 @@ fs.suid_dumpable=2 fs.protected_hardlinks=1 fs.protected_symlinks=1 +net.core.bpf_jit_enable=1 + net.ipv4.conf.default.arp_ignore=1 net.ipv4.conf.all.arp_ignore=1 net.ipv4.ip_forward=1 diff --git a/package/base-files/files/etc/uci-defaults/10_migrate-shadow b/package/base-files/files/etc/uci-defaults/10_migrate-shadow index a354844fe4..481444f35e 100755 --- a/package/base-files/files/etc/uci-defaults/10_migrate-shadow +++ b/package/base-files/files/etc/uci-defaults/10_migrate-shadow @@ -1,5 +1,3 @@ -#!/bin/sh - ppwd="$(sed -ne '/^root:/s/^root:\([^:]*\):.*$/\1/p' /etc/passwd)" spwd="$(sed -ne '/^root:/s/^root:\([^:]*\):.*$/\1/p' /etc/shadow)" diff --git a/package/base-files/files/etc/uci-defaults/12_network-generate-ula b/package/base-files/files/etc/uci-defaults/12_network-generate-ula index 8871427c60..e780365ab7 100755 --- a/package/base-files/files/etc/uci-defaults/12_network-generate-ula +++ b/package/base-files/files/etc/uci-defaults/12_network-generate-ula @@ -1,5 +1,3 @@ -#!/bin/sh - [ "$(uci -q get network.globals.ula_prefix)" != "auto" ] && exit 0 r1=$(dd if=/dev/urandom bs=1 count=1 |hexdump -e '1/1 "%02x"') @@ -12,4 +10,3 @@ uci -q batch <<-EOF >/dev/null EOF exit 0 - diff --git a/package/base-files/files/etc/uci-defaults/13_fix_group_user b/package/base-files/files/etc/uci-defaults/13_fix_group_user index e6dae2419f..bf9febdfe4 100755 --- a/package/base-files/files/etc/uci-defaults/13_fix_group_user +++ b/package/base-files/files/etc/uci-defaults/13_fix_group_user @@ -1,5 +1,3 @@ -#!/bin/sh - . /lib/functions.sh for file in `grep -sl Require-User /usr/lib/opkg/info/*.control`; do diff --git a/package/base-files/files/lib/functions.sh b/package/base-files/files/lib/functions.sh index 50a7b40869..e965cfc401 100755 --- a/package/base-files/files/lib/functions.sh +++ b/package/base-files/files/lib/functions.sh @@ -17,6 +17,22 @@ NO_EXPORT=1 LOAD_STATE=1 LIST_SEP=" " +# xor multiple hex values of the same length +xor() { + local val + local ret="0x$1" + local retlen=${#1} + + shift + while [ -n "$1" ]; do + val="0x$1" + ret=$((ret ^ val)) + shift + done + + printf "%0${retlen}x" "$ret" +} + append() { local var="$1" local value="$2" @@ -213,6 +229,7 @@ add_group_and_user() { default_postinst() { local root="${IPKG_INSTROOT}" local pkgname="$(basename ${1%.*})" + local filelist="/usr/lib/opkg/info/${pkgname}.list" local ret=0 add_group_and_user "${pkgname}" @@ -227,14 +244,14 @@ default_postinst() { rm -fR $root/rootfs-overlay/ fi - if [ -z "$root" ] && grep -q -s "^/etc/modules.d/" "/usr/lib/opkg/info/${pkgname}.list"; then + if [ -z "$root" ] && grep -q -s "^/etc/modules.d/" "$filelist"; then kmodloader fi - if [ -z "$root" ] && grep -q -s "^/etc/uci-defaults/" "/usr/lib/opkg/info/${pkgname}.list"; then + if [ -z "$root" ] && grep -q -s "^/etc/uci-defaults/" "$filelist"; then . /lib/functions/system.sh [ -d /tmp/.uci ] || mkdir -p /tmp/.uci - for i in $(grep -s "^/etc/uci-defaults/" "/usr/lib/opkg/info/${pkgname}.list"); do + for i in $(grep -s "^/etc/uci-defaults/" "$filelist"); do ( [ -f "$i" ] && cd "$(dirname $i)" && . "$i" ) && rm -f "$i" done uci commit @@ -243,7 +260,7 @@ default_postinst() { [ -n "$root" ] || rm -f /tmp/luci-indexcache 2>/dev/null local shell="$(which bash)" - for i in $(grep -s "^/etc/init.d/" "$root/usr/lib/opkg/info/${pkgname}.list"); do + for i in $(grep -s "^/etc/init.d/" "$root$filelist"); do if [ -n "$root" ]; then ${shell:-/bin/sh} "$root/etc/rc.common" "$root$i" enable else diff --git a/package/base-files/files/lib/functions/caldata.sh b/package/base-files/files/lib/functions/caldata.sh new file mode 100644 index 0000000000..3bdb1e4dd5 --- /dev/null +++ b/package/base-files/files/lib/functions/caldata.sh @@ -0,0 +1,128 @@ +# Copyright (C) 2019 OpenWrt.org + +. /lib/functions.sh +. /lib/functions/system.sh + +caldata_die() { + echo "caldata: " "$*" + exit 1 +} + +caldata_extract() { + local part=$1 + local offset=$(($2)) + local count=$(($3)) + local mtd + + mtd=$(find_mtd_chardev $part) + [ -n "$mtd" ] || caldata_die "no mtd device found for partition $part" + + dd if=$mtd of=/lib/firmware/$FIRMWARE iflag=skip_bytes bs=$count skip=$offset count=1 2>/dev/null || \ + caldata_die "failed to extract calibration data from $mtd" +} + +caldata_extract_ubi() { + local part=$1 + local offset=$(($2)) + local count=$(($3)) + local ubidev + local ubi + + . /lib/upgrade/nand.sh + + ubidev=$(nand_find_ubi $CI_UBIPART) + ubi=$(nand_find_volume $ubidev $part) + [ -n "$ubi" ] || caldata_die "no UBI volume found for $part" + + dd if=/dev/$ubi of=/lib/firmware/$FIRMWARE iflag=skip_bytes bs=$count skip=$offset count=1 2>/dev/null || \ + caldata_die "failed to extract calibration data from $ubi" +} + +caldata_extract_reverse() { + local part=$1 + local offset=$2 + local count=$(($3)) + local mtd + local reversed + local caldata + + mtd=$(find_mtd_chardev "$part") + reversed=$(hexdump -v -s $offset -n $count -e '/1 "%02x "' $mtd) + + for byte in $reversed; do + caldata="\x${byte}${caldata}" + done + + printf "%b" "$caldata" > /lib/firmware/$FIRMWARE +} + +caldata_from_file() { + local source=$1 + local offset=$(($2)) + local count=$(($3)) + + dd if=$source of=/lib/firmware/$FIRMWARE iflag=skip_bytes bs=$count skip=$offset count=1 2>/dev/null || \ + caldata_die "failed to extract calibration data from $source" +} + +caldata_valid() { + local expected="$1" + + magic=$(hexdump -v -n 2 -e '1/1 "%02x"' /lib/firmware/$FIRMWARE) + [ "$magic" = "$expected" ] + return $? +} + +caldata_patch_chksum() { + local mac=$1 + local mac_offset=$(($2)) + local chksum_offset=$(($3)) + local xor_mac + local xor_fw_mac + local xor_fw_chksum + + xor_mac=${mac//:/} + xor_mac="${xor_mac:0:4} ${xor_mac:4:4} ${xor_mac:8:4}" + + xor_fw_mac=$(hexdump -v -n 6 -s $mac_offset -e '/1 "%02x"' /lib/firmware/$FIRMWARE) + xor_fw_mac="${xor_fw_mac:0:4} ${xor_fw_mac:4:4} ${xor_fw_mac:8:4}" + + xor_fw_chksum=$(hexdump -v -n 2 -s $chksum_offset -e '/1 "%02x"' /lib/firmware/$FIRMWARE) + xor_fw_chksum=$(xor $xor_fw_chksum $xor_fw_mac $xor_mac) + + printf "%b" "\x${xor_fw_chksum:0:2}\x${xor_fw_chksum:2:2}" | \ + dd of=/lib/firmware/$FIRMWARE conv=notrunc bs=1 seek=$chksum_offset count=2 +} + +caldata_patch_mac() { + local mac=$1 + local mac_offset=$(($2)) + local chksum_offset=$3 + + [ -z "$mac" -o -z "$mac_offset" ] && return + + [ -n "$chksum_offset" ] && caldata_patch_chksum "$mac" "$mac_offset" "$chksum_offset" + + macaddr_2bin $mac | dd of=/lib/firmware/$FIRMWARE conv=notrunc oflag=seek_bytes bs=6 seek=$mac_offset count=1 || \ + caldata_die "failed to write MAC address to eeprom file" +} + +ath9k_patch_mac() { + local mac=$1 + + caldata_patch_mac "$mac" 0x2 +} + +ath9k_patch_mac_crc() { + local mac=$1 + local mac_offset=$2 + local chksum_offset=$((mac_offset - 10)) + + caldata_patch_mac "$mac" "$mac_offset" "$chksum_offset" +} + +ath10k_patch_mac() { + local mac=$1 + + caldata_patch_mac "$mac" 0x6 0x2 +} diff --git a/package/base-files/files/lib/functions/migrations.sh b/package/base-files/files/lib/functions/migrations.sh new file mode 100644 index 0000000000..b180a0242f --- /dev/null +++ b/package/base-files/files/lib/functions/migrations.sh @@ -0,0 +1,39 @@ +#!/bin/sh + +. /lib/functions.sh + +migrate_led_sysfs() { + local cfg="$1"; shift + local tuples="$@" + local sysfs + local name + + config_get sysfs ${cfg} sysfs + config_get name ${cfg} name + + [ -z "${sysfs}" ] && return + + for tuple in ${tuples}; do + local old=${tuple%=*} + local new=${tuple#*=} + local new_sysfs + + new_sysfs=$(echo ${sysfs} | sed "s/${old}/${new}/") + + [ "${new_sysfs}" = "${sysfs}" ] && continue + + uci set system.${cfg}.sysfs="${new_sysfs}" + + logger -t led-migration "sysfs option of LED \"${name}\" updated to ${new_sysfs}" + done; +} + +migrate_leds() { + config_load system + config_foreach migrate_led_sysfs led "$@" +} + +migrations_apply() { + local realm="$1" + [ -n "$(uci changes ${realm})" ] && uci -q commit ${realm} +} diff --git a/package/base-files/files/lib/functions/network.sh b/package/base-files/files/lib/functions/network.sh index 4fdcb66302..6b946b9f80 100755 --- a/package/base-files/files/lib/functions/network.sh +++ b/package/base-files/files/lib/functions/network.sh @@ -271,6 +271,11 @@ network_is_up() # 2: interface network_get_protocol() { __network_ifstatus "$1" "$2" ".proto"; } +# determine the uptime of the given logical interface +# 1: destination variable +# 2: interface +network_get_uptime() { __network_ifstatus "$1" "$2" ".uptime"; } + # determine the metric of the given logical interface # 1: destination variable # 2: interface diff --git a/package/base-files/files/lib/functions/system.sh b/package/base-files/files/lib/functions/system.sh index 7ed62804a0..c9f8eb0c31 100755 --- a/package/base-files/files/lib/functions/system.sh +++ b/package/base-files/files/lib/functions/system.sh @@ -1,10 +1,12 @@ # Copyright (C) 2006-2013 OpenWrt.org +. /usr/share/libubox/jshn.sh + get_mac_binary() { local path="$1" local offset="$2" - if [ -z "$path" ]; then + if ! [ -e "$path" ]; then echo "get_mac_binary: file $path not found!" >&2 return fi @@ -12,6 +14,44 @@ get_mac_binary() { hexdump -v -n 6 -s $offset -e '5/1 "%02x:" 1/1 "%02x"' $path 2>/dev/null } +get_mac_label_dt() { + local basepath="/proc/device-tree" + local macdevice="$(cat "$basepath/aliases/label-mac-device" 2>/dev/null)" + local macaddr + + [ -n "$macdevice" ] || return + + macaddr=$(get_mac_binary "$basepath/$macdevice/mac-address" 0 2>/dev/null) + [ -n "$macaddr" ] || macaddr=$(get_mac_binary "$basepath/$macdevice/local-mac-address" 0 2>/dev/null) + + echo $macaddr +} + +get_mac_label_json() { + local cfg="/etc/board.json" + local macaddr + + [ -s "$cfg" ] || return + + json_init + json_load "$(cat $cfg)" + if json_is_a system object; then + json_select system + json_get_var macaddr label_macaddr + json_select .. + fi + + echo $macaddr +} + +get_mac_label() { + local macaddr=$(get_mac_label_dt) + + [ -n "$macaddr" ] || macaddr=$(get_mac_label_json) + + echo $macaddr +} + find_mtd_chardev() { local INDEX=$(find_mtd_index "$1") local PREFIX=/dev/mtd @@ -40,7 +80,7 @@ mtd_get_mac_ascii() { mtd_get_mac_text() { local mtdname=$1 - local offset=$2 + local offset=$(($2)) local part local mac_dirty @@ -79,12 +119,7 @@ mtd_get_mac_binary_ubi() { local ubidev=$(nand_find_ubi $CI_UBIPART) local part=$(nand_find_volume $ubidev $1) - if [ -z "$part" ]; then - echo "mtd_get_mac_binary: ubi volume $mtdname not found!" >&2 - return - fi - - hexdump -v -n 6 -s $offset -e '5/1 "%02x:" 1/1 "%02x"' /dev/$part 2>/dev/null + get_mac_binary "/dev/$part" "$offset" } mtd_get_part_size() { @@ -105,10 +140,17 @@ macaddr_add() { local oui=${mac%:*:*:*} local nic=${mac#*:*:*:} - nic=$(printf "%06x" $((0x${nic//:/} + $val & 0xffffff)) | sed 's/^\(.\{2\}\)\(.\{2\}\)\(.\{2\}\)/\1:\2:\3/') + nic=$(printf "%06x" $((0x${nic//:/} + val & 0xffffff)) | sed 's/^\(.\{2\}\)\(.\{2\}\)\(.\{2\}\)/\1:\2:\3/') echo $oui:$nic } +macaddr_geteui() { + local mac=$1 + local sep=$2 + + echo ${mac:9:2}$sep${mac:12:2}$sep${mac:15:2} +} + macaddr_setbit_la() { local mac=$1 diff --git a/package/base-files/files/lib/functions/uci-defaults.sh b/package/base-files/files/lib/functions/uci-defaults.sh index 315df7b708..c2c6dc3fdc 100755 --- a/package/base-files/files/lib/functions/uci-defaults.sh +++ b/package/base-files/files/lib/functions/uci-defaults.sh @@ -182,6 +182,19 @@ _ucidef_finish_switch_roles() { done } +ucidef_set_ar8xxx_switch_mib() { + local name="$1" + local type="$2" + local interval="$3" + + json_select_object switch + json_select_object "$name" + json_add_int ar8xxx_mib_type $type + json_add_int ar8xxx_mib_poll_interval $interval + json_select .. + json_select .. +} + ucidef_add_switch() { local name="$1"; shift local port num role device index need_tag prev_role @@ -294,6 +307,14 @@ ucidef_set_interface_macaddr() { ucidef_set_interface "$network" macaddr "$macaddr" } +ucidef_set_label_macaddr() { + local macaddr="$1" + + json_select_object system + json_add_string label_macaddr "$macaddr" + json_select .. +} + ucidef_add_atm_bridge() { local vpi="$1" local vci="$2" @@ -463,6 +484,7 @@ _ucidef_set_led_timer() { _ucidef_set_led_common "$1" "$2" "$3" + json_add_string type "$trigger_name" json_add_string trigger "$trigger_name" json_add_int delayon "$delayon" json_add_int delayoff "$delayoff" diff --git a/package/base-files/files/lib/preinit/30_failsafe_wait b/package/base-files/files/lib/preinit/30_failsafe_wait index dd9c7e2b59..85dca398fa 100755 --- a/package/base-files/files/lib/preinit/30_failsafe_wait +++ b/package/base-files/files/lib/preinit/30_failsafe_wait @@ -31,6 +31,8 @@ fs_wait_for_key () { lock $keypress_wait { while [ $timer -gt 0 ]; do + pi_failsafe_net_message=true \ + preinit_net_echo "Please press button now to enter failsafe" echo "$timer" >$keypress_sec timer=$(($timer - 1)) sleep 1 @@ -88,9 +90,6 @@ failsafe_wait() { } grep -q 'failsafe=' /proc/cmdline && FAILSAFE=true && export FAILSAFE if [ "$FAILSAFE" != "true" ]; then - pi_failsafe_net_message=true - preinit_net_echo "Please press button now to enter failsafe" - pi_failsafe_net_message=false fs_wait_for_key f 'to enter failsafe mode' $fs_failsafe_wait_timeout && FAILSAFE=true [ -f "/tmp/failsafe_button" ] && FAILSAFE=true && echo "- failsafe button "`cat /tmp/failsafe_button`" was pressed -" [ "$FAILSAFE" = "true" ] && export FAILSAFE && touch /tmp/failsafe diff --git a/package/base-files/files/sbin/wifi b/package/base-files/files/sbin/wifi index 261d2fb500..a8b4451c60 100755 --- a/package/base-files/files/sbin/wifi +++ b/package/base-files/files/sbin/wifi @@ -6,7 +6,7 @@ usage() { cat < - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - diff --git a/package/jsda/luci-app-nfs/Makefile b/package/jsda/luci-app-nfs/Makefile deleted file mode 100644 index 7a8026c1f0..0000000000 --- a/package/jsda/luci-app-nfs/Makefile +++ /dev/null @@ -1,89 +0,0 @@ -# -# Copyright (C) 2018 Simon Shi -# -# This is free software, licensed under the GNU General Public License v3. -# See /LICENSE for more information. -# - -include $(TOPDIR)/rules.mk - -PKG_NAME:=luci-app-nfs -PKG_VERSION:=1.0.0 -PKG_RELEASE:=1 - -PKG_LICENSE:=GPLv3 -PKG_LICENSE_FILES:=LICENSE -PKG_MAINTAINER:=Simon Shi - -PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) - -include $(INCLUDE_DIR)/package.mk - -define Package/luci-app-nfs - SECTION:=LuCI - CATEGORY:=LuCI - SUBMENU:=3. Applications - TITLE:=LuCI Support for NFS - PKGARCH:=all -endef - -define Package/luci-app-nfs/description - LuCI Support for NFS. -endef - -define Build/Prepare - $(foreach po,$(wildcard ${CURDIR}/files/luci/i18n/*.po), \ - po2lmo $(po) $(PKG_BUILD_DIR)/$(patsubst %.po,%.lmo,$(notdir $(po)));) -endef - -define Build/Configure -endef - -define Build/Compile -endef - -define Package/luci-app-nfs/postinst -#!/bin/sh -if [ -z "$${IPKG_INSTROOT}" ]; then - if [ -f /etc/uci-defaults/luci-nfs ]; then - ( . /etc/uci-defaults/luci-nfs ) && \ - rm -f /etc/uci-defaults/luci-nfs - fi - rm -rf /tmp/luci-indexcache /tmp/luci-modulecache -fi -exit 0 -endef - -define Package/luci-app-nfs/conffiles -/etc/config/nfs -endef - -define Package/luci-app-nfs/postrm -#!/bin/sh -uci -q batch <<-EOF >/dev/null - delete ucitrack.@nfs[-1] - commit ucitrack -EOF -rm -f /tmp/luci-indexcache -rm -rf /tmp/luci-modulecache -exit 0 -endef - -define Package/luci-app-nfs/install - $(INSTALL_DIR) $(1)/usr/lib/lua/luci/i18n - $(INSTALL_DATA) $(PKG_BUILD_DIR)/nfs.*.lmo $(1)/usr/lib/lua/luci/i18n/ - $(INSTALL_DIR) $(1)/usr/lib/lua/luci/controller - $(INSTALL_DATA) ./files/luci/controller/*.lua $(1)/usr/lib/lua/luci/controller/ - $(INSTALL_DIR) $(1)/usr/lib/lua/luci/model/cbi - $(INSTALL_DATA) ./files/luci/model/cbi/*.lua $(1)/usr/lib/lua/luci/model/cbi/ - $(INSTALL_DIR) $(1)/etc - $(INSTALL_BIN) ./files/root/etc/firewall.nfs $(1)/etc/firewall.nfs - $(INSTALL_DIR) $(1)/etc/config - $(INSTALL_DATA) ./files/root/etc/config/nfs $(1)/etc/config/nfs - $(INSTALL_DIR) $(1)/etc/init.d - $(INSTALL_BIN) ./files/root/etc/init.d/nfs $(1)/etc/init.d/nfs - $(INSTALL_DIR) $(1)/etc/uci-defaults - $(INSTALL_BIN) ./files/root/etc/uci-defaults/luci-nfs $(1)/etc/uci-defaults/luci-nfs -endef - -$(eval $(call BuildPackage,luci-app-nfs)) diff --git a/package/jsda/luci-app-nfs/files/luci/controller/nfs.lua b/package/jsda/luci-app-nfs/files/luci/controller/nfs.lua deleted file mode 100644 index f4e2fac1ed..0000000000 --- a/package/jsda/luci-app-nfs/files/luci/controller/nfs.lua +++ /dev/null @@ -1,18 +0,0 @@ -module("luci.controller.nfs", package.seeall) - -function index() - require("luci.i18n") - luci.i18n.loadc("nfs") - if not nixio.fs.access("/etc/config/nfs") then - return - end - - local page = entry({"admin", "services", "nfs"}, cbi("nfs"), luci.i18n.translate("NFS")) - page.i18n = "nfs" - page.dependent = true - - - local page = entry({"mini", "services", "nfs"}, cbi("nfs", {autoapply=true}), luci.i18n.translate("NFS")) - page.i18n = "nfs" - page.dependent = true -end diff --git a/package/jsda/luci-app-nfs/files/luci/model/cbi/nfs.lua b/package/jsda/luci-app-nfs/files/luci/model/cbi/nfs.lua deleted file mode 100644 index a6f0305463..0000000000 --- a/package/jsda/luci-app-nfs/files/luci/model/cbi/nfs.lua +++ /dev/null @@ -1,79 +0,0 @@ -local fs = require "nixio.fs" - -m = Map("nfs", translate("NFS")) - --- NFS Share -- -s = m:section(TypedSection, "share", translate("Shared Directories")) -s.anonymous = true -s.addremove = true -s.template = "cbi/tblsection" - -en = s:option(Flag, "enabled", translate("Enable")) -en.rmempty = false -en.default = "1" - -ph1 = s:option(Value, "path", translate("Path")) -ph1.placeholder = "/mnt/sda1" -ph1.rmempty = false -ph1.optional = false - -ct = s:option(Value, "clients", translate("Clients")) -ct.placeholder = "192.168.1.0/24" -ct.rmempty = false -ct.optional = false - -am = s:option(ListValue, "permission", translate("Permission")) -am:value("0", translate("anonymous")) -am:value("1", translate("root")) -am:value("2", translate("full")) -am.default = "0" -am.rmempty = false - -ro = s:option(Flag, "read_only", translate("Read-only")) -ro.rmempty = false -ro.default = "0" - -is = s:option(Flag, "insecure", translate("Insecure")) -is.default = "1" -is.rmempty = false - -g = m:section(TypedSection, "general") -g.anonymous = true - -en=g:option(Flag, "external_access", translate(""), translate("Allow external network access")) -en.rmempty = false -en.default = "0" - --- NFS Mount -- -c = m:section(TypedSection, "mount", translate("Mounted Points")) -c.anonymous = true -c.addremove = true -c.template = "cbi/tblsection" - -en = c:option(Flag, "enabled", translate("Enable")) -en.default = "1" -en.rmempty = false - -ho = c:option(Value, "host", translate("Host")) -ho.placeholder = "192.168.1.1" -ho.rmempty = false -ho.optional = false - -ph2 = c:option(Value, "path", translate("Path")) -ph2.placeholder = "/media/share" -ph2.rmempty = false -ph2.optional = false - -mo = c:option(Value, "mount_on", translate("Mount On")) -mo.placeholder = "/mnt/nfs" - -ro = c:option(Flag, "read_only", translate("Read-only")) -ro.rmempty = false -ro.default = "0" - -if nixio.fs.access("/etc/config/fstab") then - ph1.titleref = luci.dispatcher.build_url("admin", "system", "fstab") - mo.titleref = luci.dispatcher.build_url("admin", "system", "fstab") -end - -return m diff --git a/package/jsda/luci-app-nfs/files/root/etc/config/nfs b/package/jsda/luci-app-nfs/files/root/etc/config/nfs deleted file mode 100644 index 259e64d2d9..0000000000 --- a/package/jsda/luci-app-nfs/files/root/etc/config/nfs +++ /dev/null @@ -1,11 +0,0 @@ - -config general - option external_access '0' - -config share - option insecure '1' - option clients '*' - option enabled '0' - option path '/mnt/sda1' - option permission '0' - option read_only '0' diff --git a/package/jsda/luci-app-nfs/files/root/etc/firewall.nfs b/package/jsda/luci-app-nfs/files/root/etc/firewall.nfs deleted file mode 100755 index 19bcdd27ac..0000000000 --- a/package/jsda/luci-app-nfs/files/root/etc/firewall.nfs +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh - -[ -z "$(pidof nfsd)" ] || /etc/init.d/nfs firewall - -exit 0 diff --git a/package/jsda/luci-app-nfs/files/root/etc/init.d/nfs b/package/jsda/luci-app-nfs/files/root/etc/init.d/nfs deleted file mode 100755 index 5d2f4f6057..0000000000 --- a/package/jsda/luci-app-nfs/files/root/etc/init.d/nfs +++ /dev/null @@ -1,244 +0,0 @@ -#!/bin/sh /etc/rc.common -START=45 -STOP=99 -EXTRA_COMMANDS="firewall restart" -APP="nfs" - -check_nfsd() { - pidof nfsd &>/dev/null && return 0 - return 1 -} - -get_lan_wan_ip() { - [ -z "$1" ] && return 1 - ip='' - . /lib/functions/network.sh>/dev/null - network_get_ipaddr ip $1>/dev/null && echo "$ip" -} - -iptables_init() { - INPUT="INPUT" - iptables -t filter --list zone_wan_input &>/dev/null && INPUT="zone_wan_input" - PREROUTING="PREROUTING" - iptables -t nat --list zone_wan_prerouting &>/dev/null && PREROUTING="zone_wan_prerouting" - [ -z "$LAN_IP" ] && { - LAN_IP=$(get_lan_wan_ip 'lan') - [ -z "$LAN_IP" ] && return 1 - } - if [ "$external_access" = '1' ]; then - RULES_NAT="*nat --A $PREROUTING -p udp -m udp --dport 111 -m comment --comment \"NFS\" -j DNAT --to-destination $LAN_IP:111 --A $PREROUTING -p tcp -m tcp --dport 111 -m comment --comment \"NFS\" -j DNAT --to-destination $LAN_IP:111 --A $PREROUTING -p udp -m udp --dport 2049 -m comment --comment \"NFS\" -j DNAT --to-destination $LAN_IP:2049 --A $PREROUTING -p tcp -m tcp --dport 2049 -m comment --comment \"NFS\" -j DNAT --to-destination $LAN_IP:2049 --A $PREROUTING -p udp -m udp --dport 32777 -m comment --comment \"NFS\" -j DNAT --to-destination $LAN_IP:32777 --A $PREROUTING -p tcp -m tcp --dport 32777 -m comment --comment \"NFS\" -j DNAT --to-destination $LAN_IP:32777 --A $PREROUTING -p udp -m udp --dport 32780 -m comment --comment \"NFS\" -j DNAT --to-destination $LAN_IP:32780 --A $PREROUTING -p tcp -m tcp --dport 32780 -m comment --comment \"NFS\" -j DNAT --to-destination $LAN_IP:32780 -COMMIT" - else - SOURCE="-s ${LAN_IP%.*}.0/24 " - fi - RULES_FILTER="*filter --A $INPUT ${SOURCE}-p udp -m udp --dport 111:2049 -m comment --comment \"NFS\" -j ACCEPT --A $INPUT ${SOURCE}-p tcp -m tcp --dport 111:2049 -m comment --comment \"NFS\" -j ACCEPT --A $INPUT ${SOURCE}-p udp -m udp --dport 32777:32780 -m comment --comment \"NFS\" -j ACCEPT --A $INPUT ${SOURCE}-p tcp -m tcp --dport 32777:32780 -m comment --comment \"NFS\" -j ACCEPT -COMMIT" - return 0 -} - -iptables_run() { - [ -z "$1" -o -z "$2" ] && return 1 - RUN_RUNLES=$(echo -e "$1"|grep -Eo '[-][A].*') - [ "$3" = '-D' ] && RUN_RUNLES=$(echo -e "$RUN_RUNLES"|sed -E 's/^-[AI]/-D/') - while read RULE - do - eval "iptables -t $2 $RULE" - done <<-EOF - $(echo -e "$RUN_RUNLES") - EOF -} - -iptables_flush() { - iptables_init || return 1 - iptables-restore <<-EOF || { - $(echo -e "$( iptables-save)" | grep -v 'NFS') - EOF - iptables_run "$RULES_FILTER" "filter" "-D" &>/dev/null - iptables_run "$RULES_NAT" "nat" "-D" &>/dev/null - } - return $? -} - -iptables_restore() { - iptables_init || return 1 - iptables-restore -n <<-EOF || { - $RULES_FILTER - $RULES_NAT - EOF - iptables_run "$RULES_FILTER" "filter" "-A" - [ "$external_access" = '1' ] && iptables_run "$RULES_NAT" "nat" "-A" - } - return $? -} - -nfs_general() { - config_get external_access "$1" external_access '0' -} - -nfs_share() { - [ -z "$1" ] && return 1 - config_get enabled "$1" enabled - [ "$enabled" = '1' ] || return 1 - config_get path "$1" path - [ -d "$path" ] || return 1 - config_get clients "$1" clients - [ -z "$clients" ] && return 1 - config_get permission "$1" permission '0' - case $permission in - 1) - NFS_PERMISSION='no_root_squash' - ;; - 2) - NFS_PERMISSION='no_root_squash,fsid=0' - ;; - *) - NFS_PERMISSION='all_squash' - ;; - esac - config_get read_only "$1" read_only '0' - NFS_OPERATION="rw" - [ $read_only = '1' ] && NFS_OPERATION="ro" - NFS_INSECURE="" - config_get insecure "$1" insecure '1' - [ $insecure = '1' ] && NFS_INSECURE=",insecure" - [ -z "$NFS_SHARE_ALL" ] || { - FIND_NFS=$(echo -e "$NFS_SHARE_ALL"|grep -i "^$path ") - } - if [ -z "$FIND_NFS" ]; then - NFS_SHARE_ALL=$([ -z "$NFS_SHARE_ALL" ] || echo "$NFS_SHARE_ALL\n")"$path $clients($NFS_OPERATION,no_subtree_check,$NFS_PERMISSION,async$NFS_INSECURE)" - else - NFS_SHARE_ALL=$(echo -e "$NFS_SHARE_ALL"|grep -iv "^$path ") - NFS_SHARE_ALL=$([ -z "$NFS_SHARE_ALL" ] || echo "$NFS_SHARE_ALL\n")"$FIND_NFS $clients($NFS_OPERATION,no_subtree_check,$NFS_PERMISSION,async$NFS_INSECURE)" - fi -} - -nfs_share_start() { - NFS_EXPORTS=$(cat /etc/exports) - if check_nfsd; then - if [ -z "$NFS_SHARE_ALL" ]; then - echo -e "$NFS_SHARE_ALL">/etc/exports - nfs_share_stop - return 1 - else - [ "$(echo -e $NFS_EXPORTS)" = "$(echo -e $NFS_SHARE_ALL)" ] || { - echo -e "$NFS_SHARE_ALL">/etc/exports - /usr/sbin/exportfs -ar - } - fi - else - echo -e "$NFS_SHARE_ALL">/etc/exports - /etc/init.d/portmap start &>/dev/null - /etc/init.d/nfsd start &>/dev/null - fi - iptables_flush - iptables_restore -} - -nfs_share_stop() { - iptables_flush - /etc/init.d/nfsd stop &>/dev/null - /etc/init.d/portmap stop &>/dev/null -} - -get_mounted_nfs() { - [ -z "$MOUNTED_ALL" ] && { - MOUNTED_ALL=$(mount) - MOUNTED_NFS_ALL=$(echo -e "$MOUNTED_ALL"|grep "type\s\+nfs\s") - } -} - -create_mount_dir() { - if [ -d "$1" ]; then - [ -z $(ls $"$1" 2>/dev/null) ] && return 0 - return 1 - else - mkdir "$1" - return 0 - fi -} - -nfs_mount() { - [ -z "$1" ] && return 1 - config_get enabled "$1" enabled - [ "$enabled" = '1' ] || return 1 - config_get host "$1" host - [ -z "$host" ] && return 1 - config_get path "$1" path - [ -z "$path" ] && return 1 - config_get mount_on "$1" mount_on - [ -z "$mount_on" ] && return 1 - config_get read_only "$1" read_only '0' - MOUNT_OPERATION="rw" - [ $read_only = '1' ] && MOUNT_OPERATION="ro" - get_mounted_nfs - NFS_MOUNTING=$([ -z "$NFS_MOUNTING" ] || echo "$NFS_MOUNTING\n")"$host:$path" - NFS_MOUNT_MATCH=$(echo -e "$MOUNTED_NFS_ALL"|grep "^$host:$path") - if [ -z "$NFS_MOUNT_MATCH" ]; then - create_mount_dir "$mount_on" && mount -t nfs -o $MOUNT_OPERATION -o nolock "$host:$path" "$mount_on" - else - echo "$NFS_MOUNT_MATCH"|grep "$mount_on\s\+type\s\+nfs\s\+($MOUNT_OPERATION" 2>/dev/null && return 1 - umount -fr "$mount_on" && mount -t nfs -o $MOUNT_OPERATION -o nolock "$host:$path" "$mount_on" - fi -} - -nfs_mount_clean() { - MOUNTED_ALL='' - get_mounted_nfs - echo -e "$MOUNTED_NFS_ALL"|while read NFS_SHARED - do - echo -e "$NFS_MOUNTING"|grep -x "${NFS_SHARED% on *}" 2>/dev/null || { - NFS_SHARED_MOUNT="${NFS_SHARED##* on }" - NFS_SHARED_MOUNT="${NFS_SHARED_MOUNT%% type*}" - umount -fr "$NFS_SHARED_MOUNT" && rm -r "$NFS_SHARED_MOUNT" - } - done -} - -config_cb() { - local cfg="$CONFIG_SECTION" - config_get configname "$cfg" TYPE - case "$configname" in - general) - nfs_general "$cfg" - ;; - share) - nfs_share "$cfg" - ;; - mount) - nfs_mount "$cfg" - ;; - esac -} - -start() { - config_load "$APP" - nfs_share_start - nfs_mount_clean -} - -stop() { - nfs_mount_clean - nfs_share_stop -} - -restart() { - start -} - -firewall() { - config_load "$APP" - iptables_restore -} - diff --git a/package/jsda/luci-app-nfs/files/root/etc/uci-defaults/luci-nfs b/package/jsda/luci-app-nfs/files/root/etc/uci-defaults/luci-nfs deleted file mode 100755 index 7030a5acdd..0000000000 --- a/package/jsda/luci-app-nfs/files/root/etc/uci-defaults/luci-nfs +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/sh - -uci -q batch <<-EOF >/dev/null - delete firewall.nfs - set firewall.nfs=include - set firewall.nfs.type=script - set firewall.nfs.path=/etc/firewall.nfs - set firewall.nfs.reload=1 - commit firewall - delete ucitrack.@nfs[-1] - add ucitrack nfs - set ucitrack.@nfs[-1].init=nfs - commit ucitrack -EOF - -/etc/init.d/portmap disable >/dev/null 2>&1 -/etc/init.d/nfsd disable >/dev/null 2>&1 -/etc/init.d/nfs enable >/dev/null 2>&1 -rm -f /tmp/luci-indexcache - -exit 0 diff --git a/package/jsda/luci-app-nfs/tools/po2lmo/Makefile b/package/jsda/luci-app-nfs/tools/po2lmo/Makefile deleted file mode 100644 index ad2c133207..0000000000 --- a/package/jsda/luci-app-nfs/tools/po2lmo/Makefile +++ /dev/null @@ -1,12 +0,0 @@ - -INSTALL = install -PREFIX = /usr/bin - -po2lmo: src/po2lmo.o src/template_lmo.o - $(CC) $(LDFLAGS) -o src/po2lmo src/po2lmo.o src/template_lmo.o - -install: - $(INSTALL) -m 755 src/po2lmo $(PREFIX) - -clean: - $(RM) src/po2lmo src/*.o diff --git a/package/jsda/luci-app-nfs/tools/po2lmo/src/po2lmo.c b/package/jsda/luci-app-nfs/tools/po2lmo/src/po2lmo.c deleted file mode 100644 index 0da792b680..0000000000 --- a/package/jsda/luci-app-nfs/tools/po2lmo/src/po2lmo.c +++ /dev/null @@ -1,247 +0,0 @@ -/* - * lmo - Lua Machine Objects - PO to LMO conversion tool - * - * Copyright (C) 2009-2012 Jo-Philipp Wich - * - * 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 "template_lmo.h" - -static void die(const char *msg) -{ - fprintf(stderr, "Error: %s\n", msg); - exit(1); -} - -static void usage(const char *name) -{ - fprintf(stderr, "Usage: %s input.po output.lmo\n", name); - exit(1); -} - -static void print(const void *ptr, size_t size, size_t nmemb, FILE *stream) -{ - if( fwrite(ptr, size, nmemb, stream) == 0 ) - die("Failed to write stdout"); -} - -static int extract_string(const char *src, char *dest, int len) -{ - int pos = 0; - int esc = 0; - int off = -1; - - for( pos = 0; (pos < strlen(src)) && (pos < len); pos++ ) - { - if( (off == -1) && (src[pos] == '"') ) - { - off = pos + 1; - } - else if( off >= 0 ) - { - if( esc == 1 ) - { - switch (src[pos]) - { - case '"': - case '\\': - off++; - break; - } - dest[pos-off] = src[pos]; - esc = 0; - } - else if( src[pos] == '\\' ) - { - dest[pos-off] = src[pos]; - esc = 1; - } - else if( src[pos] != '"' ) - { - dest[pos-off] = src[pos]; - } - else - { - dest[pos-off] = '\0'; - break; - } - } - } - - return (off > -1) ? strlen(dest) : -1; -} - -static int cmp_index(const void *a, const void *b) -{ - uint32_t x = ((const lmo_entry_t *)a)->key_id; - uint32_t y = ((const lmo_entry_t *)b)->key_id; - - if (x < y) - return -1; - else if (x > y) - return 1; - - return 0; -} - -static void print_uint32(uint32_t x, FILE *out) -{ - uint32_t y = htonl(x); - print(&y, sizeof(uint32_t), 1, out); -} - -static void print_index(void *array, int n, FILE *out) -{ - lmo_entry_t *e; - - qsort(array, n, sizeof(*e), cmp_index); - - for (e = array; n > 0; n--, e++) - { - print_uint32(e->key_id, out); - print_uint32(e->val_id, out); - print_uint32(e->offset, out); - print_uint32(e->length, out); - } -} - -int main(int argc, char *argv[]) -{ - char line[4096]; - char key[4096]; - char val[4096]; - char tmp[4096]; - int state = 0; - int offset = 0; - int length = 0; - int n_entries = 0; - void *array = NULL; - lmo_entry_t *entry = NULL; - uint32_t key_id, val_id; - - FILE *in; - FILE *out; - - if( (argc != 3) || ((in = fopen(argv[1], "r")) == NULL) || ((out = fopen(argv[2], "w")) == NULL) ) - usage(argv[0]); - - memset(line, 0, sizeof(key)); - memset(key, 0, sizeof(val)); - memset(val, 0, sizeof(val)); - - while( (NULL != fgets(line, sizeof(line), in)) || (state >= 2 && feof(in)) ) - { - if( state == 0 && strstr(line, "msgid \"") == line ) - { - switch(extract_string(line, key, sizeof(key))) - { - case -1: - die("Syntax error in msgid"); - case 0: - state = 1; - break; - default: - state = 2; - } - } - else if( state == 1 || state == 2 ) - { - if( strstr(line, "msgstr \"") == line || state == 2 ) - { - switch(extract_string(line, val, sizeof(val))) - { - case -1: - state = 4; - break; - default: - state = 3; - } - } - else - { - switch(extract_string(line, tmp, sizeof(tmp))) - { - case -1: - state = 2; - break; - default: - strcat(key, tmp); - } - } - } - else if( state == 3 ) - { - switch(extract_string(line, tmp, sizeof(tmp))) - { - case -1: - state = 4; - break; - default: - strcat(val, tmp); - } - } - - if( state == 4 ) - { - if( strlen(key) > 0 && strlen(val) > 0 ) - { - key_id = sfh_hash(key, strlen(key)); - val_id = sfh_hash(val, strlen(val)); - - if( key_id != val_id ) - { - n_entries++; - array = realloc(array, n_entries * sizeof(lmo_entry_t)); - entry = (lmo_entry_t *)array + n_entries - 1; - - if (!array) - die("Out of memory"); - - entry->key_id = key_id; - entry->val_id = val_id; - entry->offset = offset; - entry->length = strlen(val); - - length = strlen(val) + ((4 - (strlen(val) % 4)) % 4); - - print(val, length, 1, out); - offset += length; - } - } - - state = 0; - memset(key, 0, sizeof(key)); - memset(val, 0, sizeof(val)); - } - - memset(line, 0, sizeof(line)); - } - - print_index(array, n_entries, out); - - if( offset > 0 ) - { - print_uint32(offset, out); - fsync(fileno(out)); - fclose(out); - } - else - { - fclose(out); - unlink(argv[2]); - } - - fclose(in); - return(0); -} diff --git a/package/jsda/luci-app-nfs/tools/po2lmo/src/template_lmo.c b/package/jsda/luci-app-nfs/tools/po2lmo/src/template_lmo.c deleted file mode 100644 index 27205a7228..0000000000 --- a/package/jsda/luci-app-nfs/tools/po2lmo/src/template_lmo.c +++ /dev/null @@ -1,328 +0,0 @@ -/* - * lmo - Lua Machine Objects - Base functions - * - * Copyright (C) 2009-2010 Jo-Philipp Wich - * - * 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 "template_lmo.h" - -/* - * Hash function from http://www.azillionmonkeys.com/qed/hash.html - * Copyright (C) 2004-2008 by Paul Hsieh - */ - -uint32_t sfh_hash(const char *data, int len) -{ - uint32_t hash = len, tmp; - int rem; - - if (len <= 0 || data == NULL) return 0; - - rem = len & 3; - len >>= 2; - - /* Main loop */ - for (;len > 0; len--) { - hash += sfh_get16(data); - tmp = (sfh_get16(data+2) << 11) ^ hash; - hash = (hash << 16) ^ tmp; - data += 2*sizeof(uint16_t); - hash += hash >> 11; - } - - /* Handle end cases */ - switch (rem) { - case 3: hash += sfh_get16(data); - hash ^= hash << 16; - hash ^= data[sizeof(uint16_t)] << 18; - hash += hash >> 11; - break; - case 2: hash += sfh_get16(data); - hash ^= hash << 11; - hash += hash >> 17; - break; - case 1: hash += *data; - hash ^= hash << 10; - hash += hash >> 1; - } - - /* Force "avalanching" of final 127 bits */ - hash ^= hash << 3; - hash += hash >> 5; - hash ^= hash << 4; - hash += hash >> 17; - hash ^= hash << 25; - hash += hash >> 6; - - return hash; -} - -uint32_t lmo_canon_hash(const char *str, int len) -{ - char res[4096]; - char *ptr, prev; - int off; - - if (!str || len >= sizeof(res)) - return 0; - - for (prev = ' ', ptr = res, off = 0; off < len; prev = *str, off++, str++) - { - if (isspace(*str)) - { - if (!isspace(prev)) - *ptr++ = ' '; - } - else - { - *ptr++ = *str; - } - } - - if ((ptr > res) && isspace(*(ptr-1))) - ptr--; - - return sfh_hash(res, ptr - res); -} - -lmo_archive_t * lmo_open(const char *file) -{ - int in = -1; - uint32_t idx_offset = 0; - struct stat s; - - lmo_archive_t *ar = NULL; - - if (stat(file, &s) == -1) - goto err; - - if ((in = open(file, O_RDONLY)) == -1) - goto err; - - if ((ar = (lmo_archive_t *)malloc(sizeof(*ar))) != NULL) - { - memset(ar, 0, sizeof(*ar)); - - ar->fd = in; - ar->size = s.st_size; - - fcntl(ar->fd, F_SETFD, fcntl(ar->fd, F_GETFD) | FD_CLOEXEC); - - if ((ar->mmap = mmap(NULL, ar->size, PROT_READ, MAP_SHARED, ar->fd, 0)) == MAP_FAILED) - goto err; - - idx_offset = ntohl(*((const uint32_t *) - (ar->mmap + ar->size - sizeof(uint32_t)))); - - if (idx_offset >= ar->size) - goto err; - - ar->index = (lmo_entry_t *)(ar->mmap + idx_offset); - ar->length = (ar->size - idx_offset - sizeof(uint32_t)) / sizeof(lmo_entry_t); - ar->end = ar->mmap + ar->size; - - return ar; - } - -err: - if (in > -1) - close(in); - - if (ar != NULL) - { - if ((ar->mmap != NULL) && (ar->mmap != MAP_FAILED)) - munmap(ar->mmap, ar->size); - - free(ar); - } - - return NULL; -} - -void lmo_close(lmo_archive_t *ar) -{ - if (ar != NULL) - { - if ((ar->mmap != NULL) && (ar->mmap != MAP_FAILED)) - munmap(ar->mmap, ar->size); - - close(ar->fd); - free(ar); - - ar = NULL; - } -} - - -lmo_catalog_t *_lmo_catalogs = NULL; -lmo_catalog_t *_lmo_active_catalog = NULL; - -int lmo_load_catalog(const char *lang, const char *dir) -{ - DIR *dh = NULL; - char pattern[16]; - char path[PATH_MAX]; - struct dirent *de = NULL; - - lmo_archive_t *ar = NULL; - lmo_catalog_t *cat = NULL; - - if (!lmo_change_catalog(lang)) - return 0; - - if (!dir || !(dh = opendir(dir))) - goto err; - - if (!(cat = malloc(sizeof(*cat)))) - goto err; - - memset(cat, 0, sizeof(*cat)); - - snprintf(cat->lang, sizeof(cat->lang), "%s", lang); - snprintf(pattern, sizeof(pattern), "*.%s.lmo", lang); - - while ((de = readdir(dh)) != NULL) - { - if (!fnmatch(pattern, de->d_name, 0)) - { - snprintf(path, sizeof(path), "%s/%s", dir, de->d_name); - ar = lmo_open(path); - - if (ar) - { - ar->next = cat->archives; - cat->archives = ar; - } - } - } - - closedir(dh); - - cat->next = _lmo_catalogs; - _lmo_catalogs = cat; - - if (!_lmo_active_catalog) - _lmo_active_catalog = cat; - - return 0; - -err: - if (dh) closedir(dh); - if (cat) free(cat); - - return -1; -} - -int lmo_change_catalog(const char *lang) -{ - lmo_catalog_t *cat; - - for (cat = _lmo_catalogs; cat; cat = cat->next) - { - if (!strncmp(cat->lang, lang, sizeof(cat->lang))) - { - _lmo_active_catalog = cat; - return 0; - } - } - - return -1; -} - -static lmo_entry_t * lmo_find_entry(lmo_archive_t *ar, uint32_t hash) -{ - unsigned int m, l, r; - uint32_t k; - - l = 0; - r = ar->length - 1; - - while (1) - { - m = l + ((r - l) / 2); - - if (r < l) - break; - - k = ntohl(ar->index[m].key_id); - - if (k == hash) - return &ar->index[m]; - - if (k > hash) - { - if (!m) - break; - - r = m - 1; - } - else - { - l = m + 1; - } - } - - return NULL; -} - -int lmo_translate(const char *key, int keylen, char **out, int *outlen) -{ - uint32_t hash; - lmo_entry_t *e; - lmo_archive_t *ar; - - if (!key || !_lmo_active_catalog) - return -2; - - hash = lmo_canon_hash(key, keylen); - - for (ar = _lmo_active_catalog->archives; ar; ar = ar->next) - { - if ((e = lmo_find_entry(ar, hash)) != NULL) - { - *out = ar->mmap + ntohl(e->offset); - *outlen = ntohl(e->length); - return 0; - } - } - - return -1; -} - -void lmo_close_catalog(const char *lang) -{ - lmo_archive_t *ar, *next; - lmo_catalog_t *cat, *prev; - - for (prev = NULL, cat = _lmo_catalogs; cat; prev = cat, cat = cat->next) - { - if (!strncmp(cat->lang, lang, sizeof(cat->lang))) - { - if (prev) - prev->next = cat->next; - else - _lmo_catalogs = cat->next; - - for (ar = cat->archives; ar; ar = next) - { - next = ar->next; - lmo_close(ar); - } - - free(cat); - break; - } - } -} diff --git a/package/jsda/luci-app-nfs/tools/po2lmo/src/template_lmo.h b/package/jsda/luci-app-nfs/tools/po2lmo/src/template_lmo.h deleted file mode 100644 index 57f59aa56b..0000000000 --- a/package/jsda/luci-app-nfs/tools/po2lmo/src/template_lmo.h +++ /dev/null @@ -1,92 +0,0 @@ -/* - * lmo - Lua Machine Objects - General header - * - * Copyright (C) 2009-2012 Jo-Philipp Wich - * - * 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. - */ - -#ifndef _TEMPLATE_LMO_H_ -#define _TEMPLATE_LMO_H_ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#if (defined(__GNUC__) && defined(__i386__)) -#define sfh_get16(d) (*((const uint16_t *) (d))) -#else -#define sfh_get16(d) ((((uint32_t)(((const uint8_t *)(d))[1])) << 8)\ - +(uint32_t)(((const uint8_t *)(d))[0]) ) -#endif - - -struct lmo_entry { - uint32_t key_id; - uint32_t val_id; - uint32_t offset; - uint32_t length; -} __attribute__((packed)); - -typedef struct lmo_entry lmo_entry_t; - - -struct lmo_archive { - int fd; - int length; - uint32_t size; - lmo_entry_t *index; - char *mmap; - char *end; - struct lmo_archive *next; -}; - -typedef struct lmo_archive lmo_archive_t; - - -struct lmo_catalog { - char lang[6]; - struct lmo_archive *archives; - struct lmo_catalog *next; -}; - -typedef struct lmo_catalog lmo_catalog_t; - - -uint32_t sfh_hash(const char *data, int len); -uint32_t lmo_canon_hash(const char *data, int len); - -lmo_archive_t * lmo_open(const char *file); -void lmo_close(lmo_archive_t *ar); - - -extern lmo_catalog_t *_lmo_catalogs; -extern lmo_catalog_t *_lmo_active_catalog; - -int lmo_load_catalog(const char *lang, const char *dir); -int lmo_change_catalog(const char *lang); -int lmo_translate(const char *key, int keylen, char **out, int *outlen); -void lmo_close_catalog(const char *lang); - -#endif diff --git a/package/lean/luci-app-nfs/Makefile b/package/lean/luci-app-nfs/Makefile new file mode 100644 index 0000000000..f4b299e015 --- /dev/null +++ b/package/lean/luci-app-nfs/Makefile @@ -0,0 +1,18 @@ +# Copyright (C) 2016 Openwrt.org +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI support for nfs +LUCI_DEPENDS:= +LUCI_PKGARCH:=all +PKG_NAME:=luci-app-nfs +PKG_VERSION:=1.0 +PKG_RELEASE:=1 + +include $(TOPDIR)/feeds/luci/luci.mk + +# call BuildPackage - OpenWrt buildroot signature + diff --git a/package/lean/luci-app-nfs/luasrc/controller/nfs.lua b/package/lean/luci-app-nfs/luasrc/controller/nfs.lua new file mode 100644 index 0000000000..9807fb2130 --- /dev/null +++ b/package/lean/luci-app-nfs/luasrc/controller/nfs.lua @@ -0,0 +1,8 @@ +module("luci.controller.nfs", package.seeall) + +function index() + if not nixio.fs.access("/etc/config/nfs") then + return + end + entry({"admin", "nas", "nfs"}, cbi("nfs"), _("NFS Manage"), 5).dependent = true +end diff --git a/package/lean/luci-app-nfs/luasrc/model/cbi/nfs.lua b/package/lean/luci-app-nfs/luasrc/model/cbi/nfs.lua new file mode 100644 index 0000000000..3c3267752f --- /dev/null +++ b/package/lean/luci-app-nfs/luasrc/model/cbi/nfs.lua @@ -0,0 +1,65 @@ +local fs = require "nixio.fs" + +m = Map("nfs", translate("NFS Manage")) + +-- NFS Share -- +s = m:section(TypedSection, "share", translate("Shared Directories")) +s.anonymous = true +s.addremove = true +s.template = "cbi/tblsection" + +en = s:option(Flag, "enabled", translate("Enable")) +en.rmempty = false +en.default = "1" + +ph1 = s:option(Value, "path", translate("Path")) +ph1.placeholder = "/mnt" +ph1.rmempty = false +ph1.optional = false + +ct = s:option(Value, "clients", translate("Clients")) +ct.placeholder = "192.168.1.0/24" +ct.rmempty = false +ct.optional = false + +op = s:option(Value, "options", translate("options")) +op.placeholder = "rw,sync,root_squash,all_squash,insecure,no_subtree_check" +op.rmempty = false +op.optional = false + +-- NFS Mount -- +c = m:section(TypedSection, "mount", translate("Mounted Points")) +c.anonymous = true +c.addremove = true +c.template = "cbi/tblsection" + +en = c:option(Flag, "enabled", translate("Enable")) +en.default = "1" +en.rmempty = false + +sr = c:option(Value, "source", translate("source")) +sr.placeholder = "192.168.1.1:/mnt/*" +sr.rmempty = false +sr.optional = false + +ph2 = c:option(Value, "target", translate("target")) +ph2.placeholder = "/mnt/nfs/*" +ph2.rmempty = false +ph2.optional = false + +op = c:option(Value, "options", translate("options")) +op.placeholder = "rw,nolock" +op.rmempty = false +op.optional = false + +de = c:option(Value, "delay", translate("delay")) +de.placeholder = "5" +de.rmempty = false +de.optional = false + +if nixio.fs.access("/etc/config/fstab") then + ph1.titleref = luci.dispatcher.build_url("admin", "system", "mounts") + ph2.titleref = luci.dispatcher.build_url("admin", "system", "mounts") +end + +return m diff --git a/package/jsda/luci-app-nfs/files/luci/i18n/nfs.zh-cn.po b/package/lean/luci-app-nfs/po/zh-cn/nfs.po similarity index 59% rename from package/jsda/luci-app-nfs/files/luci/i18n/nfs.zh-cn.po rename to package/lean/luci-app-nfs/po/zh-cn/nfs.po index 14ef1466e9..1ae9fab84d 100644 --- a/package/jsda/luci-app-nfs/files/luci/i18n/nfs.zh-cn.po +++ b/package/lean/luci-app-nfs/po/zh-cn/nfs.po @@ -13,8 +13,8 @@ msgstr "" "Language-Team: \n" "X-Generator: Poedit 1.8.1\n" -msgid "NFS" -msgstr "NFS" +msgid "NFS Manage" +msgstr "NFS 管理" msgid "Shared Directories" msgstr "共享目录" @@ -28,32 +28,17 @@ msgstr "路径" msgid "Clients" msgstr "允许的客户端" -msgid "Permission" -msgstr "访问权限" - -msgid "anonymous" -msgstr "匿名访问" - -msgid "root" -msgstr "root" - -msgid "full" -msgstr "全部权限" - -msgid "Read-only" -msgstr "只读" - -msgid "Insecure" -msgstr "禁用安全性" - -msgid "Allow external network access" -msgstr "允许外部网络访问" - msgid "Mounted Points" -msgstr "已挂载到本地的NFS" +msgstr "已挂载的目录" -msgid "Host" -msgstr "主机" +msgid "source" +msgstr "源目录" -msgid "Mount On" +msgid "target" msgstr "挂载到" + +msgid "options" +msgstr "选项" + +msgid "delay" +msgstr "延迟时间" diff --git a/package/lean/luci-app-nfs/po/zh-cn/nfs.zh-cn.lmo b/package/lean/luci-app-nfs/po/zh-cn/nfs.zh-cn.lmo new file mode 100644 index 0000000000..76efe6406c Binary files /dev/null and b/package/lean/luci-app-nfs/po/zh-cn/nfs.zh-cn.lmo differ diff --git a/package/lean/luci-app-nfs/root/etc/config/nfs b/package/lean/luci-app-nfs/root/etc/config/nfs new file mode 100644 index 0000000000..7395846563 --- /dev/null +++ b/package/lean/luci-app-nfs/root/etc/config/nfs @@ -0,0 +1,6 @@ + +config share + option enabled '0' + option path '/mnt' + option clients '*' + option options 'rw,sync,root_squash,all_squash,insecure,no_subtree_check' diff --git a/package/lean/luci-app-nfs/root/etc/init.d/nfs b/package/lean/luci-app-nfs/root/etc/init.d/nfs new file mode 100644 index 0000000000..8930bea33f --- /dev/null +++ b/package/lean/luci-app-nfs/root/etc/init.d/nfs @@ -0,0 +1,86 @@ +#!/bin/sh /etc/rc.common +START=45 +STOP=99 +NAME="nfs" + +nfs_share() { + local config="$1" + local enabled + local path + local clients + local options + + config_get_bool enabled "$config" enabled 0 + + for opt in path clients options + do + config_get "$opt" "$config" "$opt" + done + + if [ "$enabled" = 1 ]; then + grep -qs $path /etc/exports + if [ $? -ne 0 ]; then + echo -e "$path\t$clients($options)" >>/etc/exports + exportfs -r + fi + elif [ "$enabled" = 0 ]; then + exportfs -u | grep -qs $path + if [ $? -eq 0 ]; then + exportfs -u $clients:$path + fi + fi + exportfs -r +} + +nfs_share_stop() { + exportfs -au &>/dev/null +} + +nfs_mount() { + local config="$1" + local enabled + local target + local source + local options + local delay + + config_get_bool enabled "$config" enabled 0 + + for opt in target source options delay + do + config_get "$opt" "$config" "$opt" + done + + if [ "$enabled" = 1 ]; then + if [ "$delay" -a $delay -gt 0 ]; then + logger "NetMount: Sleep $delay seconds before mount" + sleep $delay + fi + grep -qs $target /proc/mounts + if [ $? -ne 0 ]; then + mkdir -p $target + logger "NetMount: Mounting $source in $target" + mount -t nfs -o $options $source $target + fi + elif [ "$enabled" = 0 ]; then + if grep -qs $target /proc/mounts; then + umount -fr $target + sleep $delay + fi + fi +} + +start() { + config_load "$NAME" + config_foreach nfs_share share + config_foreach nfs_mount mount +} + +stop() { + nfs_share_stop +} + +restart() { + echo > /etc/exports + start +} diff --git a/package/lean/luci-app-nfs/root/etc/uci-defaults/nfs b/package/lean/luci-app-nfs/root/etc/uci-defaults/nfs new file mode 100644 index 0000000000..f7aa1397be --- /dev/null +++ b/package/lean/luci-app-nfs/root/etc/uci-defaults/nfs @@ -0,0 +1,14 @@ +#!/bin/sh + +uci -q batch <<-EOF >/dev/null + delete ucitrack.@nfs[-1] + add ucitrack nfs + set ucitrack.@nfs[-1].init=nfs + commit ucitrack +EOF + +/etc/init.d/nfs enable && /etc/init.d/nfs restart + +rm -f /tmp/luci-indexcache + +exit 0 diff --git a/scripts/download.pl b/scripts/download.pl index 409d209799..fb4c488f49 100755 --- a/scripts/download.pl +++ b/scripts/download.pl @@ -194,6 +194,7 @@ foreach my $mirror (@ARGV) { push @mirrors, "https://downloads.sourceforge.net/$1"; } } elsif ($mirror =~ /^\@APACHE\/(.+)$/) { + push @mirrors, "https://mirrors.ustc.edu.cn/apache/$1"; push @mirrors, "https://mirror.netcologne.de/apache.org/$1"; push @mirrors, "https://mirror.aarnet.edu.au/pub/apache/$1"; push @mirrors, "https://mirror.csclub.uwaterloo.ca/apache/$1"; @@ -213,6 +214,7 @@ foreach my $mirror (@ARGV) { push @mirrors, "https://raw.githubusercontent.com/$dir"; } } elsif ($mirror =~ /^\@GNU\/(.+)$/) { + push @mirrors, "https://mirrors.ustc.edu.cn/gnu/$1"; push @mirrors, "https://mirror.csclub.uwaterloo.ca/gnu/$1"; push @mirrors, "https://mirror.netcologne.de/gnu/$1"; push @mirrors, "http://ftp.kddilabs.jp/GNU/gnu/$1"; @@ -236,19 +238,20 @@ foreach my $mirror (@ARGV) { push @extra, "$extra[0]/testing"; } elsif ($filename =~ /linux-(\d+\.\d+(?:\.\d+)?)/) { push @extra, "$extra[0]/longterm/v$1"; - } + } foreach my $dir (@extra) { - push @mirrors, "http://mirrors.ustc.edu.cn/kernel.org/$dir"; + push @mirrors, "https://mirrors.ustc.edu.cn/kernel.org/$dir"; push @mirrors, "https://cdn.kernel.org/pub/$dir"; - push @mirrors, "https://mirror.rackspace.com/kernel.org/$dir"; - push @mirrors, "http://download.xs4all.nl/ftp.kernel.org/pub/$dir"; - push @mirrors, "http://mirrors.mit.edu/kernel/$dir"; + push @mirrors, "https://mirror.rackspace.com/kernel.org/pub/$dir"; + push @mirrors, "https://download.xs4all.nl/ftp.kernel.org/pub/$dir"; + push @mirrors, "https://mirrors.mit.edu/kernel/$dir"; push @mirrors, "http://ftp.nara.wide.ad.jp/pub/kernel.org/$dir"; push @mirrors, "http://www.ring.gr.jp/archives/linux/kernel.org/$dir"; push @mirrors, "ftp://ftp.riken.jp/Linux/kernel.org/$dir"; push @mirrors, "ftp://www.mirrorservice.org/sites/ftp.kernel.org/pub/$dir"; } } elsif ($mirror =~ /^\@GNOME\/(.+)$/) { + push @mirrors, "https://mirrors.ustc.edu.cn/gnome/sources/$1"; push @mirrors, "https://mirror.csclub.uwaterloo.ca/gnome/sources/$1"; push @mirrors, "http://ftp.acc.umu.se/pub/GNOME/sources/$1"; push @mirrors, "http://ftp.kaist.ac.kr/gnome/sources/$1"; @@ -264,9 +267,8 @@ foreach my $mirror (@ARGV) { } #push @mirrors, 'https://mirror1.openwrt.org'; -push @mirrors, 'https://sources.lede-project.org'; +push @mirrors, 'https://sources.openwrt.org'; push @mirrors, 'https://mirror2.openwrt.org/sources'; -push @mirrors, 'https://downloads.openwrt.org/sources'; while (!-f "$target/$filename") { my $mirror = shift @mirrors; @@ -276,4 +278,3 @@ while (!-f "$target/$filename") { } $SIG{INT} = \&cleanup; - diff --git a/scripts/json_add_image_info.py b/scripts/json_add_image_info.py old mode 100644 new mode 100755 index fe498b773f..44b4031f85 --- a/scripts/json_add_image_info.py +++ b/scripts/json_add_image_info.py @@ -1,1156 +1,55 @@ +#!/usr/bin/env python3 +import json +import os +import hashlib +def e(variable, default=None): + return os.environ.get(variable, default) +json_path = "{}{}{}.json".format(e("BIN_DIR"), os.sep, e("IMAGE_PREFIX")) - - - - - - - - - - - +with open(os.path.join(e("BIN_DIR"), e("IMAGE_NAME")), "rb") as image_file: + image_hash = hashlib.sha256(image_file.read()).hexdigest() +def get_titles(): + titles = [] + for prefix in ["", "ALT0_", "ALT1_", "ALT2_"]: + title = {} + for var in ["vendor", "model", "variant"]: + if e("DEVICE_{}{}".format(prefix, var.upper())): + title[var] = e("DEVICE_{}{}".format(prefix, var.upper())) - - - - - - - + if title: + titles.append(title) - - - openwrt/json_add_image_info.py at master · openwrt/openwrt · GitHub - - - - + if not titles: + titles.append({"title": e("DEVICE_TITLE")}) - - + return titles - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Skip to content - - - - - - - - - - - -
- -
- - -
- -
- - - -
-
-
- - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - Permalink - - - - - -
- - -
- - Branch: - master - - - - - - - -
- -
- - Find file - - - Copy path - -
-
- - -
- - Find file - - - Copy path - -
-
- - - - -
-
- - @aparcar - aparcar - - build: create JSON files containing image info - - - - 881ed09 - Sep 29, 2019 - -
- -
-
- - 1 contributor - - -
- -

- Users who have contributed to this file -

-
- -
-
-
-
- - - - - -
- -
-
- - executable file - - 56 lines (40 sloc) - - 1.53 KB -
- -
- -
- Raw - Blame - History -
- - -
- - - -
-
-
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#!/usr/bin/env python3
-
import json
import os
import hashlib
-
-
def e(variable, default=None):
return os.environ.get(variable, default)
-
-
json_path = "{}{}{}.json".format(e("BIN_DIR"), os.sep, e("IMAGE_PREFIX"))
-
with open(os.path.join(e("BIN_DIR"), e("IMAGE_NAME")), "rb") as image_file:
image_hash = hashlib.sha256(image_file.read()).hexdigest()
-
-
def get_titles():
titles = []
for prefix in ["", "ALT0_", "ALT1_", "ALT2_"]:
title = {}
for var in ["vendor", "model", "variant"]:
if e("DEVICE_{}{}".format(prefix, var.upper())):
title[var] = e("DEVICE_{}{}".format(prefix, var.upper()))
-
if title:
titles.append(title)
-
if not titles:
titles.append({"title": e("DEVICE_TITLE")})
-
return titles
-
-
if not os.path.exists(json_path):
device_info = {
"id": e("DEVICE_ID"),
"image_prefix": e("IMAGE_PREFIX"),
"images": [],
"metadata_version": 1,
"supported_devices": e("SUPPORTED_DEVICES").split(),
"target": "{}/{}".format(e("TARGET"), e("SUBTARGET", "generic")),
"titles": get_titles(),
"version_commit": e("VERSION_CODE"),
"version_number": e("VERSION_NUMBER"),
}
else:
with open(json_path, "r") as json_file:
device_info = json.load(json_file)
-
image_info = {"type": e("IMAGE_TYPE"), "name": e("IMAGE_NAME"), "sha256": image_hash}
device_info["images"].append(image_info)
-
with open(json_path, "w") as json_file:
json.dump(device_info, json_file, sort_keys=True, indent=" ")
- - - -
- -
- - - -
- - -
- - -
-
- - - -
-
- -
-
- - -
- - - - - - -
- - - You can’t perform that action at this time. -
- - - - - - - - - - - - - - -
- - - +image_info = {"type": e("IMAGE_TYPE"), "name": e("IMAGE_NAME"), "sha256": image_hash} +device_info["images"].append(image_info) +with open(json_path, "w") as json_file: + json.dump(device_info, json_file, sort_keys=True, indent=" ") diff --git a/target/linux/apm821xx/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom b/target/linux/apm821xx/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom index 6d2d18658d..ee58901d18 100644 --- a/target/linux/apm821xx/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom +++ b/target/linux/apm821xx/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom @@ -2,50 +2,7 @@ [ -e /lib/firmware/$FIRMWARE ] && exit 0 -. /lib/functions.sh -. /lib/functions/system.sh - -ath9k_eeprom_die() { - echo "ath9k eeprom: " "$*" - exit 1 -} - -ath9k_eeprom_extract() { - local part=$1 - local offset=$2 - local count=$3 - local mtd - - mtd=$(find_mtd_chardev $part) - [ -n "$mtd" ] || \ - ath9k_eeprom_die "no mtd device found for partition $part" - - dd if=$mtd of=/lib/firmware/$FIRMWARE iflag=skip_bytes bs=$count skip=$offset count=1 2>/dev/null || \ - ath9k_eeprom_die "failed to extract from $mtd" -} - -ath9k_ubi_eeprom_extract() { - local part=$1 - local offset=$2 - local count=$3 - local ubidev=$(nand_find_ubi $CI_UBIPART) - local ubi - - ubi=$(nand_find_volume $ubidev $part) - [ -n "$ubi" ] || \ - ath9k_eeprom_die "no UBI volume found for $part" - - dd if=/dev/$ubi of=/lib/firmware/$FIRMWARE iflag=skip_bytes bs=$count skip=$offset count=1 2>/dev/null || \ - ath9k_eeprom_die "failed to extract from $ubi" -} - -ath9k_patch_firmware_mac() { - local mac=$1 - - [ -z "$mac" ] && return - - macaddr_2bin $mac | dd of=/lib/firmware/$FIRMWARE conv=notrunc bs=1 seek=2 count=6 -} +. /lib/functions/caldata.sh board=$(board_name) @@ -56,14 +13,14 @@ case "$FIRMWARE" in . /lib/upgrade/nand.sh if [ -n "$(nand_find_volume ubi0 caldata)" ]; then - ath9k_ubi_eeprom_extract "caldata" 20480 4096 + caldata_extract_ubi "caldata" 0x5000 0x1000 else - ath9k_eeprom_extract "wifi_data" 20480 4096 - ath9k_patch_firmware_mac $(mtd_get_mac_binary wifi_data 12) + caldata_extract "wifi_data" 0x5000 0x1000 + ath9k_patch_mac $(mtd_get_mac_binary wifi_data 0xc) fi ;; *) - ath9k_eeprom_die "board $board is not supported yet" + caldata_die "board $board is not supported yet" ;; esac ;; @@ -74,14 +31,14 @@ case "$FIRMWARE" in . /lib/upgrade/nand.sh if [ -n "$(nand_find_volume ubi0 caldata)" ]; then - ath9k_ubi_eeprom_extract "caldata" 4096 4096 + caldata_extract_ubi "caldata" 0x1000 0x1000 else - ath9k_eeprom_extract "wifi_data" 4096 4096 - ath9k_patch_firmware_mac $(mtd_get_mac_binary wifi_data 0) + caldata_extract "wifi_data" 0x1000 0x1000 + ath9k_patch_mac $(mtd_get_mac_binary wifi_data 0x0) fi ;; *) - ath9k_eeprom_die "board $board is not supported yet" + caldata_die "board $board is not supported yet" ;; esac ;; diff --git a/target/linux/apm821xx/base-files/lib/preinit/05_set_iface_mac_apm821xx b/target/linux/apm821xx/base-files/lib/preinit/05_set_iface_mac_apm821xx index 1a27930d24..11955dd5a2 100644 --- a/target/linux/apm821xx/base-files/lib/preinit/05_set_iface_mac_apm821xx +++ b/target/linux/apm821xx/base-files/lib/preinit/05_set_iface_mac_apm821xx @@ -6,7 +6,7 @@ preinit_set_mac_address() { case $(board_name) in meraki,mr24|\ meraki,mx60) - mac_lan=$(mtd_get_mac_binary_ubi board-config 102) + mac_lan=$(mtd_get_mac_binary_ubi board-config 0x66) [ -n "$mac_lan" ] && ifconfig eth0 hw ether "$mac_lan" ;; esac diff --git a/target/linux/ar71xx/base-files/etc/board.d/02_network b/target/linux/ar71xx/base-files/etc/board.d/02_network index b83f793332..4da3a5482a 100755 --- a/target/linux/ar71xx/base-files/etc/board.d/02_network +++ b/target/linux/ar71xx/base-files/etc/board.d/02_network @@ -650,10 +650,58 @@ ar71xx_setup_macs() [ -n "$wan_mac" ] && ucidef_set_interface_macaddr "wan" $wan_mac } +ar71xx_setup_ar8xxx_switch() +{ + local board="$1" + + case $board in + ap147-010|\ + archer-c25-v1|\ + archer-c58-v1|\ + archer-c59-v1|\ + archer-c59-v2|\ + archer-c60-v1|\ + archer-c60-v2|\ + archer-c7-v4|\ + archer-c7-v5|\ + cf-e375ac|\ + cf-e385ac|\ + cr3000|\ + dhp-1565-a1|\ + mynet-n600|\ + rb-2011il|\ + rb-2011ils|\ + rb-2011l|\ + rb-2011uas|\ + rb-2011uas-2hnd|\ + rb-2011uias|\ + rb-2011uias-2hnd|\ + rb-750|\ + rb-750p-pbr2|\ + rb-750-r2|\ + rb-750up-r2|\ + rb-951ui-2nd|\ + rb-952ui-5ac2nd|\ + rb-map-2nd|\ + tl-wr1043nd-v4|\ + tl-wr1043n-v5|\ + wndr3700v4|\ + wndr4300|\ + wnr1000-v2|\ + wnr2000-v3|\ + wnr2200|\ + wnr612-v2|\ + wpn824n) + ucidef_set_ar8xxx_switch_mib "switch0" 0 500 + ;; + esac +} + board_config_update board=$(board_name) ar71xx_setup_interfaces $board ar71xx_setup_macs $board +ar71xx_setup_ar8xxx_switch $board board_config_flush exit 0 diff --git a/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom b/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom index 52c9f29c01..d23a307f2d 100644 --- a/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom +++ b/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom @@ -12,8 +12,8 @@ ath9k_eeprom_die() { ath9k_eeprom_extract() { local part=$1 - local offset=$2 - local count=$3 + local offset=$(($2)) + local count=$(($3)) local mtd mtd=$(find_mtd_chardev $part) @@ -26,8 +26,8 @@ ath9k_eeprom_extract() { ath9k_ubi_eeprom_extract() { local part=$1 - local offset=$2 - local count=$3 + local offset=$(($2)) + local count=$(($3)) local ubidev=$(nand_find_ubi $CI_UBIPART) local ubi @@ -42,7 +42,7 @@ ath9k_ubi_eeprom_extract() { ath9k_eeprom_extract_reverse() { local part=$1 local offset=$2 - local count=$3 + local count=$(($3)) local mtd local reversed local caldata @@ -72,53 +72,53 @@ case "$FIRMWARE" in case $board in c-55|\ c-60) - ath9k_eeprom_extract "art" 4096 2048 - ath9k_patch_firmware_mac $(macaddr_add $(mtd_get_mac_binary art 0) +1) + ath9k_eeprom_extract "art" 0x1000 0x800 + ath9k_patch_firmware_mac $(macaddr_add $(mtd_get_mac_binary art 0x0) +1) ;; fritz4020|\ fritz450e) - ath9k_eeprom_extract_reverse "urlader" 5441 1088 + ath9k_eeprom_extract_reverse "urlader" 0x1541 0x440 ;; k2t) - ath9k_eeprom_extract "art" 4096 2048 + ath9k_eeprom_extract "art" 0x1000 0x800 ath9k_patch_firmware_mac $(macaddr_add $(cat /sys/class/net/eth0/address) +3) ;; sbr-ac1750) - ath9k_eeprom_extract "art" 4096 2048 + ath9k_eeprom_extract "art" 0x1000 0x800 ath9k_patch_firmware_mac $(macaddr_add $(cat /sys/class/net/eth0/address) +1) ;; mr18) . /lib/upgrade/nand.sh if [ -n "$(nand_find_volume ubi0 caldata)" ]; then - ath9k_ubi_eeprom_extract "caldata" 4096 2048 + ath9k_ubi_eeprom_extract "caldata" 0x1000 0x800 else - ath9k_eeprom_extract "odm-caldata" 4096 2048 + ath9k_eeprom_extract "odm-caldata" 0x1000 0x800 fi - ath9k_patch_firmware_mac $(macaddr_add $(mtd_get_mac_binary_ubi board-config 102) +1) + ath9k_patch_firmware_mac $(macaddr_add $(mtd_get_mac_binary_ubi board-config 0x66) +1) ;; r6100 | \ wndr3700v4 | \ wndr4300) - ath9k_eeprom_extract "caldata" 4096 2048 - ath9k_patch_firmware_mac $(mtd_get_mac_binary caldata 0) + ath9k_eeprom_extract "caldata" 0x1000 0x800 + ath9k_patch_firmware_mac $(mtd_get_mac_binary caldata 0x0) ;; rambutan) - ath9k_eeprom_extract "art" 4096 2048 + ath9k_eeprom_extract "art" 0x1000 0x800 ;; wlr8100) - ath9k_eeprom_extract "art" 4096 2048 + ath9k_eeprom_extract "art" 0x1000 0x800 ath9k_patch_firmware_mac $(mtd_get_mac_ascii u-boot-env "ethaddr") ;; z1) . /lib/upgrade/nand.sh if [ -n "$(nand_find_volume ubi0 caldata)" ]; then - ath9k_ubi_eeprom_extract "caldata" 4096 2048 + ath9k_ubi_eeprom_extract "caldata" 0x1000 0x800 else - ath9k_eeprom_extract "origcaldata" 4096 2048 + ath9k_eeprom_extract "origcaldata" 0x1000 0x800 fi - ath9k_patch_firmware_mac $(macaddr_add $(mtd_get_mac_binary_ubi board-config 102) +2) + ath9k_patch_firmware_mac $(macaddr_add $(mtd_get_mac_binary_ubi board-config 0x66) +2) ;; *) ath9k_eeprom_die "board $board is not supported yet" @@ -129,36 +129,36 @@ case "$FIRMWARE" in "pci_wmac0.eeprom") case $board in c-55) - ath9k_eeprom_extract "art" 20480 2048 - ath9k_patch_firmware_mac $(macaddr_add $(mtd_get_mac_binary art 0) +2) + ath9k_eeprom_extract "art" 0x5000 0x800 + ath9k_patch_firmware_mac $(macaddr_add $(mtd_get_mac_binary art 0x0) +2) ;; fritz300e) - ath9k_eeprom_extract_reverse "urloader" 5441 1088 + ath9k_eeprom_extract_reverse "urloader" 0x1541 0x440 ;; mr18) . /lib/upgrade/nand.sh if [ -n "$(nand_find_volume ubi0 caldata)" ]; then - ath9k_ubi_eeprom_extract "caldata" 20480 2048 + ath9k_ubi_eeprom_extract "caldata" 0x1541 0x440 else - ath9k_eeprom_extract "odm-caldata" 20480 2048 + ath9k_eeprom_extract "odm-caldata" 0x5000 0x800 fi - ath9k_patch_firmware_mac $(macaddr_add $(mtd_get_mac_binary_ubi board-config 102) +2) + ath9k_patch_firmware_mac $(macaddr_add $(mtd_get_mac_binary_ubi board-config 0x66) +2) ;; wndr3700v4 | \ wndr4300) - ath9k_eeprom_extract "caldata" 20480 2048 - ath9k_patch_firmware_mac $(mtd_get_mac_binary caldata 12) + ath9k_eeprom_extract "caldata" 0x5000 0x800 + ath9k_patch_firmware_mac $(mtd_get_mac_binary caldata 0xc) ;; z1) . /lib/upgrade/nand.sh if [ -n "$(nand_find_volume ubi0 caldata)" ]; then - ath9k_ubi_eeprom_extract "caldata" 86016 4096 + ath9k_ubi_eeprom_extract "caldata" 0x15000 0x1000 else - ath9k_eeprom_extract "origcaldata" 86016 4096 + ath9k_eeprom_extract "origcaldata" 0x15000 0x1000 fi - ath9k_patch_firmware_mac $(macaddr_add $(mtd_get_mac_binary_ubi board-config 102) +3) + ath9k_patch_firmware_mac $(macaddr_add $(mtd_get_mac_binary_ubi board-config 0x66) +3) ;; *) ath9k_eeprom_die "board $board is not supported yet" @@ -172,11 +172,11 @@ case "$FIRMWARE" in . /lib/upgrade/nand.sh if [ -n "$(nand_find_volume ubi0 caldata)" ]; then - ath9k_ubi_eeprom_extract "caldata" 36864 2048 + ath9k_ubi_eeprom_extract "caldata" 0x9000 0x800 else - ath9k_eeprom_extract "odm-caldata" 36864 2048 + ath9k_eeprom_extract "odm-caldata" 0x9000 0x800 fi - ath9k_patch_firmware_mac $(macaddr_add $(mtd_get_mac_binary_ubi board-config 102) +3) + ath9k_patch_firmware_mac $(macaddr_add $(mtd_get_mac_binary_ubi board-config 0x66) +3) ;; *) ath9k_eeprom_die "board $board is not supported yet" diff --git a/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata b/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata index af6c976d36..dc805a7f43 100644 --- a/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata +++ b/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata @@ -1,21 +1,5 @@ #!/bin/sh -# xor multiple hex values of the same length -xor() { - local val - local ret="0x$1" - local retlen=${#1} - - shift - while [ -n "$1" ]; do - val="0x$1" - ret=$((ret ^ val)) - shift - done - - printf "%0${retlen}x" "$ret" -} - ath10kcal_die() { echo "ath10cal: " "$*" exit 1 @@ -23,8 +7,8 @@ ath10kcal_die() { ath10kcal_from_file() { local source=$1 - local offset=$2 - local count=$3 + local offset=$(($2)) + local count=$(($3)) dd if=$source of=/lib/firmware/$FIRMWARE bs=1 skip=$offset count=$count 2>/dev/null || \ ath10kcal_die "failed to extract calibration data from $source" @@ -32,8 +16,8 @@ ath10kcal_from_file() { ath10kcal_extract() { local part=$1 - local offset=$2 - local count=$3 + local offset=$(($2)) + local count=$(($3)) local mtd cal_size mtd=$(find_mtd_chardev $part) @@ -55,30 +39,7 @@ ath10kcal_patch_mac() { [ -z "$mac" ] && return - macaddr_2bin $mac | dd of=/lib/firmware/$FIRMWARE conv=notrunc bs=1 seek=6 count=6 -} - -ath10kcal_patch_mac_crc() { - local mac=$1 - local mac_offset=6 - local chksum_offset=2 - local xor_mac - local xor_fw_mac - local xor_fw_chksum - - xor_fw_mac=$(hexdump -v -n 6 -s $mac_offset -e '/1 "%02x"' /lib/firmware/$FIRMWARE) - xor_fw_mac="${xor_fw_mac:0:4} ${xor_fw_mac:4:4} ${xor_fw_mac:8:4}" - - ath10kcal_patch_mac "$mac" && { - xor_mac=${mac//:/} - xor_mac="${xor_mac:0:4} ${xor_mac:4:4} ${xor_mac:8:4}" - - xor_fw_chksum=$(hexdump -v -n 2 -s $chksum_offset -e '/1 "%02x"' /lib/firmware/$FIRMWARE) - xor_fw_chksum=$(xor $xor_fw_chksum $xor_fw_mac $xor_mac) - - printf "%b" "\x${xor_fw_chksum:0:2}\x${xor_fw_chksum:2:2}" | \ - dd of=/lib/firmware/$FIRMWARE conv=notrunc bs=1 seek=$chksum_offset count=2 - } + macaddr_2bin $mac | dd of=/lib/firmware/$FIRMWARE conv=notrunc oflag=seek_bytes bs=6 seek=6 count=1 } [ -e /lib/firmware/$FIRMWARE ] && exit 0 @@ -96,17 +57,17 @@ case "$FIRMWARE" in mr1750|\ mr1750v2|\ om5p-acv2) - ath10kcal_extract "ART" 20480 2116 + ath10kcal_extract "ART" 0x5000 0x844 ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) +16) ;; archer-c25-v1|\ tl-wdr6500-v2) - ath10kcal_extract "art" 20480 2116 + ath10kcal_extract "art" 0x5000 0x844 ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth1/address) -2) ;; archer-c7-v4|\ archer-c7-v5) - ath10kcal_extract "art" 20480 2116 + ath10kcal_extract "art" 0x5000 0x844 ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) -1) ;; cf-e355ac-v1|\ @@ -119,64 +80,64 @@ case "$FIRMWARE" in oolite-v5.2-dev|\ sr3200|\ xd3200) - ath10kcal_extract "art" 20480 2116 + ath10kcal_extract "art" 0x5000 0x844 ;; dap-2695-a1) - ath10kcal_extract "radiocfg" 20480 2116 + ath10kcal_extract "radiocfg" 0x5000 0x844 ath10kcal_patch_mac $(mtd_get_mac_ascii bdcfg wlanmac_a) ;; dir-869-a1|\ qihoo-c301) - ath10kcal_extract "radiocfg" 20480 2116 + ath10kcal_extract "radiocfg" 0x5000 0x844 ath10kcal_patch_mac $(mtd_get_mac_ascii devdata wlan5mac) ;; dw33d) - ath10kcal_extract "art" 20480 2116 - ath10kcal_patch_mac $(mtd_get_mac_binary art 18) + ath10kcal_extract "art" 0x5000 0x844 + ath10kcal_patch_mac $(mtd_get_mac_binary art 0x12) ;; sbr-ac1750) - ath10kcal_extract "art" 20480 2116 - ath10kcal_patch_mac_crc $(macaddr_add $(cat /sys/class/net/eth1/address) +1) + ath10kcal_extract "art" 0x5000 0x844 + ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth1/address) +1) ;; epg5000|\ esr1750) - ath10kcal_extract "caldata" 20480 2116 + ath10kcal_extract "caldata" 0x5000 0x844 ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) +1) ;; gl-ar750s|\ gl-ar750|\ tl-wpa8630) - ath10kcal_extract "art" 20480 2116 + ath10kcal_extract "art" 0x5000 0x844 ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) +1) ;; koala) - ath10kcal_extract "art" 20480 2116 - ath10kcal_patch_mac $(macaddr_add $(mtd_get_mac_binary art 12) +0) + ath10kcal_extract "art" 0x5000 0x844 + ath10kcal_patch_mac $(macaddr_add $(mtd_get_mac_binary art 0xc) +0) ;; mc-mac1200r) - ath10kcal_extract "art" 20480 2116 + ath10kcal_extract "art" 0x5000 0x844 ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth1/address) -1) ;; r6100) - ath10kcal_extract "caldata" 20480 2116 + ath10kcal_extract "caldata" 0x5000 0x844 ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth1/address) +2) ;; rb-952ui-5ac2nd|\ rb-wapg-5hact2hnd) - ath10kcal_from_file "/sys/firmware/routerboot/ext_wlan_data" 20480 2116 + ath10kcal_from_file "/sys/firmware/routerboot/ext_wlan_data" 0x5000 0x844 ;; re355|\ re450|\ tl-wr902ac-v1) - ath10kcal_extract "art" 20480 2116 + ath10kcal_extract "art" 0x5000 0x844 ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) -2) ;; unifiac-lite|\ unifiac-pro) - ath10kcal_extract "EEPROM" 20480 2116 + ath10kcal_extract "EEPROM" 0x5000 0x844 ;; wi2a-ac200i) - ath10kcal_extract "ART" 20480 2116 + ath10kcal_extract "ART" 0x5000 0x844 ;; esac ;; @@ -184,25 +145,25 @@ case "$FIRMWARE" in case $board in archer-c5|\ archer-c7) - ath10kcal_extract "art" 20480 2116 + ath10kcal_extract "art" 0x5000 0x844 ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth1/address) -2) ;; nbg6616|\ nbg6716) - ath10kcal_extract "RFdata" 20480 2116 + ath10kcal_extract "RFdata" 0x5000 0x844 ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth1/address) -2) ;; om5p-ac) - ath10kcal_extract "ART" 20480 2116 + ath10kcal_extract "ART" 0x5000 0x844 ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) +16) ;; rb-911g-5hpacd|\ rb-921gs-5hpacd-r2|\ rb-962uigs-5hact2hnt) - ath10kcal_from_file "/sys/firmware/routerboot/ext_wlan_data" 20480 2116 + ath10kcal_from_file "/sys/firmware/routerboot/ext_wlan_data" 0x5000 0x844 ;; wlr8100) - ath10kcal_extract "art" 20480 2116 + ath10kcal_extract "art" 0x5000 0x844 ath10kcal_patch_mac $(macaddr_add $(mtd_get_mac_ascii u-boot-env ethaddr) +1) ;; esac @@ -213,24 +174,29 @@ case "$FIRMWARE" in archer-c59-v1|\ archer-c59-v2|\ archer-c60-v1|\ - archer-c60-v2|\ cf-e355ac-v2|\ cf-e375ac) - ath10kcal_extract "art" 20480 12064 + ath10kcal_extract "art" 0x5000 0x2f20 ln -sf /lib/firmware/ath10k/pre-cal-pci-0000\:00\:00.0.bin \ /lib/firmware/ath10k/QCA9888/hw2.0/board.bin ;; + archer-c60-v2) + ath10kcal_extract "art" 0x5000 0x2f20 + ln -sf /lib/firmware/ath10k/pre-cal-pci-0000\:00\:00.0.bin \ + /lib/firmware/ath10k/QCA9888/hw2.0/board.bin + ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) -1) + ;; cf-e385ac) - ath10kcal_extract "art" 20480 12064 + ath10kcal_extract "art" 0x5000 0x2f20 ;; k2t) - ath10kcal_extract "art" 20480 12064 + ath10kcal_extract "art" 0x5000 0x2f20 ath10kcal_patch_mac_crc $(macaddr_add $(cat /sys/class/net/eth0/address) +2) ln -sf /lib/firmware/ath10k/pre-cal-pci-0000\:00\:00.0.bin \ /lib/firmware/ath10k/QCA9888/hw2.0/board.bin ;; - tl-wdr6500-v6) - ath10kcal_extract "art" 8192 12064 + tl-wdr6500-v6) + ath10kcal_extract "art" 0x2000 0x2f20 ln -sf /lib/firmware/ath10k/pre-cal-pci-0000\:00\:00.0.bin \ /lib/firmware/ath10k/QCA9888/hw2.0/board.bin ;; diff --git a/target/linux/ar71xx/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac b/target/linux/ar71xx/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac index a9cb69e7d3..f97f5ac72d 100644 --- a/target/linux/ar71xx/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac +++ b/target/linux/ar71xx/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac @@ -17,7 +17,7 @@ case "$board" in archer-c59-v2|\ archer-c60-v1|\ archer-c60-v2) - echo $(macaddr_add $(mtd_get_mac_binary mac 8) $(($PHYNBR - 1)) ) > /sys${DEVPATH}/macaddress + echo $(macaddr_add $(mtd_get_mac_binary mac 0x8) $(($PHYNBR - 1)) ) > /sys${DEVPATH}/macaddress ;; tl-wdr6500-v6) echo $(macaddr_add $(mtd_get_mac_binary art 2061) $(($PHYNBR - 2)) ) > /sys${DEVPATH}/macaddress @@ -25,4 +25,3 @@ case "$board" in *) ;; esac - diff --git a/target/linux/ar71xx/base-files/etc/hotplug.d/net/10-ar922x-led-fix b/target/linux/ar71xx/base-files/etc/hotplug.d/net/10-ar922x-led-fix index c41d4b08f6..bd1abb9681 100644 --- a/target/linux/ar71xx/base-files/etc/hotplug.d/net/10-ar922x-led-fix +++ b/target/linux/ar71xx/base-files/etc/hotplug.d/net/10-ar922x-led-fix @@ -12,6 +12,9 @@ devdir=$(dirname $DEVPATH) devdir=$(dirname $devdir) phydir=/sys$devdir/ieee80211 + +[ -d $phydir ] || exit 0 + phyname=$(cat $phydir/phy*/name) [ -z $phyname -o $ACTION != "add" ] && exit 0 diff --git a/target/linux/ar71xx/base-files/lib/preinit/05_set_iface_mac_ar71xx b/target/linux/ar71xx/base-files/lib/preinit/05_set_iface_mac_ar71xx index de45a817e1..6fba60777e 100644 --- a/target/linux/ar71xx/base-files/lib/preinit/05_set_iface_mac_ar71xx +++ b/target/linux/ar71xx/base-files/lib/preinit/05_set_iface_mac_ar71xx @@ -24,7 +24,7 @@ preinit_set_mac_address() { case $(board_name) in c-55|\ c-60) - mac_lan=$(mtd_get_mac_binary art 0) + mac_lan=$(mtd_get_mac_binary art 0x0) [ -n "$mac_lan" ] && ifconfig eth0 hw ether "$mac_lan" ;; dir-615-c1|\ @@ -40,28 +40,28 @@ preinit_set_mac_address() { ;; mr18|\ z1) - mac_lan=$(mtd_get_mac_binary_ubi board-config 102) + mac_lan=$(mtd_get_mac_binary_ubi board-config 0x66) [ -n "$mac_lan" ] && ifconfig eth0 hw ether "$mac_lan" ;; r6100) - mac_lan=$(mtd_get_mac_binary caldata 0) + mac_lan=$(mtd_get_mac_binary caldata 0x0) [ -n "$mac_lan" ] && ifconfig eth1 hw ether "$mac_lan" - mac_wan=$(mtd_get_mac_binary caldata 6) + mac_wan=$(mtd_get_mac_binary caldata 0x6) [ -n "$mac_wan" ] && ifconfig eth0 hw ether "$mac_wan" ;; rambutan) - mac_lan=$(mtd_get_mac_binary art 0) + mac_lan=$(mtd_get_mac_binary art 0x0) [ -n "$mac_lan" ] && ifconfig eth0 hw ether "$mac_lan" - mac_wan=$(mtd_get_mac_binary art 6) + mac_wan=$(mtd_get_mac_binary art 0x6) [ -n "$mac_wan" ] && ifconfig eth1 hw ether "$mac_wan" ;; wrt160nl) fetch_mac_from_mtd nvram lan_hwaddr wan_hwaddr ;; sbr-ac1750) - mac_lan=$(mtd_get_mac_binary ft 0) + mac_lan=$(mtd_get_mac_binary ft 0x0) [ -n "$mac_lan" ] && ifconfig eth1 hw ether "$mac_lan" - mac_wan=$(mtd_get_mac_binary ft 18) + mac_wan=$(mtd_get_mac_binary ft 0x12) [ -n "$mac_wan" ] && ifconfig eth0 hw ether "$mac_wan" ;; esac diff --git a/target/linux/ipq40xx/base-files/etc/board.d/01_leds b/target/linux/ipq40xx/base-files/etc/board.d/01_leds index da794ae030..fb18db950e 100755 --- a/target/linux/ipq40xx/base-files/etc/board.d/01_leds +++ b/target/linux/ipq40xx/base-files/etc/board.d/01_leds @@ -11,11 +11,6 @@ board=$(board_name) boardname="${board##*,}" case "$board" in -p2w,r619ac |\ -p2w,r619ac-128m) - ucidef_set_led_wlan "wlan2g" "WLAN2G" "r619ac:blue:wlan2g" "phy0tpt" - ucidef_set_led_wlan "wlan5g" "WLAN5G" "r619ac:blue:wlan5g" "phy1tpt" - ;; asus,rt-ac58u) ucidef_set_led_wlan "wlan2g" "WLAN2G" "${boardname}:blue:wlan2G" "phy0tpt" ucidef_set_led_wlan "wlan5g" "WLAN5G" "${boardname}:blue:wlan5G" "phy1tpt" @@ -46,15 +41,20 @@ engenius,eap1300) glinet,gl-b1300) ucidef_set_led_wlan "wlan" "WLAN" "${boardname}:green:wlan" "phy0tpt" ;; +hugo,ac1200) + ucidef_set_led_default "green" "GREEN" "${boardname}:green:ctrl1" "1" + ucidef_set_led_default "red" "RED" "${boardname}:red:ctrl2" "1" + ucidef_set_led_default "blue" "BLUE" "${boardname}:blue:ctrl3" "1" + ;; netgear,ex6100v2 |\ netgear,ex6150v2) ucidef_set_led_wlan "wlan2g" "WLAN2G" "ex61x0v2:green:router" "phy0tpt" ucidef_set_led_wlan "wlan5g" "WLAN5G" "ex61x0v2:green:client" "phy1tpt" ;; -hugo,ac1200) - ucidef_set_led_default "green" "GREEN" "${boardname}:green:ctrl1" "1" - ucidef_set_led_default "red" "RED" "${boardname}:red:ctrl2" "1" - ucidef_set_led_default "blue" "BLUE" "${boardname}:blue:ctrl3" "1" +p2w,r619ac |\ +p2w,r619ac-128m) + ucidef_set_led_wlan "wlan2g" "WLAN2G" "r619ac:blue:wlan2g" "phy0tpt" + ucidef_set_led_wlan "wlan5g" "WLAN5G" "r619ac:blue:wlan5g" "phy1tpt" ;; zyxel,nbg6617) ucidef_set_led_wlan "wlan2g" "WLAN2G" "${boardname}:green:wlan2G" "phy0tpt" diff --git a/target/linux/ipq40xx/base-files/etc/board.d/02_network b/target/linux/ipq40xx/base-files/etc/board.d/02_network index f51be5a8ff..8518f20325 100755 --- a/target/linux/ipq40xx/base-files/etc/board.d/02_network +++ b/target/linux/ipq40xx/base-files/etc/board.d/02_network @@ -16,24 +16,20 @@ ipq40xx_setup_interfaces() ucidef_add_switch "switch0" \ "0t@eth0" "4:lan" "5:wan" ;; - p2w,r619ac|\ - p2w,r619ac-128m|\ - zyxel,nbg6617) - ucidef_add_switch "switch0" \ - "0t@eth0" "1:lan:4" "2:lan:3" "3:lan:2" "4:lan:1" "5:wan:5" - ;; asus,map-ac2200|\ openmesh,a42|\ openmesh,a62) ucidef_add_switch "switch0" \ "0t@eth0" "5:lan" "4:wan" ;; - hugo,ac1200) + asus,rt-ac58u|\ + p2w,r619ac|\ + p2w,r619ac-128m|\ + zyxel,nbg6617) ucidef_add_switch "switch0" \ - "0t@eth0" "5:wan" "3:lan" + "0t@eth0" "1:lan:4" "2:lan:3" "3:lan:2" "4:lan:1" "5:wan" ;; asus,rt-acrh17|\ - asus,rt-ac58u|\ avm,fritzbox-4040|\ linksys,ea6350v3) ucidef_add_switch "switch0" \ @@ -53,6 +49,10 @@ ipq40xx_setup_interfaces() ucidef_add_switch "switch0" \ "0t@eth0" "3:lan" "4:lan" "5:wan" ;; + hugo,ac1200) + ucidef_add_switch "switch0" \ + "0t@eth0" "5:wan" "3:lan" + ;; *) echo "Unsupported hardware. Network interfaces not initialized" ;; @@ -62,6 +62,9 @@ ipq40xx_setup_interfaces() ipq40xx_setup_macs() { local board="$1" + local lan_mac="" + local wan_mac="" + local label_mac="" case "$board" in asus,rt-acrh17|\ @@ -81,8 +84,9 @@ ipq40xx_setup_macs() ;; esac - [ -n "$lan_mac" ] && ucidef_set_interface_macaddr "lan" $lan_mac - [ -n "$wan_mac" ] && ucidef_set_interface_macaddr "wan" $wan_mac + [ -n "$lan_mac" ] && ucidef_set_interface_macaddr "lan" $lan_mac + [ -n "$wan_mac" ] && ucidef_set_interface_macaddr "wan" $wan_mac + [ -n "$label_mac" ] && ucidef_set_label_macaddr $label_mac } board_config_update diff --git a/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata b/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata index 64b5a1477c..142c3b82ba 100644 --- a/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata +++ b/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata @@ -1,126 +1,38 @@ #!/bin/sh -# xor multiple hex values of the same length -xor() { - local val - local ret="0x$1" - local retlen=${#1} - - shift - while [ -n "$1" ]; do - val="0x$1" - ret=$((ret ^ val)) - shift - done - - printf "%0${retlen}x" "$ret" -} - -ath10kcal_die() { - echo "ath10cal: " "$*" - exit 1 -} - -ath10kcal_extract() { - local part=$1 - local offset=$2 - local count=$3 - local mtd - - mtd=$(find_mtd_chardev $part) - [ -n "$mtd" ] || \ - ath10kcal_die "no mtd device found for partition $part" - - dd if=$mtd of=/lib/firmware/$FIRMWARE iflag=skip_bytes bs=$count skip=$offset count=1 2>/dev/null || \ - ath10kcal_die "failed to extract calibration data from $mtd" -} - -ath10kcal_ubi_extract() { - local part=$1 - local offset=$2 - local count=$3 - local ubidev - local ubi - - . /lib/upgrade/nand.sh - - ubidev=$(nand_find_ubi $CI_UBIPART) - ubi=$(nand_find_volume $ubidev $part) - [ -n "$ubi" ] || \ - ath10kcal_die "no UBI volume found for $part" - - dd if=/dev/$ubi of=/lib/firmware/$FIRMWARE iflag=skip_bytes bs=$count skip=$offset count=1 2>/dev/null || \ - ath10kcal_die "failed to extract from $ubi" -} - -ath10kcal_patch_mac_crc() { - local mac=$1 - local mac_offset=6 - local chksum_offset=2 - local xor_mac - local xor_fw_mac - local xor_fw_chksum - - [ -z "$mac" ] && return - - xor_fw_mac=$(hexdump -v -n 6 -s $mac_offset -e '/1 "%02x"' /lib/firmware/$FIRMWARE) - xor_fw_mac="${xor_fw_mac:0:4} ${xor_fw_mac:4:4} ${xor_fw_mac:8:4}" - - macaddr_2bin $mac | dd of=/lib/firmware/$FIRMWARE conv=notrunc bs=1 seek=6 count=6 - - xor_mac=${mac//:/} - xor_mac="${xor_mac:0:4} ${xor_mac:4:4} ${xor_mac:8:4}" - - xor_fw_chksum=$(hexdump -v -n 2 -s $chksum_offset -e '/1 "%02x"' /lib/firmware/$FIRMWARE) - xor_fw_chksum=$(xor $xor_fw_chksum $xor_fw_mac $xor_mac) - - printf "%b" "\x${xor_fw_chksum:0:2}\x${xor_fw_chksum:2:2}" | \ - dd of=/lib/firmware/$FIRMWARE conv=notrunc bs=1 seek=$chksum_offset count=2 -} - -ath10kcal_is_caldata_valid() { - local expected="$1" - - magic=$(hexdump -v -n 2 -e '1/1 "%02x"' /lib/firmware/$FIRMWARE) - [[ "$magic" == "$expected" ]] - return $? -} - [ -e /lib/firmware/$FIRMWARE ] && exit 0 -. /lib/functions.sh -. /lib/functions/system.sh +. /lib/functions/caldata.sh board=$(board_name) - case "$FIRMWARE" in "ath10k/cal-pci-0000:01:00.0.bin") case "$board" in meraki,mr33) - ath10kcal_ubi_extract "ART" 36864 2116 - ath10kcal_is_caldata_valid "4408" || ath10kcal_extract "ART" 36864 2116 - ath10kcal_patch_mac_crc $(macaddr_add $(get_mac_binary "/sys/bus/i2c/devices/0-0050/eeprom" 102) +1) + caldata_extract_ubi "ART" 0x9000 0x844 + caldata_valid "4408" || caldata_extract "ART" 0x9000 0x844 + ath10k_patch_mac $(macaddr_add $(get_mac_binary "/sys/bus/i2c/devices/0-0050/eeprom" 0x66) +1) ;; esac ;; "ath10k/pre-cal-pci-0000:01:00.0.bin") case "$board" in asus,map-ac2200) - ath10kcal_ubi_extract "Factory" 36864 12064 + caldata_extract_ubi "Factory" 0x9000 0x2f20 ln -sf /lib/firmware/ath10k/pre-cal-pci-0000\:00\:00.0.bin \ /lib/firmware/ath10k/QCA9888/hw2.0/board.bin ;; asus,rt-acrh17) CI_UBIPART=UBI_DEV - ath10kcal_ubi_extract "Factory" 36864 12064 + caldata_extract_ubi "Factory" 0x9000 0x2f20 ;; openmesh,a62) - ath10kcal_extract "0:ART" 36864 12064 + caldata_extract "0:ART" 0x9000 0x2f20 ;; p2w,r619ac |\ p2w,r619ac-128m) - ath10kcal_extract "ART" 36864 12064 + caldata_extract "ART" 0x9000 0x2f20 ;; esac ;; @@ -132,40 +44,40 @@ case "$FIRMWARE" in p2w,r619ac |\ p2w,r619ac-128m |\ qcom,ap-dk01.1-c1) - ath10kcal_extract "ART" 4096 12064 + caldata_extract "ART" 0x1000 0x2f20 ;; asus,map-ac2200) - ath10kcal_ubi_extract "Factory" 4096 12064 + caldata_extract_ubi "Factory" 0x1000 0x2f20 ;; asus,rt-acrh17|\ asus,rt-ac58u) CI_UBIPART=UBI_DEV - ath10kcal_ubi_extract "Factory" 4096 12064 + caldata_extract_ubi "Factory" 0x1000 0x2f20 ;; avm,fritzbox-4040) /usr/bin/fritz_cal_extract -i 1 -s 0x400 -e 0x207 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader_config") ;; - meraki,mr33) - ath10kcal_ubi_extract "ART" 4096 12064 - ath10kcal_is_caldata_valid "202f" || ath10kcal_extract "ART" 4096 12064 - ath10kcal_patch_mac_crc $(macaddr_add $(get_mac_binary "/sys/bus/i2c/devices/0-0050/eeprom" 102) +2) - ;; - netgear,ex6100v2 |\ - netgear,ex6150v2) - ath10kcal_extract "ART" 4096 12064 - ath10kcal_patch_mac_crc $(mtd_get_mac_binary dnidata 0) - ;; compex,wpj428 |\ engenius,eap1300 |\ hugo,ac1200 |\ openmesh,a42 |\ openmesh,a62) - ath10kcal_extract "0:ART" 4096 12064 + caldata_extract "0:ART" 0x1000 0x2f20 + ;; + meraki,mr33) + caldata_extract_ubi "ART" 0x1000 0x2f20 + caldata_valid "202f" || caldata_extract 0x1000 0x2f20 + ath10k_patch_mac $(macaddr_add $(get_mac_binary "/sys/bus/i2c/devices/0-0050/eeprom" 0x66) +2) + ;; + netgear,ex6100v2 |\ + netgear,ex6150v2) + caldata_extract "ART" 0x1000 0x2f20 + ath10k_patch_mac $(mtd_get_mac_binary dnidata 0x0) ;; zyxel,nbg6617 |\ zyxel,wre6606) - ath10kcal_extract "ART" 4096 12064 - ath10kcal_patch_mac_crc $(macaddr_add $(cat /sys/class/net/eth0/address) -2) + caldata_extract "ART" 0x1000 0x2f20 + ath10k_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) -2) ;; esac ;; @@ -177,39 +89,39 @@ case "$FIRMWARE" in p2w,r619ac |\ p2w,r619ac-128m |\ qcom,ap-dk01.1-c1) - ath10kcal_extract "ART" 20480 12064 + caldata_extract "ART" 0x5000 0x2f20 ;; asus,map-ac2200) - ath10kcal_ubi_extract "Factory" 20480 12064 + caldata_extract "Factory" 0x5000 0x2f20 ;; asus,rt-ac58u) CI_UBIPART=UBI_DEV - ath10kcal_ubi_extract "Factory" 20480 12064 + caldata_extract_ubi "Factory" 0x5000 0x2f20 ;; avm,fritzbox-4040) /usr/bin/fritz_cal_extract -i 1 -s 0x400 -e 0x208 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader_config") ;; - meraki,mr33) - ath10kcal_ubi_extract "ART" 20480 12064 - ath10kcal_is_caldata_valid "202f" || ath10kcal_extract "ART" 20480 12064 - ath10kcal_patch_mac_crc $(macaddr_add $(get_mac_binary "/sys/bus/i2c/devices/0-0050/eeprom" 102) +3) - ;; - netgear,ex6100v2 |\ - netgear,ex6150v2) - ath10kcal_extract "ART" 20480 12064 - ath10kcal_patch_mac_crc $(mtd_get_mac_binary dnidata 12) - ;; compex,wpj428 |\ engenius,eap1300 |\ hugo,ac1200 |\ openmesh,a42 |\ openmesh,a62) - ath10kcal_extract "0:ART" 20480 12064 + caldata_extract "0:ART" 0x5000 0x2f20 + ;; + meraki,mr33) + caldata_extract_ubi "ART" 0x5000 0x2f20 + caldata_valid "202f" || caldata_extract "ART" 0x5000 0x2f20 + ath10k_patch_mac $(macaddr_add $(get_mac_binary "/sys/bus/i2c/devices/0-0050/eeprom" 0x66) +3) + ;; + netgear,ex6100v2 |\ + netgear,ex6150v2) + caldata_extract "ART" 0x5000 0x2f20 + ath10k_patch_mac $(mtd_get_mac_binary dnidata 0xc) ;; zyxel,nbg6617 |\ zyxel,wre6606) - ath10kcal_extract "ART" 20480 12064 - ath10kcal_patch_mac_crc $(macaddr_add $(cat /sys/class/net/eth0/address) -1) + caldata_extract "ART" 0x5000 0x2f20 + ath10k_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) -1) ;; esac ;; diff --git a/target/linux/ipq40xx/base-files/lib/preinit/05_set_iface_mac_ipq40xx.sh b/target/linux/ipq40xx/base-files/lib/preinit/05_set_iface_mac_ipq40xx.sh index 44dc510a0f..4ca7cbff5d 100644 --- a/target/linux/ipq40xx/base-files/lib/preinit/05_set_iface_mac_ipq40xx.sh +++ b/target/linux/ipq40xx/base-files/lib/preinit/05_set_iface_mac_ipq40xx.sh @@ -5,23 +5,24 @@ preinit_set_mac_address() { case $(board_name) in asus,map-ac2200) - base_mac=$(mtd_get_mac_binary_ubi Factory 4102) + base_mac=$(mtd_get_mac_binary_ubi Factory 0x1006) ip link set dev eth0 address $(macaddr_add "$base_mac" +1) ip link set dev eth1 address $(macaddr_add "$base_mac" +3) ;; asus,rt-acrh17|\ asus,rt-ac58u) CI_UBIPART=UBI_DEV - mac=$(macaddr_add $(mtd_get_mac_binary_ubi Factory 4102) +1) + mac=$(macaddr_add $(mtd_get_mac_binary_ubi Factory 0x1006) +1) ifconfig eth0 hw ether $mac 2>/dev/null ;; meraki,mr33) - mac_lan=$(get_mac_binary "/sys/bus/i2c/devices/0-0050/eeprom" 102) + mac_lan=$(get_mac_binary "/sys/bus/i2c/devices/0-0050/eeprom" 0x66) [ -n "$mac_lan" ] && ip link set dev eth0 address "$mac_lan" ;; zyxel,nbg6617) base_mac=$(cat /sys/class/net/eth0/address) ip link set dev eth0 address $(macaddr_add "$base_mac" +2) + ip link set dev eth1 address $(macaddr_add "$base_mac" +3) ;; esac } diff --git a/target/linux/ipq40xx/image/Makefile b/target/linux/ipq40xx/image/Makefile index 54d0ee1470..1537400d77 100644 --- a/target/linux/ipq40xx/image/Makefile +++ b/target/linux/ipq40xx/image/Makefile @@ -165,6 +165,19 @@ define Device/glinet_gl-b1300 endef TARGET_DEVICES += glinet_gl-b1300 +define Device/hugo_ac1200 + $(call Device/FitImage) + DEVICE_TITLE := Hugo AC1200 + BOARD_NAME := hugo_ac1200 + DEVICE_DTS := qcom-ipq4019-hugo-ac1200 + KERNEL_SIZE := 4096k + IMAGE_SIZE := 31232k + IMAGES := sysupgrade.bin + IMAGE/sysupgrade.bin := append-kernel | append-rootfs | pad-rootfs | append-metadata + DEVICE_PACKAGES := ipq-wifi-hugo_ac1200 +endef +TARGET_DEVICES += hugo_ac1200 + define Device/linksys_ea6350v3 # The Linksys EA6350v3 has a uboot bootloader that does not # support either booting lzma kernel images nor booting UBI @@ -260,22 +273,8 @@ define Device/openmesh_a62 IMAGE/sysupgrade.bin/squashfs := append-rootfs | pad-rootfs | sysupgrade-tar rootfs=$$$$@ | append-metadata DEVICE_PACKAGES := ath10k-firmware-qca9888-ct uboot-envtools endef - TARGET_DEVICES += openmesh_a62 -define Device/qcom_ap-dk01.1-c1 - DEVICE_TITLE := QCA AP-DK01.1-C1 - BOARD_NAME := ap-dk01.1-c1 - DEVICE_DTS := qcom-ipq4019-ap.dk01.1-c1 - KERNEL_INSTALL := 1 - KERNEL_SIZE := 4096k - IMAGE_SIZE := 26624k - $(call Device/FitImage) - IMAGES := sysupgrade.bin - IMAGE/sysupgrade.bin := append-kernel | pad-to $$$${KERNEL_SIZE} | append-rootfs | pad-rootfs | append-metadata -endef -TARGET_DEVICES += qcom_ap-dk01.1-c1 - define Device/p2w_r619ac $(call Device/FitzImage) $(call Device/UbiFit) @@ -305,6 +304,19 @@ define Device/p2w_r619ac-128m endef TARGET_DEVICES += p2w_r619ac-128m +define Device/qcom_ap-dk01.1-c1 + DEVICE_TITLE := QCA AP-DK01.1-C1 + BOARD_NAME := ap-dk01.1-c1 + DEVICE_DTS := qcom-ipq4019-ap.dk01.1-c1 + KERNEL_INSTALL := 1 + KERNEL_SIZE := 4096k + IMAGE_SIZE := 26624k + $(call Device/FitImage) + IMAGES := sysupgrade.bin + IMAGE/sysupgrade.bin := append-kernel | pad-to $$$${KERNEL_SIZE} | append-rootfs | pad-rootfs | append-metadata +endef +TARGET_DEVICES += qcom_ap-dk01.1-c1 + define Device/qcom_ap-dk04.1-c1 $(call Device/FitImage) $(call Device/UbiFit) @@ -318,19 +330,6 @@ define Device/qcom_ap-dk04.1-c1 endef TARGET_DEVICES += qcom_ap-dk04.1-c1 -define Device/hugo_ac1200 - $(call Device/FitImage) - DEVICE_TITLE := Hugo AC1200 - BOARD_NAME := hugo_ac1200 - DEVICE_DTS := qcom-ipq4019-hugo-ac1200 - KERNEL_SIZE := 4096k - IMAGE_SIZE := 31232k - IMAGES := sysupgrade.bin - IMAGE/sysupgrade.bin := append-kernel | append-rootfs | pad-rootfs | append-metadata - DEVICE_PACKAGES := ipq-wifi-hugo_ac1200 -endef -TARGET_DEVICES += hugo_ac1200 - define Device/zyxel_nbg6617 $(call Device/FitImageLzma) DEVICE_DTS := qcom-ipq4018-nbg6617 diff --git a/target/linux/ipq806x/base-files/etc/hotplug.d/firmware/11-ath10k-caldata b/target/linux/ipq806x/base-files/etc/hotplug.d/firmware/11-ath10k-caldata index e05f2b2c7b..6013bb100c 100644 --- a/target/linux/ipq806x/base-files/etc/hotplug.d/firmware/11-ath10k-caldata +++ b/target/linux/ipq806x/base-files/etc/hotplug.d/firmware/11-ath10k-caldata @@ -1,78 +1,8 @@ #!/bin/sh -# xor multiple hex values of the same length -xor() { - local val - local ret="0x$1" - local retlen=${#1} - - shift - while [ -n "$1" ]; do - val="0x$1" - ret=$((ret ^ val)) - shift - done - - printf "%0${retlen}x" "$ret" -} - -ath10kcal_die() { - echo "ath10cal: " "$*" - exit 1 -} - -ath10kcal_from_file() { - local source=$1 - local offset=$2 - local count=$3 - - dd if=$source of=/lib/firmware/$FIRMWARE bs=1 skip=$offset count=$count 2>/dev/null || \ - ath10kcal_die "failed to extract calibration data from $source" -} - -ath10kcal_extract() { - local part=$1 - local offset=$2 - local count=$3 - local mtd - - mtd=$(find_mtd_chardev $part) - [ -n "$mtd" ] || \ - ath10kcal_die "no mtd device found for partition $part" - - dd if=$mtd of=/lib/firmware/$FIRMWARE bs=1 skip=$offset count=$count 2>/dev/null || \ - ath10kcal_die "failed to extract calibration data from $mtd" -} - -ath10kcal_patch_mac_crc() { - local mac=$1 - local mac_offset=6 - local chksum_offset=2 - local xor_mac - local xor_fw_mac - local xor_fw_chksum - - [ -z "$mac" ] && return - - xor_fw_mac=$(hexdump -v -n 6 -s $mac_offset -e '/1 "%02x"' /lib/firmware/$FIRMWARE) - xor_fw_mac="${xor_fw_mac:0:4} ${xor_fw_mac:4:4} ${xor_fw_mac:8:4}" - - macaddr_2bin $mac | dd of=/lib/firmware/$FIRMWARE conv=notrunc bs=1 seek=6 count=6 - - xor_mac=${mac//:/} - xor_mac="${xor_mac:0:4} ${xor_mac:4:4} ${xor_mac:8:4}" - - xor_fw_chksum=$(hexdump -v -n 2 -s $chksum_offset -e '/1 "%02x"' /lib/firmware/$FIRMWARE) - xor_fw_chksum=$(xor $xor_fw_chksum $xor_fw_mac $xor_mac) - - printf "%b" "\x${xor_fw_chksum:0:2}\x${xor_fw_chksum:2:2}" | \ - dd of=/lib/firmware/$FIRMWARE conv=notrunc bs=1 seek=$chksum_offset count=2 -} - [ -e /lib/firmware/$FIRMWARE ] && exit 0 -. /lib/functions.sh -. /lib/functions/system.sh +. /lib/functions/caldata.sh board=$(board_name) @@ -80,68 +10,68 @@ case "$FIRMWARE" in "ath10k/pre-cal-pci-0000:01:00.0.bin") case $board in buffalo,wxr-2533dhp) - ath10kcal_extract "ART" 4096 12064 - ath10kcal_patch_mac_crc $(mtd_get_mac_binary ART 30) + caldata_extract "ART" 0x1000 0x2f20 + ath10k_patch_mac $(mtd_get_mac_binary ART 0x1e) ;; linksys,ea8500) - ath10kcal_extract "art" 4096 12064 - ath10kcal_patch_mac_crc $(macaddr_add $(mtd_get_mac_ascii devinfo hw_mac_addr) +1) + caldata_extract "art" 0x1000 0x2f20 + ath10k_patch_mac $(macaddr_add $(mtd_get_mac_ascii devinfo hw_mac_addr) +1) ;; nec,wg2600hp) - ath10kcal_extract "ART" 4096 12064 - ath10kcal_patch_mac_crc $(macaddr_add $(mtd_get_mac_binary PRODUCTDATA 12) +1) + caldata_extract "ART" 0x1000 0x2f20 + ath10k_patch_mac $(macaddr_add $(mtd_get_mac_binary PRODUCTDATA 0xc) +1) ;; netgear,d7800 |\ netgear,r7500v2 |\ netgear,r7800) - ath10kcal_extract "art" 4096 12064 - ath10kcal_patch_mac_crc $(macaddr_add $(mtd_get_mac_binary art 6) +1) + caldata_extract "art" 0x1000 0x2f20 + ath10k_patch_mac $(macaddr_add $(mtd_get_mac_binary art 0x6) +1) ;; tplink,c2600) - ath10kcal_extract "radio" 4096 12064 - ath10kcal_patch_mac_crc $(macaddr_add $(mtd_get_mac_binary default-mac 8) -1) + caldata_extract "radio" 0x1000 0x2f20 + ath10k_patch_mac $(macaddr_add $(mtd_get_mac_binary default-mac 0x8) -1) ;; tplink,vr2600v) - ath10kcal_extract "ART" 4096 12064 - ath10kcal_patch_mac_crc $(macaddr_add $(mtd_get_mac_binary default-mac 0) -1) + caldata_extract "ART" 0x1000 0x2f20 + ath10k_patch_mac $(macaddr_add $(mtd_get_mac_binary default-mac 0x0) -1) ;; zyxel,nbg6817) - ath10kcal_extract "0:ART" 4096 12064 - ath10kcal_patch_mac_crc $(macaddr_add $(mtd_get_mac_ascii 0:APPSBLENV ethaddr) +1) + caldata_extract "0:ART" 0x1000 0x2f20 + ath10k_patch_mac $(macaddr_add $(mtd_get_mac_ascii 0:APPSBLENV ethaddr) +1) ;; esac ;; "ath10k/pre-cal-pci-0001:01:00.0.bin") case $board in buffalo,wxr-2533dhp) - ath10kcal_extract "ART" 20480 12064 - ath10kcal_patch_mac_crc $(mtd_get_mac_binary ART 24) + caldata_extract "ART" 0x5000 0x2f20 + ath10k_patch_mac $(mtd_get_mac_binary ART 0x18) ;; linksys,ea8500) - ath10kcal_extract "art" 20480 12064 - ath10kcal_patch_mac_crc $(macaddr_add $(mtd_get_mac_ascii devinfo hw_mac_addr) +2) + caldata_extract "art" 0x5000 0x2f20 + ath10k_patch_mac $(macaddr_add $(mtd_get_mac_ascii devinfo hw_mac_addr) +2) ;; nec,wg2600hp) - ath10kcal_extract "ART" 20480 12064 - ath10kcal_patch_mac_crc $(mtd_get_mac_binary PRODUCTDATA 12) + caldata_extract "ART" 0x5000 0x2f20 + ath10k_patch_mac $(mtd_get_mac_binary PRODUCTDATA 0xc) ;; netgear,d7800 |\ netgear,r7500v2 |\ netgear,r7800) - ath10kcal_extract "art" 20480 12064 - ath10kcal_patch_mac_crc $(macaddr_add $(mtd_get_mac_binary art 6) +2) + caldata_extract "art" 0x5000 0x2f20 + ath10k_patch_mac $(macaddr_add $(mtd_get_mac_binary art 0x6) +2) ;; tplink,c2600) - ath10kcal_extract "radio" 20480 12064 - ath10kcal_patch_mac_crc $(mtd_get_mac_binary default-mac 8) + caldata_extract "radio" 0x5000 0x2f20 + ath10k_patch_mac $(mtd_get_mac_binary default-mac 0x8) ;; tplink,vr2600v) - ath10kcal_extract "ART" 20480 12064 - ath10kcal_patch_mac_crc $(mtd_get_mac_binary default-mac 0) + caldata_extract "ART" 0x5000 0x2f20 + ath10k_patch_mac $(mtd_get_mac_binary default-mac 0x0) ;; zyxel,nbg6817) - ath10kcal_extract "0:ART" 20480 12064 - ath10kcal_patch_mac_crc $(mtd_get_mac_ascii 0:APPSBLENV ethaddr) + caldata_extract "0:ART" 0x5000 0x2f20 + ath10k_patch_mac $(mtd_get_mac_ascii 0:APPSBLENV ethaddr) ;; esac ;; diff --git a/target/linux/ixp4xx/base-files/lib/preinit/05_set_ether_mac_ixp4xx b/target/linux/ixp4xx/base-files/lib/preinit/05_set_ether_mac_ixp4xx index adda197b59..da7dd9d75d 100644 --- a/target/linux/ixp4xx/base-files/lib/preinit/05_set_ether_mac_ixp4xx +++ b/target/linux/ixp4xx/base-files/lib/preinit/05_set_ether_mac_ixp4xx @@ -29,4 +29,3 @@ set_ether_mac() { } boot_hook_add preinit_main set_ether_mac - diff --git a/target/linux/lantiq/base-files/etc/hotplug.d/firmware/11-ath10k-caldata b/target/linux/lantiq/base-files/etc/hotplug.d/firmware/11-ath10k-caldata index 6b4d09dd33..0b48b77d41 100644 --- a/target/linux/lantiq/base-files/etc/hotplug.d/firmware/11-ath10k-caldata +++ b/target/linux/lantiq/base-files/etc/hotplug.d/firmware/11-ath10k-caldata @@ -3,47 +3,18 @@ [ -e /lib/firmware/$FIRMWARE ] && exit 0 -. /lib/functions.sh -. /lib/functions/system.sh -. /lib/upgrade/nand.sh - -ath10k_caldata_die() { - echo "ath10k caldata: " "$*" - exit 1 -} - -ath10k_caldata_extract_ubi() { - local part=$1 - local offset=$2 - local count=$3 - local ubidev=$(nand_find_ubi $CI_UBIPART) - local ubi - - ubi=$(nand_find_volume $ubidev $part) - [ -n "$ubi" ] || \ - ath10k_caldata_die "no UBI volume found for $part" - - dd if=/dev/$ubi of=/lib/firmware/$FIRMWARE bs=1 skip=$offset count=$count 2>/dev/null || \ - ath10k_caldata_die "failed to extract from $ubi" -} - -ath10k_caldata_set_macaddr() { - local macaddr=$1 - - macaddr_2bin $macaddr | dd of=/lib/firmware/$FIRMWARE \ - conv=notrunc bs=1 seek=6 count=6 -} +. /lib/functions/caldata.sh case "$FIRMWARE" in "ath10k/cal-pci-0000:02:00.0.bin") board=$(board_name) case $board in bt,homehub-v5a) - ath10k_caldata_extract_ubi "caldata" 20480 2116 - ath10k_caldata_set_macaddr $(macaddr_add $(mtd_get_mac_binary_ubi caldata 4364) +3) + caldata_extract_ubi "caldata" 0x5000 0x844 + ath10k_patch_mac $(macaddr_add $(mtd_get_mac_binary_ubi caldata 0x110c) +3) ;; *) - ath10k_caldata_die "board $board is not supported yet" + caldata_die "board $board is not supported yet" ;; esac ;; diff --git a/target/linux/lantiq/base-files/etc/hotplug.d/firmware/12-ath9k-eeprom b/target/linux/lantiq/base-files/etc/hotplug.d/firmware/12-ath9k-eeprom index 6ae5e3cfe9..5a6e8d360b 100644 --- a/target/linux/lantiq/base-files/etc/hotplug.d/firmware/12-ath9k-eeprom +++ b/target/linux/lantiq/base-files/etc/hotplug.d/firmware/12-ath9k-eeprom @@ -1,130 +1,23 @@ #!/bin/sh -# Based on ar71xx 10-ath9k-eeprom [ -e /lib/firmware/$FIRMWARE ] && exit 0 -. /lib/functions.sh -. /lib/functions/system.sh -. /lib/upgrade/nand.sh +. /lib/functions/caldata.sh -# xor multiple hex values of the same length -xor() { - local val - local ret="0x$1" - local retlen=${#1} - - shift - while [ -n "$1" ]; do - val="0x$1" - ret=$((ret ^ val)) - shift - done - - printf "%0${retlen}x" "$ret" -} - -ath9k_eeprom_die() { - echo "ath9k eeprom: $*" - exit 1 -} - -ath9k_eeprom_extract_raw() { - local source=$1 - local offset=$2 - local swap=$3 - local size=4096 - local bs=1 - local conv= - - if [ $swap -gt 0 ]; then - bs=2 - conv="conv=swab" - size=$((size / bs)) - offset=$((offset / bs)) - fi - - dd if=$source of=/lib/firmware/$FIRMWARE bs=$bs skip=$offset count=$size $conv 2>/dev/null || \ - ath9k_eeprom_die "failed to extract from $mtd" -} - -ath9k_eeprom_extract_reverse() { +caldata_extract_swap() { local part=$1 local offset=$2 local count=$3 local mtd - local reversed - local caldata - - mtd=$(find_mtd_chardev "$part") - reversed=$(hexdump -v -s $offset -n $count -e '/1 "%02x "' $mtd) - - for byte in $reversed; do - caldata="\x${byte}${caldata}" - done - - printf "%b" "$caldata" > /lib/firmware/$FIRMWARE -} - -ath9k_eeprom_extract() { - local part=$1 - local offset=$2 - local swap=$3 - local mtd mtd=$(find_mtd_chardev $part) - [ -n "$mtd" ] || \ - ath9k_eeprom_die "no mtd device found for partition $part" + [ -n "$mtd" ] || caldata_die "no mtd device found for partition $part" - ath9k_eeprom_extract_raw $mtd $offset $swap -} + offset=$(($offset / 2)) + count=$(($count / 2)) -ath9k_ubi_eeprom_extract() { - local part=$1 - local offset=$2 - local swap=$3 - local ubidev=$(nand_find_ubi $CI_UBIPART) - local ubi - - ubi=$(nand_find_volume $ubidev $part) - [ -n "$ubi" ] || \ - ath9k_eeprom_die "no UBI volume found for $part" - - ath9k_eeprom_extract_raw /dev/$ubi $offset $swap -} - -ath9k_patch_fw_mac_crc() { - local mac=$1 - local mac_offset=$2 - local chksum_offset=$((mac_offset - 10)) - - ath9k_patch_fw_mac "${mac}" "${mac_offset}" "${chksum_offset}" -} - -ath9k_patch_fw_mac() { - local mac=$1 - local mac_offset=$2 - local chksum_offset=$3 - local xor_mac - local xor_fw_mac - local xor_fw_chksum - - [ -z "$mac" -o -z "$mac_offset" ] && return - - [ -n "$chksum_offset" ] && { - xor_mac=${mac//:/} - xor_mac="${xor_mac:0:4} ${xor_mac:4:4} ${xor_mac:8:4}" - - xor_fw_mac=$(hexdump -v -n 6 -s $mac_offset -e '/1 "%02x"' /lib/firmware/$FIRMWARE) - xor_fw_mac="${xor_fw_mac:0:4} ${xor_fw_mac:4:4} ${xor_fw_mac:8:4}" - - xor_fw_chksum=$(hexdump -v -n 2 -s $chksum_offset -e '/1 "%02x"' /lib/firmware/$FIRMWARE) - xor_fw_chksum=$(xor $xor_fw_chksum $xor_fw_mac $xor_mac) - - printf "%b" "\x${xor_fw_chksum:0:2}\x${xor_fw_chksum:2:2}" | \ - dd of=/lib/firmware/$FIRMWARE conv=notrunc bs=1 seek=$chksum_offset count=2 - } - - macaddr_2bin $mac | dd of=/lib/firmware/$FIRMWARE conv=notrunc bs=1 seek=$mac_offset count=6 + dd if=$mtd of=/lib/firmware/$FIRMWARE bs=2 skip=$offset count=$count conv=swab 2>/dev/null || \ + caldata_die "failed to extract calibration data from $mtd" } case "$FIRMWARE" in @@ -135,43 +28,43 @@ case "$FIRMWARE" in case "$board" in arcadyan,arv7518pw) - ath9k_eeprom_extract "boardconfig" 1024 1 + caldata_extract_swap "boardconfig" 0x400 0x1000 ;; arcadyan,arv8539pw22) - ath9k_eeprom_extract "art" 1024 1 + caldata_extract_swap "art" 0x400 0x1000 ;; bt,homehub-v2b) - ath9k_eeprom_extract "art" 0 1 - ath9k_patch_fw_mac_crc "00:00:00:00:00:00" 524 + caldata_extract_swap "art" 0x0 0x1000 + ath9k_patch_mac_crc "00:00:00:00:00:00" 0x20c ;; bt,homehub-v3a) - ath9k_eeprom_extract "art-copy" 0 1 - ath9k_patch_fw_mac_crc $(macaddr_add $(mtd_get_mac_ascii uboot_env ethaddr) +2) 268 + caldata_extract_swap "art-copy" 0x0 0x1000 + ath9k_patch_mac_crc $(macaddr_add $(mtd_get_mac_ascii uboot_env ethaddr) +2) 0x10c ;; bt,homehub-v5a) - ath9k_ubi_eeprom_extract "caldata" 4096 0 - ath9k_patch_fw_mac_crc $(macaddr_add $(mtd_get_mac_binary_ubi caldata 4364) +2) 268 + caldata_extract_ubi "caldata" 0x1000 0x1000 + ath9k_patch_mac_crc $(macaddr_add $(mtd_get_mac_binary_ubi caldata 0x110c) +2) 0x10c ;; netgear,dgn3500|netgear,dgn3500b) - ath9k_eeprom_extract "calibration" 61440 0 - ath9k_patch_fw_mac_crc $(macaddr_add $(mtd_get_mac_ascii uboot-env ethaddr) +2) 524 + caldata_extract "calibration" 0xf000 0x1000 + ath9k_patch_mac_crc $(macaddr_add $(mtd_get_mac_ascii uboot-env ethaddr) +2) 0x20c ;; avm,fritz3370-rev2-hynix|\ avm,fritz3370-rev2-micron|\ avm,fritz7362sl) - ath9k_eeprom_extract_reverse "urlader" 5441 1088 + caldata_extract_reverse "urlader" 0x1541 0x440 ;; avm,fritz7312|avm,fritz7320|avm,fritz7360sl) - ath9k_eeprom_extract "urlader" 2437 0 + caldata_extract "urlader" 0x985 0x1000 ;; avm,fritz7412) /usr/bin/fritz_cal_extract -i 1 -s 0x1e000 -e 0x207 -l 4096 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader") ;; tplink,tdw8970|tplink,tdw8980) - ath9k_eeprom_extract "boardconfig" 135168 0 + caldata_extract "boardconfig" 0x21000 0x1000 ;; *) - ath9k_eeprom_die "board $board is not supported yet" + caldata_die "board $board is not supported yet" ;; esac ;; diff --git a/target/linux/lantiq/base-files/etc/uci-defaults/01_led_migration b/target/linux/lantiq/base-files/etc/uci-defaults/01_led_migration index dc594e35e9..b1e7be6bd2 100644 --- a/target/linux/lantiq/base-files/etc/uci-defaults/01_led_migration +++ b/target/linux/lantiq/base-files/etc/uci-defaults/01_led_migration @@ -3,37 +3,7 @@ # Copyright (C) 2013 OpenWrt.org # -LED_OPTIONS_CHANGED=0 - -. /lib/functions.sh - -do_led_update_sysfs() -{ - local cfg=$1; shift - local tuples="$@" - local sysfs - local name - - config_get sysfs $cfg sysfs - config_get name $cfg name - - [ -z "$sysfs" ] && return - - for tuple in $tuples; do - local old=${tuple%=*} - local new=${tuple#*=} - local new_sysfs - - new_sysfs=$(echo ${sysfs} | sed "s/${old}/${new}/") - - [ "$new_sysfs" = "$sysfs" ] && continue - - uci set system.${cfg}.sysfs="${new_sysfs}" - LED_OPTIONS_CHANGED=1 - - logger -t led-migration "sysfs option of LED \"${name}\" updated to ${new_sysfs}" - done; -} +. /lib/functions/migrations.sh do_internet_led_rename() { @@ -45,38 +15,29 @@ do_internet_led_rename() uci rename system.led_internet=led_dsl uci set system.led_dsl.name=dsl - LED_OPTIONS_CHANGED=1 logger -t led-migration "internet led renamed to dsl" } -migrate_leds() -{ - config_load system - config_foreach do_led_update_sysfs led "$@" -} - case "$(board_name)" in +alphanetworks,asl56026|\ arcadyan,arv452cqw|\ arcadyan,arv7510pw22|\ arcadyan,arv7519rw22|\ arcadyan,arv752dpw|\ arcadyan,arv752dpw22|\ -alphanetworks,asl56026|\ +arcadyan,vg3503j|\ +avm,fritz7360sl|\ bt,homehub-v2b|\ bt,homehub-v3a|\ -bt,homehub-v5a|\ -avm,fritz7360sl|\ -arcadyan,vg3503j) +bt,homehub-v5a) do_internet_led_rename ;; netgear,dgn3500|\ netgear,dgn3500b) migrate_leds "dgn3500:blue:wireless=dgn3500:green:wireless" ;; -*) - ;; esac -[ "$LED_OPTIONS_CHANGED" = "1" ] && uci commit system +migrations_apply system exit 0 diff --git a/target/linux/lantiq/base-files/etc/uci-defaults/02_migrate_xdsl_iface b/target/linux/lantiq/base-files/etc/uci-defaults/02_migrate_xdsl_iface index 3b0313d1aa..dd57ca6d39 100644 --- a/target/linux/lantiq/base-files/etc/uci-defaults/02_migrate_xdsl_iface +++ b/target/linux/lantiq/base-files/etc/uci-defaults/02_migrate_xdsl_iface @@ -1,7 +1,6 @@ #!/bin/sh . /lib/functions.sh -. /lib/functions/lantiq.sh IFNAME_CHANGED=0 diff --git a/target/linux/lantiq/base-files/lib/preinit/05_set_preinit_iface_lantiq b/target/linux/lantiq/base-files/lib/preinit/05_set_preinit_iface_lantiq index 7ed0fabcf7..0539b82d3b 100644 --- a/target/linux/lantiq/base-files/lib/preinit/05_set_preinit_iface_lantiq +++ b/target/linux/lantiq/base-files/lib/preinit/05_set_preinit_iface_lantiq @@ -1,10 +1,7 @@ #!/bin/sh -. /lib/functions/lantiq.sh - set_preinit_iface() { ifname=eth0 } boot_hook_add preinit_main set_preinit_iface - diff --git a/target/linux/mpc85xx/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom b/target/linux/mpc85xx/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom index 3e6488b4c7..be6ee40389 100644 --- a/target/linux/mpc85xx/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom +++ b/target/linux/mpc85xx/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom @@ -1,41 +1,8 @@ #!/bin/sh -FW_FILE="/lib/firmware/$FIRMWARE" +[ -e /lib/firmware/$FIRMWARE ] && exit 0 -ath9k_eeprom_die() { - echo "ath9k eeprom: " "$*" >&2 - exit 1 -} - -ath9k_eeprom_extract() { - local part=$1 - local offset=$2 - local count=$3 - local mtd - - mtd=$(find_mtd_chardev $part) - [ -n "$mtd" ] || \ - ath9k_eeprom_die "no mtd device found for partition $part" - - dd if=$mtd bs=$offset skip=1 count=1 2>/dev/null | dd of=$FW_FILE bs=$count count=1 2>/dev/null || \ - ath9k_eeprom_die "failed to extract from $mtd" -} - -tpl_set_wireless_mac() -{ - local offset=$1 - local mac - - mac=$(mtd_get_mac_binary u-boot 326656) - mac=$(macaddr_add $mac $offset) - - macaddr_2bin $mac | dd bs=1 count=6 seek=2 conv=notrunc of=$FW_FILE 2>/dev/null -} - -[ -e $FW_FILE ] && exit 0 - -. /lib/functions.sh -. /lib/functions/system.sh +. /lib/functions/caldata.sh board=$(board_name) @@ -43,11 +10,11 @@ case "$FIRMWARE" in "pci_wmac0.eeprom") case $board in tplink,tl-wdr4900-v1) - ath9k_eeprom_extract "caldata" 4096 2048 - tpl_set_wireless_mac 0 + caldata_extract "caldata" 0x1000 0x800 + ath9k_patch_mac $(mtd_get_mac_binary u-boot 0x4fc00) ;; *) - ath9k_eeprom_die "board $board is not supported yet" + caldata_die "board $board is not supported yet" ;; esac ;; @@ -55,11 +22,11 @@ case "$FIRMWARE" in "pci_wmac1.eeprom") case $board in tplink,tl-wdr4900-v1) - ath9k_eeprom_extract "caldata" 20480 2048 - tpl_set_wireless_mac -1 + caldata_extract "caldata" 0x5000 0x800 + ath9k_patch_mac $(macaddr_add $(mtd_get_mac_binary u-boot 0x4fc00) -1) ;; *) - ath9k_eeprom_die "board $board is not supported yet" + caldata_die "board $board is not supported yet" ;; esac ;; diff --git a/target/linux/ramips/base-files/lib/preinit/07_set_preinit_iface_ramips b/target/linux/ramips/base-files/lib/preinit/07_set_preinit_iface_ramips index 003a4dda7b..68c1285eb4 100644 --- a/target/linux/ramips/base-files/lib/preinit/07_set_preinit_iface_ramips +++ b/target/linux/ramips/base-files/lib/preinit/07_set_preinit_iface_ramips @@ -3,27 +3,54 @@ # Copyright (C) 2013 OpenWrt.org # -ramips_set_preinit_iface() { - RT3X5X=$(grep -E "(RT3.5|RT5350|MT7628|MT7688|MT7620|MT7621)" /proc/cpuinfo) +. /lib/functions.sh - if [ -n "${RT3X5X}" ]; then - # The ethernet switch driver enables VLAN by default, but - # failsafe uses eth0, making the device unreachable: - # https://dev.openwrt.org/ticket/18768 - case "${RT3X5X}" in - *MT7620*) - ralink_switchdev=mt7620 - ;; - *MT7621*) - ralink_switchdev=mt7530 - ;; - *) - ralink_switchdev=rt305x - ;; - esac - swconfig dev $ralink_switchdev set reset 1 - swconfig dev $ralink_switchdev set enable_vlan 0 - swconfig dev $ralink_switchdev set apply 1 +ramips_switchdev_from_soc() { + # The ethernet switch driver enables VLAN by default, but + # failsafe uses eth0, making the device unreachable: + # https://dev.openwrt.org/ticket/18768 + + local switchdev + local RT3X5X=$(grep -E "(RT3.5|RT5350|MT7628|MT7688|MT7620|MT7621)" /proc/cpuinfo) + + [ -n "$RT3X5X" ] || return 1 + + case "$RT3X5X" in + *MT7620*) + switchdev=mt7620 + ;; + *MT7621*) + switchdev=mt7530 + ;; + *) + switchdev=rt305x + ;; + esac + + echo "$switchdev" +} + +ramips_switchdev_from_board() { + # For these devices, external ethernet switch should be used + # instead of the SoC internal switch. + + local switchdev + local board=$(board_name) + + case "$board" in + esac + + echo "$switchdev" +} + +ramips_set_preinit_iface() { + local switchdev=$(ramips_switchdev_from_board) + [ -n "$switchdev" ] || switchdev=$(ramips_switchdev_from_soc) + + if [ -n "$switchdev" ]; then + swconfig dev $switchdev set reset 1 + swconfig dev $switchdev set enable_vlan 0 + swconfig dev $switchdev set apply 1 fi ifname=eth0