aboutsummaryrefslogtreecommitdiff
path: root/package/base-files/files/lib
Commit message (Collapse)AuthorAge
* base-files: Add new functions for ath11k caldataPaweł Owoc2024-04-23
| | | | | | | | | | | | Add new functions for ath11k caldata: - ath11k_patch_mac (from 0 to 5) - ath11k_remove_regdomain - ath11k_set_macflag (some pre-caldata have the nvMacFlag flag unset which is needed to change the MAC address) Additionaly for ath10k caldata: - ath10k_remove_regdomain Signed-off-by: Paweł Owoc <frut3k7@gmail.com>
* base-files: minor fix to mmc_get_mac_ascii functionRodrigo Balerdi2024-04-07
| | | | | | | This is mostly a cosmetic cleanup. The absence of the return statement was not causing any problems. Signed-off-by: Rodrigo Balerdi <lanchon@gmail.com>
* base-files: sysupgrade: add tar.sh with helpers for building archivesJo-Philipp Wich2024-02-29
| | | | | | | | | This allows building uncompressed tar archives from shell scripts (and compressing them later if needed) Signed-off-by: Jo-Philipp Wich <jo@mein.io> [rmilecki: adapt to sysupgrade needs] Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
* base-files: export whole disk of fitblk backing partitionDaniel Golle2024-02-26
| | | | | | | | | | | After commit ad62247800 ("base-files: improve lib/upgrade/common.sh") behavior of export_bootdevice has been made consistent in such way that always the whole disk device is exported (as that was the case already when matching via UUID) rather than the partition device. Do the same for the device holding the fitblk backing partition. Fixes: 5992f976b3 ("base-files: recognize bootdevice on devices using fitblk") Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* base-files: recognize bootdevice on devices using fitblkDaniel Golle2024-02-26
| | | | | | | | | | Boards using the fitblk driver need special treatment when it comes to detecting the actual block device used to store the image used to boot from. Transparently handle this in 'export_bootdevice' and provide new 'fitblk_get_bootdev' function to replace implementations in /lib/upgrade/platform.sh. Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* base-files: move uci_set_poe() to uci-defaults.shSander Vanheule2024-02-12
| | | | | | | | | PoE devices in the realtek target have the possibility to add PSE info to the board description via 02_network. Make this available for all targets, by moving the uci_set_poe() function to the globally available uci-default.sh script. Signed-off-by: Sander Vanheule <sander@svanheule.net>
* base-files: upgrade: nand.sh: mute umount errorDaniel Golle2024-02-01
| | | | | | | | | | Send error output of umount to /dev/null to mute error in case ubiblock device has already been unmounted (which is usually the case). Gets rid of bogus error message: umount: can't unmount /dev/ubiblock0_4: Invalid argument Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* base-files: functions.sh: prepend() always adds separatorPhilip Prindeville2024-01-15
| | | | | | | | | | It shouldn't gate on the value, since the value will ostensibly always be set; instead it should depend on the variable being prepended to being non-empty. Fixes #14403 Signed-off-by: Philip Prindeville <philipp@redfish-solutions.com>
* base-files: add support for rootfs mount options from cmdlineChristian Marangi2024-01-15
| | | | | | | | | | | | | | | | | | | Add support for configuring rootfs mount options from cmdline. Rootfs mount options can be passed by declaring in the kernel cmdline as much options as needed prefixed with "rootfs_mount_options." An example usage is with rootfs with F2FS filesystem to enable compress_algorithm to reduce flash wear by compressing the files before writing to flash. Example usage: "... rootfs_mount_options.compress_algorithm=zstd ..." To pass multiple options: "... rootfs_mount_options.compress_algorithm=zstd rootfs_mount_options.noinline_data ..." Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
* base-files: execute package's "postinst" after executing uci-defaultsRafał Miłecki2023-12-27
| | | | | | | | | | | | | | | | Allow "postinst" scripts to perform extra actions after applying all kind of fixups implemented using uci-defaults. This is needed e.g. by uhttpd-mod-ubus which after installation in a running systems needs to: 1. Update uhttpd config using its uci-defaults script 2. Reload uhttpd While this approach makes sense there is a risk it'll blow up some corner case postinst usages. There is only 1 way to find out. Cc: Hauke Mehrtens <hauke@hauke-m.de> Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
* base-files: ipcalc.sh: Add tests for unroutable, etcPhilip Prindeville2023-12-12
| | | | | | See RFC-1918, RFC-3927, and RFC-1122. Signed-off-by: Philip Prindeville <philipp@redfish-solutions.com>
* base-files: ipcalc.sh: Add netmask2prefix functionPhilip Prindeville2023-12-12
| | | | | | Also add is_contiguous to check if it's a valid netmask. Signed-off-by: Philip Prindeville <philipp@redfish-solutions.com>
* base-files: ipcalc.sh: Add prefix-to-netmask conversionPhilip Prindeville2023-12-12
| | | | | | | Seems like it might be used in other places, so factor it into the library. Signed-off-by: Philip Prindeville <philipp@redfish-solutions.com>
* base-files: ipcalc.sh: Add some commentary, etc.Philip Prindeville2023-12-12
| | | | | | | | Explain some of the more obscure logic, or where we deviate from what the original awk code did. Also, give a count of the usable addresses on the subnet. Signed-off-by: Philip Prindeville <philipp@redfish-solutions.com>
* base-files: ipcalc.sh: Rewrite in pure shellPhilip Prindeville2023-12-12
| | | | | | Also add better error checking on input. Signed-off-by: Philip Prindeville <philipp@redfish-solutions.com>
* base-files: add mmc_get_mac_ascii functionDaniel Golle2023-12-09
| | | | | | | | Similar to the *_get_mac_binary function, also split the common parts off mtd_get_mac_ascii into new get_mac_ascii function and introduce mmc_get_mac_ascii which uses it. Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* base-files: support parse DT LED color and functionShiji Yang2023-12-02
| | | | | | | | | The 'label' property in led node has been deprecated and we'd better to avoid using it. This patch allows us to extract DT OF LED name from the newly introduced LED properties "color", "function" and "function-enumerator". Signed-off-by: Shiji Yang <yangshiji66@qq.com>
* base-files: add additional uci-defaults function for GRO and conduitChristian Marangi2023-11-10
| | | | | | | | | | | | | | Add additional uci-defaults function for configuring GRO settings and conduit for network devices. Tweaking the GRO values might increase performance on some low spec device that lack some offload feature on gmac. Tweaking conduit interface is specific to DSA based devices and is useful for multi-CPU scenario where one CPU is dedicated to one single port. Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
* base-files: generalize ucidef_set_network_deviceChristian Marangi2023-11-10
| | | | | | | | | | | Generalize ucidef_set_network_device functions to use a more generic _ucidef_set_network_device_common that takes as args the option and the value to apply instead of hardcoding. This is to reduce duplicated code in preparation for addition of additional option for board.d usage. Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
* base-files: functions.sh: Add prepend() homologue to append()Philip Prindeville2023-10-23
| | | | | | | | | | | | | Sometimes it's useful to be able to prepend to a variable as well, such as when dealing with domain names, e.g. prepend fdqn "$subdomain" "." will result in: fqdn="$subdomain.$fqdn" Signed-off-by: Philip Prindeville <philipp@redfish-solutions.com>
* base-files: fix wrong ucidef_set_network_device_mac network-device entryMichael 'ASAP' Weinrich2023-10-20
| | | | | | | | | | | | | | | | | | | | | | | | | The ucidef_set_network_device_* functions in uci-defaults.sh disagree on whether to use "network-device" or "network_device" in board.json. With the additional caveat that jshn will translate hyphens (-) into underscores (_). This casues problems in netifd which expected "network_device" causing boards which depend on assigning MACs in board.json via uci-defaults.sh (or jshn in general) to fail. This commit addresses the issue by using network_device in uci-defaults.sh. The bug was uncovered in the forums here: https://forum.openwrt.org/t/support-for-rtl838x-based-managed-switches/57875/2596 This was exposed by commit 4ebba8a05d09 ("realtek: add support for HPE 1920-8g-poe+") where the board_config_load call from 03_gpio introduced the key normalization by jshn. Fixes: 9290539ca9c7 ("base-files: allow setting device and bridge macs") Tested-by: Stijn Segers <foss@volatilesystems.org> Signed-off-by: Michael 'ASAP' Weinrich <michael@a5ap.net> [ improve commit title, description and fix wrong Tested-by tag ] Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
* package: avoid the use of eval to parse ipcalc.sh outputLeon M. Busch-George2023-09-25
| | | | | | | | | | | Add a function 'ipcalc' to /lib/functions.sh that sets variables more safely using export. With this new function, dnsmasq also handles the return value of ipcalc correctly. Fixes: e4bd3de1be8e ("dnsmasq: refuse to add empty DHCP range") Co-Authored-By: Philip Prindeville <philipp@redfish-solutions.com> Signed-off-by: Leon M. Busch-George <leon@georgemail.eu>
* base-files: sysupgrade: Add 2 sec sleep into process KILL loopHannu Nyman2023-09-12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add 2 seconds sleep after each forcibly killed/tried-to-kill process in the final process termination loop in sysupgrade stage2. This is needed especially for qualcommax/ipq807x, where ath11k wireless driver may have a long 10-20 seconds delay after termination before actually getting killed. This often breaks sysupgrade. The current KILL loop in kill_remaining does all 10 kill attempts consecutively without any delay, as evidenced here in a failing sysupgrade. It does not allow any time for the process to finalize its internal termination. Sat Sep 2 19:05:56 EEST 2023 upgrade: Sending TERM to remaining processes ... Sat Sep 2 19:05:56 EEST 2023 upgrade: Sending signal TERM to hostapd (2122) Sat Sep 2 19:05:56 EEST 2023 upgrade: Sending signal TERM to hostapd (2138) Sat Sep 2 19:06:00 EEST 2023 upgrade: Sending KILL to remaining processes ... Sat Sep 2 19:06:00 EEST 2023 upgrade: Sending signal KILL to hostapd (2122) Sat Sep 2 19:06:00 EEST 2023 upgrade: Sending signal KILL to hostapd (2138) Sat Sep 2 19:06:00 EEST 2023 upgrade: Sending signal KILL to hostapd (2138) Sat Sep 2 19:06:00 EEST 2023 upgrade: Sending signal KILL to hostapd (2138) Sat Sep 2 19:06:00 EEST 2023 upgrade: Sending signal KILL to hostapd (2138) Sat Sep 2 19:06:00 EEST 2023 upgrade: Sending signal KILL to hostapd (2138) Sat Sep 2 19:06:00 EEST 2023 upgrade: Sending signal KILL to hostapd (2138) Sat Sep 2 19:06:00 EEST 2023 upgrade: Sending signal KILL to hostapd (2138) Sat Sep 2 19:06:00 EEST 2023 upgrade: Sending signal KILL to hostapd (2138) Sat Sep 2 19:06:00 EEST 2023 upgrade: Sending signal KILL to hostapd (2138) Sat Sep 2 19:06:00 EEST 2023 upgrade: Sending signal KILL to hostapd (2138) Sat Sep 2 19:06:00 EEST 2023 upgrade: Failed to kill all processes. sysupgrade aborted with return code: 256 The change in this commit adds a 2 seconds delay after each kill attempt in order to allow some processes to more gracefully handle their internal termination. The result is like this: Sun Sep 3 11:15:10 EEST 2023 upgrade: Sending TERM to remaining processes ... Sun Sep 3 11:15:10 EEST 2023 upgrade: Sending signal TERM to hostapd (2309) Sun Sep 3 11:15:10 EEST 2023 upgrade: Sending signal TERM to hostapd (2324) Sun Sep 3 11:15:14 EEST 2023 upgrade: Sending KILL to remaining processes ... Sun Sep 3 11:15:14 EEST 2023 upgrade: Sending signal KILL to hostapd (2309) [ 699.827521] br-lan: port 7(hn5wpa2r) entered disabled state [ 699.908673] device hn5wpa2r left promiscuous mode [ 699.908721] br-lan: port 7(hn5wpa2r) entered disabled state [ 701.038029] br-lan: port 6(hn5wpa3) entered disabled state Sun Sep 3 11:15:16 EEST 2023 upgrade: Sending signal KILL to hostapd (2324) [ 702.058256] br-lan: port 5(hn2wlan) entered disabled state [ 709.250063] stage2 (8237): drop_caches: 3 Sun Sep 3 11:15:25 EEST 2023 upgrade: Switching to ramdisk... The delay introduced here only kicks in if there is some process that does not get terminated by the first TERM call. Then there is at least one 2 sec wait after the first KILL loop round. This commit is related to discussion in PRs #12235 and #12632 Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi> Reviewed-by: Robert Marko <robimarko@gmail.com>
* base-files: upgrade: nand: add JFFS2 cleanmarkers supportÁlvaro Fernández Rojas2023-06-15
| | | | | | | | Some Broadcom MIPS devices require JFFS2 cleanmarkers to be present on the kernel partition or the bootloader will identify the partition as corrupt and won't boot the kernel. Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
* base-files: Do not break on non-eth portsOlliver Schinagl2023-05-09
| | | | | | | | | | | | | | When using OpenWRT with DSA and 'lan' ports, we could get an empty `next_eth`. This is of course not desirable, as this causes `sh: out of range` errors when trying to determine which one would be greater. It turns out, that we don't even need this check at all because, when looking for all existin eth*s on a system, and take the highest index and then iterate a set of devices and rename to eth${highest_index+n}, it is guaranteed that there will be no conflict. Fixes: b688bf83f9d6 ("base-files: rename ethernet devs on known boards") Signed-off-by: Olliver Schinagl <oliver@schinagl.nl>
* base-files: fix nand_upgrade_ubinized()Rafał Miłecki2023-04-11
| | | | | | | | | | | | | | | | | | When using "ubiformat" with stdin it requires passing image size using the -S argument. Provide it just like we do for "ubiupdatevol". This fixes: ubiformat: error!: must use '-S' with non-zero value when reading from stdin This change fixes sysupgrade for bcm53xx and bcm4908 NAND devices possibly some other targets too. Cc: Rodrigo Balerdi <lanchon@gmail.com> Cc: Daniel Golle <daniel@makrotopia.org> Fixes: 971071212052 ("base-files: accept gzipped nand sysupgrade images") Signed-off-by: Rafał Miłecki <rafal@milecki.pl> Acked-by: Daniel Golle <daniel@makrotopia.org> Tested-by: Koen Vandeputte <koen.vandeputte@citymesh.com>
* base-files: add support for retrieving IPv6 assignmentsMark Baker2023-02-24
| | | | | | | In DHCPv6-PD enabled environments, addresses are assigned to interfaces. These new functions retrieve the IPv6 assigned prefix(es). Signed-off-by: Mark Baker <mark@vpost.net>
* treewide: replace /sys/devices/virtual/ubi by /sys/class/ubiDaniel Golle2023-02-15
| | | | | | | | | | Starting from Linux Kernel version 6.3 UBI devices will no longer be considered virtual, but rather have an MTD device parent. Hence they will no longer be listed under /sys/devices/virtual/ubi which is used in multiple places in OpenWrt. Prepare for future kernels by using /sys/class/ubi instead of /sys/devuces/virtual/ubi. Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* base-files: upgrade: Fix export_partdevice() quotingBrian Norris2023-02-03
| | | | | | | | | | $BOOTDEV_MAJOR may be empty for many of the uevents parsed in this function. This condition thus tends to fail benignly (we just skip to the next device), but it can really clutter the stage2 sysupgrade stderr, since it looks like the "=" operand doesn't have an appropriate left-hand argument. Signed-off-by: Brian Norris <computersforpeace@gmail.com>
* base-files: fix nand_do_platform_check failChen Minqiang2023-01-29
| | | | | | | | | | | | This change ensures compatibility with both types of sysupgrade-tar files. 1. For some boards like xiaomi,redmi-router-ax6s, sysupgrade-tar is pack in directory `vendor,name/` 2. For some boards like xiaomi,mi-router-3g, sysupgrade-tar is pack in directory `vendor_name/` Signed-off-by: Chen Minqiang <ptpt52@gmail.com>
* base-files: Remove nand.sh dependency from emmc upgradeBrian Norris2023-01-21
| | | | | | | | | | | | emmc_do_upgrade() relies on identify() from the nand.sh upgrade helper. This only works because FEATURES=emmc targets also tend to include FEATURES=nand. Rename identify_magic() to identify_magic_long() to match the common.sh style and make it clear it pairs with other *_long() variants (and not, say *_word()). Signed-off-by: Brian Norris <computersforpeace@gmail.com>
* base-files: rework mtd_get_mac_text()Michael Pratt2023-01-06
| | | | | | | | | | | | | | It's necessary to be able to specify the length for MAC addresses that are stored in flash, for example, in a case where it is stored without any delimiter. Let both offset and length have default values. Add a sanity check related to partition size. Also, clean up syntax and unnecessary lines. Signed-off-by: Michael Pratt <mcpratt@pm.me>
* ramips: add basic support for tp-link er605-v2Nikolay Martynov2023-01-04
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is a MT7621-based device with 128MB NAND flash, 256MB RAM, and a USB port. The board has headers to attach console. In order for them to work two solder bridges near those pads need to be made. The defice has the following partition table: ``` 0x000000000000-0x000000080000 : "u-boot" 0x000000080000-0x000000100000 : "u-boot-env" 0x000000100000-0x000000140000 : "factory" 0x000000140000-0x000007e00000 : "firmware" 0x000007e00000-0x000008000000 : "panic-ops" ``` `firmware` partition contains UBI volumes. Unfortunately I accidentally wiped partition and I no longer have access to it. `firmware` partition contains 'secondary' U-Boot which is run by 'first' u-boot. It also contains various configuration partitions that include device info and MAC address. There also seems to be 'primary' and 'backup' set of 'main' volumes. U-boot has `mtkupgrade` command that just overrides data on firmware partitions. Firmware file provided by TP-Link cannot be used with that command. U-boot also has 'recovery' http server. Unfortunately I was not able to make it work with manufacturer's firmware. Manufacturer's firmware essentially contains multiple UBI volumes along with 'partition table'. Unfortunately I no longer can properly run manufacturer's firmware so I cannot at the moment try to a support for building 'factory' images. This patch adds support for initramfs image as well as sysupgrade image. This seems to be pretty standard MT7621 board otherwise. Things that work: * network * leds * usb * factory MAC detection Signed-off-by: Nikolay Martynov <mar.kolya@gmail.com>
* base-files: stage2: add 'tail' to sysupgrade environmentTony Ambardar2022-12-31
| | | | | | | This is used to access footer data in firmare files, and is simpler and less error-prone than using 'dd' with calculated offsets. Signed-off-by: Tony Ambardar <itugrok@yahoo.com>
* sunxi: ensure NanoPi R1 has unique MAC addressJan-Niklas Burfeind2022-12-25
| | | | | | | | | | | | | | | | | | | | Ensure the MAC address for all NanoPi R1 boards is assigned uniquely for each board. The vendor ships the device in two variants; one with and one without eMMC; but both without static mac-addresses. In order to assign both board types unique MAC addresses, fall back on the same method used for the NanoPi R2S and R4S in case the EEPROM chip is not present by generating the board MAC from the SD card CID. [0] https://wiki.friendlyelec.com/wiki/index.php/NanoPi_R1#Hardware_Spec Similar too and based on: commit b5675f500daf ("rockchip: ensure NanoPi R4S has unique MAC address") Co-authored-by: David Bauer <mail@david-bauer.net> Signed-off-by: Jan-Niklas Burfeind <git@aiyionpri.me>
* base-files: sysupgrade-tar: allow separated kernel/rootfs ubiChuanhong Guo2022-12-17
| | | | | | | | | | There are some devices putting kernel and rootfs on separated ubi volumes. To make OpenWrt compatible with their bootloader, we need to put kernel and rootfs into separated ubi volumes. Add support for CI_KERN_UBIPART and CI_ROOT_UBIPART for this situation. Signed-off-by: Chuanhong Guo <gch981213@gmail.com>
* base-files: split ubi attaching out of nand_upgrade_prepare_ubiChuanhong Guo2022-12-17
| | | | | | | split ubi reformat/attach into nand_attach_ubi in preparation for reusing this code in other functions. Signed-off-by: Chuanhong Guo <gch981213@gmail.com>
* base-files: bring back nand_do_upgrade_successDaniel Golle2022-10-30
| | | | | | | | | | | | Several Broadcom targets were using the nand_do_upgrade_success shell function which has been removed by commit e25e6d8e54 ("base-files: fix and clean up nand sysupgrade code"). Refactor the new nand_do_upgrade to bring back nand_do_upgrade_success with the behavior expected by those users. Fixes: e25e6d8e54 ("base-files: fix and clean up nand sysupgrade code") Reported-by: Chen Minqiang <ptpt52@gmail.com> Signed-off-by: Daniel Golle <daniel@makrotopia.org>
* base-files: verify nand sysupgrade imagesRodrigo Balerdi2022-10-30
| | | | | | | For nand sysupgrade image files having tar/gzip/tgz envelopes, verify envelope integrity before starting sysupgrade. Signed-off-by: Rodrigo Balerdi <lanchon@gmail.com>
* base-files: accept gzipped nand sysupgrade imagesRodrigo Balerdi2022-10-30
| | | | | | | | | | | | | | | | When firmware images only contained compressed kernels and squashfs roots, uncompressed tar files were a good option. We are now using UBIFS images, both raw and tarred, as well as ubinized (full UBI partition) images, all of which benefit greatly from compression. For example, a raw ubinized backup taken from a running Askey RT4230W REV6 (such full backups can be restored via the LUCI's sysupgrade UI) is over 400 MB, but compresses to less than 10 MB. This commit adds support for gzipped versions of all file types already accepted by the nand sysupgrade mechanism, be them raw or tarred. Signed-off-by: Rodrigo Balerdi <lanchon@gmail.com>
* base-files: fix ubinized nand sysupgradeRodrigo Balerdi2022-10-30
| | | | | | | | | | | | It has been reported that ubinized nand sysupgrade fails under certain circumstances, being unable to detach the existing ubi partition due to volumes within the partition being mounted. This is an attempt to solve such issues by unmounting and removing ubiblock devices and unmounting ubi volumes within the target partition prior to detaching and formatting it. Signed-off-by: Rodrigo Balerdi <lanchon@gmail.com>
* base-files: fix and clean up nand sysupgrade codeRodrigo Balerdi2022-10-30
| | | | | | | | | | - Never return from 'nand_do_upgrade', not even in case of errors, as that would cause execution of sysupgrade code not intended for NAND devices. - Unify handling of sysupgrade success and failure. - Detect and report more error conditions. - Fix outdated/incorrect/unclear comments. Signed-off-by: Rodrigo Balerdi <lanchon@gmail.com>
* base-files: add helper functions for adding wlan device entries to board.jsonFelix Fietkau2022-10-14
| | | | | | | | | | | These will be used to give WLAN PHYs a specific name based on path specified in board.json. The platform board.d script can assign a specific order based on available slots (PCIe slots, WMAC device) and device tree configuration. This helps with maintaining config compatibility in case the device path changes due to kernel upgrades. Signed-off-by: Felix Fietkau <nbd@nbd.name>
* base-files: Actually set default nameOlliver Schinagl2022-09-22
| | | | | | | | | | | The currently used shell expansion doesn't seem to exist [0] and also does not work. This surely was not intended, so lets allow default naming to actually work. [0]: https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html Fixes: be09c5a3cd65 ("base-files: add board.d support for bridge device") Signed-off-by: Olliver Schinagl <oliver@schinagl.nl>
* ath79: add support for TP-Link Deco S4Nick French2022-09-11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add support for TP-Link Deco S4 wifi router The label refers to the device as S4R and the TP-Link firmware site calls it the Deco S4 v2. (There does not appear to be a v1) Hardware (and FCC id) are identical to the Deco M4R v2 but the flash layout is ordered differently and the OEM firmware encrypts some config parameters (including the label mac address) in flash In order to set the encrypted mac address, the wlan's caldata node is removed from the DTS so the mac can be decrypted with the help of the uencrypt tool and patched into the wlan fw via hotplug Specifications: SoC: QCA9563-AL3A RAM: Zentel A3R1GE40JBF Wireless 2.4GHz: QCA9563-AL3A (main SoC) Wireless 5GHz: QCA9886 Ethernet Switch: QCA8337N-AL3C Flash: 16 MB SPI NOR UART serial access (115200N1) on board via solder pads: RX = TP1 pad TX = TP2 pad GND = C201 (pad nearest board edge) The device's bootloader and web gui will only accept images that were signed using TP-Link's RSA key, however a memory safety bug in the bootloader can be leveraged to install openwrt without accessing the serial console. See developer forum S4 support page for link to a "firmware" file that starts a tftp client, or you may generate one on your own like this: ``` python - > deco_s4_faux_fw_tftp.bin <<EOF import sys from struct import pack b = pack('>I', 0x00008000) + b'X'*16 + b"fw-type:" \ + b'x'*256 + b"S000S001S002" + pack('>I', 0x80060200) \ b += b"\x00"*(0x200-len(b)) \ + pack(">33I", *[0x3c0887fc, 0x35083ddc, 0xad000000, 0x24050000, 0x3c048006, 0x348402a0, 0x3c1987f9, 0x373947f4, 0x0320f809, 0x00000000, 0x24050000, 0x3c048006, 0x348402d0, 0x3c1987f9, 0x373947f4, 0x0320f809, 0x00000000, 0x24050000, 0x3c048006, 0x34840300, 0x3c1987f9, 0x373947f4, 0x0320f809, 0x00000000, 0x24050000, 0x3c048006, 0x34840400, 0x3c1987f9, 0x373947f4, 0x0320f809, 0x00000000, 0x1000fff1, 0x00000000]) b += b"\xff"*(0x2A0-len(b)) + b"setenv serverip 192.168.0.2\x00" b += b"\xff"*(0x2D0-len(b)) + b"setenv ipaddr 192.168.0.1\x00" b += b"\xff"*(0x300-len(b)) + b"tftpboot 0x81000000 initramfs-kernel.bin\x00" b += b"\xff"*(0x400-len(b)) + b"bootm 0x81000000\x00" b += b"\xff"*(0x8000-len(b)) sys.stdout.buffer.write(b) EOF ``` Installation: 1. Run tftp server on pc with static ip 192.168.0.2 2. Place openwrt "initramfs-kernel.bin" image in tftp root dir 3. Connect pc to router ethernet port1 4. While holding in reset button on bottom of router, power on router 5. From pc access router webgui at http://192.168.0.1 6. Upload deco_s4_faux_fw_tftp.bin 7. Router will load and execture in-memory openwrt 8. Switch pc back to dhcp or static 192.168.1.x 9. Flash openwrt sysupgrade image via luci/ssh at 192.168.1.1 Revert to stock: Press and hold reset button while powering device to start the bootloader's recovery mode, where stock firmware can be uploaded via web gui at 192.168.0.1 Please note that one additional non-github commits is also needed: firmware-utils: add tplink-safeloader support for Deco S4 Signed-off-by: Nick French <nickfrench@gmail.com>
* base-files: rename ethernet devs on known boardsMartin Kennedy2022-09-10
| | | | | | | | | | | | | | | | Some platforms lack an established way to name netdevs; for example, on x86, PCIe-based ethernet interfaces will be named starting from eth0 in the order they are probed. This is a problem for many devices supported explicitly by OpenWrt which have hard-wired, standalone or on-CPU NICs not supported by DSA (which is usually used to rename the ports based on their ostensible function). To fix this, add a mapping between ethernet device name and sysfs device path to board.json; this allows us to configure ethernet device names we know about for a given board so that they correspond to external labeling. Signed-off-by: Martin Kennedy <hurricos@gmail.com>
* base-files: add mtd_get_mac_encrypted_arcadyan functionMikhail Zhilkin2022-08-19
| | | | | | | | | Some Arcadyan devices (e.g. MTS WG430223) keep their config in encrypted mtd. This adds mtd_get_mac_encrypted_arcadyan() function to get the MAC address from the encrypted partition. Function uses uencrypt utility for decryption (and openssl if the uencrypt wasn't found). Signed-off-by: Mikhail Zhilkin <csharper2005@gmail.com>
* failsafe: run on all consoles listed in /proc/cmdlineMark Mentovai2022-06-19
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | On x86, when both CONFIG_GRUB_CONSOLE and CONFIG_GRUB_SERIAL are set (as they are by default), the kernel command line will have two console= entries, such as console=tty0 console=ttyS0,115200n8 Failsafe was only running a shell on the first defined console, the VGA console. This is a problem for devices like apu2, where there is only a serial console and it appears on ttyS0. Moreover, the console prompt to enter failsafe during boot was delivered to, and its input read from, the last console= on the kernel command line. So while the failsafe shell was on the first defined console, only the last defined console could be used to enter failsafe during boot. In contrast, the x86 bootloader (GRUB) operates on both the serial console and the VGA console by virtue of "terminal_{input,output} console serial". GRUB also provided an alternate means to enter failsafe from either console. The presence of two console= kernel command line parameters causes kernel messages to be delivered to both. Under normal operation (not failsafe), procd runs login in accordance with inittab, which on x86 specifies ttyS0, hvc0, and tty1, allowing login through any of serial, hypervisor, or VGA console. Thus, serial access was consistently available on x86 devices with serial consoles under normal operation, except for shell access in failsafe mode (without editing the kernel command line). By presenting the failsafe prompt, reading failsafe prompt input, and running failsafe shells on all consoles listed in /proc/cmdline, failsafe mode will work correctly on devices with a serial console (like apu2), and the same image without any need for reconfiguration can be shared by devices with the more traditional (for x86) VGA console. This improvement should benefit any system with multiple console= arguments, including x86 and bcm27xx (Raspberry Pi). Signed-off-by: Mark Mentovai <mark at moxienet.com>
* base-files: allow ignoring minor compat-version checkDavid Bauer2022-06-18
| | | | | | | | | | | | Downstream projects might re-generate device-specific configuration based on OpenWrt's defaults on each upgrade, thus being unaffected by forward- as well as backwards-breaking configuration. Add a new sysupgrade parameter, which allows sysupgrades between minor compat-versions. Upgrades will still fail upon mismatching major compat versions. Signed-off-by: David Bauer <mail@david-bauer.net>
* base-files: simplify restorecon logicDaniel Golle2022-05-02
| | | | | | | | | Remove forgotten redundant selinuxenabled call and skip the whole thing in case $IPKG_INSTROOT is set as labels are anyway applied only later on in fakeroot when squashfs is created. Fixes: 6d7272852e ("base-files: add missing $IPKG_INSTROOT to restorecon call") Signed-off-by: Daniel Golle <daniel@makrotopia.org>