mirror of
https://github.com/soypat/lneto.git
synced 2026-09-10 16:49:37 +00:00
Add mdns package and Client implementation (#55)
* add mdns * define mdns.Client * fix some mdns stuff * refine dns package for use with mdns * remove Querier and Responder and replace with Client * add record setting methods on dns.record to reuse record buffer * protect against unbounded client answer growth * round off sharp mdns edges; reduce allocs * add mutlicast to stacks; add xnet tests for mdns * fix documentation on acceptmulticast field * mdns working
This commit is contained in:
@@ -19,6 +19,7 @@ import (
|
||||
"github.com/soypat/lneto/ipv4"
|
||||
"github.com/soypat/lneto/ipv4/icmpv4"
|
||||
"github.com/soypat/lneto/ipv6"
|
||||
"github.com/soypat/lneto/mdns"
|
||||
"github.com/soypat/lneto/ntp"
|
||||
"github.com/soypat/lneto/tcp"
|
||||
"github.com/soypat/lneto/udp"
|
||||
@@ -359,7 +360,7 @@ func (pc *PacketBreakdown) CaptureUDP(dst []Frame, pkt []byte, bitOffset int) ([
|
||||
srcport := ufrm.SourcePort()
|
||||
if dhcpv4.PayloadIsDHCPv4(payload) {
|
||||
dst, err = pc.CaptureDHCPv4(dst, pkt, end)
|
||||
} else if dstport == dns.ServerPort || srcport == dns.ServerPort {
|
||||
} else if dstport == dns.ServerPort || srcport == dns.ServerPort || dstport == mdns.Port || srcport == mdns.Port {
|
||||
dst, err = pc.CaptureDNS(dst, pkt, end)
|
||||
} else if dstport == ntp.ServerPort || srcport == ntp.ServerPort {
|
||||
dst, err = pc.CaptureNTP(dst, pkt, end)
|
||||
@@ -437,7 +438,7 @@ func (pc *PacketBreakdown) CaptureDNS(dst []Frame, pkt []byte, bitOffset int) ([
|
||||
return dst, errNotByteAligned
|
||||
}
|
||||
dnsData := pkt[bitOffset/8:]
|
||||
pc.dmsg.LimitResourceDecoding(20, 20, 20, 20)
|
||||
pc.dmsg.LimitResourceDecoding(4, 4, 4, 4)
|
||||
off, incomplete, err := pc.dmsg.Decode(dnsData)
|
||||
if err != nil && !incomplete {
|
||||
return dst, err
|
||||
@@ -1265,6 +1266,43 @@ var baseDHCPv4Fields = [...]FrameField{
|
||||
},
|
||||
}
|
||||
|
||||
var baseDNSFields = [...]FrameField{
|
||||
{
|
||||
Class: FieldClassID,
|
||||
FrameBitOffset: 0,
|
||||
BitLength: 2 * octet,
|
||||
},
|
||||
{
|
||||
Class: FieldClassFlags,
|
||||
FrameBitOffset: 2 * octet,
|
||||
BitLength: 2 * octet,
|
||||
},
|
||||
{
|
||||
Name: "Questions",
|
||||
Class: FieldClassSize,
|
||||
FrameBitOffset: 4 * octet,
|
||||
BitLength: 2 * octet,
|
||||
},
|
||||
{
|
||||
Name: "Answers",
|
||||
Class: FieldClassSize,
|
||||
FrameBitOffset: 6 * octet,
|
||||
BitLength: 2 * octet,
|
||||
},
|
||||
{
|
||||
Name: "Authorities",
|
||||
Class: FieldClassSize,
|
||||
FrameBitOffset: 8 * octet,
|
||||
BitLength: 2 * octet,
|
||||
},
|
||||
{
|
||||
Name: "Additionals",
|
||||
Class: FieldClassSize,
|
||||
FrameBitOffset: 10 * octet,
|
||||
BitLength: 2 * octet,
|
||||
},
|
||||
}
|
||||
|
||||
var baseNTPFields = [...]FrameField{
|
||||
{
|
||||
Name: "Mode",
|
||||
|
||||
Reference in New Issue
Block a user