aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid M. Syzdek <syzdek@bindlebinaries.com>2019-05-24 12:07:09 -0800
committerDavid M. Syzdek <syzdek@bindlebinaries.com>2019-05-24 12:07:09 -0800
commitcf9cdd6b146c9cac2d3693b5a3c14cd2d4d87298 (patch)
tree76d6139f2ec5db339839e4f71b0572ba50b68133
parent6c6c00ca209e8d5971b0aee817606af090f0bd2c (diff)
downloadscratchpad-cf9cdd6b146c9cac2d3693b5a3c14cd2d4d87298.tar.gz
scratchpad-cf9cdd6b146c9cac2d3693b5a3c14cd2d4d87298.tar.bz2
scratchpad-cf9cdd6b146c9cac2d3693b5a3c14cd2d4d87298.tar.xz
scratchpad-cf9cdd6b146c9cac2d3693b5a3c14cd2d4d87298.zip
Finishing ip assignment functions
-rw-r--r--notes/projects/radius/sql/ippool-demo.sql31
-rw-r--r--notes/projects/radius/sql/ippool-functions.sql49
-rw-r--r--notes/projects/radius/sql/ippool-schema.sql4
3 files changed, 60 insertions, 24 deletions
diff --git a/notes/projects/radius/sql/ippool-demo.sql b/notes/projects/radius/sql/ippool-demo.sql
index 57352d8..d0a992b 100644
--- a/notes/projects/radius/sql/ippool-demo.sql
+++ b/notes/projects/radius/sql/ippool-demo.sql
@@ -89,12 +89,18 @@ SELECT netblock_add
89 ( netAddress := '209.193.4.128/25', 89 ( netAddress := '209.193.4.128/25',
90 poolName := 'Reserved', 90 poolName := 'Reserved',
91 netBusyout := TRUE, 91 netBusyout := TRUE,
92 addIpEntries := FALSE 92 addIpEntries := TRUE
93 ); 93 );
94 94
95 95
96-- create example explicit IP reservations 96-- create example explicit IP reservations
97SELECT ip_assign 97SELECT ip_assign
98 ( assignIp := '209.193.4.3/32',
99 assignNas := 'br1.sol',
100 assignUser := 'busy1@example.net',
101 assignForce := TRUE
102 );
103SELECT ip_assign
98 ( assignIp := '209.193.4.8/32', 104 ( assignIp := '209.193.4.8/32',
99 assignNas := 'br1.sol', 105 assignNas := 'br1.sol',
100 assignUser := 'jdoe8@example.net' 106 assignUser := 'jdoe8@example.net'
@@ -126,6 +132,29 @@ SELECT ip_assign
126 ); 132 );
127 133
128 134
135-- auto-assign IP reservations
136SELECT ip_autoassign
137 ( assignUser := 'autoassign1@example.net',
138 assignNas := 'br1.sol',
139 assignPool := 'dhcp'
140 );
141SELECT ip_autoassign
142 ( assignUser := 'autoassign2@example.net',
143 assignNas := 'br1.sol',
144 assignPool := 'dhcp'
145 );
146SELECT ip_autoassign
147 ( assignUser := 'autoassign3@example.net',
148 assignNas := 'br1.sol',
149 assignPool := 'dhcp'
150 );
151SELECT ip_autoassign
152 ( assignUser := 'autoassign4@example.net',
153 assignNas := 'br1.sol',
154 assignPool := 'dhcp'
155 );
156
157
129-- add missing IP addresses to netblock 158-- add missing IP addresses to netblock
130-- SELECT ip_add_network( ipNetwork := '209.112.192.0/19' ); 159-- SELECT ip_add_network( ipNetwork := '209.112.192.0/19' );
131-- SELECT ip_add_network( ipNetwork := '209.112.128.0/18' ); 160-- SELECT ip_add_network( ipNetwork := '209.112.128.0/18' );
diff --git a/notes/projects/radius/sql/ippool-functions.sql b/notes/projects/radius/sql/ippool-functions.sql
index 7ec18a6..df9e27b 100644
--- a/notes/projects/radius/sql/ippool-functions.sql
+++ b/notes/projects/radius/sql/ippool-functions.sql
@@ -54,6 +54,7 @@ DECLARE
54 resultAddress INET; 54 resultAddress INET;
55 ipAdded INTEGER; 55 ipAdded INTEGER;
56 ipMask INTEGER; 56 ipMask INTEGER;
57 ipOctet4 INET;
57BEGIN 58BEGIN
58 59
59 -- verifies input 60 -- verifies input
@@ -81,26 +82,30 @@ BEGIN
81 END IF; 82 END IF;
82 83
83 -- sets starting values 84 -- sets starting values
84 ipAdded := 0; 85 ipAdded := 0;
85 ipAddress := set_masklen( network(ipNetwork), 32 ); 86 ipAddress := set_masklen( network(ipNetwork), 32 );
86 87
87 -- loops through individual IP addresses 88 -- loops through individual IP addresses
88 LOOP 89 LOOP
89 EXIT WHEN ipAddress > set_masklen( broadcast(ipNetwork), 32 ); 90 EXIT WHEN ipAddress > set_masklen( broadcast(ipNetwork), 32 );
90 91
91 INSERT INTO ip 92 ipOctet4 := ipAddress & '0.0.0.255';
92 ( address, 93
93 netblockId 94 IF ( ( ipOctet4 != '0.0.0.0' ) AND ( ipOctet4 != '0.0.0.255' ) ) THEN
94 ) 95 INSERT INTO ip
95 SELECT ipAddress, 96 ( address,
96 ipNetblockId 97 netblockId
97 WHERE NOT EXISTS 98 )
98 ( SELECT address FROM ip WHERE address = ipAddress ) 99 SELECT ipAddress,
99 RETURNING address INTO resultAddress; 100 ipNetblockId
100 IF ( resultAddress IS NOT NULL ) THEN 101 WHERE NOT EXISTS
101 ipAdded := ipAdded + 1; 102 ( SELECT address FROM ip WHERE address = ipAddress )
103 RETURNING address INTO resultAddress;
104 IF ( resultAddress IS NOT NULL ) THEN
105 ipAdded := ipAdded + 1;
106 END IF;
102 END IF; 107 END IF;
103 ipAddress := ipAddress + 1; 108 ipAddress := ipAddress + 1;
104 109
105 END LOOP; 110 END LOOP;
106 111
@@ -361,12 +366,12 @@ BEGIN
361 INTO assignedIp 366 INTO assignedIp
362 FROM ip 367 FROM ip
363 INNER JOIN netblock AS nb 368 INNER JOIN netblock AS nb
364 ON nb.network >>= ip.address 369 ON nb.id = ip.netblockId
365 WHERE ip.nasId IS NULL 370 WHERE ip.nasId IS NULL
366 AND ip.username LIKE lower( assignUser ) 371 AND ip.username LIKE lower( assignUser )
367 AND nb.poolId = assignPoolId 372 AND nb.poolId = assignPoolId
368 AND nb.regionId = assignRegionId 373 AND nb.regionId = assignRegionId
369 AND nb.assignable = TRUE 374 AND nb.busyout = FALSE
370 ORDER BY ip.modified DESC, 375 ORDER BY ip.modified DESC,
371 ip.address ASC 376 ip.address ASC
372 LIMIT 1; 377 LIMIT 1;
@@ -378,11 +383,11 @@ BEGIN
378 INTO assignedIp 383 INTO assignedIp
379 FROM ip 384 FROM ip
380 INNER JOIN netblock AS nb 385 INNER JOIN netblock AS nb
381 ON nb.network >>= ip.address 386 ON nb.id = ip.netblockId
382 WHERE ip.nasId IS NULL 387 WHERE ip.nasId IS NULL
383 AND nb.poolId = assignPoolId 388 AND nb.poolId = assignPoolId
384 AND nb.regionId = assignRegionId 389 AND nb.regionId = assignRegionId
385 AND nb.assignable = TRUE 390 AND nb.busyout = FALSE
386 ORDER BY ip.modified ASC, 391 ORDER BY ip.modified ASC,
387 ip.address ASC 392 ip.address ASC
388 LIMIT 1; 393 LIMIT 1;
@@ -394,12 +399,12 @@ BEGIN
394 INTO assignedIp 399 INTO assignedIp
395 FROM ip 400 FROM ip
396 INNER JOIN netblock AS nb 401 INNER JOIN netblock AS nb
397 ON nb.network >>= ip.address 402 ON nb.id = ip.netblockId
398 WHERE ip.nasId IS NULL 403 WHERE ip.nasId IS NULL
399 AND ip.username LIKE lower( assignUser ) 404 AND ip.username LIKE lower( assignUser )
400 AND nb.poolId = assignPoolId 405 AND nb.poolId = assignPoolId
401 AND nb.regionId IS NULL 406 AND nb.regionId IS NULL
402 AND nb.assignable = TRUE 407 AND nb.busyout = FALSE
403 ORDER BY ip.modified DESC, 408 ORDER BY ip.modified DESC,
404 ip.address ASC 409 ip.address ASC
405 LIMIT 1; 410 LIMIT 1;
@@ -411,11 +416,11 @@ BEGIN
411 INTO assignedIp 416 INTO assignedIp
412 FROM ip 417 FROM ip
413 INNER JOIN netblock AS nb 418 INNER JOIN netblock AS nb
414 ON nb.network >>= ip.address 419 ON nb.id = ip.netblockId
415 WHERE ip.nasId IS NULL 420 WHERE ip.nasId IS NULL
416 AND nb.poolId = assignPoolId 421 AND nb.poolId = assignPoolId
417 AND nb.regionId IS NULL 422 AND nb.regionId IS NULL
418 AND nb.assignable = TRUE 423 AND nb.busyout = FALSE
419 ORDER BY ip.modified ASC, 424 ORDER BY ip.modified ASC,
420 ip.address ASC 425 ip.address ASC
421 LIMIT 1; 426 LIMIT 1;
diff --git a/notes/projects/radius/sql/ippool-schema.sql b/notes/projects/radius/sql/ippool-schema.sql
index d64dfd5..7348ca3 100644
--- a/notes/projects/radius/sql/ippool-schema.sql
+++ b/notes/projects/radius/sql/ippool-schema.sql
@@ -328,7 +328,9 @@ BEGIN
328 END IF; 328 END IF;
329 329
330 -- update timestamp 330 -- update timestamp
331 IF ( ( OLD.nasId != NEW.nasId ) OR ( OLD.username != NEW.username ) ) THEN 331 -- RAISE EXCEPTION 'Old.nasId = %; NEW.nasId = %;', OLD.nasId, NEW.nasId;
332 IF ( ( OLD.nasId IS DISTINCT FROM NEW.nasId ) OR
333 ( OLD.username IS DISTINCT FROM NEW.username ) ) THEN
332 NEW.modified := current_timestamp; 334 NEW.modified := current_timestamp;
333 END IF; 335 END IF;
334 336