commit 3ff55d3aad7e725bb39c30beeb4d625e1a66e08b
parent 22275f311cd1999bbf67c40bbf0df5b71bf84d7b
Author: Daniel Barlow <dan@telent.net>
Date: Sun, 10 Sep 2023 12:15:34 +0100
odhcp-script: unique subdirectory names for each parsed address
Diffstat:
2 files changed, 25 insertions(+), 16 deletions(-)
diff --git a/pkgs/odhcp-script/expected b/pkgs/odhcp-script/expected
@@ -1,20 +1,20 @@
-./address/2001-8b0-1111-1111-0-ffff-1234-5678/address:2001:8b0:1111:1111:0:ffff:1234:5678
-./address/2001-8b0-1111-1111-0-ffff-1234-5678/len:128
-./address/2001-8b0-1111-1111-0-ffff-1234-5678/preferred:3600
-./address/2001-8b0-1111-1111-0-ffff-1234-5678/valid:7200
+./address/2001-8b0-1111-1111-0-ffff-1234-5678_BVG8Gro50UM/address:2001:8b0:1111:1111:0:ffff:1234:5678
+./address/2001-8b0-1111-1111-0-ffff-1234-5678_BVG8Gro50UM/len:128
+./address/2001-8b0-1111-1111-0-ffff-1234-5678_BVG8Gro50UM/preferred:3600
+./address/2001-8b0-1111-1111-0-ffff-1234-5678_BVG8Gro50UM/valid:7200
./addresses:2001:8b0:1111:1111:0:ffff:1234:5678/128,3600,7200
./ifname:ppp0
./option_1:000300018cfdf02420eb
./option_2:000300010df0feca0df0
./passthru:00170020200108b0000000000000000000002020200108b0000000000000000000002021
-./prefix/2001-8b0-de3a-22/address:2001:8b0:de3a:22::
-./prefix/2001-8b0-de3a-22/len:64
-./prefix/2001-8b0-de3a-22/preferred:7200
-./prefix/2001-8b0-de3a-22/valid:7200
-./prefix/2001-8b0-de3a-abcd/address:2001:8b0:de3a:abcd::
-./prefix/2001-8b0-de3a-abcd/len:64
-./prefix/2001-8b0-de3a-abcd/preferred:7200
-./prefix/2001-8b0-de3a-abcd/valid:7200
+./prefix/2001-8b0-de3a-22_hiaEztRS00M/address:2001:8b0:de3a:22::
+./prefix/2001-8b0-de3a-22_hiaEztRS00M/len:64
+./prefix/2001-8b0-de3a-22_hiaEztRS00M/preferred:7200
+./prefix/2001-8b0-de3a-22_hiaEztRS00M/valid:7200
+./prefix/2001-8b0-de3a-abcd_HmTdEWrIMEM/address:2001:8b0:de3a:abcd::
+./prefix/2001-8b0-de3a-abcd_HmTdEWrIMEM/len:64
+./prefix/2001-8b0-de3a-abcd_HmTdEWrIMEM/preferred:7200
+./prefix/2001-8b0-de3a-abcd_HmTdEWrIMEM/valid:7200
./prefixes:2001:8b0:de3a:abcd::/64,7200,7200 2001:8b0:de3a:22::/64,7200,7200
./ra_hoplimit:64
./ra_mtu:0
diff --git a/pkgs/odhcp-script/odhcp6-script.fnl b/pkgs/odhcp-script/odhcp6-script.fnl
@@ -1,4 +1,4 @@
-(local { : split : merge } (require :anoia))
+(local { : split : merge : hash : base64url } (require :anoia))
(local { : view } (require :fennel))
(local { : mktree : rmtree } (require :anoia.fs))
@@ -26,9 +26,18 @@
(fn write-addresses [prefix addresses]
(each [_ a (ipairs (split " " addresses))]
(let [address (parse-address a)
- keydir (.. prefix (-> address.address
- (: :gsub "::$" "")
- (: :gsub ":" "-")))]
+ suffix (base64url (string.pack "n" (hash a)))
+ ;; keydir should be a function of all the address
+ ;; attributes: we want it to change whenever anything changes
+ ;; so that clients can see which addresses are new without
+ ;; deep table comparisons
+ keydir (..
+ prefix
+ (-> address.address
+ (: :gsub "::$" "")
+ (: :gsub ":" "-"))
+ "_"
+ suffix)]
(mktree (.. state-directory "/" keydir))
(each [k v (pairs address)]
(write-value (.. keydir "/" k) v)))))