Subject: [babel] Source and ToS-specific routing for Babel : request for comments

From: Gwendoline <[email-masked]>
Date: Thu, 13 Apr 2017 17:55:01 +0200 (CEST)

Dear all,

I have just started working with Juliusz, and I hope to design and implement a
ToS-specific routing extension for Babel, so that we have another example of 
Babel extension to decide if rfc6126bis is neither too restrictive nor too 
permissive regarding extensions.

As explained during the Chicago meeting, we think that the packet format 
for the source-specific routing extension for Babel, implemented 
by Matthieu, could be better (for now, it consists of 3 new TLVs and they have 
too many fields, see slides 11-13 https://www.ietf.org/proceedings/98/slides/slides-98-babel-about-some-babel-drafts-00.pdf )
We want to redefine TLVs for the source-specific routing and the
ToS-specific routing Babel extensions.

We want to profit of Juliusz' future editing of RFC 6126bis, and use new AE values:
Interpreting a source-specific (resp. ToS-specific) update message as a classic
update message by ignoring the source information (resp. ToS information) and
considering the update it announces as a classical update might cause routing loops.
That's why there's nothing a classical router should do with a source-specific
(resp. ToS-specific) update message.
Since RFC 6126 specifies that any TLV with an unknown AE must be ignored, we want
to use new AE values for source-specific and ToS-specific updates. 

For example, we could use the following values:

   o  AE 5: Source-specific for IPV4
   o  AE 6: Source-specific for IPV6

   o  AE 7: ToS-specific for IPV4
   o  AE 8: ToS-specific for IPV6

They would use it in the 3 TLVs whose meaning is changed by the extensions: Update, Route Request
and Seqno Request.

For Source-Specific Routing, TLVs would be (adding a source 
prefix and its length):

UPDATE:

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 = 8    |    Length     |      AE=6     |   Reserved    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      Plen     |    Omitted    |            Interval           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Seqno             |             Metric            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Source Plen  |        Prefix...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
|        Source prefix...
+-+-+-+-+-+-+-+-+-+-+-+-

ROUTE REQUEST:

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 = 9    |    Length     |      AE=6     |      Plen     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Source Plen  |        Prefix...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
|        Source prefix...
+-+-+-+-+-+-+-+-+-+-+-+-

SEQNO REQUEST:

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 = 10   |    Length     |      AE=6     |      Plen     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Seqno             |   Hop Count   |   Reserved    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                           Router-Id                           +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Source Plen  |        Prefix...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
|        Source prefix...
+-+-+-+-+-+-+-+-+-+-+-+-

For ToS-Specific Routing, TLVs would be (adding of a ToS field 
right before the prefix):

UPDATE:

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 = 8   |    Length     |      AE=8     |    Flags      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Plen      |    Omitted    |            Interval           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Seqno             |            Metric             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      ToS      |    Prefix ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

ROUTE REQUEST:

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 = 9   |    Length     |      AE=8     |     Plen      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      ToS      |    Prefix ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

SEQNO REQUEST:

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 = 10  |    Length     |      AE=8     |    Plen       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Seqno             |  Hop Count    |   Reserved    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                          Router-Id                            +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      ToS      |    Prefix ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

The bit that worries me is what to do if we want to use 
Source-and-ToS-specific routing (or the intersection with any 
future extension that also uses a new AE)?
This choice suggests that we would need a new AE for any combination
of existing extensions (and any future extension must define those
new AE values, deciding which other extensions are compatible).
However, a whole octet looks enough to code all these possibilities.

Could you please tell your thoughts on this?

---

From: David Schinazi <[email-masked]>
Date: Fri, 14 Apr 2017 10:29:45 -0700

Hi Gwendoline,

First of all, thanks for writing this up, this is cool!
I believe there are use cases where this is really useful.

While I really like the idea of using AE instead of new TLVs,
I am slightly worried by the inability to combine these.
As you discussed, one may want to route based on both ToS and Source.

I think there's only one solution to this problem, which would be to use
sub-TLVs instead of AE, with a flag telling the receiver to ignore any Update
containing unknown sub TLVs. Sadly this feels overly complicated to me.

So, if we agree to burn a new AE for each combination, which I think I can
live with, then this proposals sounds great!

I think we may want to add text saying that this is DiffServ routing,
you really want to avoid routing differently based on the ECN bits
(we've seen that in the field, it triggers TCP PAWS and bad things happen).

Thanks,
David

> On Apr 13, 2017, at 08:55, Gwendoline <[email-masked]> wrote:
> 
> Dear all,
> 
> 
> _______________________________________________
> babel mailing list
> [email-masked]
> https://www.ietf.org/mailman/listinfo/babel