- pxe-nic-check: count 802.1X only from an authenticator (EAPOL type 0 with EAP Request/Success/Failure). iPXE sends EAPOL-Start on every NIC open and Windows sends Start/Response, so a PXE-booting bay made the verdict 'ge' and the watch stopped dnsmasq for the floor. - pxe-nic-check: join the STP/PAE/LLDP/CDP/PVST+ multicast groups on every capture socket, so CDP-only ports are heard on a plain NIC. - pxe-nic-check --watch: if dnsmasq was (re)started inside the window, re-check (~6 s) before stopping it; skip when already stopped. New --state-cmd and --print-imaging. - pxe-nic-carrier (+ pxe-nic-carrier.service): networkd-dispatcher hook for the imaging NIC only. Carrier loss stops dnsmasq; carrier gain restarts it through its guard if it was running or the hook stopped it. - pxe-dhcp-hook.sh: clear only SMB (tcp 445/139) conntrack entries and sockets, not all traffic for the client, which raced iPXE's first HTTP fetch. - GetPxeScript.aspx: every boot line has a failure branch (iPXE 2.0 accepts an unsigned EFI kernel and fails at boot under Secure Boot, which aborted the script). - Tests: client EAPOL, packet_mreq packing, watch race, shell helpers on stub PATH, lab scenarios eapol-client, br-eapol-client, race, carrier.
17 lines
678 B
Desktop File
17 lines
678 B
Desktop File
# Started (never enabled) by pxe-nic-carrier, the networkd-dispatcher
|
|
# hook, when the imaging NIC gets carrier back. Re-checks the imaging NIC
|
|
# before dnsmasq serves again: if dnsmasq was running (or the hook stopped
|
|
# it on carrier loss), "systemctl restart dnsmasq" so its ExecStartPre
|
|
# guard decides; otherwise it only refreshes /run/pxe-nic-status.json.
|
|
# The hook restarts this unit on every carrier gain and stops it on a
|
|
# carrier loss, so the newest event wins.
|
|
|
|
[Unit]
|
|
Description=PXE NIC carrier change: re-check the imaging NIC before dnsmasq serves
|
|
After=network.target
|
|
|
|
[Service]
|
|
Type=oneshot
|
|
ExecStart=/usr/local/sbin/pxe-nic-carrier --gain
|
|
TimeoutStartSec=120
|