On Thu, May 25, 2017 at 10:44 AM, Joe Touch <[email protected]> wrote:
> Hi, Tom,
>
> On 5/25/2017 9:00 AM, Tom Herbert wrote:
>> IPv4 and IPv6 can be directly encapsulated since they have a protocol
>> number (can be encapsulated by version 0).
>>
>> As I mentioned previously, Ethernet could be directly encapsulated via
>> EtherIP that has a 4 bit version number at the beginning of its
>> header. The way this would work is to set a version 1 pattern to
>> indicate EtherIP. For example, we could specify that 0101  would be
>> EtherIP. When GUE receives such a packet it will notice it's version
>> one and then see that it is EtherIP (differentiated from IPv4 0100 and
>> IPv6 0110 values). The first four bits are then overwritten by 0011 to
>> make it a valid EtherIP header and then the packet is resubmitted to
>> the stack as EtherIP.
> If you use the first 4 bits as the type identifier (which I think you
> should, as noted below), then you could easily support a bunch of
> encapsulations without needing the 4-byte overhead.
>
> E.g.:
>     0000 = GUE control (your "Version 0")
>     0100 = IPv4
>     0101 = IPv6
>
> That leaves 13 other codes you can use for other protocols (including
> MPLS, Ethernet, etc.), as long as you burn at least those 4 bits.
>

Right, although even with 00 for version zero there's still enough for
ten other codes which is a lot.

> EtherIP effectively burns 2 bytes rather than 4 bits, but has the same
> net effect.
>
>> Transport protocols (TCP, UDP, SCTP) might also be nice to support
>> with direct encapsulation in version 1, but unfortunately since they
>> start with a variable port number there's no way to do that.
> That works the same way as EtherIP - burn at least 4 bits indicating the
> transport.

EtherIP begins with a fixed version number, for the transport
protocols we would be overwriting the source port with no way to
recover the bits.

>
> Joe
>
> ------
> From my previous post:
>
> When we look at the first 2 bits of a GUE packet, we see:
>     00 = GUE version 0
>     01 = IPv4 or IPv6
>     10 = undefined
>     11 = undefined
>
> That's nearly the same as looking at the first 4 bits as simply the IP
> version number, and defining some of the unused IP versions as control:
>     0000 (IPv0) = GUE control
>     0001 (IPv1) = GUE control
>     0010 (IPv2) = GUE encapsulation using the GUE header
>     0011 (IPv3) = GUE encapsulation using the GUE header
>     0100 (IPv4) = direct encapsulation of IPv4, with no intervening GUE
> header
>     0101 (IPv5) = direct encapsulation of IPv5 (ST), with no interveni
> GUE header
>     0110 (IPv6) = direct encapsulation of IPv6, with no intervening GUE
> header
>     0111 (IPv7) = direct encapsulation of IPv7 (TP/IX), with no
> intervening GUE header
>     1000 (IPv8) = direct encapsulation of IPv8 (PIP), with no
> intervening GUE header
>     1001 (IPv9) = direct encapsulation of IPv9 (TUBA), with no
> intervening GUE header
>     1010 (IPv10) = direct encapsulation of IPv10, when assigned
>     1010 (IPv11) = direct encapsulation of IPv11, when assigned
>     1010 (IPv12) = direct encapsulation of IPv12, when assigned
>     1010 (IPv13) = direct encapsulation of IPv13, when assigned
>     1010 (IPv14) = direct encapsulation of IPv14, when assigned
>     1010 (IPv15) = direct encapsulation of IPv15, when assigned
>
> I.e., all you're basically doing is defining the first four version
> numbers of IP as your control plane. Unless we come back and assign them
> in the future, any mechanism that encapsulates IP packets (which should,
> IMO, be able to handle ALL IP versions, by definition) should be able to
> include GUE-style signaling.
>
Right, this scheme could work to generally encapsulate different IP
versions. There is a caveat though: AFAIK there is no IP protocol
number to encapsulate any IP protocols other then IPv4 (IPIP 94) and
IPv6 (IPv6 encapsulates 41). GUE encapsulates IP protocols which means
they need a protocol number. Version 1 is header compression for
version 0 so the there must be a way to encapsulate the protocol using
version 0. What would resolve that is a new IP protocol number for
encapsulating a packet of any IP version and use the IP version itself
to differentiate.

Tom

> IMO, it's simpler to explain this all using this fixed-field
> demultiplexer - in which case, you could even use just the IPv0 pattern
> for control and the IPv1 pattern for encapsulation using the GUE header,
> leaving the IPv2 and IPv3 equivalent patterns for future expansion.
>
> Joe
>
>

_______________________________________________
Int-area mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/int-area

Reply via email to