Files
Daniel Markstedt 485298ffe5 restore X68000 Host Bridge support
Restore the SCBR device as an X68000 Host Bridge, including the Human68k-compatible host file-system service and the bridge-specific SCSI message handlers. Back its Ethernet path with the TAP driver, derive a stable locally administered MAC address, preserve the driver minimum-frame/FCS expectations, and restrict received traffic to its own unicast frames and broadcasts.

Match the RASCTL/RASETHER/RASDRV bridge protocol that originated in the parent RaSCSI project: dispatch its non-standard message format on READ(10)/WRITE(10) (0x28/0x2a), with type, function, phase, and a three-byte byte count carried in the CDB. Advertise the legacy control channel required by RASCTL, translate its list and device-management commands to PiSCSI operations, and defer stop or system-shutdown requests until after the response is sent, while gating this insecure interface behind a new '-c disabled|media|full' runtime option. Preserve the type-1 Ethernet exchange used by RASETHER and the type-2, phased filesystem exchange used by RASDRV.

Register the device in the factory, protobuf API, controller transfer path, command-line tooling, device listings, and web UI. Share the explicit bridge and proxy-ARP topology workflow with DaynaPort so both adapters validate and use the same mode/interface pair.

Add build support for iconv where needed, extend unit coverage for device creation, RAS* protocol handling, CLI parsing, web attachment, and topology selection, and update the man pages and network-profile documentation for Host Bridge operation and its networking limits.
2026-09-01 00:52:00 +02:00

5.3 KiB

PiSCSI NetworkManager profiles

PiSCSI supports two explicitly selected network-adapter topologies on Raspberry Pi OS Trixie and Forky with NetworkManager. DaynaPort and Host Bridge use the same host-side profiles. Installing the PiSCSI package only installs inert templates, services, and /etc/piscsi/network.conf; it never creates a bridge, changes an active connection, starts proxy-ARP, or changes firewall state.

The required parprouted and dhcp-helper packages are suggested rather than installed automatically. This prevents dhcp-helper's generic service from binding DHCP on an existing host interface before the user selects proxy-ARP.

Wired bridge

Bridge mode is the protocol-complete host-side choice: it supports DHCP, AppleTalk, multicast, and non-IP Ethernet protocols. NetworkManager must own the bridge, the physical Ethernet port, and the bridge address. PiSCSI owns only the ephemeral piscsi0 TAP membership while a network adapter is attached. DaynaPort can use that complete Ethernet service; the Host Bridge driver accepts only its own unicast frames and Ethernet broadcasts.

From a local console, preview and apply the named profile with:

sudo piscsi-network-profile --dry-run apply bridge eth0
sudo piscsi-network-profile --console-acknowledge apply bridge eth0

The command prints every change, refuses to run without NetworkManager, and creates only the named PiSCSI wired bridge and PiSCSI wired bridge port connections. --console-acknowledge is explicit approval and skips the otherwise required local-terminal APPLY prompt. It can be removed with sudo piscsi-network-profile --console-acknowledge remove bridge.

For manual configuration, the package provides inert keyfile templates in /usr/share/piscsi/network/. Substitute unique UUIDs, the physical NIC, and the physical Ethernet MAC in the templates, copy them to /etc/NetworkManager/system-connections/ with mode 0600, then reload NetworkManager. The bridge MAC must remain distinct from the emulated client MAC on piscsi0. The equivalent commands are:

ethernet_mac=$(cat /sys/class/net/eth0/address)
nmcli connection add type bridge ifname piscsi_bridge con-name 'PiSCSI wired bridge' ipv4.method auto ipv6.method auto bridge.stp no 802-3-ethernet.cloned-mac-address "$ethernet_mac"
nmcli connection add type ethernet ifname eth0 master piscsi_bridge
nmcli connection up 'PiSCSI wired bridge'

Replace eth0 with the selected physical Ethernet interface. Verify that the bridge owns DHCP and the selected Ethernet MAC, and that the physical port has no independent IP address before attaching a PiSCSI network adapter with mode=bridge:interface=piscsi_bridge.

Wi-Fi proxy ARP

Proxy-ARP exposes a PiSCSI network-adapter client directly on the Wi-Fi IPv4 LAN. It supports IPv4 unicast and DHCP only. It does not provide IPv6, AppleTalk, multicast, mDNS reflection, or general Ethernet bridging. The Host Bridge driver additionally accepts only its own unicast frames and Ethernet broadcasts, regardless of the selected profile.

Before selecting this profile, remove any legacy PiSCSI NAT/firewall rules manually. The package and profile command never remove, flush, or rewrite iptables/nftables state. Keep a local console or another recovery path: Wi-Fi proxy-ARP cannot replace a broken Wi-Fi association and is not a transparent Ethernet bridge.

Install the suggested dependencies, then preview and apply the profile from a local console:

sudo apt install parprouted dhcp-helper
sudo piscsi-network-profile --dry-run apply proxyarp wlan0
sudo piscsi-network-profile --console-acknowledge apply proxyarp wlan0

Replace wlan0 with the NetworkManager-managed Wi-Fi interface holding the Pi's global IPv4 lease. The command writes only /etc/piscsi/network.conf, reloads PiSCSI runtime configuration, and disables the generic dhcp-helper.service to avoid its UDP/67 conflict. To remove the PiSCSI selection, use sudo piscsi-network-profile --console-acknowledge remove proxyarp. PISCSI_PROXYARP_PROMISC=true is a compatibility option; PiSCSI records and restores the flag only if it enabled promiscuous mode itself.

The udev rule starts piscsi-proxyarp.service only after PiSCSI creates piscsi0; it then starts the PiSCSI-owned DHCP relay. The relay conflicts with the generic dhcp-helper.service to prevent UDP/67 contention. A NetworkManager dispatcher restarts both PiSCSI services after the selected uplink reconnects or receives a changed DHCP lease.

Verify an attachment with:

ip -br link show piscsi0
ip -4 addr show dev piscsi0
systemctl status piscsi-proxyarp piscsi-dhcp-relay
journalctl -u piscsi-proxyarp -u piscsi-dhcp-relay -b

On detach, PiSCSI removes only the exact /32 it added to piscsi0, stops only PiSCSI-owned processes, and restores promiscuous mode only when it had changed it. It does not flush addresses, routes, or firewall state.

Network-adapter attachment

Always submit a complete mode/interface pair. For example:

scsictl -i 6 -c attach -t scdp -f 'mode=bridge:interface=piscsi_bridge'
scsictl -i 6 -c attach -t scdp -f 'mode=proxyarp:interface=wlan0'
scsictl -i 5 -c attach -t scbr -f 'mode=bridge:interface=piscsi_bridge'
scsictl -i 5 -c attach -t scbr -f 'mode=proxyarp:interface=wlan0'

Do not use the retired inet parameter or a comma-separated interface list. They describe the obsolete NAT/implicit-bridge path and are rejected.