Properties

A property in NEAT may either express a requirement or it may express a desire from the application with regards to the service provided by the transport layer.

Properties are represented as JSON objects. A set of properties may be contained within one JSON object. Below is an example of a JSON object with a single property:

{
    "property_name": {
        value: "property_value",
        precedence: 1
    }
}

Note that all examples of properties will be specified inside a JSON object.

Properties have a name, a value, and a precedence. A string is always used for the name of a property. The value of a property may be either a boolean, a string, an integer, a floating point number, an array, or an interval. Each property expects only one specific type.

The properties are sent to the Policy Manager (if present), which will return a list containing a list of candidates, which is ordered by how good the candidate matches the request from the application. Each candidate specifies a given setting for each property. NEAT will use the properties specified in each candidate when trying to set up a new connection.

Some properties are set by NEAT based on parameters to function calls. Other properties must be set manually with the neat_set_property function.

Application property reference

These are properties that may be set by the application.

transport

Type: Array

Specifies an array of transport protocols that may be used. An application may specify either one protocol with precedence 2, or multiple protocols with precedence 1.

Note: May not be queried with neat_get_property before execution of the on_connected callback. When querying this property, the returned value is a string describing the actual transport in use.

Note: Applications should avoid specifying the protocol(s) to use directly, and instead rely on the Policy Manager to make a decision on what protocol(s) to use based on other properties. The transport property should only be used for systems without a Policy Manager, or if the choice of transport protocol is strictly mandated by the application protocol.

Example 1: Multiple protocols

{
    "transport": 
    {
        "value": [ "SCTP", "TCP" ]
        "precedence": 1
    }
}

Example 2: One protocol

{
    "transport": 
    {
        "value": "UDP",
        "precedence": 2
    }
}

Available protocols:

  • SCTP
  • SCTP/UDP (SCTP tunneled over UDP)
  • TCP
  • UDP
  • UDP-Lite

security

Type: Boolean

Specifies whether the connection should be encrypted or not. With precedence 2, NEAT will only report the connection as established if it was able to connect and the (D)TLS handshake succeeds. With precedence 1, NEAT may still attempt to establish an unencrypted connection.

Inferred properties

These are properties that are inferred during connection setup and subsequently sent to the Policy Manager. Applications should not set these directly.

interfaces

Type: Array

Specifies a list of available interfaces that may be used for connections. The Policy Manager may not use all interfaces in this list.

This property is inferred during the neat_open call. Do not set this property manually.

domain_name

Type: String

Specifies the name of the remote endpoint to connect to with the neat_open call.

This property is inferred from the name parameter of neat_open call. Do not set this property manually.

port

Type: Integer

This property is inferred from the neat_open and neat_accept calls. Do not set this property manually.