Skip to content

Commit 977e8d5

Browse files
committed
cleanup ipv6 iputil helpers
With my refactoring in this PR I accidentally had some duplicate logic, this PR cleans it up: - #1766
1 parent fe1c568 commit 977e8d5

1 file changed

Lines changed: 10 additions & 44 deletions

File tree

iputil/packet.go

Lines changed: 10 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -187,48 +187,15 @@ func ipv4CreateRejectTCPPacket(packet []byte, out []byte) []byte {
187187
}
188188

189189
func ipv6CreateRejectPacket(packet []byte, out []byte) []byte {
190-
proto := ipv6FindUpperProtocol(packet)
190+
proto, offset := ipv6FindUpperProtocol(packet)
191191
switch proto {
192192
case 6: // tcp
193-
return ipv6CreateRejectTCPPacket(packet, out)
193+
return ipv6CreateRejectTCPPacket(packet, out, offset)
194194
default:
195195
return ipv6CreateRejectICMPPacket(packet, out)
196196
}
197197
}
198198

199-
func ipv6FindUpperProtocol(packet []byte) uint8 {
200-
nextHeader := packet[6]
201-
offset := ipv6.HeaderLen
202-
203-
for {
204-
switch nextHeader {
205-
case 0, 43, 60: // Hop-by-Hop, Routing, Destination
206-
if len(packet) < offset+2 {
207-
return nextHeader
208-
}
209-
nextHeader = packet[offset]
210-
offset += int(packet[offset+1]+1) << 3
211-
212-
case 44: // Fragment
213-
if len(packet) < offset+8 {
214-
return nextHeader
215-
}
216-
nextHeader = packet[offset]
217-
offset += 8
218-
219-
case 51: // AH
220-
if len(packet) < offset+2 {
221-
return nextHeader
222-
}
223-
nextHeader = packet[offset]
224-
offset += int(packet[offset+1]+2) << 2
225-
226-
default:
227-
return nextHeader
228-
}
229-
}
230-
}
231-
232199
func ipv6CreateRejectICMPPacket(packet []byte, out []byte) []byte {
233200
// Include as much of the original packet as possible, up to 1000 bytes,
234201
// so the response fits comfortably within any tunnel MTU.
@@ -277,10 +244,9 @@ func ipv6CreateRejectICMPPacket(packet []byte, out []byte) []byte {
277244
return out
278245
}
279246

280-
func ipv6CreateRejectTCPPacket(packet []byte, out []byte) []byte {
247+
func ipv6CreateRejectTCPPacket(packet []byte, out []byte, offset int) []byte {
281248
const tcpLen = 20
282249

283-
offset := ipv6FindUpperProtocolOffset(packet)
284250
if len(packet) < offset+tcpLen {
285251
return nil
286252
}
@@ -344,35 +310,35 @@ func ipv6CreateRejectTCPPacket(packet []byte, out []byte) []byte {
344310
return out
345311
}
346312

347-
func ipv6FindUpperProtocolOffset(packet []byte) int {
348-
nextHeader := packet[6]
349-
offset := ipv6.HeaderLen
313+
func ipv6FindUpperProtocol(packet []byte) (nextHeader uint8, offset int) {
314+
nextHeader = packet[6]
315+
offset = ipv6.HeaderLen
350316

351317
for {
352318
switch nextHeader {
353319
case 0, 43, 60: // Hop-by-Hop, Routing, Destination
354320
if len(packet) < offset+2 {
355-
return offset
321+
return nextHeader, offset
356322
}
357323
nextHeader = packet[offset]
358324
offset += int(packet[offset+1]+1) << 3
359325

360326
case 44: // Fragment
361327
if len(packet) < offset+8 {
362-
return offset
328+
return nextHeader, offset
363329
}
364330
nextHeader = packet[offset]
365331
offset += 8
366332

367333
case 51: // AH
368334
if len(packet) < offset+2 {
369-
return offset
335+
return nextHeader, offset
370336
}
371337
nextHeader = packet[offset]
372338
offset += int(packet[offset+1]+2) << 2
373339

374340
default:
375-
return offset
341+
return nextHeader, offset
376342
}
377343
}
378344
}

0 commit comments

Comments
 (0)