Skip to main content

Export of GTP-U Information in IP Flow Information Export (IPFIX)
draft-ietf-opsawg-ipfix-gtpu-18

Discuss


Yes

Mahesh Jethanandani

No Objection

Andy Newton
Gorry Fairhurst
Jim Guichard

No Record

Charles Eckel
Mike Bishop

Summary: Has 2 DISCUSSes. Has enough positions to pass once DISCUSS positions are resolved.

Éric Vyncke
Discuss
Discuss (2026-07-30) Sent
# Éric Vyncke INT AD comments for draft-ietf-opsawg-ipfix-gtpu-18
CC @evyncke

Thank you for the work put into this document.

Please find below some blocking DISCUSS points (easy to address), some non-blocking COMMENT points/nits, replies would be appreciated even if only for my own education).

Special thanks to Benoît Claise for the shepherd's concise write-up including the WG consensus and the justification of the intended status.

I hope that this review helps to improve the document,

Regards,

-éric

Note: this ballot comments follow the Markdown syntax of https://github.com/mnot/ietf-comments/tree/main, i.e., they can be processed by a tool to create github issues.


## DISCUSS (blocking)

As noted in https://datatracker.ietf.org/doc/statement-iesg-handling-ballot-positions-20220121/, a DISCUSS ballot is a request to have a discussion on the points below; I really think that the document would be improved with a change here, but can be convinced otherwise.

### Section 3 SHOULD

Why not a "MUST" in `When 3GPP specifications state that a field shall not be interpreted, the Exporting Process SHOULD use a Template that omits the corresponding IE` ? Like Med Boucadair, I do not think that BCP14 should be used in the sentence.

Also note https://datatracker.ietf.org/doc/statement-iesg-statement-on-clarifying-the-use-of-bcp-14-key-words/

### Section 5

I find very unusual to have the normative description of several flags *only* inside the IANA section and not in section 3. This only makes the implementers' job more complex. Consider moving the normative text into section 3.

### Section 5.1

In addition to the global DISCUSS on section 5, what is the meaning of `Version(3b)` in the flag description ? I have a guess but a PS-level draft should not leave any room for ambiguities.

The draft is also completely silent on the value & semantic on this 'Version' number.

Finally, what is the expected receiver behaviour when bit 4 (labelled as "0") is set ?
Comment (2026-07-30) Sent
## COMMENTS (non-blocking)

### Abstract
s/This document introduces/This document specifies/ as it is PS.

### Section 3 "meaningless"

What is meant by "meaningless" in `When the S flag of the gtpuFlags IE is set to 0, this IE is not meaningful` ?

Does it mean that this IE is to be ignored or must not be sent ?

Same comment for gtpuQFI and gtpuPduType.

### Section 4

Please add a reference to `gNodeB` as it does not appear in https://rpc-wiki.rfc-editor.org/doku.php?id=abbrev_list

Is `IP tunnel` the same as the GTP mentioned earlier ?

### Sections 5.1 & 5.5

The HTML formatting is really unclear that there are *two* examples as it appears as a single example.

Why not using a Figure caption ?

## NITS (non-blocking / cosmetic)

### Use of SVG graphics

To make a much nicer HTML rendering, suggest using the aasvg tool to generate SVG graphics. It is worth a try especially if the I-D uses the Kramdown file format ;-)
Ketan Talaulikar
Discuss
Discuss (2026-07-31) Sent
Thanks to the authors and the WG for their work on this document.

Note: this review is based on my very quick skim through the referenced 3GPP spec
and I might have got this wrong. If so, please correct me.

Comments are inline in the idnits output of v18. Look for the <EoRv18> tag at 
the end to ensure you are seeing the full review.

I have a few points that I would like to discuss.

<discuss-1> Sections 5.5 and 5.6

423	   Description:  6-bit QoS flow identifier field defined in PDU Session
424	      Container extension header of GTP-U.  This may be used to
425	      determine the QoS flow and QoS profile which are associated with
426	      the received packet.  The presence of the PDU Session Container
427	      extension header is indicated by the E (Extension Header) bit in
428	      the gtpuFlags IE.  When the E bit is set to 0, this IE is not
429	      meaningful.  The two most significant bits are reserved, MUST be
430	      exported as zero, and MUST be ignored on receipt.

470	   Description:  4-bit PDU type field defined in PDU Session Container
471	      extension header of GTP-U.  This field indicates the structure of
472	      the PDU session user plane frame.  The presence of the PDU Session
473	      Container extension header is indicated by the E (Extension
474	      Header) bit in the gtpuFlags IE.  When the E bit is set to 0, this
475	      IE is not meaningful.  The four most significant bits are
476	      reserved, MUST be exported as zero, and MUST be ignored on
477	      receipt.

The E flag indicates that the Next Extension Header field is valid; it
does not indicated which extension header is present. GTP-U supports multiple
extension-header types and a chain in which each header identifies the next
header. Therefore, E=1 does not mean that the chain contains a PDU
Session Container, and that container need not be the first extension header
in the chain.

