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
net.c@172:9bc3c7b2cca1, 2020-12-16 (annotated)
- Committer:
- andrewboyson
- Date:
- Wed Dec 16 17:33:22 2020 +0000
- Revision:
- 172:9bc3c7b2cca1
- Parent:
- 158:3adf725c0804
- Child:
- 178:52714fef5ca1
Modified name resolution to work with both IPv4 and IPv6. Before there were two independent modules.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
andrewboyson | 61:aad055f1b0d1 | 1 | #include <stdint.h> |
andrewboyson | 61:aad055f1b0d1 | 2 | #include <stdbool.h> |
andrewboyson | 61:aad055f1b0d1 | 3 | |
andrewboyson | 59:e0e556c8bd46 | 4 | #include "link.h" |
andrewboyson | 7:b794780e33b4 | 5 | #include "net.h" |
andrewboyson | 149:39d1ba392f4b | 6 | #include "tcp.h" |
andrewboyson | 7:b794780e33b4 | 7 | #include "dhcp.h" |
andrewboyson | 48:952dddb74b8b | 8 | #include "ar4.h" |
andrewboyson | 48:952dddb74b8b | 9 | #include "ar6.h" |
andrewboyson | 172:9bc3c7b2cca1 | 10 | #include "nr.h" |
andrewboyson | 7:b794780e33b4 | 11 | #include "dns.h" |
andrewboyson | 7:b794780e33b4 | 12 | #include "slaac.h" |
andrewboyson | 47:73af5c0b0dc2 | 13 | #include "ndp.h" |
andrewboyson | 22:914b970356f0 | 14 | #include "ntp.h" |
andrewboyson | 113:904b40231907 | 15 | |
andrewboyson | 57:e0fb648acf48 | 16 | #include "tftp.h" |
andrewboyson | 83:08c983006a6e | 17 | #include "led.h" |
andrewboyson | 142:a8c0890a58d1 | 18 | #include "restart.h" |
andrewboyson | 37:793b39683406 | 19 | |
andrewboyson | 43:bc028d5a6424 | 20 | bool NetTraceStack = false; |
andrewboyson | 43:bc028d5a6424 | 21 | bool NetTraceNewLine = false; |
andrewboyson | 43:bc028d5a6424 | 22 | bool NetTraceVerbose = false; |
andrewboyson | 59:e0e556c8bd46 | 23 | const char* NetName4; |
andrewboyson | 59:e0e556c8bd46 | 24 | const char* NetName6; |
andrewboyson | 57:e0fb648acf48 | 25 | |
andrewboyson | 57:e0fb648acf48 | 26 | static bool hostMatched = false; |
andrewboyson | 57:e0fb648acf48 | 27 | bool NetTraceHostGetMatched() |
andrewboyson | 57:e0fb648acf48 | 28 | { |
andrewboyson | 57:e0fb648acf48 | 29 | return hostMatched; |
andrewboyson | 57:e0fb648acf48 | 30 | } |
andrewboyson | 57:e0fb648acf48 | 31 | void NetTraceHostResetMatched() |
andrewboyson | 57:e0fb648acf48 | 32 | { |
andrewboyson | 57:e0fb648acf48 | 33 | hostMatched = false; |
andrewboyson | 57:e0fb648acf48 | 34 | } |
andrewboyson | 59:e0e556c8bd46 | 35 | char NetTraceHost[2]; |
andrewboyson | 57:e0fb648acf48 | 36 | void NetTraceHostCheckIp6(char* ip) |
andrewboyson | 57:e0fb648acf48 | 37 | { |
andrewboyson | 57:e0fb648acf48 | 38 | if (!ip[0]) return; |
andrewboyson | 57:e0fb648acf48 | 39 | if (NetTraceHost[0] != ip[14]) return; |
andrewboyson | 57:e0fb648acf48 | 40 | if (NetTraceHost[1] != ip[15]) return; |
andrewboyson | 57:e0fb648acf48 | 41 | hostMatched = true; |
andrewboyson | 57:e0fb648acf48 | 42 | } |
andrewboyson | 57:e0fb648acf48 | 43 | void NetTraceHostCheckMac(char* mac) |
andrewboyson | 57:e0fb648acf48 | 44 | { |
andrewboyson | 57:e0fb648acf48 | 45 | if (NetTraceHost[0] != mac[4]) return; |
andrewboyson | 57:e0fb648acf48 | 46 | if (NetTraceHost[1] != mac[5]) return; |
andrewboyson | 57:e0fb648acf48 | 47 | hostMatched = true; |
andrewboyson | 57:e0fb648acf48 | 48 | } |
andrewboyson | 0:faa09bd4e6bf | 49 | int16_t NetToHost16(int16_t n) |
andrewboyson | 0:faa09bd4e6bf | 50 | { |
andrewboyson | 0:faa09bd4e6bf | 51 | int16_t h; |
andrewboyson | 0:faa09bd4e6bf | 52 | |
andrewboyson | 0:faa09bd4e6bf | 53 | char* pn = (char*)&n; |
andrewboyson | 0:faa09bd4e6bf | 54 | char* ph = (char*)&h + 1; |
andrewboyson | 0:faa09bd4e6bf | 55 | |
andrewboyson | 0:faa09bd4e6bf | 56 | *ph = *pn; ph--; pn++; // 1<-0 |
andrewboyson | 0:faa09bd4e6bf | 57 | *ph = *pn; // 0<-1 |
andrewboyson | 0:faa09bd4e6bf | 58 | |
andrewboyson | 0:faa09bd4e6bf | 59 | return h; |
andrewboyson | 0:faa09bd4e6bf | 60 | } |
andrewboyson | 0:faa09bd4e6bf | 61 | int32_t NetToHost32(int32_t n) |
andrewboyson | 0:faa09bd4e6bf | 62 | { |
andrewboyson | 0:faa09bd4e6bf | 63 | int32_t h; |
andrewboyson | 0:faa09bd4e6bf | 64 | |
andrewboyson | 0:faa09bd4e6bf | 65 | char* pn = (char*)&n; |
andrewboyson | 0:faa09bd4e6bf | 66 | char* ph = (char*)&h + 3; |
andrewboyson | 0:faa09bd4e6bf | 67 | |
andrewboyson | 0:faa09bd4e6bf | 68 | *ph = *pn; ph--; pn++; // 3<-0 |
andrewboyson | 0:faa09bd4e6bf | 69 | *ph = *pn; ph--; pn++; // 2<-1 |
andrewboyson | 0:faa09bd4e6bf | 70 | *ph = *pn; ph--; pn++; // 1<-2 |
andrewboyson | 0:faa09bd4e6bf | 71 | *ph = *pn; // 0<-3 |
andrewboyson | 0:faa09bd4e6bf | 72 | |
andrewboyson | 0:faa09bd4e6bf | 73 | return h; |
andrewboyson | 0:faa09bd4e6bf | 74 | } |
andrewboyson | 0:faa09bd4e6bf | 75 | int64_t NetToHost64(int64_t n) |
andrewboyson | 0:faa09bd4e6bf | 76 | { |
andrewboyson | 0:faa09bd4e6bf | 77 | int64_t h; |
andrewboyson | 0:faa09bd4e6bf | 78 | |
andrewboyson | 0:faa09bd4e6bf | 79 | char* pn = (char*)&n; |
andrewboyson | 0:faa09bd4e6bf | 80 | char* ph = (char*)&h + 7; |
andrewboyson | 0:faa09bd4e6bf | 81 | |
andrewboyson | 0:faa09bd4e6bf | 82 | *ph = *pn; ph--; pn++; // 7<-0 |
andrewboyson | 0:faa09bd4e6bf | 83 | *ph = *pn; ph--; pn++; // 6<-1 |
andrewboyson | 0:faa09bd4e6bf | 84 | *ph = *pn; ph--; pn++; // 5<-2 |
andrewboyson | 0:faa09bd4e6bf | 85 | *ph = *pn; ph--; pn++; // 4<-3 |
andrewboyson | 0:faa09bd4e6bf | 86 | *ph = *pn; ph--; pn++; // 3<-4 |
andrewboyson | 0:faa09bd4e6bf | 87 | *ph = *pn; ph--; pn++; // 2<-5 |
andrewboyson | 0:faa09bd4e6bf | 88 | *ph = *pn; ph--; pn++; // 1<-6 |
andrewboyson | 0:faa09bd4e6bf | 89 | *ph = *pn; // 0<-7 |
andrewboyson | 0:faa09bd4e6bf | 90 | |
andrewboyson | 0:faa09bd4e6bf | 91 | return h; |
andrewboyson | 0:faa09bd4e6bf | 92 | } |
andrewboyson | 136:8a65abb0dc63 | 93 | void NetInvert16(void* h, void* n) |
andrewboyson | 136:8a65abb0dc63 | 94 | { |
andrewboyson | 136:8a65abb0dc63 | 95 | char* pn = (char*)n; |
andrewboyson | 136:8a65abb0dc63 | 96 | char* ph = (char*)h + 1; |
andrewboyson | 136:8a65abb0dc63 | 97 | |
andrewboyson | 136:8a65abb0dc63 | 98 | *ph = *pn; ph--; pn++; // 1<-0 |
andrewboyson | 136:8a65abb0dc63 | 99 | *ph = *pn; // 0<-1 |
andrewboyson | 136:8a65abb0dc63 | 100 | } |
andrewboyson | 136:8a65abb0dc63 | 101 | void NetInvert32(void* h, void* n) |
andrewboyson | 0:faa09bd4e6bf | 102 | { |
andrewboyson | 136:8a65abb0dc63 | 103 | char* pn = (char*)n; |
andrewboyson | 136:8a65abb0dc63 | 104 | char* ph = (char*)h + 3; |
andrewboyson | 0:faa09bd4e6bf | 105 | |
andrewboyson | 136:8a65abb0dc63 | 106 | *ph = *pn; ph--; pn++; // 3<-0 |
andrewboyson | 136:8a65abb0dc63 | 107 | *ph = *pn; ph--; pn++; // 2<-1 |
andrewboyson | 136:8a65abb0dc63 | 108 | *ph = *pn; ph--; pn++; // 1<-2 |
andrewboyson | 136:8a65abb0dc63 | 109 | *ph = *pn; // 0<-3 |
andrewboyson | 0:faa09bd4e6bf | 110 | } |
andrewboyson | 136:8a65abb0dc63 | 111 | void NetInvert64(void* h, void* n) |
andrewboyson | 136:8a65abb0dc63 | 112 | { |
andrewboyson | 136:8a65abb0dc63 | 113 | char* pn = (char*)n; |
andrewboyson | 136:8a65abb0dc63 | 114 | char* ph = (char*)h + 7; |
andrewboyson | 136:8a65abb0dc63 | 115 | |
andrewboyson | 136:8a65abb0dc63 | 116 | *ph = *pn; ph--; pn++; // 7<-0 |
andrewboyson | 136:8a65abb0dc63 | 117 | *ph = *pn; ph--; pn++; // 6<-1 |
andrewboyson | 136:8a65abb0dc63 | 118 | *ph = *pn; ph--; pn++; // 5<-2 |
andrewboyson | 136:8a65abb0dc63 | 119 | *ph = *pn; ph--; pn++; // 4<-3 |
andrewboyson | 136:8a65abb0dc63 | 120 | *ph = *pn; ph--; pn++; // 3<-4 |
andrewboyson | 136:8a65abb0dc63 | 121 | *ph = *pn; ph--; pn++; // 2<-5 |
andrewboyson | 136:8a65abb0dc63 | 122 | *ph = *pn; ph--; pn++; // 1<-6 |
andrewboyson | 136:8a65abb0dc63 | 123 | *ph = *pn; // 0<-7 |
andrewboyson | 0:faa09bd4e6bf | 124 | } |
andrewboyson | 2:849103b5a16d | 125 | |
andrewboyson | 136:8a65abb0dc63 | 126 | void NetDirect16(void* h, void* n) |
andrewboyson | 136:8a65abb0dc63 | 127 | { |
andrewboyson | 136:8a65abb0dc63 | 128 | char* pn = (char*)n; |
andrewboyson | 136:8a65abb0dc63 | 129 | char* ph = (char*)h; |
andrewboyson | 136:8a65abb0dc63 | 130 | |
andrewboyson | 136:8a65abb0dc63 | 131 | *ph = *pn; ph++; pn++; // 0<-0 |
andrewboyson | 136:8a65abb0dc63 | 132 | *ph = *pn; // 1<-1 |
andrewboyson | 136:8a65abb0dc63 | 133 | } |
andrewboyson | 136:8a65abb0dc63 | 134 | void NetDirect32(void* h, void* n) |
andrewboyson | 136:8a65abb0dc63 | 135 | { |
andrewboyson | 136:8a65abb0dc63 | 136 | char* pn = (char*)n; |
andrewboyson | 136:8a65abb0dc63 | 137 | char* ph = (char*)h; |
andrewboyson | 136:8a65abb0dc63 | 138 | |
andrewboyson | 136:8a65abb0dc63 | 139 | *ph = *pn; ph++; pn++; // 0<-0 |
andrewboyson | 136:8a65abb0dc63 | 140 | *ph = *pn; ph++; pn++; // 1<-1 |
andrewboyson | 136:8a65abb0dc63 | 141 | *ph = *pn; ph++; pn++; // 2<-2 |
andrewboyson | 136:8a65abb0dc63 | 142 | *ph = *pn; // 3<-3 |
andrewboyson | 136:8a65abb0dc63 | 143 | } |
andrewboyson | 136:8a65abb0dc63 | 144 | void NetDirect64(void* h, void* n) |
andrewboyson | 136:8a65abb0dc63 | 145 | { |
andrewboyson | 136:8a65abb0dc63 | 146 | char* pn = (char*)n; |
andrewboyson | 136:8a65abb0dc63 | 147 | char* ph = (char*)h; |
andrewboyson | 136:8a65abb0dc63 | 148 | |
andrewboyson | 136:8a65abb0dc63 | 149 | *ph = *pn; ph++; pn++; // 0<-0 |
andrewboyson | 136:8a65abb0dc63 | 150 | *ph = *pn; ph++; pn++; // 1<-1 |
andrewboyson | 136:8a65abb0dc63 | 151 | *ph = *pn; ph++; pn++; // 2<-2 |
andrewboyson | 136:8a65abb0dc63 | 152 | *ph = *pn; ph++; pn++; // 3<-3 |
andrewboyson | 136:8a65abb0dc63 | 153 | *ph = *pn; ph++; pn++; // 4<-4 |
andrewboyson | 136:8a65abb0dc63 | 154 | *ph = *pn; ph++; pn++; // 5<-5 |
andrewboyson | 136:8a65abb0dc63 | 155 | *ph = *pn; ph++; pn++; // 6<-6 |
andrewboyson | 136:8a65abb0dc63 | 156 | *ph = *pn; // 7<-7 |
andrewboyson | 136:8a65abb0dc63 | 157 | } |
andrewboyson | 61:aad055f1b0d1 | 158 | void NetInit(const char* name4, const char* name6) |
andrewboyson | 59:e0e556c8bd46 | 159 | { |
andrewboyson | 44:83ce5ace337b | 160 | NetName4 = name4; |
andrewboyson | 44:83ce5ace337b | 161 | NetName6 = name6; |
andrewboyson | 59:e0e556c8bd46 | 162 | LinkInit(); |
andrewboyson | 149:39d1ba392f4b | 163 | TcpInit(); |
andrewboyson | 48:952dddb74b8b | 164 | Ar4Init(); |
andrewboyson | 48:952dddb74b8b | 165 | Ar6Init(); |
andrewboyson | 172:9bc3c7b2cca1 | 166 | NrInit(); |
andrewboyson | 30:e34173b7585c | 167 | SlaacInit(); |
andrewboyson | 113:904b40231907 | 168 | NtpInit(); |
andrewboyson | 2:849103b5a16d | 169 | } |
andrewboyson | 61:aad055f1b0d1 | 170 | void NetMain() |
andrewboyson | 2:849103b5a16d | 171 | { |
andrewboyson | 142:a8c0890a58d1 | 172 | int lastRestartPoint = RestartPoint; |
andrewboyson | 142:a8c0890a58d1 | 173 | RestartPoint = FAULT_POINT_NetMain; |
andrewboyson | 115:5c003909bcf3 | 174 | LinkMain(); |
andrewboyson | 158:3adf725c0804 | 175 | TcpMain(); |
andrewboyson | 115:5c003909bcf3 | 176 | Ar4Main(); |
andrewboyson | 115:5c003909bcf3 | 177 | Ar6Main(); |
andrewboyson | 172:9bc3c7b2cca1 | 178 | NrMain(); |
andrewboyson | 115:5c003909bcf3 | 179 | DnsMain(); |
andrewboyson | 142:a8c0890a58d1 | 180 | RestartPoint = lastRestartPoint; |
andrewboyson | 2:849103b5a16d | 181 | } |