<?xml version='1.0' encoding='utf-8'?>
<?xml-model href="rfc7991bis.rnc"?>
<!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent">
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="std" docName="draft-rogge-niewiejska-manet-awareness-model-00" ipr="trust200902" submissionType="IETF" xml:lang="en" tocInclude="true" tocDepth="4" symRefs="true" sortRefs="true" version="3" consensus="true">
  <front>
    <title>MANET Awareness Model</title>
    <seriesInfo name="Internet-Draft" value="draft-rogge-niewiejska-manet-awareness-model-00"/>
    <author fullname="Henning Rogge" initials="H.R." surname="Rogge">
      <organization>Fraunhofer FKIE</organization>
      <address>
        <postal>
          <street>Zanderstraße 5</street>
          <city>Bonn-Bad Godesberg</city>
          <region/>
          <code>53177</code>
          <country>DE</country>
        </postal>
        <email>henning.rogge@fkie.fraunhofer.de</email>
      </address>
    </author>
    <author fullname="Julia Niewiejska" initials="J.N." surname="Niewiejska">
      <organization>Fraunhofer FKIE</organization>
      <address>
        <postal>
          <street>Zanderstraße 5</street>
          <city>Bonn-Bad Godesberg</city>
          <region/>
          <code>53177</code>
          <country>DE</country>
        </postal>
        <email>julia.niewiejska@fkie.fraunhofer.de</email>
      </address>
    </author>
    <author fullname="Christoph Barz" initials="C.B." surname="Barz">
      <organization>Fraunhofer FKIE</organization>
      <address>
        <postal>
          <street>Zanderstraße 5</street>
          <city>Bonn-Bad Godesberg</city>
          <region/>
          <code>53177</code>
          <country>DE</country>
        </postal>
        <email>christoph.barz@fkie.fraunhofer.de</email>
      </address>
    </author>
    <date year="2026"/>
    <area>Routing</area>
    <workgroup>MANET</workgroup>
    <keyword>Datamodel</keyword>
    <keyword>Netconf</keyword>
    <abstract>
      <t>The MANET Awareness Model is a protocol- and vendor-independent data model
        that exports a router's internal knowledge from different protocols via REST or NETCONF/RESTCONF to services or applications.</t>
    </abstract>
  </front>
  <middle>
    <section numbered="true" toc="default">
      <name>Introduction</name>
      <t>Mobile ad-hoc networks (MANETs) provide IP connectivity over wireless
        links without relying on fixed infrastructure. Particularly in
        heterogeneous MANETs, where nodes may use different radio technologies
        and link-layer mechanisms, it is important to provide timely and
        reliable network state information to the application and middleware
        side. Such awareness enables:</t>
      <ul>
        <li>
          <strong>Adaptive traffic shaping</strong> – applications can
          throttle or prioritise traffic based on available bandwidth and loss
          characteristics and adapt their information exchange requirements
          in general.</li>
        <li>
          <strong>Service migration</strong> – services may be relocated to
          nodes that enjoy better connectivity, reducing latency and improving
          reliability.</li>
      </ul>
      <t>The <strong>MANET Awareness Model (MAM)</strong> defines a
        lightweight, extensible data model that exposes local and neighbourhood
        network state to consumers. In a typical deployment, the
        <em>information provider</em> is the local node (router) that
        aggregates data from multiple sources, for example:</t>
      <table>
        <thead>
          <tr>
            <th>Source</th>
            <th>Role</th>
            <th>Typical data exposed</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td>
              <strong>Routing protocol</strong> (e.g., OLSRv2, AODV)</td>
            <td>Topology &amp; route metrics</td>
            <td>Hop&nbhy;count, loss-rate routing metric, …</td>
          </tr>
          <tr>
            <td>
              <strong>DLEP</strong> (Dynamic Link&nbhy;Exchange Protocol)</td>
            <td>Radio&nbhy;link characteristics</td>
            <td>Data-rate, signal-strength, channel, …</td>
          </tr>
          <tr>
            <td>
              <strong>SENSEI</strong> (Smart Estimation of Network State)</td>
            <td>End&nbhy;to&nbhy;end active and passive probing</td>
            <td>Packet loss, RTT/latency, available capacity, …</td>
          </tr>
          <tr>
            <td>
              <strong>other</strong></td>
            <td>Additional information</td>
            <td>geo-location, heading, …</td>
          </tr>
        </tbody>
      </table>
      <t>MAM specifies a data model (see Section 3) and a corresponding YANG
        module (see Section 4). By decoupling the data collection from its
        consumption, MAM enables heterogeneous MANETs to make informed,
        per&nbhy;flow decisions while introducing no additional overhead on
        the shared wireless medium.</t>
      <section numbered="true" toc="default">
        <name>Requirements Language</name>
        <t>In many IETF documents, several words, when they are in all capitals
          as shown below, are used to signify the requirements in the
          specification.  These capitalized words can bring significant clarity
          and consistency to documents because their meanings are well defined.
          This document defines how those words are interpreted in IETF
          documents when the words are in all capitals.</t>
        <ul>
          <li>These words can be used as defined here, but using them is not
            required.  Specifically, normative text does not require the use
            of these key words.  They are used for clarity and consistency
            when that is what's wanted, but a lot of normative text does not
            use them and is still normative.</li>
          <li>The words have the meanings specified herein only when they are in
            all capitals.</li>
          <li>When these words are not capitalized, they have their normal
            English meanings and are not affected by this document.</li>
        </ul>
        <t>Authors who follow these guidelines should incorporate this phrase
          near the beginning of their document:</t>
        <ul empty="true">
          <li>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
            NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
            "MAY", and "OPTIONAL" in this document are to be interpreted as
            described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
            appear in all capitals, as shown here.</li>
        </ul>
      </section>
    </section>
    <section numbered="true" toc="default">
      <name>Objectives</name>
      <!-- Schlüsselworte: protocol independent access, fused data, hidden internal structure and sources? -->
      <t>The MANET Awareness Model was created as a single point to access most of the state of a router
        (not only the routing protocol!) in a generic and protocol independent way. It allows a router to aggregate
        data from multiple sources and present them in a way that is understandable for a service or application
        without knowing the internal specifics of the router.</t>
      <t>The MAM makes most of the topological data of the network accessible in multiple degrees of details,
        from interface specific data gathered by DLEP <xref target="RFC8175"/> or Neighbour Discovery protocols to available
        end-to-end routing tables. It can contain a browsable directory of services available in the network and
        provide access to geopositions, both for routers and attached devices.</t>
    </section>
    <section numbered="true" toc="default">
      <name>MAM Data Model</name>
      <t>This section defines the MANET Awareness Model. Implementations MAY omit sections of this data model if the
      underlying routing protocol or platform does not provide the corresponding information. In particular,
      protocols that do not maintain a complete network topology (e.g., distance-vector protocols) may be
      unable to populate fields that require global graph knowledge. Nodes SHOULD include all information
      they possess and MUST NOT generate placeholder values for unavailable data.</t>
      <section numbered="true" toc="default">
        <name>Common Elements</name>
        <!-- TODO: split this section into enumerations and groupings? -->
        <t>This section describes elements that are shared among multiple parts of the data model.</t>
        <section numbered="true">
          <name>ID values</name>
          <t>All ID values of the MAM can be recognised by the '-id' key suffix. There are locally generated
            arbitrary strings by the node that generated the MAM.</t>
          <t>There is no guarantee that different nodes of the network share the same ID for the same entity,
            e.g. a route to a special destination. Matching MAM data entries generated by different network
            nodes MUST be done by comparing data values associated to the IDs, e.g. IP addresses.</t>
          <section numbered="true">
            <name>Service-ID</name>
            <t>Service-IDs are special because they can either refer to a list of predefined constants or be a custom node-specific string as the other ID values.</t>
            <!-- TODO: determine if the list of services should be an IANA registry!-->
            <dl newline="true">
              <dt>DNS</dt>
              <dd>Access to the local DNS service of the node.</dd>
              <dt>MAM REST</dt>
              <dd>Access to the local MANET Awareness Model over HTTP/REST</dd>
              <dt>MAM RESTCONF</dt>
              <dd>Access to the local MANET Awareness Model over RESTCONF</dd>
            </dl>
          </section>
        </section>
        <section numbered="true">
          <name>Interface-technology-id</name>
          <t>These constants describe the type communication technology that is used for a specific interface.</t>
          <!-- TODO: determine if the list of technologies should be an IANA registry!-->
          <dl newline="true">
            <dt>radio-hf</dt>
            <dd>Beyond-line-of-sight radio with a centre frequency of 3-30 MHz.</dd>
            <dt>radio-vhf</dt>
            <dd>Long-range radio with a centre frequency of 30-300 MHz.</dd>
            <dt>radio-uhf</dt>
            <dd>Radio with a centre frequency of 300-3000 MHz.</dd>
            <dt>radio-shf</dt>
            <dd>Radio with a centre frequency of 3-30 GHz.</dd>
            <dt>cable</dt>
            <dd>Data transmitted over cable, both electrical and optical.</dd>
            <dt>cellular</dt>
            <dd>Data transmitted over cellular towers, e.g. LTE or 5G.</dd>
            <dt>satcom</dt>
            <dd>Data transmitted over or to a satellite in orbit.</dd>
            <dt>wifi</dt>
            <dd>Data transmitted over IEEE 802.11 compatible hardware.</dd>
            <dt>other</dt>
            <dd>Any other communication technology not covered by the above values.</dd>
          </dl>
        </section>
        <section numbered="true">
          <name>Comparator</name>
          <t>These constants define how the traffic attribute is compared to the specified constant to
            check if the condition is true.</t>
          <dl newline="true">
            <dt>less</dt>
            <dd>The attribute must be less than the threshold value.</dd>
            <dt>less-equal</dt>
            <dd>The attribute must be less than or equal to the threshold value.</dd>
            <dt>greater</dt>
            <dd>The attribute must be greater than the threshold value.</dd>
            <dt>greater-equal</dt>
            <dd>The attribute must be greater than or equal to the threshold value.</dd>
          </dl>
        </section>
        <section numbered="true">
          <name>Traffic-attribute-type</name>
          <t>Network links and paths can be characterised with different attributes, either gathered
            from hardware specifications or measured between nodes of the system. Most of the following
            constants have been copied from DLEP <xref target="RFC8175"/>.</t>
          <dl newline="true">
            <dt>max-bitrate-rx</dt>
            <dd>Maximum incoming bit rate in bit/s possible over a link or path,
              most times defined by hardware limitations.</dd>
            <dt>max-bitrate-tx</dt>
            <dd>Maximum outgoing bit rate in bit/s possible over a link or path,
              most times defined by hardware limitations.</dd>
            <dt>bitrate-rx</dt>
            <dd>Currently available incoming bit rate in bit/s to a destination.
              This may be based purely on currently achievable modulation coding scheme or
              shaped by the allocated airtime.</dd>
            <dt>bitrate-tx</dt>
            <dd>Currently available outgoing bit rate in bit/s to a destination.
              This may be based purely on currently achievable modulation coding scheme or
              shaped by the allocated airtime.</dd>
            <dt>latency</dt>
            <dd>Latency of the transmission over the air until the data will arrive at
              the destination in seconds, disregarding delayed transmission because of media access or
              queuing.</dd>
            <dt>lossrate</dt>
            <dd>Fraction of the transmission frames being lost as a value between
              0 (no loss) and 1 (all frames lost). Frames recovered by radio mechanisms like retransmissions
              are not counting as lost.</dd>
            <dt>hopcount</dt>
            <dd>Number of (typically radio-) links being traversed to the destination
              counted as a positive integer.</dd>
            <dt>rt-metric</dt>
            <dd>Cost towards the destination as measured by the routing protocol,
              expressed as a positive integer. The metric is considered additive when multiple links
              are combined.</dd>
          </dl>
        </section>
        <section numbered="true">
          <name>Traffic-attribute</name>
          <t>Traffic attributes are represented as optional named presence containers on the
            object they describe. Container names correspond to the traffic attribute names
            (e.g. bitrate-tx, latency). Each container, when present, contains a single
            leaf named value holding the measured or configured quantity. An absent container
            indicates the metric is unknown or not applicable.</t>
        </section>
        <section numbered="true">
          <name>Traffic-classifier</name>
          <t>A traffic classifier is a boolean condition comparing a traffic attribute
            against a threshold value, e.g. (bitrate-tx &gt; 200000). Classifiers are
            represented as optional per-metric presence containers. Each container, when
            present, contains a value leaf holding the threshold and a comparator leaf
            specifying the comparison operator. An absent container means the classifier
            is not active for that metric.</t>
        </section>
        <section numbered="true">
          <name>Traffic-selector-type</name>
          <t>A traffic selector type defines a field the operating system uses to detect the
            QoS class of the traffic.</t>
          <dl newline="true">
            <dt>dscp</dt>
            <dd>The 6-bit DSCP field with values between 0 and 63, of either IPv4 or IPv6 header.</dd>
            <dt>vlan-tos</dt>
            <dd>The 3-bit Priority Code Point (PCP) field in the 802.1Q VLAN header, values 0 to 7.</dd>
            <dt>vlan-id</dt>
            <dd>QoS class determined by the VLAN ID of the Ethernet VLAN header, values 0 to 4095.</dd>
            <dt>udp-port</dt>
            <dd>QoS class determined by a specific UDP destination port, both IPv4 and IPv6.</dd>
            <dt>tcp-port</dt>
            <dd>QoS class determined by a specific TCP destination port, both IPv4 and IPv6.</dd>
          </dl>
        </section>
        <section numbered="true">
          <name>Traffic-selector</name>
          <t>Traffic selectors are represented as optional named presence containers
            that identify traffic mapped to a topology. Container names correspond to
            the selector type names (dscp, vlan-tos, vlan-id, udp-port, tcp-port).
            Each container, when present, contains a single mandatory value leaf
            holding the matching field value. An absent container means that selector
            type is not used for this topology. A selectors container with no child
            containers present designates this topology as the default for all
            unmatched traffic.</t>
        </section>
        <section numbered="true">
          <name>Interface-addresses</name>
          <t>A list of at least one IP address combined with an optional MAC address, all belonging
            to a single local interface of a network node.</t>
        </section>
        <section numbered="true">
          <name>Host-dns</name>
          <t>The hostname of a node, optionally including the fully qualified domain name.</t>
        </section>
        <section numbered="true">
          <name>Service-protocol-type</name>
          <t>The Service protocol type defines what upper-level protocol has to be used to access
            a certain service on the port defined in the MAM description.</t>
          <dl newline="true">
            <dt>TCP</dt>
            <dd>The service uses the TCP protocol with an unspecified service specific content.</dd>
            <dt>UDP</dt>
            <dd>The service uses the UDP protocol with an unspecified service specific content.</dd>
            <dt>HTTP</dt>
            <dd>The service uses unencrypted HTTP version 1/2 over a TCP socket.</dd>
            <dt>HTTPS</dt>
            <dd>The service uses encrypted HTTP version 1/2 over a TCP socket.</dd>
            <dt>HTTP3</dt>
            <dd>The service uses encrypted HTTP version 3 over a UDP socket.</dd>
            <dt>OTHER</dt>
            <dd>The service uses a protocol not covered by the above values.</dd>
          </dl>
        </section>
      </section>
      <section numbered="true" toc="default">
        <name>Dataprovider</name>
        <t>Dataprovider is a container that holds information about the router that generated and provided
        this data set, including its unique identifier and relevant timestamps.</t>
        <dl newline="true">
          <dt>node-id</dt>
          <dd>The node-id identifies the router providing this data.</dd>
          <dt>creation-time</dt>
          <dd>The timestamp indicating when the originating router generated this data set. It reflects the most recent point in time at which any of the included information was collected, encoded according to <xref target="RFC3339"/>.</dd>
          <dt>request-time</dt>
          <dd>The timestamp indicating when the client requested this data set, encoded according to <xref target="RFC3339"/>.</dd>
        </dl>
      </section>
      <section numbered="true" toc="default">
        <name>Topologies</name>
        <t>The topologies list maps each topology instance, keyed by topology-id. Each topology describes how traffic service classes are treated within the routing domain. Topologies describe the common network-wide Quality of Service policies that are shared among the nodes.</t>
        <dl newline="true">
          <dt>topology-id</dt>
          <dd>A mandatory unique string identifying a topology instance.</dd>
          <dt>capabilities</dt>
          <dd>A container of optional traffic classifier containers (max-bitrate-rx, max-bitrate-tx, bitrate-rx, bitrate-tx, latency, lossrate, hopcount, rt-metric). Each classifier container contains the corresponding metric leaf together with a comparator leaf. It defines the minimal interface features required to participate in this topology. Applications may assume these capabilities are available.</dd>
          <dt>restrictions</dt>
          <dd>A container of optional traffic classifier containers using the same names and structure as capabilities. It specifies the maximum traffic attributes a router or application is permitted to use within this topology. These might be enforced by firewall or traffic shaping.</dd>
          <dt>selectors</dt>
          <dd>A container of optional traffic selector presence containers: dscp, vlan-tos, vlan-id, udp-port, tcp-port. Each selector container, when present, identifies traffic mapped to this topology by its value leaf. A selectors container with no selector containers present designates this topology as the default for unmatched traffic.</dd>
        </dl>
      </section>
      <section numbered="true" toc="default">
        <name>Nodes</name>
        <t>The nodes list represents individual or aggregated entities within the network, keyed by node-id. Each node entry may describe a single router or a group of routers represented by aggregated data.</t>
        <dl newline="true">
          <dt>node-id</dt>
          <dd>A mandatory router- or entity-local identifier for a single node within this data description. There is no guarantee that two different sources will assign the same node-id to the same router or entity.</dd>
          <dt>members</dt>
          <dd>A list of node-id values. Lists the identifiers of nodes that are part of this compound or aggregated node. If empty this node represents a single router.</dd>
          <dt>ip</dt>
          <dd>A list of IP prefixes locally assigned to this node.</dd>
          <dt>dns</dt>
          <dd>Contains the DNS information of the node, including its hostname and optional fully qualified domain name (FQDN).</dd>
        </dl>
        <section numbered="true" toc="default">
          <name>Interfaces</name>
          <t>A list of network interfaces that are used for communication with other network nodes.</t>
          <dl newline="true">
            <dt>interface-id</dt>
            <dd>Mandatory identifier of the interface within the context of the node.</dd>
            <dt>medium</dt>
            <dd>Describes the communication medium attached to the interface. Contains an interface technology-id and an optional string description.</dd>
            <dt>interface-endpoint</dt>
            <dd>Specifies the local addresses of the interface, both IPs and optionally its MAC address. These addresses might not be globally reachable.</dd>
            <dt>traffic metrics</dt>
            <dd>Optional traffic metric presence containers from the traffic-attributes grouping: max-bitrate-rx, max-bitrate-tx, bitrate-rx, bitrate-tx, latency, lossrate, hopcount, rt-metric. These apply to the interface as a whole and are not neighbour-specific. Each container, when present, holds a value leaf with the measured quantity. An absent container indicates the metric is unknown or not applicable for this interface.</dd>
            <dt>links</dt>
            <dd>A list of links, keyed by remote-id.</dd>
          </dl>
          <section numbered="true" toc="default">
            <name>Links</name>
            <t>A direct connection to a neighbouring node over a specific interface</t>
            <dl newline="true">
              <dt>remote-id</dt>
              <dd>The mandatory node-id of the remote neighbour.</dd>
              <dt>interface-endpoint</dt>
              <dd>The interface addresses of the remote neighbour, including an optional MAC address.</dd>
              <dt>traffic metrics</dt>
              <dd>Optional traffic metric presence containers from the traffic-attributes grouping: max-bitrate-rx, max-bitrate-tx, bitrate-rx, bitrate-tx, latency, lossrate, hopcount, rt-metric. These describe attributes specific to the neighbour relationship. Each container, when present, holds a value leaf with the measured quantity.</dd>
            </dl>
          </section>
        </section>
        <section numbered="true" toc="default">
          <name>Connectivity</name>
          <t>A list of neighbour nodes that are reachable directly (i.e., without intermediate hops) within the specified topology. This corresponds to the node-to-node adjacencies in the routing graph. Traffic metric fields describe link-level characteristics of the direct connection.</t>
          <dl newline="true">
            <dt>remote-id</dt>
            <dd>The mandatory node-id of the neighbour.</dd>
            <dt>topology-id</dt>
            <dd>The mandatory id specifying the topology in which this direct connectivity exists.</dd>
            <dt>traffic metrics</dt>
            <dd>Optional traffic metric presence containers from the traffic-attributes grouping: max-bitrate-rx, max-bitrate-tx, bitrate-rx, bitrate-tx, latency, lossrate, hopcount, rt-metric. These describe traffic attributes of the direct link to this neighbour. Each container, when present, holds a value leaf with the measured quantity.</dd>
          </dl>
        </section>
        <section numbered="true" toc="default">
          <name>Destinations</name>
          <t>A list of IP prefixes that are reachable via routing from this node within the specified topology. This list expresses the routing view: which prefixes can be reached and, optionally, the sequence of nodes used to reach them. Traffic metric fields associated with a destination describe end-to-end path characteristics (e.g. accumulated cost).</t>
          <dl newline="true">
            <dt>ip</dt>
            <dd>The mandatory IP destination prefix.</dd>
            <dt>topology-id</dt>
            <dd>The mandatory identifier of the topology over which the destination is reachable.</dd>
            <dt>traffic metrics</dt>
            <dd>Optional traffic metric presence containers from the traffic-attributes grouping: max-bitrate-rx, max-bitrate-tx, bitrate-rx, bitrate-tx, latency, lossrate, hopcount, rt-metric. These describe end-to-end path characteristics for reaching this destination. Each container, when present, holds a value leaf with the measured quantity.</dd>
            <dt>path</dt>
            <dd>A list of intermediate nodes, keyed by hop. Represents the sequence of nodes used to reach the destination.</dd>
            <dt>hop</dt>
            <dd>The sequence position of the intermediate node in the path, starting at 1.</dd>
            <dt>remote-id</dt>
            <dd>The mandatory node-id of the intermediate node.</dd>
          </dl>
        </section>
        <section numbered="true" toc="default">
          <name>Attached</name>
          <t>A list of IP prefixes reachable through this node over a specific topology. Traffic metric fields describe properties of reaching the prefix from this node.</t>
          <dl newline="true">
            <dt>ip</dt>
            <dd>The mandatory reachable prefix attached to this node.</dd>
            <dt>topology-id</dt>
            <dd>The mandatory identifier of the topology through which the prefix is directly reachable.</dd>
            <dt>dns</dt>
            <dd>Describes DNS information associated with this prefix, if available.</dd>
            <dt>traffic metrics</dt>
            <dd>Optional traffic metric presence containers from the traffic-attributes grouping: max-bitrate-rx, max-bitrate-tx, bitrate-rx, bitrate-tx, latency, lossrate, hopcount, rt-metric. These describe traffic attributes associated with this directly attached prefix. Each container, when present, holds a value leaf with the measured quantity.</dd>
          </dl>
        </section>
        <section numbered="true" toc="default">
          <name>Services</name>
          <t>A list of network services hosted on the node or on its attached networks, keyed by service-id, ip, and port.</t>
          <dl newline="true">
            <dt>service-id</dt>
            <dd>The mandatory identifier of the service. This can either be a
              predefined string from the MAM IANA service registry or a
              custom string.</dd>
            <dt>ip</dt>
            <dd>The mandatory IP address on which the service is available.</dd>
            <dt>port</dt>
            <dd>The mandatory port number used by the service.</dd>
            <dt>protocol</dt>
            <dd>Transport or application-layer protocol required to access the service: TCP, UDP, HTTP, HTTPS, HTTP3, or OTHER.</dd>
            <dt>description</dt>
            <dd>Provides an optional textual description of the service.</dd>
          </dl>
        </section>
        <section numbered="true" toc="default">
          <name>Identities</name>
          <t>A list of geoposition markers generated by the network node, keyed by
            identity-id. One entry may represent the position of the node itself;
            others may represent attached or tracked entities.</t>
          <dl newline="true">
            <dt>identity-id</dt>
            <dd>Mandatory unique identifier of this identity entry within the node.</dd>
            <dt>geo-location</dt>
            <dd>Optional container describing the geographic location of this identity,
              modelled after the TPV object of gpsd-json. The fields
              time, latitude, and longitude are mandatory when the
              container is present; all other fields are optional.</dd>
            <dt>geo-location/time</dt>
            <dd>Timestamp of the position fix in UTC, encoded as date-and-time per RFC 3339.</dd>
            <dt>geo-location/latitude</dt>
            <dd>Latitude in degrees, ranging from -90 (South) to +90 (North).</dd>
            <dt>geo-location/longitude</dt>
            <dd>Longitude in degrees, ranging from -180 (West) to +180 (East).</dd>
            <dt>geo-location/altitude</dt>
            <dd>Altitude above the ellipsoid in metres.</dd>
            <dt>geo-location/climb</dt>
            <dd>Vertical speed in metres per second; positive means ascending, negative descending.</dd>
            <dt>geo-location/track</dt>
            <dd>Course over ground in degrees from true north, ranging from 0 to 360.</dd>
            <dt>geo-location/speed</dt>
            <dd>Speed over ground in metres per second.</dd>
            <dt>self</dt>
            <dd>When true, this identity represents the network node itself.</dd>
            <dt>mapping</dt>
            <dd>An optional list of application-specific key/value pairs, keyed by namespace
              and key. Allows applications to correlate this identity with entries in
              their own databases.</dd>
            <dt>mapping/namespace</dt>
            <dd>The name or identifier of the application that defined this mapping.</dd>
            <dt>mapping/key</dt>
            <dd>An application-specific key identifying an aspect of this identity.</dd>
            <dt>mapping/value</dt>
            <dd>The application-specific value associated with the key for this identity.</dd>
          </dl>
        </section>
      </section>
      <section numbered="true" toc="default">
        <name>JSON Encoding</name>
        <t>When encoded as JSON <xref target="RFC7951"/>, traffic metrics appear as named
          containers on their parent object. Each container holds a single value member.
          YANG identifier names are used as JSON member names (e.g. bitrate-tx, not
          tx_bitrate). An absent container indicates the metric is not available.</t>
        <t>Traffic classifiers follow the same container structure, adding a comparator
          member alongside value. Comparator enum values use the YANG enum names exactly
          (less, less-equal, greater, greater-equal).</t>
        <t>Traffic selectors are also presence containers, each holding a value member
          with the matching field value.</t>
        <t>Example interface entry with a traffic metric:</t>
        <sourcecode type="json">{
  "interface-id": "radio0",
  "bitrate-tx": {
    "value": 1000000
  }
}</sourcecode>
        <t>Example topology entry with a classifier and a selector:</t>
        <sourcecode type="json">{
  "topology-id": "voice",
  "capabilities": {
    "bitrate-tx": {
      "value": 1000000,
      "comparator": "greater"
    }
  },
  "selectors": {
    "dscp": {
      "value": 46
    }
  }
}</sourcecode>
      </section>
    </section>
    <section numbered="true" toc="default">
      <name>MAM YANG Module</name>
      <t>This section defines the MAM YANG module.</t>
      <sourcecode type="yang" markers="true" name="ietf-manet-awareness-model.yang" originalSrc="ietf-manet-awareness-model.yang">module ietf-manet-awareness-model {
    namespace "urn:de:fraunhofer:fkie:rhn:mam";

    prefix mam;

    import ietf-inet-types { prefix inet; }
    import ietf-yang-types { prefix yang; }

    contact
        "Editor: Henning Rogge
         &lt;mailto:henning.rogge@fkie.fraunhofer.de&gt;
         Editor: Julia Niewiejska
         &lt;mailto:julia.niewiejska@fkie.fraunhofer.de&gt;";

    description
        "This module defines a standardized information access for
         middleware and applications to the current state and
         knowledge of a MANET router";

    organization "ietf manet wg";

    revision "2026-07-06" {
        description
            "Flatten traffic attributes, classifiers, and selectors
             to concrete fields";
    }

    grouping comparator {
        description
            "Comparison operator for use in traffic-classifiers.
             Combined with a metric value it forms a boolean
             threshold condition, e.g. latency less-equal 0.020.";
        leaf comparator {
            description "comparator between two numeric values.";
            mandatory true;
            type enumeration {
                enum less;
                enum less-equal;
                enum greater;
                enum greater-equal;
            }
        }
    }
    grouping attr-max-bitrate-rx {
        description
            "Value leaf for the hardware-limited maximum
             receive rate.";
        leaf value {
            description "maximum receive bitrate in bits/s";
            mandatory true;
            type uint64;
        }
    }
    grouping attr-max-bitrate-tx {
        description
            "Value leaf for the hardware-limited maximum
             transmit rate.";
        leaf value {
            description "maximum transmit bitrate in bits/s";
            mandatory true;
            type uint64;
        }
    }
    grouping attr-bitrate-rx {
        description
            "Value leaf for the currently achievable receive rate.";
        leaf value {
            description "current receive bitrate in bits/s";
            mandatory true;
            type uint64;
        }
    }
    grouping attr-bitrate-tx {
        description
            "Value leaf for the currently achievable transmit rate.";
        leaf value {
            description "current transmit bitrate in bits/s";
            mandatory true;
            type uint64;
        }
    }
    grouping attr-latency {
        description
            "Value leaf for the one-way propagation and processing
             delay.";
        leaf value {
            description "latency in seconds";
            mandatory true;
            type decimal64 {
                fraction-digits 9;
                range "0 .. max";
            }
        }
    }
    grouping attr-lossrate {
        description
            "Value leaf for the frame loss fraction.";
        leaf value {
            description "packet loss rate";
            mandatory true;
            type decimal64 {
                fraction-digits 2;
                range "0 .. 1";
            }
        }
    }
    grouping attr-hopcount {
        description
            "Value leaf for the hop count.";
        leaf value {
            description "hop count";
            mandatory true;
            type uint8;
        }
    }
    grouping attr-rt-metric {
        description
            "Value leaf for the routing protocol cost.";
        leaf value {
            description "additive routing metric";
            mandatory true;
            type uint64;
        }
    }
    grouping traffic-attributes {
        description
            "Optional presence containers reporting measured or
             configured properties of a link or path. Each metric
             container is independently optional; an absent
             container indicates the metric is unavailable or not
             applicable.";
        container max-bitrate-rx {
            presence "max rx bitrate is available";
            description
                "Hardware-limited maximum receive rate;
                 does not reflect current load.";
            uses attr-max-bitrate-rx;
        }
        container max-bitrate-tx {
            presence "max tx bitrate is available";
            description
                "Hardware-limited maximum transmit rate;
                 does not reflect current load.";
            uses attr-max-bitrate-tx;
        }
        container bitrate-rx {
            presence "rx bitrate is available";
            description
                "Currently achievable receive rate.";
            uses attr-bitrate-rx;
        }
        container bitrate-tx {
            presence "tx bitrate is available";
            description
                "Currently achievable transmit rate.";
            uses attr-bitrate-tx;
        }
        container latency {
            presence "latency is available";
            description
                "One-way propagation and processing delay.";
            uses attr-latency;
        }
        container lossrate {
            presence "lossrate is available";
            description
                "Frame loss fraction.";
            uses attr-lossrate;
        }
        container hopcount {
            presence "hopcount is available";
            description
                "Number of link-layer hops traversed to reach
                 this destination.";
            uses attr-hopcount;
        }
        container rt-metric {
            presence "router metric is available";
            description
                "Accumulated routing cost as reported by the
                 routing protocol.";
            uses attr-rt-metric;
        }
    }

    grouping traffic-classifiers {
        description
            "Optional presence containers expressing threshold
             conditions on traffic attributes. Each container
             pairs a metric value with a comparison operator.
             Multiple present classifiers are all required to
             hold simultaneously.";
        container max-bitrate-rx {
            presence "max rx bitrate is used as classifier";
            description
                "Threshold condition on the maximum receive
                 rate.";
            uses attr-max-bitrate-rx;
            uses comparator;
        }
        container max-bitrate-tx {
            presence "max tx bitrate is used as classifier";
            description
                "Threshold condition on the maximum transmit
                 rate.";
            uses attr-max-bitrate-tx;
            uses comparator;
        }
        container bitrate-rx {
            presence "rx bitrate is used as classifier";
            description
                "Threshold condition on the currently available
                 receive rate.";
            uses attr-bitrate-rx;
            uses comparator;
        }
        container bitrate-tx {
            presence "tx bitrate is used as classifier";
            description
                "Threshold condition on the currently available
                 transmit rate.";
            uses attr-bitrate-tx;
            uses comparator;
        }
        container latency {
            presence "latency is used as classifier";
            description "Threshold condition on the one-way delay.";
            uses attr-latency;
            uses comparator;
        }
        container lossrate {
            presence "lossrate is used as classifier";
            description
                "Threshold condition on the frame loss
                 fraction.";
            uses attr-lossrate;
            uses comparator;
        }
        container hopcount {
            presence "hopcount is used as classifier";
            description "Threshold condition on the hop count.";
            uses attr-hopcount;
            uses comparator;
        }
        container rt-metric {
            presence "router metric is used as classifier";
            description
                "Threshold condition on the accumulated routing
                 cost.";
            uses attr-rt-metric;
            uses comparator;
        }
    }

    grouping interface-addresses {
        description
            "represents the addresses an interface is
             associated with.";
        leaf-list ip {
            description "IP addresses set on the interface";
            type inet:ip-address;
            min-elements 1;
        }
        leaf mac {
            description "Ethernet MAC address of the interface";
            type yang:mac-address;
        }
    }

    grouping host-dns {
        description
            "DNS hostname and optional fully qualified domain
             name of a node or attached network prefix.";
        container dns {
            presence "DNS information is available";
            description "DNS naming for this entity.";
            leaf hostname {
                description
                    "Unqualified host name, without domain
                     suffix.";
                type string;
                mandatory true;
            }
            leaf fqdn {
                description
                    "Fully qualified domain name, including
                     hostname and all domain labels.";
                type string;
            }
        }
    }

    container db {
        description
            "Top-level read-only operational data exported by
             this router, reflecting its current knowledge at
             request time.";
        config false;
        container dataprovider {
            description
                "Metadata identifying the router that generated
                 this data set and the timestamps associated
                 with it.";
            leaf node-id {
                description "ID of the router providing this data";
                type leafref {
                    path "/db/nodes/node-id";
                }
            }
            leaf creation-time {
                description
                    "Timestamp when the data was put together by the
                     router, the time the most recent data included
                     in the update was gathered.";
                reference
                    "RFC 3339, Section 5.6: Date and Time on
                     the Internet: Timestamps";
                type yang:date-and-time;
            }
            leaf request-time {
                description
                    "Timestamp when this data was requested by
                     the client";
                reference
                    "RFC 3339, Section 5.6: Date and Time on
                     the Internet: Timestamps";
                type yang:date-and-time;
            }
        }
        list topologies {
            description
                "Each topology represents a way traffic service
                 classes are handled by the networks
                 routing protocol.";
            key "topology-id";

            leaf topology-id {
                description "Unique identification of a traffic
                    topology of the network";
                type string;
            }
            container capabilities {
                description
                    "minimal features interfaces must provide to be
                     contained in this topology which is also a
                     minimum capability the application can assume.";
                uses traffic-classifiers;
            }
            container restrictions {
                description
                    "maximum traffic attributes an router/application
                     is allowed to use on this topology";
                uses traffic-classifiers;
            }
            container selectors {
                description
                    "traffic selectors mapped to this topology. an
                     empty selectors container means this topology is
                     the 'default' one that gets all traffic not put
                     into other topologies.";

                container dscp {
                    presence "DSCP is used as selector";
                    description
                        "Traffic classified by the 6-bit DSCP
                         field in the IP header, applicable to
                         both IPv4 and IPv6.";
                    leaf value {
                        description
                            "DSCP (6 bits) value selecting traffic
                            for this topology";
                        mandatory true;
                        type uint8 {
                            range "0 .. 63";
                        }
                    }
                }
                container vlan-tos {
                    presence
                        "VLAN type of service is used as selector";
                    description
                        "Traffic classified by the 3-bit Priority
                         Code Point (PCP) field in the 802.1Q
                         VLAN header.";
                    leaf value {
                        description
                            "VLAN TOS value selecting traffic for
                            this topology";
                        mandatory true;
                        type uint8 {
                            range "0 .. 7";
                        }
                    }
                }
                container vlan-id {
                    presence "VLAN ID is used as selector";
                    description
                        "Traffic classified by VLAN membership;
                         all frames carrying this VLAN ID are
                         mapped to the topology.";
                    leaf value {
                        description
                            "VLAN ID selecting traffic for this
                             topology";
                        mandatory true;
                        type uint16 {
                            range "0 .. 4095";
                        }
                    }
                }
                container udp-port {
                    presence
                        "UDP destination port is used as selector";
                    description
                        "Traffic classified by UDP destination
                         port, applicable to both IPv4 and
                         IPv6.";
                    leaf value {
                        description
                            "UDP port selecting traffic for
                             this topology";
                        mandatory true;
                        type uint16;
                    }
                }
                container tcp-port {
                    presence
                        "TCP destination port is used as selector";
                    description
                        "Traffic classified by TCP destination
                         port, applicable to both IPv4 and
                         IPv6.";
                    leaf value {
                        description
                            "TCP port selecting traffic for
                             this topology";
                        mandatory true;
                        type uint16;
                    }
                }
            }
        }
        list nodes {
            description
                "a node represents an entity of the network, either a
                 single router or a group of routers represented
                 by aggregated data.";
            key "node-id";
            uses host-dns;

            leaf node-id {
                description
                    "node-id is a router/entity-local identification
                     of a single node in this data description. There
                     is no guarantee that different nodes queried for
                     this data will assign the same node-id to the
                     same router/entity";
                type string;
            }
            leaf-list members {
                description
                    "the list of nodes that are part of this compound
                     node or group of nodes.";
                type leafref {
                    path "/db/nodes/node-id";
                }
            }
            leaf-list ip {
                description
                    "the list of IP addresses that are locally on
                     the network node.";
                type inet:ip-prefix;
            }
            list interfaces {
                description
                    "the list of network interfaces locally attached
                     to this node that are used to communicate to
                     other network nodes";
                key "interface-id";
                uses traffic-attributes;

                leaf interface-id {
                    description
                        "Identification of an interface of a node";
                    type string;
                }
                container medium {
                    presence "details about interface technology";
                    description
                        "a description of the communication medium
                         attached to the network node interface.";
                    leaf technology-id {
                        description
                            "Technology used by an interface.";
                        mandatory true;
                        type enumeration {
                            enum radio-hf;
                            enum radio-vhf;
                            enum radio-uhf;
                            enum radio-shf;
                            enum cable;
                            enum cellular;
                            enum satcom;
                            enum wifi;
                            enum other;
                        }
                    }
                    leaf description {
                        description
                            "Optional free-text label for the
                             medium, e.g. a radio model name.";
                        type string;
                    }
                }
                container interface-endpoint {
                    description
                        "the local addresses of the interface. These
                         addresses might not be globally reachable";
                    uses interface-addresses;
                }
                list links {
                    description
                        "a list of known network nodes that can be
                         reached over this interface";
                    key "remote-id";
                    uses traffic-attributes;

                    leaf remote-id {
                        description
                            "The neighbour reachable over this
                             direct link.";
                        type leafref {
                            path "/db/nodes/node-id";
                        }
                    }
                    container interface-endpoint {
                        description
                            "the interface addresses of the
                             remote neighbor";
                        uses interface-addresses;
                    }
                }
            }
            list services {
                description
                    "a list of services that are on this network node
                     or on an attached network prefix of the node";
                key "service-id ip port";

                leaf service-id {
                    description
                        "Unique identification of a service as
                        defined by the services application";
                    type string;
                }
                leaf ip {
                    description
                        "IP address on which the service
                         listens.";
                    type inet:ip-address;
                }
                leaf port {
                    description
                        "Network port on which the service
                         accepts connections.";
                    type uint16;
                }
                leaf protocol {
                    description
                        "Transport or application-layer protocol
                         required to access the service.";
                    mandatory true;
                    type enumeration {
                        enum TCP;
                        enum UDP;
                        enum HTTP;
                        enum HTTPS;
                        enum HTTP3;
                        enum OTHER;
                    }
                }
                leaf description {
                    description
                        "Human-readable description of the
                         service, its purpose, or usage
                         hints.";
                    type string;
                }
            }
            list identities {
                description
                    "a list of geoposition markers generated by the
                     network node. One of them can be the position of
                     the network node itself.";
                key "identity-id";

                leaf identity-id {
                    description
                        "Identification of an entity that was created
                        and is handled by the local node. This can be
                        the node itself, dismounted personal of a
                        vehicle, remote controlled drones or an
                        remote entity tracked by the node.";
                    type string;
                }
                container geo-location {
                    description
                        "geo-location is modelled after the TPV
                         object of gpsd-json";

                    leaf time {
                        description
                            "Time/date stamp in UTC as defined in
                             RFC 3339";
                        reference
                            "RFC 3339, Section 5.6: Date and Time on
                             the Internet: Timestamps";
                        mandatory true;
                        type yang:date-and-time;
                    }
                    leaf altitude {
                        description
                            "Altitude, height above ellipsoid,
                             in meters";
                        type decimal64 {
                            fraction-digits 2;
                        }
                    }
                    leaf climb {
                        description
                            "Climb (positive) or sink (negative)
                             rate, meters per second";
                        type decimal64 {
                            fraction-digits 2;
                        }
                    }
                    leaf latitude {
                        description
                            "Latitude in degrees, positive means
                             North, negative means South";
                        mandatory true;
                        type decimal64 {
                            fraction-digits 9;
                            range "-90 .. 90";
                        }
                    }
                    leaf longitude {
                        description
                            "Longitude in degrees, positive means
                             East, negative means West";
                        mandatory true;
                        type decimal64 {
                            fraction-digits 9;
                            range "-180 .. 180";
                        }
                    }
                    leaf track {
                        description
                            "Course over ground, degrees from true
                             north. Values range from 0 to 360,
                             where 0 and 360 represent the same
                             bearing (due north).";
                        type decimal64 {
                            fraction-digits 2;
                            range "0 .. 360";
                        }
                    }
                    leaf speed {
                        description
                            "Speed over ground, meters per second";
                        type decimal64 {
                            fraction-digits 2;
                            range "0 .. max";
                        }
                    }
                }
                leaf self {
                    description
                        "a value of true means that this geoposition
                         is the one of the network node itself";
                    type boolean;
                }
                list mapping {
                    description
                        "a list of application specific mappings of
                         the geoposition to existing data within the
                         application. With this mapping, applications
                         can integrate geopositions reported by this
                         data model back into their own database";
                    key "namespace key";

                    leaf namespace {
                        description
                            "the name or identifier of the
                             application defining this mapping";
                        type string;
                    }
                    leaf key {
                        description
                            "an application specific key describing
                             an aspect of this geoposition marker";
                        type string;
                    }
                    leaf value {
                        description
                            "the application specific value
                             corresponding to the key for this
                             geoposition marker";
                        type string;
                        mandatory true;
                    }
                }
            }
            list destinations {
                description
                    "a list of IP prefixes reachable from this
                    network node over a specific topology";
                key "ip topology-id";
                uses traffic-attributes;

                leaf ip {
                    description
                        "Destination prefix reachable via this
                         routing entry.";
                    type inet:ip-prefix;
                }
                leaf topology-id {
                    description
                        "Topology over which this destination
                         is reachable.";
                    type leafref {
                        path "/db/topologies/topology-id";
                    }
                }
                list path {
                    description
                        "a list of intermediate nodes on the way to
                         the destination. This allows to map a
                         destination to the hop-by-hop
                         connectivity.";
                    key "hop";

                    leaf hop {
                        description
                            "Sequence position of this node in
                             the path, starting at 1; defines
                             the hop ordering toward the
                             destination.";
                        type uint8;
                    }
                    leaf remote-id {
                        description
                            "Node at this sequence position on
                             the path to the destination.";
                        type leafref {
                            path "/db/nodes/node-id";
                        }
                    }
                }
            }
            list connectivity {
                description
                    "a list of topology specific neighbour network
                    nodes reachable without any intermediate
                    hop that are part of the same network";

                key "remote-id topology-id";
                uses traffic-attributes;

                leaf remote-id {
                    description
                        "The neighbour forming this direct
                         adjacency.";
                    type leafref {
                        path "/db/nodes/node-id";
                    }
                }
                leaf topology-id {
                    description
                        "Topology within which this direct
                         adjacency is active.";
                    type leafref {
                        path "/db/topologies/topology-id";
                    }
               }
            }
            list attached {
                description
                    "a list of IP prefixes that are reachable
                     directly through this network node";
                key "ip topology-id";
                uses host-dns;
                uses traffic-attributes;

                leaf ip {
                    description
                        "IP prefix directly reachable through
                         this node.";
                    type inet:ip-prefix;
                }
                leaf topology-id {
                    description
                        "Topology through which this prefix is
                         directly reachable.";
                    type leafref {
                        path "/db/topologies/topology-id";
                    }
                }
            }
        }
    }
}
</sourcecode>
    </section>
    <section numbered="true" toc="default">
      <name>IANA Considerations</name>
    </section>
    <section numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>MAM access is primarily meant for the local node or the local network attached to the node where all possible users are trusted, not to be used remotely. In this mode the server socket for MAM should be bound to the loopback address, but SHOULD provide HTTPS access anyways. If it is meant to be used remotely by other nodes or even from unknown IPs, access must be limited by standard HTTP mechanisms like username/password or client certificates and encrypted HTTPS MUST be used.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>Normative References</name>
      <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author fullname="S. Bradner" initials="S." surname="Bradner"/>
          <date month="March" year="1997"/>
          <abstract>
            <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="2119"/>
        <seriesInfo name="DOI" value="10.17487/RFC2119"/>
      </reference>
      <reference anchor="RFC3339" target="https://www.rfc-editor.org/info/rfc3339" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3339.xml">
        <front>
          <title>Date and Time on the Internet: Timestamps</title>
          <author fullname="G. Klyne" initials="G." surname="Klyne"/>
          <author fullname="C. Newman" initials="C." surname="Newman"/>
          <date month="July" year="2002"/>
          <abstract>
            <t>This document defines a date and time format for use in Internet protocols that is a profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="3339"/>
        <seriesInfo name="DOI" value="10.17487/RFC3339"/>
      </reference>
      <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
        <front>
          <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
          <author fullname="B. Leiba" initials="B." surname="Leiba"/>
          <date month="May" year="2017"/>
          <abstract>
            <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="8174"/>
        <seriesInfo name="DOI" value="10.17487/RFC8174"/>
      </reference>
      <reference anchor="RFC8175" target="https://www.rfc-editor.org/info/rfc8175" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8175.xml">
        <front>
          <title>Dynamic Link Exchange Protocol (DLEP)</title>
          <author fullname="S. Ratliff" initials="S." surname="Ratliff"/>
          <author fullname="S. Jury" initials="S." surname="Jury"/>
          <author fullname="D. Satterwhite" initials="D." surname="Satterwhite"/>
          <author fullname="R. Taylor" initials="R." surname="Taylor"/>
          <author fullname="B. Berry" initials="B." surname="Berry"/>
          <date month="June" year="2017"/>
          <abstract>
            <t>When routing devices rely on modems to effect communications over wireless links, they need timely and accurate knowledge of the characteristics of the link (speed, state, etc.) in order to make routing decisions. In mobile or other environments where these characteristics change frequently, manual configurations or the inference of state through routing or transport protocols does not allow the router to make the best decisions. This document introduces a new protocol called the Dynamic Link Exchange Protocol (DLEP), which provides a bidirectional, event-driven communication channel between the router and the modem to facilitate communication of changing link characteristics.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8175"/>
        <seriesInfo name="DOI" value="10.17487/RFC8175"/>
      </reference>
    </references>
    <references>
      <name>Informative References</name>
      <reference anchor="RFC7951" target="https://www.rfc-editor.org/info/rfc7951" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7951.xml">
        <front>
          <title>JSON Encoding of Data Modeled with YANG</title>
          <author fullname="L. Lhotka" initials="L." surname="Lhotka"/>
          <date month="August" year="2016"/>
          <abstract>
            <t>This document defines encoding rules for representing configuration data, state data, parameters of Remote Procedure Call (RPC) operations or actions, and notifications defined using YANG as JavaScript Object Notation (JSON) text.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7951"/>
        <seriesInfo name="DOI" value="10.17487/RFC7951"/>
      </reference>
    </references>
    <section numbered="false">
      <name>Acknowledgements</name>
      <t>The authors thank the participants of NATO IST-194 "Adaptive Networks at the Tactical Edge" for their valuable feedback. Special thanks go to Roberto Fronteddu, Florida Institute for Human and Machine Cognition (IHMC), whose insights were instrumental in extending the model to support group-level network-state information, particularly for use in the context of SENSEI.</t>
    </section>
  </back>
</rfc>
