Skip to main content

Network-Hexagons: H3-LISP Based Mobility Network
draft-barkai-lisp-nexagon-08

The information below is for an old version of the document.
Document Type
This is an older version of an Internet-Draft whose latest revision state is "Replaced".
Authors Sharon Barkai , Bruno Fernandez-Ruiz , Sharon Barkai , Alberto Rodriguez-Natal , Fabio Maino , Albert Cabellos-Aparicio , Dino Farinacci
Last updated 2019-09-10 (Latest revision 2019-09-07)
Replaced by draft-ietf-lisp-nexagon, draft-ietf-lisp-nexagon, draft-ietf-lisp-nexagon, draft-ietf-lisp-nexagon, draft-ietf-lisp-nexagon, draft-ietf-lisp-nexagon, draft-ietf-lisp-nexagon, draft-ietf-lisp-nexagon, draft-ietf-lisp-nexagon
RFC stream (None)
Formats
Additional resources
Stream Stream state (No stream defined)
Consensus boilerplate Unknown
RFC Editor Note (None)
IESG IESG state I-D Exists
Telechat date (None)
Responsible AD (None)
Send notices to (None)
draft-barkai-lisp-nexagon-08
Network Working Group                                        A. Melnikov
Request for Comments: 5490                                 Isode Limited
Category: Standards Track                                     March 2009

                 The Sieve Mail-Filtering Language --
Extensions for Checking Mailbox Status and Accessing Mailbox Metadata

Status of This Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.

