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 May 05 17:44:16 2017 +0000
Revision:
14:e75a59c1123d
Parent:
11:c051adb70c5a
Child:
22:914b970356f0
Made IP addresses and ports available to debug messages

Who changed what in which revision?

UserRevisionLine numberNew contents of line
andrewboyson 7:b794780e33b4 1 #include "mbed.h"
andrewboyson 7:b794780e33b4 2 #include "phy.h"
andrewboyson 7:b794780e33b4 3 #include "net.h"
andrewboyson 7:b794780e33b4 4 #include "tcp.h"
andrewboyson 7:b794780e33b4 5 #include "dhcp.h"
andrewboyson 9:91dae5300a4d 6 #include "ar.h"
andrewboyson 7:b794780e33b4 7 #include "dns.h"
andrewboyson 7:b794780e33b4 8 #include "slaac.h"
andrewboyson 9:91dae5300a4d 9 #include "ndp.h"
andrewboyson 2:849103b5a16d 10
andrewboyson 10:f0854784e960 11 char* NetName;
andrewboyson 10:f0854784e960 12
andrewboyson 0:faa09bd4e6bf 13 int16_t NetToHost16(int16_t n)
andrewboyson 0:faa09bd4e6bf 14 {
andrewboyson 0:faa09bd4e6bf 15 int16_t h;
andrewboyson 0:faa09bd4e6bf 16
andrewboyson 0:faa09bd4e6bf 17 char* pn = (char*)&n;
andrewboyson 0:faa09bd4e6bf 18 char* ph = (char*)&h + 1;
andrewboyson 0:faa09bd4e6bf 19
andrewboyson 0:faa09bd4e6bf 20 *ph = *pn; ph--; pn++; // 1<-0
andrewboyson 0:faa09bd4e6bf 21 *ph = *pn; // 0<-1
andrewboyson 0:faa09bd4e6bf 22
andrewboyson 0:faa09bd4e6bf 23 return h;
andrewboyson 0:faa09bd4e6bf 24 }
andrewboyson 0:faa09bd4e6bf 25
andrewboyson 0:faa09bd4e6bf 26 int32_t NetToHost32(int32_t n)
andrewboyson 0:faa09bd4e6bf 27 {
andrewboyson 0:faa09bd4e6bf 28 int32_t h;
andrewboyson 0:faa09bd4e6bf 29
andrewboyson 0:faa09bd4e6bf 30 char* pn = (char*)&n;
andrewboyson 0:faa09bd4e6bf 31 char* ph = (char*)&h + 3;
andrewboyson 0:faa09bd4e6bf 32
andrewboyson 0:faa09bd4e6bf 33 *ph = *pn; ph--; pn++; // 3<-0
andrewboyson 0:faa09bd4e6bf 34 *ph = *pn; ph--; pn++; // 2<-1
andrewboyson 0:faa09bd4e6bf 35 *ph = *pn; ph--; pn++; // 1<-2
andrewboyson 0:faa09bd4e6bf 36 *ph = *pn; // 0<-3
andrewboyson 0:faa09bd4e6bf 37
andrewboyson 0:faa09bd4e6bf 38 return h;
andrewboyson 0:faa09bd4e6bf 39 }
andrewboyson 0:faa09bd4e6bf 40 int64_t NetToHost64(int64_t n)
andrewboyson 0:faa09bd4e6bf 41 {
andrewboyson 0:faa09bd4e6bf 42 int64_t h;
andrewboyson 0:faa09bd4e6bf 43
andrewboyson 0:faa09bd4e6bf 44 char* pn = (char*)&n;
andrewboyson 0:faa09bd4e6bf 45 char* ph = (char*)&h + 7;
andrewboyson 0:faa09bd4e6bf 46
andrewboyson 0:faa09bd4e6bf 47 *ph = *pn; ph--; pn++; // 7<-0
andrewboyson 0:faa09bd4e6bf 48 *ph = *pn; ph--; pn++; // 6<-1
andrewboyson 0:faa09bd4e6bf 49 *ph = *pn; ph--; pn++; // 5<-2
andrewboyson 0:faa09bd4e6bf 50 *ph = *pn; ph--; pn++; // 4<-3
andrewboyson 0:faa09bd4e6bf 51 *ph = *pn; ph--; pn++; // 3<-4
andrewboyson 0:faa09bd4e6bf 52 *ph = *pn; ph--; pn++; // 2<-5
andrewboyson 0:faa09bd4e6bf 53 *ph = *pn; ph--; pn++; // 1<-6
andrewboyson 0:faa09bd4e6bf 54 *ph = *pn; // 0<-7
andrewboyson 0:faa09bd4e6bf 55
andrewboyson 0:faa09bd4e6bf 56 return h;
andrewboyson 0:faa09bd4e6bf 57 }
andrewboyson 0:faa09bd4e6bf 58 uint16_t onesComplement(uint16_t start, int count, void* pData)
andrewboyson 0:faa09bd4e6bf 59 {
andrewboyson 0:faa09bd4e6bf 60 uint32_t sum = start; //Initialise the 32 bit accumulator with the last sum
andrewboyson 0:faa09bd4e6bf 61 uint16_t* p = (uint16_t*)pData; //Set up a 16 bit pointer for the data
andrewboyson 0:faa09bd4e6bf 62
andrewboyson 0:faa09bd4e6bf 63 while(count > 1)
andrewboyson 0:faa09bd4e6bf 64 {
andrewboyson 0:faa09bd4e6bf 65 sum += *p++; // Add each pair of bytes into 32 bit accumulator
andrewboyson 0:faa09bd4e6bf 66 count -= 2;
andrewboyson 0:faa09bd4e6bf 67 }
andrewboyson 0:faa09bd4e6bf 68 if(count) sum += * (uint8_t*) p; // Add left-over byte, if any
andrewboyson 0:faa09bd4e6bf 69 while (sum>>16) sum = (sum & 0xffff) + (sum >> 16); // Add any carries from the sum back into the sum to make it ones complement
andrewboyson 0:faa09bd4e6bf 70 return sum;
andrewboyson 0:faa09bd4e6bf 71 }
andrewboyson 0:faa09bd4e6bf 72 uint16_t NetCheckSumTwo(int count1, void* pData1, int count2, void* pData2)
andrewboyson 0:faa09bd4e6bf 73 {
andrewboyson 0:faa09bd4e6bf 74 uint16_t sum = onesComplement(0, count1, pData1);
andrewboyson 0:faa09bd4e6bf 75 return ~onesComplement(sum, count2, pData2);
andrewboyson 0:faa09bd4e6bf 76 }
andrewboyson 0:faa09bd4e6bf 77 uint16_t NetCheckSum(int count, void* pData)
andrewboyson 0:faa09bd4e6bf 78 {
andrewboyson 0:faa09bd4e6bf 79 return ~onesComplement(0, count, pData);
andrewboyson 0:faa09bd4e6bf 80 }
andrewboyson 2:849103b5a16d 81
andrewboyson 2:849103b5a16d 82 static bool ticked()
andrewboyson 2:849103b5a16d 83 {
andrewboyson 2:849103b5a16d 84 static time_t lastT = 0;
andrewboyson 2:849103b5a16d 85 time_t thisT = time(NULL);
andrewboyson 2:849103b5a16d 86 bool oneshot = lastT != thisT;
andrewboyson 2:849103b5a16d 87 lastT = thisT;
andrewboyson 2:849103b5a16d 88 return oneshot;
andrewboyson 2:849103b5a16d 89 }
andrewboyson 2:849103b5a16d 90
andrewboyson 10:f0854784e960 91 int NetInit(char* name)
andrewboyson 2:849103b5a16d 92 {
andrewboyson 10:f0854784e960 93 NetName = name;
andrewboyson 2:849103b5a16d 94 PhyInit();
andrewboyson 2:849103b5a16d 95 TcpInit();
andrewboyson 9:91dae5300a4d 96 ArInit();
andrewboyson 7:b794780e33b4 97 SlaacInit();
andrewboyson 2:849103b5a16d 98 return 0;
andrewboyson 2:849103b5a16d 99 }
andrewboyson 2:849103b5a16d 100 int NetMain()
andrewboyson 2:849103b5a16d 101 {
andrewboyson 2:849103b5a16d 102 PhyMain();
andrewboyson 9:91dae5300a4d 103 ArMain();
andrewboyson 2:849103b5a16d 104 if (ticked())
andrewboyson 2:849103b5a16d 105 {
andrewboyson 2:849103b5a16d 106 DhcpTick();
andrewboyson 9:91dae5300a4d 107 ArTick();
andrewboyson 7:b794780e33b4 108 DnsTick();
andrewboyson 9:91dae5300a4d 109 NdpTick();
andrewboyson 2:849103b5a16d 110 }
andrewboyson 2:849103b5a16d 111 return 0;
andrewboyson 2:849103b5a16d 112 }