Implement EID and NIMLOC records
This commit is contained in:
parent
faf449027a
commit
ff7806469c
2
TODO.md
2
TODO.md
|
@ -8,5 +8,5 @@
|
|||
* Speed, we can always go faster. A simple reflect server now hits 75/80K qps on
|
||||
moderate hardware;
|
||||
* privatekey.Precompute() when signing?
|
||||
* Last remaining RRs: APL, NIMLOC & EID, ATMA, A6, KEY, SIG and NXT;
|
||||
* Last remaining RRs: APL, ATMA, A6, KEY, SIG and NXT;
|
||||
* CAA parsing is broken.
|
||||
|
|
2
msg.go
2
msg.go
|
@ -94,6 +94,7 @@ var TypeToString = map[uint16]string{
|
|||
TypeDNAME: "DNAME",
|
||||
TypeDNSKEY: "DNSKEY",
|
||||
TypeDS: "DS",
|
||||
TypeEID: "EID",
|
||||
TypeEUI48: "EUI48",
|
||||
TypeEUI64: "EUI64",
|
||||
TypeGID: "GID",
|
||||
|
@ -118,6 +119,7 @@ var TypeToString = map[uint16]string{
|
|||
TypeNAPTR: "NAPTR",
|
||||
TypeNID: "NID",
|
||||
TypeNINFO: "NINFO",
|
||||
TypeNIMLOC: "NIMLOC",
|
||||
TypeNS: "NS",
|
||||
TypeNSAP: "NSAP",
|
||||
TypeNSAPPTR: "NSAP-PTR",
|
||||
|
|
|
@ -591,13 +591,15 @@ func TestILNP(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestNSAPGPOS(t *testing.T) {
|
||||
func TestNsapGposEidNimloc(t *testing.T) {
|
||||
dt := map[string]string{
|
||||
"foo.bar.com. IN NSAP 21 47000580ffff000000321099991111222233334444": "foo.bar.com.\t3600\tIN\tNSAP\t21 47000580ffff000000321099991111222233334444",
|
||||
"host.school.de IN NSAP 17 39276f3100111100002222333344449876": "host.school.de.\t3600\tIN\tNSAP\t17 39276f3100111100002222333344449876",
|
||||
"444433332222111199990123000000ff. NSAP-PTR foo.bar.com.": "444433332222111199990123000000ff.\t3600\tIN\tNSAP-PTR\tfoo.bar.com.",
|
||||
"lillee. IN GPOS -32.6882 116.8652 10.0": "lillee.\t3600\tIN\tGPOS\t-32.6882 116.8652 10.0",
|
||||
"hinault. IN GPOS -22.6882 116.8652 250.0": "hinault.\t3600\tIN\tGPOS\t-22.6882 116.8652 250.0",
|
||||
"VENERA. IN NIMLOC 75234159EAC457800920": "VENERA.\t3600\tIN\tNIMLOC\t75234159EAC457800920",
|
||||
"VAXA. IN EID 3141592653589793": "VAXA.\t3600\tIN\tEID\t3141592653589793",
|
||||
}
|
||||
for i, o := range dt {
|
||||
rr, e := NewRR(i)
|
||||
|
|
24
types.go
24
types.go
|
@ -55,6 +55,8 @@ const (
|
|||
TypeAAAA uint16 = 28
|
||||
TypeLOC uint16 = 29
|
||||
TypeNXT uint16 = 30
|
||||
TypeEID uint16 = 31
|
||||
TypeNIMLOC uint16 = 32
|
||||
TypeSRV uint16 = 33
|
||||
TypeATMA uint16 = 34
|
||||
TypeNAPTR uint16 = 35
|
||||
|
@ -1489,6 +1491,26 @@ func (rr *UINFO) copy() RR { return &UINFO{*rr.Hdr.copyHeader(), rr.Ui
|
|||
func (rr *UINFO) String() string { return rr.Hdr.String() + strconv.QuoteToASCII(rr.Uinfo) }
|
||||
func (rr *UINFO) len() int { return rr.Hdr.len() + len(rr.Uinfo) + 1 }
|
||||
|
||||
type EID struct {
|
||||
Hdr RR_Header
|
||||
Endpoint string `dns:"hex"`
|
||||
}
|
||||
|
||||
func (rr *EID) Header() *RR_Header { return &rr.Hdr }
|
||||
func (rr *EID) copy() RR { return &EID{*rr.Hdr.copyHeader(), rr.Endpoint} }
|
||||
func (rr *EID) String() string { return rr.Hdr.String() + strings.ToUpper(rr.Endpoint) }
|
||||
func (rr *EID) len() int { return rr.Hdr.len() + len(rr.Endpoint)/2 }
|
||||
|
||||
type NIMLOC struct {
|
||||
Hdr RR_Header
|
||||
Locator string `dns:"hex"`
|
||||
}
|
||||
|
||||
func (rr *NIMLOC) Header() *RR_Header { return &rr.Hdr }
|
||||
func (rr *NIMLOC) copy() RR { return &NIMLOC{*rr.Hdr.copyHeader(), rr.Locator} }
|
||||
func (rr *NIMLOC) String() string { return rr.Hdr.String() + strings.ToUpper(rr.Locator) }
|
||||
func (rr *NIMLOC) len() int { return rr.Hdr.len() + len(rr.Locator)/2 }
|
||||
|
||||
// TimeToString translates the RRSIG's incep. and expir. times to the
|
||||
// string representation used when printing the record.
|
||||
// It takes serial arithmetic (RFC 1982) into account.
|
||||
|
@ -1574,6 +1596,7 @@ var rr_mk = map[uint16]func() RR{
|
|||
TypeEUI64: func() RR { return new(EUI64) },
|
||||
TypeGID: func() RR { return new(GID) },
|
||||
TypeGPOS: func() RR { return new(GPOS) },
|
||||
TypeEID: func() RR { return new(EID) },
|
||||
TypeHINFO: func() RR { return new(HINFO) },
|
||||
TypeHIP: func() RR { return new(HIP) },
|
||||
TypeKX: func() RR { return new(KX) },
|
||||
|
@ -1591,6 +1614,7 @@ var rr_mk = map[uint16]func() RR{
|
|||
TypeNAPTR: func() RR { return new(NAPTR) },
|
||||
TypeNID: func() RR { return new(NID) },
|
||||
TypeNINFO: func() RR { return new(NINFO) },
|
||||
TypeNIMLOC: func() RR { return new(NIMLOC) },
|
||||
TypeNS: func() RR { return new(NS) },
|
||||
TypeNSAP: func() RR { return new(NSAP) },
|
||||
TypeNSAPPTR: func() RR { return new(NSAPPTR) },
|
||||
|
|
26
zscan_rr.go
26
zscan_rr.go
|
@ -134,6 +134,10 @@ func setRR(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) {
|
|||
// These types have a variable ending: either chunks of txt or chunks/base64 or hex.
|
||||
// They need to search for the end of the RR themselves, hence they look for the ending
|
||||
// newline. Thus there is no need to slurp the remainder, because there is none.
|
||||
case TypeEID:
|
||||
return setEID(h, c, f)
|
||||
case TypeNIMLOC:
|
||||
return setNIMLOC(h, c, f)
|
||||
case TypeNSAP:
|
||||
return setNSAP(h, c, f)
|
||||
case TypeDNSKEY:
|
||||
|
@ -1561,6 +1565,28 @@ func setDS(h RR_Header, c chan lex, f string) (RR, *ParseError, string) {
|
|||
return rr, nil, c1
|
||||
}
|
||||
|
||||
func setEID(h RR_Header, c chan lex, f string) (RR, *ParseError, string) {
|
||||
rr := new(EID)
|
||||
rr.Hdr = h
|
||||
s, e, c1 := endingToString(c, "bad EID Endpoint", f)
|
||||
if e != nil {
|
||||
return nil, e, c1
|
||||
}
|
||||
rr.Endpoint = s
|
||||
return rr, nil, c1
|
||||
}
|
||||
|
||||
func setNIMLOC(h RR_Header, c chan lex, f string) (RR, *ParseError, string) {
|
||||
rr := new(NIMLOC)
|
||||
rr.Hdr = h
|
||||
s, e, c1 := endingToString(c, "bad NIMLOC Locator", f)
|
||||
if e != nil {
|
||||
return nil, e, c1
|
||||
}
|
||||
rr.Locator = s
|
||||
return rr, nil, c1
|
||||
}
|
||||
|
||||
func setNSAP(h RR_Header, c chan lex, f string) (RR, *ParseError, string) {
|
||||
rr := new(NSAP)
|
||||
rr.Hdr = h
|
||||
|
|
Loading…
Reference in New Issue