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:
Tue Dec 29 19:14:35 2020 +0000
Revision:
178:52714fef5ca1
Parent:
172:9bc3c7b2cca1
Included host name in DHCP request option 12 to allow my Sky router to display the host name instead of 'UNKNOWN'. Also removed different host names for IPv4 and IPv6.

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 }