Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: oldheating gps motorhome heating
Diff: udp/dns/dnsserver.c
- Revision:
- 172:9bc3c7b2cca1
- Parent:
- 169:336d499dc560
- Child:
- 177:2cd7fde8bfe5
--- a/udp/dns/dnsserver.c Sat Dec 12 20:10:02 2020 +0000
+++ b/udp/dns/dnsserver.c Wed Dec 16 17:33:22 2020 +0000
@@ -15,13 +15,15 @@
bool DnsServerTrace = false;
-#define RECORD_NONE 0
-#define RECORD_PTR4 1
-#define RECORD_PTR6_LOCAL 2
-#define RECORD_PTR6_GLOBAL 3
-#define RECORD_A 4
-#define RECORD_AAAA_LOCAL 5
-#define RECORD_AAAA_GLOBAL 6
+#define RECORD_NONE 0
+#define RECORD_PTR4 1
+#define RECORD_PTR6_LINK_LOCAL 2
+#define RECORD_PTR6_UNIQUE_LOCAL 3
+#define RECORD_PTR6_GLOBAL 4
+#define RECORD_A 5
+#define RECORD_AAAA_LINK_LOCAL 6
+#define RECORD_AAAA_UNIQUE_LOCAL 7
+#define RECORD_AAAA_GLOBAL 8
#define MAX_ANSWERS 4
@@ -71,6 +73,7 @@
bool nodeIsName6 = DnsNameComparePtr(p, myFullName6);
bool nodeIsAddr4 = DnsNameCompareIp4(p, DhcpLocalIp);
bool nodeIsLocl6 = DnsNameCompareIp6(p, SlaacLinkLocalIp);
+ bool nodeIsUniq6 = DnsNameCompareIp6(p, SlaacUniqueLocalIp);
bool nodeIsGlob6 = DnsNameCompareIp6(p, SlaacGlobalIp);
p += nameLength; //Skip past the name
@@ -84,9 +87,12 @@
//Handle the questions
if (nodeIsName4 && recordType == DNS_RECORD_A ) answers[answerCount++] = RECORD_A;
- if (nodeIsName6 && recordType == DNS_RECORD_AAAA) { answers[answerCount++] = RECORD_AAAA_LOCAL; answers[answerCount++] = RECORD_AAAA_GLOBAL; }
+ if (nodeIsName6 && recordType == DNS_RECORD_AAAA) { answers[answerCount++] = RECORD_AAAA_LINK_LOCAL;
+ answers[answerCount++] = RECORD_AAAA_UNIQUE_LOCAL;
+ answers[answerCount++] = RECORD_AAAA_GLOBAL; }
if (nodeIsAddr4 && recordType == DNS_RECORD_PTR ) answers[answerCount++] = RECORD_PTR4;
- if (nodeIsLocl6 && recordType == DNS_RECORD_PTR ) answers[answerCount++] = RECORD_PTR6_LOCAL;
+ if (nodeIsLocl6 && recordType == DNS_RECORD_PTR ) answers[answerCount++] = RECORD_PTR6_LINK_LOCAL;
+ if (nodeIsUniq6 && recordType == DNS_RECORD_PTR ) answers[answerCount++] = RECORD_PTR6_UNIQUE_LOCAL;
if (nodeIsGlob6 && recordType == DNS_RECORD_PTR ) answers[answerCount++] = RECORD_PTR6_GLOBAL;
}
return 0;
@@ -107,24 +113,28 @@
//Encode the node name
switch (answers[i])
{
- case RECORD_A: DnsNameEncodePtr(myFullName4, &p); break;
- case RECORD_AAAA_LOCAL: DnsNameEncodePtr(myFullName6, &p); break;
- case RECORD_AAAA_GLOBAL: DnsNameEncodePtr(myFullName6, &p); break;
- case RECORD_PTR4: DnsNameEncodeIp4(DhcpLocalIp, &p); break;
- case RECORD_PTR6_LOCAL: DnsNameEncodeIp6(SlaacLinkLocalIp, &p); break;
- case RECORD_PTR6_GLOBAL: DnsNameEncodeIp6(SlaacGlobalIp, &p); break;
+ case RECORD_A: DnsNameEncodePtr(myFullName4, &p); break;
+ case RECORD_AAAA_LINK_LOCAL: DnsNameEncodePtr(myFullName6, &p); break;
+ case RECORD_AAAA_UNIQUE_LOCAL: DnsNameEncodePtr(myFullName6, &p); break;
+ case RECORD_AAAA_GLOBAL: DnsNameEncodePtr(myFullName6, &p); break;
+ case RECORD_PTR4: DnsNameEncodeIp4(DhcpLocalIp, &p); break;
+ case RECORD_PTR6_LINK_LOCAL: DnsNameEncodeIp6(SlaacLinkLocalIp, &p); break;
+ case RECORD_PTR6_UNIQUE_LOCAL: DnsNameEncodeIp6(SlaacUniqueLocalIp, &p); break;
+ case RECORD_PTR6_GLOBAL: DnsNameEncodeIp6(SlaacGlobalIp, &p); break;
}
//Add the 16 bit type
*p++ = 0;
switch (answers[i])
{
- case RECORD_A: *p++ = DNS_RECORD_A; break;
- case RECORD_AAAA_LOCAL: *p++ = DNS_RECORD_AAAA; break;
- case RECORD_AAAA_GLOBAL: *p++ = DNS_RECORD_AAAA; break;
- case RECORD_PTR4: *p++ = DNS_RECORD_PTR; break;
- case RECORD_PTR6_LOCAL: *p++ = DNS_RECORD_PTR; break;
- case RECORD_PTR6_GLOBAL: *p++ = DNS_RECORD_PTR; break;
+ case RECORD_A: *p++ = DNS_RECORD_A; break;
+ case RECORD_AAAA_LINK_LOCAL: *p++ = DNS_RECORD_AAAA; break;
+ case RECORD_AAAA_UNIQUE_LOCAL: *p++ = DNS_RECORD_AAAA; break;
+ case RECORD_AAAA_GLOBAL: *p++ = DNS_RECORD_AAAA; break;
+ case RECORD_PTR4: *p++ = DNS_RECORD_PTR; break;
+ case RECORD_PTR6_LINK_LOCAL: *p++ = DNS_RECORD_PTR; break;
+ case RECORD_PTR6_UNIQUE_LOCAL: *p++ = DNS_RECORD_PTR; break;
+ case RECORD_PTR6_GLOBAL: *p++ = DNS_RECORD_PTR; break;
}
//Add the class
@@ -139,23 +149,27 @@
*p++ = 0;
switch (answers[i])
{
- case RECORD_A: *p++ = 4; break;
- case RECORD_AAAA_LOCAL: *p++ = 16; break;
- case RECORD_AAAA_GLOBAL: *p++ = 16; break;
- case RECORD_PTR4: *p++ = myFullName4Length + 2; break; //add a byte for the initial length and another for the terminating zero length
- case RECORD_PTR6_LOCAL: *p++ = myFullName6Length + 2; break;
- case RECORD_PTR6_GLOBAL: *p++ = myFullName6Length + 2; break;
+ case RECORD_A: *p++ = 4; break;
+ case RECORD_AAAA_LINK_LOCAL: *p++ = 16; break;
+ case RECORD_AAAA_UNIQUE_LOCAL: *p++ = 16; break;
+ case RECORD_AAAA_GLOBAL: *p++ = 16; break;
+ case RECORD_PTR4: *p++ = myFullName4Length + 2; break; //add a byte for the initial length and another for the terminating zero length
+ case RECORD_PTR6_LINK_LOCAL: *p++ = myFullName6Length + 2; break;
+ case RECORD_PTR6_UNIQUE_LOCAL: *p++ = myFullName6Length + 2; break;
+ case RECORD_PTR6_GLOBAL: *p++ = myFullName6Length + 2; break;
}
//Add the payload
switch (answers[i])
{
- case RECORD_A: memcpy(p, &DhcpLocalIp, 4); p += 4; break;
- case RECORD_AAAA_LOCAL: memcpy(p, SlaacLinkLocalIp, 16); p += 16; break;
- case RECORD_AAAA_GLOBAL: memcpy(p, SlaacGlobalIp, 16); p += 16; break;
- case RECORD_PTR4: DnsNameEncodePtr(myFullName4, &p); break;
- case RECORD_PTR6_LOCAL: DnsNameEncodePtr(myFullName6, &p); break;
- case RECORD_PTR6_GLOBAL: DnsNameEncodePtr(myFullName6, &p); break;
+ case RECORD_A: memcpy(p, &DhcpLocalIp, 4); p += 4; break;
+ case RECORD_AAAA_LINK_LOCAL: memcpy(p, SlaacLinkLocalIp, 16); p += 16; break;
+ case RECORD_AAAA_UNIQUE_LOCAL: memcpy(p, SlaacUniqueLocalIp, 16); p += 16; break;
+ case RECORD_AAAA_GLOBAL: memcpy(p, SlaacGlobalIp, 16); p += 16; break;
+ case RECORD_PTR4: DnsNameEncodePtr(myFullName4, &p); break;
+ case RECORD_PTR6_LINK_LOCAL: DnsNameEncodePtr(myFullName6, &p); break;
+ case RECORD_PTR6_UNIQUE_LOCAL: DnsNameEncodePtr(myFullName6, &p); break;
+ case RECORD_PTR6_GLOBAL: DnsNameEncodePtr(myFullName6, &p); break;
}
//Increment the number of good answers to send
DnsHdrAncount++;