Network Interface Tunnel Requirements

This document specifies component-level requirements for the UART-based network tunnel driver, enabling QEMU emulation with external network connectivity.

Component Overview

The network interface tunnel component provides a bridge between QEMU’s simulated UART and the host’s network stack, enabling network-dependent features to be tested in emulation. These requirements refine the high-level system requirement Emulator Support (REQ_SYS_SIM_1).

Functional Requirements

Requirement: QEMU UART Network Bridge REQ_NETIF_TUNNEL_1

Description: The system SHALL provide a custom network interface driver that bridges ESP32’s UART to the host network stack when running in QEMU emulation.

Rationale: QEMU does not natively support ESP32 WiFi emulation. A UART tunnel enables network connectivity for testing web server and WiFi-dependent features.

Acceptance Criteria:

  • AC-1: Driver SHALL register as lwIP network interface

  • AC-2: Driver SHALL use UART1 for packet transport to/from QEMU

  • AC-3: Driver SHALL be conditionally compiled only for QEMU target

  • AC-4: Driver SHALL not interfere with real hardware WiFi driver

Requirement: Packet Encapsulation REQ_NETIF_TUNNEL_2
status: approved
tags: emulation, protocol
priority: mandatory

Description: The tunnel driver SHALL encapsulate Ethernet frames for transmission over UART with appropriate framing and error detection.

Rationale: UART is a byte-stream transport; Ethernet frame boundaries must be preserved.

Acceptance Criteria:

  • AC-1: Driver SHALL frame packets with length prefix or delimiter

  • AC-2: Driver SHALL detect and discard corrupted packets

  • AC-3: Framing SHALL support MTU-sized packets (1500 bytes)

  • AC-4: Framing overhead SHALL be minimal (<10 bytes per packet)

Requirement: Host-Side Bridge Script REQ_NETIF_TUNNEL_3
status: approved
tags: emulation, tooling, host
priority: mandatory
links outgoing: REQ_NETIF_TUNNEL_1
links incoming: REQ_NETIF_TUNNEL_DOC_1

Description: The project SHALL provide a Python script that bridges QEMU’s UART to the host’s TAP network interface.

Rationale: QEMU UART output must be forwarded to host network stack for external connectivity.

Acceptance Criteria:

  • AC-1: Script SHALL create TAP interface on host OS

  • AC-2: Script SHALL forward packets bidirectionally between UART and TAP

  • AC-3: Script SHALL handle QEMU’s character device socket protocol

  • AC-4: Script SHALL be executable on Linux and macOS

  • AC-5: Script SHALL provide logging for debugging

Requirement: DHCP Client Support REQ_NETIF_TUNNEL_4
status: approved
tags: emulation, network, dhcp
priority: mandatory

Description: The tunnel network interface SHALL support DHCP client operation to obtain IP address from host network.

Rationale: Automatic IP configuration simplifies emulation setup and mirrors real WiFi behavior.

Acceptance Criteria:

  • AC-1: Driver SHALL support lwIP DHCP client

  • AC-2: DHCP discovery packets SHALL be forwarded via UART tunnel

  • AC-3: Driver SHALL obtain valid IP address from host DHCP server

  • AC-4: IP configuration SHALL be logged to console

Requirement: Conditional Compilation REQ_NETIF_TUNNEL_5
status: approved
tags: emulation, build
priority: mandatory
links outgoing: REQ_NETIF_TUNNEL_1
links incoming: API_COMP_NETIF_TUNNEL

Description: The tunnel driver SHALL be conditionally compiled only when building for QEMU target, with zero overhead on real hardware builds.

Rationale: Real hardware uses WiFi driver; tunnel driver is emulation-specific.

Acceptance Criteria:

  • AC-1: Driver SHALL be wrapped in #ifdef CONFIG_IDF_TARGET_ESP32_QEMU

  • AC-2: Driver SHALL NOT be linked in hardware builds

  • AC-3: Application code SHALL detect emulation mode at runtime

  • AC-4: Build system SHALL provide clear documentation for enabling QEMU mode

Performance Requirements

Requirement: Tunnel Throughput REQ_NETIF_TUNNEL_NF_1
status: approved
tags: emulation, performance
priority: optional
links outgoing: REQ_NETIF_TUNNEL_1

Description: The UART tunnel SHOULD support sufficient throughput for web interface testing (minimum 100 KB/s).

Rationale: Web page loads and AJAX updates require reasonable bandwidth.

