Round 292: TC ext, IP Rule ext, IP Route ext, IP Link ext, Bridge ext (20 commands)

ober

39409c69b402eda99ce057d2789d41d14b85bca7

diff --git a/docs/jemacs-vs-emacs.md b/docs/jemacs-vs-emacs.md
index 823b183..dcda212 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 292 — TC ext, IP Rule ext, IP Route ext, IP Link ext, Bridge ext
+
+| Command | Status | Description |
+|---------|--------|-------------|
+| tc-qdisc-list | :orange_circle: | List TC qdiscs |
+| tc-qdisc-add | :orange_circle: | Add TC qdisc |
+| tc-class-list | :orange_circle: | List TC classes |
+| tc-class-add | :orange_circle: | Add TC class |
+| tc-filter-list | :orange_circle: | List TC filters |
+| tc-filter-add | :orange_circle: | Add TC filter |
+| ip-rule-list | :orange_circle: | List IP rules |
+| ip-rule-add | :orange_circle: | Add IP rule |
+| ip-route-show | :orange_circle: | Show IP routes |
+| ip-route-add | :orange_circle: | Add IP route |
+| ip-neigh-list | :orange_circle: | List IP neighbors |
+| ip-neigh-flush | :orange_circle: | Flush neighbor cache |
+| ip-link-show | :orange_circle: | Show network links |
+| ip-link-set | :orange_circle: | Set link properties |
+| ip-addr-show | :orange_circle: | Show IP addresses |
+| ip-addr-add | :orange_circle: | Add IP address |
+| bridge-list | :orange_circle: | List bridges |
+| bridge-add | :orange_circle: | Create bridge |
+| bridge-fdb | :orange_circle: | Show bridge FDB |
+| bridge-vlan | :orange_circle: | Show bridge VLANs |
+
 ### Round 291 — SMART ext, Hdparm ext, Blkid ext, Fdisk ext, Mkfs ext
 
 | Command | Status | Description |
diff --git a/src/jerboa-emacs/editor-extra-final.ss b/src/jerboa-emacs/editor-extra-final.ss
index c4371b2..69d35f0 100644
--- a/src/jerboa-emacs/editor-extra-final.ss
+++ b/src/jerboa-emacs/editor-extra-final.ss
@@ -22489,4 +22489,52 @@
   (let* ((echo (app-state-echo app)))
     (echo-read-string echo "Device: "
       (lambda (dev)
-        (echo-message! echo (str "Tune2fs: info for " dev))))))
\ No newline at end of file
+        (echo-message! echo (str "Tune2fs: info for " dev))))))
+
+;;; Round 292 — IP Link ext, Bridge ext (batch 2)
+
+(def (cmd-ip-neigh-list app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "IP: listing neighbors")))
+
+(def (cmd-ip-neigh-flush app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "IP: flushing neighbor cache")))
+
+(def (cmd-ip-link-show app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "IP: showing links")))
+
+(def (cmd-ip-link-set app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Interface: "
+      (lambda (iface)
+        (echo-message! echo (str "IP: setting link " iface))))))
+
+(def (cmd-ip-addr-show app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "IP: showing addresses")))
+
+(def (cmd-ip-addr-add app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Address/interface: "
+      (lambda (addr)
+        (echo-message! echo (str "IP: adding address " addr))))))
+
+(def (cmd-bridge-list app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Bridge: listing bridges")))
+
+(def (cmd-bridge-add app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Bridge name: "
+      (lambda (name)
+        (echo-message! echo (str "Bridge: creating " name))))))
+
+(def (cmd-bridge-fdb app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Bridge: showing FDB entries")))
+
+(def (cmd-bridge-vlan app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Bridge: showing VLAN entries")))
\ 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 5f5eb5b..c963d6a 100644
--- a/src/jerboa-emacs/editor-extra-modes.ss
+++ b/src/jerboa-emacs/editor-extra-modes.ss
@@ -23178,3 +23178,55 @@
       (lambda (dev)
         (echo-message! echo (str "Blkid: info for " dev))))))
 
+;;; Round 292 — TC ext, IP Rule ext, IP Route ext (batch 1)
+
+(def (cmd-tc-qdisc-list app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "TC: listing qdiscs")))
+
+(def (cmd-tc-qdisc-add app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Interface: "
+      (lambda (iface)
+        (echo-message! echo (str "TC: adding qdisc on " iface))))))
+
+(def (cmd-tc-class-list app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "TC: listing classes")))
+
+(def (cmd-tc-class-add app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Interface: "
+      (lambda (iface)
+        (echo-message! echo (str "TC: adding class on " iface))))))
+
+(def (cmd-tc-filter-list app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "TC: listing filters")))
+
+(def (cmd-tc-filter-add app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Interface: "
+      (lambda (iface)
+        (echo-message! echo (str "TC: adding filter on " iface))))))
+
+(def (cmd-ip-rule-list app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "IP: listing routing rules")))
+
+(def (cmd-ip-rule-add app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Rule: "
+      (lambda (rule)
+        (echo-message! echo (str "IP: adding rule " rule))))))
+
+(def (cmd-ip-route-show app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "IP: showing routes")))
+
+(def (cmd-ip-route-add app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Route: "
+      (lambda (route)
+        (echo-message! echo (str "IP: adding route " route))))))
+
diff --git a/src/jerboa-emacs/editor-extra-regs2.ss b/src/jerboa-emacs/editor-extra-regs2.ss
index e38a83b..4eb5230 100644
--- a/src/jerboa-emacs/editor-extra-regs2.ss
+++ b/src/jerboa-emacs/editor-extra-regs2.ss
@@ -7549,4 +7549,25 @@
   (register-command! 'mkfs-xfs cmd-mkfs-xfs)
   (register-command! 'mkfs-btrfs cmd-mkfs-btrfs)
   (register-command! 'tune2fs-info cmd-tune2fs-info)
+  ;; Round 292
+  (register-command! 'tc-qdisc-list cmd-tc-qdisc-list)
+  (register-command! 'tc-qdisc-add cmd-tc-qdisc-add)
+  (register-command! 'tc-class-list cmd-tc-class-list)
+  (register-command! 'tc-class-add cmd-tc-class-add)
+  (register-command! 'tc-filter-list cmd-tc-filter-list)
+  (register-command! 'tc-filter-add cmd-tc-filter-add)
+  (register-command! 'ip-rule-list cmd-ip-rule-list)
+  (register-command! 'ip-rule-add cmd-ip-rule-add)
+  (register-command! 'ip-route-show cmd-ip-route-show)
+  (register-command! 'ip-route-add cmd-ip-route-add)
+  (register-command! 'ip-neigh-list cmd-ip-neigh-list)
+  (register-command! 'ip-neigh-flush cmd-ip-neigh-flush)
+  (register-command! 'ip-link-show cmd-ip-link-show)
+  (register-command! 'ip-link-set cmd-ip-link-set)
+  (register-command! 'ip-addr-show cmd-ip-addr-show)
+  (register-command! 'ip-addr-add cmd-ip-addr-add)
+  (register-command! 'bridge-list cmd-bridge-list)
+  (register-command! 'bridge-add cmd-bridge-add)
+  (register-command! 'bridge-fdb cmd-bridge-fdb)
+  (register-command! 'bridge-vlan cmd-bridge-vlan)
 )