X-Git-Url: http://git.sameswireless.fr/l2tpns.git/blobdiff_plain/8d5653a922ae5934b2ca74fdf0e7a8018b550626..1d2a952feb758184a2db33d461d395115c5ea2d9:/autothrottle.c diff --git a/autothrottle.c b/autothrottle.c index 9096691..074fe53 100644 --- a/autothrottle.c +++ b/autothrottle.c @@ -4,7 +4,16 @@ /* set up throttling based on RADIUS reply */ -char const *cvs_id = "$Id: autothrottle.c,v 1.12 2004-11-30 05:49:47 bodea Exp $"; +/* + * lcp:interface-config#1=service-policy input N + * lcp:interface-config#2=service-policy output N + * + * throttle=N + * throttle=yes (use throttle_rate from config) + * throttle=no + */ + +char const *cvs_id = "$Id: autothrottle.c,v 1.14 2005-05-13 05:28:16 bodea Exp $"; int plugin_api_version = PLUGIN_API_VERSION; struct pluginfuncs *p; @@ -31,7 +40,7 @@ int plugin_radius_response(struct param_radius_response *data) strncmp("output", data->value, sp - data->value))) { p->log(3, p->get_id_by_session(data->s), data->s->tunnel, - " Not throttling user (invalid type %s)\n", + " Not throttling user (invalid type %.*s)\n", sp - data->value, data->value); return PLUGIN_RET_OK; @@ -69,31 +78,33 @@ int plugin_radius_response(struct param_radius_response *data) if (!strcmp(data->key, "throttle")) { - if (!strcmp(data->value, "yes")) + char *e; + int rate; + + if ((rate = strtol(data->value, &e, 10)) < 0 || *e) { - unsigned long *rate = p->getconfig("throttle_speed", UNSIGNED_LONG); - if (rate) + rate = -1; + if (!strcmp(data->value, "yes")) { - if (*rate) - p->log(3, p->get_id_by_session(data->s), data->s->tunnel, - " Throttling user to %dkb/s\n", *rate); - else - p->log(3, p->get_id_by_session(data->s), data->s->tunnel, - " Not throttling user (throttle_speed=0)\n"); - - data->s->throttle_in = data->s->throttle_out = *rate; + unsigned long *ts = p->getconfig("throttle_speed", UNSIGNED_LONG); + if (ts) + rate = *ts; } - else - p->log(1, p->get_id_by_session(data->s), data->s->tunnel, - " Not throttling user (can't get throttle_speed)\n"); + else if (!strcmp(data->value, "no")) + rate = 0; } - else if (!strcmp(data->value, "no")) - { + + if (rate < 0) + return PLUGIN_RET_OK; + + if (rate) + p->log(3, p->get_id_by_session(data->s), data->s->tunnel, + " Throttling user to %dkb/s\n", rate); + else p->log(3, p->get_id_by_session(data->s), data->s->tunnel, " Not throttling user\n"); - data->s->throttle_in = data->s->throttle_out = 0; - } + data->s->throttle_in = data->s->throttle_out = rate; } return PLUGIN_RET_OK;