<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [

<!ENTITY RFC2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC6126 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6126.xml">
<!ENTITY RFC6241 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6241.xml">
<!ENTITY RFC7298 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.7298.xml">

]>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>

<?rfc strict="yes" ?>
<!-- give errors regarding ID-nits and DTD validation -->
<!-- control the table of contents (ToC) -->
<?rfc toc="yes"?>
<!-- generate a ToC -->
<?rfc tocdepth="4"?>
<!-- the number of levels of subsections in ToC. default: 3 -->
<!-- control references -->
<?rfc symrefs="yes"?>
<!-- use symbolic references tags, i.e, [RFC2119] instead of [1] -->
<?rfc sortrefs="yes" ?>
<!-- sort the reference entries alphabetically -->
<!-- control vertical white space 
     (using these PIs as follows is recommended by the RFC Editor) -->
<?rfc compact="yes" ?>
<!-- do not start each main section on a new page -->
<?rfc subcompact="no" ?>
<!-- keep one blank line between list items -->
<!-- end of list of popular I-D processing instructions -->
<rfc category="info" docName="draft-stark-babel-information-model-00" ipr="trust200902">
  <!-- category values: std, bcp, info, exp, and historic
     ipr values: full3667, noModification3667, noDerivatives3667
     you can add the attributes updates="NNNN" and obsoletes="NNNN" 
     they will automatically be output with "(if approved)" -->

  <!-- ***** FRONT MATTER ***** -->

  <front>

    <title >Babel Information Model</title>

    <!-- add 'role="editor"' below for the editors if appropriate -->

    <!-- Another author who claims to be an editor -->

    <author fullname="Barbara Stark" initials="B.H." 
            surname="Stark">
      <organization>AT&amp;T</organization>
      <address>
        <postal>
          <street></street>
          <city>Atlanta, GA</city>
          <region></region>
          <code></code>
          <country>US</country>
        </postal>
        <phone></phone>
        <email>barbara.stark@att.com</email>
      </address>
    </author>

    <date year="2016" />

    <!-- Meta-data Declarations -->

    <area>Routing</area>

    <workgroup>Babel routing protocol</workgroup>

    <keyword>Babel</keyword>

    <abstract>
      <t>This Babel Information Model can be used to create data models under various data modeling regimes (e.g., YANG). It allows a Babel implementation (via a management protocol such as netconf) to report on its current state and may allow some limited configuration of protocol constants.</t>
    </abstract>
  </front>

  <middle>
    <section title="Introduction">
      <t>Babel is a loop-avoiding distance-vector routing protocol defined in <xref target="RFC6126">RFC 6126</xref>. Babel Hashed Message Authentication Code (HMAC) Cryptographic Authentication, defined in <xref target="RFC7298">RFC 7298</xref>, describes a cryptographic authentication mechanism for the Babel routing protocol. This document describes an information model for Babel (including HMAC) that can be used to created management protocol data models (such as a netconf <xref target="RFC6241"></xref> YANG data model). Other Babel extensions may be included in this document when they become working group drafts.</t>
      <t>Due to the simplicity of the Babel protocol and the fact that it is designed to be used in non-professionally administered environments (such as home networks), most of the information model is focused on reporting status of the Babel protocol, and very little of that is considered mandatory to implement (conditional on a management protocol with Babel support being implemented). Some parameters may be configurable; however, it is up to the Babel implementation whether to allow any of these to be configured within its implementation. Where the implementation does not allow configuration of these parameters, it may still choose to expose them as read-only.</t>

      <section title="Requirements Language">
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
        "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
        document are to be interpreted as described in <xref
        target="RFC2119">RFC 2119</xref>.</t>
      </section>

      <section title="Notation">
        <t>This document uses a programming language-like notation to define the
   properties of the objects of the information model. An optional
   property is enclosed by square brackets, [ ], and a list property is
   indicated by two numbers in angle brackets, &lt;m..n&gt;, where m indicates
   the minimal number of values, and n is the maximum.  The symbol * for
   n means no upper bound.</t>
      </section>

    </section>

    <section title="The Information Model">

      <section title="Definition of babel-information">

      <figure align="left">
      <artwork align="left"><![CDATA[
     object {
          int                   babel-version;
          int                   babel-self-router-id;
         [int                   babel-self-seqno;]
          string                babel-cost-comp-algorithms<1..*>;
          babel-constants-obj   babel-constants;
          babel-interfaces-obj  babel-interfaces<1..*>;
          babel-sources-obj     babel-sources<1..*>;
          babel-routes-obj      babel-routes<1..*>;
      }babel-information-obj;
            ]]></artwork></figure>

      <t><list>
        <t>babel-version: the version of this implementation of the Babel protocol</t>
        <t>babel-self-router-id: the router-id used by this instance of the Babel protocol to identify itself</t>
        <t>babel-self-seqno: the current sequence number included in route updates for routes originated by this node</t>
        <t>babel-cost-comp-algorithm: a set of names of supported cost computation algorithms; possible values include "k-out-of-j", "ETX"</t>
        <t>babel-constants: a babel-constants object</t>
        <t>babel-interfaces: a set of babel-interface objects</t>
        <t>babel-sources: a set of babel-source objects</t>
        <t>babel-routes: a set of babel-route objects</t>
      </list></t>
      </section>

      <section title="Definition of babel-constants">

        <figure align="left">
        <artwork align="left"><![CDATA[
     object {
          int          babel-udp-port;
         [int          babel-hello-interval-lossy;]
         [int          babel-hello-interval-lossless;]
         [int          babel-ihu-interval;]
         [int          babel-update-interval;]
         [int          babel-ihu-hold-time;]
         [int          babel-route-expiry-time;]
         [int          babel-garbage-collection-time;]
         [int          babel-max-trigger-delay;]
         [int          babel-max-normal-delay;]
         [int          babel-ack-limit;]
         [int          babel-resend-trigger-lossy-limit;]
         [int          babel-resend-trigger-lossless-limit;]        
         [int          babel-resend-normal-lossy-limit;]
         [int          babel-resend-normal-lossless-limit;]        
      }babel-constants-obj;
            ]]></artwork></figure>

      <t><list>
        <t>babel-udp-port: UDP port for sending and listening for Babel messages; MAY be configurable</t>
        <t>babel-hello-interval-lossy: Hello Interval default for lossy links in milliseconds; MAY be configurable</t>
        <t>babel-hello-interval-lossless: Hello Interval default for lossless links in milliseconds; MAY be configurable</t>
        <t>babel-ihu-interval: IHU Interval default as multiples of Hello interval</t>
        <t>babel-update-interval: Update Interval default as multiples of Hello interval</t>
        <t>babel-ihu-hold-time: IHU Hold Time default as multiples of Hello interval</t>
        <t>babel-route-expiry-time: IHU Interval default as multiples of Hello interval</t>
        <t>babel-garbage-collection-time: Garbage Collection time default as multiples of Update interval</t>
        <t>babel-max-trigger-delay: Maximum delay to wait before sending a triggered update in milliseconds</t>
        <t>babel-max-normal-delay: Maximum delay to wait before sending a non-triggered message in milliseconds</t>
        <t>babel-ack-limit: Threshold for requesting acknowledgements on an interface (do not request acknowledgements if there are more than this many neighbors on the interface); MAY be configurable</t>
        <t>babel-resend-trigger-lossy-limit: Resend limit of triggered updates on lossy links (can this be the same, whether or not acknowledgements are requested?)</t>
        <t>babel-resend-trigger-lossless-limit: Resend limit of triggered updates on lossless links (can this be the same, whether or not acknowledgements are requested?)</t>
        <t>babel-resend-normal-lossy-limit: Resend limit of normal messages on lossy links</t>
        <t>babel-resend-normal-lossless-limit: Resend limit of normal messages on lossless links</t>
      </list></t>

      </section>

      <section title="Definition of babel-interfaces">

        <figure align="left">
        <artwork align="left"><![CDATA[
     object {
          uri                  babel-interface-reference;
         [int                  babel-interface-seqno;]
         [int                  babel-interface-hello-interval;]
         [int                  babel-interface-update-interval;]
          boolean              babel-request-trigger-ack;
          boolean              babel-lossy-link;
         [int                  babel-external-cost;]
          babel-neighbors-obj  babel-neighbors<1..*>;
         [babel-csa-obj        babel-csa<1..*>;]
      }babel-interfaces-obj;
            ]]></artwork></figure>

      <t><list>
        <t>babel-interface-reference: reference to an interface object as defined by the data model</t>
        <t>babel-interface-seqno: the current sequence number in use for this interface</t>
        <t>babel-interface-hello-interval: the current hello interval in use for this interface</t>
        <t>babel-interface-update-interval: the current update interval in use for this interface</t>
        <t>babel-request-trigger-ack: requests acknowledgement of triggered updates (if number of neighbors less than babel-ack-limit); MAY be configurable</t>
        <t>babel-lossy-link: indicates (if true) that the link of this interface is considered lossy; MAY be configurable</t>
        <t>babel-external-cost: external input to cost of link of this interface (need to determine how to express this);MUST be configurable if implemented</t>
      </list></t>
      </section>

      <section title="Definition of babel-neighbors">

        <figure align="left">
        <artwork align="left"><![CDATA[
     object {
          some address format  babel-neighbor-address;
          string               babel-hello-history;
          int                  babel-txcost;
          int                  babel-hello-seqno;
          int                  babel-neighbor-ihu-interval;
         [int                  babel-neighbor-router-id;]
         [int                  babel-rxcost]
      }babel-neighbors-obj;
            ]]></artwork></figure>

      <t><list>
        <t>babel-neighbor-address: (IPv4 or v6) address the neighbor sends messages from</t>
        <t>babel-hello-history: the Hello history (do we want a human readable format?)</t>
        <t>babel-txcost: transmission cost value from the last IHU packet received from this neighbor, or FFFF hexadecimal (infinity) if the IHU hold timer for this neighbor has expired</t>
        <t>babel-hello-seqno: expected Hello sequence number</t>
        <t>babel-neighbor-ihu-interval: current IHU interval for this neighbor</t>
        <t>babel-router-id: router-id of the neighbor</t>
        <t>babel-rxcost: reception cost calculated for this neighbor</t>
      </list></t>

      </section>


      <section title="Definition of babel-csa">

        <figure align="left">
        <artwork align="left"><![CDATA[
     object {
          string               placeholder;
    }babel-csa-obj;
            ]]></artwork></figure>

      <t><list>
        <t>placeholder: this section to be filled in, in the future</t>
      </list></t>

      </section>

      <section title="Definition of babel-sources">

        <figure align="left">
        <artwork align="left"><![CDATA[
     object {
          (prefix, plen)       babel-source-prefix;
          int                  babel-source-router-id;
          int                  babel-source-seqno;
          int                  babel-source-metric;
         [int                  babel-source-garbage-collection-time;]
      }babel-sources-obj;
            ]]></artwork></figure>

      <t><list>
        <t>babel-source-prefix: Prefix (with prefix length)</t>
        <t>babel-source-router-id: router-id of the router originating this prefix</t>
        <t>babel-source-seqno: last sequence number used by this source</t>
        <t>babel-source-metric: this source's feasibility distance</t>
        <t>babel-source-garbage-collection-time: garbage-collection timer for this source</t>
      </list></t>
	
      </section>

      <section title="Definition of babel-routes">

        <figure align="left">
        <artwork align="left"><![CDATA[
     object {
          (prefix, plen)       babel-route-prefix;
          int                  babel-route-router-id;
          int                  babel-route-neighbor;
          int                  babel-route-metric;
          int                  babel-route-seqno;
          ip address           babel-route-next-hop;
          boolean              babel-route-selected;
      }babel-routes-obj;
            ]]></artwork></figure>

      <t><list>
        <t>babel-route-prefix: Prefix (with prefix length) for which this route is advertised</t>
        <t>babel-route-router-id: router-id of the router originating this prefix</t>
        <t>babel-route-neighbor: neighbor that advertised this route (is this a router-id ?)</t>
        <t>babel-route-metric: the metric with which this route was advertised by the neighbor, or FFFF hexadecimal (infinity) for a recently retracted route</t>
        <t>babel-route-seqno: the sequence number with which this route was advertised</t>
        <t>babel-route-next-hop: the next-hop address of this route</t>
        <t>babel-route-selected: a boolean flag indicating whether this route is selected, i.e., whether it is currently being used for forwarding and is being advertised</t>
      </list></t>

      </section>

    </section>

  </middle>

  <!--  *****BACK MATTER ***** -->

  <back>

    <references title="Normative References">
      &RFC2119;
    </references>

    <references title="Informative References">
      &RFC6126;
      &RFC6241;
      &RFC7298;
    </references>

    <!-- Change Log

v00 2016-07-07  EBD   Initial version

      -->
  </back>
</rfc>