As written, an exporter can treat unrelated extension-header bytes as QFI or
PDU Type. Please revise both IE descriptions to require the Exporting Process
to parse the extension-header chain and locate a PDU Session Container before
exporting either IE. When no PDU Session Container is present, or when the
chain is malformed, truncated, or cannot be safely parsed, the IE should be
omitted. The document should also specify the behavior if multiple PDU
Session Containers are encountered; though I don't know if that is even possible.

<discuss-2> Section 5.7

504	5.7.  gtpuTotalHdrLength
506	   Name:  gtpuTotalHdrLength
508	   ElementID:  TBD1
510	   Description:  8-bit field indicating the total length in octets of
511	      the observed GTP-U header, including the mandatory 8-octet header
512	      and any optional fields and extension headers defined in Sections
513	      5.1 and 5.2 of the 3GPP specification [TS.29281].  This IE is
514	      computed from the observed packet header and does not export the
515	      GTP-U Length field defined in Section 5.1 of [TS.29281].
517	   Abstract Data Type:  unsigned8
519	   Data Type Semantics:  quantity
521	   Additional Information:  Refer to Sections 5.1 and 5.2 of [TS.29281].
523	   Reference:  [RFC-to-be]

An IPFIX unsigned8 can represent values only from 0 through 255. GTP-U has a
variable-length header, its extension headers can be chained, and each
Extension Header Length is encoded in four-octet units. A valid GTP-U header
can therefore exceed 255 octets. Please use a data type that is large enough
to cover the headers.

If the intention were to limit to 255, then the specification does not state
what an exporter does when the observed header is longer than 255 octets. 
Implementations could truncate, stop at the value at 255, wrap it modulo 256, 
omit the IE, or reject the record. These outcomes are not interoperable, and 
several report an incorrect length.

<discuss-3> Section 5.8

525	5.8.  gtpuHeaderSection
527	   Name:  gtpuHeaderSection
529	   ElementID:  TBD2
531	   Description:  This Information Element carries a series of n octets
532	      from the observed GTP-U header, including the mandatory header and
533	      any optional fields and extension headers defined in Sections 5.1
534	      and 5.2 of the 3GPP specification [TS.29281], as a series of
535	      octets in IPFIX.
537	   Abstract Data Type:  octetArray
539	   Data Type Semantics:  default
541	   Additional Information:  Refer to Section 5 of [TS.29281].
543	   Reference:  [RFC-to-be]

The phrase "a series of n octets from the observed GTP-U header" does not
indicate whether the value begins at the first GTP-U header octet, whether it
contains the entire header or only a contiguous portion, whether an arbitrary
subsection is permitted, how truncation is detected, whether padding is
allowed, what values of n are valid, or what happens when the captured header
is itself truncated or malformed.

RFC 7012 requires applicable octetArray length constraints to be specified.

Please define one interoperable semantic model. A simple approach is
to require the value to start at the first GTP-U header octet, contain a
contiguous set of bytes, and contain the complete header whenever it is available
and fits. Truncation should either be prohibited or explicitly permitted with
a reliable way for the collector to recognize it. One possible option is to
require gtpuTotalHdrLength whenever gtpuHeaderSection is shorter than the
complete header. The definition should also cover malformed/truncated input
and prohibit bytes beyond the observed GTP-U header.
Comment (2026-07-31) Sent
I also have one comment to offer:

586	   The IEs described in this document export GTP user plane information
587	   about packet forwarding in a 3GPP network.  In particular, TEIDs,
588	   QFIs, PDU types, and GTP-U header sections can enable correlation of
589	   traffic with individual PDU sessions and, depending on deployment,
590	   with subscriber activity.  Implementations and operators therefore
591	   MUST treat this data as sensitive network telemetry data.
593	   Applications and operators using the IEs specified in this document
594	   SHOULD evaluate the sensitivity of this information in their
595	   deployment context, and apply the data-at-rest storage guidance in
596	   Section 11.8 of [RFC7011] as appropriate.
598	   Operators SHOULD restrict access to these exported IEs, apply
599	   retention limits appropriate to sensitive operational telemetry, and
600	   SHOULD NOT export gtpuHeaderSection unless required by the
601	   operational use case.  An Exporting Process MUST NOT include octets
602	   beyond the observed GTP-U header in gtpuHeaderSection.

<minor> The section correctly identifies the data as sensitive and covers
storage, access, retention, and minimization. It does not explicitly cover
confidentiality, integrity, and peer authentication while records are
transported from the Exporting Process to the Collecting Process. RFC 7011
addresses these properties and can be referenced for these aspects as well.

Please consider text along the following lines:

   Exporting Processes and Collecting Processes that exchange these
   Information Elements SHOULD use the secure transport mechanisms specified
   in Section 11 of [RFC7011] to provide confidentiality, integrity, and peer
   authentication, particularly when exporting gtpuHeaderSection.

<EoRv18>
Mahesh Jethanandani
Yes
Mohamed Boucadair
Yes
Comment (2026-07-08 for -17) Sent
Hi Daniel, Sriram, Thomas, Vyasraj, and Cristian,

