Expose more streamlined packet-building utilities from the header package
- Dominant language
- Go
- Stars
- 19.3k
- Forks
- 2k
- Avg merge
- 3d 5h
- Merged PRs (30d)
- 264
Description
The `header` package provides some encoding utilities but routinely users have to perform checksumming and updating fields manually on their on, like:
```go
ip := header.IPv4(b.Prepend(header.IPv4MinimumSize))
ip.Encode(&header.IPv4Fields{
TotalLength: uint16(b.UsedLength() + len(dhcpPayload)),
Flags: header.IPv4FlagDontFragment,
ID: 0,
TTL: ttl,
TOS: 0,
Protocol: uint8(header.UDPProtocolNumber),
SrcAddr: header.IPv4Any,
DstAddr: header.IPv4Broadcast,
})
ip.SetChecksum(^ip.CalculateChecksum())
```
or
```go
udp.Encode(&header.UDPFields{
SrcPort: ClientPort,
DstPort: ServerPort,
Length: length,
})
xsum := header.PseudoHeaderChecksum(header.UDPProtocolNumber, header.IPv4Any, header.IPv4Broadcast, length)
xsum = header.Checksum(payload, xsum)
udp.SetChecksum(^udp.CalculateChecksum(xsum)
```
it'd be interesting to expose those necessary steps as utility functions
Contributor guide
Assessment
This issue has not been assessed yet.