Home | History | Annotate | Line # | Download | only in dns
      1   1.1  christos /*
      2  1.12  christos  * Copyright (C) 1998-2026  Internet Systems Consortium, Inc. ("ISC")
      3   1.1  christos  *
      4   1.1  christos  * This Source Code Form is subject to the terms of the Mozilla Public
      5   1.1  christos  * License, v. 2.0. If a copy of the MPL was not distributed with this
      6   1.7  christos  * file, you can obtain one at https://mozilla.org/MPL/2.0/.
      7   1.1  christos  */
      8   1.1  christos 
      9   1.1  christos /***************
     10   1.1  christos  ***************
     11   1.1  christos  ***************   THIS FILE IS AUTOMATICALLY GENERATED BY gen.c.
     12   1.1  christos  ***************   DO NOT EDIT!
     13   1.1  christos  ***************
     14   1.1  christos  ***************/
     15   1.1  christos 
     16   1.1  christos /*! \file */
     17   1.1  christos 
     18   1.9  christos #pragma once
     19   1.2  christos #include <stdbool.h>
     20   1.1  christos #include <isc/result.h>
     21   1.1  christos 
     22   1.1  christos #include <dns/name.h>
     23   1.1  christos 
     24   1.1  christos #include "rdata/in_1/a_1.c"
     25   1.1  christos #include "rdata/ch_3/a_1.c"
     26   1.1  christos #include "rdata/hs_4/a_1.c"
     27   1.1  christos #include "rdata/generic/ns_2.c"
     28   1.1  christos #include "rdata/generic/md_3.c"
     29   1.1  christos #include "rdata/generic/mf_4.c"
     30   1.1  christos #include "rdata/generic/cname_5.c"
     31   1.1  christos #include "rdata/generic/soa_6.c"
     32   1.1  christos #include "rdata/generic/mb_7.c"
     33   1.1  christos #include "rdata/generic/mg_8.c"
     34   1.1  christos #include "rdata/generic/mr_9.c"
     35   1.1  christos #include "rdata/generic/null_10.c"
     36   1.1  christos #include "rdata/in_1/wks_11.c"
     37   1.1  christos #include "rdata/generic/ptr_12.c"
     38   1.1  christos #include "rdata/generic/hinfo_13.c"
     39   1.1  christos #include "rdata/generic/minfo_14.c"
     40   1.1  christos #include "rdata/generic/mx_15.c"
     41   1.1  christos #include "rdata/generic/txt_16.c"
     42   1.1  christos #include "rdata/generic/rp_17.c"
     43   1.1  christos #include "rdata/generic/afsdb_18.c"
     44   1.1  christos #include "rdata/generic/x25_19.c"
     45   1.1  christos #include "rdata/generic/isdn_20.c"
     46   1.1  christos #include "rdata/generic/rt_21.c"
     47   1.1  christos #include "rdata/in_1/nsap_22.c"
     48   1.1  christos #include "rdata/in_1/nsap-ptr_23.c"
     49   1.1  christos #include "rdata/generic/sig_24.c"
     50   1.1  christos #include "rdata/generic/key_25.c"
     51   1.1  christos #include "rdata/in_1/px_26.c"
     52   1.1  christos #include "rdata/generic/gpos_27.c"
     53   1.1  christos #include "rdata/in_1/aaaa_28.c"
     54   1.1  christos #include "rdata/generic/loc_29.c"
     55   1.1  christos #include "rdata/generic/nxt_30.c"
     56   1.2  christos #include "rdata/in_1/eid_31.c"
     57   1.2  christos #include "rdata/in_1/nimloc_32.c"
     58   1.1  christos #include "rdata/in_1/srv_33.c"
     59   1.2  christos #include "rdata/in_1/atma_34.c"
     60   1.1  christos #include "rdata/generic/naptr_35.c"
     61   1.1  christos #include "rdata/in_1/kx_36.c"
     62   1.1  christos #include "rdata/generic/cert_37.c"
     63   1.1  christos #include "rdata/in_1/a6_38.c"
     64   1.1  christos #include "rdata/generic/dname_39.c"
     65   1.1  christos #include "rdata/generic/sink_40.c"
     66   1.1  christos #include "rdata/generic/opt_41.c"
     67   1.1  christos #include "rdata/in_1/apl_42.c"
     68   1.1  christos #include "rdata/generic/ds_43.c"
     69   1.1  christos #include "rdata/generic/sshfp_44.c"
     70   1.1  christos #include "rdata/generic/ipseckey_45.c"
     71   1.1  christos #include "rdata/generic/rrsig_46.c"
     72   1.1  christos #include "rdata/generic/nsec_47.c"
     73   1.1  christos #include "rdata/generic/dnskey_48.c"
     74   1.1  christos #include "rdata/in_1/dhcid_49.c"
     75   1.1  christos #include "rdata/generic/nsec3_50.c"
     76   1.1  christos #include "rdata/generic/nsec3param_51.c"
     77   1.1  christos #include "rdata/generic/tlsa_52.c"
     78   1.1  christos #include "rdata/generic/smimea_53.c"
     79   1.1  christos #include "rdata/generic/hip_55.c"
     80   1.1  christos #include "rdata/generic/ninfo_56.c"
     81   1.1  christos #include "rdata/generic/rkey_57.c"
     82   1.1  christos #include "rdata/generic/talink_58.c"
     83   1.1  christos #include "rdata/generic/cds_59.c"
     84   1.1  christos #include "rdata/generic/cdnskey_60.c"
     85   1.1  christos #include "rdata/generic/openpgpkey_61.c"
     86   1.1  christos #include "rdata/generic/csync_62.c"
     87   1.3  christos #include "rdata/generic/zonemd_63.c"
     88   1.7  christos #include "rdata/in_1/svcb_64.c"
     89   1.7  christos #include "rdata/in_1/https_65.c"
     90  1.12  christos #include "rdata/generic/dsync_66.c"
     91  1.12  christos #include "rdata/generic/hhit_67.c"
     92  1.12  christos #include "rdata/generic/brid_68.c"
     93   1.1  christos #include "rdata/generic/spf_99.c"
     94   1.1  christos #include "rdata/generic/nid_104.c"
     95   1.1  christos #include "rdata/generic/l32_105.c"
     96   1.1  christos #include "rdata/generic/l64_106.c"
     97   1.1  christos #include "rdata/generic/lp_107.c"
     98   1.1  christos #include "rdata/generic/eui48_108.c"
     99   1.1  christos #include "rdata/generic/eui64_109.c"
    100   1.1  christos #include "rdata/generic/tkey_249.c"
    101   1.1  christos #include "rdata/any_255/tsig_250.c"
    102   1.1  christos #include "rdata/generic/uri_256.c"
    103   1.1  christos #include "rdata/generic/caa_257.c"
    104   1.1  christos #include "rdata/generic/avc_258.c"
    105   1.1  christos #include "rdata/generic/doa_259.c"
    106   1.3  christos #include "rdata/generic/amtrelay_260.c"
    107  1.10  christos #include "rdata/generic/resinfo_261.c"
    108  1.11  christos #include "rdata/generic/wallet_262.c"
    109   1.1  christos #include "rdata/generic/ta_32768.c"
    110   1.1  christos #include "rdata/generic/dlv_32769.c"
    111   1.1  christos #include "rdata/generic/keydata_65533.c"
    112   1.1  christos 
    113   1.1  christos 
    114   1.1  christos 
    115   1.1  christos #define FROMTEXTSWITCH \
    116   1.1  christos 	switch (type) { \
    117   1.1  christos 	case 1: switch (rdclass) { \
    118   1.1  christos 		case 1: result = fromtext_in_a(rdclass, type, lexer, origin, options, target, callbacks); break; \
    119   1.1  christos 		case 3: result = fromtext_ch_a(rdclass, type, lexer, origin, options, target, callbacks); break; \
    120   1.1  christos 		case 4: result = fromtext_hs_a(rdclass, type, lexer, origin, options, target, callbacks); break; \
    121   1.1  christos 		default: result = DNS_R_UNKNOWN; break; \
    122   1.1  christos 		} \
    123   1.1  christos 		break; \
    124   1.1  christos 	case 2: result = fromtext_ns(rdclass, type, lexer, origin, options, target, callbacks); break; \
    125   1.1  christos 	case 3: result = fromtext_md(rdclass, type, lexer, origin, options, target, callbacks); break; \
    126   1.1  christos 	case 4: result = fromtext_mf(rdclass, type, lexer, origin, options, target, callbacks); break; \
    127   1.1  christos 	case 5: result = fromtext_cname(rdclass, type, lexer, origin, options, target, callbacks); break; \
    128   1.1  christos 	case 6: result = fromtext_soa(rdclass, type, lexer, origin, options, target, callbacks); break; \
    129   1.1  christos 	case 7: result = fromtext_mb(rdclass, type, lexer, origin, options, target, callbacks); break; \
    130   1.1  christos 	case 8: result = fromtext_mg(rdclass, type, lexer, origin, options, target, callbacks); break; \
    131   1.1  christos 	case 9: result = fromtext_mr(rdclass, type, lexer, origin, options, target, callbacks); break; \
    132   1.1  christos 	case 10: result = fromtext_null(rdclass, type, lexer, origin, options, target, callbacks); break; \
    133   1.1  christos 	case 11: switch (rdclass) { \
    134   1.1  christos 		case 1: result = fromtext_in_wks(rdclass, type, lexer, origin, options, target, callbacks); break; \
    135   1.1  christos 		default: result = DNS_R_UNKNOWN; break; \
    136   1.1  christos 		} \
    137   1.1  christos 		break; \
    138   1.1  christos 	case 12: result = fromtext_ptr(rdclass, type, lexer, origin, options, target, callbacks); break; \
    139   1.1  christos 	case 13: result = fromtext_hinfo(rdclass, type, lexer, origin, options, target, callbacks); break; \
    140   1.1  christos 	case 14: result = fromtext_minfo(rdclass, type, lexer, origin, options, target, callbacks); break; \
    141   1.1  christos 	case 15: result = fromtext_mx(rdclass, type, lexer, origin, options, target, callbacks); break; \
    142   1.1  christos 	case 16: result = fromtext_txt(rdclass, type, lexer, origin, options, target, callbacks); break; \
    143   1.1  christos 	case 17: result = fromtext_rp(rdclass, type, lexer, origin, options, target, callbacks); break; \
    144   1.1  christos 	case 18: result = fromtext_afsdb(rdclass, type, lexer, origin, options, target, callbacks); break; \
    145   1.1  christos 	case 19: result = fromtext_x25(rdclass, type, lexer, origin, options, target, callbacks); break; \
    146   1.1  christos 	case 20: result = fromtext_isdn(rdclass, type, lexer, origin, options, target, callbacks); break; \
    147   1.1  christos 	case 21: result = fromtext_rt(rdclass, type, lexer, origin, options, target, callbacks); break; \
    148   1.1  christos 	case 22: switch (rdclass) { \
    149   1.1  christos 		case 1: result = fromtext_in_nsap(rdclass, type, lexer, origin, options, target, callbacks); break; \
    150   1.1  christos 		default: result = DNS_R_UNKNOWN; break; \
    151   1.1  christos 		} \
    152   1.1  christos 		break; \
    153   1.1  christos 	case 23: switch (rdclass) { \
    154   1.1  christos 		case 1: result = fromtext_in_nsap_ptr(rdclass, type, lexer, origin, options, target, callbacks); break; \
    155   1.1  christos 		default: result = DNS_R_UNKNOWN; break; \
    156   1.1  christos 		} \
    157   1.1  christos 		break; \
    158   1.1  christos 	case 24: result = fromtext_sig(rdclass, type, lexer, origin, options, target, callbacks); break; \
    159   1.1  christos 	case 25: result = fromtext_key(rdclass, type, lexer, origin, options, target, callbacks); break; \
    160   1.1  christos 	case 26: switch (rdclass) { \
    161   1.1  christos 		case 1: result = fromtext_in_px(rdclass, type, lexer, origin, options, target, callbacks); break; \
    162   1.1  christos 		default: result = DNS_R_UNKNOWN; break; \
    163   1.1  christos 		} \
    164   1.1  christos 		break; \
    165   1.1  christos 	case 27: result = fromtext_gpos(rdclass, type, lexer, origin, options, target, callbacks); break; \
    166   1.1  christos 	case 28: switch (rdclass) { \
    167   1.1  christos 		case 1: result = fromtext_in_aaaa(rdclass, type, lexer, origin, options, target, callbacks); break; \
    168   1.1  christos 		default: result = DNS_R_UNKNOWN; break; \
    169   1.1  christos 		} \
    170   1.1  christos 		break; \
    171   1.1  christos 	case 29: result = fromtext_loc(rdclass, type, lexer, origin, options, target, callbacks); break; \
    172   1.1  christos 	case 30: result = fromtext_nxt(rdclass, type, lexer, origin, options, target, callbacks); break; \
    173   1.2  christos 	case 31: switch (rdclass) { \
    174   1.2  christos 		case 1: result = fromtext_in_eid(rdclass, type, lexer, origin, options, target, callbacks); break; \
    175   1.2  christos 		default: result = DNS_R_UNKNOWN; break; \
    176   1.2  christos 		} \
    177   1.2  christos 		break; \
    178   1.2  christos 	case 32: switch (rdclass) { \
    179   1.2  christos 		case 1: result = fromtext_in_nimloc(rdclass, type, lexer, origin, options, target, callbacks); break; \
    180   1.2  christos 		default: result = DNS_R_UNKNOWN; break; \
    181   1.2  christos 		} \
    182   1.2  christos 		break; \
    183   1.1  christos 	case 33: switch (rdclass) { \
    184   1.1  christos 		case 1: result = fromtext_in_srv(rdclass, type, lexer, origin, options, target, callbacks); break; \
    185   1.1  christos 		default: result = DNS_R_UNKNOWN; break; \
    186   1.1  christos 		} \
    187   1.1  christos 		break; \
    188   1.2  christos 	case 34: switch (rdclass) { \
    189   1.2  christos 		case 1: result = fromtext_in_atma(rdclass, type, lexer, origin, options, target, callbacks); break; \
    190   1.2  christos 		default: result = DNS_R_UNKNOWN; break; \
    191   1.2  christos 		} \
    192   1.2  christos 		break; \
    193   1.1  christos 	case 35: result = fromtext_naptr(rdclass, type, lexer, origin, options, target, callbacks); break; \
    194   1.1  christos 	case 36: switch (rdclass) { \
    195   1.1  christos 		case 1: result = fromtext_in_kx(rdclass, type, lexer, origin, options, target, callbacks); break; \
    196   1.1  christos 		default: result = DNS_R_UNKNOWN; break; \
    197   1.1  christos 		} \
    198   1.1  christos 		break; \
    199   1.1  christos 	case 37: result = fromtext_cert(rdclass, type, lexer, origin, options, target, callbacks); break; \
    200   1.1  christos 	case 38: switch (rdclass) { \
    201   1.1  christos 		case 1: result = fromtext_in_a6(rdclass, type, lexer, origin, options, target, callbacks); break; \
    202   1.1  christos 		default: result = DNS_R_UNKNOWN; break; \
    203   1.1  christos 		} \
    204   1.1  christos 		break; \
    205   1.1  christos 	case 39: result = fromtext_dname(rdclass, type, lexer, origin, options, target, callbacks); break; \
    206   1.1  christos 	case 40: result = fromtext_sink(rdclass, type, lexer, origin, options, target, callbacks); break; \
    207   1.1  christos 	case 41: result = fromtext_opt(rdclass, type, lexer, origin, options, target, callbacks); break; \
    208   1.1  christos 	case 42: switch (rdclass) { \
    209   1.1  christos 		case 1: result = fromtext_in_apl(rdclass, type, lexer, origin, options, target, callbacks); break; \
    210   1.1  christos 		default: result = DNS_R_UNKNOWN; break; \
    211   1.1  christos 		} \
    212   1.1  christos 		break; \
    213   1.1  christos 	case 43: result = fromtext_ds(rdclass, type, lexer, origin, options, target, callbacks); break; \
    214   1.1  christos 	case 44: result = fromtext_sshfp(rdclass, type, lexer, origin, options, target, callbacks); break; \
    215   1.1  christos 	case 45: result = fromtext_ipseckey(rdclass, type, lexer, origin, options, target, callbacks); break; \
    216   1.1  christos 	case 46: result = fromtext_rrsig(rdclass, type, lexer, origin, options, target, callbacks); break; \
    217   1.1  christos 	case 47: result = fromtext_nsec(rdclass, type, lexer, origin, options, target, callbacks); break; \
    218   1.1  christos 	case 48: result = fromtext_dnskey(rdclass, type, lexer, origin, options, target, callbacks); break; \
    219   1.1  christos 	case 49: switch (rdclass) { \
    220   1.1  christos 		case 1: result = fromtext_in_dhcid(rdclass, type, lexer, origin, options, target, callbacks); break; \
    221   1.1  christos 		default: result = DNS_R_UNKNOWN; break; \
    222   1.1  christos 		} \
    223   1.1  christos 		break; \
    224   1.1  christos 	case 50: result = fromtext_nsec3(rdclass, type, lexer, origin, options, target, callbacks); break; \
    225   1.1  christos 	case 51: result = fromtext_nsec3param(rdclass, type, lexer, origin, options, target, callbacks); break; \
    226   1.1  christos 	case 52: result = fromtext_tlsa(rdclass, type, lexer, origin, options, target, callbacks); break; \
    227   1.1  christos 	case 53: result = fromtext_smimea(rdclass, type, lexer, origin, options, target, callbacks); break; \
    228   1.1  christos 	case 55: result = fromtext_hip(rdclass, type, lexer, origin, options, target, callbacks); break; \
    229   1.1  christos 	case 56: result = fromtext_ninfo(rdclass, type, lexer, origin, options, target, callbacks); break; \
    230   1.1  christos 	case 57: result = fromtext_rkey(rdclass, type, lexer, origin, options, target, callbacks); break; \
    231   1.1  christos 	case 58: result = fromtext_talink(rdclass, type, lexer, origin, options, target, callbacks); break; \
    232   1.1  christos 	case 59: result = fromtext_cds(rdclass, type, lexer, origin, options, target, callbacks); break; \
    233   1.1  christos 	case 60: result = fromtext_cdnskey(rdclass, type, lexer, origin, options, target, callbacks); break; \
    234   1.1  christos 	case 61: result = fromtext_openpgpkey(rdclass, type, lexer, origin, options, target, callbacks); break; \
    235   1.1  christos 	case 62: result = fromtext_csync(rdclass, type, lexer, origin, options, target, callbacks); break; \
    236   1.3  christos 	case 63: result = fromtext_zonemd(rdclass, type, lexer, origin, options, target, callbacks); break; \
    237   1.7  christos 	case 64: switch (rdclass) { \
    238   1.7  christos 		case 1: result = fromtext_in_svcb(rdclass, type, lexer, origin, options, target, callbacks); break; \
    239   1.7  christos 		default: result = DNS_R_UNKNOWN; break; \
    240   1.7  christos 		} \
    241   1.7  christos 		break; \
    242   1.7  christos 	case 65: switch (rdclass) { \
    243   1.7  christos 		case 1: result = fromtext_in_https(rdclass, type, lexer, origin, options, target, callbacks); break; \
    244   1.7  christos 		default: result = DNS_R_UNKNOWN; break; \
    245   1.7  christos 		} \
    246   1.7  christos 		break; \
    247  1.12  christos 	case 66: result = fromtext_dsync(rdclass, type, lexer, origin, options, target, callbacks); break; \
    248  1.12  christos 	case 67: result = fromtext_hhit(rdclass, type, lexer, origin, options, target, callbacks); break; \
    249  1.12  christos 	case 68: result = fromtext_brid(rdclass, type, lexer, origin, options, target, callbacks); break; \
    250   1.1  christos 	case 99: result = fromtext_spf(rdclass, type, lexer, origin, options, target, callbacks); break; \
    251   1.1  christos 	case 104: result = fromtext_nid(rdclass, type, lexer, origin, options, target, callbacks); break; \
    252   1.1  christos 	case 105: result = fromtext_l32(rdclass, type, lexer, origin, options, target, callbacks); break; \
    253   1.1  christos 	case 106: result = fromtext_l64(rdclass, type, lexer, origin, options, target, callbacks); break; \
    254   1.1  christos 	case 107: result = fromtext_lp(rdclass, type, lexer, origin, options, target, callbacks); break; \
    255   1.1  christos 	case 108: result = fromtext_eui48(rdclass, type, lexer, origin, options, target, callbacks); break; \
    256   1.1  christos 	case 109: result = fromtext_eui64(rdclass, type, lexer, origin, options, target, callbacks); break; \
    257   1.1  christos 	case 249: result = fromtext_tkey(rdclass, type, lexer, origin, options, target, callbacks); break; \
    258   1.1  christos 	case 250: switch (rdclass) { \
    259   1.1  christos 		case 255: result = fromtext_any_tsig(rdclass, type, lexer, origin, options, target, callbacks); break; \
    260   1.1  christos 		default: result = DNS_R_UNKNOWN; break; \
    261   1.1  christos 		} \
    262   1.1  christos 		break; \
    263   1.1  christos 	case 256: result = fromtext_uri(rdclass, type, lexer, origin, options, target, callbacks); break; \
    264   1.1  christos 	case 257: result = fromtext_caa(rdclass, type, lexer, origin, options, target, callbacks); break; \
    265   1.1  christos 	case 258: result = fromtext_avc(rdclass, type, lexer, origin, options, target, callbacks); break; \
    266   1.1  christos 	case 259: result = fromtext_doa(rdclass, type, lexer, origin, options, target, callbacks); break; \
    267   1.3  christos 	case 260: result = fromtext_amtrelay(rdclass, type, lexer, origin, options, target, callbacks); break; \
    268  1.10  christos 	case 261: result = fromtext_resinfo(rdclass, type, lexer, origin, options, target, callbacks); break; \
    269  1.11  christos 	case 262: result = fromtext_wallet(rdclass, type, lexer, origin, options, target, callbacks); break; \
    270   1.1  christos 	case 32768: result = fromtext_ta(rdclass, type, lexer, origin, options, target, callbacks); break; \
    271   1.1  christos 	case 32769: result = fromtext_dlv(rdclass, type, lexer, origin, options, target, callbacks); break; \
    272   1.1  christos 	case 65533: result = fromtext_keydata(rdclass, type, lexer, origin, options, target, callbacks); break; \
    273   1.1  christos 	default: result = DNS_R_UNKNOWN; break; \
    274   1.1  christos 	}
    275   1.1  christos 
    276   1.1  christos #define TOTEXTSWITCH \
    277   1.1  christos 	switch (rdata->type) { \
    278   1.1  christos 	case 1: switch (rdata->rdclass) { \
    279   1.1  christos 		case 1: result = totext_in_a(rdata, tctx, target); break; \
    280   1.1  christos 		case 3: result = totext_ch_a(rdata, tctx, target); break; \
    281   1.1  christos 		case 4: result = totext_hs_a(rdata, tctx, target); break; \
    282   1.2  christos 		default: use_default = true; break; \
    283   1.1  christos 		} \
    284   1.1  christos 		break; \
    285   1.1  christos 	case 2: result = totext_ns(rdata, tctx, target); break; \
    286   1.1  christos 	case 3: result = totext_md(rdata, tctx, target); break; \
    287   1.1  christos 	case 4: result = totext_mf(rdata, tctx, target); break; \
    288   1.1  christos 	case 5: result = totext_cname(rdata, tctx, target); break; \
    289   1.1  christos 	case 6: result = totext_soa(rdata, tctx, target); break; \
    290   1.1  christos 	case 7: result = totext_mb(rdata, tctx, target); break; \
    291   1.1  christos 	case 8: result = totext_mg(rdata, tctx, target); break; \
    292   1.1  christos 	case 9: result = totext_mr(rdata, tctx, target); break; \
    293   1.1  christos 	case 10: result = totext_null(rdata, tctx, target); break; \
    294   1.1  christos 	case 11: switch (rdata->rdclass) { \
    295   1.1  christos 		case 1: result = totext_in_wks(rdata, tctx, target); break; \
    296   1.2  christos 		default: use_default = true; break; \
    297   1.1  christos 		} \
    298   1.1  christos 		break; \
    299   1.1  christos 	case 12: result = totext_ptr(rdata, tctx, target); break; \
    300   1.1  christos 	case 13: result = totext_hinfo(rdata, tctx, target); break; \
    301   1.1  christos 	case 14: result = totext_minfo(rdata, tctx, target); break; \
    302   1.1  christos 	case 15: result = totext_mx(rdata, tctx, target); break; \
    303   1.1  christos 	case 16: result = totext_txt(rdata, tctx, target); break; \
    304   1.1  christos 	case 17: result = totext_rp(rdata, tctx, target); break; \
    305   1.1  christos 	case 18: result = totext_afsdb(rdata, tctx, target); break; \
    306   1.1  christos 	case 19: result = totext_x25(rdata, tctx, target); break; \
    307   1.1  christos 	case 20: result = totext_isdn(rdata, tctx, target); break; \
    308   1.1  christos 	case 21: result = totext_rt(rdata, tctx, target); break; \
    309   1.1  christos 	case 22: switch (rdata->rdclass) { \
    310   1.1  christos 		case 1: result = totext_in_nsap(rdata, tctx, target); break; \
    311   1.2  christos 		default: use_default = true; break; \
    312   1.1  christos 		} \
    313   1.1  christos 		break; \
    314   1.1  christos 	case 23: switch (rdata->rdclass) { \
    315   1.1  christos 		case 1: result = totext_in_nsap_ptr(rdata, tctx, target); break; \
    316   1.2  christos 		default: use_default = true; break; \
    317   1.1  christos 		} \
    318   1.1  christos 		break; \
    319   1.1  christos 	case 24: result = totext_sig(rdata, tctx, target); break; \
    320   1.1  christos 	case 25: result = totext_key(rdata, tctx, target); break; \
    321   1.1  christos 	case 26: switch (rdata->rdclass) { \
    322   1.1  christos 		case 1: result = totext_in_px(rdata, tctx, target); break; \
    323   1.2  christos 		default: use_default = true; break; \
    324   1.1  christos 		} \
    325   1.1  christos 		break; \
    326   1.1  christos 	case 27: result = totext_gpos(rdata, tctx, target); break; \
    327   1.1  christos 	case 28: switch (rdata->rdclass) { \
    328   1.1  christos 		case 1: result = totext_in_aaaa(rdata, tctx, target); break; \
    329   1.2  christos 		default: use_default = true; break; \
    330   1.1  christos 		} \
    331   1.1  christos 		break; \
    332   1.1  christos 	case 29: result = totext_loc(rdata, tctx, target); break; \
    333   1.1  christos 	case 30: result = totext_nxt(rdata, tctx, target); break; \
    334   1.2  christos 	case 31: switch (rdata->rdclass) { \
    335   1.2  christos 		case 1: result = totext_in_eid(rdata, tctx, target); break; \
    336   1.2  christos 		default: use_default = true; break; \
    337   1.2  christos 		} \
    338   1.2  christos 		break; \
    339   1.2  christos 	case 32: switch (rdata->rdclass) { \
    340   1.2  christos 		case 1: result = totext_in_nimloc(rdata, tctx, target); break; \
    341   1.2  christos 		default: use_default = true; break; \
    342   1.2  christos 		} \
    343   1.2  christos 		break; \
    344   1.1  christos 	case 33: switch (rdata->rdclass) { \
    345   1.1  christos 		case 1: result = totext_in_srv(rdata, tctx, target); break; \
    346   1.2  christos 		default: use_default = true; break; \
    347   1.2  christos 		} \
    348   1.2  christos 		break; \
    349   1.2  christos 	case 34: switch (rdata->rdclass) { \
    350   1.2  christos 		case 1: result = totext_in_atma(rdata, tctx, target); break; \
    351   1.2  christos 		default: use_default = true; break; \
    352   1.1  christos 		} \
    353   1.1  christos 		break; \
    354   1.1  christos 	case 35: result = totext_naptr(rdata, tctx, target); break; \
    355   1.1  christos 	case 36: switch (rdata->rdclass) { \
    356   1.1  christos 		case 1: result = totext_in_kx(rdata, tctx, target); break; \
    357   1.2  christos 		default: use_default = true; break; \
    358   1.1  christos 		} \
    359   1.1  christos 		break; \
    360   1.1  christos 	case 37: result = totext_cert(rdata, tctx, target); break; \
    361   1.1  christos 	case 38: switch (rdata->rdclass) { \
    362   1.1  christos 		case 1: result = totext_in_a6(rdata, tctx, target); break; \
    363   1.2  christos 		default: use_default = true; break; \
    364   1.1  christos 		} \
    365   1.1  christos 		break; \
    366   1.1  christos 	case 39: result = totext_dname(rdata, tctx, target); break; \
    367   1.1  christos 	case 40: result = totext_sink(rdata, tctx, target); break; \
    368   1.1  christos 	case 41: result = totext_opt(rdata, tctx, target); break; \
    369   1.1  christos 	case 42: switch (rdata->rdclass) { \
    370   1.1  christos 		case 1: result = totext_in_apl(rdata, tctx, target); break; \
    371   1.2  christos 		default: use_default = true; break; \
    372   1.1  christos 		} \
    373   1.1  christos 		break; \
    374   1.1  christos 	case 43: result = totext_ds(rdata, tctx, target); break; \
    375   1.1  christos 	case 44: result = totext_sshfp(rdata, tctx, target); break; \
    376   1.1  christos 	case 45: result = totext_ipseckey(rdata, tctx, target); break; \
    377   1.1  christos 	case 46: result = totext_rrsig(rdata, tctx, target); break; \
    378   1.1  christos 	case 47: result = totext_nsec(rdata, tctx, target); break; \
    379   1.1  christos 	case 48: result = totext_dnskey(rdata, tctx, target); break; \
    380   1.1  christos 	case 49: switch (rdata->rdclass) { \
    381   1.1  christos 		case 1: result = totext_in_dhcid(rdata, tctx, target); break; \
    382   1.2  christos 		default: use_default = true; break; \
    383   1.1  christos 		} \
    384   1.1  christos 		break; \
    385   1.1  christos 	case 50: result = totext_nsec3(rdata, tctx, target); break; \
    386   1.1  christos 	case 51: result = totext_nsec3param(rdata, tctx, target); break; \
    387   1.1  christos 	case 52: result = totext_tlsa(rdata, tctx, target); break; \
    388   1.1  christos 	case 53: result = totext_smimea(rdata, tctx, target); break; \
    389   1.1  christos 	case 55: result = totext_hip(rdata, tctx, target); break; \
    390   1.1  christos 	case 56: result = totext_ninfo(rdata, tctx, target); break; \
    391   1.1  christos 	case 57: result = totext_rkey(rdata, tctx, target); break; \
    392   1.1  christos 	case 58: result = totext_talink(rdata, tctx, target); break; \
    393   1.1  christos 	case 59: result = totext_cds(rdata, tctx, target); break; \
    394   1.1  christos 	case 60: result = totext_cdnskey(rdata, tctx, target); break; \
    395   1.1  christos 	case 61: result = totext_openpgpkey(rdata, tctx, target); break; \
    396   1.1  christos 	case 62: result = totext_csync(rdata, tctx, target); break; \
    397   1.3  christos 	case 63: result = totext_zonemd(rdata, tctx, target); break; \
    398   1.7  christos 	case 64: switch (rdata->rdclass) { \
    399   1.7  christos 		case 1: result = totext_in_svcb(rdata, tctx, target); break; \
    400   1.7  christos 		default: use_default = true; break; \
    401   1.7  christos 		} \
    402   1.7  christos 		break; \
    403   1.7  christos 	case 65: switch (rdata->rdclass) { \
    404   1.7  christos 		case 1: result = totext_in_https(rdata, tctx, target); break; \
    405   1.7  christos 		default: use_default = true; break; \
    406   1.7  christos 		} \
    407   1.7  christos 		break; \
    408  1.12  christos 	case 66: result = totext_dsync(rdata, tctx, target); break; \
    409  1.12  christos 	case 67: result = totext_hhit(rdata, tctx, target); break; \
    410  1.12  christos 	case 68: result = totext_brid(rdata, tctx, target); break; \
    411   1.1  christos 	case 99: result = totext_spf(rdata, tctx, target); break; \
    412   1.1  christos 	case 104: result = totext_nid(rdata, tctx, target); break; \
    413   1.1  christos 	case 105: result = totext_l32(rdata, tctx, target); break; \
    414   1.1  christos 	case 106: result = totext_l64(rdata, tctx, target); break; \
    415   1.1  christos 	case 107: result = totext_lp(rdata, tctx, target); break; \
    416   1.1  christos 	case 108: result = totext_eui48(rdata, tctx, target); break; \
    417   1.1  christos 	case 109: result = totext_eui64(rdata, tctx, target); break; \
    418   1.1  christos 	case 249: result = totext_tkey(rdata, tctx, target); break; \
    419   1.1  christos 	case 250: switch (rdata->rdclass) { \
    420   1.1  christos 		case 255: result = totext_any_tsig(rdata, tctx, target); break; \
    421   1.2  christos 		default: use_default = true; break; \
    422   1.1  christos 		} \
    423   1.1  christos 		break; \
    424   1.1  christos 	case 256: result = totext_uri(rdata, tctx, target); break; \
    425   1.1  christos 	case 257: result = totext_caa(rdata, tctx, target); break; \
    426   1.1  christos 	case 258: result = totext_avc(rdata, tctx, target); break; \
    427   1.1  christos 	case 259: result = totext_doa(rdata, tctx, target); break; \
    428   1.3  christos 	case 260: result = totext_amtrelay(rdata, tctx, target); break; \
    429  1.10  christos 	case 261: result = totext_resinfo(rdata, tctx, target); break; \
    430  1.11  christos 	case 262: result = totext_wallet(rdata, tctx, target); break; \
    431   1.1  christos 	case 32768: result = totext_ta(rdata, tctx, target); break; \
    432   1.1  christos 	case 32769: result = totext_dlv(rdata, tctx, target); break; \
    433   1.1  christos 	case 65533: result = totext_keydata(rdata, tctx, target); break; \
    434   1.2  christos 	default: use_default = true; break; \
    435   1.1  christos 	}
    436   1.1  christos 
    437   1.1  christos #define FROMWIRESWITCH \
    438   1.1  christos 	switch (type) { \
    439   1.1  christos 	case 1: switch (rdclass) { \
    440  1.11  christos 		case 1: result = fromwire_in_a(rdclass, type, source, dctx, target); break; \
    441  1.11  christos 		case 3: result = fromwire_ch_a(rdclass, type, source, dctx, target); break; \
    442  1.11  christos 		case 4: result = fromwire_hs_a(rdclass, type, source, dctx, target); break; \
    443   1.2  christos 		default: use_default = true; break; \
    444   1.1  christos 		} \
    445   1.1  christos 		break; \
    446  1.11  christos 	case 2: result = fromwire_ns(rdclass, type, source, dctx, target); break; \
    447  1.11  christos 	case 3: result = fromwire_md(rdclass, type, source, dctx, target); break; \
    448  1.11  christos 	case 4: result = fromwire_mf(rdclass, type, source, dctx, target); break; \
    449  1.11  christos 	case 5: result = fromwire_cname(rdclass, type, source, dctx, target); break; \
    450  1.11  christos 	case 6: result = fromwire_soa(rdclass, type, source, dctx, target); break; \
    451  1.11  christos 	case 7: result = fromwire_mb(rdclass, type, source, dctx, target); break; \
    452  1.11  christos 	case 8: result = fromwire_mg(rdclass, type, source, dctx, target); break; \
    453  1.11  christos 	case 9: result = fromwire_mr(rdclass, type, source, dctx, target); break; \
    454  1.11  christos 	case 10: result = fromwire_null(rdclass, type, source, dctx, target); break; \
    455   1.1  christos 	case 11: switch (rdclass) { \
    456  1.11  christos 		case 1: result = fromwire_in_wks(rdclass, type, source, dctx, target); break; \
    457   1.2  christos 		default: use_default = true; break; \
    458   1.1  christos 		} \
    459   1.1  christos 		break; \
    460  1.11  christos 	case 12: result = fromwire_ptr(rdclass, type, source, dctx, target); break; \
    461  1.11  christos 	case 13: result = fromwire_hinfo(rdclass, type, source, dctx, target); break; \
    462  1.11  christos 	case 14: result = fromwire_minfo(rdclass, type, source, dctx, target); break; \
    463  1.11  christos 	case 15: result = fromwire_mx(rdclass, type, source, dctx, target); break; \
    464  1.11  christos 	case 16: result = fromwire_txt(rdclass, type, source, dctx, target); break; \
    465  1.11  christos 	case 17: result = fromwire_rp(rdclass, type, source, dctx, target); break; \
    466  1.11  christos 	case 18: result = fromwire_afsdb(rdclass, type, source, dctx, target); break; \
    467  1.11  christos 	case 19: result = fromwire_x25(rdclass, type, source, dctx, target); break; \
    468  1.11  christos 	case 20: result = fromwire_isdn(rdclass, type, source, dctx, target); break; \
    469  1.11  christos 	case 21: result = fromwire_rt(rdclass, type, source, dctx, target); break; \
    470   1.1  christos 	case 22: switch (rdclass) { \
    471  1.11  christos 		case 1: result = fromwire_in_nsap(rdclass, type, source, dctx, target); break; \
    472   1.2  christos 		default: use_default = true; break; \
    473   1.1  christos 		} \
    474   1.1  christos 		break; \
    475   1.1  christos 	case 23: switch (rdclass) { \
    476  1.11  christos 		case 1: result = fromwire_in_nsap_ptr(rdclass, type, source, dctx, target); break; \
    477   1.2  christos 		default: use_default = true; break; \
    478   1.1  christos 		} \
    479   1.1  christos 		break; \
    480  1.11  christos 	case 24: result = fromwire_sig(rdclass, type, source, dctx, target); break; \
    481  1.11  christos 	case 25: result = fromwire_key(rdclass, type, source, dctx, target); break; \
    482   1.1  christos 	case 26: switch (rdclass) { \
    483  1.11  christos 		case 1: result = fromwire_in_px(rdclass, type, source, dctx, target); break; \
    484   1.2  christos 		default: use_default = true; break; \
    485   1.1  christos 		} \
    486   1.1  christos 		break; \
    487  1.11  christos 	case 27: result = fromwire_gpos(rdclass, type, source, dctx, target); break; \
    488   1.1  christos 	case 28: switch (rdclass) { \
    489  1.11  christos 		case 1: result = fromwire_in_aaaa(rdclass, type, source, dctx, target); break; \
    490   1.2  christos 		default: use_default = true; break; \
    491   1.1  christos 		} \
    492   1.1  christos 		break; \
    493  1.11  christos 	case 29: result = fromwire_loc(rdclass, type, source, dctx, target); break; \
    494  1.11  christos 	case 30: result = fromwire_nxt(rdclass, type, source, dctx, target); break; \
    495   1.2  christos 	case 31: switch (rdclass) { \
    496  1.11  christos 		case 1: result = fromwire_in_eid(rdclass, type, source, dctx, target); break; \
    497   1.2  christos 		default: use_default = true; break; \
    498   1.2  christos 		} \
    499   1.2  christos 		break; \
    500   1.2  christos 	case 32: switch (rdclass) { \
    501  1.11  christos 		case 1: result = fromwire_in_nimloc(rdclass, type, source, dctx, target); break; \
    502   1.2  christos 		default: use_default = true; break; \
    503   1.2  christos 		} \
    504   1.2  christos 		break; \
    505   1.1  christos 	case 33: switch (rdclass) { \
    506  1.11  christos 		case 1: result = fromwire_in_srv(rdclass, type, source, dctx, target); break; \
    507   1.2  christos 		default: use_default = true; break; \
    508   1.2  christos 		} \
    509   1.2  christos 		break; \
    510   1.2  christos 	case 34: switch (rdclass) { \
    511  1.11  christos 		case 1: result = fromwire_in_atma(rdclass, type, source, dctx, target); break; \
    512   1.2  christos 		default: use_default = true; break; \
    513   1.1  christos 		} \
    514   1.1  christos 		break; \
    515  1.11  christos 	case 35: result = fromwire_naptr(rdclass, type, source, dctx, target); break; \
    516   1.1  christos 	case 36: switch (rdclass) { \
    517  1.11  christos 		case 1: result = fromwire_in_kx(rdclass, type, source, dctx, target); break; \
    518   1.2  christos 		default: use_default = true; break; \
    519   1.1  christos 		} \
    520   1.1  christos 		break; \
    521  1.11  christos 	case 37: result = fromwire_cert(rdclass, type, source, dctx, target); break; \
    522   1.1  christos 	case 38: switch (rdclass) { \
    523  1.11  christos 		case 1: result = fromwire_in_a6(rdclass, type, source, dctx, target); break; \
    524   1.2  christos 		default: use_default = true; break; \
    525   1.1  christos 		} \
    526   1.1  christos 		break; \
    527  1.11  christos 	case 39: result = fromwire_dname(rdclass, type, source, dctx, target); break; \
    528  1.11  christos 	case 40: result = fromwire_sink(rdclass, type, source, dctx, target); break; \
    529  1.11  christos 	case 41: result = fromwire_opt(rdclass, type, source, dctx, target); break; \
    530   1.1  christos 	case 42: switch (rdclass) { \
    531  1.11  christos 		case 1: result = fromwire_in_apl(rdclass, type, source, dctx, target); break; \
    532   1.2  christos 		default: use_default = true; break; \
    533   1.1  christos 		} \
    534   1.1  christos 		break; \
    535  1.11  christos 	case 43: result = fromwire_ds(rdclass, type, source, dctx, target); break; \
    536  1.11  christos 	case 44: result = fromwire_sshfp(rdclass, type, source, dctx, target); break; \
    537  1.11  christos 	case 45: result = fromwire_ipseckey(rdclass, type, source, dctx, target); break; \
    538  1.11  christos 	case 46: result = fromwire_rrsig(rdclass, type, source, dctx, target); break; \
    539  1.11  christos 	case 47: result = fromwire_nsec(rdclass, type, source, dctx, target); break; \
    540  1.11  christos 	case 48: result = fromwire_dnskey(rdclass, type, source, dctx, target); break; \
    541   1.1  christos 	case 49: switch (rdclass) { \
    542  1.11  christos 		case 1: result = fromwire_in_dhcid(rdclass, type, source, dctx, target); break; \
    543   1.2  christos 		default: use_default = true; break; \
    544   1.1  christos 		} \
    545   1.1  christos 		break; \
    546  1.11  christos 	case 50: result = fromwire_nsec3(rdclass, type, source, dctx, target); break; \
    547  1.11  christos 	case 51: result = fromwire_nsec3param(rdclass, type, source, dctx, target); break; \
    548  1.11  christos 	case 52: result = fromwire_tlsa(rdclass, type, source, dctx, target); break; \
    549  1.11  christos 	case 53: result = fromwire_smimea(rdclass, type, source, dctx, target); break; \
    550  1.11  christos 	case 55: result = fromwire_hip(rdclass, type, source, dctx, target); break; \
    551  1.11  christos 	case 56: result = fromwire_ninfo(rdclass, type, source, dctx, target); break; \
    552  1.11  christos 	case 57: result = fromwire_rkey(rdclass, type, source, dctx, target); break; \
    553  1.11  christos 	case 58: result = fromwire_talink(rdclass, type, source, dctx, target); break; \
    554  1.11  christos 	case 59: result = fromwire_cds(rdclass, type, source, dctx, target); break; \
    555  1.11  christos 	case 60: result = fromwire_cdnskey(rdclass, type, source, dctx, target); break; \
    556  1.11  christos 	case 61: result = fromwire_openpgpkey(rdclass, type, source, dctx, target); break; \
    557  1.11  christos 	case 62: result = fromwire_csync(rdclass, type, source, dctx, target); break; \
    558  1.11  christos 	case 63: result = fromwire_zonemd(rdclass, type, source, dctx, target); break; \
    559   1.7  christos 	case 64: switch (rdclass) { \
    560  1.11  christos 		case 1: result = fromwire_in_svcb(rdclass, type, source, dctx, target); break; \
    561   1.7  christos 		default: use_default = true; break; \
    562   1.7  christos 		} \
    563   1.7  christos 		break; \
    564   1.7  christos 	case 65: switch (rdclass) { \
    565  1.11  christos 		case 1: result = fromwire_in_https(rdclass, type, source, dctx, target); break; \
    566   1.7  christos 		default: use_default = true; break; \
    567   1.7  christos 		} \
    568   1.7  christos 		break; \
    569  1.12  christos 	case 66: result = fromwire_dsync(rdclass, type, source, dctx, target); break; \
    570  1.12  christos 	case 67: result = fromwire_hhit(rdclass, type, source, dctx, target); break; \
    571  1.12  christos 	case 68: result = fromwire_brid(rdclass, type, source, dctx, target); break; \
    572  1.11  christos 	case 99: result = fromwire_spf(rdclass, type, source, dctx, target); break; \
    573  1.11  christos 	case 104: result = fromwire_nid(rdclass, type, source, dctx, target); break; \
    574  1.11  christos 	case 105: result = fromwire_l32(rdclass, type, source, dctx, target); break; \
    575  1.11  christos 	case 106: result = fromwire_l64(rdclass, type, source, dctx, target); break; \
    576  1.11  christos 	case 107: result = fromwire_lp(rdclass, type, source, dctx, target); break; \
    577  1.11  christos 	case 108: result = fromwire_eui48(rdclass, type, source, dctx, target); break; \
    578  1.11  christos 	case 109: result = fromwire_eui64(rdclass, type, source, dctx, target); break; \
    579  1.11  christos 	case 249: result = fromwire_tkey(rdclass, type, source, dctx, target); break; \
    580   1.1  christos 	case 250: switch (rdclass) { \
    581  1.11  christos 		case 255: result = fromwire_any_tsig(rdclass, type, source, dctx, target); break; \
    582   1.2  christos 		default: use_default = true; break; \
    583   1.1  christos 		} \
    584   1.1  christos 		break; \
    585  1.11  christos 	case 256: result = fromwire_uri(rdclass, type, source, dctx, target); break; \
    586  1.11  christos 	case 257: result = fromwire_caa(rdclass, type, source, dctx, target); break; \
    587  1.11  christos 	case 258: result = fromwire_avc(rdclass, type, source, dctx, target); break; \
    588  1.11  christos 	case 259: result = fromwire_doa(rdclass, type, source, dctx, target); break; \
    589  1.11  christos 	case 260: result = fromwire_amtrelay(rdclass, type, source, dctx, target); break; \
    590  1.11  christos 	case 261: result = fromwire_resinfo(rdclass, type, source, dctx, target); break; \
    591  1.11  christos 	case 262: result = fromwire_wallet(rdclass, type, source, dctx, target); break; \
    592  1.11  christos 	case 32768: result = fromwire_ta(rdclass, type, source, dctx, target); break; \
    593  1.11  christos 	case 32769: result = fromwire_dlv(rdclass, type, source, dctx, target); break; \
    594  1.11  christos 	case 65533: result = fromwire_keydata(rdclass, type, source, dctx, target); break; \
    595   1.2  christos 	default: use_default = true; break; \
    596   1.1  christos 	}
    597   1.1  christos 
    598   1.1  christos #define TOWIRESWITCH \
    599   1.1  christos 	switch (rdata->type) { \
    600   1.1  christos 	case 1: switch (rdata->rdclass) { \
    601   1.1  christos 		case 1: result = towire_in_a(rdata, cctx, target); break; \
    602   1.1  christos 		case 3: result = towire_ch_a(rdata, cctx, target); break; \
    603   1.1  christos 		case 4: result = towire_hs_a(rdata, cctx, target); break; \
    604   1.2  christos 		default: use_default = true; break; \
    605   1.1  christos 		} \
    606   1.1  christos 		break; \
    607   1.1  christos 	case 2: result = towire_ns(rdata, cctx, target); break; \
    608   1.1  christos 	case 3: result = towire_md(rdata, cctx, target); break; \
    609   1.1  christos 	case 4: result = towire_mf(rdata, cctx, target); break; \
    610   1.1  christos 	case 5: result = towire_cname(rdata, cctx, target); break; \
    611   1.1  christos 	case 6: result = towire_soa(rdata, cctx, target); break; \
    612   1.1  christos 	case 7: result = towire_mb(rdata, cctx, target); break; \
    613   1.1  christos 	case 8: result = towire_mg(rdata, cctx, target); break; \
    614   1.1  christos 	case 9: result = towire_mr(rdata, cctx, target); break; \
    615   1.1  christos 	case 10: result = towire_null(rdata, cctx, target); break; \
    616   1.1  christos 	case 11: switch (rdata->rdclass) { \
    617   1.1  christos 		case 1: result = towire_in_wks(rdata, cctx, target); break; \
    618   1.2  christos 		default: use_default = true; break; \
    619   1.1  christos 		} \
    620   1.1  christos 		break; \
    621   1.1  christos 	case 12: result = towire_ptr(rdata, cctx, target); break; \
    622   1.1  christos 	case 13: result = towire_hinfo(rdata, cctx, target); break; \
    623   1.1  christos 	case 14: result = towire_minfo(rdata, cctx, target); break; \
    624   1.1  christos 	case 15: result = towire_mx(rdata, cctx, target); break; \
    625   1.1  christos 	case 16: result = towire_txt(rdata, cctx, target); break; \
    626   1.1  christos 	case 17: result = towire_rp(rdata, cctx, target); break; \
    627   1.1  christos 	case 18: result = towire_afsdb(rdata, cctx, target); break; \
    628   1.1  christos 	case 19: result = towire_x25(rdata, cctx, target); break; \
    629   1.1  christos 	case 20: result = towire_isdn(rdata, cctx, target); break; \
    630   1.1  christos 	case 21: result = towire_rt(rdata, cctx, target); break; \
    631   1.1  christos 	case 22: switch (rdata->rdclass) { \
    632   1.1  christos 		case 1: result = towire_in_nsap(rdata, cctx, target); break; \
    633   1.2  christos 		default: use_default = true; break; \
    634   1.1  christos 		} \
    635   1.1  christos 		break; \
    636   1.1  christos 	case 23: switch (rdata->rdclass) { \
    637   1.1  christos 		case 1: result = towire_in_nsap_ptr(rdata, cctx, target); break; \
    638   1.2  christos 		default: use_default = true; break; \
    639   1.1  christos 		} \
    640   1.1  christos 		break; \
    641   1.1  christos 	case 24: result = towire_sig(rdata, cctx, target); break; \
    642   1.1  christos 	case 25: result = towire_key(rdata, cctx, target); break; \
    643   1.1  christos 	case 26: switch (rdata->rdclass) { \
    644   1.1  christos 		case 1: result = towire_in_px(rdata, cctx, target); break; \
    645   1.2  christos 		default: use_default = true; break; \
    646   1.1  christos 		} \
    647   1.1  christos 		break; \
    648   1.1  christos 	case 27: result = towire_gpos(rdata, cctx, target); break; \
    649   1.1  christos 	case 28: switch (rdata->rdclass) { \
    650   1.1  christos 		case 1: result = towire_in_aaaa(rdata, cctx, target); break; \
    651   1.2  christos 		default: use_default = true; break; \
    652   1.1  christos 		} \
    653   1.1  christos 		break; \
    654   1.1  christos 	case 29: result = towire_loc(rdata, cctx, target); break; \
    655   1.1  christos 	case 30: result = towire_nxt(rdata, cctx, target); break; \
    656   1.2  christos 	case 31: switch (rdata->rdclass) { \
    657   1.2  christos 		case 1: result = towire_in_eid(rdata, cctx, target); break; \
    658   1.2  christos 		default: use_default = true; break; \
    659   1.2  christos 		} \
    660   1.2  christos 		break; \
    661   1.2  christos 	case 32: switch (rdata->rdclass) { \
    662   1.2  christos 		case 1: result = towire_in_nimloc(rdata, cctx, target); break; \
    663   1.2  christos 		default: use_default = true; break; \
    664   1.2  christos 		} \
    665   1.2  christos 		break; \
    666   1.1  christos 	case 33: switch (rdata->rdclass) { \
    667   1.1  christos 		case 1: result = towire_in_srv(rdata, cctx, target); break; \
    668   1.2  christos 		default: use_default = true; break; \
    669   1.2  christos 		} \
    670   1.2  christos 		break; \
    671   1.2  christos 	case 34: switch (rdata->rdclass) { \
    672   1.2  christos 		case 1: result = towire_in_atma(rdata, cctx, target); break; \
    673   1.2  christos 		default: use_default = true; break; \
    674   1.1  christos 		} \
    675   1.1  christos 		break; \
    676   1.1  christos 	case 35: result = towire_naptr(rdata, cctx, target); break; \
    677   1.1  christos 	case 36: switch (rdata->rdclass) { \
    678   1.1  christos 		case 1: result = towire_in_kx(rdata, cctx, target); break; \
    679   1.2  christos 		default: use_default = true; break; \
    680   1.1  christos 		} \
    681   1.1  christos 		break; \
    682   1.1  christos 	case 37: result = towire_cert(rdata, cctx, target); break; \
    683   1.1  christos 	case 38: switch (rdata->rdclass) { \
    684   1.1  christos 		case 1: result = towire_in_a6(rdata, cctx, target); break; \
    685   1.2  christos 		default: use_default = true; break; \
    686   1.1  christos 		} \
    687   1.1  christos 		break; \
    688   1.1  christos 	case 39: result = towire_dname(rdata, cctx, target); break; \
    689   1.1  christos 	case 40: result = towire_sink(rdata, cctx, target); break; \
    690   1.1  christos 	case 41: result = towire_opt(rdata, cctx, target); break; \
    691   1.1  christos 	case 42: switch (rdata->rdclass) { \
    692   1.1  christos 		case 1: result = towire_in_apl(rdata, cctx, target); break; \
    693   1.2  christos 		default: use_default = true; break; \
    694   1.1  christos 		} \
    695   1.1  christos 		break; \
    696   1.1  christos 	case 43: result = towire_ds(rdata, cctx, target); break; \
    697   1.1  christos 	case 44: result = towire_sshfp(rdata, cctx, target); break; \
    698   1.1  christos 	case 45: result = towire_ipseckey(rdata, cctx, target); break; \
    699   1.1  christos 	case 46: result = towire_rrsig(rdata, cctx, target); break; \
    700   1.1  christos 	case 47: result = towire_nsec(rdata, cctx, target); break; \
    701   1.1  christos 	case 48: result = towire_dnskey(rdata, cctx, target); break; \
    702   1.1  christos 	case 49: switch (rdata->rdclass) { \
    703   1.1  christos 		case 1: result = towire_in_dhcid(rdata, cctx, target); break; \
    704   1.2  christos 		default: use_default = true; break; \
    705   1.1  christos 		} \
    706   1.1  christos 		break; \
    707   1.1  christos 	case 50: result = towire_nsec3(rdata, cctx, target); break; \
    708   1.1  christos 	case 51: result = towire_nsec3param(rdata, cctx, target); break; \
    709   1.1  christos 	case 52: result = towire_tlsa(rdata, cctx, target); break; \
    710   1.1  christos 	case 53: result = towire_smimea(rdata, cctx, target); break; \
    711   1.1  christos 	case 55: result = towire_hip(rdata, cctx, target); break; \
    712   1.1  christos 	case 56: result = towire_ninfo(rdata, cctx, target); break; \
    713   1.1  christos 	case 57: result = towire_rkey(rdata, cctx, target); break; \
    714   1.1  christos 	case 58: result = towire_talink(rdata, cctx, target); break; \
    715   1.1  christos 	case 59: result = towire_cds(rdata, cctx, target); break; \
    716   1.1  christos 	case 60: result = towire_cdnskey(rdata, cctx, target); break; \
    717   1.1  christos 	case 61: result = towire_openpgpkey(rdata, cctx, target); break; \
    718   1.1  christos 	case 62: result = towire_csync(rdata, cctx, target); break; \
    719   1.3  christos 	case 63: result = towire_zonemd(rdata, cctx, target); break; \
    720   1.7  christos 	case 64: switch (rdata->rdclass) { \
    721   1.7  christos 		case 1: result = towire_in_svcb(rdata, cctx, target); break; \
    722   1.7  christos 		default: use_default = true; break; \
    723   1.7  christos 		} \
    724   1.7  christos 		break; \
    725   1.7  christos 	case 65: switch (rdata->rdclass) { \
    726   1.7  christos 		case 1: result = towire_in_https(rdata, cctx, target); break; \
    727   1.7  christos 		default: use_default = true; break; \
    728   1.7  christos 		} \
    729   1.7  christos 		break; \
    730  1.12  christos 	case 66: result = towire_dsync(rdata, cctx, target); break; \
    731  1.12  christos 	case 67: result = towire_hhit(rdata, cctx, target); break; \
    732  1.12  christos 	case 68: result = towire_brid(rdata, cctx, target); break; \
    733   1.1  christos 	case 99: result = towire_spf(rdata, cctx, target); break; \
    734   1.1  christos 	case 104: result = towire_nid(rdata, cctx, target); break; \
    735   1.1  christos 	case 105: result = towire_l32(rdata, cctx, target); break; \
    736   1.1  christos 	case 106: result = towire_l64(rdata, cctx, target); break; \
    737   1.1  christos 	case 107: result = towire_lp(rdata, cctx, target); break; \
    738   1.1  christos 	case 108: result = towire_eui48(rdata, cctx, target); break; \
    739   1.1  christos 	case 109: result = towire_eui64(rdata, cctx, target); break; \
    740   1.1  christos 	case 249: result = towire_tkey(rdata, cctx, target); break; \
    741   1.1  christos 	case 250: switch (rdata->rdclass) { \
    742   1.1  christos 		case 255: result = towire_any_tsig(rdata, cctx, target); break; \
    743   1.2  christos 		default: use_default = true; break; \
    744   1.1  christos 		} \
    745   1.1  christos 		break; \
    746   1.1  christos 	case 256: result = towire_uri(rdata, cctx, target); break; \
    747   1.1  christos 	case 257: result = towire_caa(rdata, cctx, target); break; \
    748   1.1  christos 	case 258: result = towire_avc(rdata, cctx, target); break; \
    749   1.1  christos 	case 259: result = towire_doa(rdata, cctx, target); break; \
    750   1.3  christos 	case 260: result = towire_amtrelay(rdata, cctx, target); break; \
    751  1.10  christos 	case 261: result = towire_resinfo(rdata, cctx, target); break; \
    752  1.11  christos 	case 262: result = towire_wallet(rdata, cctx, target); break; \
    753   1.1  christos 	case 32768: result = towire_ta(rdata, cctx, target); break; \
    754   1.1  christos 	case 32769: result = towire_dlv(rdata, cctx, target); break; \
    755   1.1  christos 	case 65533: result = towire_keydata(rdata, cctx, target); break; \
    756   1.2  christos 	default: use_default = true; break; \
    757   1.1  christos 	}
    758   1.1  christos 
    759   1.1  christos #define COMPARESWITCH \
    760   1.1  christos 	switch (rdata1->type) { \
    761   1.1  christos 	case 1: switch (rdata1->rdclass) { \
    762   1.1  christos 		case 1: result = compare_in_a(rdata1, rdata2); break; \
    763   1.1  christos 		case 3: result = compare_ch_a(rdata1, rdata2); break; \
    764   1.1  christos 		case 4: result = compare_hs_a(rdata1, rdata2); break; \
    765   1.2  christos 		default: use_default = true; break; \
    766   1.1  christos 		} \
    767   1.1  christos 		break; \
    768   1.1  christos 	case 2: result = compare_ns(rdata1, rdata2); break; \
    769   1.1  christos 	case 3: result = compare_md(rdata1, rdata2); break; \
    770   1.1  christos 	case 4: result = compare_mf(rdata1, rdata2); break; \
    771   1.1  christos 	case 5: result = compare_cname(rdata1, rdata2); break; \
    772   1.1  christos 	case 6: result = compare_soa(rdata1, rdata2); break; \
    773   1.1  christos 	case 7: result = compare_mb(rdata1, rdata2); break; \
    774   1.1  christos 	case 8: result = compare_mg(rdata1, rdata2); break; \
    775   1.1  christos 	case 9: result = compare_mr(rdata1, rdata2); break; \
    776   1.1  christos 	case 10: result = compare_null(rdata1, rdata2); break; \
    777   1.1  christos 	case 11: switch (rdata1->rdclass) { \
    778   1.1  christos 		case 1: result = compare_in_wks(rdata1, rdata2); break; \
    779   1.2  christos 		default: use_default = true; break; \
    780   1.1  christos 		} \
    781   1.1  christos 		break; \
    782   1.1  christos 	case 12: result = compare_ptr(rdata1, rdata2); break; \
    783   1.1  christos 	case 13: result = compare_hinfo(rdata1, rdata2); break; \
    784   1.1  christos 	case 14: result = compare_minfo(rdata1, rdata2); break; \
    785   1.1  christos 	case 15: result = compare_mx(rdata1, rdata2); break; \
    786   1.1  christos 	case 16: result = compare_txt(rdata1, rdata2); break; \
    787   1.1  christos 	case 17: result = compare_rp(rdata1, rdata2); break; \
    788   1.1  christos 	case 18: result = compare_afsdb(rdata1, rdata2); break; \
    789   1.1  christos 	case 19: result = compare_x25(rdata1, rdata2); break; \
    790   1.1  christos 	case 20: result = compare_isdn(rdata1, rdata2); break; \
    791   1.1  christos 	case 21: result = compare_rt(rdata1, rdata2); break; \
    792   1.1  christos 	case 22: switch (rdata1->rdclass) { \
    793   1.1  christos 		case 1: result = compare_in_nsap(rdata1, rdata2); break; \
    794   1.2  christos 		default: use_default = true; break; \
    795   1.1  christos 		} \
    796   1.1  christos 		break; \
    797   1.1  christos 	case 23: switch (rdata1->rdclass) { \
    798   1.1  christos 		case 1: result = compare_in_nsap_ptr(rdata1, rdata2); break; \
    799   1.2  christos 		default: use_default = true; break; \
    800   1.1  christos 		} \
    801   1.1  christos 		break; \
    802   1.1  christos 	case 24: result = compare_sig(rdata1, rdata2); break; \
    803   1.1  christos 	case 25: result = compare_key(rdata1, rdata2); break; \
    804   1.1  christos 	case 26: switch (rdata1->rdclass) { \
    805   1.1  christos 		case 1: result = compare_in_px(rdata1, rdata2); break; \
    806   1.2  christos 		default: use_default = true; break; \
    807   1.1  christos 		} \
    808   1.1  christos 		break; \
    809   1.1  christos 	case 27: result = compare_gpos(rdata1, rdata2); break; \
    810   1.1  christos 	case 28: switch (rdata1->rdclass) { \
    811   1.1  christos 		case 1: result = compare_in_aaaa(rdata1, rdata2); break; \
    812   1.2  christos 		default: use_default = true; break; \
    813   1.1  christos 		} \
    814   1.1  christos 		break; \
    815   1.1  christos 	case 29: result = compare_loc(rdata1, rdata2); break; \
    816   1.1  christos 	case 30: result = compare_nxt(rdata1, rdata2); break; \
    817   1.2  christos 	case 31: switch (rdata1->rdclass) { \
    818   1.2  christos 		case 1: result = compare_in_eid(rdata1, rdata2); break; \
    819   1.2  christos 		default: use_default = true; break; \
    820   1.2  christos 		} \
    821   1.2  christos 		break; \
    822   1.2  christos 	case 32: switch (rdata1->rdclass) { \
    823   1.2  christos 		case 1: result = compare_in_nimloc(rdata1, rdata2); break; \
    824   1.2  christos 		default: use_default = true; break; \
    825   1.2  christos 		} \
    826   1.2  christos 		break; \
    827   1.1  christos 	case 33: switch (rdata1->rdclass) { \
    828   1.1  christos 		case 1: result = compare_in_srv(rdata1, rdata2); break; \
    829   1.2  christos 		default: use_default = true; break; \
    830   1.2  christos 		} \
    831   1.2  christos 		break; \
    832   1.2  christos 	case 34: switch (rdata1->rdclass) { \
    833   1.2  christos 		case 1: result = compare_in_atma(rdata1, rdata2); break; \
    834   1.2  christos 		default: use_default = true; break; \
    835   1.1  christos 		} \
    836   1.1  christos 		break; \
    837   1.1  christos 	case 35: result = compare_naptr(rdata1, rdata2); break; \
    838   1.1  christos 	case 36: switch (rdata1->rdclass) { \
    839   1.1  christos 		case 1: result = compare_in_kx(rdata1, rdata2); break; \
    840   1.2  christos 		default: use_default = true; break; \
    841   1.1  christos 		} \
    842   1.1  christos 		break; \
    843   1.1  christos 	case 37: result = compare_cert(rdata1, rdata2); break; \
    844   1.1  christos 	case 38: switch (rdata1->rdclass) { \
    845   1.1  christos 		case 1: result = compare_in_a6(rdata1, rdata2); break; \
    846   1.2  christos 		default: use_default = true; break; \
    847   1.1  christos 		} \
    848   1.1  christos 		break; \
    849   1.1  christos 	case 39: result = compare_dname(rdata1, rdata2); break; \
    850   1.1  christos 	case 40: result = compare_sink(rdata1, rdata2); break; \
    851   1.1  christos 	case 41: result = compare_opt(rdata1, rdata2); break; \
    852   1.1  christos 	case 42: switch (rdata1->rdclass) { \
    853   1.1  christos 		case 1: result = compare_in_apl(rdata1, rdata2); break; \
    854   1.2  christos 		default: use_default = true; break; \
    855   1.1  christos 		} \
    856   1.1  christos 		break; \
    857   1.1  christos 	case 43: result = compare_ds(rdata1, rdata2); break; \
    858   1.1  christos 	case 44: result = compare_sshfp(rdata1, rdata2); break; \
    859   1.1  christos 	case 45: result = compare_ipseckey(rdata1, rdata2); break; \
    860   1.1  christos 	case 46: result = compare_rrsig(rdata1, rdata2); break; \
    861   1.1  christos 	case 47: result = compare_nsec(rdata1, rdata2); break; \
    862   1.1  christos 	case 48: result = compare_dnskey(rdata1, rdata2); break; \
    863   1.1  christos 	case 49: switch (rdata1->rdclass) { \
    864   1.1  christos 		case 1: result = compare_in_dhcid(rdata1, rdata2); break; \
    865   1.2  christos 		default: use_default = true; break; \
    866   1.1  christos 		} \
    867   1.1  christos 		break; \
    868   1.1  christos 	case 50: result = compare_nsec3(rdata1, rdata2); break; \
    869   1.1  christos 	case 51: result = compare_nsec3param(rdata1, rdata2); break; \
    870   1.1  christos 	case 52: result = compare_tlsa(rdata1, rdata2); break; \
    871   1.1  christos 	case 53: result = compare_smimea(rdata1, rdata2); break; \
    872   1.1  christos 	case 55: result = compare_hip(rdata1, rdata2); break; \
    873   1.1  christos 	case 56: result = compare_ninfo(rdata1, rdata2); break; \
    874   1.1  christos 	case 57: result = compare_rkey(rdata1, rdata2); break; \
    875   1.1  christos 	case 58: result = compare_talink(rdata1, rdata2); break; \
    876   1.1  christos 	case 59: result = compare_cds(rdata1, rdata2); break; \
    877   1.1  christos 	case 60: result = compare_cdnskey(rdata1, rdata2); break; \
    878   1.1  christos 	case 61: result = compare_openpgpkey(rdata1, rdata2); break; \
    879   1.1  christos 	case 62: result = compare_csync(rdata1, rdata2); break; \
    880   1.3  christos 	case 63: result = compare_zonemd(rdata1, rdata2); break; \
    881   1.7  christos 	case 64: switch (rdata1->rdclass) { \
    882   1.7  christos 		case 1: result = compare_in_svcb(rdata1, rdata2); break; \
    883   1.7  christos 		default: use_default = true; break; \
    884   1.7  christos 		} \
    885   1.7  christos 		break; \
    886   1.7  christos 	case 65: switch (rdata1->rdclass) { \
    887   1.7  christos 		case 1: result = compare_in_https(rdata1, rdata2); break; \
    888   1.7  christos 		default: use_default = true; break; \
    889   1.7  christos 		} \
    890   1.7  christos 		break; \
    891  1.12  christos 	case 66: result = compare_dsync(rdata1, rdata2); break; \
    892  1.12  christos 	case 67: result = compare_hhit(rdata1, rdata2); break; \
    893  1.12  christos 	case 68: result = compare_brid(rdata1, rdata2); break; \
    894   1.1  christos 	case 99: result = compare_spf(rdata1, rdata2); break; \
    895   1.1  christos 	case 104: result = compare_nid(rdata1, rdata2); break; \
    896   1.1  christos 	case 105: result = compare_l32(rdata1, rdata2); break; \
    897   1.1  christos 	case 106: result = compare_l64(rdata1, rdata2); break; \
    898   1.1  christos 	case 107: result = compare_lp(rdata1, rdata2); break; \
    899   1.1  christos 	case 108: result = compare_eui48(rdata1, rdata2); break; \
    900   1.1  christos 	case 109: result = compare_eui64(rdata1, rdata2); break; \
    901   1.1  christos 	case 249: result = compare_tkey(rdata1, rdata2); break; \
    902   1.1  christos 	case 250: switch (rdata1->rdclass) { \
    903   1.1  christos 		case 255: result = compare_any_tsig(rdata1, rdata2); break; \
    904   1.2  christos 		default: use_default = true; break; \
    905   1.1  christos 		} \
    906   1.1  christos 		break; \
    907   1.1  christos 	case 256: result = compare_uri(rdata1, rdata2); break; \
    908   1.1  christos 	case 257: result = compare_caa(rdata1, rdata2); break; \
    909   1.1  christos 	case 258: result = compare_avc(rdata1, rdata2); break; \
    910   1.1  christos 	case 259: result = compare_doa(rdata1, rdata2); break; \
    911   1.3  christos 	case 260: result = compare_amtrelay(rdata1, rdata2); break; \
    912  1.10  christos 	case 261: result = compare_resinfo(rdata1, rdata2); break; \
    913  1.11  christos 	case 262: result = compare_wallet(rdata1, rdata2); break; \
    914   1.1  christos 	case 32768: result = compare_ta(rdata1, rdata2); break; \
    915   1.1  christos 	case 32769: result = compare_dlv(rdata1, rdata2); break; \
    916   1.1  christos 	case 65533: result = compare_keydata(rdata1, rdata2); break; \
    917   1.2  christos 	default: use_default = true; break; \
    918   1.1  christos 	}
    919   1.1  christos 
    920   1.1  christos #define CASECOMPARESWITCH \
    921   1.1  christos 	switch (rdata1->type) { \
    922   1.1  christos 	case 1: switch (rdata1->rdclass) { \
    923   1.1  christos 		case 1: result = casecompare_in_a(rdata1, rdata2); break; \
    924   1.1  christos 		case 3: result = casecompare_ch_a(rdata1, rdata2); break; \
    925   1.1  christos 		case 4: result = casecompare_hs_a(rdata1, rdata2); break; \
    926   1.2  christos 		default: use_default = true; break; \
    927   1.1  christos 		} \
    928   1.1  christos 		break; \
    929   1.1  christos 	case 2: result = casecompare_ns(rdata1, rdata2); break; \
    930   1.1  christos 	case 3: result = casecompare_md(rdata1, rdata2); break; \
    931   1.1  christos 	case 4: result = casecompare_mf(rdata1, rdata2); break; \
    932   1.1  christos 	case 5: result = casecompare_cname(rdata1, rdata2); break; \
    933   1.1  christos 	case 6: result = casecompare_soa(rdata1, rdata2); break; \
    934   1.1  christos 	case 7: result = casecompare_mb(rdata1, rdata2); break; \
    935   1.1  christos 	case 8: result = casecompare_mg(rdata1, rdata2); break; \
    936   1.1  christos 	case 9: result = casecompare_mr(rdata1, rdata2); break; \
    937   1.1  christos 	case 10: result = casecompare_null(rdata1, rdata2); break; \
    938   1.1  christos 	case 11: switch (rdata1->rdclass) { \
    939   1.1  christos 		case 1: result = casecompare_in_wks(rdata1, rdata2); break; \
    940   1.2  christos 		default: use_default = true; break; \
    941   1.1  christos 		} \
    942   1.1  christos 		break; \
    943   1.1  christos 	case 12: result = casecompare_ptr(rdata1, rdata2); break; \
    944   1.1  christos 	case 13: result = casecompare_hinfo(rdata1, rdata2); break; \
    945   1.1  christos 	case 14: result = casecompare_minfo(rdata1, rdata2); break; \
    946   1.1  christos 	case 15: result = casecompare_mx(rdata1, rdata2); break; \
    947   1.1  christos 	case 16: result = casecompare_txt(rdata1, rdata2); break; \
    948   1.1  christos 	case 17: result = casecompare_rp(rdata1, rdata2); break; \
    949   1.1  christos 	case 18: result = casecompare_afsdb(rdata1, rdata2); break; \
    950   1.1  christos 	case 19: result = casecompare_x25(rdata1, rdata2); break; \
    951   1.1  christos 	case 20: result = casecompare_isdn(rdata1, rdata2); break; \
    952   1.1  christos 	case 21: result = casecompare_rt(rdata1, rdata2); break; \
    953   1.1  christos 	case 22: switch (rdata1->rdclass) { \
    954   1.1  christos 		case 1: result = casecompare_in_nsap(rdata1, rdata2); break; \
    955   1.2  christos 		default: use_default = true; break; \
    956   1.1  christos 		} \
    957   1.1  christos 		break; \
    958   1.1  christos 	case 23: switch (rdata1->rdclass) { \
    959   1.1  christos 		case 1: result = casecompare_in_nsap_ptr(rdata1, rdata2); break; \
    960   1.2  christos 		default: use_default = true; break; \
    961   1.1  christos 		} \
    962   1.1  christos 		break; \
    963   1.1  christos 	case 24: result = casecompare_sig(rdata1, rdata2); break; \
    964   1.1  christos 	case 25: result = casecompare_key(rdata1, rdata2); break; \
    965   1.1  christos 	case 26: switch (rdata1->rdclass) { \
    966   1.1  christos 		case 1: result = casecompare_in_px(rdata1, rdata2); break; \
    967   1.2  christos 		default: use_default = true; break; \
    968   1.1  christos 		} \
    969   1.1  christos 		break; \
    970   1.1  christos 	case 27: result = casecompare_gpos(rdata1, rdata2); break; \
    971   1.1  christos 	case 28: switch (rdata1->rdclass) { \
    972   1.1  christos 		case 1: result = casecompare_in_aaaa(rdata1, rdata2); break; \
    973   1.2  christos 		default: use_default = true; break; \
    974   1.1  christos 		} \
    975   1.1  christos 		break; \
    976   1.1  christos 	case 29: result = casecompare_loc(rdata1, rdata2); break; \
    977   1.1  christos 	case 30: result = casecompare_nxt(rdata1, rdata2); break; \
    978   1.2  christos 	case 31: switch (rdata1->rdclass) { \
    979   1.2  christos 		case 1: result = casecompare_in_eid(rdata1, rdata2); break; \
    980   1.2  christos 		default: use_default = true; break; \
    981   1.2  christos 		} \
    982   1.2  christos 		break; \
    983   1.2  christos 	case 32: switch (rdata1->rdclass) { \
    984   1.2  christos 		case 1: result = casecompare_in_nimloc(rdata1, rdata2); break; \
    985   1.2  christos 		default: use_default = true; break; \
    986   1.2  christos 		} \
    987   1.2  christos 		break; \
    988   1.1  christos 	case 33: switch (rdata1->rdclass) { \
    989   1.1  christos 		case 1: result = casecompare_in_srv(rdata1, rdata2); break; \
    990   1.2  christos 		default: use_default = true; break; \
    991   1.2  christos 		} \
    992   1.2  christos 		break; \
    993   1.2  christos 	case 34: switch (rdata1->rdclass) { \
    994   1.2  christos 		case 1: result = casecompare_in_atma(rdata1, rdata2); break; \
    995   1.2  christos 		default: use_default = true; break; \
    996   1.1  christos 		} \
    997   1.1  christos 		break; \
    998   1.1  christos 	case 35: result = casecompare_naptr(rdata1, rdata2); break; \
    999   1.1  christos 	case 36: switch (rdata1->rdclass) { \
   1000   1.1  christos 		case 1: result = casecompare_in_kx(rdata1, rdata2); break; \
   1001   1.2  christos 		default: use_default = true; break; \
   1002   1.1  christos 		} \
   1003   1.1  christos 		break; \
   1004   1.1  christos 	case 37: result = casecompare_cert(rdata1, rdata2); break; \
   1005   1.1  christos 	case 38: switch (rdata1->rdclass) { \
   1006   1.1  christos 		case 1: result = casecompare_in_a6(rdata1, rdata2); break; \
   1007   1.2  christos 		default: use_default = true; break; \
   1008   1.1  christos 		} \
   1009   1.1  christos 		break; \
   1010   1.1  christos 	case 39: result = casecompare_dname(rdata1, rdata2); break; \
   1011   1.1  christos 	case 40: result = casecompare_sink(rdata1, rdata2); break; \
   1012   1.1  christos 	case 41: result = casecompare_opt(rdata1, rdata2); break; \
   1013   1.1  christos 	case 42: switch (rdata1->rdclass) { \
   1014   1.1  christos 		case 1: result = casecompare_in_apl(rdata1, rdata2); break; \
   1015   1.2  christos 		default: use_default = true; break; \
   1016   1.1  christos 		} \
   1017   1.1  christos 		break; \
   1018   1.1  christos 	case 43: result = casecompare_ds(rdata1, rdata2); break; \
   1019   1.1  christos 	case 44: result = casecompare_sshfp(rdata1, rdata2); break; \
   1020   1.1  christos 	case 45: result = casecompare_ipseckey(rdata1, rdata2); break; \
   1021   1.1  christos 	case 46: result = casecompare_rrsig(rdata1, rdata2); break; \
   1022   1.1  christos 	case 47: result = casecompare_nsec(rdata1, rdata2); break; \
   1023   1.1  christos 	case 48: result = casecompare_dnskey(rdata1, rdata2); break; \
   1024   1.1  christos 	case 49: switch (rdata1->rdclass) { \
   1025   1.1  christos 		case 1: result = casecompare_in_dhcid(rdata1, rdata2); break; \
   1026   1.2  christos 		default: use_default = true; break; \
   1027   1.1  christos 		} \
   1028   1.1  christos 		break; \
   1029   1.1  christos 	case 50: result = casecompare_nsec3(rdata1, rdata2); break; \
   1030   1.1  christos 	case 51: result = casecompare_nsec3param(rdata1, rdata2); break; \
   1031   1.1  christos 	case 52: result = casecompare_tlsa(rdata1, rdata2); break; \
   1032   1.1  christos 	case 53: result = casecompare_smimea(rdata1, rdata2); break; \
   1033   1.1  christos 	case 55: result = casecompare_hip(rdata1, rdata2); break; \
   1034   1.1  christos 	case 56: result = casecompare_ninfo(rdata1, rdata2); break; \
   1035   1.1  christos 	case 57: result = casecompare_rkey(rdata1, rdata2); break; \
   1036   1.1  christos 	case 58: result = casecompare_talink(rdata1, rdata2); break; \
   1037   1.1  christos 	case 59: result = casecompare_cds(rdata1, rdata2); break; \
   1038   1.1  christos 	case 60: result = casecompare_cdnskey(rdata1, rdata2); break; \
   1039   1.1  christos 	case 61: result = casecompare_openpgpkey(rdata1, rdata2); break; \
   1040   1.1  christos 	case 62: result = casecompare_csync(rdata1, rdata2); break; \
   1041   1.3  christos 	case 63: result = casecompare_zonemd(rdata1, rdata2); break; \
   1042   1.7  christos 	case 64: switch (rdata1->rdclass) { \
   1043   1.7  christos 		case 1: result = casecompare_in_svcb(rdata1, rdata2); break; \
   1044   1.7  christos 		default: use_default = true; break; \
   1045   1.7  christos 		} \
   1046   1.7  christos 		break; \
   1047   1.7  christos 	case 65: switch (rdata1->rdclass) { \
   1048   1.7  christos 		case 1: result = casecompare_in_https(rdata1, rdata2); break; \
   1049   1.7  christos 		default: use_default = true; break; \
   1050   1.7  christos 		} \
   1051   1.7  christos 		break; \
   1052  1.12  christos 	case 66: result = casecompare_dsync(rdata1, rdata2); break; \
   1053  1.12  christos 	case 67: result = casecompare_hhit(rdata1, rdata2); break; \
   1054  1.12  christos 	case 68: result = casecompare_brid(rdata1, rdata2); break; \
   1055   1.1  christos 	case 99: result = casecompare_spf(rdata1, rdata2); break; \
   1056   1.1  christos 	case 104: result = casecompare_nid(rdata1, rdata2); break; \
   1057   1.1  christos 	case 105: result = casecompare_l32(rdata1, rdata2); break; \
   1058   1.1  christos 	case 106: result = casecompare_l64(rdata1, rdata2); break; \
   1059   1.1  christos 	case 107: result = casecompare_lp(rdata1, rdata2); break; \
   1060   1.1  christos 	case 108: result = casecompare_eui48(rdata1, rdata2); break; \
   1061   1.1  christos 	case 109: result = casecompare_eui64(rdata1, rdata2); break; \
   1062   1.1  christos 	case 249: result = casecompare_tkey(rdata1, rdata2); break; \
   1063   1.1  christos 	case 250: switch (rdata1->rdclass) { \
   1064   1.1  christos 		case 255: result = casecompare_any_tsig(rdata1, rdata2); break; \
   1065   1.2  christos 		default: use_default = true; break; \
   1066   1.1  christos 		} \
   1067   1.1  christos 		break; \
   1068   1.1  christos 	case 256: result = casecompare_uri(rdata1, rdata2); break; \
   1069   1.1  christos 	case 257: result = casecompare_caa(rdata1, rdata2); break; \
   1070   1.1  christos 	case 258: result = casecompare_avc(rdata1, rdata2); break; \
   1071   1.1  christos 	case 259: result = casecompare_doa(rdata1, rdata2); break; \
   1072   1.3  christos 	case 260: result = casecompare_amtrelay(rdata1, rdata2); break; \
   1073  1.10  christos 	case 261: result = casecompare_resinfo(rdata1, rdata2); break; \
   1074  1.11  christos 	case 262: result = casecompare_wallet(rdata1, rdata2); break; \
   1075   1.1  christos 	case 32768: result = casecompare_ta(rdata1, rdata2); break; \
   1076   1.1  christos 	case 32769: result = casecompare_dlv(rdata1, rdata2); break; \
   1077   1.1  christos 	case 65533: result = casecompare_keydata(rdata1, rdata2); break; \
   1078   1.2  christos 	default: use_default = true; break; \
   1079   1.1  christos 	}
   1080   1.1  christos 
   1081   1.1  christos #define FROMSTRUCTSWITCH \
   1082   1.1  christos 	switch (type) { \
   1083   1.1  christos 	case 1: switch (rdclass) { \
   1084   1.1  christos 		case 1: result = fromstruct_in_a(rdclass, type, source, target); break; \
   1085   1.1  christos 		case 3: result = fromstruct_ch_a(rdclass, type, source, target); break; \
   1086   1.1  christos 		case 4: result = fromstruct_hs_a(rdclass, type, source, target); break; \
   1087   1.2  christos 		default: use_default = true; break; \
   1088   1.1  christos 		} \
   1089   1.1  christos 		break; \
   1090   1.1  christos 	case 2: result = fromstruct_ns(rdclass, type, source, target); break; \
   1091   1.1  christos 	case 3: result = fromstruct_md(rdclass, type, source, target); break; \
   1092   1.1  christos 	case 4: result = fromstruct_mf(rdclass, type, source, target); break; \
   1093   1.1  christos 	case 5: result = fromstruct_cname(rdclass, type, source, target); break; \
   1094   1.1  christos 	case 6: result = fromstruct_soa(rdclass, type, source, target); break; \
   1095   1.1  christos 	case 7: result = fromstruct_mb(rdclass, type, source, target); break; \
   1096   1.1  christos 	case 8: result = fromstruct_mg(rdclass, type, source, target); break; \
   1097   1.1  christos 	case 9: result = fromstruct_mr(rdclass, type, source, target); break; \
   1098   1.1  christos 	case 10: result = fromstruct_null(rdclass, type, source, target); break; \
   1099   1.1  christos 	case 11: switch (rdclass) { \
   1100   1.1  christos 		case 1: result = fromstruct_in_wks(rdclass, type, source, target); break; \
   1101   1.2  christos 		default: use_default = true; break; \
   1102   1.1  christos 		} \
   1103   1.1  christos 		break; \
   1104   1.1  christos 	case 12: result = fromstruct_ptr(rdclass, type, source, target); break; \
   1105   1.1  christos 	case 13: result = fromstruct_hinfo(rdclass, type, source, target); break; \
   1106   1.1  christos 	case 14: result = fromstruct_minfo(rdclass, type, source, target); break; \
   1107   1.1  christos 	case 15: result = fromstruct_mx(rdclass, type, source, target); break; \
   1108   1.1  christos 	case 16: result = fromstruct_txt(rdclass, type, source, target); break; \
   1109   1.1  christos 	case 17: result = fromstruct_rp(rdclass, type, source, target); break; \
   1110   1.1  christos 	case 18: result = fromstruct_afsdb(rdclass, type, source, target); break; \
   1111   1.1  christos 	case 19: result = fromstruct_x25(rdclass, type, source, target); break; \
   1112   1.1  christos 	case 20: result = fromstruct_isdn(rdclass, type, source, target); break; \
   1113   1.1  christos 	case 21: result = fromstruct_rt(rdclass, type, source, target); break; \
   1114   1.1  christos 	case 22: switch (rdclass) { \
   1115   1.1  christos 		case 1: result = fromstruct_in_nsap(rdclass, type, source, target); break; \
   1116   1.2  christos 		default: use_default = true; break; \
   1117   1.1  christos 		} \
   1118   1.1  christos 		break; \
   1119   1.1  christos 	case 23: switch (rdclass) { \
   1120   1.1  christos 		case 1: result = fromstruct_in_nsap_ptr(rdclass, type, source, target); break; \
   1121   1.2  christos 		default: use_default = true; break; \
   1122   1.1  christos 		} \
   1123   1.1  christos 		break; \
   1124   1.1  christos 	case 24: result = fromstruct_sig(rdclass, type, source, target); break; \
   1125   1.1  christos 	case 25: result = fromstruct_key(rdclass, type, source, target); break; \
   1126   1.1  christos 	case 26: switch (rdclass) { \
   1127   1.1  christos 		case 1: result = fromstruct_in_px(rdclass, type, source, target); break; \
   1128   1.2  christos 		default: use_default = true; break; \
   1129   1.1  christos 		} \
   1130   1.1  christos 		break; \
   1131   1.1  christos 	case 27: result = fromstruct_gpos(rdclass, type, source, target); break; \
   1132   1.1  christos 	case 28: switch (rdclass) { \
   1133   1.1  christos 		case 1: result = fromstruct_in_aaaa(rdclass, type, source, target); break; \
   1134   1.2  christos 		default: use_default = true; break; \
   1135   1.1  christos 		} \
   1136   1.1  christos 		break; \
   1137   1.1  christos 	case 29: result = fromstruct_loc(rdclass, type, source, target); break; \
   1138   1.1  christos 	case 30: result = fromstruct_nxt(rdclass, type, source, target); break; \
   1139   1.2  christos 	case 31: switch (rdclass) { \
   1140   1.2  christos 		case 1: result = fromstruct_in_eid(rdclass, type, source, target); break; \
   1141   1.2  christos 		default: use_default = true; break; \
   1142   1.2  christos 		} \
   1143   1.2  christos 		break; \
   1144   1.2  christos 	case 32: switch (rdclass) { \
   1145   1.2  christos 		case 1: result = fromstruct_in_nimloc(rdclass, type, source, target); break; \
   1146   1.2  christos 		default: use_default = true; break; \
   1147   1.2  christos 		} \
   1148   1.2  christos 		break; \
   1149   1.1  christos 	case 33: switch (rdclass) { \
   1150   1.1  christos 		case 1: result = fromstruct_in_srv(rdclass, type, source, target); break; \
   1151   1.2  christos 		default: use_default = true; break; \
   1152   1.2  christos 		} \
   1153   1.2  christos 		break; \
   1154   1.2  christos 	case 34: switch (rdclass) { \
   1155   1.2  christos 		case 1: result = fromstruct_in_atma(rdclass, type, source, target); break; \
   1156   1.2  christos 		default: use_default = true; break; \
   1157   1.1  christos 		} \
   1158   1.1  christos 		break; \
   1159   1.1  christos 	case 35: result = fromstruct_naptr(rdclass, type, source, target); break; \
   1160   1.1  christos 	case 36: switch (rdclass) { \
   1161   1.1  christos 		case 1: result = fromstruct_in_kx(rdclass, type, source, target); break; \
   1162   1.2  christos 		default: use_default = true; break; \
   1163   1.1  christos 		} \
   1164   1.1  christos 		break; \
   1165   1.1  christos 	case 37: result = fromstruct_cert(rdclass, type, source, target); break; \
   1166   1.1  christos 	case 38: switch (rdclass) { \
   1167   1.1  christos 		case 1: result = fromstruct_in_a6(rdclass, type, source, target); break; \
   1168   1.2  christos 		default: use_default = true; break; \
   1169   1.1  christos 		} \
   1170   1.1  christos 		break; \
   1171   1.1  christos 	case 39: result = fromstruct_dname(rdclass, type, source, target); break; \
   1172   1.1  christos 	case 40: result = fromstruct_sink(rdclass, type, source, target); break; \
   1173   1.1  christos 	case 41: result = fromstruct_opt(rdclass, type, source, target); break; \
   1174   1.1  christos 	case 42: switch (rdclass) { \
   1175   1.1  christos 		case 1: result = fromstruct_in_apl(rdclass, type, source, target); break; \
   1176   1.2  christos 		default: use_default = true; break; \
   1177   1.1  christos 		} \
   1178   1.1  christos 		break; \
   1179   1.1  christos 	case 43: result = fromstruct_ds(rdclass, type, source, target); break; \
   1180   1.1  christos 	case 44: result = fromstruct_sshfp(rdclass, type, source, target); break; \
   1181   1.1  christos 	case 45: result = fromstruct_ipseckey(rdclass, type, source, target); break; \
   1182   1.1  christos 	case 46: result = fromstruct_rrsig(rdclass, type, source, target); break; \
   1183   1.1  christos 	case 47: result = fromstruct_nsec(rdclass, type, source, target); break; \
   1184   1.1  christos 	case 48: result = fromstruct_dnskey(rdclass, type, source, target); break; \
   1185   1.1  christos 	case 49: switch (rdclass) { \
   1186   1.1  christos 		case 1: result = fromstruct_in_dhcid(rdclass, type, source, target); break; \
   1187   1.2  christos 		default: use_default = true; break; \
   1188   1.1  christos 		} \
   1189   1.1  christos 		break; \
   1190   1.1  christos 	case 50: result = fromstruct_nsec3(rdclass, type, source, target); break; \
   1191   1.1  christos 	case 51: result = fromstruct_nsec3param(rdclass, type, source, target); break; \
   1192   1.1  christos 	case 52: result = fromstruct_tlsa(rdclass, type, source, target); break; \
   1193   1.1  christos 	case 53: result = fromstruct_smimea(rdclass, type, source, target); break; \
   1194   1.1  christos 	case 55: result = fromstruct_hip(rdclass, type, source, target); break; \
   1195   1.1  christos 	case 56: result = fromstruct_ninfo(rdclass, type, source, target); break; \
   1196   1.1  christos 	case 57: result = fromstruct_rkey(rdclass, type, source, target); break; \
   1197   1.1  christos 	case 58: result = fromstruct_talink(rdclass, type, source, target); break; \
   1198   1.1  christos 	case 59: result = fromstruct_cds(rdclass, type, source, target); break; \
   1199   1.1  christos 	case 60: result = fromstruct_cdnskey(rdclass, type, source, target); break; \
   1200   1.1  christos 	case 61: result = fromstruct_openpgpkey(rdclass, type, source, target); break; \
   1201   1.1  christos 	case 62: result = fromstruct_csync(rdclass, type, source, target); break; \
   1202   1.3  christos 	case 63: result = fromstruct_zonemd(rdclass, type, source, target); break; \
   1203   1.7  christos 	case 64: switch (rdclass) { \
   1204   1.7  christos 		case 1: result = fromstruct_in_svcb(rdclass, type, source, target); break; \
   1205   1.7  christos 		default: use_default = true; break; \
   1206   1.7  christos 		} \
   1207   1.7  christos 		break; \
   1208   1.7  christos 	case 65: switch (rdclass) { \
   1209   1.7  christos 		case 1: result = fromstruct_in_https(rdclass, type, source, target); break; \
   1210   1.7  christos 		default: use_default = true; break; \
   1211   1.7  christos 		} \
   1212   1.7  christos 		break; \
   1213  1.12  christos 	case 66: result = fromstruct_dsync(rdclass, type, source, target); break; \
   1214  1.12  christos 	case 67: result = fromstruct_hhit(rdclass, type, source, target); break; \
   1215  1.12  christos 	case 68: result = fromstruct_brid(rdclass, type, source, target); break; \
   1216   1.1  christos 	case 99: result = fromstruct_spf(rdclass, type, source, target); break; \
   1217   1.1  christos 	case 104: result = fromstruct_nid(rdclass, type, source, target); break; \
   1218   1.1  christos 	case 105: result = fromstruct_l32(rdclass, type, source, target); break; \
   1219   1.1  christos 	case 106: result = fromstruct_l64(rdclass, type, source, target); break; \
   1220   1.1  christos 	case 107: result = fromstruct_lp(rdclass, type, source, target); break; \
   1221   1.1  christos 	case 108: result = fromstruct_eui48(rdclass, type, source, target); break; \
   1222   1.1  christos 	case 109: result = fromstruct_eui64(rdclass, type, source, target); break; \
   1223   1.1  christos 	case 249: result = fromstruct_tkey(rdclass, type, source, target); break; \
   1224   1.1  christos 	case 250: switch (rdclass) { \
   1225   1.1  christos 		case 255: result = fromstruct_any_tsig(rdclass, type, source, target); break; \
   1226   1.2  christos 		default: use_default = true; break; \
   1227   1.1  christos 		} \
   1228   1.1  christos 		break; \
   1229   1.1  christos 	case 256: result = fromstruct_uri(rdclass, type, source, target); break; \
   1230   1.1  christos 	case 257: result = fromstruct_caa(rdclass, type, source, target); break; \
   1231   1.1  christos 	case 258: result = fromstruct_avc(rdclass, type, source, target); break; \
   1232   1.1  christos 	case 259: result = fromstruct_doa(rdclass, type, source, target); break; \
   1233   1.3  christos 	case 260: result = fromstruct_amtrelay(rdclass, type, source, target); break; \
   1234  1.10  christos 	case 261: result = fromstruct_resinfo(rdclass, type, source, target); break; \
   1235  1.11  christos 	case 262: result = fromstruct_wallet(rdclass, type, source, target); break; \
   1236   1.1  christos 	case 32768: result = fromstruct_ta(rdclass, type, source, target); break; \
   1237   1.1  christos 	case 32769: result = fromstruct_dlv(rdclass, type, source, target); break; \
   1238   1.1  christos 	case 65533: result = fromstruct_keydata(rdclass, type, source, target); break; \
   1239   1.2  christos 	default: use_default = true; break; \
   1240   1.1  christos 	}
   1241   1.1  christos 
   1242   1.1  christos #define TOSTRUCTSWITCH \
   1243   1.1  christos 	switch (rdata->type) { \
   1244   1.1  christos 	case 1: switch (rdata->rdclass) { \
   1245   1.1  christos 		case 1: result = tostruct_in_a(rdata, target, mctx); break; \
   1246   1.1  christos 		case 3: result = tostruct_ch_a(rdata, target, mctx); break; \
   1247   1.1  christos 		case 4: result = tostruct_hs_a(rdata, target, mctx); break; \
   1248   1.2  christos 		default: use_default = true; break; \
   1249   1.1  christos 		} \
   1250   1.1  christos 		break; \
   1251   1.1  christos 	case 2: result = tostruct_ns(rdata, target, mctx); break; \
   1252   1.1  christos 	case 3: result = tostruct_md(rdata, target, mctx); break; \
   1253   1.1  christos 	case 4: result = tostruct_mf(rdata, target, mctx); break; \
   1254   1.1  christos 	case 5: result = tostruct_cname(rdata, target, mctx); break; \
   1255   1.1  christos 	case 6: result = tostruct_soa(rdata, target, mctx); break; \
   1256   1.1  christos 	case 7: result = tostruct_mb(rdata, target, mctx); break; \
   1257   1.1  christos 	case 8: result = tostruct_mg(rdata, target, mctx); break; \
   1258   1.1  christos 	case 9: result = tostruct_mr(rdata, target, mctx); break; \
   1259   1.1  christos 	case 10: result = tostruct_null(rdata, target, mctx); break; \
   1260   1.1  christos 	case 11: switch (rdata->rdclass) { \
   1261   1.1  christos 		case 1: result = tostruct_in_wks(rdata, target, mctx); break; \
   1262   1.2  christos 		default: use_default = true; break; \
   1263   1.1  christos 		} \
   1264   1.1  christos 		break; \
   1265   1.1  christos 	case 12: result = tostruct_ptr(rdata, target, mctx); break; \
   1266   1.1  christos 	case 13: result = tostruct_hinfo(rdata, target, mctx); break; \
   1267   1.1  christos 	case 14: result = tostruct_minfo(rdata, target, mctx); break; \
   1268   1.1  christos 	case 15: result = tostruct_mx(rdata, target, mctx); break; \
   1269   1.1  christos 	case 16: result = tostruct_txt(rdata, target, mctx); break; \
   1270   1.1  christos 	case 17: result = tostruct_rp(rdata, target, mctx); break; \
   1271   1.1  christos 	case 18: result = tostruct_afsdb(rdata, target, mctx); break; \
   1272   1.1  christos 	case 19: result = tostruct_x25(rdata, target, mctx); break; \
   1273   1.1  christos 	case 20: result = tostruct_isdn(rdata, target, mctx); break; \
   1274   1.1  christos 	case 21: result = tostruct_rt(rdata, target, mctx); break; \
   1275   1.1  christos 	case 22: switch (rdata->rdclass) { \
   1276   1.1  christos 		case 1: result = tostruct_in_nsap(rdata, target, mctx); break; \
   1277   1.2  christos 		default: use_default = true; break; \
   1278   1.1  christos 		} \
   1279   1.1  christos 		break; \
   1280   1.1  christos 	case 23: switch (rdata->rdclass) { \
   1281   1.1  christos 		case 1: result = tostruct_in_nsap_ptr(rdata, target, mctx); break; \
   1282   1.2  christos 		default: use_default = true; break; \
   1283   1.1  christos 		} \
   1284   1.1  christos 		break; \
   1285   1.1  christos 	case 24: result = tostruct_sig(rdata, target, mctx); break; \
   1286   1.1  christos 	case 25: result = tostruct_key(rdata, target, mctx); break; \
   1287   1.1  christos 	case 26: switch (rdata->rdclass) { \
   1288   1.1  christos 		case 1: result = tostruct_in_px(rdata, target, mctx); break; \
   1289   1.2  christos 		default: use_default = true; break; \
   1290   1.1  christos 		} \
   1291   1.1  christos 		break; \
   1292   1.1  christos 	case 27: result = tostruct_gpos(rdata, target, mctx); break; \
   1293   1.1  christos 	case 28: switch (rdata->rdclass) { \
   1294   1.1  christos 		case 1: result = tostruct_in_aaaa(rdata, target, mctx); break; \
   1295   1.2  christos 		default: use_default = true; break; \
   1296   1.1  christos 		} \
   1297   1.1  christos 		break; \
   1298   1.1  christos 	case 29: result = tostruct_loc(rdata, target, mctx); break; \
   1299   1.1  christos 	case 30: result = tostruct_nxt(rdata, target, mctx); break; \
   1300   1.2  christos 	case 31: switch (rdata->rdclass) { \
   1301   1.2  christos 		case 1: result = tostruct_in_eid(rdata, target, mctx); break; \
   1302   1.2  christos 		default: use_default = true; break; \
   1303   1.2  christos 		} \
   1304   1.2  christos 		break; \
   1305   1.2  christos 	case 32: switch (rdata->rdclass) { \
   1306   1.2  christos 		case 1: result = tostruct_in_nimloc(rdata, target, mctx); break; \
   1307   1.2  christos 		default: use_default = true; break; \
   1308   1.2  christos 		} \
   1309   1.2  christos 		break; \
   1310   1.1  christos 	case 33: switch (rdata->rdclass) { \
   1311   1.1  christos 		case 1: result = tostruct_in_srv(rdata, target, mctx); break; \
   1312   1.2  christos 		default: use_default = true; break; \
   1313   1.2  christos 		} \
   1314   1.2  christos 		break; \
   1315   1.2  christos 	case 34: switch (rdata->rdclass) { \
   1316   1.2  christos 		case 1: result = tostruct_in_atma(rdata, target, mctx); break; \
   1317   1.2  christos 		default: use_default = true; break; \
   1318   1.1  christos 		} \
   1319   1.1  christos 		break; \
   1320   1.1  christos 	case 35: result = tostruct_naptr(rdata, target, mctx); break; \
   1321   1.1  christos 	case 36: switch (rdata->rdclass) { \
   1322   1.1  christos 		case 1: result = tostruct_in_kx(rdata, target, mctx); break; \
   1323   1.2  christos 		default: use_default = true; break; \
   1324   1.1  christos 		} \
   1325   1.1  christos 		break; \
   1326   1.1  christos 	case 37: result = tostruct_cert(rdata, target, mctx); break; \
   1327   1.1  christos 	case 38: switch (rdata->rdclass) { \
   1328   1.1  christos 		case 1: result = tostruct_in_a6(rdata, target, mctx); break; \
   1329   1.2  christos 		default: use_default = true; break; \
   1330   1.1  christos 		} \
   1331   1.1  christos 		break; \
   1332   1.1  christos 	case 39: result = tostruct_dname(rdata, target, mctx); break; \
   1333   1.1  christos 	case 40: result = tostruct_sink(rdata, target, mctx); break; \
   1334   1.1  christos 	case 41: result = tostruct_opt(rdata, target, mctx); break; \
   1335   1.1  christos 	case 42: switch (rdata->rdclass) { \
   1336   1.1  christos 		case 1: result = tostruct_in_apl(rdata, target, mctx); break; \
   1337   1.2  christos 		default: use_default = true; break; \
   1338   1.1  christos 		} \
   1339   1.1  christos 		break; \
   1340   1.1  christos 	case 43: result = tostruct_ds(rdata, target, mctx); break; \
   1341   1.1  christos 	case 44: result = tostruct_sshfp(rdata, target, mctx); break; \
   1342   1.1  christos 	case 45: result = tostruct_ipseckey(rdata, target, mctx); break; \
   1343   1.1  christos 	case 46: result = tostruct_rrsig(rdata, target, mctx); break; \
   1344   1.1  christos 	case 47: result = tostruct_nsec(rdata, target, mctx); break; \
   1345   1.1  christos 	case 48: result = tostruct_dnskey(rdata, target, mctx); break; \
   1346   1.1  christos 	case 49: switch (rdata->rdclass) { \
   1347   1.1  christos 		case 1: result = tostruct_in_dhcid(rdata, target, mctx); break; \
   1348   1.2  christos 		default: use_default = true; break; \
   1349   1.1  christos 		} \
   1350   1.1  christos 		break; \
   1351   1.1  christos 	case 50: result = tostruct_nsec3(rdata, target, mctx); break; \
   1352   1.1  christos 	case 51: result = tostruct_nsec3param(rdata, target, mctx); break; \
   1353   1.1  christos 	case 52: result = tostruct_tlsa(rdata, target, mctx); break; \
   1354   1.1  christos 	case 53: result = tostruct_smimea(rdata, target, mctx); break; \
   1355   1.1  christos 	case 55: result = tostruct_hip(rdata, target, mctx); break; \
   1356   1.1  christos 	case 56: result = tostruct_ninfo(rdata, target, mctx); break; \
   1357   1.1  christos 	case 57: result = tostruct_rkey(rdata, target, mctx); break; \
   1358   1.1  christos 	case 58: result = tostruct_talink(rdata, target, mctx); break; \
   1359   1.1  christos 	case 59: result = tostruct_cds(rdata, target, mctx); break; \
   1360   1.1  christos 	case 60: result = tostruct_cdnskey(rdata, target, mctx); break; \
   1361   1.1  christos 	case 61: result = tostruct_openpgpkey(rdata, target, mctx); break; \
   1362   1.1  christos 	case 62: result = tostruct_csync(rdata, target, mctx); break; \
   1363   1.3  christos 	case 63: result = tostruct_zonemd(rdata, target, mctx); break; \
   1364   1.7  christos 	case 64: switch (rdata->rdclass) { \
   1365   1.7  christos 		case 1: result = tostruct_in_svcb(rdata, target, mctx); break; \
   1366   1.7  christos 		default: use_default = true; break; \
   1367   1.7  christos 		} \
   1368   1.7  christos 		break; \
   1369   1.7  christos 	case 65: switch (rdata->rdclass) { \
   1370   1.7  christos 		case 1: result = tostruct_in_https(rdata, target, mctx); break; \
   1371   1.7  christos 		default: use_default = true; break; \
   1372   1.7  christos 		} \
   1373   1.7  christos 		break; \
   1374  1.12  christos 	case 66: result = tostruct_dsync(rdata, target, mctx); break; \
   1375  1.12  christos 	case 67: result = tostruct_hhit(rdata, target, mctx); break; \
   1376  1.12  christos 	case 68: result = tostruct_brid(rdata, target, mctx); break; \
   1377   1.1  christos 	case 99: result = tostruct_spf(rdata, target, mctx); break; \
   1378   1.1  christos 	case 104: result = tostruct_nid(rdata, target, mctx); break; \
   1379   1.1  christos 	case 105: result = tostruct_l32(rdata, target, mctx); break; \
   1380   1.1  christos 	case 106: result = tostruct_l64(rdata, target, mctx); break; \
   1381   1.1  christos 	case 107: result = tostruct_lp(rdata, target, mctx); break; \
   1382   1.1  christos 	case 108: result = tostruct_eui48(rdata, target, mctx); break; \
   1383   1.1  christos 	case 109: result = tostruct_eui64(rdata, target, mctx); break; \
   1384   1.1  christos 	case 249: result = tostruct_tkey(rdata, target, mctx); break; \
   1385   1.1  christos 	case 250: switch (rdata->rdclass) { \
   1386   1.1  christos 		case 255: result = tostruct_any_tsig(rdata, target, mctx); break; \
   1387   1.2  christos 		default: use_default = true; break; \
   1388   1.1  christos 		} \
   1389   1.1  christos 		break; \
   1390   1.1  christos 	case 256: result = tostruct_uri(rdata, target, mctx); break; \
   1391   1.1  christos 	case 257: result = tostruct_caa(rdata, target, mctx); break; \
   1392   1.1  christos 	case 258: result = tostruct_avc(rdata, target, mctx); break; \
   1393   1.1  christos 	case 259: result = tostruct_doa(rdata, target, mctx); break; \
   1394   1.3  christos 	case 260: result = tostruct_amtrelay(rdata, target, mctx); break; \
   1395  1.10  christos 	case 261: result = tostruct_resinfo(rdata, target, mctx); break; \
   1396  1.11  christos 	case 262: result = tostruct_wallet(rdata, target, mctx); break; \
   1397   1.1  christos 	case 32768: result = tostruct_ta(rdata, target, mctx); break; \
   1398   1.1  christos 	case 32769: result = tostruct_dlv(rdata, target, mctx); break; \
   1399   1.1  christos 	case 65533: result = tostruct_keydata(rdata, target, mctx); break; \
   1400   1.2  christos 	default: use_default = true; break; \
   1401   1.1  christos 	}
   1402   1.1  christos 
   1403   1.1  christos #define FREESTRUCTSWITCH \
   1404   1.1  christos 	switch (common->rdtype) { \
   1405   1.1  christos 	case 1: switch (common->rdclass) { \
   1406   1.1  christos 		case 1: freestruct_in_a(source); break; \
   1407   1.1  christos 		case 3: freestruct_ch_a(source); break; \
   1408   1.1  christos 		case 4: freestruct_hs_a(source); break; \
   1409   1.1  christos 		default: break; \
   1410   1.1  christos 		} \
   1411   1.1  christos 		break; \
   1412   1.1  christos 	case 2: freestruct_ns(source); break; \
   1413   1.1  christos 	case 3: freestruct_md(source); break; \
   1414   1.1  christos 	case 4: freestruct_mf(source); break; \
   1415   1.1  christos 	case 5: freestruct_cname(source); break; \
   1416   1.1  christos 	case 6: freestruct_soa(source); break; \
   1417   1.1  christos 	case 7: freestruct_mb(source); break; \
   1418   1.1  christos 	case 8: freestruct_mg(source); break; \
   1419   1.1  christos 	case 9: freestruct_mr(source); break; \
   1420   1.1  christos 	case 10: freestruct_null(source); break; \
   1421   1.1  christos 	case 11: switch (common->rdclass) { \
   1422   1.1  christos 		case 1: freestruct_in_wks(source); break; \
   1423   1.1  christos 		default: break; \
   1424   1.1  christos 		} \
   1425   1.1  christos 		break; \
   1426   1.1  christos 	case 12: freestruct_ptr(source); break; \
   1427   1.1  christos 	case 13: freestruct_hinfo(source); break; \
   1428   1.1  christos 	case 14: freestruct_minfo(source); break; \
   1429   1.1  christos 	case 15: freestruct_mx(source); break; \
   1430   1.1  christos 	case 16: freestruct_txt(source); break; \
   1431   1.1  christos 	case 17: freestruct_rp(source); break; \
   1432   1.1  christos 	case 18: freestruct_afsdb(source); break; \
   1433   1.1  christos 	case 19: freestruct_x25(source); break; \
   1434   1.1  christos 	case 20: freestruct_isdn(source); break; \
   1435   1.1  christos 	case 21: freestruct_rt(source); break; \
   1436   1.1  christos 	case 22: switch (common->rdclass) { \
   1437   1.1  christos 		case 1: freestruct_in_nsap(source); break; \
   1438   1.1  christos 		default: break; \
   1439   1.1  christos 		} \
   1440   1.1  christos 		break; \
   1441   1.1  christos 	case 23: switch (common->rdclass) { \
   1442   1.1  christos 		case 1: freestruct_in_nsap_ptr(source); break; \
   1443   1.1  christos 		default: break; \
   1444   1.1  christos 		} \
   1445   1.1  christos 		break; \
   1446   1.1  christos 	case 24: freestruct_sig(source); break; \
   1447   1.1  christos 	case 25: freestruct_key(source); break; \
   1448   1.1  christos 	case 26: switch (common->rdclass) { \
   1449   1.1  christos 		case 1: freestruct_in_px(source); break; \
   1450   1.1  christos 		default: break; \
   1451   1.1  christos 		} \
   1452   1.1  christos 		break; \
   1453   1.1  christos 	case 27: freestruct_gpos(source); break; \
   1454   1.1  christos 	case 28: switch (common->rdclass) { \
   1455   1.1  christos 		case 1: freestruct_in_aaaa(source); break; \
   1456   1.1  christos 		default: break; \
   1457   1.1  christos 		} \
   1458   1.1  christos 		break; \
   1459   1.1  christos 	case 29: freestruct_loc(source); break; \
   1460   1.1  christos 	case 30: freestruct_nxt(source); break; \
   1461   1.2  christos 	case 31: switch (common->rdclass) { \
   1462   1.2  christos 		case 1: freestruct_in_eid(source); break; \
   1463   1.2  christos 		default: break; \
   1464   1.2  christos 		} \
   1465   1.2  christos 		break; \
   1466   1.2  christos 	case 32: switch (common->rdclass) { \
   1467   1.2  christos 		case 1: freestruct_in_nimloc(source); break; \
   1468   1.2  christos 		default: break; \
   1469   1.2  christos 		} \
   1470   1.2  christos 		break; \
   1471   1.1  christos 	case 33: switch (common->rdclass) { \
   1472   1.1  christos 		case 1: freestruct_in_srv(source); break; \
   1473   1.1  christos 		default: break; \
   1474   1.1  christos 		} \
   1475   1.1  christos 		break; \
   1476   1.2  christos 	case 34: switch (common->rdclass) { \
   1477   1.2  christos 		case 1: freestruct_in_atma(source); break; \
   1478   1.2  christos 		default: break; \
   1479   1.2  christos 		} \
   1480   1.2  christos 		break; \
   1481   1.1  christos 	case 35: freestruct_naptr(source); break; \
   1482   1.1  christos 	case 36: switch (common->rdclass) { \
   1483   1.1  christos 		case 1: freestruct_in_kx(source); break; \
   1484   1.1  christos 		default: break; \
   1485   1.1  christos 		} \
   1486   1.1  christos 		break; \
   1487   1.1  christos 	case 37: freestruct_cert(source); break; \
   1488   1.1  christos 	case 38: switch (common->rdclass) { \
   1489   1.1  christos 		case 1: freestruct_in_a6(source); break; \
   1490   1.1  christos 		default: break; \
   1491   1.1  christos 		} \
   1492   1.1  christos 		break; \
   1493   1.1  christos 	case 39: freestruct_dname(source); break; \
   1494   1.1  christos 	case 40: freestruct_sink(source); break; \
   1495   1.1  christos 	case 41: freestruct_opt(source); break; \
   1496   1.1  christos 	case 42: switch (common->rdclass) { \
   1497   1.1  christos 		case 1: freestruct_in_apl(source); break; \
   1498   1.1  christos 		default: break; \
   1499   1.1  christos 		} \
   1500   1.1  christos 		break; \
   1501   1.1  christos 	case 43: freestruct_ds(source); break; \
   1502   1.1  christos 	case 44: freestruct_sshfp(source); break; \
   1503   1.1  christos 	case 45: freestruct_ipseckey(source); break; \
   1504   1.1  christos 	case 46: freestruct_rrsig(source); break; \
   1505   1.1  christos 	case 47: freestruct_nsec(source); break; \
   1506   1.1  christos 	case 48: freestruct_dnskey(source); break; \
   1507   1.1  christos 	case 49: switch (common->rdclass) { \
   1508   1.1  christos 		case 1: freestruct_in_dhcid(source); break; \
   1509   1.1  christos 		default: break; \
   1510   1.1  christos 		} \
   1511   1.1  christos 		break; \
   1512   1.1  christos 	case 50: freestruct_nsec3(source); break; \
   1513   1.1  christos 	case 51: freestruct_nsec3param(source); break; \
   1514   1.1  christos 	case 52: freestruct_tlsa(source); break; \
   1515   1.1  christos 	case 53: freestruct_smimea(source); break; \
   1516   1.1  christos 	case 55: freestruct_hip(source); break; \
   1517   1.1  christos 	case 56: freestruct_ninfo(source); break; \
   1518   1.1  christos 	case 57: freestruct_rkey(source); break; \
   1519   1.1  christos 	case 58: freestruct_talink(source); break; \
   1520   1.1  christos 	case 59: freestruct_cds(source); break; \
   1521   1.1  christos 	case 60: freestruct_cdnskey(source); break; \
   1522   1.1  christos 	case 61: freestruct_openpgpkey(source); break; \
   1523   1.1  christos 	case 62: freestruct_csync(source); break; \
   1524   1.3  christos 	case 63: freestruct_zonemd(source); break; \
   1525   1.7  christos 	case 64: switch (common->rdclass) { \
   1526   1.7  christos 		case 1: freestruct_in_svcb(source); break; \
   1527   1.7  christos 		default: break; \
   1528   1.7  christos 		} \
   1529   1.7  christos 		break; \
   1530   1.7  christos 	case 65: switch (common->rdclass) { \
   1531   1.7  christos 		case 1: freestruct_in_https(source); break; \
   1532   1.7  christos 		default: break; \
   1533   1.7  christos 		} \
   1534   1.7  christos 		break; \
   1535  1.12  christos 	case 66: freestruct_dsync(source); break; \
   1536  1.12  christos 	case 67: freestruct_hhit(source); break; \
   1537  1.12  christos 	case 68: freestruct_brid(source); break; \
   1538   1.1  christos 	case 99: freestruct_spf(source); break; \
   1539   1.1  christos 	case 104: freestruct_nid(source); break; \
   1540   1.1  christos 	case 105: freestruct_l32(source); break; \
   1541   1.1  christos 	case 106: freestruct_l64(source); break; \
   1542   1.1  christos 	case 107: freestruct_lp(source); break; \
   1543   1.1  christos 	case 108: freestruct_eui48(source); break; \
   1544   1.1  christos 	case 109: freestruct_eui64(source); break; \
   1545   1.1  christos 	case 249: freestruct_tkey(source); break; \
   1546   1.1  christos 	case 250: switch (common->rdclass) { \
   1547   1.1  christos 		case 255: freestruct_any_tsig(source); break; \
   1548   1.1  christos 		default: break; \
   1549   1.1  christos 		} \
   1550   1.1  christos 		break; \
   1551   1.1  christos 	case 256: freestruct_uri(source); break; \
   1552   1.1  christos 	case 257: freestruct_caa(source); break; \
   1553   1.1  christos 	case 258: freestruct_avc(source); break; \
   1554   1.1  christos 	case 259: freestruct_doa(source); break; \
   1555   1.3  christos 	case 260: freestruct_amtrelay(source); break; \
   1556  1.10  christos 	case 261: freestruct_resinfo(source); break; \
   1557  1.11  christos 	case 262: freestruct_wallet(source); break; \
   1558   1.1  christos 	case 32768: freestruct_ta(source); break; \
   1559   1.1  christos 	case 32769: freestruct_dlv(source); break; \
   1560   1.1  christos 	case 65533: freestruct_keydata(source); break; \
   1561   1.1  christos 	default: break; \
   1562   1.1  christos 	}
   1563   1.1  christos 
   1564   1.1  christos #define ADDITIONALDATASWITCH \
   1565   1.1  christos 	switch (rdata->type) { \
   1566   1.1  christos 	case 1: switch (rdata->rdclass) { \
   1567   1.9  christos 		case 1: result = additionaldata_in_a(rdata, owner, add, arg); break; \
   1568   1.9  christos 		case 3: result = additionaldata_ch_a(rdata, owner, add, arg); break; \
   1569   1.9  christos 		case 4: result = additionaldata_hs_a(rdata, owner, add, arg); break; \
   1570   1.2  christos 		default: use_default = true; break; \
   1571   1.1  christos 		} \
   1572   1.1  christos 		break; \
   1573   1.9  christos 	case 2: result = additionaldata_ns(rdata, owner, add, arg); break; \
   1574   1.9  christos 	case 3: result = additionaldata_md(rdata, owner, add, arg); break; \
   1575   1.9  christos 	case 4: result = additionaldata_mf(rdata, owner, add, arg); break; \
   1576   1.9  christos 	case 5: result = additionaldata_cname(rdata, owner, add, arg); break; \
   1577   1.9  christos 	case 6: result = additionaldata_soa(rdata, owner, add, arg); break; \
   1578   1.9  christos 	case 7: result = additionaldata_mb(rdata, owner, add, arg); break; \
   1579   1.9  christos 	case 8: result = additionaldata_mg(rdata, owner, add, arg); break; \
   1580   1.9  christos 	case 9: result = additionaldata_mr(rdata, owner, add, arg); break; \
   1581   1.9  christos 	case 10: result = additionaldata_null(rdata, owner, add, arg); break; \
   1582   1.1  christos 	case 11: switch (rdata->rdclass) { \
   1583   1.9  christos 		case 1: result = additionaldata_in_wks(rdata, owner, add, arg); break; \
   1584   1.2  christos 		default: use_default = true; break; \
   1585   1.1  christos 		} \
   1586   1.1  christos 		break; \
   1587   1.9  christos 	case 12: result = additionaldata_ptr(rdata, owner, add, arg); break; \
   1588   1.9  christos 	case 13: result = additionaldata_hinfo(rdata, owner, add, arg); break; \
   1589   1.9  christos 	case 14: result = additionaldata_minfo(rdata, owner, add, arg); break; \
   1590   1.9  christos 	case 15: result = additionaldata_mx(rdata, owner, add, arg); break; \
   1591   1.9  christos 	case 16: result = additionaldata_txt(rdata, owner, add, arg); break; \
   1592   1.9  christos 	case 17: result = additionaldata_rp(rdata, owner, add, arg); break; \
   1593   1.9  christos 	case 18: result = additionaldata_afsdb(rdata, owner, add, arg); break; \
   1594   1.9  christos 	case 19: result = additionaldata_x25(rdata, owner, add, arg); break; \
   1595   1.9  christos 	case 20: result = additionaldata_isdn(rdata, owner, add, arg); break; \
   1596   1.9  christos 	case 21: result = additionaldata_rt(rdata, owner, add, arg); break; \
   1597   1.1  christos 	case 22: switch (rdata->rdclass) { \
   1598   1.9  christos 		case 1: result = additionaldata_in_nsap(rdata, owner, add, arg); break; \
   1599   1.2  christos 		default: use_default = true; break; \
   1600   1.1  christos 		} \
   1601   1.1  christos 		break; \
   1602   1.1  christos 	case 23: switch (rdata->rdclass) { \
   1603   1.9  christos 		case 1: result = additionaldata_in_nsap_ptr(rdata, owner, add, arg); break; \
   1604   1.2  christos 		default: use_default = true; break; \
   1605   1.1  christos 		} \
   1606   1.1  christos 		break; \
   1607   1.9  christos 	case 24: result = additionaldata_sig(rdata, owner, add, arg); break; \
   1608   1.9  christos 	case 25: result = additionaldata_key(rdata, owner, add, arg); break; \
   1609   1.1  christos 	case 26: switch (rdata->rdclass) { \
   1610   1.9  christos 		case 1: result = additionaldata_in_px(rdata, owner, add, arg); break; \
   1611   1.2  christos 		default: use_default = true; break; \
   1612   1.1  christos 		} \
   1613   1.1  christos 		break; \
   1614   1.9  christos 	case 27: result = additionaldata_gpos(rdata, owner, add, arg); break; \
   1615   1.1  christos 	case 28: switch (rdata->rdclass) { \
   1616   1.9  christos 		case 1: result = additionaldata_in_aaaa(rdata, owner, add, arg); break; \
   1617   1.2  christos 		default: use_default = true; break; \
   1618   1.1  christos 		} \
   1619   1.1  christos 		break; \
   1620   1.9  christos 	case 29: result = additionaldata_loc(rdata, owner, add, arg); break; \
   1621   1.9  christos 	case 30: result = additionaldata_nxt(rdata, owner, add, arg); break; \
   1622   1.2  christos 	case 31: switch (rdata->rdclass) { \
   1623   1.9  christos 		case 1: result = additionaldata_in_eid(rdata, owner, add, arg); break; \
   1624   1.2  christos 		default: use_default = true; break; \
   1625   1.2  christos 		} \
   1626   1.2  christos 		break; \
   1627   1.2  christos 	case 32: switch (rdata->rdclass) { \
   1628   1.9  christos 		case 1: result = additionaldata_in_nimloc(rdata, owner, add, arg); break; \
   1629   1.2  christos 		default: use_default = true; break; \
   1630   1.2  christos 		} \
   1631   1.2  christos 		break; \
   1632   1.1  christos 	case 33: switch (rdata->rdclass) { \
   1633   1.9  christos 		case 1: result = additionaldata_in_srv(rdata, owner, add, arg); break; \
   1634   1.2  christos 		default: use_default = true; break; \
   1635   1.2  christos 		} \
   1636   1.2  christos 		break; \
   1637   1.2  christos 	case 34: switch (rdata->rdclass) { \
   1638   1.9  christos 		case 1: result = additionaldata_in_atma(rdata, owner, add, arg); break; \
   1639   1.2  christos 		default: use_default = true; break; \
   1640   1.1  christos 		} \
   1641   1.1  christos 		break; \
   1642   1.9  christos 	case 35: result = additionaldata_naptr(rdata, owner, add, arg); break; \
   1643   1.1  christos 	case 36: switch (rdata->rdclass) { \
   1644   1.9  christos 		case 1: result = additionaldata_in_kx(rdata, owner, add, arg); break; \
   1645   1.2  christos 		default: use_default = true; break; \
   1646   1.1  christos 		} \
   1647   1.1  christos 		break; \
   1648   1.9  christos 	case 37: result = additionaldata_cert(rdata, owner, add, arg); break; \
   1649   1.1  christos 	case 38: switch (rdata->rdclass) { \
   1650   1.9  christos 		case 1: result = additionaldata_in_a6(rdata, owner, add, arg); break; \
   1651   1.2  christos 		default: use_default = true; break; \
   1652   1.1  christos 		} \
   1653   1.1  christos 		break; \
   1654   1.9  christos 	case 39: result = additionaldata_dname(rdata, owner, add, arg); break; \
   1655   1.9  christos 	case 40: result = additionaldata_sink(rdata, owner, add, arg); break; \
   1656   1.9  christos 	case 41: result = additionaldata_opt(rdata, owner, add, arg); break; \
   1657   1.1  christos 	case 42: switch (rdata->rdclass) { \
   1658   1.9  christos 		case 1: result = additionaldata_in_apl(rdata, owner, add, arg); break; \
   1659   1.2  christos 		default: use_default = true; break; \
   1660   1.1  christos 		} \
   1661   1.1  christos 		break; \
   1662   1.9  christos 	case 43: result = additionaldata_ds(rdata, owner, add, arg); break; \
   1663   1.9  christos 	case 44: result = additionaldata_sshfp(rdata, owner, add, arg); break; \
   1664   1.9  christos 	case 45: result = additionaldata_ipseckey(rdata, owner, add, arg); break; \
   1665   1.9  christos 	case 46: result = additionaldata_rrsig(rdata, owner, add, arg); break; \
   1666   1.9  christos 	case 47: result = additionaldata_nsec(rdata, owner, add, arg); break; \
   1667   1.9  christos 	case 48: result = additionaldata_dnskey(rdata, owner, add, arg); break; \
   1668   1.1  christos 	case 49: switch (rdata->rdclass) { \
   1669   1.9  christos 		case 1: result = additionaldata_in_dhcid(rdata, owner, add, arg); break; \
   1670   1.2  christos 		default: use_default = true; break; \
   1671   1.1  christos 		} \
   1672   1.1  christos 		break; \
   1673   1.9  christos 	case 50: result = additionaldata_nsec3(rdata, owner, add, arg); break; \
   1674   1.9  christos 	case 51: result = additionaldata_nsec3param(rdata, owner, add, arg); break; \
   1675   1.9  christos 	case 52: result = additionaldata_tlsa(rdata, owner, add, arg); break; \
   1676   1.9  christos 	case 53: result = additionaldata_smimea(rdata, owner, add, arg); break; \
   1677   1.9  christos 	case 55: result = additionaldata_hip(rdata, owner, add, arg); break; \
   1678   1.9  christos 	case 56: result = additionaldata_ninfo(rdata, owner, add, arg); break; \
   1679   1.9  christos 	case 57: result = additionaldata_rkey(rdata, owner, add, arg); break; \
   1680   1.9  christos 	case 58: result = additionaldata_talink(rdata, owner, add, arg); break; \
   1681   1.9  christos 	case 59: result = additionaldata_cds(rdata, owner, add, arg); break; \
   1682   1.9  christos 	case 60: result = additionaldata_cdnskey(rdata, owner, add, arg); break; \
   1683   1.9  christos 	case 61: result = additionaldata_openpgpkey(rdata, owner, add, arg); break; \
   1684   1.9  christos 	case 62: result = additionaldata_csync(rdata, owner, add, arg); break; \
   1685   1.9  christos 	case 63: result = additionaldata_zonemd(rdata, owner, add, arg); break; \
   1686   1.7  christos 	case 64: switch (rdata->rdclass) { \
   1687   1.9  christos 		case 1: result = additionaldata_in_svcb(rdata, owner, add, arg); break; \
   1688   1.7  christos 		default: use_default = true; break; \
   1689   1.7  christos 		} \
   1690   1.7  christos 		break; \
   1691   1.7  christos 	case 65: switch (rdata->rdclass) { \
   1692   1.9  christos 		case 1: result = additionaldata_in_https(rdata, owner, add, arg); break; \
   1693   1.7  christos 		default: use_default = true; break; \
   1694   1.7  christos 		} \
   1695   1.7  christos 		break; \
   1696  1.12  christos 	case 66: result = additionaldata_dsync(rdata, owner, add, arg); break; \
   1697  1.12  christos 	case 67: result = additionaldata_hhit(rdata, owner, add, arg); break; \
   1698  1.12  christos 	case 68: result = additionaldata_brid(rdata, owner, add, arg); break; \
   1699   1.9  christos 	case 99: result = additionaldata_spf(rdata, owner, add, arg); break; \
   1700   1.9  christos 	case 104: result = additionaldata_nid(rdata, owner, add, arg); break; \
   1701   1.9  christos 	case 105: result = additionaldata_l32(rdata, owner, add, arg); break; \
   1702   1.9  christos 	case 106: result = additionaldata_l64(rdata, owner, add, arg); break; \
   1703   1.9  christos 	case 107: result = additionaldata_lp(rdata, owner, add, arg); break; \
   1704   1.9  christos 	case 108: result = additionaldata_eui48(rdata, owner, add, arg); break; \
   1705   1.9  christos 	case 109: result = additionaldata_eui64(rdata, owner, add, arg); break; \
   1706   1.9  christos 	case 249: result = additionaldata_tkey(rdata, owner, add, arg); break; \
   1707   1.1  christos 	case 250: switch (rdata->rdclass) { \
   1708   1.9  christos 		case 255: result = additionaldata_any_tsig(rdata, owner, add, arg); break; \
   1709   1.2  christos 		default: use_default = true; break; \
   1710   1.1  christos 		} \
   1711   1.1  christos 		break; \
   1712   1.9  christos 	case 256: result = additionaldata_uri(rdata, owner, add, arg); break; \
   1713   1.9  christos 	case 257: result = additionaldata_caa(rdata, owner, add, arg); break; \
   1714   1.9  christos 	case 258: result = additionaldata_avc(rdata, owner, add, arg); break; \
   1715   1.9  christos 	case 259: result = additionaldata_doa(rdata, owner, add, arg); break; \
   1716   1.9  christos 	case 260: result = additionaldata_amtrelay(rdata, owner, add, arg); break; \
   1717  1.10  christos 	case 261: result = additionaldata_resinfo(rdata, owner, add, arg); break; \
   1718  1.11  christos 	case 262: result = additionaldata_wallet(rdata, owner, add, arg); break; \
   1719   1.9  christos 	case 32768: result = additionaldata_ta(rdata, owner, add, arg); break; \
   1720   1.9  christos 	case 32769: result = additionaldata_dlv(rdata, owner, add, arg); break; \
   1721   1.9  christos 	case 65533: result = additionaldata_keydata(rdata, owner, add, arg); break; \
   1722   1.2  christos 	default: use_default = true; break; \
   1723   1.1  christos 	}
   1724   1.1  christos 
   1725   1.1  christos #define DIGESTSWITCH \
   1726   1.1  christos 	switch (rdata->type) { \
   1727   1.1  christos 	case 1: switch (rdata->rdclass) { \
   1728   1.1  christos 		case 1: result = digest_in_a(rdata, digest, arg); break; \
   1729   1.1  christos 		case 3: result = digest_ch_a(rdata, digest, arg); break; \
   1730   1.1  christos 		case 4: result = digest_hs_a(rdata, digest, arg); break; \
   1731   1.2  christos 		default: use_default = true; break; \
   1732   1.1  christos 		} \
   1733   1.1  christos 		break; \
   1734   1.1  christos 	case 2: result = digest_ns(rdata, digest, arg); break; \
   1735   1.1  christos 	case 3: result = digest_md(rdata, digest, arg); break; \
   1736   1.1  christos 	case 4: result = digest_mf(rdata, digest, arg); break; \
   1737   1.1  christos 	case 5: result = digest_cname(rdata, digest, arg); break; \
   1738   1.1  christos 	case 6: result = digest_soa(rdata, digest, arg); break; \
   1739   1.1  christos 	case 7: result = digest_mb(rdata, digest, arg); break; \
   1740   1.1  christos 	case 8: result = digest_mg(rdata, digest, arg); break; \
   1741   1.1  christos 	case 9: result = digest_mr(rdata, digest, arg); break; \
   1742   1.1  christos 	case 10: result = digest_null(rdata, digest, arg); break; \
   1743   1.1  christos 	case 11: switch (rdata->rdclass) { \
   1744   1.1  christos 		case 1: result = digest_in_wks(rdata, digest, arg); break; \
   1745   1.2  christos 		default: use_default = true; break; \
   1746   1.1  christos 		} \
   1747   1.1  christos 		break; \
   1748   1.1  christos 	case 12: result = digest_ptr(rdata, digest, arg); break; \
   1749   1.1  christos 	case 13: result = digest_hinfo(rdata, digest, arg); break; \
   1750   1.1  christos 	case 14: result = digest_minfo(rdata, digest, arg); break; \
   1751   1.1  christos 	case 15: result = digest_mx(rdata, digest, arg); break; \
   1752   1.1  christos 	case 16: result = digest_txt(rdata, digest, arg); break; \
   1753   1.1  christos 	case 17: result = digest_rp(rdata, digest, arg); break; \
   1754   1.1  christos 	case 18: result = digest_afsdb(rdata, digest, arg); break; \
   1755   1.1  christos 	case 19: result = digest_x25(rdata, digest, arg); break; \
   1756   1.1  christos 	case 20: result = digest_isdn(rdata, digest, arg); break; \
   1757   1.1  christos 	case 21: result = digest_rt(rdata, digest, arg); break; \
   1758   1.1  christos 	case 22: switch (rdata->rdclass) { \
   1759   1.1  christos 		case 1: result = digest_in_nsap(rdata, digest, arg); break; \
   1760   1.2  christos 		default: use_default = true; break; \
   1761   1.1  christos 		} \
   1762   1.1  christos 		break; \
   1763   1.1  christos 	case 23: switch (rdata->rdclass) { \
   1764   1.1  christos 		case 1: result = digest_in_nsap_ptr(rdata, digest, arg); break; \
   1765   1.2  christos 		default: use_default = true; break; \
   1766   1.1  christos 		} \
   1767   1.1  christos 		break; \
   1768   1.1  christos 	case 24: result = digest_sig(rdata, digest, arg); break; \
   1769   1.1  christos 	case 25: result = digest_key(rdata, digest, arg); break; \
   1770   1.1  christos 	case 26: switch (rdata->rdclass) { \
   1771   1.1  christos 		case 1: result = digest_in_px(rdata, digest, arg); break; \
   1772   1.2  christos 		default: use_default = true; break; \
   1773   1.1  christos 		} \
   1774   1.1  christos 		break; \
   1775   1.1  christos 	case 27: result = digest_gpos(rdata, digest, arg); break; \
   1776   1.1  christos 	case 28: switch (rdata->rdclass) { \
   1777   1.1  christos 		case 1: result = digest_in_aaaa(rdata, digest, arg); break; \
   1778   1.2  christos 		default: use_default = true; break; \
   1779   1.1  christos 		} \
   1780   1.1  christos 		break; \
   1781   1.1  christos 	case 29: result = digest_loc(rdata, digest, arg); break; \
   1782   1.1  christos 	case 30: result = digest_nxt(rdata, digest, arg); break; \
   1783   1.2  christos 	case 31: switch (rdata->rdclass) { \
   1784   1.2  christos 		case 1: result = digest_in_eid(rdata, digest, arg); break; \
   1785   1.2  christos 		default: use_default = true; break; \
   1786   1.2  christos 		} \
   1787   1.2  christos 		break; \
   1788   1.2  christos 	case 32: switch (rdata->rdclass) { \
   1789   1.2  christos 		case 1: result = digest_in_nimloc(rdata, digest, arg); break; \
   1790   1.2  christos 		default: use_default = true; break; \
   1791   1.2  christos 		} \
   1792   1.2  christos 		break; \
   1793   1.1  christos 	case 33: switch (rdata->rdclass) { \
   1794   1.1  christos 		case 1: result = digest_in_srv(rdata, digest, arg); break; \
   1795   1.2  christos 		default: use_default = true; break; \
   1796   1.2  christos 		} \
   1797   1.2  christos 		break; \
   1798   1.2  christos 	case 34: switch (rdata->rdclass) { \
   1799   1.2  christos 		case 1: result = digest_in_atma(rdata, digest, arg); break; \
   1800   1.2  christos 		default: use_default = true; break; \
   1801   1.1  christos 		} \
   1802   1.1  christos 		break; \
   1803   1.1  christos 	case 35: result = digest_naptr(rdata, digest, arg); break; \
   1804   1.1  christos 	case 36: switch (rdata->rdclass) { \
   1805   1.1  christos 		case 1: result = digest_in_kx(rdata, digest, arg); break; \
   1806   1.2  christos 		default: use_default = true; break; \
   1807   1.1  christos 		} \
   1808   1.1  christos 		break; \
   1809   1.1  christos 	case 37: result = digest_cert(rdata, digest, arg); break; \
   1810   1.1  christos 	case 38: switch (rdata->rdclass) { \
   1811   1.1  christos 		case 1: result = digest_in_a6(rdata, digest, arg); break; \
   1812   1.2  christos 		default: use_default = true; break; \
   1813   1.1  christos 		} \
   1814   1.1  christos 		break; \
   1815   1.1  christos 	case 39: result = digest_dname(rdata, digest, arg); break; \
   1816   1.1  christos 	case 40: result = digest_sink(rdata, digest, arg); break; \
   1817   1.1  christos 	case 41: result = digest_opt(rdata, digest, arg); break; \
   1818   1.1  christos 	case 42: switch (rdata->rdclass) { \
   1819   1.1  christos 		case 1: result = digest_in_apl(rdata, digest, arg); break; \
   1820   1.2  christos 		default: use_default = true; break; \
   1821   1.1  christos 		} \
   1822   1.1  christos 		break; \
   1823   1.1  christos 	case 43: result = digest_ds(rdata, digest, arg); break; \
   1824   1.1  christos 	case 44: result = digest_sshfp(rdata, digest, arg); break; \
   1825   1.1  christos 	case 45: result = digest_ipseckey(rdata, digest, arg); break; \
   1826   1.1  christos 	case 46: result = digest_rrsig(rdata, digest, arg); break; \
   1827   1.1  christos 	case 47: result = digest_nsec(rdata, digest, arg); break; \
   1828   1.1  christos 	case 48: result = digest_dnskey(rdata, digest, arg); break; \
   1829   1.1  christos 	case 49: switch (rdata->rdclass) { \
   1830   1.1  christos 		case 1: result = digest_in_dhcid(rdata, digest, arg); break; \
   1831   1.2  christos 		default: use_default = true; break; \
   1832   1.1  christos 		} \
   1833   1.1  christos 		break; \
   1834   1.1  christos 	case 50: result = digest_nsec3(rdata, digest, arg); break; \
   1835   1.1  christos 	case 51: result = digest_nsec3param(rdata, digest, arg); break; \
   1836   1.1  christos 	case 52: result = digest_tlsa(rdata, digest, arg); break; \
   1837   1.1  christos 	case 53: result = digest_smimea(rdata, digest, arg); break; \
   1838   1.1  christos 	case 55: result = digest_hip(rdata, digest, arg); break; \
   1839   1.1  christos 	case 56: result = digest_ninfo(rdata, digest, arg); break; \
   1840   1.1  christos 	case 57: result = digest_rkey(rdata, digest, arg); break; \
   1841   1.1  christos 	case 58: result = digest_talink(rdata, digest, arg); break; \
   1842   1.1  christos 	case 59: result = digest_cds(rdata, digest, arg); break; \
   1843   1.1  christos 	case 60: result = digest_cdnskey(rdata, digest, arg); break; \
   1844   1.1  christos 	case 61: result = digest_openpgpkey(rdata, digest, arg); break; \
   1845   1.1  christos 	case 62: result = digest_csync(rdata, digest, arg); break; \
   1846   1.3  christos 	case 63: result = digest_zonemd(rdata, digest, arg); break; \
   1847   1.7  christos 	case 64: switch (rdata->rdclass) { \
   1848   1.7  christos 		case 1: result = digest_in_svcb(rdata, digest, arg); break; \
   1849   1.7  christos 		default: use_default = true; break; \
   1850   1.7  christos 		} \
   1851   1.7  christos 		break; \
   1852   1.7  christos 	case 65: switch (rdata->rdclass) { \
   1853   1.7  christos 		case 1: result = digest_in_https(rdata, digest, arg); break; \
   1854   1.7  christos 		default: use_default = true; break; \
   1855   1.7  christos 		} \
   1856   1.7  christos 		break; \
   1857  1.12  christos 	case 66: result = digest_dsync(rdata, digest, arg); break; \
   1858  1.12  christos 	case 67: result = digest_hhit(rdata, digest, arg); break; \
   1859  1.12  christos 	case 68: result = digest_brid(rdata, digest, arg); break; \
   1860   1.1  christos 	case 99: result = digest_spf(rdata, digest, arg); break; \
   1861   1.1  christos 	case 104: result = digest_nid(rdata, digest, arg); break; \
   1862   1.1  christos 	case 105: result = digest_l32(rdata, digest, arg); break; \
   1863   1.1  christos 	case 106: result = digest_l64(rdata, digest, arg); break; \
   1864   1.1  christos 	case 107: result = digest_lp(rdata, digest, arg); break; \
   1865   1.1  christos 	case 108: result = digest_eui48(rdata, digest, arg); break; \
   1866   1.1  christos 	case 109: result = digest_eui64(rdata, digest, arg); break; \
   1867   1.1  christos 	case 249: result = digest_tkey(rdata, digest, arg); break; \
   1868   1.1  christos 	case 250: switch (rdata->rdclass) { \
   1869   1.1  christos 		case 255: result = digest_any_tsig(rdata, digest, arg); break; \
   1870   1.2  christos 		default: use_default = true; break; \
   1871   1.1  christos 		} \
   1872   1.1  christos 		break; \
   1873   1.1  christos 	case 256: result = digest_uri(rdata, digest, arg); break; \
   1874   1.1  christos 	case 257: result = digest_caa(rdata, digest, arg); break; \
   1875   1.1  christos 	case 258: result = digest_avc(rdata, digest, arg); break; \
   1876   1.1  christos 	case 259: result = digest_doa(rdata, digest, arg); break; \
   1877   1.3  christos 	case 260: result = digest_amtrelay(rdata, digest, arg); break; \
   1878  1.10  christos 	case 261: result = digest_resinfo(rdata, digest, arg); break; \
   1879  1.11  christos 	case 262: result = digest_wallet(rdata, digest, arg); break; \
   1880   1.1  christos 	case 32768: result = digest_ta(rdata, digest, arg); break; \
   1881   1.1  christos 	case 32769: result = digest_dlv(rdata, digest, arg); break; \
   1882   1.1  christos 	case 65533: result = digest_keydata(rdata, digest, arg); break; \
   1883   1.2  christos 	default: use_default = true; break; \
   1884   1.1  christos 	}
   1885   1.1  christos 
   1886   1.1  christos #define CHECKOWNERSWITCH \
   1887   1.1  christos 	switch (type) { \
   1888   1.1  christos 	case 1: switch (rdclass) { \
   1889   1.1  christos 		case 1: result = checkowner_in_a(name, rdclass, type, wildcard); break; \
   1890   1.1  christos 		case 3: result = checkowner_ch_a(name, rdclass, type, wildcard); break; \
   1891   1.1  christos 		case 4: result = checkowner_hs_a(name, rdclass, type, wildcard); break; \
   1892   1.2  christos 		default: result = true; break; \
   1893   1.1  christos 		} \
   1894   1.1  christos 		break; \
   1895   1.1  christos 	case 2: result = checkowner_ns(name, rdclass, type, wildcard); break; \
   1896   1.1  christos 	case 3: result = checkowner_md(name, rdclass, type, wildcard); break; \
   1897   1.1  christos 	case 4: result = checkowner_mf(name, rdclass, type, wildcard); break; \
   1898   1.1  christos 	case 5: result = checkowner_cname(name, rdclass, type, wildcard); break; \
   1899   1.1  christos 	case 6: result = checkowner_soa(name, rdclass, type, wildcard); break; \
   1900   1.1  christos 	case 7: result = checkowner_mb(name, rdclass, type, wildcard); break; \
   1901   1.1  christos 	case 8: result = checkowner_mg(name, rdclass, type, wildcard); break; \
   1902   1.1  christos 	case 9: result = checkowner_mr(name, rdclass, type, wildcard); break; \
   1903   1.1  christos 	case 10: result = checkowner_null(name, rdclass, type, wildcard); break; \
   1904   1.1  christos 	case 11: switch (rdclass) { \
   1905   1.1  christos 		case 1: result = checkowner_in_wks(name, rdclass, type, wildcard); break; \
   1906   1.2  christos 		default: result = true; break; \
   1907   1.1  christos 		} \
   1908   1.1  christos 		break; \
   1909   1.1  christos 	case 12: result = checkowner_ptr(name, rdclass, type, wildcard); break; \
   1910   1.1  christos 	case 13: result = checkowner_hinfo(name, rdclass, type, wildcard); break; \
   1911   1.1  christos 	case 14: result = checkowner_minfo(name, rdclass, type, wildcard); break; \
   1912   1.1  christos 	case 15: result = checkowner_mx(name, rdclass, type, wildcard); break; \
   1913   1.1  christos 	case 16: result = checkowner_txt(name, rdclass, type, wildcard); break; \
   1914   1.1  christos 	case 17: result = checkowner_rp(name, rdclass, type, wildcard); break; \
   1915   1.1  christos 	case 18: result = checkowner_afsdb(name, rdclass, type, wildcard); break; \
   1916   1.1  christos 	case 19: result = checkowner_x25(name, rdclass, type, wildcard); break; \
   1917   1.1  christos 	case 20: result = checkowner_isdn(name, rdclass, type, wildcard); break; \
   1918   1.1  christos 	case 21: result = checkowner_rt(name, rdclass, type, wildcard); break; \
   1919   1.1  christos 	case 22: switch (rdclass) { \
   1920   1.1  christos 		case 1: result = checkowner_in_nsap(name, rdclass, type, wildcard); break; \
   1921   1.2  christos 		default: result = true; break; \
   1922   1.1  christos 		} \
   1923   1.1  christos 		break; \
   1924   1.1  christos 	case 23: switch (rdclass) { \
   1925   1.1  christos 		case 1: result = checkowner_in_nsap_ptr(name, rdclass, type, wildcard); break; \
   1926   1.2  christos 		default: result = true; break; \
   1927   1.1  christos 		} \
   1928   1.1  christos 		break; \
   1929   1.1  christos 	case 24: result = checkowner_sig(name, rdclass, type, wildcard); break; \
   1930   1.1  christos 	case 25: result = checkowner_key(name, rdclass, type, wildcard); break; \
   1931   1.1  christos 	case 26: switch (rdclass) { \
   1932   1.1  christos 		case 1: result = checkowner_in_px(name, rdclass, type, wildcard); break; \
   1933   1.2  christos 		default: result = true; break; \
   1934   1.1  christos 		} \
   1935   1.1  christos 		break; \
   1936   1.1  christos 	case 27: result = checkowner_gpos(name, rdclass, type, wildcard); break; \
   1937   1.1  christos 	case 28: switch (rdclass) { \
   1938   1.1  christos 		case 1: result = checkowner_in_aaaa(name, rdclass, type, wildcard); break; \
   1939   1.2  christos 		default: result = true; break; \
   1940   1.1  christos 		} \
   1941   1.1  christos 		break; \
   1942   1.1  christos 	case 29: result = checkowner_loc(name, rdclass, type, wildcard); break; \
   1943   1.1  christos 	case 30: result = checkowner_nxt(name, rdclass, type, wildcard); break; \
   1944   1.2  christos 	case 31: switch (rdclass) { \
   1945   1.2  christos 		case 1: result = checkowner_in_eid(name, rdclass, type, wildcard); break; \
   1946   1.2  christos 		default: result = true; break; \
   1947   1.2  christos 		} \
   1948   1.2  christos 		break; \
   1949   1.2  christos 	case 32: switch (rdclass) { \
   1950   1.2  christos 		case 1: result = checkowner_in_nimloc(name, rdclass, type, wildcard); break; \
   1951   1.2  christos 		default: result = true; break; \
   1952   1.2  christos 		} \
   1953   1.2  christos 		break; \
   1954   1.1  christos 	case 33: switch (rdclass) { \
   1955   1.1  christos 		case 1: result = checkowner_in_srv(name, rdclass, type, wildcard); break; \
   1956   1.2  christos 		default: result = true; break; \
   1957   1.2  christos 		} \
   1958   1.2  christos 		break; \
   1959   1.2  christos 	case 34: switch (rdclass) { \
   1960   1.2  christos 		case 1: result = checkowner_in_atma(name, rdclass, type, wildcard); break; \
   1961   1.2  christos 		default: result = true; break; \
   1962   1.1  christos 		} \
   1963   1.1  christos 		break; \
   1964   1.1  christos 	case 35: result = checkowner_naptr(name, rdclass, type, wildcard); break; \
   1965   1.1  christos 	case 36: switch (rdclass) { \
   1966   1.1  christos 		case 1: result = checkowner_in_kx(name, rdclass, type, wildcard); break; \
   1967   1.2  christos 		default: result = true; break; \
   1968   1.1  christos 		} \
   1969   1.1  christos 		break; \
   1970   1.1  christos 	case 37: result = checkowner_cert(name, rdclass, type, wildcard); break; \
   1971   1.1  christos 	case 38: switch (rdclass) { \
   1972   1.1  christos 		case 1: result = checkowner_in_a6(name, rdclass, type, wildcard); break; \
   1973   1.2  christos 		default: result = true; break; \
   1974   1.1  christos 		} \
   1975   1.1  christos 		break; \
   1976   1.1  christos 	case 39: result = checkowner_dname(name, rdclass, type, wildcard); break; \
   1977   1.1  christos 	case 40: result = checkowner_sink(name, rdclass, type, wildcard); break; \
   1978   1.1  christos 	case 41: result = checkowner_opt(name, rdclass, type, wildcard); break; \
   1979   1.1  christos 	case 42: switch (rdclass) { \
   1980   1.1  christos 		case 1: result = checkowner_in_apl(name, rdclass, type, wildcard); break; \
   1981   1.2  christos 		default: result = true; break; \
   1982   1.1  christos 		} \
   1983   1.1  christos 		break; \
   1984   1.1  christos 	case 43: result = checkowner_ds(name, rdclass, type, wildcard); break; \
   1985   1.1  christos 	case 44: result = checkowner_sshfp(name, rdclass, type, wildcard); break; \
   1986   1.1  christos 	case 45: result = checkowner_ipseckey(name, rdclass, type, wildcard); break; \
   1987   1.1  christos 	case 46: result = checkowner_rrsig(name, rdclass, type, wildcard); break; \
   1988   1.1  christos 	case 47: result = checkowner_nsec(name, rdclass, type, wildcard); break; \
   1989   1.1  christos 	case 48: result = checkowner_dnskey(name, rdclass, type, wildcard); break; \
   1990   1.1  christos 	case 49: switch (rdclass) { \
   1991   1.1  christos 		case 1: result = checkowner_in_dhcid(name, rdclass, type, wildcard); break; \
   1992   1.2  christos 		default: result = true; break; \
   1993   1.1  christos 		} \
   1994   1.1  christos 		break; \
   1995   1.1  christos 	case 50: result = checkowner_nsec3(name, rdclass, type, wildcard); break; \
   1996   1.1  christos 	case 51: result = checkowner_nsec3param(name, rdclass, type, wildcard); break; \
   1997   1.1  christos 	case 52: result = checkowner_tlsa(name, rdclass, type, wildcard); break; \
   1998   1.1  christos 	case 53: result = checkowner_smimea(name, rdclass, type, wildcard); break; \
   1999   1.1  christos 	case 55: result = checkowner_hip(name, rdclass, type, wildcard); break; \
   2000   1.1  christos 	case 56: result = checkowner_ninfo(name, rdclass, type, wildcard); break; \
   2001   1.1  christos 	case 57: result = checkowner_rkey(name, rdclass, type, wildcard); break; \
   2002   1.1  christos 	case 58: result = checkowner_talink(name, rdclass, type, wildcard); break; \
   2003   1.1  christos 	case 59: result = checkowner_cds(name, rdclass, type, wildcard); break; \
   2004   1.1  christos 	case 60: result = checkowner_cdnskey(name, rdclass, type, wildcard); break; \
   2005   1.1  christos 	case 61: result = checkowner_openpgpkey(name, rdclass, type, wildcard); break; \
   2006   1.1  christos 	case 62: result = checkowner_csync(name, rdclass, type, wildcard); break; \
   2007   1.3  christos 	case 63: result = checkowner_zonemd(name, rdclass, type, wildcard); break; \
   2008   1.7  christos 	case 64: switch (rdclass) { \
   2009   1.7  christos 		case 1: result = checkowner_in_svcb(name, rdclass, type, wildcard); break; \
   2010   1.7  christos 		default: result = true; break; \
   2011   1.7  christos 		} \
   2012   1.7  christos 		break; \
   2013   1.7  christos 	case 65: switch (rdclass) { \
   2014   1.7  christos 		case 1: result = checkowner_in_https(name, rdclass, type, wildcard); break; \
   2015   1.7  christos 		default: result = true; break; \
   2016   1.7  christos 		} \
   2017   1.7  christos 		break; \
   2018  1.12  christos 	case 66: result = checkowner_dsync(name, rdclass, type, wildcard); break; \
   2019  1.12  christos 	case 67: result = checkowner_hhit(name, rdclass, type, wildcard); break; \
   2020  1.12  christos 	case 68: result = checkowner_brid(name, rdclass, type, wildcard); break; \
   2021   1.1  christos 	case 99: result = checkowner_spf(name, rdclass, type, wildcard); break; \
   2022   1.1  christos 	case 104: result = checkowner_nid(name, rdclass, type, wildcard); break; \
   2023   1.1  christos 	case 105: result = checkowner_l32(name, rdclass, type, wildcard); break; \
   2024   1.1  christos 	case 106: result = checkowner_l64(name, rdclass, type, wildcard); break; \
   2025   1.1  christos 	case 107: result = checkowner_lp(name, rdclass, type, wildcard); break; \
   2026   1.1  christos 	case 108: result = checkowner_eui48(name, rdclass, type, wildcard); break; \
   2027   1.1  christos 	case 109: result = checkowner_eui64(name, rdclass, type, wildcard); break; \
   2028   1.1  christos 	case 249: result = checkowner_tkey(name, rdclass, type, wildcard); break; \
   2029   1.1  christos 	case 250: switch (rdclass) { \
   2030   1.1  christos 		case 255: result = checkowner_any_tsig(name, rdclass, type, wildcard); break; \
   2031   1.2  christos 		default: result = true; break; \
   2032   1.1  christos 		} \
   2033   1.1  christos 		break; \
   2034   1.1  christos 	case 256: result = checkowner_uri(name, rdclass, type, wildcard); break; \
   2035   1.1  christos 	case 257: result = checkowner_caa(name, rdclass, type, wildcard); break; \
   2036   1.1  christos 	case 258: result = checkowner_avc(name, rdclass, type, wildcard); break; \
   2037   1.1  christos 	case 259: result = checkowner_doa(name, rdclass, type, wildcard); break; \
   2038   1.3  christos 	case 260: result = checkowner_amtrelay(name, rdclass, type, wildcard); break; \
   2039  1.10  christos 	case 261: result = checkowner_resinfo(name, rdclass, type, wildcard); break; \
   2040  1.11  christos 	case 262: result = checkowner_wallet(name, rdclass, type, wildcard); break; \
   2041   1.1  christos 	case 32768: result = checkowner_ta(name, rdclass, type, wildcard); break; \
   2042   1.1  christos 	case 32769: result = checkowner_dlv(name, rdclass, type, wildcard); break; \
   2043   1.1  christos 	case 65533: result = checkowner_keydata(name, rdclass, type, wildcard); break; \
   2044   1.2  christos 	default: result = true; break; \
   2045   1.1  christos 	}
   2046   1.1  christos 
   2047   1.1  christos #define CHECKNAMESSWITCH \
   2048   1.1  christos 	switch (rdata->type) { \
   2049   1.1  christos 	case 1: switch (rdata->rdclass) { \
   2050   1.1  christos 		case 1: result = checknames_in_a(rdata, owner, bad); break; \
   2051   1.1  christos 		case 3: result = checknames_ch_a(rdata, owner, bad); break; \
   2052   1.1  christos 		case 4: result = checknames_hs_a(rdata, owner, bad); break; \
   2053   1.2  christos 		default: result = true; break; \
   2054   1.1  christos 		} \
   2055   1.1  christos 		break; \
   2056   1.1  christos 	case 2: result = checknames_ns(rdata, owner, bad); break; \
   2057   1.1  christos 	case 3: result = checknames_md(rdata, owner, bad); break; \
   2058   1.1  christos 	case 4: result = checknames_mf(rdata, owner, bad); break; \
   2059   1.1  christos 	case 5: result = checknames_cname(rdata, owner, bad); break; \
   2060   1.1  christos 	case 6: result = checknames_soa(rdata, owner, bad); break; \
   2061   1.1  christos 	case 7: result = checknames_mb(rdata, owner, bad); break; \
   2062   1.1  christos 	case 8: result = checknames_mg(rdata, owner, bad); break; \
   2063   1.1  christos 	case 9: result = checknames_mr(rdata, owner, bad); break; \
   2064   1.1  christos 	case 10: result = checknames_null(rdata, owner, bad); break; \
   2065   1.1  christos 	case 11: switch (rdata->rdclass) { \
   2066   1.1  christos 		case 1: result = checknames_in_wks(rdata, owner, bad); break; \
   2067   1.2  christos 		default: result = true; break; \
   2068   1.1  christos 		} \
   2069   1.1  christos 		break; \
   2070   1.1  christos 	case 12: result = checknames_ptr(rdata, owner, bad); break; \
   2071   1.1  christos 	case 13: result = checknames_hinfo(rdata, owner, bad); break; \
   2072   1.1  christos 	case 14: result = checknames_minfo(rdata, owner, bad); break; \
   2073   1.1  christos 	case 15: result = checknames_mx(rdata, owner, bad); break; \
   2074   1.1  christos 	case 16: result = checknames_txt(rdata, owner, bad); break; \
   2075   1.1  christos 	case 17: result = checknames_rp(rdata, owner, bad); break; \
   2076   1.1  christos 	case 18: result = checknames_afsdb(rdata, owner, bad); break; \
   2077   1.1  christos 	case 19: result = checknames_x25(rdata, owner, bad); break; \
   2078   1.1  christos 	case 20: result = checknames_isdn(rdata, owner, bad); break; \
   2079   1.1  christos 	case 21: result = checknames_rt(rdata, owner, bad); break; \
   2080   1.1  christos 	case 22: switch (rdata->rdclass) { \
   2081   1.1  christos 		case 1: result = checknames_in_nsap(rdata, owner, bad); break; \
   2082   1.2  christos 		default: result = true; break; \
   2083   1.1  christos 		} \
   2084   1.1  christos 		break; \
   2085   1.1  christos 	case 23: switch (rdata->rdclass) { \
   2086   1.1  christos 		case 1: result = checknames_in_nsap_ptr(rdata, owner, bad); break; \
   2087   1.2  christos 		default: result = true; break; \
   2088   1.1  christos 		} \
   2089   1.1  christos 		break; \
   2090   1.1  christos 	case 24: result = checknames_sig(rdata, owner, bad); break; \
   2091   1.1  christos 	case 25: result = checknames_key(rdata, owner, bad); break; \
   2092   1.1  christos 	case 26: switch (rdata->rdclass) { \
   2093   1.1  christos 		case 1: result = checknames_in_px(rdata, owner, bad); break; \
   2094   1.2  christos 		default: result = true; break; \
   2095   1.1  christos 		} \
   2096   1.1  christos 		break; \
   2097   1.1  christos 	case 27: result = checknames_gpos(rdata, owner, bad); break; \
   2098   1.1  christos 	case 28: switch (rdata->rdclass) { \
   2099   1.1  christos 		case 1: result = checknames_in_aaaa(rdata, owner, bad); break; \
   2100   1.2  christos 		default: result = true; break; \
   2101   1.1  christos 		} \
   2102   1.1  christos 		break; \
   2103   1.1  christos 	case 29: result = checknames_loc(rdata, owner, bad); break; \
   2104   1.1  christos 	case 30: result = checknames_nxt(rdata, owner, bad); break; \
   2105   1.2  christos 	case 31: switch (rdata->rdclass) { \
   2106   1.2  christos 		case 1: result = checknames_in_eid(rdata, owner, bad); break; \
   2107   1.2  christos 		default: result = true; break; \
   2108   1.2  christos 		} \
   2109   1.2  christos 		break; \
   2110   1.2  christos 	case 32: switch (rdata->rdclass) { \
   2111   1.2  christos 		case 1: result = checknames_in_nimloc(rdata, owner, bad); break; \
   2112   1.2  christos 		default: result = true; break; \
   2113   1.2  christos 		} \
   2114   1.2  christos 		break; \
   2115   1.1  christos 	case 33: switch (rdata->rdclass) { \
   2116   1.1  christos 		case 1: result = checknames_in_srv(rdata, owner, bad); break; \
   2117   1.2  christos 		default: result = true; break; \
   2118   1.2  christos 		} \
   2119   1.2  christos 		break; \
   2120   1.2  christos 	case 34: switch (rdata->rdclass) { \
   2121   1.2  christos 		case 1: result = checknames_in_atma(rdata, owner, bad); break; \
   2122   1.2  christos 		default: result = true; break; \
   2123   1.1  christos 		} \
   2124   1.1  christos 		break; \
   2125   1.1  christos 	case 35: result = checknames_naptr(rdata, owner, bad); break; \
   2126   1.1  christos 	case 36: switch (rdata->rdclass) { \
   2127   1.1  christos 		case 1: result = checknames_in_kx(rdata, owner, bad); break; \
   2128   1.2  christos 		default: result = true; break; \
   2129   1.1  christos 		} \
   2130   1.1  christos 		break; \
   2131   1.1  christos 	case 37: result = checknames_cert(rdata, owner, bad); break; \
   2132   1.1  christos 	case 38: switch (rdata->rdclass) { \
   2133   1.1  christos 		case 1: result = checknames_in_a6(rdata, owner, bad); break; \
   2134   1.2  christos 		default: result = true; break; \
   2135   1.1  christos 		} \
   2136   1.1  christos 		break; \
   2137   1.1  christos 	case 39: result = checknames_dname(rdata, owner, bad); break; \
   2138   1.1  christos 	case 40: result = checknames_sink(rdata, owner, bad); break; \
   2139   1.1  christos 	case 41: result = checknames_opt(rdata, owner, bad); break; \
   2140   1.1  christos 	case 42: switch (rdata->rdclass) { \
   2141   1.1  christos 		case 1: result = checknames_in_apl(rdata, owner, bad); break; \
   2142   1.2  christos 		default: result = true; break; \
   2143   1.1  christos 		} \
   2144   1.1  christos 		break; \
   2145   1.1  christos 	case 43: result = checknames_ds(rdata, owner, bad); break; \
   2146   1.1  christos 	case 44: result = checknames_sshfp(rdata, owner, bad); break; \
   2147   1.1  christos 	case 45: result = checknames_ipseckey(rdata, owner, bad); break; \
   2148   1.1  christos 	case 46: result = checknames_rrsig(rdata, owner, bad); break; \
   2149   1.1  christos 	case 47: result = checknames_nsec(rdata, owner, bad); break; \
   2150   1.1  christos 	case 48: result = checknames_dnskey(rdata, owner, bad); break; \
   2151   1.1  christos 	case 49: switch (rdata->rdclass) { \
   2152   1.1  christos 		case 1: result = checknames_in_dhcid(rdata, owner, bad); break; \
   2153   1.2  christos 		default: result = true; break; \
   2154   1.1  christos 		} \
   2155   1.1  christos 		break; \
   2156   1.1  christos 	case 50: result = checknames_nsec3(rdata, owner, bad); break; \
   2157   1.1  christos 	case 51: result = checknames_nsec3param(rdata, owner, bad); break; \
   2158   1.1  christos 	case 52: result = checknames_tlsa(rdata, owner, bad); break; \
   2159   1.1  christos 	case 53: result = checknames_smimea(rdata, owner, bad); break; \
   2160   1.1  christos 	case 55: result = checknames_hip(rdata, owner, bad); break; \
   2161   1.1  christos 	case 56: result = checknames_ninfo(rdata, owner, bad); break; \
   2162   1.1  christos 	case 57: result = checknames_rkey(rdata, owner, bad); break; \
   2163   1.1  christos 	case 58: result = checknames_talink(rdata, owner, bad); break; \
   2164   1.1  christos 	case 59: result = checknames_cds(rdata, owner, bad); break; \
   2165   1.1  christos 	case 60: result = checknames_cdnskey(rdata, owner, bad); break; \
   2166   1.1  christos 	case 61: result = checknames_openpgpkey(rdata, owner, bad); break; \
   2167   1.1  christos 	case 62: result = checknames_csync(rdata, owner, bad); break; \
   2168   1.3  christos 	case 63: result = checknames_zonemd(rdata, owner, bad); break; \
   2169   1.7  christos 	case 64: switch (rdata->rdclass) { \
   2170   1.7  christos 		case 1: result = checknames_in_svcb(rdata, owner, bad); break; \
   2171   1.7  christos 		default: result = true; break; \
   2172   1.7  christos 		} \
   2173   1.7  christos 		break; \
   2174   1.7  christos 	case 65: switch (rdata->rdclass) { \
   2175   1.7  christos 		case 1: result = checknames_in_https(rdata, owner, bad); break; \
   2176   1.7  christos 		default: result = true; break; \
   2177   1.7  christos 		} \
   2178   1.7  christos 		break; \
   2179  1.12  christos 	case 66: result = checknames_dsync(rdata, owner, bad); break; \
   2180  1.12  christos 	case 67: result = checknames_hhit(rdata, owner, bad); break; \
   2181  1.12  christos 	case 68: result = checknames_brid(rdata, owner, bad); break; \
   2182   1.1  christos 	case 99: result = checknames_spf(rdata, owner, bad); break; \
   2183   1.1  christos 	case 104: result = checknames_nid(rdata, owner, bad); break; \
   2184   1.1  christos 	case 105: result = checknames_l32(rdata, owner, bad); break; \
   2185   1.1  christos 	case 106: result = checknames_l64(rdata, owner, bad); break; \
   2186   1.1  christos 	case 107: result = checknames_lp(rdata, owner, bad); break; \
   2187   1.1  christos 	case 108: result = checknames_eui48(rdata, owner, bad); break; \
   2188   1.1  christos 	case 109: result = checknames_eui64(rdata, owner, bad); break; \
   2189   1.1  christos 	case 249: result = checknames_tkey(rdata, owner, bad); break; \
   2190   1.1  christos 	case 250: switch (rdata->rdclass) { \
   2191   1.1  christos 		case 255: result = checknames_any_tsig(rdata, owner, bad); break; \
   2192   1.2  christos 		default: result = true; break; \
   2193   1.1  christos 		} \
   2194   1.1  christos 		break; \
   2195   1.1  christos 	case 256: result = checknames_uri(rdata, owner, bad); break; \
   2196   1.1  christos 	case 257: result = checknames_caa(rdata, owner, bad); break; \
   2197   1.1  christos 	case 258: result = checknames_avc(rdata, owner, bad); break; \
   2198   1.1  christos 	case 259: result = checknames_doa(rdata, owner, bad); break; \
   2199   1.3  christos 	case 260: result = checknames_amtrelay(rdata, owner, bad); break; \
   2200  1.10  christos 	case 261: result = checknames_resinfo(rdata, owner, bad); break; \
   2201  1.11  christos 	case 262: result = checknames_wallet(rdata, owner, bad); break; \
   2202   1.1  christos 	case 32768: result = checknames_ta(rdata, owner, bad); break; \
   2203   1.1  christos 	case 32769: result = checknames_dlv(rdata, owner, bad); break; \
   2204   1.1  christos 	case 65533: result = checknames_keydata(rdata, owner, bad); break; \
   2205   1.2  christos 	default: result = true; break; \
   2206   1.1  christos 	}
   2207   1.1  christos #define RDATATYPE_COMPARE(_s, _d, _tn, _n, _tp) \
   2208   1.1  christos 	do { \
   2209   1.1  christos 		if (sizeof(_s) - 1 == _n && \
   2210   1.1  christos 		    strncasecmp(_s,(_tn),(sizeof(_s) - 1)) == 0) { \
   2211   1.1  christos 			if ((dns_rdatatype_attributes(_d) & DNS_RDATATYPEATTR_RESERVED) != 0) \
   2212   1.1  christos 				return (ISC_R_NOTIMPLEMENTED); \
   2213   1.1  christos 			*(_tp) = _d; \
   2214   1.1  christos 			return (ISC_R_SUCCESS); \
   2215   1.1  christos 		} \
   2216   1.1  christos 	} while (0)
   2217   1.1  christos 
   2218   1.1  christos #define RDATATYPE_FROMTEXT_SW(_hash,_typename,_length,_typep) \
   2219   1.1  christos 	switch (_hash) { \
   2220   1.1  christos 		case 34: \
   2221   1.2  christos 			RDATATYPE_COMPARE("a", 1, _typename,  _length, _typep); \
   2222   1.1  christos 			break; \
   2223   1.1  christos 		case 80: \
   2224   1.2  christos 			RDATATYPE_COMPARE("ns", 2, _typename,  _length, _typep); \
   2225   1.1  christos 			break; \
   2226   1.1  christos 		case 92: \
   2227   1.2  christos 			RDATATYPE_COMPARE("md", 3, _typename,  _length, _typep); \
   2228   1.1  christos 			break; \
   2229   1.1  christos 		case 58: \
   2230   1.2  christos 			RDATATYPE_COMPARE("mf", 4, _typename,  _length, _typep); \
   2231   1.1  christos 			break; \
   2232   1.1  christos 		case 8: \
   2233   1.2  christos 			RDATATYPE_COMPARE("cname", 5, _typename,  _length, _typep); \
   2234   1.2  christos 			RDATATYPE_COMPARE("mx", 15, _typename,  _length, _typep); \
   2235   1.1  christos 			break; \
   2236   1.1  christos 		case 182: \
   2237   1.2  christos 			RDATATYPE_COMPARE("soa", 6, _typename,  _length, _typep); \
   2238   1.2  christos 			RDATATYPE_COMPARE("ta", 32768, _typename,  _length, _typep); \
   2239   1.1  christos 			break; \
   2240   1.1  christos 		case 126: \
   2241   1.2  christos 			RDATATYPE_COMPARE("mb", 7, _typename,  _length, _typep); \
   2242   1.1  christos 			break; \
   2243   1.1  christos 		case 169: \
   2244   1.2  christos 			RDATATYPE_COMPARE("mg", 8, _typename,  _length, _typep); \
   2245   1.1  christos 			break; \
   2246   1.1  christos 		case 110: \
   2247   1.2  christos 			RDATATYPE_COMPARE("mr", 9, _typename,  _length, _typep); \
   2248   1.2  christos 			RDATATYPE_COMPARE("minfo", 14, _typename,  _length, _typep); \
   2249   1.1  christos 			break; \
   2250   1.1  christos 		case 24: \
   2251   1.2  christos 			RDATATYPE_COMPARE("null", 10, _typename,  _length, _typep); \
   2252   1.2  christos 			RDATATYPE_COMPARE("kx", 36, _typename,  _length, _typep); \
   2253   1.2  christos 			RDATATYPE_COMPARE("nsec3param", 51, _typename,  _length, _typep); \
   2254   1.1  christos 			break; \
   2255   1.1  christos 		case 206: \
   2256   1.2  christos 			RDATATYPE_COMPARE("wks", 11, _typename,  _length, _typep); \
   2257   1.1  christos 			break; \
   2258   1.1  christos 		case 54: \
   2259   1.2  christos 			RDATATYPE_COMPARE("ptr", 12, _typename,  _length, _typep); \
   2260   1.2  christos 			RDATATYPE_COMPARE("naptr", 35, _typename,  _length, _typep); \
   2261   1.1  christos 			break; \
   2262   1.1  christos 		case 67: \
   2263   1.2  christos 			RDATATYPE_COMPARE("hinfo", 13, _typename,  _length, _typep); \
   2264   1.1  christos 			break; \
   2265   1.1  christos 		case 236: \
   2266   1.2  christos 			RDATATYPE_COMPARE("txt", 16, _typename,  _length, _typep); \
   2267   1.1  christos 			break; \
   2268   1.1  christos 		case 192: \
   2269   1.2  christos 			RDATATYPE_COMPARE("rp", 17, _typename,  _length, _typep); \
   2270   1.1  christos 			break; \
   2271   1.1  christos 		case 12: \
   2272   1.2  christos 			RDATATYPE_COMPARE("afsdb", 18, _typename,  _length, _typep); \
   2273   1.1  christos 			break; \
   2274   1.1  christos 		case 119: \
   2275   1.2  christos 			RDATATYPE_COMPARE("x25", 19, _typename,  _length, _typep); \
   2276  1.10  christos 			RDATATYPE_COMPARE("resinfo", 261, _typename,  _length, _typep); \
   2277   1.1  christos 			break; \
   2278   1.1  christos 		case 214: \
   2279   1.2  christos 			RDATATYPE_COMPARE("isdn", 20, _typename,  _length, _typep); \
   2280   1.1  christos 			break; \
   2281   1.1  christos 		case 144: \
   2282   1.2  christos 			RDATATYPE_COMPARE("rt", 21, _typename,  _length, _typep); \
   2283   1.1  christos 			break; \
   2284   1.1  christos 		case 224: \
   2285   1.2  christos 			RDATATYPE_COMPARE("nsap", 22, _typename,  _length, _typep); \
   2286   1.2  christos 			RDATATYPE_COMPARE("uid", 101, _typename,  _length, _typep); \
   2287   1.1  christos 			break; \
   2288   1.1  christos 		case 140: \
   2289   1.2  christos 			RDATATYPE_COMPARE("nsap-ptr", 23, _typename,  _length, _typep); \
   2290   1.2  christos 			RDATATYPE_COMPARE("l64", 106, _typename,  _length, _typep); \
   2291   1.1  christos 			break; \
   2292   1.1  christos 		case 122: \
   2293   1.2  christos 			RDATATYPE_COMPARE("sig", 24, _typename,  _length, _typep); \
   2294   1.2  christos 			RDATATYPE_COMPARE("dlv", 32769, _typename,  _length, _typep); \
   2295   1.1  christos 			break; \
   2296   1.1  christos 		case 254: \
   2297   1.2  christos 			RDATATYPE_COMPARE("key", 25, _typename,  _length, _typep); \
   2298   1.2  christos 			RDATATYPE_COMPARE("talink", 58, _typename,  _length, _typep); \
   2299   1.1  christos 			break; \
   2300   1.1  christos 		case 112: \
   2301   1.2  christos 			RDATATYPE_COMPARE("px", 26, _typename,  _length, _typep); \
   2302   1.1  christos 			break; \
   2303   1.1  christos 		case 17: \
   2304   1.2  christos 			RDATATYPE_COMPARE("gpos", 27, _typename,  _length, _typep); \
   2305   1.1  christos 			break; \
   2306   1.1  christos 		case 69: \
   2307   1.2  christos 			RDATATYPE_COMPARE("aaaa", 28, _typename,  _length, _typep); \
   2308   1.2  christos 			RDATATYPE_COMPARE("atma", 34, _typename,  _length, _typep); \
   2309   1.1  christos 			break; \
   2310   1.1  christos 		case 237: \
   2311   1.2  christos 			RDATATYPE_COMPARE("loc", 29, _typename,  _length, _typep); \
   2312   1.1  christos 			break; \
   2313   1.1  christos 		case 52: \
   2314   1.2  christos 			RDATATYPE_COMPARE("nxt", 30, _typename,  _length, _typep); \
   2315   1.1  christos 			break; \
   2316   1.1  christos 		case 160: \
   2317   1.2  christos 			RDATATYPE_COMPARE("eid", 31, _typename,  _length, _typep); \
   2318   1.1  christos 			break; \
   2319   1.1  christos 		case 220: \
   2320   1.2  christos 			RDATATYPE_COMPARE("nimloc", 32, _typename,  _length, _typep); \
   2321   1.1  christos 			break; \
   2322   1.1  christos 		case 100: \
   2323   1.2  christos 			RDATATYPE_COMPARE("srv", 33, _typename,  _length, _typep); \
   2324   1.1  christos 			break; \
   2325   1.1  christos 		case 172: \
   2326   1.2  christos 			RDATATYPE_COMPARE("cert", 37, _typename,  _length, _typep); \
   2327   1.2  christos 			RDATATYPE_COMPARE("avc", 258, _typename,  _length, _typep); \
   2328   1.1  christos 			break; \
   2329   1.1  christos 		case 226: \
   2330   1.2  christos 			RDATATYPE_COMPARE("a6", 38, _typename,  _length, _typep); \
   2331   1.1  christos 			break; \
   2332   1.1  christos 		case 109: \
   2333   1.2  christos 			RDATATYPE_COMPARE("dname", 39, _typename,  _length, _typep); \
   2334   1.1  christos 			break; \
   2335   1.1  christos 		case 189: \
   2336   1.2  christos 			RDATATYPE_COMPARE("sink", 40, _typename,  _length, _typep); \
   2337   1.1  christos 			break; \
   2338   1.1  christos 		case 168: \
   2339   1.2  christos 			RDATATYPE_COMPARE("opt", 41, _typename,  _length, _typep); \
   2340   1.1  christos 			break; \
   2341   1.1  christos 		case 48: \
   2342   1.2  christos 			RDATATYPE_COMPARE("apl", 42, _typename,  _length, _typep); \
   2343   1.2  christos 			RDATATYPE_COMPARE("eui48", 108, _typename,  _length, _typep); \
   2344   1.1  christos 			break; \
   2345   1.1  christos 		case 210: \
   2346   1.2  christos 			RDATATYPE_COMPARE("ds", 43, _typename,  _length, _typep); \
   2347   1.2  christos 			RDATATYPE_COMPARE("cds", 59, _typename,  _length, _typep); \
   2348   1.1  christos 			break; \
   2349   1.1  christos 		case 128: \
   2350   1.2  christos 			RDATATYPE_COMPARE("sshfp", 44, _typename,  _length, _typep); \
   2351   1.1  christos 			break; \
   2352   1.1  christos 		case 105: \
   2353   1.2  christos 			RDATATYPE_COMPARE("ipseckey", 45, _typename,  _length, _typep); \
   2354   1.1  christos 			break; \
   2355   1.1  christos 		case 225: \
   2356   1.2  christos 			RDATATYPE_COMPARE("rrsig", 46, _typename,  _length, _typep); \
   2357   1.1  christos 			break; \
   2358   1.1  christos 		case 22: \
   2359   1.2  christos 			RDATATYPE_COMPARE("nsec", 47, _typename,  _length, _typep); \
   2360   1.1  christos 			break; \
   2361   1.1  christos 		case 26: \
   2362   1.2  christos 			RDATATYPE_COMPARE("dnskey", 48, _typename,  _length, _typep); \
   2363   1.2  christos 			RDATATYPE_COMPARE("cdnskey", 60, _typename,  _length, _typep); \
   2364   1.1  christos 			break; \
   2365   1.1  christos 		case 4: \
   2366   1.2  christos 			RDATATYPE_COMPARE("dhcid", 49, _typename,  _length, _typep); \
   2367   1.2  christos 			RDATATYPE_COMPARE("spf", 99, _typename,  _length, _typep); \
   2368   1.1  christos 			break; \
   2369   1.1  christos 		case 233: \
   2370   1.2  christos 			RDATATYPE_COMPARE("nsec3", 50, _typename,  _length, _typep); \
   2371   1.1  christos 			break; \
   2372   1.1  christos 		case 120: \
   2373   1.2  christos 			RDATATYPE_COMPARE("tlsa", 52, _typename,  _length, _typep); \
   2374   1.1  christos 			break; \
   2375   1.1  christos 		case 217: \
   2376   1.2  christos 			RDATATYPE_COMPARE("smimea", 53, _typename,  _length, _typep); \
   2377   1.1  christos 			break; \
   2378   1.1  christos 		case 208: \
   2379   1.2  christos 			RDATATYPE_COMPARE("hip", 55, _typename,  _length, _typep); \
   2380   1.1  christos 			break; \
   2381   1.1  christos 		case 221: \
   2382   1.2  christos 			RDATATYPE_COMPARE("ninfo", 56, _typename,  _length, _typep); \
   2383   1.1  christos 			break; \
   2384   1.1  christos 		case 198: \
   2385   1.2  christos 			RDATATYPE_COMPARE("rkey", 57, _typename,  _length, _typep); \
   2386   1.1  christos 			break; \
   2387   1.1  christos 		case 49: \
   2388   1.2  christos 			RDATATYPE_COMPARE("openpgpkey", 61, _typename,  _length, _typep); \
   2389   1.1  christos 			break; \
   2390   1.1  christos 		case 56: \
   2391   1.2  christos 			RDATATYPE_COMPARE("csync", 62, _typename,  _length, _typep); \
   2392   1.2  christos 			RDATATYPE_COMPARE("uri", 256, _typename,  _length, _typep); \
   2393   1.1  christos 			break; \
   2394   1.3  christos 		case 0: \
   2395   1.3  christos 			RDATATYPE_COMPARE("zonemd", 63, _typename,  _length, _typep); \
   2396   1.3  christos 			break; \
   2397   1.7  christos 		case 142: \
   2398   1.7  christos 			RDATATYPE_COMPARE("svcb", 64, _typename,  _length, _typep); \
   2399   1.7  christos 			break; \
   2400   1.7  christos 		case 247: \
   2401   1.7  christos 			RDATATYPE_COMPARE("https", 65, _typename,  _length, _typep); \
   2402   1.7  christos 			break; \
   2403  1.12  christos 		case 155: \
   2404  1.12  christos 			RDATATYPE_COMPARE("dsync", 66, _typename,  _length, _typep); \
   2405  1.12  christos 			break; \
   2406  1.12  christos 		case 240: \
   2407  1.12  christos 			RDATATYPE_COMPARE("hhit", 67, _typename,  _length, _typep); \
   2408  1.12  christos 			break; \
   2409  1.12  christos 		case 216: \
   2410  1.12  christos 			RDATATYPE_COMPARE("brid", 68, _typename,  _length, _typep); \
   2411  1.12  christos 			break; \
   2412   1.1  christos 		case 230: \
   2413   1.2  christos 			RDATATYPE_COMPARE("uinfo", 100, _typename,  _length, _typep); \
   2414   1.1  christos 			break; \
   2415   1.1  christos 		case 104: \
   2416   1.2  christos 			RDATATYPE_COMPARE("gid", 102, _typename,  _length, _typep); \
   2417   1.1  christos 			break; \
   2418   1.1  christos 		case 145: \
   2419   1.2  christos 			RDATATYPE_COMPARE("unspec", 103, _typename,  _length, _typep); \
   2420   1.1  christos 			break; \
   2421   1.1  christos 		case 36: \
   2422   1.2  christos 			RDATATYPE_COMPARE("nid", 104, _typename,  _length, _typep); \
   2423   1.1  christos 			break; \
   2424   1.1  christos 		case 174: \
   2425   1.2  christos 			RDATATYPE_COMPARE("l32", 105, _typename,  _length, _typep); \
   2426   1.1  christos 			break; \
   2427   1.1  christos 		case 32: \
   2428   1.2  christos 			RDATATYPE_COMPARE("lp", 107, _typename,  _length, _typep); \
   2429   1.1  christos 			break; \
   2430   1.1  christos 		case 136: \
   2431   1.2  christos 			RDATATYPE_COMPARE("eui64", 109, _typename,  _length, _typep); \
   2432   1.1  christos 			break; \
   2433   1.1  christos 		case 184: \
   2434   1.2  christos 			RDATATYPE_COMPARE("tkey", 249, _typename,  _length, _typep); \
   2435   1.1  christos 			break; \
   2436   1.1  christos 		case 72: \
   2437   1.2  christos 			RDATATYPE_COMPARE("tsig", 250, _typename,  _length, _typep); \
   2438   1.1  christos 			break; \
   2439   1.1  christos 		case 138: \
   2440   1.2  christos 			RDATATYPE_COMPARE("ixfr", 251, _typename,  _length, _typep); \
   2441   1.1  christos 			break; \
   2442   1.1  christos 		case 250: \
   2443   1.2  christos 			RDATATYPE_COMPARE("axfr", 252, _typename,  _length, _typep); \
   2444   1.1  christos 			break; \
   2445   1.1  christos 		case 164: \
   2446   1.2  christos 			RDATATYPE_COMPARE("mailb", 253, _typename,  _length, _typep); \
   2447  1.11  christos 			RDATATYPE_COMPARE("wallet", 262, _typename,  _length, _typep); \
   2448   1.1  christos 			break; \
   2449   1.1  christos 		case 50: \
   2450   1.2  christos 			RDATATYPE_COMPARE("maila", 254, _typename,  _length, _typep); \
   2451   1.2  christos 			RDATATYPE_COMPARE("keydata", 65533, _typename,  _length, _typep); \
   2452   1.1  christos 			break; \
   2453   1.1  christos 		case 68: \
   2454   1.2  christos 			RDATATYPE_COMPARE("any", 255, _typename,  _length, _typep); \
   2455   1.1  christos 			break; \
   2456   1.1  christos 		case 166: \
   2457   1.2  christos 			RDATATYPE_COMPARE("caa", 257, _typename,  _length, _typep); \
   2458   1.1  christos 			break; \
   2459   1.1  christos 		case 7: \
   2460   1.2  christos 			RDATATYPE_COMPARE("doa", 259, _typename,  _length, _typep); \
   2461   1.1  christos 			break; \
   2462   1.3  christos 		case 161: \
   2463   1.3  christos 			RDATATYPE_COMPARE("amtrelay", 260, _typename,  _length, _typep); \
   2464   1.3  christos 			break; \
   2465   1.1  christos 	}
   2466   1.1  christos #define RDATATYPE_ATTRIBUTE_SW \
   2467   1.1  christos 	switch (type) { \
   2468   1.1  christos 	case 1: return (RRTYPE_A_ATTRIBUTES); \
   2469   1.1  christos 	case 2: return (RRTYPE_NS_ATTRIBUTES); \
   2470   1.1  christos 	case 3: return (RRTYPE_MD_ATTRIBUTES); \
   2471   1.1  christos 	case 4: return (RRTYPE_MF_ATTRIBUTES); \
   2472   1.1  christos 	case 5: return (RRTYPE_CNAME_ATTRIBUTES); \
   2473   1.1  christos 	case 6: return (RRTYPE_SOA_ATTRIBUTES); \
   2474   1.1  christos 	case 7: return (RRTYPE_MB_ATTRIBUTES); \
   2475   1.1  christos 	case 8: return (RRTYPE_MG_ATTRIBUTES); \
   2476   1.1  christos 	case 9: return (RRTYPE_MR_ATTRIBUTES); \
   2477   1.1  christos 	case 10: return (RRTYPE_NULL_ATTRIBUTES); \
   2478   1.1  christos 	case 11: return (RRTYPE_WKS_ATTRIBUTES); \
   2479   1.1  christos 	case 12: return (RRTYPE_PTR_ATTRIBUTES); \
   2480   1.1  christos 	case 13: return (RRTYPE_HINFO_ATTRIBUTES); \
   2481   1.1  christos 	case 14: return (RRTYPE_MINFO_ATTRIBUTES); \
   2482   1.1  christos 	case 15: return (RRTYPE_MX_ATTRIBUTES); \
   2483   1.1  christos 	case 16: return (RRTYPE_TXT_ATTRIBUTES); \
   2484   1.1  christos 	case 17: return (RRTYPE_RP_ATTRIBUTES); \
   2485   1.1  christos 	case 18: return (RRTYPE_AFSDB_ATTRIBUTES); \
   2486   1.1  christos 	case 19: return (RRTYPE_X25_ATTRIBUTES); \
   2487   1.1  christos 	case 20: return (RRTYPE_ISDN_ATTRIBUTES); \
   2488   1.1  christos 	case 21: return (RRTYPE_RT_ATTRIBUTES); \
   2489   1.1  christos 	case 22: return (RRTYPE_NSAP_ATTRIBUTES); \
   2490   1.1  christos 	case 23: return (RRTYPE_NSAP_PTR_ATTRIBUTES); \
   2491   1.1  christos 	case 24: return (RRTYPE_SIG_ATTRIBUTES); \
   2492   1.1  christos 	case 25: return (RRTYPE_KEY_ATTRIBUTES); \
   2493   1.1  christos 	case 26: return (RRTYPE_PX_ATTRIBUTES); \
   2494   1.1  christos 	case 27: return (RRTYPE_GPOS_ATTRIBUTES); \
   2495   1.1  christos 	case 28: return (RRTYPE_AAAA_ATTRIBUTES); \
   2496   1.1  christos 	case 29: return (RRTYPE_LOC_ATTRIBUTES); \
   2497   1.1  christos 	case 30: return (RRTYPE_NXT_ATTRIBUTES); \
   2498   1.2  christos 	case 31: return (RRTYPE_EID_ATTRIBUTES); \
   2499   1.2  christos 	case 32: return (RRTYPE_NIMLOC_ATTRIBUTES); \
   2500   1.1  christos 	case 33: return (RRTYPE_SRV_ATTRIBUTES); \
   2501   1.2  christos 	case 34: return (RRTYPE_ATMA_ATTRIBUTES); \
   2502   1.1  christos 	case 35: return (RRTYPE_NAPTR_ATTRIBUTES); \
   2503   1.1  christos 	case 36: return (RRTYPE_KX_ATTRIBUTES); \
   2504   1.1  christos 	case 37: return (RRTYPE_CERT_ATTRIBUTES); \
   2505   1.1  christos 	case 38: return (RRTYPE_A6_ATTRIBUTES); \
   2506   1.1  christos 	case 39: return (RRTYPE_DNAME_ATTRIBUTES); \
   2507   1.1  christos 	case 40: return (RRTYPE_SINK_ATTRIBUTES); \
   2508   1.1  christos 	case 41: return (RRTYPE_OPT_ATTRIBUTES); \
   2509   1.1  christos 	case 42: return (RRTYPE_APL_ATTRIBUTES); \
   2510   1.1  christos 	case 43: return (RRTYPE_DS_ATTRIBUTES); \
   2511   1.1  christos 	case 44: return (RRTYPE_SSHFP_ATTRIBUTES); \
   2512   1.1  christos 	case 45: return (RRTYPE_IPSECKEY_ATTRIBUTES); \
   2513   1.1  christos 	case 46: return (RRTYPE_RRSIG_ATTRIBUTES); \
   2514   1.1  christos 	case 47: return (RRTYPE_NSEC_ATTRIBUTES); \
   2515   1.1  christos 	case 48: return (RRTYPE_DNSKEY_ATTRIBUTES); \
   2516   1.1  christos 	case 49: return (RRTYPE_DHCID_ATTRIBUTES); \
   2517   1.1  christos 	case 50: return (RRTYPE_NSEC3_ATTRIBUTES); \
   2518   1.1  christos 	case 51: return (RRTYPE_NSEC3PARAM_ATTRIBUTES); \
   2519   1.1  christos 	case 52: return (RRTYPE_TLSA_ATTRIBUTES); \
   2520   1.1  christos 	case 53: return (RRTYPE_SMIMEA_ATTRIBUTES); \
   2521   1.1  christos 	case 55: return (RRTYPE_HIP_ATTRIBUTES); \
   2522   1.1  christos 	case 56: return (RRTYPE_NINFO_ATTRIBUTES); \
   2523   1.1  christos 	case 57: return (RRTYPE_RKEY_ATTRIBUTES); \
   2524   1.1  christos 	case 58: return (RRTYPE_TALINK_ATTRIBUTES); \
   2525   1.1  christos 	case 59: return (RRTYPE_CDS_ATTRIBUTES); \
   2526   1.1  christos 	case 60: return (RRTYPE_CDNSKEY_ATTRIBUTES); \
   2527   1.1  christos 	case 61: return (RRTYPE_OPENPGPKEY_ATTRIBUTES); \
   2528   1.1  christos 	case 62: return (RRTYPE_CSYNC_ATTRIBUTES); \
   2529   1.3  christos 	case 63: return (RRTYPE_ZONEMD_ATTRIBUTES); \
   2530   1.7  christos 	case 64: return (RRTYPE_SVCB_ATTRIBUTES); \
   2531   1.7  christos 	case 65: return (RRTYPE_HTTPS_ATTRIBUTES); \
   2532  1.12  christos 	case 66: return (RRTYPE_DSYNC_ATTRIBUTES); \
   2533  1.12  christos 	case 67: return (RRTYPE_HHIT_ATTRIBUTES); \
   2534  1.12  christos 	case 68: return (RRTYPE_BRID_ATTRIBUTES); \
   2535   1.1  christos 	case 99: return (RRTYPE_SPF_ATTRIBUTES); \
   2536   1.2  christos 	case 100: return (0); \
   2537   1.2  christos 	case 101: return (0); \
   2538   1.2  christos 	case 102: return (0); \
   2539   1.4  christos 	case 103: return (0); \
   2540   1.1  christos 	case 104: return (RRTYPE_NID_ATTRIBUTES); \
   2541   1.1  christos 	case 105: return (RRTYPE_L32_ATTRIBUTES); \
   2542   1.1  christos 	case 106: return (RRTYPE_L64_ATTRIBUTES); \
   2543   1.1  christos 	case 107: return (RRTYPE_LP_ATTRIBUTES); \
   2544   1.1  christos 	case 108: return (RRTYPE_EUI48_ATTRIBUTES); \
   2545   1.1  christos 	case 109: return (RRTYPE_EUI64_ATTRIBUTES); \
   2546   1.1  christos 	case 249: return (RRTYPE_TKEY_ATTRIBUTES); \
   2547   1.1  christos 	case 250: return (RRTYPE_TSIG_ATTRIBUTES); \
   2548   1.1  christos 	case 251: return (DNS_RDATATYPEATTR_META | DNS_RDATATYPEATTR_QUESTIONONLY); \
   2549   1.1  christos 	case 252: return (DNS_RDATATYPEATTR_META | DNS_RDATATYPEATTR_QUESTIONONLY); \
   2550   1.1  christos 	case 253: return (DNS_RDATATYPEATTR_META | DNS_RDATATYPEATTR_QUESTIONONLY); \
   2551   1.1  christos 	case 254: return (DNS_RDATATYPEATTR_META | DNS_RDATATYPEATTR_QUESTIONONLY); \
   2552   1.1  christos 	case 255: return (DNS_RDATATYPEATTR_META | DNS_RDATATYPEATTR_QUESTIONONLY); \
   2553   1.1  christos 	case 256: return (RRTYPE_URI_ATTRIBUTES); \
   2554   1.1  christos 	case 257: return (RRTYPE_CAA_ATTRIBUTES); \
   2555   1.1  christos 	case 258: return (RRTYPE_AVC_ATTRIBUTES); \
   2556   1.1  christos 	case 259: return (RRTYPE_DOA_ATTRIBUTES); \
   2557   1.3  christos 	case 260: return (RRTYPE_AMTRELAY_ATTRIBUTES); \
   2558  1.10  christos 	case 261: return (RRTYPE_RESINFO_ATTRIBUTES); \
   2559  1.11  christos 	case 262: return (RRTYPE_WALLET_ATTRIBUTES); \
   2560   1.1  christos 	case 32768: return (RRTYPE_TA_ATTRIBUTES); \
   2561   1.1  christos 	case 32769: return (RRTYPE_DLV_ATTRIBUTES); \
   2562   1.1  christos 	case 65533: return (RRTYPE_KEYDATA_ATTRIBUTES); \
   2563   1.1  christos 	}
   2564   1.1  christos #define RDATATYPE_TOTEXT_SW \
   2565   1.1  christos 	switch (type) { \
   2566   1.1  christos 	case 1: return (str_totext("A", target)); \
   2567   1.1  christos 	case 2: return (str_totext("NS", target)); \
   2568   1.1  christos 	case 3: return (str_totext("MD", target)); \
   2569   1.1  christos 	case 4: return (str_totext("MF", target)); \
   2570   1.1  christos 	case 5: return (str_totext("CNAME", target)); \
   2571   1.1  christos 	case 6: return (str_totext("SOA", target)); \
   2572   1.1  christos 	case 7: return (str_totext("MB", target)); \
   2573   1.1  christos 	case 8: return (str_totext("MG", target)); \
   2574   1.1  christos 	case 9: return (str_totext("MR", target)); \
   2575   1.1  christos 	case 10: return (str_totext("NULL", target)); \
   2576   1.1  christos 	case 11: return (str_totext("WKS", target)); \
   2577   1.1  christos 	case 12: return (str_totext("PTR", target)); \
   2578   1.1  christos 	case 13: return (str_totext("HINFO", target)); \
   2579   1.1  christos 	case 14: return (str_totext("MINFO", target)); \
   2580   1.1  christos 	case 15: return (str_totext("MX", target)); \
   2581   1.1  christos 	case 16: return (str_totext("TXT", target)); \
   2582   1.1  christos 	case 17: return (str_totext("RP", target)); \
   2583   1.1  christos 	case 18: return (str_totext("AFSDB", target)); \
   2584   1.1  christos 	case 19: return (str_totext("X25", target)); \
   2585   1.1  christos 	case 20: return (str_totext("ISDN", target)); \
   2586   1.1  christos 	case 21: return (str_totext("RT", target)); \
   2587   1.1  christos 	case 22: return (str_totext("NSAP", target)); \
   2588   1.1  christos 	case 23: return (str_totext("NSAP-PTR", target)); \
   2589   1.1  christos 	case 24: return (str_totext("SIG", target)); \
   2590   1.1  christos 	case 25: return (str_totext("KEY", target)); \
   2591   1.1  christos 	case 26: return (str_totext("PX", target)); \
   2592   1.1  christos 	case 27: return (str_totext("GPOS", target)); \
   2593   1.1  christos 	case 28: return (str_totext("AAAA", target)); \
   2594   1.1  christos 	case 29: return (str_totext("LOC", target)); \
   2595   1.1  christos 	case 30: return (str_totext("NXT", target)); \
   2596   1.1  christos 	case 31: return (str_totext("EID", target)); \
   2597   1.1  christos 	case 32: return (str_totext("NIMLOC", target)); \
   2598   1.1  christos 	case 33: return (str_totext("SRV", target)); \
   2599   1.1  christos 	case 34: return (str_totext("ATMA", target)); \
   2600   1.1  christos 	case 35: return (str_totext("NAPTR", target)); \
   2601   1.1  christos 	case 36: return (str_totext("KX", target)); \
   2602   1.1  christos 	case 37: return (str_totext("CERT", target)); \
   2603   1.1  christos 	case 38: return (str_totext("A6", target)); \
   2604   1.1  christos 	case 39: return (str_totext("DNAME", target)); \
   2605   1.1  christos 	case 40: return (str_totext("SINK", target)); \
   2606   1.1  christos 	case 41: return (str_totext("OPT", target)); \
   2607   1.1  christos 	case 42: return (str_totext("APL", target)); \
   2608   1.1  christos 	case 43: return (str_totext("DS", target)); \
   2609   1.1  christos 	case 44: return (str_totext("SSHFP", target)); \
   2610   1.1  christos 	case 45: return (str_totext("IPSECKEY", target)); \
   2611   1.1  christos 	case 46: return (str_totext("RRSIG", target)); \
   2612   1.1  christos 	case 47: return (str_totext("NSEC", target)); \
   2613   1.1  christos 	case 48: return (str_totext("DNSKEY", target)); \
   2614   1.1  christos 	case 49: return (str_totext("DHCID", target)); \
   2615   1.1  christos 	case 50: return (str_totext("NSEC3", target)); \
   2616   1.1  christos 	case 51: return (str_totext("NSEC3PARAM", target)); \
   2617   1.1  christos 	case 52: return (str_totext("TLSA", target)); \
   2618   1.1  christos 	case 53: return (str_totext("SMIMEA", target)); \
   2619   1.1  christos 	case 55: return (str_totext("HIP", target)); \
   2620   1.1  christos 	case 56: return (str_totext("NINFO", target)); \
   2621   1.1  christos 	case 57: return (str_totext("RKEY", target)); \
   2622   1.1  christos 	case 58: return (str_totext("TALINK", target)); \
   2623   1.1  christos 	case 59: return (str_totext("CDS", target)); \
   2624   1.1  christos 	case 60: return (str_totext("CDNSKEY", target)); \
   2625   1.1  christos 	case 61: return (str_totext("OPENPGPKEY", target)); \
   2626   1.1  christos 	case 62: return (str_totext("CSYNC", target)); \
   2627   1.3  christos 	case 63: return (str_totext("ZONEMD", target)); \
   2628   1.7  christos 	case 64: return (str_totext("SVCB", target)); \
   2629   1.7  christos 	case 65: return (str_totext("HTTPS", target)); \
   2630  1.12  christos 	case 66: return (str_totext("DSYNC", target)); \
   2631  1.12  christos 	case 67: return (str_totext("HHIT", target)); \
   2632  1.12  christos 	case 68: return (str_totext("BRID", target)); \
   2633   1.1  christos 	case 99: return (str_totext("SPF", target)); \
   2634   1.1  christos 	case 100: return (str_totext("UINFO", target)); \
   2635   1.1  christos 	case 101: return (str_totext("UID", target)); \
   2636   1.1  christos 	case 102: return (str_totext("GID", target)); \
   2637   1.1  christos 	case 103: return (str_totext("UNSPEC", target)); \
   2638   1.1  christos 	case 104: return (str_totext("NID", target)); \
   2639   1.1  christos 	case 105: return (str_totext("L32", target)); \
   2640   1.1  christos 	case 106: return (str_totext("L64", target)); \
   2641   1.1  christos 	case 107: return (str_totext("LP", target)); \
   2642   1.1  christos 	case 108: return (str_totext("EUI48", target)); \
   2643   1.1  christos 	case 109: return (str_totext("EUI64", target)); \
   2644   1.1  christos 	case 249: return (str_totext("TKEY", target)); \
   2645   1.1  christos 	case 250: return (str_totext("TSIG", target)); \
   2646   1.1  christos 	case 251: return (str_totext("IXFR", target)); \
   2647   1.1  christos 	case 252: return (str_totext("AXFR", target)); \
   2648   1.1  christos 	case 253: return (str_totext("MAILB", target)); \
   2649   1.1  christos 	case 254: return (str_totext("MAILA", target)); \
   2650   1.1  christos 	case 255: return (str_totext("ANY", target)); \
   2651   1.1  christos 	case 256: return (str_totext("URI", target)); \
   2652   1.1  christos 	case 257: return (str_totext("CAA", target)); \
   2653   1.1  christos 	case 258: return (str_totext("AVC", target)); \
   2654   1.1  christos 	case 259: return (str_totext("DOA", target)); \
   2655   1.3  christos 	case 260: return (str_totext("AMTRELAY", target)); \
   2656  1.10  christos 	case 261: return (str_totext("RESINFO", target)); \
   2657  1.11  christos 	case 262: return (str_totext("WALLET", target)); \
   2658   1.1  christos 	case 32768: return (str_totext("TA", target)); \
   2659   1.1  christos 	case 32769: return (str_totext("DLV", target)); \
   2660   1.1  christos 	}
   2661