Copyright Notice

   Copyright (c) 2009 IETF Trust and the persons identified as the
   document authors.  All rights reserved.

   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents in effect on the date of
   publication of this document (http://trustee.ietf.org/license-info).
   Please review these documents carefully, as they describe your rights
   and restrictions with respect to this document.

   This document may contain material from IETF Documents or IETF
   Contributions published or made publicly available before November
   10, 2008.  The person(s) controlling the copyright in some of this
   material may not have granted the IETF Trust the right to allow
   modifications of such material outside the IETF Standards Process.
   Without obtaining an adequate license from the person(s) controlling
   the copyright in such materials, this document may not be modified
   outside the IETF Standards Process, and derivative works of it may
   not be created outside the IETF Standards Process, except to format
   it for publication as an RFC or to translate it into languages other
   than English.

Abstract

   This memo defines an extension to the Sieve mail filtering language
   (RFC 5228) for accessing mailbox and server annotations, checking for
   mailbox existence, and controlling mailbox creation on "fileinto"
   action.

Melnikov                    Standards Track                     [Page 1]
RFC 5490                     Sieve METADATA                   March 2009

Table of Contents

   1. Introduction ....................................................2
   2. Conventions Used in This Document ...............................2
   3. "mailbox" and "mboxmetadata" Extensions .........................2
      3.1. Test "mailboxexists" .......................................2
      3.2. ":create" Argument to "fileinto" Command ...................3
      3.3. Test "metadata" ............................................4
      3.4. Test "metadataexists" ......................................4
   4. "servermetadata" Extension ......................................5
      4.1. Test "servermetadata" ......................................5
      4.2. Test "servermetadataexists" ................................6
   5. Security Considerations .........................................6
   6. IANA Considerations .............................................7
   7. Acknowledgements ................................................7
   8. References ......................................................8
      8.1. Normative References .......................................8
      8.2. Informative References .....................................8

1.  Introduction

   This memo defines an extension to the Sieve mail filtering language
   [SIEVE] for accessing mailbox and server annotations.  This allows
   for customization of the Sieve engine behaviour based on variables
   set using [METADATA].

   This document also defines an extension for checking for mailbox
   existence and for controlling mailbox creation on "fileinto" action.

2.  Conventions Used in This Document

   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 [KEYWORDS].

   Conventions for notations are as in [SIEVE] Section 1.1, including
   the use of [ABNF].

   This document is written with an assumption that readers are familiar
   with the data model and terms defined in Section 3 of [METADATA].

3.  "mailbox" and "mboxmetadata" Extensions

3.1.  Test "mailboxexists"

   Usage:  mailboxexists <mailbox-names: string-list>

Melnikov                    Standards Track                     [Page 2]
RFC 5490                     Sieve METADATA                   March 2009

   The "mailboxexists" test is true if all mailboxes listed in the
   "mailbox-names" argument exist in the mailstore, and each allows the
   user in whose context the Sieve script runs to "deliver" messages
   into it.  When the mailstore is an IMAP server, "delivery" of
   messages is possible if:

   a.  the READ-WRITE response code is present for the mailbox (see
       Section 7.1 of [IMAP]), if IMAP Access Control List (ACL)
       [IMAPACL] is not supported by the server, or

   b.  the user has 'p' or 'i' rights for the mailbox (see Section 5.2
       of [IMAPACL]).

   Note that a successful "mailboxexists" test for a mailbox doesn't
   necessarily mean that a "fileinto" action on this mailbox would
   succeed.  For example, the "fileinto" action might put user over
   quota.  The "mailboxexists" only verifies existence of the mailbox
   and whether the user in whose context the Sieve script runs has
   permissions to execute "fileinto" on it.

   The capability string for use with the require command is "mailbox".

   Example: The following example assumes that the Sieve engine also
   supports "reject" [REJECT] and "fileinto" [SIEVE].  However, these
   extensions are not required in order to implement the "mailbox"
   extension.

        require ["fileinto", "reject", "mailbox"];
        if mailboxexists "Partners" {
           fileinto "Partners";
        } else {
           reject "This message was not accepted by the Mailstore";
        }

3.2.  ":create" Argument to "fileinto" Command

   Usage:  fileinto [:create] <mailbox: string>

   If the optional ":create" argument is specified with "fileinto", it
   instructs the Sieve interpreter to create the specified mailbox, if
   needed, before attempting to deliver the message into the specified
   mailbox.  If the mailbox already exists, this argument is ignored.
   Failure to create the specified mailbox is considered to be an error.

   The capability string for use with the ":create" parameter is
   "mailbox".

Melnikov                    Standards Track                     [Page 3]
RFC 5490                     Sieve METADATA                   March 2009

3.3.  Test "metadata"

   Usage:  metadata [MATCH-TYPE] [COMPARATOR]
           <mailbox: string>
           <annotation-name: string> <key-list: string-list>

   This test retrieves the value of the mailbox annotation "annotation-
   name" for the mailbox "mailbox" [METADATA].  The retrieved value is
   compared to the "key-list".  The test returns true if the annotation
   exists and its value matches any of the keys.

   The default match type is ":is" [SIEVE].  The default comparator is
   "i;ascii-casemap" [SIEVE].

   The capability string for use with the require command is
   "mboxmetadata".

   Annotations MUST be accessed with the permissions of the user in
   whose context the Sieve script runs, and annotations starting with
   the "/private" prefix MUST be those of the user in whose context the
   Sieve script runs.

   Example: The following example assumes that the Sieve engine also
   supports the "vacation" [VACATION] extension.  However, this
   extension is not required in order to implement the "mboxmetadata"
   extension.

       require ["mboxmetadata", "vacation"];

       if metadata :is "INBOX"
          "/private/vendor/vendor.isode/auto-replies" "on" {

           vacation text:
       I'm away on holidays till March 2009.
       Expect a delay.
       .
       }

3.4.  Test "metadataexists"

   Usage:  metadataexists <mailbox: string> <annotation-names: string-
           list>

   The "metadataexists" test is true if all of the annotations listed in
   the "annotation-names" argument exist (i.e., have non-NIL values) for
   the specified mailbox.

Melnikov                    Standards Track                     [Page 4]
RFC 5490                     Sieve METADATA                   March 2009

   The capability string for use with the require command is
   "mboxmetadata".

4.  "servermetadata" Extension

4.1.  Test "servermetadata"

   Usage:  servermetadata [MATCH-TYPE] [COMPARATOR]
           <annotation-name: string> <key-list: string-list>

   This test retrieves the value of the server annotation "annotation-
   name" [METADATA].  The retrieved value is compared to the "key-list".
   The test returns true if the annotation exists and its value matches
   any of the keys.

   The default match type is ":is".  The default comparator is "i;ascii-
   casemap".

   The capability string for use with the require command is
   "servermetadata".

   Annotations MUST be accessed with the permissions of the user in
   whose context the Sieve script runs, and annotations starting with
   the "/private" prefix MUST be those of the user in whose context the
   Sieve script runs.

   Example: The following example assumes that the Sieve engine also
   supports "variables" [VARIABLES], "enotify" [NOTIFY], and "envelope"
   [SIEVE] extensions.  However, these extensions are not required in
   order to implement the "servermetadata" extension.

       require ["enotify", "servermetadata", "variables", "envelope"];

       if servermetadata :matches
          "/private/vendor/vendor.isode/notification-uri" "*" {
           set "notif_uri" "${0}";
       }

       if not string :is "${notif_uri}" "none" {
           # :matches is used to get the MAIL FROM address
           if envelope :all :matches "from" "*" {
               set "env_from" " [really: ${1}]";
           }

           # :matches is used to get the value of the Subject header
           if header :matches "Subject" "*" {
               set "subject" "${1}";
           }

Melnikov                    Standards Track                     [Page 5]
RFC 5490                     Sieve METADATA                   March 2009

           # :matches is used to get the address from the From header
           if address :matches :all "from" "*" {
               set "from_addr" "${1}";
           }

           notify :message "${from_addr}${env_from}: ${subject}"
                  "${notif_uri}";
       }

4.2.  Test "servermetadataexists"

   Usage:  servermetadataexists
           <annotation-names: string-list>

   The "servermetadataexists" test is true if all of the server
   annotations listed in the "annotation-names" argument exist (i.e.,
   have non-NIL values).

   The capability string for use with the require command is
   "servermetadata".

5.  Security Considerations

   Extensions defined in this document deliberately don't provide a way
   to modify annotations.

   A failure to retrieve data due to the server storing the annotations
   being down or otherwise inaccessible may alter the result of Sieve
   processing.  So implementations SHOULD treat a temporary failure to
   retrieve annotations in the same manner as a temporary failure to
   retrieve a Sieve script.  For example, if the Sieve script is stored
   in the Lightweight Directory Access Protocol (LDAP) and the script
   can't be retrieved when a message is processed, then the agent
   performing Sieve processing can, for example, assume that the script
   doesn't exist or delay message delivery until the script can be
   retrieved successfully.  Annotations should be treated as if they are
   a part of the script itself, so a temporary failure to retrieve them
   should be handled in the same way as a temporary failure to retrieve
   the Sieve script itself.

   Protocols/APIs used to retrieve annotations MUST provide at least the
   same level of confidentiality as protocols/APIs used to retrieve
   Sieve scripts.  For example, if Sieve scripts are retrieved using
   LDAP secured with Transport Layer Security (TLS) encryption, then the
   protocol used to retrieve annotations must use a comparable mechanism
   for providing connection confidentiality.  In particular, the
   protocol used to retrieve annotations must not be lacking encryption.

Melnikov                    Standards Track                     [Page 6]
RFC 5490                     Sieve METADATA                   March 2009

6.  IANA Considerations

   IANA has added the following registrations to the list of Sieve
   extensions:

     To: iana@iana.org
     Subject: Registration of new Sieve extension
     Capability name: mailbox
     Description: adds test for checking for mailbox existence and a new
                  optional argument to fileinto for creating a mailbox
                  before attempting mail delivery.
     RFC number: this RFC
     Contact address:
         The Sieve discussion list &<----------------------|
          |                 |                |  ACA(AVP ClientEID)   |
          | ACA (Client::EID,EdgeRTR::RLOC)  |                       |
          |<---------------------------------|                       |
          |                 |                |                       |
          | Publish to H3ServiceEID / Subscribe MLDv2 H3ServiceEID   |
          |--------------------------------------------------------->|
          |<---------------------------------------------------------|
          |            multicast Updates from H3ServiceEIDs          |
          |                 |                |                       |
          |             ACR (Interim)        |                       |
          |--------------------------------->|   ACR (Interim)       |
          |                 |                |---------------------->|
          |                 |                |<----------------------|
          |                 |                |   ACA (Interim)       |
          |<---------------------------------|                       |
          |              ACA (Interim)       |                       |

   Using this network-login / re-login method we ensure that:
   - the MobilityClientEIDs serve as credentials with the specific EdgeRTRs
   - EdgeRTRs are not tightly coupled to H3.r9 areas for privacy/load-balance
   - Mobility Clients do not need to update EdgeRTRs while roaming in a metro

   The same EdgeRTR may serve several H3.r9 areas for smooth ride continuity,
   and, several EdgeRTRs may load balance a H3.r9 area with high density of
   originating MobilityClient rides. When a MobilityClient ClientXTR is homed
   to EdgeRTR it is able to communicate with H3ServiceEIDs.

5. Mobility Clients-Network-Services

  The mobility network functions as a standard LISP VPN overlay.
  The overlay delivers unicast and multicast packets across:
   - multiple access-network-providers / radio-access-technologies.
   - multiple cloud-edge hosting providers, public, private, hybrid.

  We use data-plane XTRs in the stack of each mobility client and server.
  ClientXTRs and ServerXTRs are homed to one or more EdgeRTRs at the LISP edge.
  This structure allows for MobilityClients to "show-up" at any time,
  behind any network-provider in a given mobility network administrative
  domain (metro), and for any H3ServiceEID to be instantiated, moved, or
  failed-over to - any rack in any cloud-provider. The LISP overlay enables
  these roaming mobility network elements to communicate un-interrupted.
  This quality is insured by the LISP RFCs. The determinism of identities for
  MobilityClients to always refer to the correct H3ServiceEID is insured by H3
  geospatial HIDs.

  There are two options for how we associate ClientXTRs with LISP EdgeRTRs:

  I. Semi-random load-balancing by DNS/AAA

  In this option we assume that in a given metro edge a pool of EdgeRTRs can
  distribute the Mobility Clients load randomly between them and that EdgeRTRs
  are topologically more or less equivalent. Each RTR uses LISP to tunnel
  traffic to and from other EdgeRTRs for MobilityClient with H3Service exchanges.
  MobilityClients can (multi) home to EdgeRTRsRTRs throughout while moving.

  II. Topological by any-cast

  In this option we align an EdgeRTR with topological aggregation like in the
  Evolved Packet Core (EPC) solution. Mobility Clients currently roaming in an
  area home to that RTR and so is the H3 Server. There is only one hop across
  the edge overlay between clients and servers and mcast replication is more
  focused, but clients need to keep re-homing as they move.

  To summarize the H3LISP mobility network layout:

   (1) Mobility-Clients traffic is tunneled via data-plane ClientXTRs
       ClientXTRs are (multi) homed to EdgeRTR(s)
   (2) H3ServiceEID traffic is tunneled via data-plane ServerXTR
       ServerXTRs are (multi) homed to EdgeRTR(s)
   (3) EdgeRTRs use mapping service to resolve Ucast HIDs to RTR RLOCs
       EdgeRTRs also register to (Source, Group) H3ServiceEID multicasts

       MobilityClients <> ClientXTR <Access Provider > EdgeRTR  v
                                                                v
       v      << Map-Assisted Mobility-Network Overlay <<       v
       v
       >> EdgeRTR <Cloud Provider> ServerXTR <> H3ServiceEID

6. Mobility Unicast and Multicast

  Which ever way a ClientXTR is homed to an Edge RTR an authenticated
  MobilityClient EID can send: [64bitH3.15ID :: 64bitState] annotation to the
  H3.r9 H3ServiceEID. The H3.r9 IP HID can be calculated by clients
  algorithmically form the H3.15 localized snapped-to-tile annotation.

  The ClientXTR encapsulates MobilityClient EID and H3ServiceEID in a packet
  sourced from the ClientXTR, destined to the EdgeRTR RLOC IP, Lisp port.
  EdgeRTRs then re-encapsulate annotation packets either to remote EdgeRTR
  (optionI) or to homed H3ServiceEID ServerXTR (option2).
  The remote EdgeRTR aggregating H3ServiceEIDs re-encapsulates MobilityClient
  EID to ServerXTR and from there to the H3ServiceEID.

    0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ \
|Version| Traffic Class |           Flow Label                  |  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  |
|         Payload Length        |  Next Header  |   Hop Limit   |  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  |
|                                                               |  |
+                                                               +  |
|                                                               |  |
+                    Source MobilityClientEID                   +  |
|                                                               | IPv6
+                                                               +  |
|                                                               |  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  |
|                                                               |  |
+                                                               +  |
|                                                               |  |
+                       Dest H3ServiceEID                       +  |
|                                                               |  |
+                                                               +  |
|                                                               | /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       Source Port = xxxx      |       Dest Port = xxxx        | \
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ UDP
|           UDP Length          |        UDP Checksum           | /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ \
|  Type         |gzip |        Reserved         | Pair Count = X| Nexgon Header
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ /
|                                                               |
+                       64 Bit H3-R15 ID                        +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                       64 Bit State                            +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                       64 Bit H3-R15 ID                        +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                       64 Bit State                            +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

  To Summarize Unicast:

   (1) MobilityClients can send annotation state localized an H3.r15 tile
       These annotations are sent to an H3.r9 mobility H3ServiceEIDs
   (2) MobilityClient EID and H3ServiceEID HID are encapsulated:
         XTR <> RTR <> RTR <> XTR
       * RTRs can map-resolve re-tunnel HIDs
   (3) RTRs re-encapsulate original source-dest to ServerXTRs
       ServerXTRs decapsulate packets to H3ServiceEID

  Each H3.r9 Server is used by clients to update H3.r15 tile state is also an IP
  Multicast channel Source used to update subscribers on the aggregate state of
  the H3.r15 tiles in the H3.r9 Server.

  We use rfc8378 signal free multicast to implement mcast channels in the
  overlay. The mobility network has many channels and relatively few
  subscribers per each. MobilityClients driving through or subscribing to a
  a H3.r9 area can explicitly issue an rfc4604 MLDv2 in-order to subscribe, or,
  may be subscribed implicitly by the EdgeRTR gleaning to ucast HID dest.

  The advantage of explicit client MLDv2 registration trigger to rfc8378 is
  that the clients manage their own mobility mcast hand-over according to their
  location-direction moment vectors, and that it allows for otherwise silent, or,
  non annotating clients. The advantage of EdgeRTR implicit registration is
  less signaling required.

  MLDv2 signaling messages are encapsulated between the ClientXTR and the LISP
  EdgeRTR, therefore there is no requirement for the underlying network to
  support native multicast. If native access multicast is supported (for example
  native 5G multicast), then MobilityClient registration to H3ServiceEID
  safety channels may be integrated to it, in which case the evolved-packet-core
  (EPC) element supporting it (eNB) will use this standard to register with the
  appropriate H3.r9 channels in its area.

  Multicast update packets are of the following structure:

    0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ \
|Version| Traffic Class |           Flow Label                  |  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  |
|         Payload Length        |  Next Header  |   Hop Limit   |  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  |
|                                                               |  |
+                                                               +  |
|                                                               |  |
+                       Source H3-R9 EID Address                +  |
|                                                               | IPv6
+                                                               +  |
|                                                               |  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  |
|                                                               |  |
+                                                               +  |
|                                                               |  |
+                          Group Address                        +  |
|                                                               |  |
+                                                               +  |
|                                                               | /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       Source Port = xxxx      |       Dest Port = xxxx        | \
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ UDP
|           UDP Length          |        UDP Checksum           | /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ \
|                                                               | Nexagons Header
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ /
~                            Nexagons Payload                   ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Outer headers = 40 (IPv6) + 8 (UDP) + 8 (LISP) = 56
Inner headers = 40 (IPv6) + 8 (UDP) + 4 (Nexagon Header) = 52

1500 (MTU) - 56 - 52 = 1392 bytes of effective payload

Type 1:key-value, key-value.. 1392 / (8 + 8) = 87 pairs
Type 2:value, key,key,key.. (1392 - 8) / 8 = 173 H3-R15 IDs

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ \
|  Type =   1   |gzip |        Reserved         | Pair Count = X| Nexagon Header
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ /
|                                                               |
+                       64 Bit H3-R15 ID                        +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                       64 Bit State                            +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                       64 Bit H3-R15 ID                        +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                       64 Bit State                            +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ \
|  Type =   2   |gzip |     Reserved            |H3R15 Count = X| Nexagon Header
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ /
|                                                               |
+                       64 Bit State                            +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                       64 Bit H3-R15 ID                        +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                       64 Bit H3-R15 ID                        +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                       64 Bit H3-R15 ID                        +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

` The remote EdgeRTRs homing MobilityClients in-turn replicate the packet to the
  MobilityClients registered with them.

  We expect an average of 600 H3.r15 tiles of the full 7^6 (~100K) possible in
  H3.r9 to be part of any road. The H3.r9 server can transmit the status of all
  600 or just those with meaningful state based on update SLA and policy.

  To Summarize:

   (1) H3LISP Clients tune to H3.r9 mobility updates using rfc8378
       H3LISP Client issue MLDv2 registration to H3.r9 HIDs
       ClientXTRs encapsulate MLDv2 to EdgeRTRs who register (s,g)

   (2) ServerXTRs encapsulate updates to EdgeRTRs who map-resolve (s,g) RLOCs
       EdgeRTRs replicate mobility update and tunnel to registered EdgeRTRs
       Remote EdgeRTRs replicate updates to registered ClientXTRs

7.  Security Considerations

  The nexagon layer3 v2v/v2i/c&c network is inherently more secure and private
  then alternatives because of the indirection. No car or infrastructure element
  ever communicates directly with MobilityClients. All information is conveyed
  using shared / addressable geo-state. MobilityClients are supposed to receive
  information only from the network as a trusted broker without indication as
  to the origin of the information. This is an important step towards better
  privacy, security, extendability, and interoperability.

  In order to be able to use the nexagon mobility network for a given period,
  the mobility clients go through a DNS/AAA stage by which they obtain their
  clientEID identifiers-credentials and the RLOCs of EdgeRTRs they may use as
  gateways to the network. This MobilityClient <> EdgeRTR is the most sensitive
  interface in the network as far as privacy-security.

  The traffic on the MobilityClient<>EdgeRTR interface is tunneled  and its UDP
  content may be encrypted, still, the EdgeRTR will know based on the LISP
  headers alone the MobilityClient RLOC and H3-R9 (~0.1sqkm) geo-spatial area
  a given client publishes in or subscribes to.

  For this reason we envision the ability of enterprise or groups of users to
  "bring their own" EdgeRTRs. BYO-RTR masks individual clients' IP-RLOC to
  H3-R9 association and is pre-provisioned to be able to use the mapping system
  and be on a white-list of EdgeRTRs aggregating H3ServiceEIDs.

  Beyond this sensitive hop, the mapping system does not hold MobilityClientEIDs
  and remote EdgeRTRs are only aware of MobilityClient ephemeral EIDs not their
  actual IP RLOC or any other mobile-device identifiers. EdgeRTRs register in the
  mapping (s,g) H3-R9 multicast groups, but which clients reside beyond which
  EdgeRTR is not in the mapping system. The H3ServiceEIDs them selves of-course
  decrypt and parse actual H3-R15 annotations, they also consider during this the
  MobilityClientEID credentials to avoid "fake-news", but again these are only
  temporary EIDs allocated to clients in-order to be able to use the mobility
  network and not for their basic communications.

8.  Acknowledgments

   This work is partly funded by the ANR LISP-Lab project #ANR-
   13-INFR-009 (https://lisplab.lip6.fr).

9.  IANA Considerations

I. Formal H3 to IPv6 EID mapping

II. State enum fields of H3 tiles:

Field 0x State Freshness {
 0x: less than 1Sec
 1x: less than 10Sec
 2x: less than 20Sec
 3x: less than 40Sec
 4x: less than 1min
 5x: less than 2min
 6x: less than 5min
 7x: less than 15min
 8x: less than 30min
 9x: less than 1hour
 Ax: less than 2hours
 Bx: less than 8hours
 Cx: less than 24hours
 Dx: less than 1week
 Ex: less than 1month
 Fx: more than 1month
}

field 1x: Persistent or Structural {
 0x - null
 1x - pothole
 2x - speed-bump low
 3x - speed-bump high
 4x - icy
 5x - flooded
 6x - snow-cover
 7x - snow-deep
 8x - construction cone
 9x - gravel
}

field 2x: Transient Obstruction {
 0x - null
 1x - pedestrian
 2x - bike
 3x - stopped car / truck
 4x - moving car / truck
 5x - first responder vehicle
 6x - sudden slowdown
 7x - oversized-vehicle
 8x - red-light-breach
 9x - light collision (fender bender)
 Ax - hard collision
 Bx - collision with casualty
 Cx - recent collision residues
 Dx - hard brake
 Ex - sharp cornering
}

field 3x: Traffic-light Cycle {
 0x - green now
 1x - 1 seconds to green
 2x - 2 seconds to green
 3x - 3 seconds to green
 4x - 4 seconds to green
 5x - 5 seconds to green
 6x - 6 seconds to green
 7x - 7 seconds to green
 8x - 8 seconds to green
 9x - 9 seconds to green
 Ax - 10 seconds or less
 Bx - 20 seconds or less
 Cx - 30 seconds or less
 Dx - 40 seconds or less
 Ex - 50 seconds or less
 Fx - red now
}

field 4x: impacted tile from neighboring {
 0x - not impacted
 1x - epicenter
 2x - light yellow
 3x - yellow
 4x - light orange
 5x - orange
 6x - light red
 7x - red
 8x - light blue
 9x - blue
}

field 5x: LaneRightsSigns {
 0x - stop
 1x - yield
 2x - speedLimit
 3x - straightOnly
 4x - noStraight
 5x - rightOnly
 6x - noRight
 7x - leftOnly
 8x - noLeft
 9x - noUTurn
 Ax - noLeftU
 Bx - bikeLane
 Cx - HOVLane
}

field 6x: MovementSigns {
0x - noPass
1x - keepRight
2x - keepLeft
3x - stayInLane
4x - doNotEnter
5x - noTrucks
6x - noBikes
7x - noPeds
8x - oneWay
9x - parking
Ax - noParking
Bx - noStandaing
Cx - loadingZone
Dx - truckRoute
Ex - railCross
Fx - School
}

field 7x: CurvesIntersectSigns {
0x - turnsLeft
1x - turnsRight
2x - curvesLeft
3x - curvesRight
4x - reversesLeft
5x - reversesRight
6x - windingRoad
7x - hairPin
8x - 270Turn
9x - pretzelTurn
Ax - crossRoads
Bx - crossT
Cx - crossY
Dx - circle
Ex - laneEnds
Fx - roadNarrows
}

field 8x: Current Tile Speed {
0x - queued
1x - < 5kmh
2x - < 10kmh
3x - < 15kmh
4x - < 20kmh
5x - < 30kmh
6x - < 40kmh
7x - < 50kmh
8x - < 60kmh
9x - < 80kmh
Ax - < 100kmh
Bx - < 120kmh
Cx - < 140kmh
Dx - < 160kmh
Ex - < 180kmh
Fx - >= 200kmh
}

field 9x: Lanes and Shoulders {
0x - Lane >> Edge1
1x - Lane >> Vertex1
2x - Lane >> Edge2
3x - Lane >> Vertex2
4x - Lane >> Edge3
5x - Lane >> Vertex3
6x - Lane >> Edge4
7x - Lane >> Vertex4
8x - Lane >> Edge5
9x - Lane >> Vertex5
Ax - Lane >> Edge6
Bx - Lane >> Vertex6
Cx - Junction
Dx - sidewalk
Ex - shoulder
Fx - ditch
}

filed Ax - reserved
filed Bx - reserved
field Cx - reserved
field Dx - reserved
field Ex - reserved
field Fx - reserved

10.  Normative References

   [I-D.ietf-lisp-rfc6833bis]
              Fuller, V., Farinacci, D., and A. Cabellos-Aparicio,
              "Locator/ID Separation Protocol (LISP) Control-Plane",
              draft-ietf-lisp-rfc6833bis-07 (work in progress), December
              2017.

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119,
              DOI 10.17487/RFC2119, March 1997,
              <https://www.rfc-editor.org/info/rfc2119>.

   [RFC6830]  Farinacci, D., Fuller, V., Meyer, D., and D. Lewis, "The
              Locator/ID Separation Protocol (LISP)", RFC 6830,
              DOI 10.17487/RFC6830, January 2013,
              <https://www.rfc-editor.org/info/rfc6830>.

   [RFC8378]  Farinacci, D., Moreno, V., "Signal-Free Locator/ID Separation
              Protocol (LISP) Multicast", RFC8378,
              DOI 10.17487/RFC8378, May 2018,
              <https://www.rfc-editor.org/info/rfc8378>.

Authors' Addresses

   Sharon Barkai
   Nexar
   CA
   USA

   Email: sbarkai@gmail.com

   Bruno Fernandez-Ruiz
   Nexar
   London
   UK

   Email: b@getnexar.com

   S ZionB
   Nexar
   Israel

   Email: sharon@fermicloud.io

   Alberto Rodriguez-Natal
   Cisco Systems
   170 Tasman Drive
   San Jose, CA
   USA

   Email: natal@cisco.com

   Fabio Maino
   Cisco Systems
   170 Tasman Drive
   San Jose, CA
   USA

   Email: fmaino@cisco.com

   Albert Cabellos-Aparicio
   Technical University of Catalonia
   Barcelona
   Spain

   Email: acabello@ac.upc.edu

   Jordi Paillissé-Vilanova
   Technical University of Catalonia
   Barcelona
   Spain

   Email: jordip@ac.upc.edu

   Dino Farinacci
   lispers.net
   San Jose, CA
   USA

   Email: farinacci@gmail.com