<!DOCTYPE html>
<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>
    </p>
    <div class="moz-text-flowed"
      style="font-family: -moz-fixed; font-size: 14px;" lang="x-unicode"><br>
    </div>
    <div class="moz-text-flowed"
      style="font-family: -moz-fixed; font-size: 14px;" lang="x-unicode">Hello
      Bird Team!
      <br>
      <br>
      My name is Ralph.  I'm a network engineer and C programmer for
      Hurricane Electric.  I am a long time fan of the Bird project! 
      Keep up the great work!!
      <br>
      <br>
      Earlier this year I was tasked with implementing reactive ASPA in
      our network.  My code was based off your older implementation of
      static ASPA tables here:
      <br>
      <br>
      <a class="moz-txt-link-freetext"
        href="https://gitlab.nic.cz/labs/bird/-/tree/aspa">https://gitlab.nic.cz/labs/bird/-/tree/aspa</a>
      <br>
      <br>
      This older implementation is based off of customer-provider pairs:
      <br>
      <br>
      typedef struct net_addr_aspa {
      <br>
        u8 type;
      <br>
        u8 padding;
      <br>
        u16 length;
      <br>
        u32 customer_asn;
      <br>
        u32 provider_asn;
      <br>
      } net_addr_aspa;
      <br>
      <br>
      I've attached the patch as "bird-2.15.1-aspa-asn-pairs.patch".
      <br>
      <br>
      I took a look at 2.16 and ran into 2 problems.  Respectfully, I
      would like to report two issues with the ASPA code in 2.16.
      <br>
      <br>
      Issue #1)  There is no way to tell the difference between a
      transit entry and an "AS0" entry.
      <br>
      <br>
      $ cat bird-aspa.conf
      <br>
      aspa table at;
      <br>
      <br>
      protocol static
      <br>
      {
      <br>
              aspa;
      <br>
              route aspa 12345 transit;
      <br>
              route aspa 970 provider 43, 56;
      <br>
              route aspa 43970 provider 0;
      <br>
      }
      <br>
      <br>
      ---
      <br>
      <br>
      $ ./sbin/birdc
      <br>
      BIRD 2.16 ready.
      <br>
      bird> show route table at all
      <br>
      Table at:
      <br>
      43970                 [static1 19:38:32.125] * (200)
      <br>
              Type: static univ
      <br>
              aspa_providers: 0
      <br>
      970                   [static1 19:38:32.125] * (200)
      <br>
              Type: static univ
      <br>
              aspa_providers: 43 56
      <br>
      12345                 [static1 19:38:32.125] * (200)
      <br>
              Type: static univ
      <br>
              aspa_providers: 0
      <br>
      bird>
      <br>
      <br>
      ---
      <br>
      <br>
      The treatment of AS0 providers is mentioned in section 5 of
      draft-ietf-sidrops-aspa-verification-19.  It is a mechanism for
      people to announce that "no one should announce this AS".  I've
      attached a snapshot of the global ASPA table as
      "bird-aspa-v2.16.conf".  There is one AS0 announcement as of
      today.
      <br>
      <br>
      Issue #2)  Changes in static ASPA tables are not reflected until
      entries are removed and re-added.
      <br>
      <br>
      $ cat bird-aspa.conf
      <br>
      aspa table at;
      <br>
      <br>
      protocol static
      <br>
      {
      <br>
              aspa;
      <br>
              route aspa 12345 transit;
      <br>
              route aspa 970 provider 43, 56;
      <br>
              route aspa 43970 provider 0;
      <br>
      }
      <br>
      <br>
      bird> show route table at all
      <br>
      Table at:
      <br>
      43970                 [static1 19:38:32.125] * (200)
      <br>
              Type: static univ
      <br>
              aspa_providers: 0
      <br>
      970                   [static1 19:38:32.125] * (200)
      <br>
              Type: static univ
      <br>
              aspa_providers: 43 56
      <br>
      12345                 [static1 19:38:32.125] * (200)
      <br>
              Type: static univ
      <br>
              aspa_providers: 0
      <br>
      bird>
      <br>
      <br>
      $ cat bird-aspa.conf
      <br>
      aspa table at;
      <br>
      <br>
      protocol static
      <br>
      {
      <br>
              aspa;
      <br>
              route aspa 12345 transit;
      <br>
              route aspa 970 provider 43, 56, 78;         <---- added
      AS78
      <br>
              route aspa 43970 provider 0;
      <br>
      }
      <br>
      <br>
      $ ./sbin/birdc
      <br>
      BIRD 2.16 ready.
      <br>
      bird> configure
      <br>
      Reading configuration from /home/rpki/bird/etc/bird.conf
      <br>
      Reconfigured
      <br>
      bird> show route table at all
      <br>
      Table at:
      <br>
      43970                 [static1 19:38:32.125] * (200)
      <br>
              Type: static univ
      <br>
              aspa_providers: 0
      <br>
      970                   [static1 19:38:32.125] * (200)
      <br>
              Type: static univ
      <br>
              aspa_providers: 43 56          <-------- changes not
      reflected ***
      <br>
      12345                 [static1 19:38:32.125] * (200)
      <br>
              Type: static univ
      <br>
              aspa_providers: 0
      <br>
      bird>
      <br>
      <br>
      $ cat bird-aspa.conf
      <br>
      aspa table at;
      <br>
      <br>
      protocol static
      <br>
      {
      <br>
              aspa;
      <br>
              route aspa 12345 transit;
      <br>
              #route aspa 970 provider 43, 56, 78;    <----- remove
      entries altogether
      <br>
              route aspa 43970 provider 0;
      <br>
      }
      <br>
      <br>
      $ ./sbin/birdc
      <br>
      BIRD 2.16 ready.
      <br>
      bird> configure
      <br>
      Reading configuration from /home/rpki/bird/etc/bird.conf
      <br>
      Reconfigured
      <br>
      bird> show route table at all
      <br>
      Table at:
      <br>
      43970                 [static1 19:38:32.125] * (200)
      <br>
              Type: static univ
      <br>
              aspa_providers: 0
      <br>
      12345                 [static1 19:38:32.125] * (200)
      <br>
              Type: static univ
      <br>
              aspa_providers: 0
      <br>
      bird>
      <br>
      <br>
      $ cat bird-aspa.conf
      <br>
      aspa table at;
      <br>
      <br>
      protocol static
      <br>
      {
      <br>
              aspa;
      <br>
              route aspa 12345 transit;
      <br>
              route aspa 970 provider 43, 56, 78;     <------- add
      entry again
      <br>
              route aspa 43970 provider 0;
      <br>
      }
      <br>
      <br>
      $ ./sbin/birdc
      <br>
      BIRD 2.16 ready.
      <br>
      bird> configure
      <br>
      Reading configuration from /home/rpki/bird/etc/bird.conf
      <br>
      Reconfigured
      <br>
      bird> show route table at all
      <br>
      Table at:
      <br>
      43970                 [static1 19:38:32.125] * (200)
      <br>
              Type: static univ
      <br>
              aspa_providers: 0
      <br>
      970                   [static1 20:17:30.142] * (200)
      <br>
              Type: static univ
      <br>
              aspa_providers: 43 56 78             <--------- changes
      reflected correctly
      <br>
      12345                 [static1 19:38:32.125] * (200)
      <br>
              Type: static univ
      <br>
              aspa_providers: 0
      <br>
      bird>
      <br>
      <br>
      ---
      <br>
      <br>
      This problem does not occur when the ASPA elements are
      customer-provider pairs.  I believe this is an overall design
      issue, not a simple bug.  I will be bringing this issue up with
      ietf-sidrops.
      <br>
      <br>
      Thanks!
      <br>
    </div>
    <div class="moz-text-flowed"
      style="font-family: -moz-fixed; font-size: 14px;" lang="x-unicode"><br>
    </div>
    <div class="moz-text-flowed"
      style="font-family: -moz-fixed; font-size: 14px;" lang="x-unicode">--</div>
    <div class="moz-text-flowed"
      style="font-family: -moz-fixed; font-size: 14px;" lang="x-unicode"><br>
    </div>
    <div class="moz-text-flowed"
      style="font-family: -moz-fixed; font-size: 14px;" lang="x-unicode">Ralph
      Covelli</div>
    <div class="moz-text-flowed"
      style="font-family: -moz-fixed; font-size: 14px;" lang="x-unicode">Hurricane
      Electric / AS6939</div>
    <div class="moz-text-flowed"
      style="font-family: -moz-fixed; font-size: 14px;" lang="x-unicode">Network
      Engineer<br>
    </div>
  </body>
</html>