Thank you for the effort put into this document. 

I reviewed this document in the past (https://mailarchive.ietf.org/arch/msg/opsawg/MBFQhNQHqhtoTKTH5XeZHbXwFTA/), so I have only minor points:

# Consider adding a brief text to remind that the header includes a mandatory header and optional fields and extension headers. This would help digest some of the IEs you define.

# Guidance on template usage

CURRENT:
   When 3GPP specifications state that a field shall not
   be interpreted, the Exporting Process SHOULD use a Template that
   omits the corresponding IE per Section 8 of [RFC7011]:

I think this discussion fits better under the operational considerations section. I would move this text there.

Also, I don’t think the normative language is really needed.

# The content of Section 3 highly duplicates what is in the IANA section. The normative behavior is what is provided under the description of the IANA section, IMO. I would cleanup the text for consistency.

# Duplicate normative behavior

CURRENT:
   Reserved bits
   in exported gtpuQFI and gtpuPduType values MUST be set to zero by the
   Exporting Process and MUST be ignored by the Collecting Process.

Vs.

gtpuQFI
      The two most significant bits are reserved, MUST
      be exported as zero, and MUST be ignored on receipt.

and

gtpuPduType

      The four most significant
      bits are reserved, MUST be exported as zero, and MUST be ignored
      on receipt.

## Please keep the normative language in one place. Having it under the IE is better.

## s/ gtpuQFI and gtpuPduType values/ gtpuQFI and gtpuPduType IEs

# This is about registering IEs, not allocating them

OLD: Table 2 lists the GTP-U IEs to be allocation 

NEW: Table 2 lists the GTP-U IEs to be registered


OLD: GTP-U IEs to be allocated

NEW: GTP-U IEs to be registered

# Derived

CURRENT:
      This IE is
      derived from the observed packet header and does not export the
      GTP-U Length field defined in Section 5.1 of [TS.29281].

“derived” is a bit ambiguous. I think “computed” is better here.

# S-flag & set clarification

OLD: gtpuFlags.  When the S flag is not set, this IE is not meaningful.

NEW: gtpuFlags.  When the S flag of the gtpuFlags IE is set to 0, this IE is not meaningful.

# How the presence is determined?  

CURRENT:
      The presence of this extension header is
      interpreted based on the extension header flag value from
      gtpuFlags.  When the PDU Session Container extension header is not
      present, this IE is not meaningful.  

Can we please be explicit this is based on E bit?

# reserved bits are already covered in the description

OLD:
   Additional Information:  Refer to Section 5.5.3.3 of the 3GPP
      specification [TS.38415] and Section 5.7.1.1 of the 3GPP
      specification [TS.23501].  The reserved bits in the exported octet
      are set to zero.

NEW:
   Additional Information:  Refer to Section 5.5.3.3 of the 3GPP
      specification [TS.38415] and Section 5.7.1.1 of the 3GPP
      specification [TS.23501].  

# nit: Examples?

CURRENT:
                MSB -   0     1    2    3    4    5    6    7   - LSB
                      +----+----+----+----+----+----+----+----+
                      |     Reserved      |  4 bit PDU Type   |
                      +----+----+----+----+----+----+----+----+


      Examples:

There is only one example listed there. Please s/Examples/Example

Cheers,
Med
Andy Newton
No Objection
Christopher Inacio
No Objection
Comment (2026-08-05) Sent
Thanks to Tim H for the SECDIR review.

Please consider Tim's comment from the SECIDR review; but converting the SHOULD to MUST might require slightly more text to explain the guidance.

My other comments are otherwise covered by other reviews.
Deb Cooley
No Objection
Comment (2026-08-01) Sent
Thanks to Tim Hollebeek for their secdir review.

Section 9, para 1:  Perhaps RFC 7011 could be referenced here?  While it is dated in its specific recommendations (for example, RFC 5246 has been obsoleted by RFC 9846), it still has much good information about security in this context.

Section 9, para 2:  Why not MUST (or must)?  When is it appropriate for an app or operator to ignore this advice?  And to be clear, RFC7011 section 11.8 addresses the sensitivity of the information, but protection of that information is deemed to be out of scope, either state that here, or reference a different specification.

Normative References:  None of the 3GPP references have links for where they can be found.  Are they, in fact, freely available?
Gorry Fairhurst
No Objection
Gunter Van de Velde
No Objection
Comment (2026-08-05) Sent
Thanks for this document. I support the DISCUSS from Ketan concerning following items:
1. Section 5.7: gtpuTotalHdrLength is too small
2. Sections 3, 5.5, and 5.6: the E flag does not indicate the presence of a PDU Session Container
3. Sections 3 and 5.8: packet-versus-flow semantics are not defined
Jim Guichard
No Objection
Roman Danyliw
No Objection
Comment (2026-07-29) Not sent
Thank you to Roni Even for the GENART review.
Tommy Jensen
No Objection
Comment (2026-08-06) Not sent
I strongly support Éric's DISCUSS. I otherwise have no objections.
Charles Eckel
No Record
Mike Bishop
No Record