Bgp optional params

include collections
include order
https://datatracker.ietf.org/doc/html/rfc3392 https://datatracker.ietf.org/doc/html/rfc2842 https://datatracker.ietf.org/doc/html/rfc1771

object optional_parameter = {
type this
    type this = struct {
        param_type: stream_pos,
        param_len: stream_pos,
        param_name: stream_data
    }
TODO a) Authentication Information (Parameter Type 1):

This optional parameter may be used to authenticate a BGP
peer. The Parameter Value field contains a 1-octet
Authentication Code followed by a variable length
Authentication Data.

    0 1 2 3 4 5 6 7 8
    +-+-+-+-+-+-+-+-+
    |  Auth. Code   |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                                                     |
    |              Authentication Data                    |
    |                                                     |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   Authentication Code:

      This 1-octet unsigned integer indicates the
      authentication mechanism being used.  Whenever an
      authentication mechanism is specified for use within
      BGP, three things must be included in the
      specification:

      - the value of the Authentication Code which indicates
      use of the mechanism,
      - the form and meaning of the Authentication Data, and
      - the algorithm for computing values of Marker fields.

      Note that a separate authentication mechanism may be
      used in establishing the transport level connection.

   Authentication Data:

      The form and meaning of this field is a variable-
      length field depend on the Authentication Code.

The minimum length of the OPEN message is 29 octets (including message header).

b. Capabilities Optional Parameter (Parameter Type 2): https://www.iana.org/assignments/capability-codes/capability-codes.xhtml This is an Optional Parameter that is used by a BGP speaker to convey to its BGP peer the list of capabilities supported by the speaker.

The parameter contains one or more triples , where each triple is encoded as shown below:

+------------------------------+
| Capability Code (1 octet)    |
+------------------------------+
| Capability Length (1 octet)  |
+------------------------------+
| Capability Value (variable)  |
+------------------------------+

The use and meaning of these fields are as follows:

Capability Code:

    Capability Code is a one octet field that unambiguously
    identifies individual capabilities.

Capability Length:

    Capability Length is a one octet field that contains the length
    of the Capability Value field in octets.
    instance idx : unbounded_sequence
    instance arr : array(idx,this)
}