reslove: Refactor DNS Answer to support 'until' in DnsAnswerItem

Prepare for mDNS browse services to facilitate scheduled cache
maintenance queries when browsing for services.

Introduce dns_answer_add_full() and dns_answer_add_extend_full()
to explicitly handle the 'until' argument, enabling fine-grained control
over the time property of DNS answers.

Ensure backward compatibility while providing the flexibility to
specify 'until' for specific cases when needed

Co-authored-by: Vishwanath Chandapur <vishwanath.chandapur@philips.com>
This commit is contained in:
Vishal Chillara Srinivas
2025-07-14 14:50:03 +05:30
co-authored by Vishwanath Chandapur
parent 108bd5c297
commit f7d5177dd2
3 changed files with 27 additions and 11 deletions
+13 -8
View File
@@ -109,7 +109,8 @@ static int dns_answer_add_raw(
DnsResourceRecord *rr,
int ifindex,
DnsAnswerFlags flags,
DnsResourceRecord *rrsig) {
DnsResourceRecord *rrsig,
usec_t until) {
_cleanup_(dns_answer_item_unrefp) DnsAnswerItem *item = NULL;
int r;
@@ -131,6 +132,7 @@ static int dns_answer_add_raw(
.rr = dns_resource_record_ref(rr),
.ifindex = ifindex,
.flags = flags,
.until = until,
.rrsig = dns_resource_record_ref(rrsig),
};
@@ -152,7 +154,8 @@ static int dns_answer_add_raw_all(DnsAnswer *a, DnsAnswer *source) {
item->rr,
item->ifindex,
item->flags,
item->rrsig);
item->rrsig,
/* until= */ USEC_INFINITY);
if (r < 0)
return r;
}
@@ -160,12 +163,13 @@ static int dns_answer_add_raw_all(DnsAnswer *a, DnsAnswer *source) {
return 0;
}
int dns_answer_add(
int dns_answer_add_full(
DnsAnswer *a,
DnsResourceRecord *rr,
int ifindex,
DnsAnswerFlags flags,
DnsResourceRecord *rrsig) {
DnsResourceRecord *rrsig,
usec_t until) {
DnsAnswerItem tmp, *exist;
@@ -220,7 +224,7 @@ int dns_answer_add(
return 0;
}
return dns_answer_add_raw(a, rr, ifindex, flags, rrsig);
return dns_answer_add_raw(a, rr, ifindex, flags, rrsig, until);
}
static int dns_answer_add_all(DnsAnswer *a, DnsAnswer *b) {
@@ -236,12 +240,13 @@ static int dns_answer_add_all(DnsAnswer *a, DnsAnswer *b) {
return 0;
}
int dns_answer_add_extend(
int dns_answer_add_extend_full(
DnsAnswer **a,
DnsResourceRecord *rr,
int ifindex,
DnsAnswerFlags flags,
DnsResourceRecord *rrsig) {
DnsResourceRecord *rrsig,
usec_t until) {
int r;
@@ -252,7 +257,7 @@ int dns_answer_add_extend(
if (r < 0)
return r;
return dns_answer_add(*a, rr, ifindex, flags, rrsig);
return dns_answer_add_full(*a, rr, ifindex, flags, rrsig, until);
}
int dns_answer_add_soa(DnsAnswer *a, const char *name, uint32_t ttl, int ifindex) {
+13 -2
View File
@@ -31,6 +31,7 @@ typedef struct DnsAnswerItem {
DnsResourceRecord *rrsig; /* Optionally, also store RRSIG RR that successfully validates this item */
int ifindex;
DnsAnswerFlags flags;
usec_t until;
} DnsAnswerItem;
typedef struct DnsAnswer {
@@ -50,8 +51,8 @@ DnsAnswer *dns_answer_unref(DnsAnswer *a);
*_a = _b; \
} while(0)
int dns_answer_add(DnsAnswer *a, DnsResourceRecord *rr, int ifindex, DnsAnswerFlags flags, DnsResourceRecord *rrsig);
int dns_answer_add_extend(DnsAnswer **a, DnsResourceRecord *rr, int ifindex, DnsAnswerFlags flags, DnsResourceRecord *rrsig);
int dns_answer_add_full(DnsAnswer *a, DnsResourceRecord *rr, int ifindex, DnsAnswerFlags flags, DnsResourceRecord *rrsig, usec_t until);
int dns_answer_add_extend_full(DnsAnswer **a, DnsResourceRecord *rr, int ifindex, DnsAnswerFlags flags, DnsResourceRecord *rrsig, usec_t until);
int dns_answer_add_soa(DnsAnswer *a, const char *name, uint32_t ttl, int ifindex);
int dns_answer_match_key(DnsAnswer *a, const DnsResourceKey *key, DnsAnswerFlags *ret_flags);
@@ -79,6 +80,16 @@ int dns_answer_move_by_key(DnsAnswer **to, DnsAnswer **from, const DnsResourceKe
int dns_answer_has_dname_for_cname(DnsAnswer *a, DnsResourceRecord *cname);
static inline int dns_answer_add_extend(DnsAnswer **a, DnsResourceRecord *rr,
int ifindex, DnsAnswerFlags flags, DnsResourceRecord *rrsig) {
return dns_answer_add_extend_full(a, rr, ifindex, flags, rrsig, /* until= */ USEC_INFINITY);
}
static inline int dns_answer_add(DnsAnswer *a, DnsResourceRecord *rr,
int ifindex, DnsAnswerFlags flags, DnsResourceRecord *rrsig) {
return dns_answer_add_full(a, rr, ifindex, flags, rrsig, /* until= */ USEC_INFINITY);
}
static inline size_t dns_answer_size(DnsAnswer *a) {
return a ? ordered_set_size(a->items) : 0;
}
+1 -1
View File
@@ -1022,7 +1022,7 @@ static int answer_add_clamp_ttl(
}
}
r = dns_answer_add_extend(answer, rr, ifindex, answer_flags, rrsig);
r = dns_answer_add_extend_full(answer, rr, ifindex, answer_flags, rrsig, until);
if (r < 0)
return r;