Grouping of sub attributes in seperate VSAs

Alan DeKok aland at
Thu Apr 12 17:18:52 CEST 2018

On Apr 12, 2018, at 11:07 AM, Бенджамин Томпсон <b.thompson at> wrote:
> We have a device which sends individual traffic counters for several
> different services. The dicitionary is as follows:
> VENDOR      VasExperts              43823
> BEGIN-VENDOR    VasExperts
> ...
> ATTRIBUTE   VasExperts-Acct-Traffic-Class-Name              16  string
> ATTRIBUTE   VasExperts-Acct-Traffic-Class-Input-Octets      17  integer64
> ATTRIBUTE   VasExperts-Acct-Traffic-Class-Output-Octets     18  integer64
> ATTRIBUTE   VasExperts-Acct-Traffic-Class-Input-Packets     19  integer64
> ATTRIBUTE   VasExperts-Acct-Traffic-Class-Output-Packets    20  integer64

   That might work...

> In the accounting packet these attribtues are grouped into individual VSAs
> as follows:

  If you want *real* grouping, you need to use TLVs.  i.e. one master attribute, and the sub-attributes within that.

> Here the fact that the five attributes are gouped together in a single VSA
> means that they all contain data which pertains to the same service.

  That's what you mean.  But that's not how RADIUS works.  The attributes are all in a flat space.

> When FreeRADIUS processes the packet the attribtues are as I understand it
> added to one long list and I can access them individually by their index.


> However, as I understand it the ordering of RADIUS attributes is not
> something which is normally guaranteed

  RADIUS guarantees ordering of attributes which have the same number.  It does NOT guarantee ordering of attributes which have a different number.

  This restriction applies to VSAs, soo.

> and I would like to ask is whether
> there is any way in unlang or by other means to figure out which which sub
> attribtues came from the same parent attribute.

  No.  But you can fix the dictionary:

VENDOR      VasExperts              43823

BEGIN-VENDOR    VasExperts

ATTRIBUTE   VasExperts-Acct-Traffic			              	16  tlv
ATTRIBUTE   VasExperts-Acct-Traffic-Class-Name               16.1  string
ATTRIBUTE   VasExperts-Acct-Traffic-Class-Input-Octets      16.2  integer64
ATTRIBUTE   VasExperts-Acct-Traffic-Class-Output-Octets    16.3   integer64
ATTRIBUTE   VasExperts-Acct-Traffic-Class-Input-Packets     16.4  integer64
ATTRIBUTE   VasExperts-Acct-Traffic-Class-Output-Packets   16.5  integer64

  These attributes will be packed into one parent attribute: VasExperts-Acct-Traffic.  And ordering of THAT attribute is guaranteed.

  Alan DeKok.

More information about the Freeradius-Users mailing list