summaryrefslogtreecommitdiff
path: root/accel-pppd
diff options
context:
space:
mode:
authorxebd <xeb@mail.ru>2019-08-26 06:25:11 +0300
committerGitHub <noreply@github.com>2019-08-26 06:25:11 +0300
commitcec3f31e75ce81735735f9302cc8ee3dea2c839f (patch)
treeda24ce373aad78c7f5be79ed12b0e6ea24b22fb8 /accel-pppd
parentb011a767caad1ea038e3841cd1b3f2ae19c6aa85 (diff)
parent0e9e6035cf076cb139c756ac4411a5180d857575 (diff)
downloadaccel-ppp-xebd-cec3f31e75ce81735735f9302cc8ee3dea2c839f.tar.gz
accel-ppp-xebd-cec3f31e75ce81735735f9302cc8ee3dea2c839f.zip
Merge pull request #96 from DmitriyEshenko/rate-limit
shaper: adding default rate-limit
Diffstat (limited to 'accel-pppd')
-rw-r--r--accel-pppd/accel-ppp.conf1
-rw-r--r--accel-pppd/accel-ppp.conf.53
-rw-r--r--accel-pppd/shaper/shaper.c36
3 files changed, 37 insertions, 3 deletions
diff --git a/accel-pppd/accel-ppp.conf b/accel-pppd/accel-ppp.conf
index 530c341..02db127 100644
--- a/accel-pppd/accel-ppp.conf
+++ b/accel-pppd/accel-ppp.conf
@@ -264,6 +264,7 @@ down-limiter=tbf
#leaf-qdisc=fq_codel [limit PACKETS] [flows NUMBER] [target TIME] [interval TIME] [quantum BYTES] [[no]ecn]
#rate-multiplier=1
#fwmark=1
+#rate-limit=2048/1024
verbose=1
[cli]
diff --git a/accel-pppd/accel-ppp.conf.5 b/accel-pppd/accel-ppp.conf.5
index 52cd1e6..65b0037 100644
--- a/accel-pppd/accel-ppp.conf.5
+++ b/accel-pppd/accel-ppp.conf.5
@@ -1102,6 +1102,9 @@ fq_codel [ limit PACKETS ] [flows NUMBER ] [ target TIME ] [ interval TIME ] [qu
.TP
.BI "rate-multiplier=" n
Due to accel-ppp operates with rates in kilobit basis if you send rates in different basis then you can use this option to bring your values to kilobits.
+.TP
+.BI "rate-limit=" download_speed/upload_speed
+Specifies, should accel-ppp set default rate-limit for clients. Clients rate-limit will be overwritten by RADIUS filter attributes or chap-secrets rate-limit params.
.SH [cli]
.br
Configuration of the command line interface.
diff --git a/accel-pppd/shaper/shaper.c b/accel-pppd/shaper/shaper.c
index 304a129..13f75c0 100644
--- a/accel-pppd/shaper/shaper.c
+++ b/accel-pppd/shaper/shaper.c
@@ -64,6 +64,9 @@ int conf_lq_arg6;
static int temp_down_speed;
static int temp_up_speed;
+static int dflt_down_speed;
+static int dflt_up_speed;
+
static pthread_rwlock_t shaper_lock = PTHREAD_RWLOCK_INITIALIZER;
static LIST_HEAD(shaper_list);
@@ -515,9 +518,7 @@ static void ev_ppp_pre_up(struct ap_session *ses)
up_speed = temp_up_speed;
down_burst = 0;
up_burst = 0;
- } else {
- if (!pd->cur_tr)
- return;
+ } else if (pd->cur_tr){
pd->down_speed = pd->cur_tr->down_speed;
pd->up_speed = pd->cur_tr->up_speed;
down_speed = pd->cur_tr->down_speed;
@@ -525,6 +526,15 @@ static void ev_ppp_pre_up(struct ap_session *ses)
down_burst = pd->cur_tr->down_burst;
up_burst = pd->cur_tr->up_burst;
}
+ else if (dflt_down_speed || dflt_up_speed){
+ pd->down_speed = dflt_down_speed;
+ pd->up_speed = dflt_up_speed;
+ down_speed = dflt_down_speed;
+ up_speed = dflt_up_speed;
+ down_burst = 0;
+ up_burst = 0;
+ }
+ else return;
if (!pd->idx)
pd->idx = alloc_idx(ses->ifindex);
@@ -873,6 +883,22 @@ static struct time_range_t *parse_range(time_t t, const char *val)
return r;
}
+static int parse_dflt_shaper(const char *opt, int *down_speed, int *up_speed)
+{
+ char *endptr;
+
+ *down_speed = strtol(opt, &endptr, 10);
+
+ if (*endptr != '/'){
+ *up_speed = *down_speed;
+ return 0;
+ }
+
+ opt = endptr + 1;
+ *up_speed = strtol(opt, &endptr, 10);
+ return 0;
+}
+
static void load_time_ranges(void)
{
struct conf_sect_t *s = conf_get_section("shaper");
@@ -1101,6 +1127,10 @@ static void load_config(void)
else
conf_fwmark = 0;
+ opt = conf_get_opt("shaper", "rate-limit");
+ if (opt)
+ parse_dflt_shaper(opt, &dflt_down_speed, &dflt_up_speed);
+
triton_context_call(&shaper_ctx, (triton_event_func)load_time_ranges, NULL);
}