fixes; first version
[rrq/hourglass.git] / ipset-control.lsp
index 9c9bf9393d378051677d6aa34f2f0a11bb913b8c..8d931727394da64a567e8bc8aec407093768edfc 100644 (file)
@@ -1,15 +1,18 @@
 
 # Should load from "ipset.cfg"
-(constant 'TABLE "TIMO" 'NET "192.168.104.0/24"
-          'IPSET "/sbin/ipset" )
+(constant 'IPSET SITE:ipset.bin 'TABLE SITE:ipset.table 'NET SITE:control.net)
 
-# Apply "add" or "del" on the controllable as needed, and exit
+;; Return current low-leve "close" or "open" status
+(define (current-status)
+  (if (member NET (exec (format "%s list %s" IPSET TABLE))) "close" "open"))
+
+;; Ensure low-level setting is "close" or "open" as given
 (define (control cmd reason)
-  (let ((a (case cmd ("open" "del") ("close" "add") (true "XXX"))))
-    (when (!= cmd (if (exec (format "%s list %s | grep %s" IPSET TABLE NET))
-                      "close" "open"))
-      (! (println (date-value) (format " ipset-control (%s): " reason)
-                  (format "%s %s %s %s" IPSET a TABLE NET)))))
-  (exit 0))
+  (when (!= cmd (current-status))
+    (let ((todo (case cmd ("open" "del") ("close" "add") (true "XXX"))))
+      (! (println (date-value)
+                  (format " ipset-control (%s): " reason)
+                  (format "%s %s %s %s" IPSET todo TABLE NET)))))
+  )
 
 "ipset-control.lsp"