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:
Thu May 20 14:32:52 2021 +0000
Revision:
200:5acbc41bf469
Parent:
178:52714fef5ca1
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?

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 57:e0fb648acf48 23
andrewboyson 57:e0fb648acf48 24 static bool hostMatched = false;
andrewboyson 57:e0fb648acf48 25 bool NetTraceHostGetMatched()
andrewboyson 57:e0fb648acf48 26 {
andrewboyson 57:e0fb648acf48 27 return hostMatched;
andrewboyson 57:e0fb648acf48 28 }
andrewboyson 57:e0fb648acf48 29 void NetTraceHostResetMatched()
andrewboyson 57:e0fb648acf48 30 {
andrewboyson 57:e0fb648acf48 31 hostMatched = false;
andrewboyson 57:e0fb648acf48 32 }
andrewboyson 59:e0e556c8bd46 33 char NetTraceHost[2];
andrewboyson 57:e0fb648acf48 34 void NetTraceHostCheckIp6(char* ip)
andrewboyson 57:e0fb648acf48 35 {
andrewboyson 57:e0fb648acf48 36 if (!ip[0]) return;
andrewboyson 57:e0fb648acf48 37 if (NetTraceHost[0] != ip[14]) return;
andrewboyson 57:e0fb648acf48 38 if (NetTraceHost[1] != ip[15]) return;
andrewboyson 57:e0fb648acf48 39 hostMatched = true;
andrewboyson 57:e0fb648acf48 40 }
andrewboyson 57:e0fb648acf48 41 void NetTraceHostCheckMac(char* mac)
andrewboyson 57:e0fb648acf48 42 {
andrewboyson 57:e0fb648acf48 43 if (NetTraceHost[0] != mac[4]) return;
andrewboyson 57:e0fb648acf48 44 if (NetTraceHost[1] != mac[5]) return;
andrewboyson 57:e0fb648acf48 45 hostMatched = true;
andrewboyson 57:e0fb648acf48 46 }
andrewboyson 0:faa09bd4e6bf 47 int16_t NetToHost16(int16_t n)
andrewboyson 0:faa09bd4e6bf 48 {
andrewboyson 0:faa09bd4e6bf 49 int16_t h;
andrewboyson 0:faa09bd4e6bf 50
andrewboyson 0:faa09bd4e6bf 51 char* pn = (char*)&n;
andrewboyson 0:faa09bd4e6bf 52 char* ph = (char*)&h + 1;
andrewboyson 0:faa09bd4e6bf 53
andrewboyson 0:faa09bd4e6bf 54 *ph = *pn; ph--; pn++; // 1<-0
andrewboyson 0:faa09bd4e6bf 55 *ph = *pn; // 0<-1
andrewboyson 0:faa09bd4e6bf 56
andrewboyson 0:faa09bd4e6bf 57 return h;
andrewboyson 0:faa09bd4e6bf 58 }
andrewboyson 0:faa09bd4e6bf 59 int32_t NetToHost32(int32_t n)
andrewboyson 0:faa09bd4e6bf 60 {
andrewboyson 0:faa09bd4e6bf 61 int32_t h;
andrewboyson 0:faa09bd4e6bf 62
andrewboyson 0:faa09bd4e6bf 63 char* pn = (char*)&n;
andrewboyson 0:faa09bd4e6bf 64 char* ph = (char*)&h + 3;
andrewboyson 0:faa09bd4e6bf 65
andrewboyson 0:faa09bd4e6bf 66 *ph = *pn; ph--; pn++; // 3<-0
andrewboyson 0:faa09bd4e6bf 67 *ph = *pn; ph--; pn++; // 2<-1
andrewboyson 0:faa09bd4e6bf 68 *ph = *pn; ph--; pn++; // 1<-2
andrewboyson 0:faa09bd4e6bf 69 *ph = *pn; // 0<-3
andrewboyson 0:faa09bd4e6bf 70
andrewboyson 0:faa09bd4e6bf 71 return h;
andrewboyson 0:faa09bd4e6bf 72 }
andrewboyson 0:faa09bd4e6bf 73 int64_t NetToHost64(int64_t n)
andrewboyson 0:faa09bd4e6bf 74 {
andrewboyson 0:faa09bd4e6bf 75 int64_t h;
andrewboyson 0:faa09bd4e6bf 76
andrewboyson 0:faa09bd4e6bf 77 char* pn = (char*)&n;
andrewboyson 0:faa09bd4e6bf 78 char* ph = (char*)&h + 7;
andrewboyson 0:faa09bd4e6bf 79
andrewboyson 0:faa09bd4e6bf 80 *ph = *pn; ph--; pn++; // 7<-0
andrewboyson 0:faa09bd4e6bf 81 *ph = *pn; ph--; pn++; // 6<-1
andrewboyson 0:faa09bd4e6bf 82 *ph = *pn; ph--; pn++; // 5<-2
andrewboyson 0:faa09bd4e6bf 83 *ph = *pn; ph--; pn++; // 4<-3
andrewboyson 0:faa09bd4e6bf 84 *ph = *pn; ph--; pn++; // 3<-4
andrewboyson 0:faa09bd4e6bf 85 *ph = *pn; ph--; pn++; // 2<-5
andrewboyson 0:faa09bd4e6bf 86 *ph = *pn; ph--; pn++; // 1<-6
andrewboyson 0:faa09bd4e6bf 87 *ph = *pn; // 0<-7
andrewboyson 0:faa09bd4e6bf 88
andrewboyson 0:faa09bd4e6bf 89 return h;
andrewboyson 0:faa09bd4e6bf 90 }
andrewboyson 136:8a65abb0dc63 91 void NetInvert16(void* h, void* n)
andrewboyson 136:8a65abb0dc63 92 {
andrewboyson 136:8a65abb0dc63 93 char* pn = (char*)n;
andrewboyson 136:8a65abb0dc63 94 char* ph = (char*)h + 1;
andrewboyson 136:8a65abb0dc63 95
andrewboyson 136:8a65abb0dc63 96 *ph = *pn; ph--; pn++; // 1<-0
andrewboyson 136:8a65abb0dc63 97 *ph = *pn; // 0<-1
andrewboyson 136:8a65abb0dc63 98 }
andrewboyson 136:8a65abb0dc63 99 void NetInvert32(void* h, void* n)
andrewboyson 0:faa09bd4e6bf 100 {
andrewboyson 136:8a65abb0dc63 101 char* pn = (char*)n;
andrewboyson 136:8a65abb0dc63 102 char* ph = (char*)h + 3;
andrewboyson 0:faa09bd4e6bf 103
andrewboyson 136:8a65abb0dc63 104 *ph = *pn; ph--; pn++; // 3<-0
andrewboyson 136:8a65abb0dc63 105 *ph = *pn; ph--; pn++; // 2<-1
andrewboyson 136:8a65abb0dc63 106 *ph = *pn; ph--; pn++; // 1<-2
andrewboyson 136:8a65abb0dc63 107 *ph = *pn; // 0<-3
andrewboyson 0:faa09bd4e6bf 108 }
andrewboyson 136:8a65abb0dc63 109 void NetInvert64(void* h, void* n)
andrewboyson 136:8a65abb0dc63 110 {
andrewboyson 136:8a65abb0dc63 111 char* pn = (char*)n;
andrewboyson 136:8a65abb0dc63 112 char* ph = (char*)h + 7;
andrewboyson 136:8a65abb0dc63 113
andrewboyson 136:8a65abb0dc63 114 *ph = *pn; ph--; pn++; // 7<-0
andrewboyson 136:8a65abb0dc63 115 *ph = *pn; ph--; pn++; // 6<-1
andrewboyson 136:8a65abb0dc63 116 *ph = *pn; ph--; pn++; // 5<-2
andrewboyson 136:8a65abb0dc63 117 *ph = *pn; ph--; pn++; // 4<-3
andrewboyson 136:8a65abb0dc63 118 *ph = *pn; ph--; pn++; // 3<-4
andrewboyson 136:8a65abb0dc63 119 *ph = *pn; ph--; pn++; // 2<-5
andrewboyson 136:8a65abb0dc63 120 *ph = *pn; ph--; pn++; // 1<-6
andrewboyson 136:8a65abb0dc63 121 *ph = *pn; // 0<-7
andrewboyson 0:faa09bd4e6bf 122 }
andrewboyson 2:849103b5a16d 123
andrewboyson 136:8a65abb0dc63 124 void NetDirect16(void* h, void* n)
andrewboyson 136:8a65abb0dc63 125 {
andrewboyson 136:8a65abb0dc63 126 char* pn = (char*)n;
andrewboyson 136:8a65abb0dc63 127 char* ph = (char*)h;
andrewboyson 136:8a65abb0dc63 128
andrewboyson 136:8a65abb0dc63 129 *ph = *pn; ph++; pn++; // 0<-0
andrewboyson 136:8a65abb0dc63 130 *ph = *pn; // 1<-1
andrewboyson 136:8a65abb0dc63 131 }
andrewboyson 136:8a65abb0dc63 132 void NetDirect32(void* h, void* n)
andrewboyson 136:8a65abb0dc63 133 {
andrewboyson 136:8a65abb0dc63 134 char* pn = (char*)n;
andrewboyson 136:8a65abb0dc63 135 char* ph = (char*)h;
andrewboyson 136:8a65abb0dc63 136
andrewboyson 136:8a65abb0dc63 137 *ph = *pn; ph++; pn++; // 0<-0
andrewboyson 136:8a65abb0dc63 138 *ph = *pn; ph++; pn++; // 1<-1
andrewboyson 136:8a65abb0dc63 139 *ph = *pn; ph++; pn++; // 2<-2
andrewboyson 136:8a65abb0dc63 140 *ph = *pn; // 3<-3
andrewboyson 136:8a65abb0dc63 141 }
andrewboyson 136:8a65abb0dc63 142 void NetDirect64(void* h, void* n)
andrewboyson 136:8a65abb0dc63 143 {
andrewboyson 136:8a65abb0dc63 144 char* pn = (char*)n;
andrewboyson 136:8a65abb0dc63 145 char* ph = (char*)h;
andrewboyson 136:8a65abb0dc63 146
andrewboyson 136:8a65abb0dc63 147 *ph = *pn; ph++; pn++; // 0<-0
andrewboyson 136:8a65abb0dc63 148 *ph = *pn; ph++; pn++; // 1<-1
andrewboyson 136:8a65abb0dc63 149 *ph = *pn; ph++; pn++; // 2<-2
andrewboyson 136:8a65abb0dc63 150 *ph = *pn; ph++; pn++; // 3<-3
andrewboyson 136:8a65abb0dc63 151 *ph = *pn; ph++; pn++; // 4<-4
andrewboyson 136:8a65abb0dc63 152 *ph = *pn; ph++; pn++; // 5<-5
andrewboyson 136:8a65abb0dc63 153 *ph = *pn; ph++; pn++; // 6<-6
andrewboyson 136:8a65abb0dc63 154 *ph = *pn; // 7<-7
andrewboyson 136:8a65abb0dc63 155 }
andrewboyson 178:52714fef5ca1 156 void NetInit()
andrewboyson 178:52714fef5ca1 157 {
andrewboyson 59:e0e556c8bd46 158 LinkInit();
andrewboyson 149:39d1ba392f4b 159 TcpInit();
andrewboyson 48:952dddb74b8b 160 Ar4Init();
andrewboyson 48:952dddb74b8b 161 Ar6Init();
andrewboyson 172:9bc3c7b2cca1 162 NrInit();
andrewboyson 30:e34173b7585c 163 SlaacInit();
andrewboyson 113:904b40231907 164 NtpInit();
andrewboyson 2:849103b5a16d 165 }
andrewboyson 61:aad055f1b0d1 166 void NetMain()
andrewboyson 2:849103b5a16d 167 {
andrewboyson 142:a8c0890a58d1 168 int lastRestartPoint = RestartPoint;
andrewboyson 142:a8c0890a58d1 169 RestartPoint = FAULT_POINT_NetMain;
andrewboyson 115:5c003909bcf3 170 LinkMain();
andrewboyson 158:3adf725c0804 171 TcpMain();
andrewboyson 115:5c003909bcf3 172 Ar4Main();
andrewboyson 115:5c003909bcf3 173 Ar6Main();
andrewboyson 172:9bc3c7b2cca1 174 NrMain();
andrewboyson 115:5c003909bcf3 175 DnsMain();
andrewboyson 142:a8c0890a58d1 176 RestartPoint = lastRestartPoint;
andrewboyson 2:849103b5a16d 177 }