1 /* $NetBSD: dlv_32769.c,v 1.10 2025/01/26 16:25:30 christos Exp $ */ 2 3 /* 4 * Copyright (C) Internet Systems Consortium, Inc. ("ISC") 5 * 6 * SPDX-License-Identifier: MPL-2.0 7 * 8 * This Source Code Form is subject to the terms of the Mozilla Public 9 * License, v. 2.0. If a copy of the MPL was not distributed with this 10 * file, you can obtain one at https://mozilla.org/MPL/2.0/. 11 * 12 * See the COPYRIGHT file distributed with this work for additional 13 * information regarding copyright ownership. 14 */ 15 16 /* RFC3658 */ 17 18 #ifndef RDATA_GENERIC_DLV_32769_C 19 #define RDATA_GENERIC_DLV_32769_C 20 21 #define RRTYPE_DLV_ATTRIBUTES 0 22 23 #include <dns/ds.h> 24 25 static isc_result_t 26 fromtext_dlv(ARGS_FROMTEXT) { 27 REQUIRE(type == dns_rdatatype_dlv); 28 29 return generic_fromtext_ds(CALL_FROMTEXT); 30 } 31 32 static isc_result_t 33 totext_dlv(ARGS_TOTEXT) { 34 REQUIRE(rdata != NULL); 35 REQUIRE(rdata->type == dns_rdatatype_dlv); 36 37 return generic_totext_ds(CALL_TOTEXT); 38 } 39 40 static isc_result_t 41 fromwire_dlv(ARGS_FROMWIRE) { 42 REQUIRE(type == dns_rdatatype_dlv); 43 44 return generic_fromwire_ds(CALL_FROMWIRE); 45 } 46 47 static isc_result_t 48 towire_dlv(ARGS_TOWIRE) { 49 isc_region_t sr; 50 51 REQUIRE(rdata->type == dns_rdatatype_dlv); 52 REQUIRE(rdata->length != 0); 53 54 UNUSED(cctx); 55 56 dns_rdata_toregion(rdata, &sr); 57 return mem_tobuffer(target, sr.base, sr.length); 58 } 59 60 static int 61 compare_dlv(ARGS_COMPARE) { 62 isc_region_t r1; 63 isc_region_t r2; 64 65 REQUIRE(rdata1->type == rdata2->type); 66 REQUIRE(rdata1->rdclass == rdata2->rdclass); 67 REQUIRE(rdata1->type == dns_rdatatype_dlv); 68 REQUIRE(rdata1->length != 0); 69 REQUIRE(rdata2->length != 0); 70 71 dns_rdata_toregion(rdata1, &r1); 72 dns_rdata_toregion(rdata2, &r2); 73 return isc_region_compare(&r1, &r2); 74 } 75 76 static isc_result_t 77 fromstruct_dlv(ARGS_FROMSTRUCT) { 78 REQUIRE(type == dns_rdatatype_dlv); 79 80 return generic_fromstruct_ds(CALL_FROMSTRUCT); 81 } 82 83 static isc_result_t 84 tostruct_dlv(ARGS_TOSTRUCT) { 85 dns_rdata_dlv_t *dlv = target; 86 87 REQUIRE(rdata->type == dns_rdatatype_dlv); 88 REQUIRE(dlv != NULL); 89 90 dlv->common.rdclass = rdata->rdclass; 91 dlv->common.rdtype = rdata->type; 92 ISC_LINK_INIT(&dlv->common, link); 93 94 return generic_tostruct_ds(CALL_TOSTRUCT); 95 } 96 97 static void 98 freestruct_dlv(ARGS_FREESTRUCT) { 99 dns_rdata_dlv_t *dlv = source; 100 101 REQUIRE(dlv != NULL); 102 REQUIRE(dlv->common.rdtype == dns_rdatatype_dlv); 103 104 if (dlv->mctx == NULL) { 105 return; 106 } 107 108 if (dlv->digest != NULL) { 109 isc_mem_free(dlv->mctx, dlv->digest); 110 } 111 dlv->mctx = NULL; 112 } 113 114 static isc_result_t 115 additionaldata_dlv(ARGS_ADDLDATA) { 116 REQUIRE(rdata->type == dns_rdatatype_dlv); 117 118 UNUSED(rdata); 119 UNUSED(owner); 120 UNUSED(add); 121 UNUSED(arg); 122 123 return ISC_R_SUCCESS; 124 } 125 126 static isc_result_t 127 digest_dlv(ARGS_DIGEST) { 128 isc_region_t r; 129 130 REQUIRE(rdata->type == dns_rdatatype_dlv); 131 132 dns_rdata_toregion(rdata, &r); 133 134 return (digest)(arg, &r); 135 } 136 137 static bool 138 checkowner_dlv(ARGS_CHECKOWNER) { 139 REQUIRE(type == dns_rdatatype_dlv); 140 141 UNUSED(name); 142 UNUSED(type); 143 UNUSED(rdclass); 144 UNUSED(wildcard); 145 146 return true; 147 } 148 149 static bool 150 checknames_dlv(ARGS_CHECKNAMES) { 151 REQUIRE(rdata->type == dns_rdatatype_dlv); 152 153 UNUSED(rdata); 154 UNUSED(owner); 155 UNUSED(bad); 156 157 return true; 158 } 159 160 static int 161 casecompare_dlv(ARGS_COMPARE) { 162 return compare_dlv(rdata1, rdata2); 163 } 164 165 #endif /* RDATA_GENERIC_DLV_32769_C */ 166