Hi,
I’m using my NWu simulator to establish a session with n3iwf in free5gc Core.
That is working.
What I noticed is that user packets above 1484 bytes are not being received.
I just send a ping with that size and it works. Above that size it does not work.
I did some internal traces and found the following:
Working scenario: user Ping with total size 1484 bytes:
The user packet Echo Request is encapsulated in GRE tunnel (10.0.0.1 to 10.0.0.7).
- User packet = 1484 bytes
- GRE header = 4 bytes
- IP header = 20 bytes (length in header = 1508 bytes)
Total = 1508 bytes.
This packet is seen in the trace in ESP, and after being decoded in the IPIP tunnel 10.0.0.1.
The packet is then encapsulated in GTP-U and sent to the destination.
Then i have the Echo Response encapsulated in GTP-U arriving in the N3IWF.
The next packets after this one, are two fragmented packets with the IPs 10.0.0.1 and 10.0.0.7, and the GRE header and payload with the user packet Echo Response.
The payload of these two packets should be the GRE header plus the user packet Echo Response.
The payload has 1488 bytes: 4 bytes GRE header + 1484 bytes, which is correct.
Non Working scenario: User Ping with total size above 1484 bytes (example with 1498 bytes):
The userpacket Echo Request is encapsulated in GRE tunnel (10.0.0.1 to 10.0.0.7).
- User packet = 1498 bytes
- GRE header = 4 bytes
- IP header = 20 bytes (length in header = 1522)
Total = 1522 bytes.
This packet is seen in the trace in ESP, and after being decoded in the IPIP tunnel 10.0.0.1
The packet is then encapsulated in GTP-U and sent to the destination.
Then i have the Echo Response encapsulated in GTP-U.
The next packets after this one, are two fragmented packets with the IPs 10.0.0.1 and 10.0.0.7, and the GRE header and payload with the user packet Echo Response.
The payload of these two packets should be the GRE header plus the user packet Echo Response (4 bytes + 1498 bytes = 1502 bytes).
But the payload has only 1488 bytes: 4 bytes GRE header + 1484 bytes, which is not correct since the Echo Response packet is 1498 bytes.
The IP header of the user packet has ip length field equal to 1498 as expected.
Wireshark triggers an error: “IPv4 total length exceeds packet length (1484 bytes)”
Then these two fragments are encrypted in IPsec (in two separated ESP packets), but when i receive these packets, and reassemble the payload, the user packet has only 1484 bytes and is not complete, and the ping fails.
Can you help? Why I’m having this limit of 1484 maximum packet size?