Skip to content

Networking

Amix networks the way a stock AT&T System V Release 4 workstation does: a STREAMS-based TCP/IP stack with both TLI and BSD sockets, configured with static IPv4 addresses ✅. The native Ethernet card is the Commodore A2065 (a LANCE/Am7990 board), which appears as the interface aen0 ✅. There is no DHCP and no PPP; DNS resolution is disabled out of the box (the resolver falls back to /etc/hosts) and must be switched on by hand ✅/🟡. NFS works as both server and client ✅. SLIP exists but is buggy enough that you must reboot between dial-up sessions 🟡.

For driver-level mechanics of how a network card hangs off the kernel, see the STREAMS driver guide and the Hydra case study. For the broader kernel picture see the kernel architecture page.

This page condenses §11 of the research brief. Networking facts there are tagged ✅ where they come from SVR4 itself or repo source, and 🟡 where they come from amigaunix.com / community write-ups. Carry those tags as written.

The stack: SVR4 STREAMS TCP/IP

  • Amix uses the SVR4 STREAMS framework for its protocol stack ✅. TCP/IP, the transport providers, and the network drivers are all STREAMS modules pushed onto a stream — this is the same architecture SVR4 documents in its Streams Programmer's Guide and Network Programmer's Guide (both cited by the Ditto driver paper as the references for writing such drivers) ✅.
  • Two programming interfaces are available on top of it: TLI (the SVR4-native Transport Layer Interface) and BSD sockets ✅.
  • A network interface driver is therefore a STREAMS character driver — a third kind of driver alongside plain block and character drivers, distinguished by carrying a streamtab rather than ordinary read/write entry points ✅. See how STREAMS drivers differ.

Because the stack is statically linked into a monolithic kernel with no loadable modules ✅, adding or swapping a network card driver means relinking /unix (see Adding a driver below and the kernel build page).

Interfaces and devices

Card Interface Bus Driver Tag
A2065 (Am7990 LANCE Ethernet) aen0 Zorro II native (aen/ in the kernel source tree)
Hydra AmigaNet (NE2000 / DP8390) hya0 Zorro II modern hydra-amix STREAMS/DLPI driver
Ariadne I (Gateway! Vol.2 driver) Zorro II community 🟡

The A2065 is the card Commodore shipped and the only Ethernet board Amix supports out of the box ✅. aen0 is what ifconfig and the routing tables refer to.

Note: the loopback interface (lo0) and the conventional 127.0.0.1 are SVR4 standard; only the physical-interface name aen0 is Amix-specific here.

Static IP configuration (no DHCP)

There is no DHCP client in Amix — every host gets a static IPv4 address ✅. The pieces are the standard SVR4 / BSD-derived files and commands:

# Bring the A2065 up with a static address and netmask.
ifconfig aen0 192.168.0.10 netmask 255.255.255.0 up

# Verify.
ifconfig aen0

Hostname and host/network databases live where SVR4 keeps them:

/etc/hosts        # name → IP, and the resolver's only source until DNS is enabled
/etc/netmasks     # subnet masks per network
/etc/networks     # network names
/etc/netconfig    # STREAMS/TLI transport provider table

Default route — the metric is mandatory. Amix requires a metric (hop count) argument on route add default; omit it and the route is rejected ✅/🟡:

# Correct: gateway followed by metric 1.
route add default 192.168.0.1 1

The trailing 1 is the metric/hopcount, not an option flag. This is the single most common networking gotcha on Amix and is listed in the quirks checklist.

DNS is off by default — turning it on

By default the C library resolves names from /etc/hosts only; DNS lookups are disabled ✅. This is deliberate in the shipped configuration — the stock libsocket.so does not call a name server. Enabling DNS means swapping in the DNS-capable library on two resolution paths and providing a resolver config. This procedure is now first-hand verified on a running Amix 2.1 ✅:

# 1. gethostbyname() path (ping / telnet / ftp clients): swap libsocket -> libsockdns.
cp /usr/lib/libsocket.so /usr/lib/libsocket.so.orig
ln -f /usr/lib/libsockdns.so /usr/lib/libsocket.so

# 2. TLI / netdir path: activate the DNS-enabled transport table.
cp /etc/netconfig /etc/netconfig.TCP
cp /etc/netconfig.DNS /etc/netconfig          # appends /usr/lib/resolv.so to tcp/udp/icmp/rawip

# 3. resolver config — nameservers ONLY (see the domain warning below).
cat > /etc/resolv.conf <<'EOF'
nameserver 192.168.0.1
nameserver 192.168.0.2
EOF

Notes and caveats:

  • /usr/lib/libsockdns.so is the DNS-enabled socket library; hard-linking libsocket.so onto it is what flips gethostbyname() from hosts-only to DNS ✅. Use ln -f (atomic relink) so already-running daemons keep the old inode safely.
  • /etc/netconfig.DNS is a ready-made variant of the SVR4 transport table that appends /usr/lib/resolv.so to each provider; copying it over /etc/netconfig enables DNS on the TLI/netdir_getbyname() path ✅. Both files ship with the install.
  • in.named (BIND) is only needed if this host is serving DNS; a pure client needs just the two swaps above plus /etc/resolv.conf ✅.