Acceptance Criteria:

  • AC-1: Tunnel SHALL sustain at least 100 KB/s bidirectional throughput

  • AC-2: Web page loads SHALL complete within 5 seconds over tunnel

  • AC-3: UART baud rate SHALL be configurable (default 921600)

Requirement: Packet Loss Handling REQ_NETIF_TUNNEL_NF_2
status: approved
tags: emulation, reliability
priority: optional
links outgoing: REQ_NETIF_TUNNEL_2

Description: The tunnel driver SHOULD handle UART packet loss gracefully without crashing.

Rationale: QEMU’s UART emulation may occasionally drop bytes under high load.

Acceptance Criteria:

  • AC-1: Driver SHALL detect framing errors and discard partial packets

  • AC-2: TCP connections SHALL recover from occasional packet loss

  • AC-3: Driver SHALL log packet loss statistics for debugging

Documentation Requirements

Requirement: Emulation Setup Documentation REQ_NETIF_TUNNEL_DOC_1
status: approved
tags: emulation, documentation
priority: mandatory

Description: The project SHALL provide clear documentation for setting up and using QEMU emulation with network tunnel.

Rationale: Developers need step-by-step instructions to use emulation features.

Acceptance Criteria:

  • AC-1: Documentation SHALL include QEMU build/installation instructions

  • AC-2: Documentation SHALL explain TAP interface setup on Linux/macOS

  • AC-3: Documentation SHALL provide example commands for running emulation

  • AC-4: Documentation SHALL describe limitations compared to real hardware

Traceability

All traceability is automatically generated by Sphinx-Needs based on the :links: attributes in each requirement.

ID

Title

Status

Tags

API_COMP_CERT_HANDLER

Certificate Handler

implemented

API_COMP_CONFIG_MANAGER

Config Manager

implemented

API_COMP_NETIF_TUNNEL

Network Tunnel

implemented

API_FUNC_CERT_HANDLER_GET_CA_CERT

cert_handler_get_ca_cert

implemented

API_FUNC_CERT_HANDLER_GET_INFO

cert_handler_get_info

implemented

API_FUNC_CERT_HANDLER_GET_SERVER_CERT

cert_handler_get_server_cert

implemented

API_FUNC_CERT_HANDLER_GET_SERVER_KEY

cert_handler_get_server_key

implemented

API_FUNC_CERT_HANDLER_INIT

cert_handler_init

implemented

API_FUNC_CONFIG_COMMIT

config_commit

implemented

API_FUNC_CONFIG_FACTORY_RESET

config_factory_reset

implemented

API_FUNC_CONFIG_GET_ALL_AS_JSON

config_get_all_as_json

implemented

API_FUNC_CONFIG_GET_BOOL

config_get_bool

implemented

API_FUNC_CONFIG_GET_INT16

config_get_int16

implemented

API_FUNC_CONFIG_GET_INT32

config_get_int32

implemented

API_FUNC_CONFIG_GET_SCHEMA_JSON

config_get_schema_json

implemented

API_FUNC_CONFIG_GET_STRING

config_get_string

implemented

API_FUNC_CONFIG_INIT

config_init

implemented

API_FUNC_CONFIG_SET_ALL_FROM_JSON

config_set_all_from_json

implemented

API_FUNC_CONFIG_SET_BOOL

config_set_bool

implemented

API_FUNC_CONFIG_SET_BOOL_NO_COMMIT

config_set_bool_no_commit

implemented

API_FUNC_CONFIG_SET_INT16

config_set_int16

implemented

API_FUNC_CONFIG_SET_INT16_NO_COMMIT

config_set_int16_no_commit

implemented

API_FUNC_CONFIG_SET_INT32

config_set_int32

implemented

API_FUNC_CONFIG_SET_STRING

config_set_string

implemented

API_FUNC_CONFIG_SET_STRING_NO_COMMIT

config_set_string_no_commit

implemented

API_FUNC_CONFIG_WRITE_FACTORY_DEFAULTS

config_write_factory_defaults

implemented

API_FUNC_NETIF_TUNNEL_DEINIT

netif_uart_tunnel_deinit

implemented

API_FUNC_NETIF_TUNNEL_GET_HANDLE

netif_uart_tunnel_get_handle

implemented

API_FUNC_NETIF_TUNNEL_INIT

netif_uart_tunnel_init

implemented

API_STRUCT_NETIF_TUNNEL_CONFIG

netif_uart_tunnel_config_t

implemented

REQ_CFG_JSON_1

JSON Schema as Configuration Source of Truth

draft

config; schema; architecture

REQ_CFG_JSON_10

Web Interface Integration Support

approved

config; integration

REQ_CFG_JSON_11

NVS Error Graceful Handling

