#  -*- text -*-
#
#
#  $Id: 07085f617312d2729b5eef9266d6ecd727ed59db $

#######################################################################
#
#  = Unpack Module
#
#  The `unpack` module unpacks binary data from octets type attributes
#  into individual attributes.
#
#  It is used when vendors put multiple fields into one attribute
#  of type "octets".
#
#  NOTE: The module is useful only for `xlat`.
#

#
#  ## Syntax
#
#  To use it, add it to the `raddb/mods-enabled/` directory.  Then,
#  use it on the right-hand side of a variable assignment.
#
#   %unpack(<data>, <offset>, <data_type>[, <repeat>])
#
#  The arguments are three or four fields:
#
#  data::
#
#  Either `octets` or `string` type data, literal or expanded attributes.
#  If `string` type data contains a representation of hex data, e.g. 0xabcdef
#  that is first converted to `octets`.
#
#  offset::
#
#  The offset into the string from which it starts unpacking. The offset starts
#  at zero, for the first attribute.
#
#  data_type::
#
#  the data type to unpack at that offset. e.g. `integer`, `ipaddr`, `byte`, `short`, etc.
#
#  repeat::
#
#  How many instances of the data type should be unpacked.  This optional argument
#  must either be an integer or the special value of `'*'` to extract as many instances
#  as can be from the input data.

#
#  ## Sample
#
#  if we have `Class = 0x000001020304`, then
#
#    %unpack(%{Class}, 4, uint16)
#
#  will unpack octets `4` and `5` as a `uint16`, which has value `0x0304`.
#

#
#  ## Configuration Settings
#
#  This module takes no configuration.
#
unpack {
}
