set service <pppoe-server|ipoe-server|l2tp|pptp|sstp> authentication radius rate-limit vendor <vendor> accepts any string. accel-ppp looks the name up in its RADIUS dictionary with a case-sensitive comparison. The dictionary file calls the vendor Mikrotik (VENDOR Mikrotik 14988 in /usr/share/accel-ppp/radius/dictionary.mikrotik), so vendor mikrotik is not found. There is no error message and the commit succeeds. The RADIUS server's Mikrotik-Rate-Limit is received and logged, but no rate limit is applied to the session.
How to reproduce (seen with pppoe-server on a rolling image with VPP, RADIUS server answering with Mikrotik-Rate-Limit "2M/2M")
set service pppoe-server authentication radius rate-limit enable set service pppoe-server authentication radius rate-limit attribute Mikrotik-Rate-Limit set service pppoe-server authentication radius rate-limit vendor mikrotik commit
Bring up a PPPoE session. Result:
- the Access-Accept in the log contains <Mikrotik-Rate-Limit "2M/2M">
- show pppoe-server sessions / accel-cmd show sessions has an empty rate-limit column
- no limiter is installed (with VPP: vppctl show policer lists nothing)
- no message in the log, because the shaper stops reading its options and does not log anything for this case
With vendor Mikrotik (capital M) the same setup works: rate-limit shows 2000/2000 and VPP has the policers.
What the shaper does (I read the values of the running daemon with gdb)
rad_dict_find_vendor_name() compares with strcmp(). For mikrotik the lookup fails and parse_vendor_opt() falls back to atoi("mikrotik"), which is 0. The attribute name is then looked up as a global attribute, which fails as well, and load_config() returns early. With vendor mikrotik: conf_vendor = 0, conf_attr_down = 0, conf_attr_up = 0. With vendor Mikrotik: conf_vendor = 14988, conf_attr_down = 8.
I have only checked this with the VPP PPPoE server. The lookup is in accel-ppp's shaper and the CLI node is shared by all accel-ppp services, so I expect the same for the others, but I did not test them.
Expected behaviour
Either the vendor name is matched case-insensitive, or the CLI refuses a name that is not in the dictionaries, or at least the commit prints a warning. The documentation already says to use a vendor name from /usr/share/accel-ppp/radius and shows vendor Mikrotik, so it is the CLI that gives no hint.
Notes
- The interface definition is interface-definitions/include/accel-ppp/radius-additions-rate-limit.xml.i, the vendor leaf has only a help text and no constraint. The value goes unchanged into [shaper] vendor= (data/templates/accel-ppp/config_shaper_radius.j2).
- Possible fixes, in the order of how little they change: a warning in the conf-mode script when the value is not a vendor of the installed dictionaries, a completion/validator that lists the vendor names, or a case-insensitive lookup in accel-ppp-ng (rad_dict_find_vendor_name()). I have not tried any of them.