Skip to content

Commit

Permalink
add descriptions of structural types
Browse files Browse the repository at this point in the history
  • Loading branch information
alandekok committed Nov 15, 2024
1 parent e0486bc commit cdbdd40
Showing 1 changed file with 56 additions and 0 deletions.
56 changes: 56 additions & 0 deletions doc/antora/modules/reference/pages/type/all_types.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -56,10 +56,66 @@ statements.
[cols="15%,85%"]
|=====
| Data Type | Description
| group | generic grouping
| struct | structure which contains fixed-width fields
| tlv | type-length-value which contains other attributes
| vendor | Encapsulation of a vendor within data type `vsa`
| vsa | Encapsulation of vendor-specific attributes
|=====

Each structural data type serves a different purpose. Each structural
data type can contain child attributes. The different structural
types have different behaviors about what kind of children they can
contain, and how the data type is sent in a packet over the network.

struct:: A `struct` contains fixed-sized data types, in a pre-defined order.
+
The `struct` can only contain a fixed and pre-defined list of child
attributes. These attributes are the fields, or members, of the structure.
+
The `struct` always encodes all of its children. If a child is
missing, then the relevant field is filled with zeros.

group: A `group` contains an arbitrary collection of children, in any order.
+
The `group` can contain any child attributes, so long as they are
within the same protocol namespace. See the
dictionary/attribute.adoc[ATTRIBUTE] documentation for more
information.
+
The `group` only encodes the child attributes which have been created
and stored within the `group`. The order of children does not matter.

tlv:: A `tlv` is a `group` which has a limited subset of children.
+
The `tlv` can only contain child attributes which have been defined as
children of the `tlv.`
+
The `tlv` only encodes the child attributes which have been created
and stored within the `tlv`. The order of children does not matter.

vendor:: A `vendor` is a group which has a limited subset of children:
attributes which have been defined by that vendor.
+
The `vendor` can only contain child attributes which have been defined by the vendor.
+
The `vendor` only encodes the child attributes which have been created
and stored within the `vendor`. The order of children does not
matter. In practice, the `vendor` attributes are usually encoded with
a 32-bit vendor ID, which identies the vendor.
+
A `vendor` data type can only be a child of a `vsa` data type.

vsa:: A `vsa` is a group which has a limited subset of children: `vendor`s.
+
The `vsa` can only contain child attributes which are `vendor`s
+
The `vsa` only encodes the vendor attributes which have been created
and stored within the `vsa`. The order of children does not
matter.
+
A `vsa` data type can only be a contain children of the `vendor` data type.


// Copyright (C) 2021 Network RADIUS SAS. Licenced under CC-by-NC 4.0.
// This documentation was developed by Network RADIUS SAS

0 comments on commit cdbdd40

Please sign in to comment.