Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 23 additions & 43 deletions .github/workflows/zephyr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,36 +11,25 @@ jobs:
run_test:
name: Build and run
strategy:
Comment thread
ejohnstown marked this conversation as resolved.
fail-fast: false
matrix:
config:
# Each leg runs in the Zephyr Project CI image whose bundled SDK
# matches the Zephyr release under test: v0.26.4 ships SDK 0.16.1
# (for Zephyr 3.4.0), v0.29.0 ships SDK 1.0.0 (for Zephyr 4.4.0).
- zephyr-ref: v3.4.0
zephyr-sdk: 0.16.1
docker-image: v0.26.4
- zephyr-ref: v4.4.0
docker-image: v0.29.0
runs-on: ubuntu-22.04
container:
Comment thread
ejohnstown marked this conversation as resolved.
image: ghcr.io/zephyrproject-rtos/ci:${{ matrix.config.docker-image }}
env:
# The Zephyr SDK is preinstalled under /opt/toolchains in the CI image.
ZEPHYR_SDK_INSTALL_DIR: /opt/toolchains
# This should be a safe limit for the tests to run.
timeout-minutes: 20
steps:
- name: Install dependencies
run: |
# Don't prompt for anything
export DEBIAN_FRONTEND=noninteractive
sudo apt-get update
# most of the ci-base zephyr docker image packages
sudo apt-get install -y zip bridge-utils uml-utilities \
git cmake ninja-build gperf ccache dfu-util device-tree-compiler wget \
python3-dev python3-pip python3-setuptools python3-tk python3-wheel xz-utils file \
make gcc gcc-multilib g++-multilib libsdl2-dev libmagic1 \
autoconf automake bison build-essential ca-certificates cargo ccache chrpath cmake \
cpio device-tree-compiler dfu-util diffstat dos2unix doxygen file flex g++ gawk gcc \
gcovr git git-core gnupg gperf gtk-sharp2 help2man iproute2 lcov libcairo2-dev \
libglib2.0-dev libgtk2.0-0 liblocale-gettext-perl libncurses5-dev libpcap-dev \
libpopt0 libsdl1.2-dev libsdl2-dev libssl-dev libtool libtool-bin locales make \
net-tools ninja-build openssh-client parallel pkg-config python3-dev python3-pip \
python3-ply python3-setuptools python-is-python3 qemu rsync socat srecord sudo \
texinfo unzip wget ovmf xz-utils

- name: Install west
run: sudo pip install west

- name: Init west workspace
run: west init --mr ${{ matrix.config.zephyr-ref }} zephyr

Expand All @@ -61,35 +50,26 @@ jobs:
working-directory: zephyr
run: west zephyr-export

- name: Install pip dependencies
working-directory: zephyr
run: sudo pip install -r zephyr/scripts/requirements.txt

- name: Install zephyr SDK
run: |
wget -q https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v${{ matrix.config.zephyr-sdk }}/zephyr-sdk-${{ matrix.config.zephyr-sdk }}_linux-x86_64_minimal.tar.xz
tar xf zephyr-sdk-${{ matrix.config.zephyr-sdk }}_linux-x86_64_minimal.tar.xz
cd zephyr-sdk-${{ matrix.config.zephyr-sdk }}
./setup.sh -h -c -t x86_64-zephyr-elf

- name: Run wolfssh tests
id: wolfssh-test
working-directory: zephyr
run: |
./zephyr/scripts/twister --testsuite-root modules/lib/wolfssh --test zephyr/samples/tests/sample.lib.wolfssh_tests -vvv
rm -rf zephyr/twister-out
./zephyr/scripts/twister --testsuite-root modules/lib/wolfssh --test zephyr/samples/tests/sample.lib.wolfssh_nofs_tests -vvv
rm -rf zephyr/twister-out
# Run every scenario discovered under the wolfssh testsuite root.
# Selecting by scenario name with --test is avoided on purpose: the
# scenario id is path-prefixed on older twister (v3.4.0) but bare on
# newer twister (v4.x), so a fixed --test value works on only one of
# the matrix legs. The wolfssh tree defines a single sample.yaml, so
# scoping by --testsuite-root runs exactly our scenarios on both.
./zephyr/scripts/twister --testsuite-root modules/lib/wolfssh -vvv

- name: Zip failure logs
- name: Archive failure logs
if: ${{ failure() && steps.wolfssh-test.outcome == 'failure' }}
run: |
zip -9 -r logs.zip zephyr/twister-out
run: tar caf logs.tar.xz zephyr/twister-out

