diff options
| author | David M. Syzdek <syzdek@bindlebinaries.com> | 2019-05-24 12:07:09 -0800 |
|---|---|---|
| committer | David M. Syzdek <syzdek@bindlebinaries.com> | 2019-05-24 12:07:09 -0800 |
| commit | cf9cdd6b146c9cac2d3693b5a3c14cd2d4d87298 (patch) | |
| tree | 76d6139f2ec5db339839e4f71b0572ba50b68133 /notes | |
| parent | 6c6c00ca209e8d5971b0aee817606af090f0bd2c (diff) | |
| download | scratchpad-cf9cdd6b146c9cac2d3693b5a3c14cd2d4d87298.tar.gz scratchpad-cf9cdd6b146c9cac2d3693b5a3c14cd2d4d87298.tar.bz2 scratchpad-cf9cdd6b146c9cac2d3693b5a3c14cd2d4d87298.tar.xz scratchpad-cf9cdd6b146c9cac2d3693b5a3c14cd2d4d87298.zip | |
Finishing ip assignment functions
Diffstat (limited to 'notes')
| -rw-r--r-- | notes/projects/radius/sql/ippool-demo.sql | 31 | ||||
| -rw-r--r-- | notes/projects/radius/sql/ippool-functions.sql | 49 | ||||
| -rw-r--r-- | notes/projects/radius/sql/ippool-schema.sql | 4 |
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 |
| 97 | SELECT ip_assign | 97 | SELECT ip_assign |
| 98 | ( assignIp := '209.193.4.3/32', | ||
| 99 | assignNas := 'br1.sol', | ||
| 100 | assignUser := 'busy1@example.net', | ||
| 101 | assignForce := TRUE | ||
| 102 | ); | ||
| 103 | SELECT 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 | ||
| 136 | SELECT ip_autoassign | ||
| 137 | ( assignUser := 'autoassign1@example.net', | ||
| 138 | assignNas := 'br1.sol', | ||
| 139 | assignPool := 'dhcp' | ||
| 140 | ); | ||
| 141 | SELECT ip_autoassign | ||
| 142 | ( assignUser := 'autoassign2@example.net', | ||
| 143 | assignNas := 'br1.sol', | ||
| 144 | assignPool := 'dhcp' | ||
| 145 | ); | ||
| 146 | SELECT ip_autoassign | ||
| 147 | ( assignUser := 'autoassign3@example.net', | ||
| 148 | assignNas := 'br1.sol', | ||
| 149 | assignPool := 'dhcp' | ||
| 150 | ); | ||
| 151 | SELECT 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; | ||
| 57 | BEGIN | 58 | BEGIN |
| 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 | ||
