Overview
Ethernet Gateway is a standalone, retro-themed server written in Rust
that bridges vintage and modern computing. It provides telnet and
SSH access to a full-featured gateway with XMODEM file transfer,
SSH and telnet proxying, an AI chat client, a text-mode web browser,
weather reports, and Hayes-compatible serial modem emulation.
Designed to work with hardware as old as the Commodore 64 and CP/M
machines while remaining fully functional on modern ANSI terminals,
Ethernet Gateway adapts its display automatically to the capabilities
of each connected client.
Download:
Pre-built binaries are available on the
GitHub Releases page.
Features
| [F] |
File Transfer |
Upload, download, and delete files via XMODEM, XMODEM-1K, YMODEM, or ZMODEM (batch). |
| [S] |
SSH Gateway |
Proxy connections to remote SSH servers with host key verification. |
| [T] |
Telnet Gateway |
Proxy connections to remote telnet servers. |
| [A] |
AI Chat |
Conversational AI powered by Groq (llama-3.3-70b-versatile). Free API key. |
| [B] |
Simple Browser |
Text-mode web browser supporting HTTP, HTTPS, and Gopher with forms and bookmarks. |
| [W] |
Weather |
Current conditions and 3-day forecast by US zip code via Open-Meteo. |
| [C] |
Configuration |
Full server configuration from the terminal. Changes are saved immediately. |
Additional Features:
GUI configuration console with live log output, Hayes AT-compatible
serial modem emulation, optional authentication with per-IP lockout,
Ed25519 SSH server, and POSIX signal handling for graceful shutdown.
Getting Started
Build from Source
Prerequisites
A C toolchain and a few system libraries are required to build from source. On Debian/Ubuntu:
sudo apt install -y build-essential pkg-config cmake curl libudev-dev
See the README for Fedora, Arch, macOS, and Windows instructions.
Compiling
- Install Rust: rustup.rs
- Clone the repository
- Build a release binary:
cargo build --release
- The binary is at
target/release/ethernet-gateway
An AppImage is also available for x86_64 Linux systems.
First Run
When launched for the first time, Ethernet Gateway creates a configuration
file (egateway.conf) and the transfer/ directory
automatically.
$ ./ethernet-gateway
Ethernet Gateway v0.4.0
Author: Ricky Bryce
Created default configuration: egateway.conf
Config: telnet=true, port=2323, security=false, transfer_dir=transfer
Tip: The GUI console window opens by default. Closing
it does not stop the server — press Ctrl-C to stop.
Set enable_console = false for headless operation.
Connecting
Telnet (default port 2323)
- Ensure telnet is installed on your system
- Connect:
telnet localhost 2323
- Press backspace when prompted (terminal auto-detection)
- Answer the color prompt (Y/N)
SSH (default port 2222, disabled by default)
- Enable SSH in the configuration
- Connect:
ssh -p 2222 admin@localhost
- Enter the SSH password (default:
changeme)
Terminal Types
Terminal type is auto-detected by examining the byte sent when the user presses backspace.
PETSCII
Commodore 64/128. 40 columns, 25 rows. Backspace = 0x14. Escape: ← or _ key. Automatic case-swapping for the PETSCII charset.
ANSI
Modern terminals. 80 columns, 24 rows. Backspace = 0x08 or 0x7F. Full ANSI color and formatting. Escape: Esc key.
ASCII
Generic terminals. 80 columns, 24 rows. Any other backspace byte. No color output. Escape: Esc key.
Color: After terminal detection, you are asked whether
your terminal supports color. No default is assumed — you must
answer Y or N. All menus and text fit within the 40-column limit for
PETSCII terminals.
Main Menu
After terminal detection and optional authentication, the main menu is displayed.
Press the highlighted letter to select a feature. Press H
at any menu for context-sensitive help. Press Esc (or
← on PETSCII) to return to the main menu from any
submenu.
Help Screen
- A — AI Chat: ask questions to an AI
- B — Browser: browse the web
- C — Configuration: server settings and other options
- F — File Transfer: upload/download files using XMODEM, XMODEM-1K, YMODEM, or ZMODEM
- R — Troubleshooting: diagnose terminal input issues
- S — SSH Gateway: connect to a remote server via SSH
- T — Telnet Gateway: connect to a remote server via telnet
- W — Weather: check weather by zip code
- X — Exit: disconnect from server
File Transfer
Upload, download, and manage files on the server using XMODEM, XMODEM-1K, YMODEM, or ZMODEM. The gateway supports the full Forsberg ZMODEM spec including batch sends, batch receives, and ZSKIP.
Uploading a File
Steps
- Press U to begin an upload
- Enter the filename when prompted (max 64 characters; letters, digits, dots, hyphens, underscores; cannot start with a dot; cannot contain
..)
- If the file already exists, confirm overwrite with Y
- On the SELECT UPLOAD PROTOCOL screen press
X (XMODEM/YMODEM, block size + CRC mode + YMODEM block-0 header auto-detected) or
Z (ZMODEM)
- The server waits up to 45 seconds for your terminal to begin sending — tunable per protocol via
xmodem_negotiation_timeout (XMODEM / XMODEM-1K / YMODEM) or zmodem_negotiation_timeout (ZMODEM)
- In your terminal client, start the matching send — e.g. ExtraPutty's File Transfer › Zmodem › Send, SyncTerm's Ctrl-PgUp, or any XMODEM/YMODEM “Send File” dialog
- For a ZMODEM batch, the first file is saved under the name you entered; any additional files the sender transmits are saved under the sender's own filename (after path-safety validation — colliding names are auto-skipped via ZSKIP)
Downloading a File
Steps
- Press D to begin a download
- A paginated list of files is displayed — enter the file number
- On the SELECT PROTOCOL screen press
X (XMODEM, 128-byte blocks),
1 (XMODEM-1K, 1024-byte blocks with SOH fallback),
Y (YMODEM, filename + size header),
or Z (ZMODEM, auto-starts in most modern terminals)
- Start the matching receive in your terminal and choose where to save the file locally
- The file is transmitted and the server reports bytes / blocks / elapsed time on completion
Directory Navigation
Press C to change directories. Subdirectories within the
configured transfer directory are listed. Enter .. to go up
one level. All paths are canonicalized to prevent symlink escapes.
XMODEM Protocol Details
| Parameter | Value |
| Block size | 128 bytes |
| Error detection | CRC-16 (preferred) with checksum fallback |
| CRC polynomial | CCITT 0x1021 |
| Maximum file size | 8 MB |
| Negotiation timeout | 45 seconds (configurable, 1–300s) |
| Block timeout | 20 seconds (configurable, 1–120s) |
| Max retries per block | 10 (configurable, 1–100) |
| Padding byte | 0x1A (SUB), stripped on receive |
IAC & CR-NUL Transforms
Telnet NVT (RFC 854) reserves byte 0xFF as the IAC command marker
and requires bare CR (0x0D) to be sent as CR-NUL. Strict clients
(PuTTY / ExtraPuTTY, Tera Term, C-Kermit) follow these rules; many
retro clients (IMP8, CCGMS, StrikeTerm, AltairDuino firmware) just
blast raw bytes. We can't tell for sure which one you're running,
so the default is set from the detected terminal type — ASCII
and PETSCII get escaping off, ANSI gets it on. That's right for
the overwhelming majority of real-world combinations, but if a
transfer fails repeatedly with bad-block / CRC errors, press
I in the File Transfer menu to flip it the other
way and retry.
Quick check: if you see consistent block-CRC
failures in one direction, the two sides disagree on escaping.
Toggle I and retry.
SSH & Telnet Gateways
SSH Gateway
Connect to remote SSH servers through Ethernet Gateway. Press
S from the main menu.
Connecting
- At the first prompt, press K to view the gateway's public key (see Public-Key Authentication below), or any other key to continue
- Enter the remote server hostname or IP address
- Enter the port (default: 22)
- Enter your username for the remote server
- If the host key is unknown, confirm the SHA-256 fingerprint; if it has changed, review the warning carefully before accepting
- The gateway attempts public-key authentication first; if the remote accepts the gateway's key, you skip straight to the shell
- If the pubkey is not accepted, you are prompted for a password
- Once authenticated, you have a full interactive shell on the remote server
- Press Esc twice to disconnect and return to the main menu
Public-Key Authentication
- On first outbound dial, the gateway auto-generates an Ed25519 client keypair and stores it as
ethernet_gateway_ssh_key (0o600 on Unix)
- From the SSH Gateway menu, press K — the public key is displayed in OpenSSH
ssh-ed25519 AAAA… format
- Copy that single line into the remote server's
~/.ssh/authorized_keys
- Future dials to that host skip the password prompt entirely
Host Key Verification: Known remote-server host keys
are stored in gateway_hosts (in the gateway's working
directory, 0o600 on Unix). This is independent of any OpenSSH
~/.ssh/known_hosts you may have. Trust decisions
(first-time accept, key update, key rejection) are written to the
server log for auditability.
Three SSH key files exist, do not confuse them:
ethernet_ssh_host_key — this gateway's own SSH server host key (used when clients connect to us over SSH)
ethernet_gateway_ssh_key — this gateway's outgoing client keypair (used when we dial out to remote SSH servers)
gateway_hosts — trusted remote-server fingerprints (analogous to OpenSSH's known_hosts)
Per-IP lockout is shared with the telnet server: after 3 failed
authentication attempts in 5 minutes, the source IP is blocked for
5 minutes across both protocols.
ANSI escape sequences from the remote server are automatically
stripped when connected from a PETSCII or ASCII terminal, ensuring
readable output on vintage hardware. The PTY is sized 40×25 for
PETSCII and 80×24 for ANSI/ASCII.
Telnet Gateway
Connect to remote telnet servers through Ethernet Gateway. Press
T from the main menu.
Connecting
- At the mode prompt, press T to toggle between Telnet protocol and Raw TCP mode (see Protocol Modes below), or any other key to continue
- Enter the remote host and port (default 23)
- Session bytes are proxied between your terminal and the remote
- Press Esc twice to disconnect
Protocol Modes
- Telnet protocol (default) — the gateway parses IAC framing, unescapes
IAC IAC to literal 0xFF data, accepts peer-initiated WILL ECHO cooperatively, and refuses other options with DONT/WONT. Works with any RFC-compliant telnet server.
- Cooperative (
telnet_gateway_negotiate = true) — adds proactive offers of WILL TTYPE, WILL NAWS, and DO ECHO at connect, plus mid-session NAWS forwarding when you resize. Makes modern BBSes (Synchronet, Mystic) render at your actual window size.
- Raw TCP (toggled with T, persisted to
egateway.conf) — disables the telnet IAC layer entirely. Use this when dialing destinations that aren't really telnet: some MUDs, hand-rolled BBS software, or custom services on port 23. Bytes to your local client are still IAC-escaped so a stray 0xFF doesn't confuse your telnet client.
RFC compliance: In telnet-protocol mode the gateway
uses the full RFC 1143 six-state Q-method for option negotiation and
caps subnegotiation bodies at 8 KiB to prevent malicious remotes from
exhausting memory. It never stalls waiting for a reply, so silent or
partially-compliant remotes still work.
AI Chat
Conversational AI powered by Groq's llama-3.3-70b-versatile model.
Setup
Getting an API Key
- Visit console.groq.com and create a free account
- Generate an API key from the Groq dashboard
- In Ethernet Gateway, go to Configuration > Other Settings
- Enter your API key when prompted
Usage
Chatting
- Press A from the main menu
- Type your question and press Enter
- The response is displayed with pagination
- Use P/N to page through long responses
- Ask follow-up questions or press Q to exit
Details: Responses are word-wrapped to fit your
terminal width (40 columns for PETSCII, 80 for ANSI/ASCII). The API
timeout is 30 seconds per request. Maximum response size is 1 MB.
Simple Browser
Text-mode web browser supporting HTTP, HTTPS, and Gopher.
| [G] |
Go / Search |
Enter a URL or search term to navigate. |
| [P/N] |
Page Nav |
Previous / Next page of the current document. |
| [T] |
Top |
Jump to the top of the current page. |
| [E] |
End |
Jump to the end of the current page. |
| [S] |
Find |
Search within the current page. |
| [L] |
Links |
List numbered links on the page and follow one by number. |
| [F] |
Forms |
Interact with HTML forms (text, dropdown, checkbox, radio, textarea). |
| [K] |
Bookmarks |
Save and load bookmarks (up to 100, stored in bookmarks.txt). |
| [B] |
Back |
Navigate back through browsing history. |
| [H] |
Help |
Display browser help. |
| [Q] |
Quit |
Exit the browser and return to the main menu. |
Limits: Maximum response body is 1 MB. HTTP timeout
is 15 seconds. Maximum rendered lines per page is 5000. Page width
adapts to terminal (33 columns for PETSCII, 73+ for ANSI/ASCII). HTTPS
falls back to HTTP automatically if TLS fails.
Weather
Current conditions and 3-day forecast for any US zip code.
Press W from the main menu. Weather data is provided by
the Open-Meteo API (free, no API key required). Your last-used zip code
is saved for convenience.
Display Includes
- Current: Temperature (°F), "feels like", humidity %, wind speed and 16-point compass direction
- Forecast: 3-day outlook with daily high/low temperatures and conditions
Configuration
Press C from the main menu. Changes are saved to egateway.conf immediately.
Security Settings
Authentication is disabled by default. When disabled, only private/loopback
IPs are allowed, and gateway addresses (*.*.*.1) are rejected.
| Setting | Default | Description |
| Security enabled | false | Require login authentication |
| Telnet username | admin | Telnet login username |
| Telnet password | changeme | Telnet login password |
| SSH username | admin | SSH login username (independent) |
| SSH password | changeme | SSH login password (independent) |
Important: The default password is changeme.
If you enable security, change the password immediately. After 3 failed
login attempts from the same IP, that address is locked out for 5 minutes.
Server Configuration
| Setting | Default | Description |
| Telnet enabled | true | Enable/disable the telnet server |
| Telnet port | 2323 | TCP port for telnet connections |
| SSH enabled | false | Enable/disable the SSH server |
| SSH port | 2222 | TCP port for SSH connections |
| Max sessions | 50 | Maximum concurrent connections |
| Idle timeout | 900s (15 min) | Disconnect after inactivity (0 = disabled) |
File Transfer Settings
In the telnet menu, Configuration › F File Transfer
opens a submenu with the shared transfer directory plus per-protocol
pages for X XMODEM, Y YMODEM, and
Z ZMODEM. In the GUI, the same fields live under the
File Transfer frame's More... popup.
Shared
| Setting | Default | Range |
| Transfer directory | transfer | — |
XMODEM / XMODEM-1K / YMODEM
These three protocols share the same xmodem_* config keys
because they use the same send/receive code path. The XMODEM and YMODEM
settings pages edit the same values; the page calls out the shared-family
behavior so operators aren't surprised when editing either page changes
the other.
| Setting | Default | Range |
| Negotiation timeout | 45s | 1–300 seconds |
| Retry interval | 7s | 1–60 seconds (C / NAK poke cadence; XMODEM/YMODEM spec suggests ~10) |
| Block timeout | 20s | 1–120 seconds |
| Max retries | 10 | 1–100 |
ZMODEM
Independent tunables. These values used to be hardcoded constants in
the ZMODEM implementation; they now live in egateway.conf
so operators can tune them per environment.
| Setting | Default | Range |
| Negotiation timeout | 45s | 1–300 seconds (ZRQINIT / ZRINIT handshake) |
| Retry interval | 5s | 1–60 seconds (ZRINIT / ZRQINIT re-send gap) |
| Frame timeout | 30s | 1–120 seconds (per header / subpacket read) |
| Max retries | 10 | 1–100 (ZRQINIT / ZRPOS / ZDATA caps) |
Modem Emulator Settings
| Setting | Default | Description |
| Serial port | (none) | Device path (e.g. /dev/ttyUSB0, COM3) |
| Baud rate | 9600 | Serial line speed |
| Data bits | 8 | 5, 6, 7, or 8 |
| Parity | None | None, Odd, or Even |
| Stop bits | 1 | 1 or 2 |
| Flow control | None | None, Software, or Hardware |
Other Settings
| Setting | Default | Description |
| Groq API key | (empty) | API key for AI Chat (free at console.groq.com) |
| Browser homepage | http://telnetbible.com | Default URL for the Simple Browser |
| Weather zip code | (empty) | 5-digit US zip code for weather |
| Verbose logging | false | Enable detailed XMODEM protocol logging |
| GUI console | true | Show the GUI window on startup |
Configuration File
The file egateway.conf uses a simple key = value
format. Lines beginning with # are comments. The file is
auto-created if missing and rewritten to ensure all keys are present.
# Ethernet Gateway Configuration
telnet_enabled = true
telnet_port = 2323
security_enabled = false
username = admin
password = changeme
transfer_dir = transfer
max_sessions = 50
idle_timeout_secs = 900
ssh_enabled = false
ssh_port = 2222
ssh_username = admin
ssh_password = changeme
groq_api_key =
browser_homepage = http://telnetbible.com
weather_zip =
verbose = false
enable_console = true
serial_enabled = false
serial_port =
serial_baud = 9600
serial_databits = 8
serial_parity = none
serial_stopbits = 1
serial_flowcontrol = none
xmodem_negotiation_timeout = 45
xmodem_block_timeout = 20
xmodem_max_retries = 10
xmodem_negotiation_retry_interval = 7
zmodem_negotiation_timeout = 45
zmodem_frame_timeout = 30
zmodem_max_retries = 10
zmodem_negotiation_retry_interval = 5
SSH Server
Optional encrypted access providing the same features as the telnet interface.
| Detail | Value |
| Default port | 2222 |
| Host key algorithm | Ed25519 |
| Host key file | ethernet_ssh_host_key |
| Key format | OpenSSH |
| File permissions | 0600 (Unix) |
| Authentication | Password only |
| Credentials | Independent from telnet |
The Ed25519 host key is automatically generated on first use. The SSH
server has its own username and password, configured separately from
the telnet credentials.
Serial Modem Emulator
Hayes AT-compatible modem emulation on a physical serial port.
Connect vintage computers with serial interfaces to Ethernet Gateway.
The emulator accepts standard AT commands and "dials" TCP connections
to remote hosts. Enable it in Configuration > Modem
Emulator Settings.
AT Command Reference
| Command | Description |
AT | Connection test (returns OK) |
A/ | Repeat last command (no AT prefix, no CR required) |
ATZ | Reset to stored configuration |
AT&F | Factory reset (gateway-friendly defaults) |
AT&W | Save current settings to config file |
AT&V | Display current modem configuration |
ATI / ATI0–ATI7 | Identification variants: product code, ROM checksum, ROM test, firmware, OEM, country, diagnostics, product info |
ATE0 / ATE1 | Disable / enable command echo |
ATV0 / ATV1 | Numeric / verbose result codes |
ATQ0 / ATQ1 | Enable / suppress result codes (quiet mode) |
ATX0–ATX4 | Result-code verbosity (X4 default: full extended set with baud in CONNECT) |
AT&C0 / AT&C1 | DCD always on / DCD reflects carrier (default) |
AT&D0–AT&D3 | DTR handling (0 = ignore, gateway default) |
AT&K0–AT&K4 | Modem-layer flow control (0 = none, gateway default) |
ATH | Hang up / close connection |
ATO | Return to online mode (after +++ escape) |
ATA | Answer incoming call |
ATDT host:port | Dial (tone) — TCP connect to host |
ATDP host:port | Dial (pulse) — TCP connect to host |
ATD host:port | Dial (generic) — TCP connect to host |
ATDL | Redial last number |
ATDS / ATDSn | Dial stored number from slot n (0–3; default 0) |
AT&Zn=s | Store phone number or host s in slot n (0–3). Persisted with AT&W. |
AT? | Show AT command help |
ATS? | Show S-register help |
ATSn? | Query S-register n (range S0–S26) |
ATSn=v | Set S-register n to value v |
Dial-string modifiers (phone-number context only): , pauses for S8 seconds, W adds S6 seconds (wait for dial tone), ; returns to command mode after connect, * and # are preserved as DTMF digits, P/T/@/! are accepted and ignored. Hostnames like pine.example.com are not stripped because they don't match the phone-digit pattern.
Unrecognized commands (ATB, ATC, ATL, ATM, AT&B, AT&G, AT&J, AT&S, AT&T, AT&Y, etc.) return OK so legacy init strings don't halt mid-setup on commands we can't implement in a software emulator.
Escape Sequence: While connected (online mode), send
+++ with appropriate guard time pauses to return to
command mode without disconnecting. The escape character and guard time
are configurable via S-registers S2 and S12. Use ATO to
return to online mode.
S-Register Reference
| Reg | Default | Description |
| S0 | 5 | Auto-answer ring count (0 = disabled) |
| S1 | 0 | Ring counter (read-only) |
| S2 | 43 | Escape character (ASCII 43 = '+') |
| S3 | 13 | Carriage return character |
| S4 | 10 | Line feed character |
| S5 | 8 | Backspace character |
| S6 | 2 | Wait for dial tone (seconds) |
| S7 | 15 | Wait for carrier (seconds) — Hayes default is 50; reduced here so failed TCP dials return quickly. Capped internally at 60s. |
| S8 | 2 | Comma pause time (seconds) |
| S9 | 6 | Carrier detect response (1/10 sec) |
| S10 | 14 | Carrier loss disconnect (1/10 sec) |
| S11 | 95 | DTMF tone duration (milliseconds) |
| S12 | 50 | Escape guard time (1/50 sec; 50 = 1 second) |
| S13–S24 | 0 | Reserved. Stored and persisted so legacy init strings that probe these registers don't halt with ERROR, but they have no effect on the emulator. |
| S25 | 5 | DTR detect time (1/100 sec). Reserved — we don't drive DTR. |
| S26 | 1 | RTS-to-CTS delay (1/100 sec). Reserved — we don't drive RTS/CTS. |
Keep S3, S4, and S5 at distinct values. Command-mode line editing dispatches on the raw byte: the CR branch is checked before BS, so setting S3 = 8 would cause backspace to terminate the line. Leaving S3/S4/S5 at their Hayes defaults (13/10/8) avoids this.
GUI Console
Graphical configuration and monitoring window built with egui.
When enable_console = true, the GUI window opens
automatically on startup. It provides a retro amber-on-dark theme
with real-time server management.
| Configuration Editor |
Modify all server settings in real time with immediate save to egateway.conf. |
| Console Output |
Scrolling log display (up to 2000 lines) showing connections, transfers, and server activity. |
| Serial Port Detection |
Automatically discovers available serial ports on the system. |
| Server Info |
Displays local IP addresses and active services. |
| Settings Sync |
Configuration changes from telnet/SSH sessions are reflected in the GUI. |
Tip: Closing the GUI window does not
stop the server. It continues running in headless mode. Press
Ctrl-C in the terminal to stop.
Security & Networking
IP Restrictions (Security Disabled)
When security is disabled (the default), Ethernet Gateway restricts
access to private and loopback IP ranges only:
Allowed IP Ranges
10.0.0.0/8 — Private (Class A)
172.16.0.0/12 — Private (Class B)
192.168.0.0/16 — Private (Class C)
127.0.0.0/8 — Loopback
169.254.0.0/16 — Link-local
Gateway addresses (*.*.*.1) are rejected except for loopback, preventing accidental exposure on network edges.
Authentication Lockout
| Policy | Value |
| Max failed attempts | 3 per IP address |
| Lockout duration | 5 minutes |
| Protocol scope | Shared across telnet and SSH — an attacker can't bounce between the two to reset the counter |
| Counter reset | After lockout expires or successful login |
| Credential comparison | Constant-time (timing attack resistant) |
File Path Security
All file operations are restricted to the configured transfer directory.
Filenames are validated to prevent path traversal. Directory changes
are canonicalized to prevent symlink escapes.
Sensitive File Protection
On Unix, the following files are written with mode 0o600
(owner read/write only) so other local users can't read them:
egateway.conf — contains telnet/SSH passwords and the Groq API key
ethernet_ssh_host_key — the gateway's SSH server private host key
ethernet_gateway_ssh_key — the gateway's outgoing SSH client key
gateway_hosts — remote-server host keys (privacy: reveals dial history)
dialup.conf — phone-to-host mapping
On Windows, NTFS ACLs are inherited from the parent directory. For
multi-user Windows boxes, place the binary in a per-user folder
(e.g. under %USERPROFILE%) so the ACL inherits
owner-only access.
Telnet Gateway DoS Protection
Subnegotiation (IAC SB … IAC SE) bodies from remote
servers are capped at 8 KiB to prevent a malicious peer from
exhausting memory by sending a huge SB without a terminating
IAC SE. The state machine still resyncs on the
eventual terminator so the session isn't corrupted.
Signal Handling
Graceful Shutdown
- SIGINT (Ctrl-C) — Graceful shutdown
- SIGTERM — Graceful shutdown
- SIGHUP — Graceful shutdown (Unix only)
Connected sessions receive a shutdown notification before the server stops.
Troubleshooting
Terminal Detection
If your terminal is detected as the wrong type, the troubleshooting
feature (press R from the main menu) diagnoses input
issues by showing exactly what bytes your terminal sends.
File Transfer Problems
| Symptom | Solution |
| Transfer times out before starting |
Pick the same protocol on both sides: the gateway's upload menu expects either XMODEM/YMODEM or ZMODEM, and the download menu lets you select XMODEM, XMODEM-1K, YMODEM, or ZMODEM explicitly. If your terminal takes a while to open its Send/Receive dialog, increase xmodem_negotiation_timeout (XMODEM / XMODEM-1K / YMODEM, default 45 s) or zmodem_negotiation_timeout (ZMODEM, default 45 s) in egateway.conf. |
| Transfer fails partway through |
For XMODEM/XMODEM-1K/YMODEM raise xmodem_block_timeout and xmodem_max_retries. For ZMODEM raise zmodem_frame_timeout and zmodem_max_retries. Check for a noisy or slow connection. |
| Consistent block-CRC failures in the same direction |
The two sides disagree on IAC / CR-NUL escaping. Press I in the File Transfer menu to flip and retry. Not a concern on SSH. |
| File exceeds size limit |
XMODEM is limited to 8 MB. Use a different method for larger files. |
Connection Problems
| Symptom | Solution |
| "Connection refused" from non-private IP |
Enable security for public IP access, or connect from a private network. |
| Locked out after failed logins |
Wait 5 minutes for the lockout to expire. |
| Disconnected unexpectedly |
Check idle timeout setting. Set to 0 to disable auto-disconnect. |
| AI Chat: "No API key configured" |
Set up a Groq API key in Configuration > Other Settings. |
Verbose Logging
Enable verbose mode in Configuration > Other Settings
to see detailed XMODEM protocol diagnostics. Useful for debugging
file transfer issues.
About the Author
Ricky Bryce
Creator and sole developer of Ethernet Gateway. A lifelong
enthusiast of retrocomputing and telecommunications, Ricky
built this project to bridge the gap between vintage hardware
and modern network services.
Ethernet Gateway is released under the
GNU General Public License v3.0
(or later).
Screenshot
The Ethernet Gateway GUI console in action.