WiMAX style continuation field used by other vendor
Benjamin Thompson
b.thompson at latera.ru
Mon Apr 26 20:46:12 CEST 2021
On Mon, 26 Apr 2021 at 19:12, Benjamin Thompson <b.thompson at latera.ru>
wrote:
> On Mon, 26 Apr 2021 at 18:05, Alan DeKok <aland at deployingradius.com>
> wrote:
>
>> On Apr 26, 2021, at 9:29 AM, Benjamin Thompson <b.thompson at latera.ru>
>> wrote:
>> > I am working with some Telrad equipment and have found that it uses
>> > attributes with vendor ID 5323 and which have the continuation field
>> > (format=1,1,c) as used in WiMAX attributes.
>>
>> OMG what a terrible idea. This is one of the worst things I've seen in
>> years.
>>
>> > I tried to add a dictionary with this format string but FreeRADIUS
>> refused
>> > to start with the error "Only WiMAX VSAs can have continuations".
>>
>> Yes. The source is hard-coded to use the WiMAX vendor ID.
>>
>> > I traced the error to this section of code (dict.c line 2097):
>> >
>> > if ((*pvalue != VENDORPEC_WIMAX) ||
>> > (type != 1) || (length != 1)) {
>> > fr_strerror_printf("dict_init: %s[%d]: Only WiMAX VSAs can have
>> > continuations",
>> > fn, line);
>> > return -1;
>> > }
>>
>> There's a lot more to it than that. See src/lib/radius.c, and look for
>> WiMAX.
>>
>> > I would like to ask whether it would be OK to allow continuations for
>> other
>> > vendors too here (I am happy to submit a patch).
>>
>> Sure.
>>
>> Do you have dictionary file that you can share?
>>
>>
> Hi Alan
>
> This is what I have:
>
> VENDOR Telrad 5323 format=1,1,c
>
> BEGIN-VENDOR Telrad
>
> ATTRIBUTE Telrad-TSDF-Table 1 tlv
> ATTRIBUTE Telrad-Item-Identity 1.1 byte
> ATTRIBUTE Telrad-Reference-VPWS-PDN-Name 1.2 octets
> ATTRIBUTE Telrad-TSDF-Parameters 1.3 tlv
> ATTRIBUTE Telrad-C-VLAN-ID 1.3.1 integer
> ATTRIBUTE Telrad-C-VLAN-ID-Retag 1.3.2 integer
> ATTRIBUTE Telrad-S-VLAN-ID 1.3.3 integer
> ATTRIBUTE Telrad-Reference-QOS-Profile-Name 1.3.4 string
>
> END-VENDOR Telrad
>
>
>> There's a lot more to it than that. See src/lib/radius.c, and look for
WiMAX.
If I understood the code correctly, the "flags.wimax = dv->flags;" line
1067 of dict.c should cause the attribute to be encoded as a WiMax
attribute in radius.c at line 1498:
if (vp->da->flags.wimax) {
return rad_vp2wimax(packet, original, secret, pvp, ptr, room);
}
More information about the Freeradius-Users
mailing list