summaryrefslogtreecommitdiff
path: root/testcode/testpkts.c
diff options
context:
space:
mode:
Diffstat (limited to 'testcode/testpkts.c')
-rw-r--r--testcode/testpkts.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/testcode/testpkts.c b/testcode/testpkts.c
index 01f23e48ed2e..6c90567aa321 100644
--- a/testcode/testpkts.c
+++ b/testcode/testpkts.c
@@ -236,6 +236,8 @@ static void adjustline(char* line, struct entry* e,
e->copy_query = 1;
} else if(str_keyword(&parse, "copy_ednsdata_assume_clientsubnet")) {
e->copy_ednsdata_assume_clientsubnet = 1;
+ } else if(str_keyword(&parse, "increment_ecs_scope")) {
+ e->increment_ecs_scope = 1;
} else if(str_keyword(&parse, "sleep=")) {
e->sleeptime = (unsigned int) strtol(parse, (char**)&parse, 10);
while(isspace((unsigned char)*parse))
@@ -274,6 +276,7 @@ static struct entry* new_entry(void)
e->copy_id = 0;
e->copy_query = 0;
e->copy_ednsdata_assume_clientsubnet = 0;
+ e->increment_ecs_scope = 0;
e->sleeptime = 0;
e->next = NULL;
return e;
@@ -510,7 +513,8 @@ add_edns(uint8_t* pktbuf, size_t pktsize, int do_flag, uint8_t *ednsdata,
if(*pktlen + sizeof(edns) + ednslen > pktsize)
error("not enough space for EDNS OPT record");
memmove(pktbuf+*pktlen, edns, sizeof(edns));
- memmove(pktbuf+*pktlen+sizeof(edns), ednsdata, ednslen);
+ if(ednsdata && ednslen)
+ memmove(pktbuf+*pktlen+sizeof(edns), ednsdata, ednslen);
sldns_write_uint16(pktbuf+10, LDNS_ARCOUNT(pktbuf)+1);
*pktlen += (sizeof(edns) + ednslen);
}
@@ -1593,6 +1597,9 @@ adjust_packet(struct entry* match, uint8_t** answer_pkt, size_t *answer_len,
if(walk_qlen >= 15 && walk_plen >= 15) {
walk_p[15] = walk_q[14];
}
+ if(match->increment_ecs_scope) {
+ walk_p[15]++;
+ }
}
if(match->sleeptime > 0) {