(t *testing.T, pk *ICMP)
| 67 | } |
| 68 | |
| 69 | func assertTTLExceedPacket(t *testing.T, pk *ICMP) { |
| 70 | encoder := NewEncoder() |
| 71 | rawPacket, err := encoder.Encode(pk) |
| 72 | require.NoError(t, err) |
| 73 | |
| 74 | minMTU := ipv4MinMTU |
| 75 | headerLen := ipv4MinHeaderLen |
| 76 | routerIP := netip.MustParseAddr("172.16.0.3") |
| 77 | if pk.Dst.Is6() { |
| 78 | minMTU = ipv6MinMTU |
| 79 | headerLen = ipv6HeaderLen |
| 80 | routerIP = netip.MustParseAddr("fd51:2391:697:f4ee::3") |
| 81 | } |
| 82 | |
| 83 | ttlExceedPacket := NewICMPTTLExceedPacket(pk.IP, rawPacket, routerIP) |
| 84 | require.Equal(t, routerIP, ttlExceedPacket.Src) |
| 85 | require.Equal(t, pk.Src, ttlExceedPacket.Dst) |
| 86 | require.Equal(t, pk.Protocol, ttlExceedPacket.Protocol) |
| 87 | require.Equal(t, DefaultTTL, ttlExceedPacket.TTL) |
| 88 | |
| 89 | timeExceed, ok := ttlExceedPacket.Body.(*icmp.TimeExceeded) |
| 90 | require.True(t, ok) |
| 91 | if len(rawPacket.Data) > minMTU { |
| 92 | require.True(t, bytes.Equal(timeExceed.Data, rawPacket.Data[:minMTU-headerLen-icmpHeaderLen])) |
| 93 | } else { |
| 94 | require.True(t, bytes.Equal(timeExceed.Data, rawPacket.Data)) |
| 95 | } |
| 96 | |
| 97 | rawTTLExceedPacket, err := encoder.Encode(ttlExceedPacket) |
| 98 | require.NoError(t, err) |
| 99 | if len(rawPacket.Data) > minMTU { |
| 100 | require.Len(t, rawTTLExceedPacket.Data, minMTU) |
| 101 | } else { |
| 102 | require.Len(t, rawTTLExceedPacket.Data, headerLen+icmpHeaderLen+len(rawPacket.Data)) |
| 103 | require.True(t, bytes.Equal(rawPacket.Data, rawTTLExceedPacket.Data[headerLen+icmpHeaderLen:])) |
| 104 | } |
| 105 | |
| 106 | decoder := NewICMPDecoder() |
| 107 | decodedPacket, err := decoder.Decode(rawTTLExceedPacket) |
| 108 | require.NoError(t, err) |
| 109 | assertICMPChecksum(t, decodedPacket) |
| 110 | } |
| 111 | |
| 112 | func assertICMPChecksum(t *testing.T, icmpPacket *ICMP) { |
| 113 | buf := gopacket.NewSerializeBuffer() |
no test coverage detected