tsdns: initial implementation of a Tailscale DNS resolver (#396)
Signed-off-by: Dmytro Shynkevych <dmytro@tailscale.com>
This commit is contained in:

committed by
GitHub

parent
5e1ee4be53
commit
511840b1f6
@ -102,7 +102,7 @@ func ipChecksum(b []byte) uint16 {
|
||||
// It extracts only the subprotocol id, IP addresses, and (if any) ports,
|
||||
// and shouldn't need any memory allocation.
|
||||
func (q *ParsedPacket) Decode(b []byte) {
|
||||
q.b = nil
|
||||
q.b = b
|
||||
|
||||
if len(b) < ipHeaderLength {
|
||||
q.IPProto = Unknown
|
||||
@ -170,7 +170,6 @@ func (q *ParsedPacket) Decode(b []byte) {
|
||||
}
|
||||
q.SrcPort = 0
|
||||
q.DstPort = 0
|
||||
q.b = b
|
||||
q.dataofs = q.subofs + icmpHeaderLength
|
||||
return
|
||||
case TCP:
|
||||
@ -181,7 +180,6 @@ func (q *ParsedPacket) Decode(b []byte) {
|
||||
q.SrcPort = get16(sub[0:2])
|
||||
q.DstPort = get16(sub[2:4])
|
||||
q.TCPFlags = sub[13] & 0x3F
|
||||
q.b = b
|
||||
headerLength := (sub[12] & 0xF0) >> 2
|
||||
q.dataofs = q.subofs + int(headerLength)
|
||||
return
|
||||
@ -192,7 +190,6 @@ func (q *ParsedPacket) Decode(b []byte) {
|
||||
}
|
||||
q.SrcPort = get16(sub[0:2])
|
||||
q.DstPort = get16(sub[2:4])
|
||||
q.b = b
|
||||
q.dataofs = q.subofs + udpHeaderLength
|
||||
return
|
||||
default:
|
||||
@ -244,6 +241,11 @@ func (q *ParsedPacket) UDPHeader() UDPHeader {
|
||||
}
|
||||
}
|
||||
|
||||
// Buffer returns the entire packet buffer.
|
||||
func (q *ParsedPacket) Buffer() []byte {
|
||||
return q.b
|
||||
}
|
||||
|
||||
// Sub returns the IP subprotocol section.
|
||||
func (q *ParsedPacket) Sub(begin, n int) []byte {
|
||||
return q.b[q.subofs+begin : q.subofs+begin+n]
|
||||
|
Reference in New Issue
Block a user