func optToMapStr(rrOPT *mkdns.OPT) common.MapStr { optMapStr := common.MapStr{ "do": rrOPT.Do(), // true if DNSSEC "version": strconv.FormatUint(uint64(rrOPT.Version()), 10), "udp_size": rrOPT.UDPSize(), "ext_rcode": dnsResponseCodeToString(rrOPT.ExtendedRcode()), } for _, o := range rrOPT.Option { switch o.(type) { case *mkdns.EDNS0_DAU: optMapStr["dau"] = o.String() case *mkdns.EDNS0_DHU: optMapStr["dhu"] = o.String() case *mkdns.EDNS0_EXPIRE: optMapStr["local"] = o.String() case *mkdns.EDNS0_LLQ: optMapStr["llq"] = o.String() case *mkdns.EDNS0_LOCAL: optMapStr["local"] = o.String() case *mkdns.EDNS0_N3U: optMapStr["n3u"] = o.String() case *mkdns.EDNS0_NSID: optMapStr["nsid"] = o.String() case *mkdns.EDNS0_SUBNET: var draft string if o.(*mkdns.EDNS0_SUBNET).DraftOption { draft = " draft" } optMapStr["subnet"] = o.String() + draft case *mkdns.EDNS0_UL: optMapStr["ul"] = o.String() } } return optMapStr }