- name: Upload failure logs
if: ${{ failure() && steps.wolfssh-test.outcome == 'failure' }}
uses: actions/upload-artifact@v7
with:
name: zephyr-client-test-logs
path: logs.zip
name: zephyr-client-test-logs-${{ matrix.config.zephyr-ref }}
path: logs.tar.xz
retention-days: 5
8 changes: 7 additions & 1 deletion examples/client/common.c
Original file line number Diff line number Diff line change
Expand Up @@ -603,6 +603,12 @@ int ClientUserAuth(byte authType,
}
}
}
#elif defined(WOLFSSH_KEYBOARD_INTERACTIVE)
else if (authType == WOLFSSH_USERAUTH_KEYBOARD) {
/* Without a terminal there is nowhere to prompt for the responses, so
* this build cannot answer a keyboard-interactive request. */
ret = WOLFSSH_USERAUTH_FAILURE;
}
#endif
return ret;
}
Expand Down Expand Up @@ -1115,7 +1121,7 @@ int ClientLoadCA(WOLFSSH_CTX* ctx, const char* caCert)
void ClientFreeBuffers(const char* pubKeyName, const char* privKeyName,
void* heap)
{
#if defined(WOLFSSH_TERM) && defined(WOLFSSH_KEYBOARD_INTERACTIVE)
#ifdef WOLFSSH_KEYBOARD_INTERACTIVE
word32 entry;
#endif
#ifdef WOLFSSH_TPM
Expand Down
9 changes: 8 additions & 1 deletion wolfssh/port.h
Original file line number Diff line number Diff line change
Expand Up @@ -367,6 +367,13 @@ extern "C" {
#elif defined(WOLFSSH_ZEPHYR)

#include <zephyr/fs/fs.h>
#include <zephyr/version.h>
#if ZEPHYR_VERSION_CODE >= ZEPHYR_VERSION(4, 1, 0)
/* struct timeval: pre-4.1 it arrived via the socket headers when
* NET_SOCKETS_POSIX_NAMES was set; 4.1+ needs the POSIX header
* (CONFIG_POSIX_API). */
#include <zephyr/posix/sys/time.h>
#endif
#include <stdlib.h>
#include <stdio.h>

Expand All @@ -393,7 +400,7 @@ extern "C" {
#define WFGETS(b,s,f) NULL /* Not ported yet */
#undef WFPUTS
#define WFPUTS(b,s) EOF /* Not ported yet */
#define WUTIMES(a,b) (0) /* Not ported yet */
#define WUTIMES(a,b) ((void)(a),(void)(b),0) /* Not ported yet */
#define WCHDIR(fs,b) z_fs_chdir((b))

#elif defined(MICROCHIP_MPLAB_HARMONY)
Expand Down
11 changes: 11 additions & 0 deletions wolfssh/test.h
Original file line number Diff line number Diff line change
Expand Up @@ -128,10 +128,21 @@
#define NUM_SOCKETS 5
#elif defined(WOLFSSH_ZEPHYR)
#include <zephyr/kernel.h>
#include <zephyr/version.h>
#include <zephyr/posix/posix_types.h>
#include <zephyr/posix/pthread.h>
#include <zephyr/posix/fcntl.h>
#include <zephyr/net/socket.h>
#if ZEPHYR_VERSION_CODE >= ZEPHYR_VERSION(4, 1, 0)
/* Zephyr 4.1 removed NET_SOCKETS_POSIX_NAMES; the BSD/POSIX names
* (fd_set, select(), struct timeval, getaddrinfo()) now come from
* the POSIX headers, enabled via CONFIG_POSIX_API. Older Zephyr
* exposes them through <zephyr/net/socket.h> above. */
#include <zephyr/posix/sys/time.h>
#include <zephyr/posix/sys/select.h>
#include <zephyr/posix/sys/socket.h>
#include <zephyr/posix/netdb.h>
#endif
#include <zephyr/sys/printk.h>
#include <zephyr/sys/util.h>
#include <stdlib.h>
Expand Down
39 changes: 39 additions & 0 deletions zephyr/samples/tests/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,44 @@
cmake_minimum_required(VERSION 3.20.0)

# Need the Zephyr version before find_package (KERNEL_VERSION_* is not set yet)
# to gate the RAM disk / POSIX config below; parse $ZEPHYR_BASE/VERSION directly.
# find_package() tolerates an unset ZEPHYR_BASE, but reading VERSION does not,
# so check it here rather than letting file(STRINGS) fail on "/VERSION".
if(NOT DEFINED ENV{ZEPHYR_BASE} OR NOT EXISTS "$ENV{ZEPHYR_BASE}/VERSION")
message(FATAL_ERROR
"ZEPHYR_BASE must be set in the environment (west build and zephyr-env.sh "
"both do this); this sample needs it to detect the Zephyr version.")
endif()
file(STRINGS "$ENV{ZEPHYR_BASE}/VERSION" zephyr_version_lines)
foreach(line ${zephyr_version_lines})
if("${line}" MATCHES "VERSION_MAJOR[ \t]*=[ \t]*([0-9]+)")
set(ZEPHYR_VER_MAJOR ${CMAKE_MATCH_1})
elseif("${line}" MATCHES "VERSION_MINOR[ \t]*=[ \t]*([0-9]+)")
set(ZEPHYR_VER_MINOR ${CMAKE_MATCH_1})
endif()
endforeach()
if(NOT DEFINED ZEPHYR_VER_MAJOR OR NOT DEFINED ZEPHYR_VER_MINOR)
message(FATAL_ERROR
"Could not determine Zephyr version from $ENV{ZEPHYR_BASE}/VERSION")
endif()
set(ZEPHYR_VER "${ZEPHYR_VER_MAJOR}.${ZEPHYR_VER_MINOR}")

# RAM disk (devicetree on >= 3.5, Kconfig before): only the filesystem-backed
# scenarios need it, not the nofs build.
if(NOT "${CONF_FILE}" MATCHES "nofs")
Comment thread
ejohnstown marked this conversation as resolved.
if(ZEPHYR_VER VERSION_LESS 3.5)
list(APPEND EXTRA_CONF_FILE ${CMAKE_CURRENT_SOURCE_DIR}/ramdisk_legacy.conf)
else()
list(APPEND EXTRA_DTC_OVERLAY_FILE ${CMAKE_CURRENT_SOURCE_DIR}/ramdisk.overlay)
endif()
endif()

# CONFIG_POSIX_API (in prj*.conf) covers POSIX sockets/pthreads/clock on
# >= 4.1; older releases need the symbols the 4.1 reorg removed.
if(ZEPHYR_VER VERSION_LESS 4.1)
list(APPEND EXTRA_CONF_FILE ${CMAKE_CURRENT_SOURCE_DIR}/posix_legacy.conf)
endif()

find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
project(wolfssl_tests)

Expand Down
5 changes: 5 additions & 0 deletions zephyr/samples/tests/posix_legacy.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Pre-4.1: restore the POSIX symbols the 4.1 reorg folded into CONFIG_POSIX_API.
CONFIG_POSIX_API=n
CONFIG_PTHREAD_IPC=y
CONFIG_POSIX_CLOCK=y
CONFIG_NET_SOCKETS_POSIX_NAMES=y
15 changes: 8 additions & 7 deletions zephyr/samples/tests/prj.conf
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,13 @@ CONFIG_WOLFSSH=y
CONFIG_WOLFSSH_SETTINGS_FILE="samples/tests/wolfssh_user_settings.h"
CONFIG_WOLFSSH_SFTP_DEFAULT_DIR="/RAM:"

# Pthreads
CONFIG_PTHREAD_IPC=y

# Clock for time()
CONFIG_POSIX_CLOCK=y
# POSIX layer: pthreads, clock for time(), and POSIX socket names (socket(),
# bind(), ...). On 4.1 and later this one symbol covers all three. Older
# releases still want CONFIG_PTHREAD_IPC / CONFIG_POSIX_CLOCK /
# CONFIG_NET_SOCKETS_POSIX_NAMES, which were superseded at different points in
# the POSIX rework rather than all at once; see posix_legacy.conf, applied by
# CMakeLists.txt below 4.1.
CONFIG_POSIX_API=y

# Networking
CONFIG_NETWORKING=y
Expand All @@ -22,7 +24,6 @@ CONFIG_NET_IPV4=y
CONFIG_NET_IPV6=n
CONFIG_NET_TCP=y
CONFIG_NET_SOCKETS=y
CONFIG_NET_SOCKETS_POSIX_NAMES=y

CONFIG_NET_TEST=y
CONFIG_NET_LOOPBACK=y
Expand Down Expand Up @@ -69,8 +70,8 @@ CONFIG_WOLFSSL_HMAC_DRBG_ENABLED=y
# FS
CONFIG_DISK_ACCESS=y
CONFIG_DISK_DRIVERS=y
# RAM disk size moved to devicetree (see ramdisk.overlay) on Zephyr >= 3.5
CONFIG_DISK_DRIVER_RAM=y
CONFIG_DISK_RAM_VOLUME_SIZE=64
CONFIG_FILE_SYSTEM=y
CONFIG_FILE_SYSTEM_MKFS=y
CONFIG_FAT_FILESYSTEM_ELM=y
Expand Down
15 changes: 8 additions & 7 deletions zephyr/samples/tests/prj_kbi.conf
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,13 @@ CONFIG_WOLFSSH=y
CONFIG_WOLFSSH_SETTINGS_FILE="samples/tests/wolfssh_user_settings_kbi.h"
CONFIG_WOLFSSH_SFTP_DEFAULT_DIR="/RAM:"

# Pthreads
CONFIG_PTHREAD_IPC=y

# Clock for time()
CONFIG_POSIX_CLOCK=y
# POSIX layer: pthreads, clock for time(), and POSIX socket names (socket(),
# bind(), ...). On 4.1 and later this one symbol covers all three. Older
# releases still want CONFIG_PTHREAD_IPC / CONFIG_POSIX_CLOCK /
# CONFIG_NET_SOCKETS_POSIX_NAMES, which were superseded at different points in
# the POSIX rework rather than all at once; see posix_legacy.conf, applied by
# CMakeLists.txt below 4.1.
CONFIG_POSIX_API=y

# Networking
CONFIG_NETWORKING=y
Expand All @@ -22,7 +24,6 @@ CONFIG_NET_IPV4=y
CONFIG_NET_IPV6=n
CONFIG_NET_TCP=y
CONFIG_NET_SOCKETS=y
CONFIG_NET_SOCKETS_POSIX_NAMES=y

CONFIG_NET_TEST=y
CONFIG_NET_LOOPBACK=y
Expand Down Expand Up @@ -69,8 +70,8 @@ CONFIG_WOLFSSL_HMAC_DRBG_ENABLED=y
# FS
CONFIG_DISK_ACCESS=y
CONFIG_DISK_DRIVERS=y
# RAM disk size moved to devicetree (see ramdisk.overlay) on Zephyr >= 3.5
CONFIG_DISK_DRIVER_RAM=y
CONFIG_DISK_RAM_VOLUME_SIZE=64
CONFIG_FILE_SYSTEM=y
CONFIG_FILE_SYSTEM_MKFS=y
CONFIG_FAT_FILESYSTEM_ELM=y
Expand Down
13 changes: 7 additions & 6 deletions zephyr/samples/tests/prj_nofs.conf
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,13 @@ CONFIG_COMMON_LIBC_MALLOC_ARENA_SIZE=131072
CONFIG_WOLFSSH=y
CONFIG_WOLFSSH_SETTINGS_FILE="samples/tests/wolfssh_user_settings_nofs.h"

# Pthreads
CONFIG_PTHREAD_IPC=y

# Clock for time()
CONFIG_POSIX_CLOCK=y
# POSIX layer: pthreads, clock for time(), and POSIX socket names (socket(),
# bind(), ...). On 4.1 and later this one symbol covers all three. Older
# releases still want CONFIG_PTHREAD_IPC / CONFIG_POSIX_CLOCK /
# CONFIG_NET_SOCKETS_POSIX_NAMES, which were superseded at different points in
# the POSIX rework rather than all at once; see posix_legacy.conf, applied by
# CMakeLists.txt below 4.1.
CONFIG_POSIX_API=y

# Networking
CONFIG_NETWORKING=y
Expand All @@ -21,7 +23,6 @@ CONFIG_NET_IPV4=y
CONFIG_NET_IPV6=n
CONFIG_NET_TCP=y
CONFIG_NET_SOCKETS=y
CONFIG_NET_SOCKETS_POSIX_NAMES=y

CONFIG_NET_TEST=y
CONFIG_NET_LOOPBACK=y
Expand Down
10 changes: 10 additions & 0 deletions zephyr/samples/tests/ramdisk.overlay
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
/* RAM disk for the SFTP tests (Zephyr >= 3.5, devicetree). disk-name matches
* CONFIG_WOLFSSH_SFTP_DEFAULT_DIR "/RAM:" in prj.conf; 128 * 512 = 64 KiB. */
/ {
ramdisk0 {
compatible = "zephyr,ram-disk";
disk-name = "RAM";
sector-size = <512>;
sector-count = <128>;
};
};
3 changes: 3 additions & 0 deletions zephyr/samples/tests/ramdisk_legacy.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Pre-3.5: RAM disk size via Kconfig, not the ramdisk.overlay devicetree node.
# 64 KiB = the overlay's 128 sectors * 512 bytes.
CONFIG_DISK_RAM_VOLUME_SIZE=64
Loading