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

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?

UserRevisionLine numberNew 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 }