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:
Fri Jul 19 17:48:06 2019 +0000
Revision:
151:bde6f7da1755
Parent:
149:39d1ba392f4b
Child:
158:3adf725c0804
Removed private key and certificate from semihost storage as found to be unreliable (though secure) and moved it into flash storage (reliable, simple, but visible on mbed.

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