From 173f02d0936ab48e15a16ee57557b759d96b5a27 Mon Sep 17 00:00:00 2001
From: Viacheslav Hletenko <v.gletenko@vyos.io>
Date: Sat, 2 Jul 2022 13:14:22 +0000
Subject: ipoe: T4507: Add option rate-limit for RADIUS authentication

Add rate-limit options: attribute, muptiplier and vendor

set service ipoe-server auth radius rate-limit attribute 'Mikrotik-Rate-Limit'
set service ipoe-server auth radius rate-limit enable
set service ipoe-server auth radius rate-limit multiplier '0.001'
set service ipoe-server auth radius rate-limit vendor 'Miktorik'
---
 data/templates/accel-ppp/ipoe.config.j2          |  8 +++++++-
 interface-definitions/service-ipoe-server.xml.in |  5 +++++
 src/conf_mode/service_ipoe-server.py             | 14 ++++++++++++++
 3 files changed, 26 insertions(+), 1 deletion(-)

diff --git a/data/templates/accel-ppp/ipoe.config.j2 b/data/templates/accel-ppp/ipoe.config.j2
index 3c0d47b27..6df12db2c 100644
--- a/data/templates/accel-ppp/ipoe.config.j2
+++ b/data/templates/accel-ppp/ipoe.config.j2
@@ -128,10 +128,16 @@ bind={{ radius_source_address }}
 {%     if radius_dynamic_author %}
 dae-server={{ radius_dynamic_author.server }}:{{ radius_dynamic_author.port }},{{ radius_dynamic_author.key }}
 {%     endif %}
-{%     if radius_shaper_attr %}
+
+{%     if radius_shaper_enable %}
 [shaper]
 verbose=1
+{%         if radius_shaper_attr %}
 attr={{ radius_shaper_attr }}
+{%         endif %}
+{%         if radius_shaper_multiplier %}
+rate-multiplier={{ radius_shaper_multiplier }}
+{%         endif %}
 {%         if radius_shaper_vendor %}
 vendor={{ radius_shaper_vendor }}
 {%         endif %}
diff --git a/interface-definitions/service-ipoe-server.xml.in b/interface-definitions/service-ipoe-server.xml.in
index e222467b1..cd3aa3638 100644
--- a/interface-definitions/service-ipoe-server.xml.in
+++ b/interface-definitions/service-ipoe-server.xml.in
@@ -213,6 +213,11 @@
                   </tagNode>
                 </children>
               </tagNode>
+              <node name="radius">
+                <children>
+                  #include <include/accel-ppp/radius-additions-rate-limit.xml.i>
+                </children>
+              </node>
               #include <include/radius-server-ipv4.xml.i>
               #include <include/accel-ppp/radius-additions.xml.i>
             </children>
diff --git a/src/conf_mode/service_ipoe-server.py b/src/conf_mode/service_ipoe-server.py
index 559d1bcd5..61f484129 100755
--- a/src/conf_mode/service_ipoe-server.py
+++ b/src/conf_mode/service_ipoe-server.py
@@ -53,6 +53,8 @@ default_config_data = {
     'radius_nas_ip': '',
     'radius_source_address': '',
     'radius_shaper_attr': '',
+    'radius_shaper_enable': False,
+    'radius_shaper_multiplier': '',
     'radius_shaper_vendor': '',
     'radius_dynamic_author': '',
     'thread_cnt': get_half_cpus()
@@ -196,6 +198,18 @@ def get_config(config=None):
     if conf.exists(['nas-ip-address']):
         ipoe['radius_nas_ip'] = conf.return_value(['nas-ip-address'])
 
+    if conf.exists(['rate-limit', 'attribute']):
+        ipoe['radius_shaper_attr'] = conf.return_value(['rate-limit', 'attribute'])
+
+    if conf.exists(['rate-limit', 'enable']):
+        ipoe['radius_shaper_enable'] = True
+
+    if conf.exists(['rate-limit', 'multiplier']):
+        ipoe['radius_shaper_multiplier'] = conf.return_value(['rate-limit', 'multiplier'])
+
+    if conf.exists(['rate-limit', 'vendor']):
+        ipoe['radius_shaper_vendor'] = conf.return_value(['rate-limit', 'vendor'])
+
     if conf.exists(['source-address']):
         ipoe['radius_source_address'] = conf.return_value(['source-address'])
 
-- 
cgit v1.2.3