draft

config; error-handling; reliability

REQ_CFG_JSON_12

Configuration Initialization on Boot

draft

config; boot

REQ_CFG_JSON_13

Simple Process to Add Configuration Fields

draft

config; extensibility; developer-experience

REQ_CFG_JSON_14

Type Safety via Optional Static Validation

draft

config; validation; developer-experience

REQ_CFG_JSON_15

Configuration Schema Versioning and Migration

open

config; versioning; migration; future

REQ_CFG_JSON_2

Parameter Grouping for UI Organization

draft

config; ui; schema

REQ_CFG_JSON_3

Parameter Type System

draft

config; types

REQ_CFG_JSON_4

Build-Time Factory Defaults Generation

draft

config; build; code-generation

REQ_CFG_JSON_5

No Runtime JSON Parsing in C Code

draft

config; performance; memory

REQ_CFG_JSON_6

Key-Based NVS Storage

draft

config; storage; nvs

REQ_CFG_JSON_7

Type-Safe Configuration API

draft

config; api; type-safety

REQ_CFG_JSON_8

Persistent Configuration Storage

draft

config; storage; nvs

REQ_CFG_JSON_9

Factory Reset Capability

draft

config; reset

REQ_NETIF_TUNNEL_1

QEMU UART Network Bridge

approved

emulation; network; qemu; uart

REQ_NETIF_TUNNEL_2

Packet Encapsulation

approved

emulation; protocol

REQ_NETIF_TUNNEL_3

Host-Side Bridge Script

approved

emulation; tooling; host

REQ_NETIF_TUNNEL_4

DHCP Client Support

approved

emulation; network; dhcp

REQ_NETIF_TUNNEL_5

Conditional Compilation

approved

emulation; build

REQ_NETIF_TUNNEL_DOC_1

Emulation Setup Documentation

approved

emulation; documentation

REQ_NETIF_TUNNEL_NF_1

Tunnel Throughput

approved

emulation; performance

REQ_NETIF_TUNNEL_NF_2

Packet Loss Handling

approved

emulation; reliability

REQ_SYS_ARCH_1

Component-based Architecture

approved

architecture; modularity

REQ_SYS_CFG_1

Non-volatile Configuration Storage

approved

storage; nvs; configuration

REQ_SYS_HW_1

ESP32 Hardware Platform

approved

hardware; platform

REQ_SYS_NET_1

WiFi Connectivity

approved

network; wifi

REQ_SYS_PERF_1

Memory Management

approved

performance; memory

REQ_SYS_REL_1

Error Handling and Recovery

approved

reliability; error-handling

REQ_SYS_SEC_1

HTTPS Support

open

security; https; future

REQ_SYS_SIM_1

Emulator Support

approved

emulator; qemu; testing

REQ_SYS_SIM_2

Emulator Network Connectivity

approved

emulator; qemu; network; development

REQ_SYS_TIME_1

System Time and NTP Support

open

time; ntp; future

REQ_SYS_WEB_1

Web-based Configuration

approved

web; configuration

REQ_WEB_1

Real-time Status Display

approved

web; ui; monitoring

REQ_WEB_2

Configuration Interface

approved

web; ui; configuration

REQ_WEB_3

WiFi Setup Interface

approved

web; wifi; network

REQ_WEB_4

Web Interface Navigation

approved

web; ui; navigation

REQ_WEB_5

HTTP Server Concurrency

approved

web; performance

REQ_WEB_CONF_1

Configuration REST API

approved

web; api; config

REQ_WEB_NF_1

Web UI Responsiveness

approved

web; performance; ux

REQ_WEB_NF_2

Mobile-First Design

approved

web; ui; mobile

REQ_WEB_SCHEMA_1

Schema-Driven Configuration Form

approved

web; ui; config

SPEC_ARCH_BUILD_1

ESP-IDF CMake Integration

approved

build; cmake

SPEC_ARCH_CERT_1

Certificate Handler Component Design

draft

component; security

SPEC_ARCH_CODESPACES_1

GitHub Codespaces Integration

approved

development; devcontainer

SPEC_ARCH_COMM_1

Component Communication Pattern

approved

dataflow; communication

SPEC_ARCH_CONFIG_1

Configuration Manager Component Design

approved

component; config

SPEC_ARCH_CONFIG_FLOW_1

Configuration Data Flow

approved

dataflow; config

SPEC_ARCH_ERROR_RECOVERY_1

Error Recovery and Reset Strategy

approved

error-handling; reliability; reset

SPEC_ARCH_FLASH_1

Flash Memory Configuration

