summaryrefslogtreecommitdiff
path: root/accel-pppd/radius/serv.c
diff options
context:
space:
mode:
authorDmitry Kozlov <xeb@mail.ru>2014-05-13 13:16:06 +0400
committerDmitry Kozlov <xeb@mail.ru>2014-05-13 13:16:06 +0400
commitec41e172a9da0de7cf5c28027928c698d0d1ebf8 (patch)
tree017eb8e5a65e421ac4ccb93039ffafedea2873b2 /accel-pppd/radius/serv.c
parente7b98bc79bf8e01d6e2897a95502827ce2a83e7d (diff)
downloadaccel-ppp-ec41e172a9da0de7cf5c28027928c698d0d1ebf8.tar.gz
accel-ppp-ec41e172a9da0de7cf5c28027928c698d0d1ebf8.zip
radius: introduced weight and backup per-server options
New options are applied to server option as server=...[,weight=x][,backup] Weight is used for multi-server configurations (larger weight takes more users). Backup is used to mark backup server f.e. server which will be used only if all other servers are failed.
Diffstat (limited to 'accel-pppd/radius/serv.c')
-rw-r--r--accel-pppd/radius/serv.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/accel-pppd/radius/serv.c b/accel-pppd/radius/serv.c
index 6a080709..46d064a0 100644
--- a/accel-pppd/radius/serv.c
+++ b/accel-pppd/radius/serv.c
@@ -63,7 +63,7 @@ static struct rad_server_t *__rad_server_get(int type, struct rad_server_t *excl
continue;
}
- if (s->client_cnt[type] < s0->client_cnt[type])
+ if (s0->backup || s->weight*s->client_cnt[type] < s0->weight*s0->client_cnt[type])
s0 = s;
}
@@ -648,6 +648,18 @@ static int parse_server2(const char *_opt, struct rad_server_t *s)
goto out;
} else
s->conf_fail_time = conf_fail_time;
+
+ ptr3 = strstr(ptr2, ",weight=");
+ if (ptr3)
+ s->weight = 1.0/atoi(ptr3 + 8);
+ else
+ s->weight = 1;
+
+ ptr3 = strstr(ptr2, ",backup");
+ if (ptr3)
+ s->backup = 1;
+ else
+ s->backup = 0;
if (ptr2)
*ptr2 = 0;