diff options
| -rw-r--r-- | notes/projects/radius/sql/ippool-queries.sql | 4 | ||||
| -rw-r--r-- | notes/projects/radius/sql/ippool-schema.sql | 72 |
2 files changed, 70 insertions, 6 deletions
diff --git a/notes/projects/radius/sql/ippool-queries.sql b/notes/projects/radius/sql/ippool-queries.sql index 1009d53..f2daa21 100644 --- a/notes/projects/radius/sql/ippool-queries.sql +++ b/notes/projects/radius/sql/ippool-queries.sql | |||
| @@ -36,8 +36,6 @@ SELECT DISTINCT pool.name AS poolName, | |||
| 36 | ) AS active, | 36 | ) AS active, |
| 37 | ( | 37 | ( |
| 38 | nasId IS NOT NULL | 38 | nasId IS NOT NULL |
| 39 | OR | ||
| 40 | acctSession IS NOT NULL | ||
| 41 | ) AS assigned, | 39 | ) AS assigned, |
| 42 | ip.modified AS modified, | 40 | ip.modified AS modified, |
| 43 | nas.name AS nasName, | 41 | nas.name AS nasName, |
| @@ -67,8 +65,6 @@ SELECT DISTINCT pool.name AS poolName, | |||
| 67 | ) AS active, | 65 | ) AS active, |
| 68 | ( | 66 | ( |
| 69 | nasId IS NOT NULL | 67 | nasId IS NOT NULL |
| 70 | OR | ||
| 71 | acctSession IS NOT NULL | ||
| 72 | ) AS assigned, | 68 | ) AS assigned, |
| 73 | ip.modified AS modified, | 69 | ip.modified AS modified, |
| 74 | nas.name AS nasName, | 70 | nas.name AS nasName, |
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 | */ |
| 332 | CREATE OR REPLACE FUNCTION ip_assign | 355 | CREATE 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 $$ |
| 343 | DECLARE | 366 | DECLARE |
| 367 | assignNasId INTEGER; | ||
| 344 | BEGIN | 368 | BEGIN |
| 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 | */ |
| 410 | CREATE OR REPLACE FUNCTION ip_release | ||
| 411 | ( | ||
| 412 | assignIp INET | ||
| 413 | ) | ||
| 414 | RETURNS BOOLEAN | ||
| 415 | LANGUAGE plpgsql | ||
| 416 | SECURITY DEFINER | ||
| 417 | AS $$ | ||
| 418 | DECLARE | ||
| 419 | BEGIN | ||
| 420 | |||
| 421 | -- updates record | ||
| 422 | UPDATE ip | ||
| 423 | SET nasId = NULL | ||
| 424 | WHERE address = set_masklen( assignIp, 32 ); | ||
| 425 | |||
| 426 | RETURN FOUND; | ||
| 427 | END; | ||
| 428 | $$; | ||
| 429 | |||
| 430 | |||
| 431 | /* | ||
| 432 | * updates timestamp of addresses | ||
| 433 | * | ||
| 434 | * returns trigger | ||
| 435 | */ | ||
| 368 | CREATE OR REPLACE FUNCTION ip_trigger_delete | 436 | CREATE OR REPLACE FUNCTION ip_trigger_delete |
| 369 | ( ) | 437 | ( ) |
| 370 | RETURNS trigger | 438 | RETURNS trigger |