🛑 Leave the domain UNSET — the /etc/domain "general weirdness". If a default domain is set, the resolver appends it to every lookup, including fully-qualified names — so www.google.com is queried as www.google.com.<yourdomain>. If your local zone has a wildcard, that resolves to the wrong address and never falls back (the classic symptom is ping getting ICMP Host Unreachable for a name while the literal IP works). The domain is set at sysinit from /etc/domain via domainname \cat /etc/domain`. Fix it by emptying the file (cp /dev/null /etc/domain, orecho nodomain > /etc/domain) anddomainname ""to apply now.options ndots:1` does not help — this resolver ignores it. ✅ (Documented as "general weirdness" on amigaunix.com and confirmed first-hand.)

⚠️ Also fix the boot-time ifconfigs, or enabling DNS adds ~3 minutes to every boot. After enabling DNS via the procedure above, the box stalls ~3 minutes at The system is coming up. Please wait. on every boot. Stock Amix (DNS off) does not. Reproduced first-hand on Amix 2.1c under Amiberry, 2026-06-07 ✅.

Root cause ✅: /etc/rc2.d/S69inet brings networking up with two ifconfig calls that take hostnames, each forcing a gethostbyname(): - ifconfig lo0 localhost up — in S69inet itself - ifconfig aen0 \uname -n` up -trailers— in/etc/inet/network-config`

With DNS enabled, gethostbyname() tries DNS first, but these run before the default route is installed (route add default … happens later, in /etc/inet/rc.inet). With no route to the nameservers, each lookup burns the full resolver retransmit schedule — ~90 s each, ~180 s total — before falling back to /etc/hosts. With DNS off (stock) the same names resolve instantly from /etc/hosts, which is why the trap appears only after you enable DNS.

This is independent of the /etc/domain weirdness above ✅ — a box with an already-empty /etc/domain still hangs the full 180 s. They are two different problems; fix both.

The fix — give both boot-time ifconfigs a literal IP (boot 210 s → 29 s; runtime DNS is unaffected) ✅. Configuring your own interface should never depend on a name service:

# /etc/rc2.d/S69inet
-   /usr/sbin/ifconfig lo0 localhost up
+   /usr/sbin/ifconfig lo0 127.0.0.1 up

# /etc/inet/network-config
-   /usr/sbin/ifconfig aen0 `uname -n` up -trailers
+   /usr/sbin/ifconfig aen0 <this-host-static-ip> up -trailers

lo0 is always 127.0.0.1; aen0 takes this host's own static address (the same one already in /etc/hosts — e.g. 192.168.2.38 in the LAN setup). Only the boot path stops calling the resolver; DNS for clients, mail, etc. is untouched ✅.

🔗 Edit S69inet in place — it is a hardlink (the same inode is also /etc/init.d/inetinit), so unlink/recreate would desync the two ✅. And never leave backup copies named S* inside /etc/rc2.d/rc2's for f in /etc/rc2.d/S* glob will run them at boot; park backups elsewhere ✅.

For a complete, reproducible LAN setup (static IP at boot, gateway, DNS, internet, reachable inbound — all surviving reboot) under Amiberry, see Putting Amix on your real LAN.

NFS (server and client)

Amix includes NFS as both server and client ✅, the SVR4-standard RPC/NFS stack. The install/boot kernel is itself NFS/RPC-capable: the on-floppy bootstrap embeds a full NFS/RPC client string table (confirmed by string analysis of amix_21_boot.adf) ✅, so network booting / network install paths are wired in at the bootstrap level.

Typical usage follows ordinary SVR4 conventions:

# Server: export a directory (entries in /etc/dfs/dfstab, then):
shareall
share

# Client: mount a remote export.
mount -F nfs server:/export/home /mnt

share/shareall/dfstab and mount -F nfs are the SVR4 distributed-filesystem (DFS) interfaces; Amix carries them as part of the SVR4 base ✅. For local disk and filesystem details (UFS vs s5) see filesystems and disks.

Serial networking: SLIP is buggy, no PPP

  • PPP is not available on Amix ✅ — there is no PPP stack to dial out with.
  • SLIP exists but is buggy 🟡. The reported workaround is to reboot between SLIP sessions: a connection that has been torn down does not cleanly reset, so a second dial → connect in the same uptime tends to fail. Treat SLIP as a one-shot-per-boot facility. This is recorded in the quirks checklist.

If you need IP over serial in practice, the community guidance is effectively "use Ethernet (A2065 or Hydra) instead" 🟡.

Adding other network cards

