<?xml version="1.0"?>
<!--
Copyright (c) 2021 Project CHIP Authors

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
 "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
<node>
  <interface name="io.openthread.BorderRouter">
    <!-- Scan: Perform a Thread network scan.
      @scan_result: array of scan results.

      The result struture definition is:
      <literallayout>
        struct {
          uint64 ext_address
          string network_name
          uint64 ext_panid
          uint8[] steering_data
          uint16 panid
          uint16 joiner_udp_port
          uint8 channel
          uint8 rssi
          uint8 lqi
          uint8 version
          bool is_native
          bool is_joinable
        }
      </literallayout>
    -->
    <method name="Scan">
      <arg name="scan_result" type="a(tstayqqyyyybb)" direction="out"/> 
    </method>

    <!-- Attach: Attach the current device to the Thread network using the current active network dataset. -->
    <method name="Attach" />

    <!-- PermitUnsecureJoin: Allow joining the network via unsecure traffic temporarily.
      @port: The port of the unsecure traffic.
      @timeout: The timeout for the permission.
    -->
    <method name="PermitUnsecureJoin">
      <arg name="port" type="q"/>
      <arg name="timeout" type="u"/>
    </method>

    <!-- JoinerStart: Start Thread joining.
      @pskd: The pre-shared key for the device.
      @provision_url: The url for further provision.
      @vendor vendor_name: The current device vendor name.
      @vendor vendor_model: The current device model.
      @vendor vendor_sw_version: The current device software version.
      @vendor vendor_data: The additional vendor data.
    -->
    <method name="JoinerStart">
      <arg name="pskd" type="s"/>
      <arg name="provision_url" type="s"/>
      <arg name="vendor_name" type="s"/>
      <arg name="vendor_model" type="s"/>
      <arg name="vendor_sw_version" type="s"/>
      <arg name="vendor_data" type="s"/>
    </method>

    <!-- JoinerStop: Stop Thread joining. -->
    <method name="JoinerStop">
    </method>

    <!-- FactoryReset: Perform a factory reset, will wipe all Thread persistent data. -->
    <method name="FactoryReset">
    </method>

    <!-- Reset: Perform a reset, will try to resume the network after reset. -->
    <method name="Reset">
    </method>

    <!-- AddExternalRoute: Add an external border routing rule to the network.
      @prefix: The prefix for border routing.

      This will make the current device act as the border router for the prefix.
      The prefix structure is:
      <literallayout>
        struct {
          struct {
            uint8[] prefix_bytes
            uint8 prefix_length
          }
          uint16 rloc // Not used
          uint8 preference
          bool stable
          bool next_hop_is_self // Not used
        }
      </literallayout>
    -->
    <method name="AddExternalRoute">
      <arg name="prefix" type="((ayy)qybb)"/>
    </method>

    <!-- RemoveExternalRoute: Remove an external border routing rule from the network.
      @prefix: The prefix for border routing.

      The prefix structure is:
      <literallayout>
        struct {
          uint8[] prefix_bytes
          uint8 prefix_length
        }
      </literallayout>
    -->
    <method name="RemoveExternalRoute">
      <arg name="prefix" type="(ayy)"/>
    </method>

    <!-- AddOnMeshPrefix: Add an on-mesh prefix to the network.
      @prefix: The on-mesh prefix.

      The on-mesh prefix structure is:
      <literallayout>
        struct {
          struct {
            uint8[] prefix_bytes
            uint8 prefix_length
          }
          byte preference
          struct {
            boolean preferred
            boolean slaac 
            boolean dhcp 
            boolean configure 
            boolean default_route   
            boolean on_mesh
            boolean stable 
          }
        }
      </literallayout>
    -->
    <method name="AddOnMeshPrefix">
      <arg name="prefix" type="((ayy)y(bbbbbbb))"/>
    </method>
    
    <!-- RemoveOnMeshPrefix: Remove an on-mesh prefix from the network.
      @prefix: The on-mesh prefix.

      The prefix structure is:
      <literallayout>
        struct {
          uint8[] prefix_bytes
          uint8 prefix_length
        }
      </literallayout>
    -->
    <method name="RemoveOnMeshPrefix">
      <arg name="prefix" type="(ayy)"/>
    </method>

    <!-- MeshLocalPrefix: The /64 mesh-local prefix.  -->
    <property name="MeshLocalPrefix" type="ay" access="readwrite">
      <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
    </property>

    <!-- LegacyULAPrefix: The /64 legacy prefix.  -->
    <property name="LegacyULAPrefix" type="ay" access="readwrite">
      <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
    </property>

    <!-- LinkMode: The current link mode.
      <literallayout>
      struct {
        bool rx_on_when_idle    //whether the radio receiving is on when idle
        bool device_type        //ftd or mtd
        bool network_data       //full or stable
      }
      </literallayout>
    -->
    <property name="LinkMode" type="(bbb)" access="readwrite">
      <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
    </property>

    <!-- DeviceRole: The current device role.
      Possible values are:
      <literallayout>
        0: Disabled
        1: Detached
        2: Child
        3: Router
        4: Leader
      </literallayout>
    -->
    <property name="DeviceRole" type="s" access="read">
      <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="true"/>
    </property>

    <!-- NetworkName: The network name. -->
    <property name="NetworkName" type="s" access="read">
      <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
    </property>

    <!-- PanId: The pan ID. -->
    <property name="PanId" type="q" access="read">
      <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
    </property>

    <!-- ExtPanId: The extended pan ID. -->
    <property name="ExtPanId" type="t" access="read">
      <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
    </property>

    <!-- Channel: The current network channel, from 11 to 26 -->
    <property name="Channel" type="q" access="read">
      <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
    </property>

    <!-- CcaFailureRate: The Clear Channel Assessment failure rate. -->
    <property name="CcaFailureRate" type="q" access="read">
      <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
    </property>

    <!-- MacCounters: The mac layer statistic counters.
      The counter structure definition:
      <literallayout>
        struct {
          uint32 tx_total;
          uint32 tx_unicast;
          uint32 tx_broadcast;
          uint32 tx_ack_requested;
          uint32 tx_acked;
          uint32 tx_no_ack_requested;
          uint32 tx_data;
          uint32 tx_data_poll;
          uint32 tx_beacon;
          uint32 tx_beacon_request;
          uint32 tx_other;
          uint32 tx_retry;
          uint32 tx_err_cca;
          uint32 tx_err_abort;
          uint32 tx_busy_channel;
          uint32 rx_total;
          uint32 rx_unicast;
          uint32 rx_broadcast;
          uint32 rx_data;
          uint32 rx_data_poll;
          uint32 rx_beacon;
          uint32 rx_beacon_request;
          uint32 rx_other;
          uint32 rx_address_filtered;
          uint32 rx_dest_address_filtered;
          uint32 rx_duplicated;
          uint32 rx_err_no_frame;
          uint32 rx_err_unknown_neighbor;
          uint32 rx_err_invalid_src_addr;
          uint32 rx_err_sec;
          uint32 rx_err_fcs;
          uint32 rx_err_other;
        }
      </literallayout>
    -->
    <property name="MacCounters" type="(uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu)" access="read">
      <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
    </property>

    <!-- LinkCounters: The link statistic counters.
      The counter structure definition:
      <literallayout>
        struct {
          uint32 ip_tx_success;
          uint32 ip_rx_success;
          uint32 ip_tx_failure;
          uint32 ip_rx_failure;
        }
      </literallayout>
    -->
    <property name="LinkCounters" type="(uuuu)" access="read">
      <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
    </property>

    <!-- LinkSupportedChannelMask: The bitwise link supported channel mask -->
    <property name="LinkSupportedChannelMask" type="u" access="read">
      <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
    </property>

    <!-- Rloc16: The 16-bit routing locator -->
    <property name="Rloc16" type="q" access="read">
      <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
    </property>

    <!-- ExtendedAddress: The 64-bit extended address -->
    <property name="ExtendedAddress" type="t" access="read">
      <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
    </property>

    <!-- RouterID: The current router ID -->
    <property name="RouterID" type="y" access="read">
      <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
    </property>

    <!-- LeaderData: The network leader data.
      The structure definition:
      <literallayout>
        struct {
          uint32_t mPartitionId;       // Partition ID
          uint8_t  mWeighting;         // Leader Weight
          uint8_t  mDataVersion;       // Full Network Data Version
          uint8_t  mStableDataVersion; // Stable Network Data Version
          uint8_t  mLeaderRouterId;    // Leader Router ID
        }
      </literallayout>
    -->
    <property name="LeaderData" type="(uyyyy)" access="read">
      <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
    </property>

    <!-- NetworkData: The network data. -->
    <property name="NetworkData" type="ay" access="read">
      <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
    </property>

    <!-- StableNetworkData: The stable network data. -->
    <property name="StableNetworkData" type="ay" access="read">
      <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
    </property>

    <!-- LocalLeaderWeight: The leader weight of the current node. -->
    <property name="LocalLeaderWeight" type="y" access="read">
      <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
    </property>

    <!-- ChannelMonitorSampleCount: The number of the collected samples from the channel monitor -->
    <property name="ChannelMonitorSampleCount" type="u" access="read">
      <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
    </property>

    <!-- ChannelMonitorChannelQualityMap: The channel monitor statistics data.
      The structure definition:
      <literallayout>
        struct {
          uint8_t  mChannel;
          uint16_t mOccupancy;
        }
      </literallayout>
    -->
    <property name="ChannelMonitorChannelQualityMap" type="a(yq)" access="read">
      <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
    </property>

    <!-- ChildTable: The node's child table as an array of child entry structure.
      The child entry structure definition:
      <literallayout>
        struct {
          uint64_t mExtAddress;         // IEEE 802.15.4 Extended Address
          uint32_t mTimeout;            // Timeout
          uint32_t mAge;                // Time last heard
          uint16_t mRloc16;             // RLOC16
          uint16_t mChildId;            // Child ID
          uint8_t  mNetworkDataVersion; // Network Data Version
          uint8_t  mLinkQualityIn;      // Link Quality In
          int8_t   mAverageRssi;        // Average RSSI
          int8_t   mLastRssi;           // Last observed RSSI
          uint16_t mFrameErrorRate;     // Frame error rate (0xffff->100%). Requires error tracking feature.
          uint16_t mMessageErrorRate;   // (IPv6) msg error rate (0xffff->100%). Requires error tracking feature.
          bool     mRxOnWhenIdle;       // rx-on-when-idle
          bool     mFullThreadDevice;   // Full Thread Device
          bool     mFullNetworkData;    // Full Network Data
          bool     mIsStateRestoring;   // Is in restoring state
        }
      </literallayout>
    -->
    <property name="ChildTable" type="a(tuuqqyyyyqqbbbb)" access="read">
      <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
    </property>

    <!-- NeighborTable: The node's neighbor table as an array of neighbor entry structure.
      The neighbor entry structure definition:
      <literallayout>
        struct {
          uint64_t mExtAddress;        // IEEE 802.15.4 Extended Address
          uint32_t mAge;               // Time last heard
          uint16_t mRloc16;            // RLOC16
          uint32_t mLinkFrameCounter;  // Link Frame Counter
          uint32_t mMleFrameCounter;   // MLE Frame Counter
          uint8_t  mLinkQualityIn;     // Link Quality In
          int8_t   mAverageRssi;       // Average RSSI
          int8_t   mLastRssi;          // Last observed RSSI
          uint16_t mFrameErrorRate;    // Frame error rate (0xffff->100%). Requires error tracking feature.
          uint16_t mMessageErrorRate;  // (IPv6) msg error rate (0xffff->100%). Requires error tracking feature.
          bool     mRxOnWhenIdle;      // rx-on-when-idle
          bool     mFullThreadDevice;  // Full Thread Device
          bool     mFullNetworkData;   // Full Network Data
          bool     mIsChild;           // Is the neighbor a child
        }
      </literallayout>
    -->
    <property name="NeighborTable" type="a(tuquuyyyqqbbbb)" access="read">
      <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
    </property>

    <!-- PartitionId: The network partition ID. -->
    <property name="PartitionId" type="u" access="read">
      <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
    </property>

    <!-- InstantRssi: The RSSI of the last received packet. -->
    <property name="InstantRssi" type="y" access="read">
      <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
    </property>

    <!-- RadioTxPower: The radio transmit power. -->
    <property name="RadioTxPower" type="y" access="read">
      <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
    </property>

    <!-- ExternalRoutes: The list of current external route rules.
      External route rule structure definition:
      <literallayout>
        struct {
          struct {
            uint8[] prefix_bytes
            uint8 prefix_length
          }
          uint16 rloc
          uint8 preference
          bool stable
          bool next_hop_is_self
        }
      </literallayout>
    -->
    <property name="ExternalRoutes" type="a((ayy)qybb)" access="read">
      <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
    </property>

    <!-- ActiveDatasetTlvs: The Thread active dataset tlv in binary form. -->
    <property name="ActiveDatasetTlvs" type="ay" access="readwrite">
      <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
      <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
    </property>

    <!-- RadioRegion: The radio region code in ISO 3166-1. -->
    <property name="RadioRegion" type="s" access="readwrite">
      <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/>
    </property>
  </interface>

  <interface name="org.freedesktop.DBus.Properties">
    <method name="Get">
      <arg name="interface" direction="in" type="s"/>
      <arg name="property" direction="in" type="s"/>
      <arg name="value" direction="out" type="v"/>
    </method>

    <method name="GetAll">
      <arg name="interface" direction="in" type="s"/>
      <arg name="properties" direction="out" type="a{sv}"/>
    </method>

    <method name="Set">
      <arg name="interface" direction="in" type="s"/>
      <arg name="property" direction="in" type="s"/>
      <arg name="value" direction="in" type="v"/>
    </method>

    <signal name="PropertiesChanged">
      <arg type="s" name="interface"/>
      <arg type="a{sv}" name="changed_properties"/>
      <arg type="as" name="invalidated_properties"/>
    </signal>
  </interface>
</node>