approved

flash; memory

SPEC_ARCH_HTTP_1

HTTP Server Architecture Details

approved

network; http; web

SPEC_ARCH_LAYERS_1

ESP32 Template Layered Architecture

approved

architecture; layering

SPEC_ARCH_LOGGING_1

Logging and Diagnostics Strategy

approved

logging; diagnostics; debugging

SPEC_ARCH_MEMORY_1

Memory Management Strategy

approved

memory; performance

SPEC_ARCH_NETIF_1

Network Tunnel Component Design

approved

component; qemu; network

SPEC_ARCH_PERF_1

System Performance Requirements

approved

performance; requirements

SPEC_ARCH_QEMU_1

QEMU Hardware Abstraction

approved

qemu; emulation

SPEC_ARCH_QEMU_BUILD_1

QEMU Component Selection

approved

qemu; build

SPEC_ARCH_TASKS_1

FreeRTOS Task Organization

approved

threading; rtos

SPEC_ARCH_WEB_1

Web Server Component Design

approved

component; web; network

SPEC_ARCH_WIFI_1

WiFi Manager Design Details

approved

network; wifi

SPEC_CFG_JSON_API_1

Type-Safe Configuration API

approved

api; interface; c-api

SPEC_CFG_JSON_ARCH_1

JSON Schema-Driven Architecture

draft

architecture; config; json-schema

SPEC_CFG_JSON_BULK_1

Bulk JSON Configuration API

approved

api; json; bulk-operations

SPEC_CFG_JSON_CODEGEN_1

Factory Reset via Bulk JSON Update

approved

build-process; code-generation; factory-reset

SPEC_CFG_JSON_EXTEND_1

Adding New Configuration Fields

approved

development; guide; extensibility

SPEC_CFG_JSON_SCHEMA_1

Configuration Schema Structure

approved

data-structure; schema

SPEC_CFG_JSON_SOURCE_1

JSON Schema as Single Source of Truth

approved

architecture; schema; design-pattern

SPEC_CFG_JSON_STORAGE_1

NVS Storage Format

approved

storage; nvs

SPEC_CFG_JSON_TYPESAFETY_1

Type Safety Without Code Generation

approved

type-safety; best-practices

SPEC_CFG_JSON_UI_1

JSON Schema for UI Generation

approved

web; ui; javascript

SPEC_CFG_WEB_ARCH_1

Configuration Webpage Architecture

open

frontend; javascript; ui

SPEC_CFG_WEB_COUNTDOWN_1

Device Reset Countdown Interface

open

ui; countdown; reset

SPEC_CFG_WEB_ERROR_1

Error Handling and User Feedback

open

error-handling; feedback

SPEC_CFG_WEB_FLOW_1

Configuration Data Flow

open

data-flow; json; api

SPEC_CFG_WEB_FORM_1

Dynamic Form Generation from Schema

open

form-generation; schema; javascript

SPEC_CFG_WEB_INIT_1

Complete Page Initialization Flow

open

initialization; lifecycle

SPEC_CFG_WEB_MAPPING_1

JSON Array to Form Field Mapping

open

data-mapping; json; form

SPEC_CFG_WEB_STATE_1

UI State Management

open

ui-state; javascript

SPEC_WEB_ARCH_1

Web Server Architecture

approved

web; architecture

SPEC_WEB_CAPTIVE_1

Captive Portal Design

approved

web; captive-portal; wifi

SPEC_WEB_CONFIG_1

HTTP Server Configuration

approved

web; config; performance

SPEC_WEB_EXTEND_1

Extension Guide for Web Pages

approved

web; extensibility; guide

SPEC_WEB_INTEGRATION_CFG_1

Config Manager Integration Pattern

approved

web; integration; config

SPEC_WEB_INTEGRATION_WIFI_1

WiFi Manager Integration Pattern

approved

web; integration; wifi

SPEC_WEB_REST_CFG_1

Configuration API Endpoints

approved

web; api; config; schema

SPEC_WEB_REST_HEALTH_1

System Health API Endpoint

approved

web; api; diagnostics

SPEC_WEB_REST_WIFI_1

WiFi Management REST API Endpoints

approved

web; api; wifi

SPEC_WEB_ROUTES_1

URI Routing Table

approved

web; routing

SPEC_WEB_SECURITY_1

CORS Configuration

approved

web; security; cors

SPEC_WEB_STATIC_1

Static File Embedding Strategy

approved

web; build; embedding

SPEC_WEB_TEST_1

Web Server Testing Strategy

approved

web; testing

REQ_NETIF_TUNNEL_1