Because the kernel is monolithic with no loadable modules ✅, a non-A2065 card needs a driver compiled into /unix. The modern, fully worked example is the Hydra AmigaNet driver — and as of 2026-06 it works on real hardware: ARP resolves and ICMP ping reaches both the local gateway and external IPs, which the repo calls "believed to be the first working AMIX network driver for the Hydra card" 🟡 (first-party). See the Hydra case study for the bring-up story.

  • hydra-amix is a STREAMS / DLPI network driver for the Hydra card (an NE2000 / DP8390 design), rev 1.2a, Zorro II, AutoConfig ID 2121/1 (0x08490001) ✅.
  • It registers at cdevsw slot 47 with the hya tag. Amix is SVR4.0 — there is no ifconfig … plumb; you link the interface in with slink addaen /dev/hya0 hya0, then ifconfig hya0 <ip> netmask <m> up -trailers ✅.
  • Its entry points (hydraopen, hydrawput, hydraintr, setup_ne2000) handle DLPI primitives (DL_INFO_REQ, DL_BIND_REQ, DL_UNITDATA_REQ) and the INT2 RX/TX interrupt; hydraopen runs a three-method card detect (autocon()/bootinfo with address validation, then direct Zorro II I/O-slot and memory probes — the bootinfo table can be corrupt on 2.1p2), and it deliberately mirrors the existing A2065 LANCE driver (aen/) ✅.
  • It is built natively on the Amix box (make in the driver dir, make force to relink the kernel) with GCC 2.7.2.3 packaged on amigaunix.com — no cross-compiler; it is source-only because building needs a licensed Amix tree ✅.

Full detail — the build line, the DLPI flow, and the LANCE-mirroring design — is on the Hydra case study. The general procedure for writing this class of driver is on Writing a STREAMS driver, and the relink/boot-partition steps are on the kernel build page.

Build note: hydra-amix is built natively on the Amix box with GCC 2.7.2.3 (a pkg on amigaunix.com) — no cross-compiler is needed. The m68k-amix-gcc cross-compiler still has no public, reproducible recipe 🔴, but that gap is moot for building network drivers on a real/emulated Amix. You do still need a licensed Amix install (kernel headers/libs aren't redistributable). See the toolchain page.

Quick reference

Task Command / file Tag
Bring A2065 up ifconfig aen0 <ip> netmask <mask> up
Bring Hydra up slink addaen /dev/hya0 hya0, then ifconfig hya0 <ip> … up -trailers (no ifconfig plumb on SVR4.0)
Default route (metric required) route add default <gw> 1 ✅/🟡
Static name→IP, resolver fallback /etc/hosts
Enable DNS (1/2) ln -f /usr/lib/libsockdns.so /usr/lib/libsocket.so + /etc/resolv.conf (nameservers only)
Enable DNS (2/2) cp /etc/netconfig.DNS /etc/netconfig (activates /usr/lib/resolv.so)
Unset domain (or DNS breaks) cp /dev/null /etc/domain; domainname "" — else it's appended to every lookup
Fix slow boot after DNS literal IPs in boot ifconfigs: lo0 127.0.0.1, aen0 <static-ip> — else +180 s/boot
NFS export / mount share / shareall; mount -F nfs host:/path /mnt
SLIP works once per boot; reboot between sessions 🟡
PPP not available

See also

Sources

  • Research brief §11 "Networking, X11, userland" (STREAMS TCP/IP; aen0/A2065; static IP, no DHCP; DNS off by default + libsockdns.so swap, in.named, /etc/resolv.conf; route add default <gw> 1; NFS server+client; SLIP buggy; no PPP).
  • Research brief §2 "Hardware & requirements" (A2065 native; Hydra via hydra-amix; Ariadne I via Gateway 🟡).
  • Research brief §6 (isoriano1968/hydra-amix — STREAMS/DLPI, NE2000/DP8390, cdevsw slot 47, hya0, AutoConfig 0x08490001, three-method autoconfig detect, native make/make force build with GCC 2.7.2.3 from amigaunix.com, slink bring-up).
  • Research brief §4 "Kernel architecture" (monolithic SVR4; STREAMS, TLI + BSD sockets; no loadable modules).
  • Research brief §3 / §10 (amix_21_boot.adf string analysis — embedded NFS/RPC client string table), via tools/inspect-adf.sh.
  • Research brief §12 "Quirks checklist" (DNS off by default; SLIP reboot bug).
  • Research brief §13 (🔴 no public m68k-amix-gcc cross-compiler recipe — moot for on-box driver builds).
  • Ditto, Writing Amix Device Drivers, 1990 European Amiga Developer's Conference (cites the SVR4 Streams Programmer's Guide and Network Programmer's Guide).
  • github.com/isoriano1968/hydra-amix
  • amigaunix.com — networking (community-reported resolver/DNS procedure).
  • The A4091-on-Amix project — networking investigation, 2026-06-07 (reproduced locally ✅): instrumented /etc/rc2 per-script timing on Amix 2.1c under Amiberry; DNS-enabled boot 210 s → 29 s after replacing the boot-time ifconfig hostnames with literal IPs. Source files: /etc/rc2.d/S69inet, /etc/inet/network-config, /etc/inet/rc.inet on the running system.