RFC 7631

TLV Naming in the Mobile Ad Hoc Network (MANET) Generalized Packet/Message Format

πŸ“… published September 2015, from ietf

RFC 7631: TLV Naming in the Mobile Ad Hoc Network (MANET) Generalized Packet/Message Format πŸŽ€

okay bestie, this one is RFC 7631, published in September 2015 πŸ’– It was written by C. Dearlove (BAE Systems ATC) and T. Clausen (LIX, Ecole Polytechnique). It's a Standards Track doc (ISSN 2070-1721), and it updates RFC 5444. The title block doesn't list anything it obsoletes, so it isn't replacing anything 🫢

Abstract

This document reorganizes the naming of already-allocated TLV (type-length-value) types and type extensions in the "Mobile Ad hoc NETwork (MANET) Parameters" registries defined by RFC 5444 so the names actually make sense πŸ’… It has no consequences in terms of any protocol implementation.

This document also updates the Expert Review guidelines in RFC 5444 πŸ”₯ The goal is a policy for consistent naming of future TLV type and type extension allocations. It makes no other changes to RFC 5444.

Status of This Memo

This is an Internet Standards Track document ✨

This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It has received public review and has been approved for publication by the Internet Engineering Steering Group (IESG). Further information on Internet Standards is available in Section 2 of RFC 5741 🌈

Information about the current status of this document, any errata, and how to provide feedback on it may be obtained at http://www.rfc-editor.org/info/rfc7631 πŸ¦‹

