A stack which works with or without an Mbed os library. Provides IPv4 or IPv6 with a full 1500 byte buffer.
Dependents: oldheating gps motorhome heating
resolve/nrtest.c@200:5acbc41bf469, 2021-05-20 (annotated)
- Committer:
- andrewboyson
- Date:
- Thu May 20 14:32:52 2021 +0000
- Revision:
- 200:5acbc41bf469
- Parent:
- 193:47a953ab571b
Increased number of arp entries from 20 to 30 to accommodate the number of WIZ devices plus a few incoming port 80 calls from the internet.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
andrewboyson | 189:e1c7990486c4 | 1 | #include <stdbool.h> |
andrewboyson | 189:e1c7990486c4 | 2 | #include <stdint.h> |
andrewboyson | 189:e1c7990486c4 | 3 | |
andrewboyson | 189:e1c7990486c4 | 4 | #include "nr.h" |
andrewboyson | 193:47a953ab571b | 5 | #include "ar6.h" |
andrewboyson | 193:47a953ab571b | 6 | #include "ndp.h" |
andrewboyson | 189:e1c7990486c4 | 7 | #include "dnsquery.h" |
andrewboyson | 189:e1c7990486c4 | 8 | #include "dns.h" |
andrewboyson | 189:e1c7990486c4 | 9 | #include "eth.h" |
andrewboyson | 189:e1c7990486c4 | 10 | #include "ip4addr.h" |
andrewboyson | 193:47a953ab571b | 11 | #include "ip6addr.h" |
andrewboyson | 193:47a953ab571b | 12 | #include "log.h" |
andrewboyson | 193:47a953ab571b | 13 | #include "mac.h" |
andrewboyson | 189:e1c7990486c4 | 14 | |
andrewboyson | 189:e1c7990486c4 | 15 | char NrTest[NR_NAME_MAX_LENGTH]; |
andrewboyson | 189:e1c7990486c4 | 16 | |
andrewboyson | 193:47a953ab571b | 17 | static int _ipProtocol = 0; |
andrewboyson | 193:47a953ab571b | 18 | static int _dnsProtocol = 0; |
andrewboyson | 193:47a953ab571b | 19 | static bool _makeRequestForNameFromAddr4 = false; |
andrewboyson | 193:47a953ab571b | 20 | static bool _makeRequestForNameFromAddr6 = false; |
andrewboyson | 193:47a953ab571b | 21 | static bool _makeRequestForAddr4FromName = false; |
andrewboyson | 193:47a953ab571b | 22 | static bool _makeRequestForAddr6FromName = false; |
andrewboyson | 193:47a953ab571b | 23 | |
andrewboyson | 193:47a953ab571b | 24 | static uint32_t _addr4; |
andrewboyson | 193:47a953ab571b | 25 | static char _addr6[16]; |
andrewboyson | 189:e1c7990486c4 | 26 | |
andrewboyson | 193:47a953ab571b | 27 | void NrTestSendRequest(int ipProtocol, int dnsProtocol) |
andrewboyson | 189:e1c7990486c4 | 28 | { |
andrewboyson | 193:47a953ab571b | 29 | _ipProtocol = ipProtocol; |
andrewboyson | 193:47a953ab571b | 30 | _dnsProtocol = dnsProtocol; |
andrewboyson | 193:47a953ab571b | 31 | |
andrewboyson | 193:47a953ab571b | 32 | if (NrTest[0]) |
andrewboyson | 193:47a953ab571b | 33 | { |
andrewboyson | 193:47a953ab571b | 34 | _addr4 = Ip4AddrParse(NrTest); |
andrewboyson | 193:47a953ab571b | 35 | if (_addr4) |
andrewboyson | 193:47a953ab571b | 36 | { |
andrewboyson | 193:47a953ab571b | 37 | _makeRequestForNameFromAddr4 = true; |
andrewboyson | 193:47a953ab571b | 38 | } |
andrewboyson | 193:47a953ab571b | 39 | else |
andrewboyson | 193:47a953ab571b | 40 | { |
andrewboyson | 193:47a953ab571b | 41 | Ip6AddrParse(NrTest, _addr6); |
andrewboyson | 193:47a953ab571b | 42 | if (!Ip6AddrIsEmpty(_addr6)) |
andrewboyson | 193:47a953ab571b | 43 | { |
andrewboyson | 193:47a953ab571b | 44 | _makeRequestForNameFromAddr6 = true; |
andrewboyson | 193:47a953ab571b | 45 | } |
andrewboyson | 193:47a953ab571b | 46 | else |
andrewboyson | 193:47a953ab571b | 47 | { |
andrewboyson | 193:47a953ab571b | 48 | _makeRequestForAddr4FromName = true; |
andrewboyson | 193:47a953ab571b | 49 | _makeRequestForAddr6FromName = true; |
andrewboyson | 193:47a953ab571b | 50 | } |
andrewboyson | 193:47a953ab571b | 51 | } |
andrewboyson | 193:47a953ab571b | 52 | } |
andrewboyson | 189:e1c7990486c4 | 53 | } |
andrewboyson | 193:47a953ab571b | 54 | |
andrewboyson | 193:47a953ab571b | 55 | static bool getMacOfDnsServer6() |
andrewboyson | 190:c4415a7253f5 | 56 | { |
andrewboyson | 193:47a953ab571b | 57 | //For IPv6 UDNS check if have the MAC for the DNS server and, if not, request it and stop |
andrewboyson | 193:47a953ab571b | 58 | if (_ipProtocol == ETH_IPV6 && _dnsProtocol == DNS_PROTOCOL_UDNS) |
andrewboyson | 193:47a953ab571b | 59 | { |
andrewboyson | 193:47a953ab571b | 60 | char mac[6]; |
andrewboyson | 193:47a953ab571b | 61 | Ar6IpToMac(NdpDnsServer, mac); |
andrewboyson | 193:47a953ab571b | 62 | if (MacIsEmpty(mac)) |
andrewboyson | 193:47a953ab571b | 63 | { |
andrewboyson | 193:47a953ab571b | 64 | Ar6MakeRequestForMacFromIp(NdpDnsServer); //The request is only repeated if made after a freeze time - call as often as you want. |
andrewboyson | 193:47a953ab571b | 65 | return false; |
andrewboyson | 193:47a953ab571b | 66 | } |
andrewboyson | 193:47a953ab571b | 67 | } |
andrewboyson | 193:47a953ab571b | 68 | return true; |
andrewboyson | 190:c4415a7253f5 | 69 | } |
andrewboyson | 189:e1c7990486c4 | 70 | |
andrewboyson | 189:e1c7990486c4 | 71 | void NrTestMain(void) |
andrewboyson | 189:e1c7990486c4 | 72 | { |
andrewboyson | 189:e1c7990486c4 | 73 | if (DnsQueryIsBusy) return; |
andrewboyson | 193:47a953ab571b | 74 | |
andrewboyson | 193:47a953ab571b | 75 | |
andrewboyson | 193:47a953ab571b | 76 | if (_makeRequestForNameFromAddr4) |
andrewboyson | 193:47a953ab571b | 77 | { |
andrewboyson | 193:47a953ab571b | 78 | //if (!getMacOfDnsServer6()) return; |
andrewboyson | 193:47a953ab571b | 79 | LogTime("NrTest - making "); DnsProtocolLog(_dnsProtocol); Log(" request over "); EthProtocolLog(_ipProtocol); LogF(" for name from '%s'\r\n", NrTest); |
andrewboyson | 193:47a953ab571b | 80 | DnsQueryNameFromIp4(_addr4, _dnsProtocol, _ipProtocol); |
andrewboyson | 193:47a953ab571b | 81 | _makeRequestForNameFromAddr4 = false; |
andrewboyson | 193:47a953ab571b | 82 | return; |
andrewboyson | 193:47a953ab571b | 83 | } |
andrewboyson | 193:47a953ab571b | 84 | if (_makeRequestForNameFromAddr6) |
andrewboyson | 193:47a953ab571b | 85 | { |
andrewboyson | 193:47a953ab571b | 86 | //if (!getMacOfDnsServer6()) return; |
andrewboyson | 193:47a953ab571b | 87 | LogTime("NrTest - making "); DnsProtocolLog(_dnsProtocol); Log(" request over "); EthProtocolLog(_ipProtocol); LogF(" for name from '%s'\r\n", NrTest); |
andrewboyson | 193:47a953ab571b | 88 | DnsQueryNameFromIp6(_addr6, _dnsProtocol, _ipProtocol); |
andrewboyson | 193:47a953ab571b | 89 | _makeRequestForNameFromAddr6 = false; |
andrewboyson | 193:47a953ab571b | 90 | return; |
andrewboyson | 193:47a953ab571b | 91 | } |
andrewboyson | 193:47a953ab571b | 92 | if (_makeRequestForAddr4FromName) |
andrewboyson | 193:47a953ab571b | 93 | { |
andrewboyson | 193:47a953ab571b | 94 | //if (!getMacOfDnsServer6()) return; |
andrewboyson | 193:47a953ab571b | 95 | LogTime("NrTest - making "); DnsProtocolLog(_dnsProtocol); Log(" request over "); EthProtocolLog(_ipProtocol); LogF(" for A from '%s'\r\n", NrTest); |
andrewboyson | 193:47a953ab571b | 96 | DnsQueryIp4FromName(NrTest, _dnsProtocol, _ipProtocol); |
andrewboyson | 193:47a953ab571b | 97 | _makeRequestForAddr4FromName = false; |
andrewboyson | 193:47a953ab571b | 98 | return; |
andrewboyson | 193:47a953ab571b | 99 | } |
andrewboyson | 193:47a953ab571b | 100 | if (_makeRequestForAddr6FromName) |
andrewboyson | 193:47a953ab571b | 101 | { |
andrewboyson | 193:47a953ab571b | 102 | //if (!getMacOfDnsServer6()) return; |
andrewboyson | 193:47a953ab571b | 103 | LogTime("NrTest - making "); DnsProtocolLog(_dnsProtocol); Log(" request over "); EthProtocolLog(_ipProtocol); LogF(" for AAAA from '%s'\r\n", NrTest); |
andrewboyson | 193:47a953ab571b | 104 | DnsQueryIp6FromName(NrTest, _dnsProtocol, _ipProtocol); |
andrewboyson | 193:47a953ab571b | 105 | _makeRequestForAddr6FromName = false; |
andrewboyson | 193:47a953ab571b | 106 | return; |
andrewboyson | 193:47a953ab571b | 107 | } |
andrewboyson | 189:e1c7990486c4 | 108 | } |