Round 349: Wireguard ext, OpenVPN ext, StrongSwan ext, Tailscale ext, Nebula ext (20 commands)

ober

1ef755511a760340560092ff64596dc4d4ea36b3

diff --git a/docs/jemacs-vs-emacs.md b/docs/jemacs-vs-emacs.md
index 2765568..aaec0be 100644
--- a/docs/jemacs-vs-emacs.md
+++ b/docs/jemacs-vs-emacs.md
@@ -4583,6 +4583,31 @@ No remaining Tier 1 gaps. All core editing, completion, and navigation features 
 | ebib-import-file | :orange_circle: | Import file into Ebib |
 | ebib-push-citation | :orange_circle: | Push Ebib citation to buffer |
 
+### Round 349 — Wireguard ext, OpenVPN ext, StrongSwan ext, Tailscale ext, Nebula ext
+
+| Feature | Status | Notes |
+|---|---|---|
+| wireguard-peers | :orange_circle: | Wireguard: list peers |
+| wireguard-transfer | :orange_circle: | Wireguard: transfer stats |
+| wireguard-allowedips | :orange_circle: | Wireguard: show allowed IPs |
+| wireguard-endpoint | :orange_circle: | Wireguard: show endpoints |
+| openvpn-connect | :orange_circle: | OpenVPN: connect |
+| openvpn-disconnect | :orange_circle: | OpenVPN: disconnect |
+| openvpn-log | :orange_circle: | OpenVPN: connection log |
+| openvpn-routes | :orange_circle: | OpenVPN: pushed routes |
+| strongswan-list | :orange_circle: | StrongSwan: list SAs |
+| strongswan-up | :orange_circle: | StrongSwan: bring up connection |
+| strongswan-down | :orange_circle: | StrongSwan: bring down connection |
+| strongswan-leases | :orange_circle: | StrongSwan: show IP leases |
+| tailscale-status | :orange_circle: | Tailscale: network status |
+| tailscale-peers | :orange_circle: | Tailscale: list peers |
+| tailscale-ip | :orange_circle: | Tailscale: show IP addresses |
+| tailscale-up | :orange_circle: | Tailscale: connect to network |
+| nebula-status | :orange_circle: | Nebula: overlay status |
+| nebula-peers | :orange_circle: | Nebula: list peers |
+| nebula-config | :orange_circle: | Nebula: show configuration |
+| nebula-cert | :orange_circle: | Nebula: certificate info |
+
 ### Round 348 — Nginx ext, HAProxy ext, Envoy ext, Traefik ext, Caddy ext
 
 | Feature | Status | Notes |
diff --git a/src/jerboa-emacs/editor-extra-final.ss b/src/jerboa-emacs/editor-extra-final.ss
index eec277c..7008d28 100644
--- a/src/jerboa-emacs/editor-extra-final.ss
+++ b/src/jerboa-emacs/editor-extra-final.ss
@@ -25471,3 +25471,47 @@
 (def (cmd-caddy-adapt app)
   (let* ((echo (app-state-echo app)))
     (echo-message! echo "Caddy: adapting Caddyfile to JSON")))
+
+;;; Round 349 — StrongSwan ext, Tailscale ext, Nebula ext (batch 2)
+
+(def (cmd-strongswan-down app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "StrongSwan connection name: "
+      (lambda (name)
+        (echo-message! echo (str "StrongSwan: bringing down " name))))))
+
+(def (cmd-strongswan-leases app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "StrongSwan: showing IP leases")))
+
+(def (cmd-tailscale-status app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Tailscale: showing network status")))
+
+(def (cmd-tailscale-peers app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Tailscale: listing peers")))
+
+(def (cmd-tailscale-ip app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Tailscale: showing IP addresses")))
+
+(def (cmd-tailscale-up app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Tailscale: connecting to network")))
+
+(def (cmd-nebula-status app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Nebula: showing overlay status")))
+
+(def (cmd-nebula-peers app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Nebula: listing peers")))
+
+(def (cmd-nebula-config app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Nebula: showing configuration")))
+
+(def (cmd-nebula-cert app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Nebula: showing certificate info")))
diff --git a/src/jerboa-emacs/editor-extra-modes.ss b/src/jerboa-emacs/editor-extra-modes.ss
index f5100ff..16ad59a 100644
--- a/src/jerboa-emacs/editor-extra-modes.ss
+++ b/src/jerboa-emacs/editor-extra-modes.ss
@@ -26184,3 +26184,49 @@
 (def (cmd-envoy-listeners app)
   (let* ((echo (app-state-echo app)))
     (echo-message! echo "Envoy: listing listeners")))
+
+;;; Round 349 — Wireguard ext, OpenVPN ext, StrongSwan ext, Tailscale ext, Nebula ext (batch 1)
+
+(def (cmd-wireguard-peers app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Wireguard: listing peers")))
+
+(def (cmd-wireguard-transfer app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Wireguard: showing transfer stats")))
+
+(def (cmd-wireguard-allowedips app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Wireguard: showing allowed IPs")))
+
+(def (cmd-wireguard-endpoint app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Wireguard: showing endpoints")))
+
+(def (cmd-openvpn-connect app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "OpenVPN config file: "
+      (lambda (cfg)
+        (echo-message! echo (str "OpenVPN: connecting with " cfg))))))
+
+(def (cmd-openvpn-disconnect app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "OpenVPN: disconnecting")))
+
+(def (cmd-openvpn-log app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "OpenVPN: showing connection log")))
+
+(def (cmd-openvpn-routes app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "OpenVPN: showing pushed routes")))
+
+(def (cmd-strongswan-list app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "StrongSwan: listing SAs")))
+
+(def (cmd-strongswan-up app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "StrongSwan connection name: "
+      (lambda (name)
+        (echo-message! echo (str "StrongSwan: bringing up " name))))))
diff --git a/src/jerboa-emacs/editor-extra-regs2.ss b/src/jerboa-emacs/editor-extra-regs2.ss
index 14f98ad..a653a94 100644
--- a/src/jerboa-emacs/editor-extra-regs2.ss
+++ b/src/jerboa-emacs/editor-extra-regs2.ss
@@ -8760,4 +8760,26 @@
   (register-command! 'caddy-reload cmd-caddy-reload)
   (register-command! 'caddy-reverse-proxy cmd-caddy-reverse-proxy)
   (register-command! 'caddy-adapt cmd-caddy-adapt)
+
+  ;; Round 349 — Wireguard ext, OpenVPN ext, StrongSwan ext, Tailscale ext, Nebula ext
+  (register-command! 'wireguard-peers cmd-wireguard-peers)
+  (register-command! 'wireguard-transfer cmd-wireguard-transfer)
+  (register-command! 'wireguard-allowedips cmd-wireguard-allowedips)
+  (register-command! 'wireguard-endpoint cmd-wireguard-endpoint)
+  (register-command! 'openvpn-connect cmd-openvpn-connect)
+  (register-command! 'openvpn-disconnect cmd-openvpn-disconnect)
+  (register-command! 'openvpn-log cmd-openvpn-log)
+  (register-command! 'openvpn-routes cmd-openvpn-routes)
+  (register-command! 'strongswan-list cmd-strongswan-list)
+  (register-command! 'strongswan-up cmd-strongswan-up)
+  (register-command! 'strongswan-down cmd-strongswan-down)
+  (register-command! 'strongswan-leases cmd-strongswan-leases)
+  (register-command! 'tailscale-status cmd-tailscale-status)
+  (register-command! 'tailscale-peers cmd-tailscale-peers)
+  (register-command! 'tailscale-ip cmd-tailscale-ip)
+  (register-command! 'tailscale-up cmd-tailscale-up)
+  (register-command! 'nebula-status cmd-nebula-status)
+  (register-command! 'nebula-peers cmd-nebula-peers)
+  (register-command! 'nebula-config cmd-nebula-config)
+  (register-command! 'nebula-cert cmd-nebula-cert)
 )