Copyright (c) 2015 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 (http://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.

Table of Contents 🧚

1. Introduction ....................................................3
2. Terminology .....................................................4
3. IANA Considerations .............................................4
   3.1. Expert Review: Evaluation Guidelines .......................5
   3.2. Updated IANA Registries ....................................6
4. Security Considerations ........................................13
5. References .....................................................13
   5.1. Normative References ......................................13
   5.2. Informative References ....................................14
Acknowledgments ...................................................15
Authors' Addresses ................................................15

1. Introduction ✨

okay so this document tidies up how we name TLVs (type-length-value structures) that are defined by [RFC5444] and recorded by IANA in three subregistries of the "Mobile Ad hoc NETwork (MANET) Parameters" registry: "Packet TLV Types", "Message TLV Types", and "Address Block TLV Types" πŸ“

It reorganizes the naming of TLVs that are already allocated (Packet, Message, and Address Block TLV types, plus their type extensions). It also updates the matching IANA registries πŸ’…

Here's the vibe on types. A TLV has a type (one octet) and a type extension (one octet), and together they make a full type (two octets total). A TLV is allowed to leave out the type extension when it's zero. BUT that's only about how it's written down. It still has a type extension of zero, no cap πŸ™ˆ Also, a TLV type defines an IANA registry of type extensions for that type.

There have been two forms of TLV allocation so far.

The first form is less common. Here, allocating the TLV type also defined (though didn't necessarily allocate) all of its type extensions. The Address Block TLV LINK_METRIC from [RFC7181] is the example. All of the LINK_METRIC type extensions are open for different definitions of link metric, so it makes sense to call the type LINK_METRIC, and call every full type that goes with it LINK_METRIC too, which is what's been done. Type extensions can then be named one by one or just referred to by their number πŸ¦‹

The second form is the more common one. Here, the allocation only defined type extension 0, and maybe type extension 1, for that TLV type. The example is the Address Block TLV LINK_STATUS from [RFC6130], where only type extension 0 is allocated. It's not reasonable to assume the other 255 type extensions will be used for forms of LINK_STATUS 😭 (Other forms of link status are already handled by the registry for LINK_STATUS TLV values that was introduced in [RFC7188].) So the name LINK_STATUS should be attached to that specific type extension, meaning the full type, and not to the TLV type when it's used with any other type extensions. That didn't happen when this TLV type was first registered, though. As a result, for the LINK_STATUS TLV type, type extensions 1-255 are either unavailable for allocation (if you read it strictly, since they'd have to relate to a LINK_STATUS) or they're named in a confusing way for what they actually do πŸ’€

So the point of this document is to change how names of the second form get applied and recorded in IANA registries, and to give guidelines and instructions for future TLV type allocations. The whole idea is to make it easy to add new TLVs using type extensions other than 0, without them getting names that don't fit πŸ‘‘ For example, LINK_STATUS becomes the name of the full type (TLV type 3 with TLV type extension 0), and it stops being the name of TLV type 3. That leaves the question of what to call the type itself. Since it isn't clear what other TLVs might get defined for other type extensions of the same type, the type stays unnamed and is only specified by its number.

This document also updates the Expert Review guidelines from [RFC5444], so there's a policy for consistent naming of future TLV type and type extension allocations 🌸

For clarity, all currently allocated TLVs in [RFC5497], [RFC6130], [RFC6621], [RFC7181], and [RFC7182] are listed in the IANA Considerations section of this document. Each one either specifies its update or says there's no change, whichever fits (like the LINK_METRIC TLV, and both TLVs defined in [RFC6621]). The only changes are to naming 🫢

Also, nothing in this document changes how any protocol operates. This naming is already in use, in effect, in [RFC6130] and [RFC7181], which are currently the main users of allocated TLVs. For example, the former says that all usage of LINK_STATUS refers to that TLV with type extension 0 ✨

2. Terminology πŸ’–

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

All references to elements such as "packet", "message", and "TLV" in this document refer to those defined in [RFC5444] 🧚

3. IANA Considerations 🌈

This document updates the Expert Review evaluation guidelines for allocations in [RFC5444] in the "Packet TLV Types", "Message TLV Types", and "Address Block TLV Types" registries, and it updates the allocations that were already made so they follow these guidelines πŸ’…

3.1. Expert Review: Evaluation Guidelines πŸ”₯

For registration in the "Packet TLV Types", "Message TLV Types", and "Address Block TLV Types" registries, the following guidelines apply, on top of the ones given in Section 6.1 in [RFC5444]:

  • If the requested TLV type immediately defines (but not necessarily allocates) all the corresponding type extensions for versions of that type, then a common name SHOULD be assigned for the TLV type.

This case is unchanged by this specification. It currently includes the TLV types named ICV, TIMESTAMP, and LINK_METRIC. It also includes the HELLO Message-Type-specific TLVs defined in [RFC6621] πŸ¦‹

  • Otherwise, if the requested TLV type does not immediately define all the corresponding type extensions for versions of that type, then a common name SHOULD NOT be assigned for that TLV type. Instead, it is RECOMMENDED that:
    • The "description" for the allocated TLV type be "Defined by Type Extension".
    • For Packet TLV Types, the type extension registry created for the TLV type be named "Type XX Packet TLV Type Extensions", with XX replaced by the numerical value of the TLV type.
    • For Message TLV Types, the type extension registry created for the TLV type be named "Type XX Message TLV Type Extensions", with XX replaced by the numerical value of the TLV type.
    • For Address Block TLV Types, the type extension registry created for the TLV type be named "Type XX Address Block TLV Type Extensions", with XX replaced by the numerical value of the TLV type.
    • When a new type extension is required, unless there are reasons to the contrary, the next consecutive type extension is allocated and given a name. (Reasons to the contrary MAY include maintaining a correspondence between corresponding Packet, Message, and Address Block TLVs, and reserving type extension zero if it isn't allocated yet.) 🌸

3.2. Updated IANA Registries πŸŽ€

The following changes (including the fix of some existing minor errors) apply to the IANA registry "Mobile Ad hoc NETwork (MANET) Parameters". For clarity, registries that are unchanged, including those that define all the type extensions of a TLV type, are listed as unchanged 🫢

The IANA registry Packet TLV Types is unchanged ✨

The IANA registry ICV Packet TLV Type Extensions is unchanged ✨

The IANA registry TIMESTAMP Packet TLV Type Extensions is unchanged ✨

The IANA registry Message TLV Types is changed to match Table 1 πŸ’…

       +---------+-------------------------------+-----------+
       |   Type  | Description                   | Reference |
       +---------+-------------------------------+-----------+
       |    0    | Defined by Type Extension     | [RFC5497] |
       |    1    | Defined by Type Extension     | [RFC5497] |
       |   2-4   | Unassigned                    |           |
       |    5    | ICV                           | [RFC7182] |
       |    6    | TIMESTAMP                     | [RFC7182] |
       |    7    | Defined by Type Extension     | [RFC7181] |
       |    8    | Defined by Type Extension     | [RFC7181] |
       |  9-223  | Unassigned                    |           |
       | 224-255 | Reserved for Experimental Use | [RFC5444] |
       +---------+-------------------------------+-----------+

                     Table 1: Message TLV Types

The IANA registry INTERVAL_TIME Message Type Extensions has been renamed Type 0 Message TLV Type Extensions and changed to match Table 2 πŸ”₯

okay so picking up with Table 2, the Type 0 Message TLV one πŸ’…πŸŽ€ its INTERVAL_TIME row says the maximum time before another message of the same type from the same originator should be received 🫢

   +-----------+---------------+---------------------------+-----------+
   |    Type   |      Name     | Description               | Reference |
   | Extension |               |                           |           |
   +-----------+---------------+---------------------------+-----------+
   |     0     | INTERVAL_TIME | The maximum time before   | [RFC5497] |
   |           |               | another message of the    |           |
   |           |               | same type as this message |           |
   |           |               | from the same originator  |           |
   |           |               | should be received        |           |
   |   1-223   |               | Unassigned                |           |
   |  224-255  |               | Reserved for Experimental | [RFC5497] |
   |           |               | Use                       |           |
   +-----------+---------------+---------------------------+-----------+

                Table 2: Type 0 Message TLV Type Extensions

The registry "VALIDITY_TIME Message Type Extensions" got renamed to "Type 1 Message TLV Type Extensions" πŸ¦‹ and it now lines up with Table 3, so no more mismatch πŸ™Œ

   +-----------+---------------+---------------------------+-----------+
   |    Type   |      Name     | Description               | Reference |
   | Extension |               |                           |           |
   +-----------+---------------+---------------------------+-----------+
   |     0     | VALIDITY_TIME | The time from receipt of  | [RFC5497] |
   |           |               | the message during which  |           |
   |           |               | the information contained |           |
   |           |               | in the message is to be   |           |
   |           |               | considered valid          |           |
   |   1-223   |               | Unassigned                |           |
   |  224-255  |               | Reserved for Experimental | [RFC5497] |
   |           |               | Use                       |           |
   +-----------+---------------+---------------------------+-----------+

                Table 3: Type 1 Message TLV Type Extensions

The "ICV Message TLV Type Extensions" registry is unchanged ✨ so nothing to see there, bestie πŸ€·β€β™€οΈ

The "TIMESTAMP Message TLV Type Extensions" registry is also unchanged 🌸

Next up, "MPR_WILLING Message Type Extensions" got renamed to "Type 7 Message TLV Type Extensions" πŸ‘‘ and it's been updated to match Table 4. Iykyk, MPR_WILLING is the one where bits 0-3 cover the flooding MPR willingness and bits 4-7 cover the routing MPR willingness 🧚

   +-----------+-------------+-----------------------------+-----------+
   |    Type   |     Name    | Description                 | Reference |
   | Extension |             |                             |           |
   +-----------+-------------+-----------------------------+-----------+
   |     0     | MPR_WILLING | Bits 0-3 specify the        | [RFC7181] |
   |           |             | originating router's        |           |
   |           |             | willingness to act as a     |           |
   |           |             | flooding MPR; bits 4-7      |           |
   |           |             | specify the originating     |           |
   |           |             | router's willingness to act |           |
   |           |             | as a routing MPR            |           |
   |   1-223   |             | Unassigned                  |           |
   |  224-255  |             | Reserved for Experimental   | [RFC7181] |
   |           |             | Use                         |           |
   +-----------+-------------+-----------------------------+-----------+

                Table 4: Type 7 Message TLV Type Extensions

The "CONT_SEQ_NUM Message Type Extensions" registry got renamed to "Type 8 Message TLV Type Extensions" πŸ’– and changed to match Table 5. This one has two values in the 0 and 1 slots, COMPLETE and INCOMPLETE, so it's giving sequence number drama πŸ’€

   +-----------+--------------+----------------------------+-----------+
   |    Type   |     Name     | Description                | Reference |
   | Extension |              |                            |           |
   +-----------+--------------+----------------------------+-----------+
   |     0     | CONT_SEQ_NUM | Specifies a content        | [RFC7181] |
   |           |  (COMPLETE)  | sequence number for this   |           |
   |           |              | complete message           |           |
   |     1     | CONT_SEQ_NUM | Specifies a content        | [RFC7181] |
   |           | (INCOMPLETE) | sequence number for this   |           |
   |           |              | incomplete message         |           |
   |   2-223   |              | Unassigned                 |           |
   |  224-255  |              | Reserved for Experimental  | [RFC7181] |
   |           |              | Use                        |           |
   +-----------+--------------+----------------------------+-----------+

                Table 5: Type 8 Message TLV Type Extensions

The "HELLO Message-Type-specific Message TLV Types" registry is unchanged 🫧

The "SMF_TYPE Message TLV Type Extensions" registry is unchanged too πŸ“

The "TC Message-Type-specific Message TLV Types" registry is unchanged as well 🌈

Now the Address Block TLV Types registry gets its glow-up πŸ’… and it now matches Table 6. Types 0 through 10 get their own owners, the 11-223 range is unassigned, and 224-255 is reserved for Experimental Use πŸ¦‹

          +---------+-------------------------------+-----------+
          |   Type  | Description                   | Reference |
          +---------+-------------------------------+-----------+
          |    0    | Defined by Type Extension     | [RFC5497] |
          |    1    | Defined by Type Extension     | [RFC5497] |
          |    2    | Defined by Type Extension     | [RFC6130] |
          |    3    | Defined by Type Extension     | [RFC6130] |
          |    4    | Defined by Type Extension     | [RFC6130] |
          |    5    | ICV                           | [RFC7182] |
          |    6    | TIMESTAMP                     | [RFC7182] |
          |    7    | LINK_METRIC                   | [RFC7181] |
          |    8    | Defined by Type Extension     | [RFC7181] |
          |    9    | Defined by Type Extension     | [RFC7181] |
          |    10   | Defined by Type Extension     | [RFC7181] |
          |  11-223 | Unassigned                    |           |
          | 224-255 | Reserved for Experimental Use | [RFC5444] |
          +---------+-------------------------------+-----------+

                     Table 6: Address Block TLV Types

The "INTERVAL_TIME Address Block TLV Type Extensions" registry got renamed to "Type 0 Address Block TLV Type Extensions" ✨ and changed to match Table 7. Its description is basically the same as the message version, except this one adds "and containing this address" 🧚

   +-----------+---------------+---------------------------+-----------+
   |    Type   |      Name     | Description               | Reference |
   | Extension |               |                           |           |
   +-----------+---------------+---------------------------+-----------+
   |     0     | INTERVAL_TIME | The maximum time before   | [RFC5497] |
   |           |               | another message of the    |           |
   |           |               | same type as this message |           |
   |           |               | from the same originator  |           |
   |           |               | and containing this       |           |
   |           |               | address should be         |           |
   |           |               | received                  |           |
   |   1-223   |               | Unassigned                |           |
   |  224-255  |               | Reserved for Experimental | [RFC5497] |
   |           |               | Use                       |           |
   +-----------+---------------+---------------------------+-----------+

             Table 7: Type 0 Address Block TLV Type Extensions

The "VALIDITY_TIME Address Block TLV Type Extensions" registry got renamed to "Type 1 Address Block TLV Type Extensions" 🌸 and changed to match Table 8. This one is about how long the information regarding this address stays valid after receipt πŸ’œ

   +-----------+---------------+---------------------------+-----------+
   |    Type   |      Name     | Description               | Reference |
   | Extension |               |                           |           |
   +-----------+---------------+---------------------------+-----------+
   |     0     | VALIDITY_TIME | The time from receipt of  | [RFC5497] |
   |           |               | the address during which  |           |
   |           |               | the information regarding |           |
   |           |               | this address is to be     |           |
   |           |               | considered valid          |           |
   |   1-223   |               | Unassigned                |           |
   |  224-255  |               | Reserved for Experimental | [RFC5497] |
   |           |               | Use                       |           |
   +-----------+---------------+---------------------------+-----------+

             Table 8: Type 1 Address Block TLV Type Extensions

The "LOCAL_IF Address Block TLV Type Extensions" registry got renamed to "Type 2 Address Block TLV Type Extensions" πŸŽ€ and changed to match Table 9. Its value gets interpreted according to the "LOCAL_IF TLV Values" registry, and it's referenced to both [RFC7188] and [RFC6130] πŸ¦‹

   +-----------+----------+-----------------------+--------------------+
   |    Type   |   Name   | Description           | Reference          |
   | Extension |          |                       |                    |
   +-----------+----------+-----------------------+--------------------+
   |     0     | LOCAL_IF | This value is to be   | [RFC7188][RFC6130] |
   |           |          | interpreted according |                    |
   |           |          | to the registry       |                    |
   |           |          | "LOCAL_IF TLV Values" |                    |
   |   1-223   |          | Unassigned            |                    |
   |  224-255  |          | Reserved for          | [RFC6130]          |
   |           |          | Experimental Use      |                    |
   +-----------+----------+-----------------------+--------------------+

             Table 9: Type 2 Address Block TLV Type Extensions

The "LINK_STATUS Address Block TLV Type Extensions" registry got renamed to "Type 3 Address Block TLV Type Extensions" 🧚 and changed to match Table 10. Same deal as LOCAL_IF: the value is interpreted according to the "LINK_STATUS TLV Values" registry 🌈

   +-----------+-------------+--------------------+--------------------+
   |    Type   |     Name    | Description        | Reference          |
   | Extension |             |                    |                    |
   +-----------+-------------+--------------------+--------------------+
   |     0     | LINK_STATUS | This value is to   | [RFC7188][RFC6130] |
   |           |             | be interpreted     |                    |
   |           |             | according to the   |                    |
   |           |             | registry           |                    |
   |           |             | "LINK_STATUS TLV   |                    |
   |           |             | Values"            |                    |
   |   1-223   |             | Unassigned         |                    |
   |  224-255  |             | Reserved for       | [RFC6130]          |
   |           |             | Experimental Use   |                    |
   +-----------+-------------+--------------------+--------------------+

            Table 10: Type 3 Address Block TLV Type Extensions

The "OTHER_NEIGHB Address Block TLV Type Extensions" registry has been renamed to "Type 4 Address Block TLV Type Extensions" πŸ’… and changed to match Table 11, which is the next part of the tea ✨

   +-----------+--------------+-------------------+--------------------+
   |    Type   |     Name     | Description       | Reference          |
   | Extension |              |                   |                    |
   +-----------+--------------+-------------------+--------------------+
   |     0     | OTHER_NEIGHB | This value is to  | [RFC7188][RFC6130] |
   |           |              | be interpreted    |                    |
   |           |              | according to the  |                    |
   |           |              | registry          |                    |
   |           |              | "OTHER_NEIGHB TLV |                    |
   |           |              | Values"           |                    |
   |   1-223   |              | Unassigned        |                    |
   |  224-255  |              | Reserved for      | [RFC6130]          |
   |           |              | Experimental Use  |                    |
   +-----------+--------------+-------------------+--------------------+

            Table 11: Type 4 Address Block TLV Type Extensions

okay so the registry ICV Address TLV Type Extensions got a glow-up πŸŽ€ and is now called ICV Address Block TLV Type Extensions. Same vibes, same contents, just a fancier name ✨

the TIMESTAMP Address TLV Type Extensions registry also got renamed, to TIMESTAMP Address Block TLV Type Extensions. It is otherwise unchanged πŸ’…

the LINK_METRIC Address Block TLV Type Extensions registry is unchanged, no notes, no drama πŸ¦‹

the MPR Address Block TLV Type Extensions registry is now Type 8 Address Block TLV Type Extensions and it was changed to match Table 12. literally the whole main character arc πŸ‘‘

   +-----------+------+---------------------------+--------------------+
   |    Type   | Name | Description               | Reference          |
   | Extension |      |                           |                    |
   +-----------+------+---------------------------+--------------------+
   |     0     | MPR  | This value is to be       | [RFC7188][RFC7181] |
   |           |      | interpreted according to  |                    |
   |           |      | the registry "MPR TLV Bit |                    |
   |           |      | Values"                   |                    |
   |   1-223   |      | Unassigned                |                    |
   |  224-255  |      | Reserved for Experimental | RFC 7631 (this     |
   |           |      | Use                       | document)          |
   +-----------+------+---------------------------+--------------------+

            Table 12: Type 8 Address Block TLV Type Extensions

the NBR_ADDR_TYPE Address Block TLV Type Extensions registry has been renamed Type 9 Address Block TLV Type Extensions and changed to match Table 13. bestie this one is giving full rebrand πŸŽ€

   +-----------+---------------+------------------+--------------------+
   |    Type   |      Name     | Description      | Reference          |
   | Extension |               |                  |                    |
   +-----------+---------------+------------------+--------------------+
   |     0     | NBR_ADDR_TYPE | This value is to | [RFC7188][RFC7181] |
   |           |               | be interpreted   |                    |
   |           |               | according to the |                    |
   |           |               | registry         |                    |
   |           |               | "NBR_ADDR_TYPE   |                    |
   |           |               | Address Block    |                    |
   |           |               | TLV Bit Values"  |                    |
   |   1-223   |               | Unassigned       |                    |
   |  224-255  |               | Reserved for     | RFC 7631 (this     |
   |           |               | Experimental Use | document)          |
   +-----------+---------------+------------------+--------------------+

            Table 13: Type 9 Address Block TLV Type Extensions

the GATEWAY Address Block TLV Type Extensions registry has been renamed Type 10 Address Block TLV Type Extensions and changed to match Table 14 🧚 the vibe is consistent, and so is the glow ✨

   +-----------+---------+------------------------+--------------------+
   |    Type   |   Name  | Description            | Reference          |
   | Extension |         |                        |                    |
   +-----------+---------+------------------------+--------------------+
   |     0     | GATEWAY | Specifies that a given | [RFC7188][RFC7181] |
   |           |         | network address is     |                    |
   |           |         | reached via a gateway  |                    |
   |           |         | on the originating     |                    |
   |           |         | router, with value     |                    |
   |           |         | equal to the number of |                    |
   |           |         | hops                   |                    |
   |   1-223   |         | Unassigned             |                    |
   |  224-255  |         | Reserved for           | RFC 7631 (this     |
   |           |         | Experimental Use       | document)          |
   +-----------+---------+------------------------+--------------------+

            Table 14: Type 10 Address Block TLV Type Extensions

the HELLO Message-Type-specific Address Block TLV Types registry is unchanged 🌸

the SMF_NBR_TYPE Address Block TLV Type Extensions registry is unchanged too 🌸

the TC Message-Type-specific Address Block TLV Types registry is unchanged as well. so many unchanged registries, nobody is stressing 😭

Note: This document adds reservations for Experimental Use [RFC5226], omitted in [RFC7181], to the last three tables. so the Experimental Use reservations are added to the last three tables, which is the part of this whole doc that actually needed a fix πŸ™ˆ

4. Security Considerations ✨

As this document is concerned only with how entities are named, those names being used only in documents such as this and IANA registries, this document has no security considerations. it's literally just names, and names live in docs and registries, so there's nothing here to panic about πŸ’…

5. References πŸ“š

5.1. Normative References

5.2. Informative References


Acknowledgments 🫢

The authors would like to thank Adrian Farrel for pointing out the need to reorganize and rationalize the naming of the TLVs defined by [RFC5444], and Tom Taylor and the RFC Editor for pointing out some omissions and errors. the whole squad helped make this spec cleaner, and that's so sweet πŸ₯Ή

Authors' Addresses πŸ’Œ

   Christopher Dearlove
   BAE Systems Advanced Technology Centre
   West Hanningfield Road
   Great Baddow, Chelmsford
   United Kingdom

   Phone: +44 1245 242194
   Email: chris.dearlove@baesystems.com
   URI:   http://www.baesystems.com/


   Thomas Heide Clausen
   LIX, Ecole Polytechnique

   Phone: +33 6 6058 9349
   Email: T.Clausen@computer.org
   URI:   http://www.ThomasClausen.org/
πŸ“¦ where this page comes from