Round 281: DNS ext, LDAP ext, SNMP ext, NTP ext, DHCP ext (20 commands)

ober

bb42d6459422282cb2bc5aad7aff989219aad442

diff --git a/docs/jemacs-vs-emacs.md b/docs/jemacs-vs-emacs.md
index d836c9d..45a446e 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 281 — DNS ext, LDAP ext, SNMP ext, NTP ext, DHCP ext
+
+| Command | Status | Description |
+|---------|--------|-------------|
+| dns-lookup | :orange_circle: | DNS lookup for hostname |
+| dns-reverse | :orange_circle: | Reverse DNS lookup |
+| dns-mx | :orange_circle: | Query DNS MX records |
+| dns-ns | :orange_circle: | Query DNS NS records |
+| ldap-bind | :orange_circle: | Bind to LDAP server |
+| ldap-modify | :orange_circle: | Modify LDAP entry |
+| ldap-add | :orange_circle: | Add LDAP entry |
+| ldap-delete | :orange_circle: | Delete LDAP entry |
+| snmp-get | :orange_circle: | SNMP GET request |
+| snmp-walk | :orange_circle: | SNMP walk OID tree |
+| snmp-set | :orange_circle: | SNMP SET request |
+| snmp-trap | :orange_circle: | Send SNMP trap |
+| ntp-query | :orange_circle: | Query NTP server |
+| ntp-peers | :orange_circle: | Show NTP peers |
+| ntp-status | :orange_circle: | Show NTP status |
+| ntp-sync | :orange_circle: | Sync with NTP server |
+| dhcp-discover | :orange_circle: | DHCP discover broadcast |
+| dhcp-lease-list | :orange_circle: | List DHCP leases |
+| dhcp-release | :orange_circle: | Release DHCP lease |
+| dhcp-renew | :orange_circle: | Renew DHCP lease |
+
 ### Round 280 — MQTT ext, WebSocket ext, SSE ext, HTTP/2 ext, QUIC ext
 
 | Command | Status | Description |
diff --git a/src/jerboa-emacs/editor-extra-final.ss b/src/jerboa-emacs/editor-extra-final.ss
index 104d78e..49222cb 100644
--- a/src/jerboa-emacs/editor-extra-final.ss
+++ b/src/jerboa-emacs/editor-extra-final.ss
@@ -21929,4 +21929,48 @@
 
 (def (cmd-quic-close app)
   (let* ((echo (app-state-echo app)))
-    (echo-message! echo "QUIC: closing connection")))
\ No newline at end of file
+    (echo-message! echo "QUIC: closing connection")))
+
+;;; Round 281 — SNMP ext, NTP ext, DHCP ext (batch 2)
+
+(def (cmd-snmp-set app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "SNMP: setting value")))
+
+(def (cmd-snmp-trap app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "SNMP: sending trap")))
+
+(def (cmd-ntp-query app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Server: "
+      (lambda (srv)
+        (echo-message! echo (str "NTP: querying " srv))))))
+
+(def (cmd-ntp-peers app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "NTP: listing peers")))
+
+(def (cmd-ntp-status app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "NTP: showing status")))
+
+(def (cmd-ntp-sync app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "NTP: synchronizing clock")))
+
+(def (cmd-dhcp-discover app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "DHCP: sending discover")))
+
+(def (cmd-dhcp-lease-list app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "DHCP: listing leases")))
+
+(def (cmd-dhcp-release app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "DHCP: releasing lease")))
+
+(def (cmd-dhcp-renew app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "DHCP: renewing lease")))
\ No newline at end of file
diff --git a/src/jerboa-emacs/editor-extra-modes.ss b/src/jerboa-emacs/editor-extra-modes.ss
index a9e2551..533737f 100644
--- a/src/jerboa-emacs/editor-extra-modes.ss
+++ b/src/jerboa-emacs/editor-extra-modes.ss
@@ -22570,3 +22570,57 @@
   (let* ((echo (app-state-echo app)))
     (echo-message! echo "SSE: subscribing to events")))
 
+;;; Round 281 — DNS ext, LDAP ext, SNMP ext, NTP ext, DHCP ext (batch 1)
+
+(def (cmd-dns-lookup app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Hostname: "
+      (lambda (host)
+        (echo-message! echo (str "DNS: looking up " host))))))
+
+(def (cmd-dns-reverse app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "IP address: "
+      (lambda (ip)
+        (echo-message! echo (str "DNS: reverse lookup " ip))))))
+
+(def (cmd-dns-mx app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Domain: "
+      (lambda (domain)
+        (echo-message! echo (str "DNS: MX records for " domain))))))
+
+(def (cmd-dns-ns app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Domain: "
+      (lambda (domain)
+        (echo-message! echo (str "DNS: NS records for " domain))))))
+
+(def (cmd-ldap-bind app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "LDAP: binding to server")))
+
+(def (cmd-ldap-modify app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "LDAP: modifying entry")))
+
+(def (cmd-ldap-add app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "LDAP: adding entry")))
+
+(def (cmd-ldap-delete app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "LDAP: deleting entry")))
+
+(def (cmd-snmp-get app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "OID: "
+      (lambda (oid)
+        (echo-message! echo (str "SNMP: GET " oid))))))
+
+(def (cmd-snmp-walk app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "OID: "
+      (lambda (oid)
+        (echo-message! echo (str "SNMP: WALK " oid))))))
+
diff --git a/src/jerboa-emacs/editor-extra-regs2.ss b/src/jerboa-emacs/editor-extra-regs2.ss
index ef9c6fb..1a5dc5d 100644
--- a/src/jerboa-emacs/editor-extra-regs2.ss
+++ b/src/jerboa-emacs/editor-extra-regs2.ss
@@ -7318,4 +7318,25 @@
   (register-command! 'quic-send cmd-quic-send)
   (register-command! 'quic-stream cmd-quic-stream)
   (register-command! 'quic-close cmd-quic-close)
+  ;; Round 281
+  (register-command! 'dns-lookup cmd-dns-lookup)
+  (register-command! 'dns-reverse cmd-dns-reverse)
+  (register-command! 'dns-mx cmd-dns-mx)
+  (register-command! 'dns-ns cmd-dns-ns)
+  (register-command! 'ldap-bind cmd-ldap-bind)
+  (register-command! 'ldap-modify cmd-ldap-modify)
+  (register-command! 'ldap-add cmd-ldap-add)
+  (register-command! 'ldap-delete cmd-ldap-delete)
+  (register-command! 'snmp-get cmd-snmp-get)
+  (register-command! 'snmp-walk cmd-snmp-walk)
+  (register-command! 'snmp-set cmd-snmp-set)
+  (register-command! 'snmp-trap cmd-snmp-trap)
+  (register-command! 'ntp-query cmd-ntp-query)
+  (register-command! 'ntp-peers cmd-ntp-peers)
+  (register-command! 'ntp-status cmd-ntp-status)
+  (register-command! 'ntp-sync cmd-ntp-sync)
+  (register-command! 'dhcp-discover cmd-dhcp-discover)
+  (register-command! 'dhcp-lease-list cmd-dhcp-lease-list)
+  (register-command! 'dhcp-release cmd-dhcp-release)
+  (register-command! 'dhcp-renew cmd-dhcp-renew)
 )