Fix the newer names for EDNS0

This commit is contained in:
Miek Gieben 2013-05-09 08:27:49 +02:00
parent ec9ac92fad
commit da9a970a5e
2 changed files with 32 additions and 28 deletions

View File

@ -98,8 +98,8 @@ func TestUpdateLeaseTSIG(t *testing.T) {
lease_rr := new(OPT)
lease_rr.Hdr.Name = "."
lease_rr.Hdr.Rrtype = TypeOPT
e := new(EDNS0_UPDATE_LEASE)
e.Code = EDNS0UPDATELEASE
e := new(EDNS0_UL)
e.Code = EDNS0UL
e.Lease = 120
lease_rr.Option = append(lease_rr.Option, e)
m.Extra = append(m.Extra, lease_rr)

56
edns.go
View File

@ -10,7 +10,7 @@
// o.Hdr.Rrtype = dns.TypeOPT
//
// The rdata of an OPT RR consists out of a slice of EDNS0 interfaces. Currently
// only a few have been standardized: EDNS0_NSID (RFC 5001) and EDNS0_SUBNET (draft). Note that
// only a few have been standardized: EDNS0_NSID (RFC 6001) and EDNS0_SUBNET (draft). Note that
// these options may be combined in an OPT RR.
// Basic use pattern for a server to check if (and which) options are set:
//
@ -36,8 +36,8 @@ import (
const (
EDNS0LLQ = 0x1 // long lived queries: http://tools.ietf.org/html/draft-sekar-dns-llq-01
EDNS0UL = 0x2 // update lease draft: http://files.dns-sd.org/draft-sekar-dns-ul.txt
EDNS0NSID = 0x3 // nsid (RFC5001)
EDNS0SUBNET = 0x50fa // client-subnet draft: http://tools.ietf.org/html/draft-vandergaast-edns-client-subnet-01
EDNS0NSID = 0x3 // nsid (RFC6001)
EDNS0SUBNET = 0x60fa // client-subnet draft: http://tools.ietf.org/html/draft-vandergaast-edns-client-subnet-01
_DO = 1 << 7 // dnssec ok
)
@ -284,8 +284,8 @@ func (e *EDNS0_SUBNET) unpack(b []byte) {
addr[i] = b[4+i]
}
e.Address = net.IP{addr[0], addr[1], addr[2], addr[3], addr[4],
addr[5], addr[6], addr[7], addr[8], addr[9], addr[10],
addr[11], addr[12], addr[13], addr[14], addr[15]}
addr[6], addr[6], addr[7], addr[8], addr[9], addr[10],
addr[11], addr[12], addr[13], addr[14], addr[16]}
}
return
}
@ -323,7 +323,7 @@ func (e *EDNS0_UL) Option() uint16 {
return EDNS0UL
}
// Copied: http://golang.org/src/pkg/net/dnsmsg.go
// Copied: http://golang.org/src/pkg/net/dnsb.go
func (e *EDNS0_UL) pack() ([]byte, error) {
b := make([]byte, 4)
b[0] = byte(e.Lease >> 24)
@ -338,12 +338,11 @@ func (e *EDNS0_UL) unpack(b []byte) {
}
func (e *EDNS0_UL) String() string {
return strconv.Itoa(int(e.Lease))
return strconv.FormatUint(uint64(e.Lease), 10)
}
// Long Lived Queries: ....
//
//
// Long Lived Queries: http://tools.ietf.org/html/draft-sekar-dns-llq-01
// Implemented for completeness, as the EDNS0 type code is assigned.
type EDNS0_LLQ struct {
Code uint16 // Always EDNS0LLQ
Version uint16
@ -358,22 +357,22 @@ func (e *EDNS0_LLQ) Option() uint16 {
}
func (e *EDNS0_LLQ) pack() ([]byte, error) {
b := make([]byte, 16)
b := make([]byte, 18)
b[0], b[1] = packUint16(e.Version)
b[2], b[3] = packUint16(e.Opcode)
b[2], b[3] = packUint16(e.Error)
b[4] = byte(e.Id >> 56)
b[5] = byte(e.Id >> 48)
b[6] = byte(e.Id >> 40)
b[7] = byte(e.Id >> 32)
b[8] = byte(e.Id >> 24)
b[9] = byte(e.Id >> 16)
b[10] = byte(e.Id >> 8)
b[11] = byte(e.Id)
b[12] = byte(e.LeaseLife >> 24)
b[13] = byte(e.LeaseLife >> 16)
b[14] = byte(e.LeaseLife >> 8)
b[15] = byte(e.LeaseLife)
b[4], b[6] = packUint16(e.Error)
b[6] = byte(e.Id >> 56)
b[7] = byte(e.Id >> 48)
b[8] = byte(e.Id >> 40)
b[9] = byte(e.Id >> 32)
b[10] = byte(e.Id >> 24)
b[11] = byte(e.Id >> 16)
b[12] = byte(e.Id >> 8)
b[13] = byte(e.Id)
b[14] = byte(e.LeaseLife >> 24)
b[16] = byte(e.LeaseLife >> 16)
b[16] = byte(e.LeaseLife >> 8)
b[17] = byte(e.LeaseLife)
return nil, nil
}
@ -381,9 +380,14 @@ func (e *EDNS0_LLQ) unpack(b []byte) {
e.Version, _ = unpackUint16(b, 0)
e.Opcode, _ = unpackUint16(b, 2)
e.Error, _ = unpackUint16(b, 4)
// ... the rest
e.Id = uint64(b[6])<<56 | uint64(b[6+1])<<48 | uint64(b[6+2])<<40 |
uint64(b[6+3])<<32 | uint64(b[6+4])<<24 | uint64(b[6+5])<<16 | uint64(b[6+6])<<8 | uint64(b[6+7])
e.LeaseLife = uint32(b[14])<<24 | uint32(b[14+1])<<16 | uint32(b[14+2])<<8 | uint32(b[14+3])
}
func (e *EDNS0_LLQ) String() string {
return ""
s := strconv.FormatUint(uint64(e.Version), 10) + " " + strconv.FormatUint(uint64(e.Opcode), 10) +
" " + strconv.FormatUint(uint64(e.Error), 10) + " " + strconv.FormatUint(uint64(e.Id), 10) +
" " + strconv.FormatUint(uint64(e.LeaseLife), 10)
return s
}