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
23 changes: 18 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@ Plug your laptop into a DSP, camera, switcher, display or control processor, pre

![ProDHCPServer main window in dark mode](docs/images/main-window-dark.png)

> **Status:** Phase 1 (the core DHCP loop) is being built and tested on real hardware. Phases 2 and 3 follow once Phase 1 passes. See [Roadmap](#roadmap).
> **Status:** Phases 1 (the core DHCP loop) and 2 (ping graphs, session log export, profiles) are done and passed their hardware tests in October 2026. Phase 3 (discovery) is next. See [Roadmap](#roadmap).

## Why

Most AV kit ships set to DHCP, and on a bench or a fresh site there's usually nothing to hand out addresses. The usual fixes (a spare router, a command-line DHCP server, guessing static IPs) are slow and leave your laptop's adapter in a mess. ProDHCPServer does the whole job in one window: it sets your adapter up, serves addresses on that adapter only, shows you the device, and puts everything back afterwards.

## Features

**Phase 1**
**Phase 1: core loop**

- **Pick your Ethernet adapter** from a list showing link state, speed and current IP. The app remembers your last choice.
- **Safe adapter changes.** Your adapter's settings are backed up before anything changes and restored on Stop, on exit, at Windows shutdown, and after a crash (offered the next time you open the app).
Expand All @@ -23,10 +23,11 @@ Most AV kit ships set to DHCP, and on a bench or a fresh site there's usually no
- **Device card** with IP, MAC address, manufacturer (offline lookup, no internet needed), lease time and first-seen time.
- **Open WebUI** in one click, picking http or https from whichever port is open, plus quick port buttons and Copy IP.
- **Several devices at once** behind a small switch, each with its own lease.
- **Spots a USB adapter that has stopped receiving.** Some USB Ethernet adapters keep showing "connected" but quietly stop receiving after a few seconds, which looks exactly like a silent device. If nothing has come in for 20 seconds while the laptop keeps sending, the cable/link step says so and tells you to replug the adapter. Realtek RTL8152/8153 adapters on a driver older than 2019 (including Windows' own 2015 driver) are flagged as soon as you pick them, with where to get the newer driver.
- **Wi-Fi and VPN overlap warnings**, with a one-click option to turn Wi-Fi off until you press Stop.
- **Dark and light themes**, with large status text you can read from arm's length.

**Phase 2 (in progress)**
**Phase 2: visibility**

- **Live ping graph for every device.** Each device with a lease is pinged once a second. The device list shows a small latency graph with the latest reply time, and the selected device shows the last two minutes with average, min, max and loss. Missed replies show as red marks. When a device stops answering, or starts again, the session log records it.
- **Session log you can filter and export.** Filter by level (everything, warnings and problems, problems only), by area (adapter, server, DHCP, device) or by text such as an IP or MAC address. **Export log…** saves what's shown as a text file for a job report, or as CSV for Excel.
Expand All @@ -40,6 +41,8 @@ Most AV kit ships set to DHCP, and on a bench or a fresh site there's usually no

Each preset's pool leaves the documented factory addresses free. Presets can't be changed: duplicate one to make your own.

![The Profiles panel with the Default preset and links to the manufacturers' documentation](docs/images/profiles-panel-dark.png)

**Default profile:** server IP `192.168.100.1/24`, addresses `192.168.100.100` to `192.168.100.199`, 60-minute leases. Make your own profile under **Profiles** (the gear button) to change any of these.

## Download and run
Expand Down Expand Up @@ -67,16 +70,26 @@ Most AV kit ships set to DHCP, and on a bench or a fresh site there's usually no
| Step 5 amber, no DHCP requests after 30 seconds | The device probably has a static IP or DHCP turned off. |
| The device gets an offer but never accepts it | Some embedded network stacks ignore their own broadcast flag. Tick **Always broadcast replies** in your profile and try again. |
| Step 1 amber, mentions Wi-Fi or VPN | Another adapter is on the same subnet. Use **Turn it off until Stop**, or use a profile with a different server IP. |
| Step 2 says the cable shows connected but nothing has been received | The USB network adapter has stopped receiving. Unplug it from the laptop and plug it back in. If step 1 mentions an old Realtek driver, install the newer one: Windows Settings > Windows Update > Advanced options > Optional updates > Driver updates, tick the Realtek one only. |
| Ping times jump around (hundreds of ms) with AV-over-IP gear on an unmanaged switch | Probably the network, not the device or the app. See [Field notes](#field-notes). |
| The app was killed mid-session | Open it again and click **Restore now** on the banner. The backup lives in `C:\ProgramData\ProDHCPServer\adapter-backup.json` until it's restored. |

If something goes wrong, [open an issue](https://github.com/cookingwithsimon/ProDHCPServer/issues/new/choose) using the **Problem on site** form, and include the session log text if you have it.

## Field notes

Things learned on real hardware that are worth knowing on site.

- **AV-over-IP multicast slows everything on an unmanaged switch.** With an Extron NAV encoder (NAV E 101) and decoder on a small unmanaged switch, pings to both units averaged about 200 ms and jumped as high as 600 ms, with no lost packets. Windows' own `ping` showed the same, so it's the network, not the app or the device. The encoder's multicast video floods every port of an unmanaged switch. NAV, Dante video, SDVoE and other AV-over-IP gear needs a managed switch with **IGMP snooping** turned on (and an IGMP querier on the network), so multicast only goes to the ports that asked for it. Short of that, test the encoder on its own or keep the laptop off the video switch.
- **Realtek USB adapters on the old Windows driver stop receiving.** Realtek RTL8153 USB Gigabit adapters on Microsoft's 2015 inbox driver went silent after a few seconds while the link light stayed on. Realtek's current driver (from Windows Update's optional driver updates) fixed it. The app now warns about this combination and spots the stall itself (see Troubleshooting).
- **Managed work laptops may block the exe.** IT-managed laptops with Microsoft Defender's attack surface reduction rules can block any new unsigned exe, so every new build is refused. Test on an unmanaged laptop, or ask IT to allow a fixed folder (for example `C:\Tools\ProDHCPServer\`) rather than one file's hash, which changes with every build.

## Roadmap

Each phase ends with a hardware test pass on real AV equipment before the next one starts.

- **Phase 1: core loop** (done, hardware-tested October 2026).
- **Phase 2: visibility** (in progress). Continuous ping with a latency graph per device, a full session log you can filter and export (TXT/CSV), and saved profiles for subnet, pool, lease time and DHCP options (router, DNS, NTP, option 43/66/150 and custom options).
- **Phase 2: visibility** (done, hardware-tested October 2026). Continuous ping with a latency graph per device, a full session log you can filter and export (TXT/CSV), and saved profiles for subnet, pool, lease time and DHCP options (router, DNS, NTP, option 43/66/150 and custom options).
- **Phase 3: discovery.** Find devices that already have a static IP, move your adapter onto their subnet in one click, and discover devices via mDNS (including Dante), SSDP/UPnP and LLDP/CDP.

## Files it writes
Expand Down Expand Up @@ -109,7 +122,7 @@ dotnet publish src/ProDHCPServer.App -c Release -r win-x64 -o publish
| `src/ProDHCPServer.Windows` | Windows specifics: adapter reading and changes, the UDP 67 socket, ARP entries, firewall rule, other-server probe, ping and port checks. |
| `src/ProDHCPServer.App` | The WPF app: UI, elevation prompt, crash handling. |
| `tests/` | Core unit tests (run anywhere) and Windows integration tests (run on the Windows CI runner and never change adapter settings). |
| `docs/` | Hardware test checklists for each phase. |
| `docs/` | Hardware test checklists for each phase, and the screenshots used in this README (taken by the CI smoke test). |
| `tools/` | CI smoke test (launches the app and takes screenshots) and the manufacturer list updater (`python3 tools/update-oui.py`). |

**CI.** Every push and pull request runs the **Build and test** workflow on Windows: build, Core and Windows tests, publish the exe, and a smoke test that screenshots the app in light and dark mode. The exe and screenshots are uploaded as run artifacts.
Expand Down
3 changes: 3 additions & 0 deletions docs/hardware-test-phase1.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,3 +56,6 @@ Tick each box. If something fails, open the **Session log**, select the red line

## What to send back
For anything that failed: which step, what you expected, and the log details text. The adapter's original settings are also kept in `C:\ProgramData\ProDHCPServer\adapter-backup.json` while a session is running.

## Results
Passed 2026-10-16 (every section). Section 5 was tested against a test DHCP server on a second laptop on the same switch; **Serve anyway** wasn't tried because it wasn't our network. Lesson from the run: a Realtek RTL8153 USB adapter on Windows' 2015 inbox driver stopped receiving after a few seconds while the link stayed up. Realtek's current driver fixed it, and the app now warns about that driver and spots the stall itself.
5 changes: 4 additions & 1 deletion docs/hardware-test-phase2.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

About 20 minutes. You need: the unmanaged laptop, two AV devices on a small unmanaged switch (the NAV E and Desk Pro are ideal), and a USB stick or a second laptop for the profile import step if you have one.

Download `ProDHCPServer.exe` from the latest successful **Build and test** run on the Phase 2 pull request (Actions tab → run → Artifacts → `ProDHCPServer-win-x64`). Click **More info → Run anyway** on the SmartScreen warning.
Download `ProDHCPServer.exe` from the latest successful **Build and test** run on `main` (Actions tab → run → Artifacts → `ProDHCPServer-win-x64`). Click **More info → Run anyway** on the SmartScreen warning.

Tick each box. If something fails, use **Export log…** (section 2) and send me the file.

Expand Down Expand Up @@ -36,3 +36,6 @@ Tick each box. If something fails, use **Export log…** (section 2) and send me

## 4. Phase 1 still works
- [ ] Quick repeat of the Phase 1 main case: one device straight on the cable, Start, lease, ping and WebUI green, **Open WebUI**, Stop, adapter back to its original settings.

## Results
Passed 2026-10-16 (every item), on an unmanaged laptop with an Extron NAV SD 101 decoder and NAV E 101 encoder on an unmanaged switch. Pings to both NAV units averaged about 200 ms (up to about 600 ms) with no loss. Windows' own `ping` showed the same, so that's the network, not the app: the encoder's multicast video floods an unmanaged switch. NAV and other AV-over-IP gear needs a managed switch with IGMP snooping.
Binary file modified docs/images/main-window-dark.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/images/profiles-panel-dark.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading