Hi Jakub,

On 01/02/2021 21:44, Jakub Kicinski wrote:
On Sat, 30 Jan 2021 12:05:40 -0800 Pravin Shelar wrote:
On Sat, Jan 30, 2021 at 10:44 AM Jakub Kicinski <k...@kernel.org> wrote:
On Fri, 29 Jan 2021 22:59:06 -0800 Pravin Shelar wrote:
On Fri, Jan 29, 2021 at 6:08 AM Jonas Bonn <jo...@norrbonn.se> wrote:
Following are the reasons for extracting the header and populating metadata.
1. That is the design used by other tunneling protocols
implementations for handling optional headers. We need to have a
consistent model across all tunnel devices for upper layers.

Could you clarify with some examples? This does not match intuition,
I must be missing something.

You can look at geneve_rx() or vxlan_rcv() that extracts optional
headers in ip_tunnel_info opts.

Okay, I got confused what Jonas was inquiring about. I thought that the
extension headers were not pulled, rather than not parsed. Copying them
as-is to info->opts is right, thanks!


No, you're not confused. The extension headers are not being pulled in the current patchset.

Incoming packet:

---------------------------------------------------------------------
| flags | type | len | TEID | N-PDU | SEQ | Ext | EXT.Hdr | IP | ...
---------------------------------------------------------------------
<--------- GTP header ------<<Optional GTP elements>>-----><- Pkt --->

The "collect metadata" path of the patchset copies 'flags' and 'type' to info->opts, but leaves the following:

-----------------------------------------
| N-PDU | SEQ | Ext | EXT.Hdr | IP | ...
-----------------------------------------
<--------- GTP header -------><- Pkt --->

So it's leaving _half_ the header and making it a requirement that there be further intelligence down the line that can handle this. This is far from intuitive.

/Jonas

Reply via email to