mirror of
https://github.com/hanwckf/immortalwrt-mt798x.git
synced 2025-01-09 02:43:53 +08:00
Merge Official Source
This commit is contained in:
commit
918607e3fd
@ -50,6 +50,7 @@ endef
|
||||
dl_pack/bz2=bzip2 -c > $(1)
|
||||
dl_pack/gz=gzip -nc > $(1)
|
||||
dl_pack/xz=xz -zc -7e > $(1)
|
||||
dl_pack/zst=zstd -T0 --ultra -20 -c > $(1)
|
||||
dl_pack/unknown=$(error ERROR: Unknown pack format for file $(1))
|
||||
define dl_pack
|
||||
$(if $(dl_pack/$(call ext,$(1))),$(dl_pack/$(call ext,$(1))),$(dl_pack/unknown))
|
||||
|
@ -70,7 +70,7 @@ ifdef CONFIG_COLLECT_KERNEL_DEBUG
|
||||
$(FIND) $(KERNEL_BUILD_DIR)/debug -type f | $(XARGS) $(KERNEL_CROSS)strip --only-keep-debug
|
||||
$(TAR) c -C $(KERNEL_BUILD_DIR) debug \
|
||||
$(if $(SOURCE_DATE_EPOCH),--mtime="@$(SOURCE_DATE_EPOCH)") \
|
||||
| bzip2 -c -9 > $(BIN_DIR)/kernel-debug.tar.bz2
|
||||
| zstd -T0 -f -o $(BIN_DIR)/kernel-debug.tar.zst
|
||||
endef
|
||||
endif
|
||||
|
||||
|
@ -31,6 +31,10 @@ ifeq ($(strip $(UNPACK_CMD)),)
|
||||
EXT:=$(call ext,$(PKG_SOURCE:.$(EXT)=))
|
||||
DECOMPRESS_CMD:=xzcat $(DL_DIR)/$(PKG_SOURCE) |
|
||||
endif
|
||||
ifeq (zst,$(EXT))
|
||||
EXT:=$(call ext,$(PKG_SOURCE:.$(EXT)=))
|
||||
DECOMPRESS_CMD:=zstdcat $(DL_DIR)/$(PKG_SOURCE) |
|
||||
endif
|
||||
ifeq ($(filter tgz tbz tbz2 txz,$(EXT1)),$(EXT1))
|
||||
EXT:=tar
|
||||
endif
|
||||
|
@ -8,9 +8,9 @@ PKG_LICENSE_FILES:=
|
||||
|
||||
PKG_SOURCE_URL:=https://github.com/openwrt/mt76
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_DATE:=2020-04-27
|
||||
PKG_SOURCE_VERSION:=5f3ccc7226272198c21ec934d9072a56b0953f47
|
||||
PKG_MIRROR_HASH:=6f1a7b7d7b9f4db79d72405baeafa318769eeab270fea4479756f91ac5a2494d
|
||||
PKG_SOURCE_DATE:=2020-05-30
|
||||
PKG_SOURCE_VERSION:=85c516081338d3d1454fb53b5741321c2adefbef
|
||||
PKG_MIRROR_HASH:=a3e110700843ecfee10eba274ab6fe63b9d78a00eb96ee1634b145e0a9ae9a69
|
||||
|
||||
PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
|
||||
PKG_BUILD_PARALLEL:=1
|
||||
@ -138,16 +138,54 @@ define KernelPackage/mt7603
|
||||
AUTOLOAD:=$(call AutoProbe,mt7603e)
|
||||
endef
|
||||
|
||||
define KernelPackage/mt7615-common
|
||||
$(KernelPackage/mt76-default)
|
||||
TITLE:=MediaTek MT7615 wireless driver common code
|
||||
HIDDEN:=1
|
||||
DEPENDS+=@PCI_SUPPORT +kmod-mt76-core
|
||||
FILES:= $(PKG_BUILD_DIR)/mt7615/mt7615-common.ko
|
||||
endef
|
||||
|
||||
define KernelPackage/mt7615-firmware
|
||||
$(KernelPackage/mt76-default)
|
||||
TITLE:=MediaTek MT7615e firmware
|
||||
DEFAULT:=PACKAGE_kmod-mt7615e
|
||||
endef
|
||||
|
||||
define KernelPackage/mt7615e
|
||||
$(KernelPackage/mt76-default)
|
||||
TITLE:=MediaTek MT7615 wireless driver
|
||||
DEPENDS+=@PCI_SUPPORT +kmod-mt76-core
|
||||
FILES:=\
|
||||
$(PKG_BUILD_DIR)/mt7615/mt7615-common.ko \
|
||||
$(PKG_BUILD_DIR)/mt7615/mt7615e.ko
|
||||
TITLE:=MediaTek MT7615e wireless driver
|
||||
DEPENDS+=@PCI_SUPPORT +kmod-mt7615-common
|
||||
FILES:= $(PKG_BUILD_DIR)/mt7615/mt7615e.ko
|
||||
AUTOLOAD:=$(call AutoProbe,mt7615e)
|
||||
endef
|
||||
|
||||
define KernelPackage/mt7663-firmware-ap
|
||||
$(KernelPackage/mt76-default)
|
||||
TITLE:=MediaTek MT7663e firmware (optimized for AP)
|
||||
endef
|
||||
|
||||
define KernelPackage/mt7663-firmware-sta
|
||||
$(KernelPackage/mt76-default)
|
||||
TITLE:=MediaTek MT7663e firmware (client mode offload)
|
||||
endef
|
||||
|
||||
define KernelPackage/mt7663u
|
||||
$(KernelPackage/mt76-default)
|
||||
TITLE:=MediaTek MT7663u wireless driver
|
||||
DEPENDS+=+kmod-mt76-usb +kmod-mt7615-common
|
||||
FILES:= $(PKG_BUILD_DIR)/mt7615/mt7663u.ko
|
||||
AUTOLOAD:=$(call AutoProbe,mt7663u)
|
||||
endef
|
||||
|
||||
define KernelPackage/mt7915e
|
||||
$(KernelPackage/mt76-default)
|
||||
TITLE:=MediaTek MT7915e wireless driver
|
||||
DEPENDS+=@PCI_SUPPORT +kmod-mt7615-common
|
||||
FILES:= $(PKG_BUILD_DIR)/mt7915/mt7915e.ko
|
||||
AUTOLOAD:=$(call AutoProbe,mt7915e)
|
||||
endef
|
||||
|
||||
NOSTDINC_FLAGS = \
|
||||
-I$(PKG_BUILD_DIR) \
|
||||
-I$(STAGING_DIR)/usr/include/mac80211-backport/uapi \
|
||||
@ -191,14 +229,22 @@ endif
|
||||
ifdef CONFIG_PACKAGE_kmod-mt7603
|
||||
PKG_MAKE_FLAGS += CONFIG_MT7603E=m
|
||||
endif
|
||||
ifdef CONFIG_PACKAGE_kmod-mt7615e
|
||||
ifdef CONFIG_PACKAGE_kmod-mt7615-common
|
||||
PKG_MAKE_FLAGS += CONFIG_MT7615_COMMON=m
|
||||
endif
|
||||
ifdef CONFIG_PACKAGE_kmod-mt7615e
|
||||
PKG_MAKE_FLAGS += CONFIG_MT7615E=m
|
||||
ifdef CONFIG_TARGET_mediatek_mt7622
|
||||
PKG_MAKE_FLAGS += CONFIG_MT7622_WMAC=y
|
||||
NOSTDINC_FLAGS += -DCONFIG_MT7622_WMAC
|
||||
endif
|
||||
endif
|
||||
ifdef CONFIG_PACKAGE_kmod-mt7663u
|
||||
PKG_MAKE_FLAGS += CONFIG_MT7663U=m
|
||||
endif
|
||||
ifdef CONFIG_PACKAGE_kmod-mt7915e
|
||||
PKG_MAKE_FLAGS += CONFIG_MT7915E=m
|
||||
endif
|
||||
|
||||
define Build/Compile
|
||||
+$(MAKE) $(PKG_JOBS) -C "$(LINUX_DIR)" \
|
||||
@ -251,7 +297,7 @@ define KernelPackage/mt7603/install
|
||||
$(1)/lib/firmware
|
||||
endef
|
||||
|
||||
define KernelPackage/mt7615e/install
|
||||
define KernelPackage/mt7615-firmware/install
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/mediatek
|
||||
cp \
|
||||
$(PKG_BUILD_DIR)/firmware/mt7615_cr4.bin \
|
||||
@ -263,6 +309,31 @@ define KernelPackage/mt7615e/install
|
||||
$(1)/lib/firmware/mediatek
|
||||
endef
|
||||
|
||||
define KernelPackage/mt7663-firmware-ap/install
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/mediatek
|
||||
cp \
|
||||
$(PKG_BUILD_DIR)/firmware/mt7663_n9_rebb.bin \
|
||||
$(PKG_BUILD_DIR)/firmware/mt7663pr2h_rebb.bin \
|
||||
$(1)/lib/firmware/mediatek
|
||||
endef
|
||||
|
||||
define KernelPackage/mt7663-firmware-sta/install
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/mediatek
|
||||
cp \
|
||||
$(PKG_BUILD_DIR)/firmware/mt7663_n9_v3.bin \
|
||||
$(PKG_BUILD_DIR)/firmware/mt7663pr2h.bin \
|
||||
$(1)/lib/firmware/mediatek
|
||||
endef
|
||||
|
||||
define KernelPackage/mt7915e/install
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/mediatek
|
||||
cp \
|
||||
$(PKG_BUILD_DIR)/firmware/mt7915_wa.bin \
|
||||
$(PKG_BUILD_DIR)/firmware/mt7915_wm.bin \
|
||||
$(PKG_BUILD_DIR)/firmware/mt7915_rom_patch.bin \
|
||||
$(1)/lib/firmware/mediatek
|
||||
endef
|
||||
|
||||
$(eval $(call KernelPackage,mt76-core))
|
||||
$(eval $(call KernelPackage,mt76-usb))
|
||||
$(eval $(call KernelPackage,mt76x02-usb))
|
||||
@ -274,5 +345,11 @@ $(eval $(call KernelPackage,mt76x2-common))
|
||||
$(eval $(call KernelPackage,mt76x2u))
|
||||
$(eval $(call KernelPackage,mt76x2))
|
||||
$(eval $(call KernelPackage,mt7603))
|
||||
$(eval $(call KernelPackage,mt7615-common))
|
||||
$(eval $(call KernelPackage,mt7615-firmware))
|
||||
$(eval $(call KernelPackage,mt7615e))
|
||||
$(eval $(call KernelPackage,mt7663-firmware-ap))
|
||||
$(eval $(call KernelPackage,mt7663-firmware-sta))
|
||||
$(eval $(call KernelPackage,mt7663u))
|
||||
$(eval $(call KernelPackage,mt7915e))
|
||||
$(eval $(call KernelPackage,mt76))
|
||||
|
@ -8,7 +8,7 @@ config DROPBEAR_CURVE25519
|
||||
This enables the following key exchange algorithm:
|
||||
curve25519-sha256@libssh.org
|
||||
|
||||
Increases binary size by about 8 kB uncompressed (MIPS).
|
||||
Increases binary size by about 4 kB (MIPS).
|
||||
|
||||
config DROPBEAR_ECC
|
||||
bool "Elliptic curve cryptography (ECC)"
|
||||
@ -49,6 +49,24 @@ config DROPBEAR_ECC_FULL
|
||||
|
||||
Increases binary size by about 4 kB (MIPS).
|
||||
|
||||
config DROPBEAR_ED25519
|
||||
bool "Ed25519 support"
|
||||
default n
|
||||
help
|
||||
This enables the following public key algorithm:
|
||||
ssh-ed25519
|
||||
|
||||
Increases binary size by about 12 kB (MIPS).
|
||||
|
||||
config DROPBEAR_CHACHA20POLY1305
|
||||
bool "Chacha20-Poly1305 support"
|
||||
default y
|
||||
help
|
||||
This enables the following authenticated encryption cipher:
|
||||
chacha20-poly1305@openssh.com
|
||||
|
||||
Increases binary size by about 4 kB (MIPS).
|
||||
|
||||
config DROPBEAR_ZLIB
|
||||
bool "Enable compression"
|
||||
default n
|
||||
|
@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=dropbear
|
||||
PKG_VERSION:=2019.78
|
||||
PKG_RELEASE:=4
|
||||
PKG_RELEASE:=5
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
|
||||
PKG_SOURCE_URL:= \
|
||||
@ -29,6 +29,7 @@ PKG_FIXUP:=autoreconf
|
||||
PKG_CONFIG_DEPENDS:= \
|
||||
CONFIG_TARGET_INIT_PATH CONFIG_DROPBEAR_ECC CONFIG_DROPBEAR_ECC_FULL \
|
||||
CONFIG_DROPBEAR_CURVE25519 CONFIG_DROPBEAR_ZLIB \
|
||||
CONFIG_DROPBEAR_ED25519 CONFIG_DROPBEAR_CHACHA20POLY1305 \
|
||||
CONFIG_DROPBEAR_UTMP CONFIG_DROPBEAR_PUTUTLINE \
|
||||
CONFIG_DROPBEAR_DBCLIENT
|
||||
|
||||
@ -63,6 +64,7 @@ define Package/dropbear/description
|
||||
endef
|
||||
|
||||
define Package/dropbear/conffiles
|
||||
$(if $(CONFIG_DROPBEAR_ED25519),/etc/dropbear/dropbear_ed25519_host_key)
|
||||
$(if $(CONFIG_DROPBEAR_ECC),/etc/dropbear/dropbear_ecdsa_host_key)
|
||||
/etc/dropbear/dropbear_rsa_host_key
|
||||
/etc/config/dropbear
|
||||
@ -110,6 +112,12 @@ define Build/Configure
|
||||
$(PKG_BUILD_DIR)/localoptions.h; \
|
||||
done
|
||||
|
||||
echo '#define DROPBEAR_ED25519 $(if $(CONFIG_DROPBEAR_ED25519),1,0)' >> \
|
||||
$(PKG_BUILD_DIR)/localoptions.h
|
||||
|
||||
echo '#define DROPBEAR_CHACHA20POLY1305 $(if $(CONFIG_DROPBEAR_CHACHA20POLY1305),1,0)' >> \
|
||||
$(PKG_BUILD_DIR)/localoptions.h
|
||||
|
||||
# remove protocol idented software version number
|
||||
$(ESED) 's,^(#define LOCAL_IDENT) .*$$$$,\1 "SSH-2.0-dropbear",g' \
|
||||
$(PKG_BUILD_DIR)/sysoptions.h
|
||||
@ -160,6 +168,7 @@ define Package/dropbear/install
|
||||
$(INSTALL_DIR) $(1)/etc/dropbear
|
||||
$(INSTALL_DIR) $(1)/lib/preinit
|
||||
$(INSTALL_DATA) ./files/dropbear.failsafe $(1)/lib/preinit/99_10_failsafe_dropbear
|
||||
$(if $(CONFIG_DROPBEAR_ED25519),touch $(1)/etc/dropbear/dropbear_ed25519_host_key)
|
||||
$(if $(CONFIG_DROPBEAR_ECC),touch $(1)/etc/dropbear/dropbear_ecdsa_host_key)
|
||||
touch $(1)/etc/dropbear/dropbear_rsa_host_key
|
||||
endef
|
||||
|
@ -66,7 +66,7 @@ hk_generate_as_needed()
|
||||
kdir='/etc/dropbear'
|
||||
|
||||
kgen=''
|
||||
for ktype in ecdsa rsa; do
|
||||
for ktype in ed25519 ecdsa rsa; do
|
||||
hk_verify "${kdir}/dropbear_${ktype}_host_key" && continue
|
||||
|
||||
kgen="${kgen} ${ktype}"
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,693 @@
|
||||
From 3cdf9ec918b37c17e12b33e4c244944d1ee836ca Mon Sep 17 00:00:00 2001
|
||||
From: Vladislav Grishenko <themiron@mail.ru>
|
||||
Date: Mon, 6 Apr 2020 23:28:09 +0500
|
||||
Subject: [PATCH] Add Chacha20-Poly1305 authenticated encryption
|
||||
|
||||
* Add general AEAD approach.
|
||||
* Add chacha20-poly1305@openssh.com algo using LibTomCrypt chacha and
|
||||
poly1305 routines.
|
||||
|
||||
Chacha20-Poly1305 is generally faster than AES256 on CPU w/o dedicated
|
||||
AES instructions, having the same key size.
|
||||
Compiling in will add ~5,5kB to binary size on x86-64.
|
||||
---
|
||||
Makefile.in | 2 +-
|
||||
algo.h | 8 ++
|
||||
chachapoly.c | 148 ++++++++++++++++++++
|
||||
chachapoly.h | 44 ++++++
|
||||
common-algo.c | 11 +-
|
||||
common-kex.c | 44 ++++--
|
||||
default_options.h | 6 +
|
||||
libtomcrypt/src/headers/tomcrypt_dropbear.h | 4 +
|
||||
packet.c | 145 +++++++++++++------
|
||||
session.h | 4 +
|
||||
sysoptions.h | 8 +-
|
||||
11 files changed, 368 insertions(+), 56 deletions(-)
|
||||
create mode 100644 chachapoly.c
|
||||
create mode 100644 chachapoly.h
|
||||
|
||||
diff --git a/Makefile.in b/Makefile.in
|
||||
index aaf7b3b..3437cb2 100644
|
||||
--- a/Makefile.in
|
||||
+++ b/Makefile.in
|
||||
@@ -53,7 +53,7 @@ CLIOBJS=cli-main.o cli-auth.o cli-authpasswd.o cli-kex.o \
|
||||
CLISVROBJS=common-session.o packet.o common-algo.o common-kex.o \
|
||||
common-channel.o common-chansession.o termcodes.o loginrec.o \
|
||||
tcp-accept.o listener.o process-packet.o dh_groups.o \
|
||||
- common-runopts.o circbuffer.o list.o netio.o
|
||||
+ common-runopts.o circbuffer.o list.o netio.o chachapoly.o
|
||||
|
||||
KEYOBJS=dropbearkey.o
|
||||
|
||||
diff --git a/algo.h b/algo.h
|
||||
index b12fb94..efd0d73 100644
|
||||
--- a/algo.h
|
||||
+++ b/algo.h
|
||||
@@ -72,6 +72,14 @@ struct dropbear_cipher_mode {
|
||||
unsigned long len, void *cipher_state);
|
||||
int (*decrypt)(const unsigned char *ct, unsigned char *pt,
|
||||
unsigned long len, void *cipher_state);
|
||||
+ int (*aead_crypt)(unsigned int seq,
|
||||
+ const unsigned char *in, unsigned char *out,
|
||||
+ unsigned long len, unsigned long taglen,
|
||||
+ void *cipher_state, int direction);
|
||||
+ int (*aead_getlength)(unsigned int seq,
|
||||
+ const unsigned char *in, unsigned int *outlen,
|
||||
+ unsigned long len, void *cipher_state);
|
||||
+ const struct dropbear_hash *aead_mac;
|
||||
};
|
||||
|
||||
struct dropbear_hash {
|
||||
diff --git a/chachapoly.c b/chachapoly.c
|
||||
new file mode 100644
|
||||
index 0000000..8fb06c5
|
||||
--- /dev/null
|
||||
+++ b/chachapoly.c
|
||||
@@ -0,0 +1,148 @@
|
||||
+/*
|
||||
+ * Dropbear SSH
|
||||
+ *
|
||||
+ * Copyright (c) 2002,2003 Matt Johnston
|
||||
+ * Copyright (c) 2020 by Vladislav Grishenko
|
||||
+ * All rights reserved.
|
||||
+ *
|
||||
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
+ * of this software and associated documentation files (the "Software"), to deal
|
||||
+ * in the Software without restriction, including without limitation the rights
|
||||
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
+ * copies of the Software, and to permit persons to whom the Software is
|
||||
+ * furnished to do so, subject to the following conditions:
|
||||
+ *
|
||||
+ * The above copyright notice and this permission notice shall be included in
|
||||
+ * all copies or substantial portions of the Software.
|
||||
+ *
|
||||
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
+ * SOFTWARE. */
|
||||
+
|
||||
+#include "includes.h"
|
||||
+#include "algo.h"
|
||||
+#include "dbutil.h"
|
||||
+#include "chachapoly.h"
|
||||
+
|
||||
+#if DROPBEAR_CHACHA20POLY1305
|
||||
+
|
||||
+#define CHACHA20_KEY_LEN 32
|
||||
+#define CHACHA20_BLOCKSIZE 8
|
||||
+#define POLY1305_KEY_LEN 32
|
||||
+#define POLY1305_TAG_LEN 16
|
||||
+
|
||||
+static const struct ltc_cipher_descriptor dummy = {.name = NULL};
|
||||
+
|
||||
+static const struct dropbear_hash dropbear_chachapoly_mac =
|
||||
+ {NULL, POLY1305_KEY_LEN, POLY1305_TAG_LEN};
|
||||
+
|
||||
+const struct dropbear_cipher dropbear_chachapoly =
|
||||
+ {&dummy, CHACHA20_KEY_LEN*2, CHACHA20_BLOCKSIZE};
|
||||
+
|
||||
+static int dropbear_chachapoly_start(int UNUSED(cipher), const unsigned char* UNUSED(IV),
|
||||
+ const unsigned char *key, int keylen,
|
||||
+ int UNUSED(num_rounds), dropbear_chachapoly_state *state) {
|
||||
+ int err;
|
||||
+
|
||||
+ TRACE2(("enter dropbear_chachapoly_start"))
|
||||
+
|
||||
+ if (keylen != CHACHA20_KEY_LEN*2) {
|
||||
+ return CRYPT_ERROR;
|
||||
+ }
|
||||
+
|
||||
+ if ((err = chacha_setup(&state->chacha, key,
|
||||
+ CHACHA20_KEY_LEN, 20)) != CRYPT_OK) {
|
||||
+ return err;
|
||||
+ }
|
||||
+
|
||||
+ if ((err = chacha_setup(&state->header, key + CHACHA20_KEY_LEN,
|
||||
+ CHACHA20_KEY_LEN, 20) != CRYPT_OK)) {
|
||||
+ return err;
|
||||
+ }
|
||||
+
|
||||
+ TRACE2(("leave dropbear_chachapoly_start"))
|
||||
+ return CRYPT_OK;
|
||||
+}
|
||||
+
|
||||
+static int dropbear_chachapoly_crypt(unsigned int seq,
|
||||
+ const unsigned char *in, unsigned char *out,
|
||||
+ unsigned long len, unsigned long taglen,
|
||||
+ dropbear_chachapoly_state *state, int direction) {
|
||||
+ poly1305_state poly;
|
||||
+ unsigned char seqbuf[8], key[POLY1305_KEY_LEN], tag[POLY1305_TAG_LEN];
|
||||
+ int err;
|
||||
+
|
||||
+ TRACE2(("enter dropbear_chachapoly_crypt"))
|
||||
+
|
||||
+ if (len < 4 || taglen != POLY1305_TAG_LEN) {
|
||||
+ return CRYPT_ERROR;
|
||||
+ }
|
||||
+
|
||||
+ STORE64H((uint64_t)seq, seqbuf);
|
||||
+ chacha_ivctr64(&state->chacha, seqbuf, sizeof(seqbuf), 0);
|
||||
+ if ((err = chacha_keystream(&state->chacha, key, sizeof(key))) != CRYPT_OK) {
|
||||
+ return err;
|
||||
+ }
|
||||
+
|
||||
+ poly1305_init(&poly, key, sizeof(key));
|
||||
+ if (direction == LTC_DECRYPT) {
|
||||
+ poly1305_process(&poly, in, len);
|
||||
+ poly1305_done(&poly, tag, &taglen);
|
||||
+ if (constant_time_memcmp(in + len, tag, taglen) != 0) {
|
||||
+ return CRYPT_ERROR;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ chacha_ivctr64(&state->header, seqbuf, sizeof(seqbuf), 0);
|
||||
+ if ((err = chacha_crypt(&state->header, in, 4, out)) != CRYPT_OK) {
|
||||
+ return err;
|
||||
+ }
|
||||
+
|
||||
+ chacha_ivctr64(&state->chacha, seqbuf, sizeof(seqbuf), 1);
|
||||
+ if ((err = chacha_crypt(&state->chacha, in + 4, len - 4, out + 4)) != CRYPT_OK) {
|
||||
+ return err;
|
||||
+ }
|
||||
+
|
||||
+ if (direction == LTC_ENCRYPT) {
|
||||
+ poly1305_process(&poly, out, len);
|
||||
+ poly1305_done(&poly, out + len, &taglen);
|
||||
+ }
|
||||
+
|
||||
+ TRACE2(("leave dropbear_chachapoly_crypt"))
|
||||
+ return CRYPT_OK;
|
||||
+}
|
||||
+
|
||||
+static int dropbear_chachapoly_getlength(unsigned int seq,
|
||||
+ const unsigned char *in, unsigned int *outlen,
|
||||
+ unsigned long len, dropbear_chachapoly_state *state) {
|
||||
+ unsigned char seqbuf[8], buf[4];
|
||||
+ int err;
|
||||
+
|
||||
+ TRACE2(("enter dropbear_chachapoly_getlength"))
|
||||
+
|
||||
+ if (len < sizeof(buf)) {
|
||||
+ return CRYPT_ERROR;
|
||||
+ }
|
||||
+
|
||||
+ STORE64H((uint64_t)seq, seqbuf);
|
||||
+ chacha_ivctr64(&state->header, seqbuf, sizeof(seqbuf), 0);
|
||||
+ if ((err = chacha_crypt(&state->header, in, sizeof(buf), buf)) != CRYPT_OK) {
|
||||
+ return err;
|
||||
+ }
|
||||
+
|
||||
+ LOAD32H(*outlen, buf);
|
||||
+
|
||||
+ TRACE2(("leave dropbear_chachapoly_getlength"))
|
||||
+ return CRYPT_OK;
|
||||
+}
|
||||
+
|
||||
+const struct dropbear_cipher_mode dropbear_mode_chachapoly =
|
||||
+ {(void *)dropbear_chachapoly_start, NULL, NULL,
|
||||
+ (void *)dropbear_chachapoly_crypt,
|
||||
+ (void *)dropbear_chachapoly_getlength, &dropbear_chachapoly_mac};
|
||||
+
|
||||
+#endif /* DROPBEAR_CHACHA20POLY1305 */
|
||||
diff --git a/chachapoly.h b/chachapoly.h
|
||||
new file mode 100644
|
||||
index 0000000..5a7c5b2
|
||||
--- /dev/null
|
||||
+++ b/chachapoly.h
|
||||
@@ -0,0 +1,44 @@
|
||||
+/*
|
||||
+ * Dropbear SSH
|
||||
+ *
|
||||
+ * Copyright (c) 2002,2003 Matt Johnston
|
||||
+ * Copyright (c) 2020 by Vladislav Grishenko
|
||||
+ * All rights reserved.
|
||||
+ *
|
||||
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
+ * of this software and associated documentation files (the "Software"), to deal
|
||||
+ * in the Software without restriction, including without limitation the rights
|
||||
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
+ * copies of the Software, and to permit persons to whom the Software is
|
||||
+ * furnished to do so, subject to the following conditions:
|
||||
+ *
|
||||
+ * The above copyright notice and this permission notice shall be included in
|
||||
+ * all copies or substantial portions of the Software.
|
||||
+ *
|
||||
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
+ * SOFTWARE. */
|
||||
+
|
||||
+#ifndef DROPBEAR_DROPBEAR_CHACHAPOLY_H_
|
||||
+#define DROPBEAR_DROPBEAR_CHACHAPOLY_H_
|
||||
+
|
||||
+#include "includes.h"
|
||||
+#include "algo.h"
|
||||
+
|
||||
+#if DROPBEAR_CHACHA20POLY1305
|
||||
+
|
||||
+typedef struct {
|
||||
+ chacha_state chacha;
|
||||
+ chacha_state header;
|
||||
+} dropbear_chachapoly_state;
|
||||
+
|
||||
+extern const struct dropbear_cipher dropbear_chachapoly;
|
||||
+extern const struct dropbear_cipher_mode dropbear_mode_chachapoly;
|
||||
+
|
||||
+#endif /* DROPBEAR_CHACHA20POLY1305 */
|
||||
+
|
||||
+#endif /* DROPBEAR_DROPBEAR_CHACHAPOLY_H_ */
|
||||
diff --git a/common-algo.c b/common-algo.c
|
||||
index 558aad2..1436456 100644
|
||||
--- a/common-algo.c
|
||||
+++ b/common-algo.c
|
||||
@@ -30,6 +30,7 @@
|
||||
#include "dh_groups.h"
|
||||
#include "ltc_prng.h"
|
||||
#include "ecc.h"
|
||||
+#include "chachapoly.h"
|
||||
|
||||
/* This file (algo.c) organises the ciphers which can be used, and is used to
|
||||
* decide which ciphers/hashes/compression/signing to use during key exchange*/
|
||||
@@ -86,11 +87,11 @@ const struct dropbear_cipher dropbear_nocipher =
|
||||
* about the symmetric_CBC vs symmetric_CTR cipher_state pointer */
|
||||
#if DROPBEAR_ENABLE_CBC_MODE
|
||||
const struct dropbear_cipher_mode dropbear_mode_cbc =
|
||||
- {(void*)cbc_start, (void*)cbc_encrypt, (void*)cbc_decrypt};
|
||||
+ {(void*)cbc_start, (void*)cbc_encrypt, (void*)cbc_decrypt, NULL, NULL, NULL};
|
||||
#endif /* DROPBEAR_ENABLE_CBC_MODE */
|
||||
|
||||
const struct dropbear_cipher_mode dropbear_mode_none =
|
||||
- {void_start, void_cipher, void_cipher};
|
||||
+ {void_start, void_cipher, void_cipher, NULL, NULL, NULL};
|
||||
|
||||
#if DROPBEAR_ENABLE_CTR_MODE
|
||||
/* a wrapper to make ctr_start and cbc_start look the same */
|
||||
@@ -101,7 +102,7 @@ static int dropbear_big_endian_ctr_start(int cipher,
|
||||
return ctr_start(cipher, IV, key, keylen, num_rounds, CTR_COUNTER_BIG_ENDIAN, ctr);
|
||||
}
|
||||
const struct dropbear_cipher_mode dropbear_mode_ctr =
|
||||
- {(void*)dropbear_big_endian_ctr_start, (void*)ctr_encrypt, (void*)ctr_decrypt};
|
||||
+ {(void*)dropbear_big_endian_ctr_start, (void*)ctr_encrypt, (void*)ctr_decrypt, NULL, NULL, NULL};
|
||||
#endif /* DROPBEAR_ENABLE_CTR_MODE */
|
||||
|
||||
/* Mapping of ssh hashes to libtomcrypt hashes, including keysize etc.
|
||||
@@ -137,6 +138,10 @@ const struct dropbear_hash dropbear_nohash =
|
||||
* that is also supported by the server will get used. */
|
||||
|
||||
algo_type sshciphers[] = {
|
||||
+#if DROPBEAR_CHACHA20POLY1305
|
||||
+ {"chacha20-poly1305@openssh.com", 0, &dropbear_chachapoly, 1, &dropbear_mode_chachapoly},
|
||||
+#endif
|
||||
+
|
||||
#if DROPBEAR_ENABLE_CTR_MODE
|
||||
#if DROPBEAR_AES128
|
||||
{"aes128-ctr", 0, &dropbear_aes128, 1, &dropbear_mode_ctr},
|
||||
diff --git a/common-kex.c b/common-kex.c
|
||||
index 16b7e27..5e2923f 100644
|
||||
--- a/common-kex.c
|
||||
+++ b/common-kex.c
|
||||
@@ -329,9 +329,12 @@ static void gen_new_keys() {
|
||||
hashkeys(S2C_key, sizeof(S2C_key), &hs, 'D');
|
||||
|
||||
if (ses.newkeys->recv.algo_crypt->cipherdesc != NULL) {
|
||||
- int recv_cipher = find_cipher(ses.newkeys->recv.algo_crypt->cipherdesc->name);
|
||||
- if (recv_cipher < 0)
|
||||
- dropbear_exit("Crypto error");
|
||||
+ int recv_cipher = -1;
|
||||
+ if (ses.newkeys->recv.algo_crypt->cipherdesc->name != NULL) {
|
||||
+ recv_cipher = find_cipher(ses.newkeys->recv.algo_crypt->cipherdesc->name);
|
||||
+ if (recv_cipher < 0)
|
||||
+ dropbear_exit("Crypto error");
|
||||
+ }
|
||||
if (ses.newkeys->recv.crypt_mode->start(recv_cipher,
|
||||
recv_IV, recv_key,
|
||||
ses.newkeys->recv.algo_crypt->keysize, 0,
|
||||
@@ -341,9 +344,12 @@ static void gen_new_keys() {
|
||||
}
|
||||
|
||||
if (ses.newkeys->trans.algo_crypt->cipherdesc != NULL) {
|
||||
- int trans_cipher = find_cipher(ses.newkeys->trans.algo_crypt->cipherdesc->name);
|
||||
- if (trans_cipher < 0)
|
||||
- dropbear_exit("Crypto error");
|
||||
+ int trans_cipher = -1;
|
||||
+ if (ses.newkeys->trans.algo_crypt->cipherdesc->name != NULL) {
|
||||
+ trans_cipher = find_cipher(ses.newkeys->trans.algo_crypt->cipherdesc->name);
|
||||
+ if (trans_cipher < 0)
|
||||
+ dropbear_exit("Crypto error");
|
||||
+ }
|
||||
if (ses.newkeys->trans.crypt_mode->start(trans_cipher,
|
||||
trans_IV, trans_key,
|
||||
ses.newkeys->trans.algo_crypt->keysize, 0,
|
||||
@@ -868,19 +874,29 @@ static void read_kex_algos() {
|
||||
|
||||
/* mac_algorithms_client_to_server */
|
||||
c2s_hash_algo = buf_match_algo(ses.payload, sshhashes, NULL, NULL);
|
||||
+#if DROPBEAR_AEAD_MODE
|
||||
+ if (((struct dropbear_cipher_mode*)c2s_cipher_algo->mode)->aead_crypt != NULL) {
|
||||
+ c2s_hash_algo = NULL;
|
||||
+ } else
|
||||
+#endif
|
||||
if (c2s_hash_algo == NULL) {
|
||||
erralgo = "mac c->s";
|
||||
goto error;
|
||||
}
|
||||
- TRACE(("hash c2s is %s", c2s_hash_algo->name))
|
||||
+ TRACE(("hash c2s is %s", c2s_hash_algo ? c2s_hash_algo->name : "<implicit>"))
|
||||
|
||||
/* mac_algorithms_server_to_client */
|
||||
s2c_hash_algo = buf_match_algo(ses.payload, sshhashes, NULL, NULL);
|
||||
+#if DROPBEAR_AEAD_MODE
|
||||
+ if (((struct dropbear_cipher_mode*)s2c_cipher_algo->mode)->aead_crypt != NULL) {
|
||||
+ s2c_hash_algo = NULL;
|
||||
+ } else
|
||||
+#endif
|
||||
if (s2c_hash_algo == NULL) {
|
||||
erralgo = "mac s->c";
|
||||
goto error;
|
||||
}
|
||||
- TRACE(("hash s2c is %s", s2c_hash_algo->name))
|
||||
+ TRACE(("hash s2c is %s", s2c_hash_algo ? s2c_hash_algo->name : "<implicit>"))
|
||||
|
||||
/* compression_algorithms_client_to_server */
|
||||
c2s_comp_algo = buf_match_algo(ses.payload, ses.compress_algos, NULL, NULL);
|
||||
@@ -925,8 +941,14 @@ static void read_kex_algos() {
|
||||
ses.newkeys->trans.crypt_mode =
|
||||
(struct dropbear_cipher_mode*)c2s_cipher_algo->mode;
|
||||
ses.newkeys->recv.algo_mac =
|
||||
+#if DROPBEAR_AEAD_MODE
|
||||
+ s2c_hash_algo == NULL ? ses.newkeys->recv.crypt_mode->aead_mac :
|
||||
+#endif
|
||||
(struct dropbear_hash*)s2c_hash_algo->data;
|
||||
ses.newkeys->trans.algo_mac =
|
||||
+#if DROPBEAR_AEAD_MODE
|
||||
+ c2s_hash_algo == NULL ? ses.newkeys->trans.crypt_mode->aead_mac :
|
||||
+#endif
|
||||
(struct dropbear_hash*)c2s_hash_algo->data;
|
||||
ses.newkeys->recv.algo_comp = s2c_comp_algo->val;
|
||||
ses.newkeys->trans.algo_comp = c2s_comp_algo->val;
|
||||
@@ -941,8 +963,14 @@ static void read_kex_algos() {
|
||||
ses.newkeys->trans.crypt_mode =
|
||||
(struct dropbear_cipher_mode*)s2c_cipher_algo->mode;
|
||||
ses.newkeys->recv.algo_mac =
|
||||
+#if DROPBEAR_AEAD_MODE
|
||||
+ c2s_hash_algo == NULL ? ses.newkeys->recv.crypt_mode->aead_mac :
|
||||
+#endif
|
||||
(struct dropbear_hash*)c2s_hash_algo->data;
|
||||
ses.newkeys->trans.algo_mac =
|
||||
+#if DROPBEAR_AEAD_MODE
|
||||
+ s2c_hash_algo == NULL ? ses.newkeys->trans.crypt_mode->aead_mac :
|
||||
+#endif
|
||||
(struct dropbear_hash*)s2c_hash_algo->data;
|
||||
ses.newkeys->recv.algo_comp = c2s_comp_algo->val;
|
||||
ses.newkeys->trans.algo_comp = s2c_comp_algo->val;
|
||||
diff --git a/default_options.h b/default_options.h
|
||||
index bafbb07..1a2ab10 100644
|
||||
--- a/default_options.h
|
||||
+++ b/default_options.h
|
||||
@@ -99,6 +99,12 @@ IMPORTANT: Some options will require "make clean" after changes */
|
||||
* and forwards compatibility */
|
||||
#define DROPBEAR_ENABLE_CTR_MODE 1
|
||||
|
||||
+/* Enable Chacha20-Poly1305 authenticated encryption mode. This is
|
||||
+ * generally faster than AES256 on CPU w/o dedicated AES instructions,
|
||||
+ * having the same key size.
|
||||
+ * Compiling in will add ~5,5kB to binary size on x86-64 */
|
||||
+#define DROPBEAR_CHACHA20POLY1305 1
|
||||
+
|
||||
/* Message integrity. sha2-256 is recommended as a default,
|
||||
sha1 for compatibility */
|
||||
#define DROPBEAR_SHA1_HMAC 1
|
||||
diff --git a/libtomcrypt/src/headers/tomcrypt_dropbear.h b/libtomcrypt/src/headers/tomcrypt_dropbear.h
|
||||
index b0ce45b..59960e5 100644
|
||||
--- a/libtomcrypt/src/headers/tomcrypt_dropbear.h
|
||||
+++ b/libtomcrypt/src/headers/tomcrypt_dropbear.h
|
||||
@@ -35,6 +35,10 @@
|
||||
#define LTC_CTR_MODE
|
||||
#endif
|
||||
|
||||
+#if DROPBEAR_CHACHA20POLY1305
|
||||
+#define LTC_CHACHA
|
||||
+#define LTC_POLY1305
|
||||
+#endif
|
||||
|
||||
#if DROPBEAR_SHA512
|
||||
#define LTC_SHA512
|
||||
diff --git a/packet.c b/packet.c
|
||||
index 9fda0d6..0454726 100644
|
||||
--- a/packet.c
|
||||
+++ b/packet.c
|
||||
@@ -215,7 +215,7 @@ static int read_packet_init() {
|
||||
|
||||
unsigned int maxlen;
|
||||
int slen;
|
||||
- unsigned int len;
|
||||
+ unsigned int len, plen;
|
||||
unsigned int blocksize;
|
||||
unsigned int macsize;
|
||||
|
||||
@@ -254,21 +254,35 @@ static int read_packet_init() {
|
||||
/* now we have the first block, need to get packet length, so we decrypt
|
||||
* the first block (only need first 4 bytes) */
|
||||
buf_setpos(ses.readbuf, 0);
|
||||
- if (ses.keys->recv.crypt_mode->decrypt(buf_getptr(ses.readbuf, blocksize),
|
||||
- buf_getwriteptr(ses.readbuf, blocksize),
|
||||
- blocksize,
|
||||
- &ses.keys->recv.cipher_state) != CRYPT_OK) {
|
||||
- dropbear_exit("Error decrypting");
|
||||
+#if DROPBEAR_AEAD_MODE
|
||||
+ if (ses.keys->recv.crypt_mode->aead_crypt) {
|
||||
+ if (ses.keys->recv.crypt_mode->aead_getlength(ses.recvseq,
|
||||
+ buf_getptr(ses.readbuf, blocksize), &plen,
|
||||
+ blocksize,
|
||||
+ &ses.keys->recv.cipher_state) != CRYPT_OK) {
|
||||
+ dropbear_exit("Error decrypting");
|
||||
+ }
|
||||
+ len = plen + 4 + macsize;
|
||||
+ } else
|
||||
+#endif
|
||||
+ {
|
||||
+ if (ses.keys->recv.crypt_mode->decrypt(buf_getptr(ses.readbuf, blocksize),
|
||||
+ buf_getwriteptr(ses.readbuf, blocksize),
|
||||
+ blocksize,
|
||||
+ &ses.keys->recv.cipher_state) != CRYPT_OK) {
|
||||
+ dropbear_exit("Error decrypting");
|
||||
+ }
|
||||
+ plen = buf_getint(ses.readbuf) + 4;
|
||||
+ len = plen + macsize;
|
||||
}
|
||||
- len = buf_getint(ses.readbuf) + 4 + macsize;
|
||||
|
||||
TRACE2(("packet size is %u, block %u mac %u", len, blocksize, macsize))
|
||||
|
||||
|
||||
/* check packet length */
|
||||
if ((len > RECV_MAX_PACKET_LEN) ||
|
||||
- (len < MIN_PACKET_LEN + macsize) ||
|
||||
- ((len - macsize) % blocksize != 0)) {
|
||||
+ (plen < blocksize) ||
|
||||
+ (plen % blocksize != 0)) {
|
||||
dropbear_exit("Integrity error (bad packet size %u)", len);
|
||||
}
|
||||
|
||||
@@ -294,23 +308,42 @@ void decrypt_packet() {
|
||||
|
||||
ses.kexstate.datarecv += ses.readbuf->len;
|
||||
|
||||
- /* we've already decrypted the first blocksize in read_packet_init */
|
||||
- buf_setpos(ses.readbuf, blocksize);
|
||||
-
|
||||
- /* decrypt it in-place */
|
||||
- len = ses.readbuf->len - macsize - ses.readbuf->pos;
|
||||
- if (ses.keys->recv.crypt_mode->decrypt(
|
||||
- buf_getptr(ses.readbuf, len),
|
||||
- buf_getwriteptr(ses.readbuf, len),
|
||||
- len,
|
||||
- &ses.keys->recv.cipher_state) != CRYPT_OK) {
|
||||
- dropbear_exit("Error decrypting");
|
||||
- }
|
||||
- buf_incrpos(ses.readbuf, len);
|
||||
+#if DROPBEAR_AEAD_MODE
|
||||
+ if (ses.keys->recv.crypt_mode->aead_crypt) {
|
||||
+ /* first blocksize is not decrypted yet */
|
||||
+ buf_setpos(ses.readbuf, 0);
|
||||
+
|
||||
+ /* decrypt it in-place */
|
||||
+ len = ses.readbuf->len - macsize - ses.readbuf->pos;
|
||||
+ if (ses.keys->recv.crypt_mode->aead_crypt(ses.recvseq,
|
||||
+ buf_getptr(ses.readbuf, len + macsize),
|
||||
+ buf_getwriteptr(ses.readbuf, len),
|
||||
+ len, macsize,
|
||||
+ &ses.keys->recv.cipher_state, LTC_DECRYPT) != CRYPT_OK) {
|
||||
+ dropbear_exit("Error decrypting");
|
||||
+ }
|
||||
+ buf_incrpos(ses.readbuf, len);
|
||||
+ } else
|
||||
+#endif
|
||||
+ {
|
||||
+ /* we've already decrypted the first blocksize in read_packet_init */
|
||||
+ buf_setpos(ses.readbuf, blocksize);
|
||||
+
|
||||
+ /* decrypt it in-place */
|
||||
+ len = ses.readbuf->len - macsize - ses.readbuf->pos;
|
||||
+ if (ses.keys->recv.crypt_mode->decrypt(
|
||||
+ buf_getptr(ses.readbuf, len),
|
||||
+ buf_getwriteptr(ses.readbuf, len),
|
||||
+ len,
|
||||
+ &ses.keys->recv.cipher_state) != CRYPT_OK) {
|
||||
+ dropbear_exit("Error decrypting");
|
||||
+ }
|
||||
+ buf_incrpos(ses.readbuf, len);
|
||||
|
||||
- /* check the hmac */
|
||||
- if (checkmac() != DROPBEAR_SUCCESS) {
|
||||
- dropbear_exit("Integrity error");
|
||||
+ /* check the hmac */
|
||||
+ if (checkmac() != DROPBEAR_SUCCESS) {
|
||||
+ dropbear_exit("Integrity error");
|
||||
+ }
|
||||
}
|
||||
|
||||
/* get padding length */
|
||||
@@ -557,9 +590,16 @@ void encrypt_packet() {
|
||||
buf_setpos(ses.writepayload, 0);
|
||||
buf_setlen(ses.writepayload, 0);
|
||||
|
||||
- /* length of padding - packet length must be a multiple of blocksize,
|
||||
- * with a minimum of 4 bytes of padding */
|
||||
- padlen = blocksize - (writebuf->len) % blocksize;
|
||||
+ /* length of padding - packet length excluding the packetlength uint32
|
||||
+ * field in aead mode must be a multiple of blocksize, with a minimum of
|
||||
+ * 4 bytes of padding */
|
||||
+ len = writebuf->len;
|
||||
+#if DROPBEAR_AEAD_MODE
|
||||
+ if (ses.keys->trans.crypt_mode->aead_crypt) {
|
||||
+ len -= 4;
|
||||
+ }
|
||||
+#endif
|
||||
+ padlen = blocksize - len % blocksize;
|
||||
if (padlen < 4) {
|
||||
padlen += blocksize;
|
||||
}
|
||||
@@ -579,23 +619,42 @@ void encrypt_packet() {
|
||||
buf_incrlen(writebuf, padlen);
|
||||
genrandom(buf_getptr(writebuf, padlen), padlen);
|
||||
|
||||
- make_mac(ses.transseq, &ses.keys->trans, writebuf, writebuf->len, mac_bytes);
|
||||
+#if DROPBEAR_AEAD_MODE
|
||||
+ if (ses.keys->trans.crypt_mode->aead_crypt) {
|
||||
+ /* do the actual encryption, in-place */
|
||||
+ buf_setpos(writebuf, 0);
|
||||
+ /* encrypt it in-place*/
|
||||
+ len = writebuf->len;
|
||||
+ buf_incrlen(writebuf, mac_size);
|
||||
+ if (ses.keys->trans.crypt_mode->aead_crypt(ses.transseq,
|
||||
+ buf_getptr(writebuf, len),
|
||||
+ buf_getwriteptr(writebuf, len + mac_size),
|
||||
+ len, mac_size,
|
||||
+ &ses.keys->trans.cipher_state, LTC_ENCRYPT) != CRYPT_OK) {
|
||||
+ dropbear_exit("Error encrypting");
|
||||
+ }
|
||||
+ buf_incrpos(writebuf, len + mac_size);
|
||||
+ } else
|
||||
+#endif
|
||||
+ {
|
||||
+ make_mac(ses.transseq, &ses.keys->trans, writebuf, writebuf->len, mac_bytes);
|
||||
+
|
||||
+ /* do the actual encryption, in-place */
|
||||
+ buf_setpos(writebuf, 0);
|
||||
+ /* encrypt it in-place*/
|
||||
+ len = writebuf->len;
|
||||
+ if (ses.keys->trans.crypt_mode->encrypt(
|
||||
+ buf_getptr(writebuf, len),
|
||||
+ buf_getwriteptr(writebuf, len),
|
||||
+ len,
|
||||
+ &ses.keys->trans.cipher_state) != CRYPT_OK) {
|
||||
+ dropbear_exit("Error encrypting");
|
||||
+ }
|
||||
+ buf_incrpos(writebuf, len);
|
||||
|
||||
- /* do the actual encryption, in-place */
|
||||
- buf_setpos(writebuf, 0);
|
||||
- /* encrypt it in-place*/
|
||||
- len = writebuf->len;
|
||||
- if (ses.keys->trans.crypt_mode->encrypt(
|
||||
- buf_getptr(writebuf, len),
|
||||
- buf_getwriteptr(writebuf, len),
|
||||
- len,
|
||||
- &ses.keys->trans.cipher_state) != CRYPT_OK) {
|
||||
- dropbear_exit("Error encrypting");
|
||||
+ /* stick the MAC on it */
|
||||
+ buf_putbytes(writebuf, mac_bytes, mac_size);
|
||||
}
|
||||
- buf_incrpos(writebuf, len);
|
||||
-
|
||||
- /* stick the MAC on it */
|
||||
- buf_putbytes(writebuf, mac_bytes, mac_size);
|
||||
|
||||
/* Update counts */
|
||||
ses.kexstate.datatrans += writebuf->len;
|
||||
diff --git a/session.h b/session.h
|
||||
index e436882..a8f8914 100644
|
||||
--- a/session.h
|
||||
+++ b/session.h
|
||||
@@ -41,6 +41,7 @@
|
||||
#include "chansession.h"
|
||||
#include "dbutil.h"
|
||||
#include "netio.h"
|
||||
+#include "chachapoly.h"
|
||||
|
||||
void common_session_init(int sock_in, int sock_out);
|
||||
void session_loop(void(*loophandler)(void)) ATTRIB_NORETURN;
|
||||
@@ -80,6 +81,9 @@ struct key_context_directional {
|
||||
symmetric_CBC cbc;
|
||||
#if DROPBEAR_ENABLE_CTR_MODE
|
||||
symmetric_CTR ctr;
|
||||
+#endif
|
||||
+#if DROPBEAR_CHACHA20POLY1305
|
||||
+ dropbear_chachapoly_state chachapoly;
|
||||
#endif
|
||||
} cipher_state;
|
||||
unsigned char mackey[MAX_MAC_LEN];
|
||||
diff --git a/sysoptions.h b/sysoptions.h
|
||||
index 2c27caf..2432779 100644
|
||||
--- a/sysoptions.h
|
||||
+++ b/sysoptions.h
|
||||
@@ -92,7 +92,11 @@
|
||||
#define MD5_HASH_SIZE 16
|
||||
#define MAX_HASH_SIZE 64 /* sha512 */
|
||||
|
||||
+#if DROPBEAR_CHACHA20POLY1305
|
||||
+#define MAX_KEY_LEN 64 /* 2 x 256 bits for chacha20 */
|
||||
+#else
|
||||
#define MAX_KEY_LEN 32 /* 256 bits for aes256 etc */
|
||||
+#endif
|
||||
#define MAX_IV_LEN 20 /* must be same as max blocksize, */
|
||||
|
||||
#if DROPBEAR_SHA2_512_HMAC
|
||||
@@ -207,6 +211,8 @@ If you test it please contact the Dropbear author */
|
||||
|
||||
#define DROPBEAR_TWOFISH ((DROPBEAR_TWOFISH256) || (DROPBEAR_TWOFISH128))
|
||||
|
||||
+#define DROPBEAR_AEAD_MODE ((DROPBEAR_CHACHA20POLY1305))
|
||||
+
|
||||
#define DROPBEAR_CLI_ANYTCPFWD ((DROPBEAR_CLI_REMOTETCPFWD) || (DROPBEAR_CLI_LOCALTCPFWD))
|
||||
|
||||
#define DROPBEAR_TCP_ACCEPT ((DROPBEAR_CLI_LOCALTCPFWD) || (DROPBEAR_SVR_REMOTETCPFWD))
|
||||
@@ -249,7 +255,7 @@ If you test it please contact the Dropbear author */
|
||||
#endif
|
||||
|
||||
#if !(DROPBEAR_AES128 || DROPBEAR_3DES || DROPBEAR_AES256 || DROPBEAR_BLOWFISH \
|
||||
- || DROPBEAR_TWOFISH256 || DROPBEAR_TWOFISH128)
|
||||
+ || DROPBEAR_TWOFISH256 || DROPBEAR_TWOFISH128 || DROPBEAR_CHACHA20POLY1305)
|
||||
#error "At least one encryption algorithm must be enabled. AES128 is recommended."
|
||||
#endif
|
||||
|
||||
--
|
||||
2.17.1
|
||||
|
@ -13,9 +13,9 @@ PKG_RELEASE:=5
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL:=https://github.com/paulusmack/ppp
|
||||
PKG_SOURCE_DATE:=2020-03-21
|
||||
PKG_SOURCE_VERSION:=41a73232c16e9a063cfe3fad461c94af3f450f6c
|
||||
PKG_MIRROR_HASH:=7b966003b7c1bec95156159119b52583778405f0229dc7590911fa93f031552b
|
||||
PKG_SOURCE_DATE:=2020-05-25
|
||||
PKG_SOURCE_VERSION:=ddd57c279f467e18c4fb3a661f21a069a5a37a1f
|
||||
PKG_MIRROR_HASH:=aac65e65dd25eaf8978a7a0b3258c863d90e29e247dd33d95276c0c189bcd424
|
||||
PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
|
||||
PKG_LICENSE:=BSD-4-Clause
|
||||
PKG_CPE_ID:=cpe:/a:samba:ppp
|
||||
|
@ -85,7 +85,7 @@ Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
||||
"Enable multilink operation", OPT_PRIO | 1 },
|
||||
--- a/pppd/pppd.h
|
||||
+++ b/pppd/pppd.h
|
||||
@@ -334,6 +334,8 @@ extern int connect_delay; /* Time to del
|
||||
@@ -335,6 +335,8 @@ extern int connect_delay; /* Time to del
|
||||
extern int max_data_rate; /* max bytes/sec through charshunt */
|
||||
extern int req_unit; /* interface unit number to use */
|
||||
extern char req_ifname[MAXIFNAMELEN]; /* interface name to use */
|
||||
|
@ -161,7 +161,7 @@
|
||||
} else {
|
||||
--- a/pppd/pppd.h
|
||||
+++ b/pppd/pppd.h
|
||||
@@ -601,7 +601,7 @@ void demand_conf __P((void)); /* config
|
||||
@@ -602,7 +602,7 @@ void demand_conf __P((void)); /* config
|
||||
void demand_block __P((void)); /* set all NPs to queue up packets */
|
||||
void demand_unblock __P((void)); /* set all NPs to pass packets */
|
||||
void demand_discard __P((void)); /* set all NPs to discard packets */
|
||||
|
@ -137,7 +137,7 @@ Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
||||
.B disconnect \fIscript
|
||||
Execute the command specified by \fIscript\fR, by passing it to a
|
||||
shell, after
|
||||
@@ -746,7 +751,12 @@ disable both forms of hardware flow cont
|
||||
@@ -751,7 +756,12 @@ disable both forms of hardware flow cont
|
||||
.TP
|
||||
.B nodefaultroute
|
||||
Disable the \fIdefaultroute\fR option. The system administrator who
|
||||
@ -153,7 +153,7 @@ Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
||||
.B nodefaultroute6
|
||||
--- a/pppd/pppd.h
|
||||
+++ b/pppd/pppd.h
|
||||
@@ -683,7 +683,7 @@ int sif6addr __P((int, eui64_t, eui64_t
|
||||
@@ -684,7 +684,7 @@ int sif6addr __P((int, eui64_t, eui64_t
|
||||
int cif6addr __P((int, eui64_t, eui64_t));
|
||||
/* Remove an IPv6 address from i/f */
|
||||
#endif
|
||||
@ -292,7 +292,7 @@ Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
||||
}
|
||||
--- a/pppd/sys-solaris.c
|
||||
+++ b/pppd/sys-solaris.c
|
||||
@@ -2119,12 +2119,18 @@ cifaddr(u, o, h)
|
||||
@@ -2120,12 +2120,18 @@ cifaddr(u, o, h)
|
||||
* sifdefaultroute - assign a default route through the address given.
|
||||
*/
|
||||
int
|
||||
|
@ -84,7 +84,7 @@ Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
||||
}
|
||||
--- a/pppd/pppd.h
|
||||
+++ b/pppd/pppd.h
|
||||
@@ -336,6 +336,8 @@ extern int req_unit; /* interface unit n
|
||||
@@ -337,6 +337,8 @@ extern int req_unit; /* interface unit n
|
||||
extern char req_ifname[MAXIFNAMELEN]; /* interface name to use */
|
||||
extern char path_ipup[MAXPATHLEN]; /* pathname of ip-up script */
|
||||
extern char path_ipdown[MAXPATHLEN]; /* pathname of ip-down script */
|
||||
|
@ -1,56 +0,0 @@
|
||||
--- a/pppd/lcp.c
|
||||
+++ b/pppd/lcp.c
|
||||
@@ -72,6 +72,7 @@ static void lcp_delayed_up __P((void *))
|
||||
*/
|
||||
int lcp_echo_interval = 0; /* Interval between LCP echo-requests */
|
||||
int lcp_echo_fails = 0; /* Tolerance to unanswered echo-requests */
|
||||
+bool lcp_echo_adaptive = 0; /* request echo only if the link was idle */
|
||||
bool lax_recv = 0; /* accept control chars in asyncmap */
|
||||
bool noendpoint = 0; /* don't send/accept endpoint discriminator */
|
||||
|
||||
@@ -150,6 +151,8 @@ static option_t lcp_option_list[] = {
|
||||
OPT_PRIO },
|
||||
{ "lcp-echo-interval", o_int, &lcp_echo_interval,
|
||||
"Set time in seconds between LCP echo requests", OPT_PRIO },
|
||||
+ { "lcp-echo-adaptive", o_bool, &lcp_echo_adaptive,
|
||||
+ "Suppress LCP echo requests if traffic was received", 1 },
|
||||
{ "lcp-restart", o_int, &lcp_fsm[0].timeouttime,
|
||||
"Set time in seconds between LCP retransmissions", OPT_PRIO },
|
||||
{ "lcp-max-terminate", o_int, &lcp_fsm[0].maxtermtransmits,
|
||||
@@ -2330,6 +2333,22 @@ LcpSendEchoRequest (f)
|
||||
}
|
||||
}
|
||||
|
||||
+ /*
|
||||
+ * If adaptive echos have been enabled, only send the echo request if
|
||||
+ * no traffic was received since the last one.
|
||||
+ */
|
||||
+ if (lcp_echo_adaptive) {
|
||||
+ static unsigned int last_pkts_in = 0;
|
||||
+
|
||||
+ update_link_stats(f->unit);
|
||||
+ link_stats_valid = 0;
|
||||
+
|
||||
+ if (link_stats.pkts_in != last_pkts_in) {
|
||||
+ last_pkts_in = link_stats.pkts_in;
|
||||
+ return;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
/*
|
||||
* Make and send the echo request frame.
|
||||
*/
|
||||
--- a/pppd/pppd.8
|
||||
+++ b/pppd/pppd.8
|
||||
@@ -575,6 +575,11 @@ to 1) if the \fIproxyarp\fR option is us
|
||||
dynamic IP address option (i.e. set /proc/sys/net/ipv4/ip_dynaddr to
|
||||
1) in demand mode if the local address changes.
|
||||
.TP
|
||||
+.B lcp\-echo\-adaptive
|
||||
+If this option is used with the \fIlcp\-echo\-failure\fR option then
|
||||
+pppd will send LCP echo\-request frames only if no traffic was received
|
||||
+from the peer since the last echo\-request was sent.
|
||||
+.TP
|
||||
.B lcp\-echo\-failure \fIn
|
||||
If this option is given, pppd will presume the peer to be dead
|
||||
if \fIn\fR LCP echo\-requests are sent without receiving a valid LCP
|
@ -1,94 +0,0 @@
|
||||
pppd: Watch out for time warps
|
||||
|
||||
On many embedded systems there is no battery backed RTC and a proper system
|
||||
time only becomes available through NTP after establishing a connection.
|
||||
|
||||
When the clock suddenly jumps forward, the internal accounting (connect time)
|
||||
is confused resulting in unreliable data.
|
||||
|
||||
This patch implements periodic clock checking to look for time warps, if one
|
||||
is detected, the internal counters are adjusted accordingly.
|
||||
|
||||
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
||||
|
||||
--- a/pppd/main.c
|
||||
+++ b/pppd/main.c
|
||||
@@ -89,6 +89,7 @@
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
+#include <sys/sysinfo.h>
|
||||
|
||||
#include "pppd.h"
|
||||
#include "magic.h"
|
||||
@@ -226,6 +227,7 @@ static struct subprocess *children;
|
||||
|
||||
/* Prototypes for procedures local to this file. */
|
||||
|
||||
+static void check_time(void);
|
||||
static void setup_signals __P((void));
|
||||
static void create_pidfile __P((int pid));
|
||||
static void create_linkpidfile __P((int pid));
|
||||
@@ -525,6 +527,7 @@ main(argc, argv)
|
||||
info("Starting link");
|
||||
}
|
||||
|
||||
+ check_time();
|
||||
gettimeofday(&start_time, NULL);
|
||||
script_unsetenv("CONNECT_TIME");
|
||||
script_unsetenv("BYTES_SENT");
|
||||
@@ -1274,6 +1277,36 @@ struct callout {
|
||||
|
||||
static struct callout *callout = NULL; /* Callout list */
|
||||
static struct timeval timenow; /* Current time */
|
||||
+static long uptime_diff = 0;
|
||||
+static int uptime_diff_set = 0;
|
||||
+
|
||||
+static void check_time(void)
|
||||
+{
|
||||
+ long new_diff;
|
||||
+ struct timeval t;
|
||||
+ struct sysinfo i;
|
||||
+ struct callout *p;
|
||||
+
|
||||
+ gettimeofday(&t, NULL);
|
||||
+ sysinfo(&i);
|
||||
+ new_diff = t.tv_sec - i.uptime;
|
||||
+
|
||||
+ if (!uptime_diff_set) {
|
||||
+ uptime_diff = new_diff;
|
||||
+ uptime_diff_set = 1;
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ if ((new_diff - 5 > uptime_diff) || (new_diff + 5 < uptime_diff)) {
|
||||
+ /* system time has changed, update counters and timeouts */
|
||||
+ info("System time change detected.");
|
||||
+ start_time.tv_sec += new_diff - uptime_diff;
|
||||
+
|
||||
+ for (p = callout; p != NULL; p = p->c_next)
|
||||
+ p->c_time.tv_sec += new_diff - uptime_diff;
|
||||
+ }
|
||||
+ uptime_diff = new_diff;
|
||||
+}
|
||||
|
||||
/*
|
||||
* timeout - Schedule a timeout.
|
||||
@@ -1344,6 +1377,8 @@ calltimeout()
|
||||
{
|
||||
struct callout *p;
|
||||
|
||||
+ check_time();
|
||||
+
|
||||
while (callout != NULL) {
|
||||
p = callout;
|
||||
|
||||
@@ -1371,6 +1406,8 @@ timeleft(tvp)
|
||||
{
|
||||
if (callout == NULL)
|
||||
return NULL;
|
||||
+
|
||||
+ check_time();
|
||||
|
||||
gettimeofday(&timenow, NULL);
|
||||
tvp->tv_sec = callout->c_time.tv_sec - timenow.tv_sec;
|
@ -12,7 +12,7 @@ Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
||||
|
||||
--- a/pppd/main.c
|
||||
+++ b/pppd/main.c
|
||||
@@ -1055,7 +1055,8 @@ get_input()
|
||||
@@ -1052,7 +1052,8 @@ get_input()
|
||||
}
|
||||
notice("Modem hangup");
|
||||
hungup = 1;
|
||||
|
@ -7,7 +7,7 @@ Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
||||
|
||||
--- a/pppd/pppd.h
|
||||
+++ b/pppd/pppd.h
|
||||
@@ -325,7 +325,6 @@ extern int holdoff; /* Dead time before
|
||||
@@ -326,7 +326,6 @@ extern int holdoff; /* Dead time before
|
||||
extern bool holdoff_specified; /* true if user gave a holdoff value */
|
||||
extern bool notty; /* Stdin/out is not a tty */
|
||||
extern char *pty_socket; /* Socket to connect to pty */
|
||||
|
@ -7,7 +7,7 @@ Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
||||
|
||||
--- a/pppd/main.c
|
||||
+++ b/pppd/main.c
|
||||
@@ -886,14 +886,17 @@ struct protocol_list {
|
||||
@@ -883,14 +883,17 @@ struct protocol_list {
|
||||
const char *name;
|
||||
} protocol_list[] = {
|
||||
{ 0x21, "IP" },
|
||||
@ -25,7 +25,7 @@ Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
||||
{ 0x33, "Stream Protocol ST-II" },
|
||||
{ 0x35, "Banyan Vines" },
|
||||
{ 0x39, "AppleTalk EDDP" },
|
||||
@@ -907,8 +910,11 @@ struct protocol_list {
|
||||
@@ -904,8 +907,11 @@ struct protocol_list {
|
||||
{ 0x49, "Serial Data Transport Protocol (PPP-SDTP)" },
|
||||
{ 0x4b, "SNA over 802.2" },
|
||||
{ 0x4d, "SNA" },
|
||||
@ -37,7 +37,7 @@ Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
||||
{ 0x53, "Encryption" },
|
||||
{ 0x55, "Individual Link Encryption" },
|
||||
{ 0x57, "IPv6" },
|
||||
@@ -919,12 +925,15 @@ struct protocol_list {
|
||||
@@ -916,12 +922,15 @@ struct protocol_list {
|
||||
{ 0x65, "RTP IPHC Compressed non-TCP" },
|
||||
{ 0x67, "RTP IPHC Compressed UDP 8" },
|
||||
{ 0x69, "RTP IPHC Compressed RTP 8" },
|
||||
@ -53,7 +53,7 @@ Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
||||
{ 0x0203, "IBM Source Routing BPDU" },
|
||||
{ 0x0205, "DEC LANBridge100 Spanning Tree" },
|
||||
{ 0x0207, "Cisco Discovery Protocol" },
|
||||
@@ -936,15 +945,19 @@ struct protocol_list {
|
||||
@@ -933,15 +942,19 @@ struct protocol_list {
|
||||
{ 0x0231, "Luxcom" },
|
||||
{ 0x0233, "Sigma Network Systems" },
|
||||
{ 0x0235, "Apple Client Server Protocol" },
|
||||
@ -73,7 +73,7 @@ Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
||||
{ 0x4001, "Cray Communications Control Protocol" },
|
||||
{ 0x4003, "CDPD Mobile Network Registration Protocol" },
|
||||
{ 0x4005, "Expand accelerator protocol" },
|
||||
@@ -955,8 +968,10 @@ struct protocol_list {
|
||||
@@ -952,8 +965,10 @@ struct protocol_list {
|
||||
{ 0x4023, "RefTek Protocol" },
|
||||
{ 0x4025, "Fibre Channel" },
|
||||
{ 0x4027, "EMIT Protocols" },
|
||||
@ -84,7 +84,7 @@ Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
||||
{ 0x8023, "OSI Network Layer Control Protocol" },
|
||||
{ 0x8025, "Xerox NS IDP Control Protocol" },
|
||||
{ 0x8027, "DECnet Phase IV Control Protocol" },
|
||||
@@ -965,7 +980,9 @@ struct protocol_list {
|
||||
@@ -962,7 +977,9 @@ struct protocol_list {
|
||||
{ 0x8031, "Bridging NCP" },
|
||||
{ 0x8033, "Stream Protocol Control Protocol" },
|
||||
{ 0x8035, "Banyan Vines Control Protocol" },
|
||||
@ -94,7 +94,7 @@ Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
||||
{ 0x803f, "NETBIOS Framing Control Protocol" },
|
||||
{ 0x8041, "Cisco Systems Control Protocol" },
|
||||
{ 0x8043, "Ascom Timeplex" },
|
||||
@@ -974,18 +991,24 @@ struct protocol_list {
|
||||
@@ -971,18 +988,24 @@ struct protocol_list {
|
||||
{ 0x8049, "Serial Data Control Protocol (PPP-SDCP)" },
|
||||
{ 0x804b, "SNA over 802.2 Control Protocol" },
|
||||
{ 0x804d, "SNA Control Protocol" },
|
||||
@ -119,7 +119,7 @@ Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
||||
{ 0x8207, "Cisco Discovery Protocol Control" },
|
||||
{ 0x8209, "Netcs Twin Routing" },
|
||||
{ 0x820b, "STP - Control Protocol" },
|
||||
@@ -994,24 +1017,29 @@ struct protocol_list {
|
||||
@@ -991,24 +1014,29 @@ struct protocol_list {
|
||||
{ 0x8281, "MPLSCP" },
|
||||
{ 0x8285, "IEEE p1284.4 standard - Protocol Control" },
|
||||
{ 0x8287, "ETSI TETRA TNP1 Control Protocol" },
|
||||
|
@ -17,7 +17,7 @@ This reverts commit 3c7b86229f7bd2600d74db14b1fe5b3896be3875.
|
||||
+++ b/pppd/Makefile.linux
|
||||
@@ -35,10 +35,10 @@ endif
|
||||
COPTS = -O2 -pipe -Wall -g
|
||||
LIBS =
|
||||
LIBS = -lrt
|
||||
|
||||
-# Uncomment the next line to include support for Microsoft's
|
||||
+# Uncomment the next 2 lines to include support for Microsoft's
|
||||
|
@ -79,7 +79,7 @@ static struct gpio_keys_button tl_mr3020_gpio_keys[] __initdata = {
|
||||
},
|
||||
{
|
||||
.desc = "sw1",
|
||||
.type = EV_KEY,
|
||||
.type = EV_SW,
|
||||
.code = BTN_0,
|
||||
.debounce_interval = TL_MR3020_KEYS_DEBOUNCE_INTERVAL,
|
||||
.gpio = TL_MR3020_GPIO_BTN_SW1,
|
||||
@ -87,7 +87,7 @@ static struct gpio_keys_button tl_mr3020_gpio_keys[] __initdata = {
|
||||
},
|
||||
{
|
||||
.desc = "sw2",
|
||||
.type = EV_KEY,
|
||||
.type = EV_SW,
|
||||
.code = BTN_1,
|
||||
.debounce_interval = TL_MR3020_KEYS_DEBOUNCE_INTERVAL,
|
||||
.gpio = TL_MR3020_GPIO_BTN_SW2,
|
||||
|
@ -24,7 +24,7 @@
|
||||
#include "machtypes.h"
|
||||
|
||||
#define TL_WR802N_GPIO_LED_SYSTEM 13
|
||||
#define TL_WR802N_GPIO_BTN_RESET 11
|
||||
#define TL_WR802N_GPIO_BTN_RESET 12
|
||||
|
||||
#define TL_WR802N_KEYS_POLL_INTERVAL 20 /* msecs */
|
||||
#define TL_WR802N_KEYS_DEBOUNCE_INTERVAL (3 * TL_WR802N_KEYS_POLL_INTERVAL)
|
||||
@ -61,7 +61,7 @@ static struct gpio_keys_button tl_wr802n_gpio_keys[] __initdata = {
|
||||
.code = KEY_RESTART,
|
||||
.debounce_interval = TL_WR802N_KEYS_DEBOUNCE_INTERVAL,
|
||||
.gpio = TL_WR802N_GPIO_BTN_RESET,
|
||||
.active_low = 0,
|
||||
.active_low = 1,
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -12,29 +12,31 @@
|
||||
|
||||
aliases {
|
||||
serial0 = &uart;
|
||||
led-boot = &led_wlan;
|
||||
led-failsafe = &led_wlan;
|
||||
led-upgrade = &led_wlan;
|
||||
led-boot = &led_power;
|
||||
led-failsafe = &led_power;
|
||||
led-running = &led_power;
|
||||
led-upgrade = &led_power;
|
||||
label-mac-device = ð0;
|
||||
};
|
||||
|
||||
leds {
|
||||
compatible = "gpio-leds";
|
||||
|
||||
led_wlan: wlan {
|
||||
wlan {
|
||||
label = "gl-ar150:orange:wlan";
|
||||
gpios = <&gpio 0 GPIO_ACTIVE_HIGH>;
|
||||
linux,default-trigger = "phy0tpt";
|
||||
};
|
||||
|
||||
lan {
|
||||
label = "gl-ar150:green:lan";
|
||||
configurable {
|
||||
label = "gl-ar150:green:configurable";
|
||||
gpios = <&gpio 13 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
|
||||
wan {
|
||||
label = "gl-ar150:green:wan";
|
||||
led_power: power {
|
||||
label = "gl-ar150:green:power";
|
||||
gpios = <&gpio 15 GPIO_ACTIVE_HIGH>;
|
||||
default-state = "on";
|
||||
};
|
||||
};
|
||||
|
||||
|
9
target/linux/ath79/dts/qca9533_tplink_tl-wr802n-v1.dts
Normal file
9
target/linux/ath79/dts/qca9533_tplink_tl-wr802n-v1.dts
Normal file
@ -0,0 +1,9 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
|
||||
/dts-v1/;
|
||||
|
||||
#include "qca9533_tplink_tl-wr802n.dtsi"
|
||||
|
||||
/ {
|
||||
model = "TP-Link TL-WR802N v1";
|
||||
compatible = "tplink,tl-wr802n-v1", "qca,qca9533";
|
||||
};
|
9
target/linux/ath79/dts/qca9533_tplink_tl-wr802n-v2.dts
Normal file
9
target/linux/ath79/dts/qca9533_tplink_tl-wr802n-v2.dts
Normal file
@ -0,0 +1,9 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
|
||||
/dts-v1/;
|
||||
|
||||
#include "qca9533_tplink_tl-wr802n.dtsi"
|
||||
|
||||
/ {
|
||||
model = "TP-Link TL-WR802N v2";
|
||||
compatible = "tplink,tl-wr802n-v2", "qca,qca9533";
|
||||
};
|
99
target/linux/ath79/dts/qca9533_tplink_tl-wr802n.dtsi
Normal file
99
target/linux/ath79/dts/qca9533_tplink_tl-wr802n.dtsi
Normal file
@ -0,0 +1,99 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
|
||||
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
#include <dt-bindings/input/input.h>
|
||||
|
||||
#include "qca953x.dtsi"
|
||||
|
||||
/ {
|
||||
chosen {
|
||||
bootargs = "console=ttyS0,115200n8";
|
||||
};
|
||||
|
||||
aliases {
|
||||
led-boot = &led_system;
|
||||
led-failsafe = &led_system;
|
||||
led-running = &led_system;
|
||||
led-upgrade = &led_system;
|
||||
label-mac-device = &wmac;
|
||||
};
|
||||
|
||||
leds {
|
||||
compatible = "gpio-leds";
|
||||
|
||||
led_system: system {
|
||||
label = "tp-link:green:system";
|
||||
gpios = <&gpio 13 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
};
|
||||
|
||||
keys {
|
||||
compatible = "gpio-keys";
|
||||
|
||||
reset {
|
||||
label = "Reset button";
|
||||
linux,code = <KEY_RESTART>;
|
||||
gpios = <&gpio 12 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&uart {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&spi {
|
||||
status = "okay";
|
||||
|
||||
num-cs = <1>;
|
||||
|
||||
flash@0 {
|
||||
compatible = "jedec,spi-nor";
|
||||
reg = <0>;
|
||||
spi-max-frequency = <50000000>;
|
||||
|
||||
partitions {
|
||||
compatible = "fixed-partitions";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
uboot: partition@0 {
|
||||
label = "u-boot";
|
||||
reg = <0x000000 0x020000>;
|
||||
read-only;
|
||||
};
|
||||
|
||||
partition@20000 {
|
||||
label = "firmware";
|
||||
reg = <0x020000 0x3d0000>;
|
||||
compatible = "tplink,firmware";
|
||||
};
|
||||
|
||||
art: partition@3f0000 {
|
||||
label = "art";
|
||||
reg = <0x3f0000 0x010000>;
|
||||
read-only;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&wmac {
|
||||
status = "okay";
|
||||
|
||||
mtd-cal-data = <&art 0x1000>;
|
||||
mtd-mac-address = <&uboot 0x1fc00>;
|
||||
};
|
||||
|
||||
ð0 {
|
||||
status = "okay";
|
||||
|
||||
phy-handle = <&swphy4>;
|
||||
|
||||
mtd-mac-address = <&uboot 0x1fc00>;
|
||||
mtd-mac-address-increment = <1>;
|
||||
};
|
||||
|
||||
ð1 {
|
||||
compatible = "syscon", "simple-mfd";
|
||||
};
|
@ -1,143 +1,14 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
|
||||
/dts-v1/;
|
||||
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
#include <dt-bindings/input/input.h>
|
||||
|
||||
#include "qca956x.dtsi"
|
||||
#include "qca9563_tplink_re450.dtsi"
|
||||
|
||||
/ {
|
||||
compatible = "tplink,re450-v2", "qca,qca9563";
|
||||
model = "TP-Link RE450 v2";
|
||||
|
||||
chosen {
|
||||
bootargs = "console=ttyS0,115200n8";
|
||||
};
|
||||
|
||||
aliases {
|
||||
led-boot = &led_power;
|
||||
led-failsafe = &led_power;
|
||||
led-running = &led_power;
|
||||
led-upgrade = &led_power;
|
||||
mdio-gpio0 = &mdio2;
|
||||
};
|
||||
|
||||
leds {
|
||||
compatible = "gpio-leds";
|
||||
|
||||
led_power: power {
|
||||
label = "tp-link:blue:power";
|
||||
gpios = <&gpio 1 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
|
||||
wlan2g {
|
||||
label = "tp-link:blue:wlan2g";
|
||||
gpios = <&gpio 14 GPIO_ACTIVE_LOW>;
|
||||
linux,default-trigger = "phy1tpt";
|
||||
};
|
||||
|
||||
wlan5g {
|
||||
label = "tp-link:blue:wlan5g";
|
||||
gpios = <&gpio 5 GPIO_ACTIVE_LOW>;
|
||||
linux,default-trigger = "phy0tpt";
|
||||
};
|
||||
|
||||
lan_link {
|
||||
label = "tp-link:green:lan_link";
|
||||
gpios = <&gpio 8 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
|
||||
lan_data {
|
||||
label = "tp-link:green:lan_data";
|
||||
gpios = <&gpio 9 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
|
||||
wps_blue {
|
||||
label = "tp-link:blue:wps";
|
||||
gpios = <&gpio 17 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
|
||||
wps_red {
|
||||
label = "tp-link:red:wps";
|
||||
gpios = <&gpio 20 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
};
|
||||
|
||||
keys {
|
||||
compatible = "gpio-keys";
|
||||
|
||||
reset {
|
||||
label = "Reset button";
|
||||
linux,code = <KEY_RESTART>;
|
||||
gpios = <&gpio 6 GPIO_ACTIVE_LOW>;
|
||||
debounce-interval = <60>;
|
||||
};
|
||||
|
||||
power {
|
||||
label = "Power button";
|
||||
linux,code = <KEY_POWER>;
|
||||
gpios = <&gpio 2 GPIO_ACTIVE_LOW>;
|
||||
debounce-interval = <60>;
|
||||
};
|
||||
|
||||
leds {
|
||||
label = "LED control button";
|
||||
linux,code = <BTN_0>;
|
||||
gpios = <&gpio 7 GPIO_ACTIVE_LOW>;
|
||||
debounce-interval = <60>;
|
||||
};
|
||||
|
||||
wps {
|
||||
label = "WPS button";
|
||||
linux,code = <KEY_WPS_BUTTON>;
|
||||
gpios = <&gpio 19 GPIO_ACTIVE_LOW>;
|
||||
debounce-interval = <60>;
|
||||
};
|
||||
};
|
||||
|
||||
mdio2: mdio {
|
||||
compatible = "virtual,mdio-gpio";
|
||||
|
||||
gpios = <&gpio 3 GPIO_ACTIVE_HIGH>, /* MDC */
|
||||
<&gpio 4 GPIO_ACTIVE_HIGH>; /* MDIO */
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
phy4: ethernet-phy@4 {
|
||||
reg = <4>;
|
||||
device_type = "ethernet-phy";
|
||||
reset-gpios = <&gpio 11 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&pcie {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&uart {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&gpio {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&spi {
|
||||
status = "okay";
|
||||
|
||||
num-cs = <1>;
|
||||
|
||||
flash@0 {
|
||||
compatible = "jedec,spi-nor";
|
||||
reg = <0>;
|
||||
spi-max-frequency = <25000000>;
|
||||
|
||||
partitions {
|
||||
compatible = "fixed-partitions";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
&partitions {
|
||||
partition@0 {
|
||||
label = "u-boot";
|
||||
reg = <0x000000 0x020000>;
|
||||
@ -173,22 +44,4 @@
|
||||
reg = <0x7f0000 0x010000>;
|
||||
read-only;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
ð0 {
|
||||
status = "okay";
|
||||
|
||||
phy-mode = "sgmii";
|
||||
phy-handle = <&phy4>;
|
||||
|
||||
mtd-mac-address = <&info 0x8>;
|
||||
};
|
||||
|
||||
&wmac {
|
||||
status = "okay";
|
||||
|
||||
mtd-cal-data = <&art 0x1000>;
|
||||
mtd-mac-address = <&info 0x8>;
|
||||
};
|
||||
|
53
target/linux/ath79/dts/qca9563_tplink_re450-v3.dts
Normal file
53
target/linux/ath79/dts/qca9563_tplink_re450-v3.dts
Normal file
@ -0,0 +1,53 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
|
||||
/dts-v1/;
|
||||
|
||||
#include "qca9563_tplink_re450.dtsi"
|
||||
|
||||
/ {
|
||||
compatible = "tplink,re450-v3", "qca,qca9563";
|
||||
model = "TP-Link RE450 v3";
|
||||
};
|
||||
|
||||
&partitions {
|
||||
partition@0 {
|
||||
label = "u-boot";
|
||||
reg = <0x000000 0x020000>;
|
||||
read-only;
|
||||
};
|
||||
|
||||
info: partition@20000 {
|
||||
label = "info";
|
||||
reg = <0x020000 0x002000>;
|
||||
read-only;
|
||||
};
|
||||
|
||||
partition@22000 {
|
||||
label = "partition-table";
|
||||
reg = <0x022000 0x002000>;
|
||||
read-only;
|
||||
};
|
||||
|
||||
partition@24000 {
|
||||
label = "info2";
|
||||
reg = <0x024000 0x00a000>;
|
||||
read-only;
|
||||
};
|
||||
|
||||
partition@2e000 {
|
||||
label = "config";
|
||||
reg = <0x02e000 0x022000>;
|
||||
read-only;
|
||||
};
|
||||
|
||||
partition@50000 {
|
||||
compatible = "tplink,firmware";
|
||||
label = "firmware";
|
||||
reg = <0x050000 0x7a0000>;
|
||||
};
|
||||
|
||||
art: partition@7f0000 {
|
||||
label = "art";
|
||||
reg = <0x7f0000 0x010000>;
|
||||
read-only;
|
||||
};
|
||||
};
|
155
target/linux/ath79/dts/qca9563_tplink_re450.dtsi
Normal file
155
target/linux/ath79/dts/qca9563_tplink_re450.dtsi
Normal file
@ -0,0 +1,155 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
|
||||
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
#include <dt-bindings/input/input.h>
|
||||
|
||||
#include "qca956x.dtsi"
|
||||
|
||||
/ {
|
||||
chosen {
|
||||
bootargs = "console=ttyS0,115200n8";
|
||||
};
|
||||
|
||||
aliases {
|
||||
label-mac-device = ð0;
|
||||
led-boot = &led_power;
|
||||
led-failsafe = &led_power;
|
||||
led-running = &led_power;
|
||||
led-upgrade = &led_power;
|
||||
mdio-gpio0 = &mdio2;
|
||||
};
|
||||
|
||||
leds {
|
||||
compatible = "gpio-leds";
|
||||
|
||||
led_power: power {
|
||||
label = "tp-link:blue:power";
|
||||
gpios = <&gpio 1 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
|
||||
wlan2g {
|
||||
label = "tp-link:blue:wlan2g";
|
||||
gpios = <&gpio 14 GPIO_ACTIVE_LOW>;
|
||||
linux,default-trigger = "phy1tpt";
|
||||
};
|
||||
|
||||
wlan5g {
|
||||
label = "tp-link:blue:wlan5g";
|
||||
gpios = <&gpio 5 GPIO_ACTIVE_LOW>;
|
||||
linux,default-trigger = "phy0tpt";
|
||||
};
|
||||
|
||||
lan_link {
|
||||
label = "tp-link:green:lan_link";
|
||||
gpios = <&gpio 8 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
|
||||
lan_data {
|
||||
label = "tp-link:green:lan_data";
|
||||
gpios = <&gpio 9 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
|
||||
wps_blue {
|
||||
label = "tp-link:blue:wps";
|
||||
gpios = <&gpio 17 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
|
||||
wps_red {
|
||||
label = "tp-link:red:wps";
|
||||
gpios = <&gpio 20 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
};
|
||||
|
||||
keys {
|
||||
compatible = "gpio-keys";
|
||||
|
||||
reset {
|
||||
label = "Reset button";
|
||||
linux,code = <KEY_RESTART>;
|
||||
gpios = <&gpio 6 GPIO_ACTIVE_LOW>;
|
||||
debounce-interval = <60>;
|
||||
};
|
||||
|
||||
power {
|
||||
label = "Power button";
|
||||
linux,code = <KEY_POWER>;
|
||||
gpios = <&gpio 2 GPIO_ACTIVE_LOW>;
|
||||
debounce-interval = <60>;
|
||||
};
|
||||
|
||||
leds {
|
||||
label = "LED control button";
|
||||
linux,code = <BTN_0>;
|
||||
gpios = <&gpio 7 GPIO_ACTIVE_LOW>;
|
||||
debounce-interval = <60>;
|
||||
};
|
||||
|
||||
wps {
|
||||
label = "WPS button";
|
||||
linux,code = <KEY_WPS_BUTTON>;
|
||||
gpios = <&gpio 19 GPIO_ACTIVE_LOW>;
|
||||
debounce-interval = <60>;
|
||||
};
|
||||
};
|
||||
|
||||
mdio2: mdio {
|
||||
compatible = "virtual,mdio-gpio";
|
||||
|
||||
gpios = <&gpio 3 GPIO_ACTIVE_HIGH>, /* MDC */
|
||||
<&gpio 4 GPIO_ACTIVE_HIGH>; /* MDIO */
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
phy4: ethernet-phy@4 {
|
||||
reg = <4>;
|
||||
device_type = "ethernet-phy";
|
||||
reset-gpios = <&gpio 11 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&pcie {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&uart {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&gpio {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&spi {
|
||||
status = "okay";
|
||||
|
||||
num-cs = <1>;
|
||||
|
||||
flash@0 {
|
||||
compatible = "jedec,spi-nor";
|
||||
reg = <0>;
|
||||
spi-max-frequency = <25000000>;
|
||||
|
||||
partitions: partitions {
|
||||
compatible = "fixed-partitions";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
ð0 {
|
||||
status = "okay";
|
||||
|
||||
phy-mode = "sgmii";
|
||||
phy-handle = <&phy4>;
|
||||
|
||||
mtd-mac-address = <&info 0x8>;
|
||||
};
|
||||
|
||||
&wmac {
|
||||
status = "okay";
|
||||
|
||||
mtd-cal-data = <&art 0x1000>;
|
||||
mtd-mac-address = <&info 0x8>;
|
||||
};
|
@ -125,10 +125,6 @@ glinet,6408|\
|
||||
glinet,6416)
|
||||
ucidef_set_led_netdev "lan" "LAN" "gl-inet:green:lan" "eth0"
|
||||
;;
|
||||
glinet,gl-ar150)
|
||||
ucidef_set_led_netdev "wan" "WAN" "$boardname:green:wan" "eth1"
|
||||
ucidef_set_led_switch "lan" "LAN" "$boardname:green:lan" "switch0" "0x02"
|
||||
;;
|
||||
glinet,gl-ar300m-lite)
|
||||
ucidef_set_led_netdev "lan" "LAN" "gl-ar300m-lite:green:lan" "eth0"
|
||||
;;
|
||||
@ -252,7 +248,8 @@ tplink,tl-wr902ac-v1)
|
||||
;;
|
||||
tplink,re355-v1|\
|
||||
tplink,re450-v1|\
|
||||
tplink,re450-v2)
|
||||
tplink,re450-v2|\
|
||||
tplink,re450-v3)
|
||||
ucidef_set_led_netdev "lan_data" "LAN Data" "tp-link:green:lan_data" "eth0" "tx rx"
|
||||
ucidef_set_led_netdev "lan_link" "LAN Link" "tp-link:green:lan_link" "eth0" "link"
|
||||
;;
|
||||
|
@ -43,6 +43,7 @@ ath79_setup_interfaces()
|
||||
tplink,re355-v1|\
|
||||
tplink,re450-v1|\
|
||||
tplink,re450-v2|\
|
||||
tplink,re450-v3|\
|
||||
tplink,tl-wr902ac-v1|\
|
||||
ubnt,bullet-m-ar7240|\
|
||||
ubnt,bullet-m-ar7241|\
|
||||
|
@ -118,7 +118,8 @@ case "$FIRMWARE" in
|
||||
caldata_extract "art" 0x5000 0x844
|
||||
ath10k_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) -2)
|
||||
;;
|
||||
tplink,re450-v2)
|
||||
tplink,re450-v2|\
|
||||
tplink,re450-v3)
|
||||
caldata_extract "art" 0x5000 0x844
|
||||
ath10k_patch_mac $(macaddr_add $(mtd_get_mac_binary info 0x8) +1)
|
||||
;;
|
||||
|
@ -400,6 +400,18 @@ define Device/tplink_re450-v2
|
||||
endef
|
||||
TARGET_DEVICES += tplink_re450-v2
|
||||
|
||||
define Device/tplink_re450-v3
|
||||
$(Device/tplink-safeloader)
|
||||
SOC := qca9563
|
||||
IMAGE_SIZE := 7808k
|
||||
DEVICE_MODEL := RE450
|
||||
DEVICE_VARIANT := v3
|
||||
DEVICE_PACKAGES := kmod-ath10k-ct-smallbuffers ath10k-firmware-qca988x-ct
|
||||
TPLINK_BOARD_ID := RE450-V3
|
||||
LOADER_TYPE := elf
|
||||
endef
|
||||
TARGET_DEVICES += tplink_re450-v3
|
||||
|
||||
define Device/tplink_tl-mr6400-v1
|
||||
$(Device/tplink-8mlzma)
|
||||
SOC := qca9531
|
||||
|
@ -28,7 +28,7 @@ endef
|
||||
# UBNT_BOARD e.g. one of (XS2, XS5, RS, XM)
|
||||
# UBNT_TYPE e.g. one of (BZ, XM, XW)
|
||||
# UBNT_CHIP e.g. one of (ar7240, ar933x, ar934x)
|
||||
# UBNT_VERSION e.g. one of (6.0.0, 8.5.0)
|
||||
# UBNT_VERSION e.g. one of (6.0.0, 8.5.3)
|
||||
define Device/ubnt
|
||||
DEVICE_VENDOR := Ubiquiti
|
||||
DEVICE_PACKAGES := kmod-usb2
|
||||
@ -66,7 +66,7 @@ define Device/ubnt-wa
|
||||
UBNT_BOARD := WA
|
||||
UBNT_CHIP := ar934x
|
||||
UBNT_TYPE := WA
|
||||
UBNT_VERSION := 8.5.0
|
||||
UBNT_VERSION := 8.5.3
|
||||
endef
|
||||
|
||||
define Device/ubnt-xc
|
||||
@ -75,7 +75,7 @@ define Device/ubnt-xc
|
||||
UBNT_BOARD := XC
|
||||
UBNT_CHIP := qca955x
|
||||
UBNT_TYPE := XC
|
||||
UBNT_VERSION := 8.5.0
|
||||
UBNT_VERSION := 8.5.3
|
||||
endef
|
||||
|
||||
define Device/ubnt-xm
|
||||
|
@ -272,6 +272,30 @@ define Device/tplink_tl-wr743nd-v1
|
||||
endef
|
||||
TARGET_DEVICES += tplink_tl-wr743nd-v1
|
||||
|
||||
define Device/tplink_tl-wr802n-v1
|
||||
$(Device/tplink-4mlzma)
|
||||
SOC := qca9533
|
||||
DEVICE_MODEL := TL-WR802N
|
||||
DEVICE_VARIANT := v1
|
||||
TPLINK_HWID := 0x08020001
|
||||
SUPPORTED_DEVICES += tl-wr802n-v1
|
||||
endef
|
||||
TARGET_DEVICES += tplink_tl-wr802n-v1
|
||||
|
||||
define Device/tplink_tl-wr802n-v2
|
||||
$(Device/tplink-4mlzma)
|
||||
SOC := qca9533
|
||||
DEVICE_MODEL := TL-WR802N
|
||||
DEVICE_VARIANT := v2
|
||||
TPLINK_HWID := 0x08020002
|
||||
TPLINK_HWREV := 2
|
||||
SUPPORTED_DEVICES += tl-wr802n-v2
|
||||
IMAGES += factory-us.bin factory-eu.bin
|
||||
IMAGE/factory-us.bin := tplink-v1-image factory -C US
|
||||
IMAGE/factory-eu.bin := tplink-v1-image factory -C EU
|
||||
endef
|
||||
TARGET_DEVICES += tplink_tl-wr802n-v2
|
||||
|
||||
define Device/tplink_tl-wr841-v5
|
||||
$(Device/tplink-4m)
|
||||
SOC := ar7240
|
||||
|
@ -43,7 +43,9 @@ ath79_setup_interfaces()
|
||||
tplink,tl-wa901nd-v2|\
|
||||
tplink,tl-wa901nd-v4|\
|
||||
tplink,tl-wa901nd-v5|\
|
||||
tplink,tl-wr703n)
|
||||
tplink,tl-wr703n|\
|
||||
tplink,tl-wr802n-v1|\
|
||||
tplink,tl-wr802n-v2)
|
||||
ucidef_set_interface_lan "eth0"
|
||||
;;
|
||||
tplink,tl-mr3220-v1|\
|
||||
|
@ -0,0 +1,18 @@
|
||||
. /lib/functions.sh
|
||||
. /lib/functions/migrations.sh
|
||||
|
||||
board=$(board_name)
|
||||
boardonly="${board##*,}"
|
||||
|
||||
case "$board" in
|
||||
tplink,tl-wr802n-v1)
|
||||
migrate_leds ":blue:=:green:"
|
||||
;;
|
||||
tplink,tl-wr802n-v2)
|
||||
migrate_leds "^$boardonly:=tp-link:"
|
||||
;;
|
||||
esac
|
||||
|
||||
migrations_apply system
|
||||
|
||||
exit 0
|
@ -21,8 +21,6 @@ linksys_get_target_firmware() {
|
||||
"${cur_boot_part}" "${mtd_ubi0}"
|
||||
fi
|
||||
|
||||
cur_boot_part=$(/usr/sbin/fw_printenv -n boot_part)
|
||||
|
||||
case $cur_boot_part in
|
||||
1)
|
||||
fw_setenv -s - <<-EOF
|
||||
|
@ -34,7 +34,7 @@ tools-$(CONFIG_TARGET_mxs) += elftosb sdimage
|
||||
tools-$(CONFIG_TARGET_ar71xx) += lzma-old
|
||||
tools-$(CONFIG_TARGET_ar71xx)$(CONFIG_TARGET_ath79) += squashfs
|
||||
tools-$(CONFIG_USES_MINOR) += kernel2minor
|
||||
tools-y += lzma squashfskit4 zip
|
||||
tools-y += lzma squashfskit4 zip zstd
|
||||
tools-$(BUILD_B43_TOOLS) += b43-tools
|
||||
tools-$(BUILD_ISL) += isl
|
||||
tools-$(CONFIG_USE_SPARSE) += sparse
|
||||
|
@ -1728,7 +1728,46 @@ static struct device_info boards[] = {
|
||||
{"user-config", 0x630000, 0x10000},
|
||||
{"default-config", 0x640000, 0x10000},
|
||||
{"radio", 0x7f0000, 0x10000},
|
||||
{NULL, 0, 0}
|
||||
},
|
||||
|
||||
.first_sysupgrade_partition = "os-image",
|
||||
.last_sysupgrade_partition = "file-system"
|
||||
},
|
||||
|
||||
/** Firmware layout for the RE450 v3 */
|
||||
{
|
||||
.id = "RE450-V3",
|
||||
.vendor = "",
|
||||
.support_list =
|
||||
"SupportList:\r\n"
|
||||
"{product_name:RE450,product_ver:3.0.0,special_id:00000000}\r\n"
|
||||
"{product_name:RE450,product_ver:3.0.0,special_id:55530000}\r\n"
|
||||
"{product_name:RE450,product_ver:3.0.0,special_id:45550000}\r\n"
|
||||
"{product_name:RE450,product_ver:3.0.0,special_id:4A500000}\r\n"
|
||||
"{product_name:RE450,product_ver:3.0.0,special_id:43410000}\r\n"
|
||||
"{product_name:RE450,product_ver:3.0.0,special_id:41550000}\r\n"
|
||||
"{product_name:RE450,product_ver:3.0.0,special_id:41530000}\r\n"
|
||||
"{product_name:RE450,product_ver:3.0.0,special_id:4B520000}\r\n"
|
||||
"{product_name:RE450,product_ver:3.0.0,special_id:42520000}\r\n",
|
||||
.support_trail = '\x00',
|
||||
.soft_ver = NULL,
|
||||
|
||||
/* We're using a dynamic kernel/rootfs split here */
|
||||
.partitions = {
|
||||
{"fs-uboot", 0x00000, 0x20000},
|
||||
{"default-mac", 0x20000, 0x00020},
|
||||
{"pin", 0x20020, 0x00020},
|
||||
{"product-info", 0x21000, 0x01000},
|
||||
{"partition-table", 0x22000, 0x02000},
|
||||
{"soft-version", 0x24000, 0x01000},
|
||||
{"support-list", 0x25000, 0x01000},
|
||||
{"profile", 0x26000, 0x08000},
|
||||
{"user-config", 0x2e000, 0x10000},
|
||||
{"default-config", 0x3e000, 0x10000},
|
||||
{"config-info", 0x4e000, 0x00400},
|
||||
{"firmware", 0x50000, 0x7a0000},
|
||||
{"radio", 0x7f0000, 0x10000},
|
||||
{NULL, 0, 0}
|
||||
},
|
||||
|
||||
|
20
tools/zstd/Makefile
Normal file
20
tools/zstd/Makefile
Normal file
@ -0,0 +1,20 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=zstd
|
||||
PKG_VERSION:=1.4.4
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=@GITHUB/facebook/zstd/releases/download/v$(PKG_VERSION)
|
||||
PKG_HASH:=a364f5162c7d1a455cc915e8e3cf5f4bd8b75d09bc0f53965b0c9ca1383c52c8
|
||||
|
||||
PKG_LICENSE:=BSD-3-Clause
|
||||
PKG_LICENSE_FILES:=LICENSE
|
||||
PKG_CPE_ID:=cpe:/a:facebook:zstandard
|
||||
|
||||
HOST_BUILD_PARALLEL:=1
|
||||
|
||||
include $(INCLUDE_DIR)/host-build.mk
|
||||
|
||||
HOST_MAKE_FLAGS = PREFIX=$(HOST_BUILD_PREFIX) HAVE_ZLIB=0 HAVE_LZMA=0 HAVE_LZ4=0
|
||||
|
||||
$(eval $(call HostBuild))
|
@ -0,0 +1,61 @@
|
||||
From 06a57cf57e3c4e887cadcf688e3081154f3f6db4 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <06a57cf57e3c4e887cadcf688e3081154f3f6db4.1589392463.git.mschiffer@universe-factory.net>
|
||||
From: Bimba Shrestha <bimbashrestha@fb.com>
|
||||
Date: Thu, 6 Feb 2020 14:10:51 -0800
|
||||
Subject: [PATCH] [build-issue] More portable header prefix usage (#) (#1987)
|
||||
|
||||
* make 4.3 build issue fix
|
||||
|
||||
* Changing header name and adding comment
|
||||
---
|
||||
programs/Makefile | 11 +++++++----
|
||||
1 file changed, 7 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/programs/Makefile b/programs/Makefile
|
||||
index b75314a83f43..a9ee3cb5311b 100644
|
||||
--- a/programs/Makefile
|
||||
+++ b/programs/Makefile
|
||||
@@ -94,9 +94,12 @@ endif
|
||||
|
||||
VOID = /dev/null
|
||||
|
||||
+# Make 4.3 doesn't support '\#' anymore (https://lwn.net/Articles/810071/)
|
||||
+NUM_SYMBOL := \#
|
||||
+
|
||||
# thread detection
|
||||
NO_THREAD_MSG := ==> no threads, building without multithreading support
|
||||
-HAVE_PTHREAD := $(shell printf '\#include <pthread.h>\nint main(void) { return 0; }' > have_pthread.c && $(CC) $(FLAGS) -o have_pthread$(EXT) have_pthread.c -pthread 2> $(VOID) && rm have_pthread$(EXT) && echo 1 || echo 0; rm have_pthread.c)
|
||||
+HAVE_PTHREAD := $(shell printf '$(NUM_SYMBOL)include <pthread.h>\nint main(void) { return 0; }' > have_pthread.c && $(CC) $(FLAGS) -o have_pthread$(EXT) have_pthread.c -pthread 2> $(VOID) && rm have_pthread$(EXT) && echo 1 || echo 0; rm have_pthread.c)
|
||||
HAVE_THREAD := $(shell [ "$(HAVE_PTHREAD)" -eq "1" -o -n "$(filter Windows%,$(OS))" ] && echo 1 || echo 0)
|
||||
ifeq ($(HAVE_THREAD), 1)
|
||||
THREAD_MSG := ==> building with threading support
|
||||
@@ -108,7 +111,7 @@ endif
|
||||
|
||||
# zlib detection
|
||||
NO_ZLIB_MSG := ==> no zlib, building zstd without .gz support
|
||||
-HAVE_ZLIB := $(shell printf '\#include <zlib.h>\nint main(void) { return 0; }' > have_zlib.c && $(CC) $(FLAGS) -o have_zlib$(EXT) have_zlib.c -lz 2> $(VOID) && rm have_zlib$(EXT) && echo 1 || echo 0; rm have_zlib.c)
|
||||
+HAVE_ZLIB := $(shell printf '$(NUM_SYMBOL)include <zlib.h>\nint main(void) { return 0; }' > have_zlib.c && $(CC) $(FLAGS) -o have_zlib$(EXT) have_zlib.c -lz 2> $(VOID) && rm have_zlib$(EXT) && echo 1 || echo 0; rm have_zlib.c)
|
||||
ifeq ($(HAVE_ZLIB), 1)
|
||||
ZLIB_MSG := ==> building zstd with .gz compression support
|
||||
ZLIBCPP = -DZSTD_GZCOMPRESS -DZSTD_GZDECOMPRESS
|
||||
@@ -119,7 +122,7 @@ endif
|
||||
|
||||
# lzma detection
|
||||
NO_LZMA_MSG := ==> no liblzma, building zstd without .xz/.lzma support
|
||||
-HAVE_LZMA := $(shell printf '\#include <lzma.h>\nint main(void) { return 0; }' > have_lzma.c && $(CC) $(FLAGS) -o have_lzma$(EXT) have_lzma.c -llzma 2> $(VOID) && rm have_lzma$(EXT) && echo 1 || echo 0; rm have_lzma.c)
|
||||
+HAVE_LZMA := $(shell printf '$(NUM_SYMBOL)include <lzma.h>\nint main(void) { return 0; }' > have_lzma.c && $(CC) $(FLAGS) -o have_lzma$(EXT) have_lzma.c -llzma 2> $(VOID) && rm have_lzma$(EXT) && echo 1 || echo 0; rm have_lzma.c)
|
||||
ifeq ($(HAVE_LZMA), 1)
|
||||
LZMA_MSG := ==> building zstd with .xz/.lzma compression support
|
||||
LZMACPP = -DZSTD_LZMACOMPRESS -DZSTD_LZMADECOMPRESS
|
||||
@@ -130,7 +133,7 @@ endif
|
||||
|
||||
# lz4 detection
|
||||
NO_LZ4_MSG := ==> no liblz4, building zstd without .lz4 support
|
||||
-HAVE_LZ4 := $(shell printf '\#include <lz4frame.h>\n\#include <lz4.h>\nint main(void) { return 0; }' > have_lz4.c && $(CC) $(FLAGS) -o have_lz4$(EXT) have_lz4.c -llz4 2> $(VOID) && rm have_lz4$(EXT) && echo 1 || echo 0; rm have_lz4.c)
|
||||
+HAVE_LZ4 := $(shell printf '$(NUM_SYMBOL)include <lz4frame.h>\n\#include <lz4.h>\nint main(void) { return 0; }' > have_lz4.c && $(CC) $(FLAGS) -o have_lz4$(EXT) have_lz4.c -llz4 2> $(VOID) && rm have_lz4$(EXT) && echo 1 || echo 0; rm have_lz4.c)
|
||||
ifeq ($(HAVE_LZ4), 1)
|
||||
LZ4_MSG := ==> building zstd with .lz4 compression support
|
||||
LZ4CPP = -DZSTD_LZ4COMPRESS -DZSTD_LZ4DECOMPRESS
|
||||
--
|
||||
2.26.2
|
||||
|
Loading…
x
Reference in New Issue
Block a user