= List of Data Types

The server support a wide range of data types, both in `unlang` and in
the dictionaries.  This page outlines the names and functionality of
those data types.

== Basic Data Types

There are a number of "basic" data types.  These data types are
fixed-size, and encapsulate simple concepts such as "integer" or "IP
address".

Basic data types can be used in `unlang`, as they contain simple
values which can be compared, or assigned to one attribute.  In most
cases, it is not necessary to know the name of the data type.  It is
possible to write values in the format you expect, The server will do
"the right thing" when interpreting the values.

.Basic Data Types
[options="header"]
[cols="15%,85%"]
|=====
| Data Type     | Description
| bool		| boolean
| date		| calendar date
| ethernet	| Ethernet address
| float32	| 32-bit floating point number
| float64	| 64-bit floating point number
| ifid		| interface ID
| int8		| 8-bit signed integer
| int16		| 16-bit signed integer
| int32		| 32-bit signed integer
| int64		| 64-bit signed integer
| ipaddr        | IPv4 address
| ipv6addr      | IPv6 address
| ipv4prefix    | IPv4 network with address and prefix length
| ipv6prefix    | IPv6 network with address and prefix length
| octets        | raw binary, printed as hex strings
| string        | printable strings
| time_delta	| difference between two calendar dates
| uint8		| 8-bit unsigned integer
| uint16	| 16-bit unsigned integer
| uint32	| 32-bit unsigned integer
| uint64	| 64-bit unsigned integer
|=====

=== Structural Data Types

The following data types are "structural", in that they form
parent-child relationships between attributes.  These data types can
only be used in the dictionaries.  They cannot be used in `unlang`
statements.

.Structural Data Types
[options="header"]
[cols="15%,85%"]
|=====
| Data Type     | Description
| struct	| structure which contains fixed-width fields
| tlv		| type-length-value which contains other attributes
| vsa		| Encapsulation of vendor-specific attributes
|=====

=== Protocol-Specific Data Types

The following data types are used only in certain protocols.  These
data types can be used only in the dictionaries.  They cannot be used
in `unlang` statements.

.Protocol Specific Data Types
[options="header"]
[cols="15%,15%,70%"]
|=====
| Data Type     | Protocol | Description
| abinary       | RADIUS   | Ascend binary filters
| extended      | RADIUS   | attributes which "extend" the number space
|=====

// Copyright (C) 2020 Network RADIUS SAS.  Licenced under CC-by-NC 4.0.
// Development of this documentation was sponsored by Network RADIUS SAS
