aboutsummaryrefslogtreecommitdiffstats
path: root/notes/projects/radius/sql/ippool-schema.sql
diff options
context:
space:
mode:
authorDavid M. Syzdek <syzdek@bindlebinaries.com>2019-05-13 16:47:20 -0800
committerDavid M. Syzdek <syzdek@bindlebinaries.com>2019-05-13 16:47:20 -0800
commitd0ba9b3d336559e29116ed84083ce70f7145dfab (patch)
treeb5da227d1166b03be93e3b8103e15dc32ed7965f /notes/projects/radius/sql/ippool-schema.sql
parentb8d308885a9d52bfc068bce3fed63e89d8d18222 (diff)
downloadscratchpad-d0ba9b3d336559e29116ed84083ce70f7145dfab.tar.gz
scratchpad-d0ba9b3d336559e29116ed84083ce70f7145dfab.tar.bz2
scratchpad-d0ba9b3d336559e29116ed84083ce70f7145dfab.tar.xz
scratchpad-d0ba9b3d336559e29116ed84083ce70f7145dfab.zip
Updating how IP addresses are assigned
Diffstat (limited to '')
-rw-r--r--notes/projects/radius/sql/ippool-schema.sql72
1 files changed, 70 insertions, 2 deletions
diff --git a/notes/projects/radius/sql/ippool-schema.sql b/notes/projects/radius/sql/ippool-schema.sql
index ea50e5d..5372bc6 100644
--- a/notes/projects/radius/sql/ippool-schema.sql
+++ b/notes/projects/radius/sql/ippool-schema.sql
@@ -325,9 +325,32 @@ $$;
325 325
326 326
327/* 327/*
328 * updates timestamp of addresses 328 * Assigns IP address to specific user/session
329 * 329 *
330 * returns trigger 330 * % SELECT ip_add_network(
331 * assignIp := '198.51.100.1/32',
332 * assignUser := 'jdoe@acsalaska.net'
333 * );
334 * % SELECT ip_add_network(
335 * assignIp := '198.51.100.1/32',
336 * assignUser := 'jdoe@acsalaska.net',
337 * assignNas := 'br1.cwc',
338 * assignSess := '596c3b82-75df-11e9-bcbb-6003089b9f24'
339 * );
340 *
341 * assignIp
342 * : IP address to assign to user
343 *
344 * assignUser
345 * : user to assign IP address
346 *
347 * assignNas
348 * : session NAS (attempt to guess if not specified)
349 *
350 * assignSess
351 * : RADIUS session
352 *
353 * Returns TRUE if assigned and FALSE if not assigned
331 */ 354 */
332CREATE OR REPLACE FUNCTION ip_assign 355CREATE OR REPLACE FUNCTION ip_assign
333( 356(
@@ -341,6 +364,7 @@ CREATE OR REPLACE FUNCTION ip_assign
341 SECURITY DEFINER 364 SECURITY DEFINER
342 AS $$ 365 AS $$
343DECLARE 366DECLARE
367 assignNasId INTEGER;
344BEGIN 368BEGIN
345 369
346 -- sets defaults 370 -- sets defaults
@@ -348,6 +372,24 @@ BEGIN
348 assignSess := 'user:' || assignUser; 372 assignSess := 'user:' || assignUser;
349 END IF; 373 END IF;
350 374
375 -- attempts to determine NAS
376 IF ( assignNas IS NOT NULL ) THEN
377 SELECT id INTO assignNasId
378 FROM nas
379 WHERE name LIKE assignNas;
380 ELSE
381 SELECT nas.id INTO assignNasId
382 FROM nas
383 INNER JOIN region
384 ON region.id = nas.regionId
385 INNER JOIN netblock
386 ON netblock.regionId = regoin.id
387 WHERE netblock.network >>= assignIp;
388 END IF;
389 IF ( assignNasId IS NULL ) THEN
390 RAISE EXCEPTION 'NAS not found';
391 END IF;
392
351 -- updates record 393 -- updates record
352 UPDATE ip 394 UPDATE ip
353 SET nasId = ( SELECT id FROM nas WHERE name LIKE assignNas ), 395 SET nasId = ( SELECT id FROM nas WHERE name LIKE assignNas ),
@@ -365,6 +407,32 @@ $$;
365 * 407 *
366 * returns trigger 408 * returns trigger
367 */ 409 */
410CREATE OR REPLACE FUNCTION ip_release
411(
412 assignIp INET
413)
414 RETURNS BOOLEAN
415 LANGUAGE plpgsql
416 SECURITY DEFINER
417 AS $$
418DECLARE
419BEGIN
420
421 -- updates record
422 UPDATE ip
423 SET nasId = NULL
424 WHERE address = set_masklen( assignIp, 32 );
425
426 RETURN FOUND;
427END;
428$$;
429
430
431/*
432 * updates timestamp of addresses
433 *
434 * returns trigger
435 */
368CREATE OR REPLACE FUNCTION ip_trigger_delete 436CREATE OR REPLACE FUNCTION ip_trigger_delete
369( ) 437( )
370 RETURNS trigger 438 RETURNS trigger