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

net.cpp

Committer:
andrewboyson
Date:
2017-11-03
Revision:
50:492f2d2954e4
Parent:
48:952dddb74b8b
Child:
52:fbc5a46b5e16

File content as of revision 50:492f2d2954e4:

#include  "mbed.h"
#include   "phy.h"
#include   "net.h"
#include   "tcp.h"
#include  "dhcp.h"
#include   "ar4.h"
#include   "ar6.h"
#include   "nr4.h"
#include   "nr6.h"
#include   "dns.h"
#include "slaac.h"
#include   "ndp.h"
#include   "ntp.h"
#include    "io.h"


bool NetTraceStack      = false;
bool NetTraceNewLine    = false;
bool NetTraceVerbose    = false;
bool NetPreferIp4Polled = false;

char* NetName4;
char* NetName6;

int16_t NetToHost16(int16_t n)
{
    int16_t h;
    
    char* pn = (char*)&n;
    char* ph = (char*)&h + 1;
    
    *ph = *pn; ph--; pn++; // 1<-0
    *ph = *pn;             // 0<-1

    return h;
}

int32_t NetToHost32(int32_t n)
{
    int32_t h;
    
    char* pn = (char*)&n;
    char* ph = (char*)&h + 3;
    
    *ph = *pn; ph--; pn++; // 3<-0
    *ph = *pn; ph--; pn++; // 2<-1
    *ph = *pn; ph--; pn++; // 1<-2
    *ph = *pn;             // 0<-3

    return h;
}
int64_t NetToHost64(int64_t n)
{
    int64_t h;
    
    char* pn = (char*)&n;
    char* ph = (char*)&h + 7;
    
    *ph = *pn; ph--; pn++; // 7<-0
    *ph = *pn; ph--; pn++; // 6<-1
    *ph = *pn; ph--; pn++; // 5<-2
    *ph = *pn; ph--; pn++; // 4<-3
    *ph = *pn; ph--; pn++; // 3<-4
    *ph = *pn; ph--; pn++; // 2<-5
    *ph = *pn; ph--; pn++; // 1<-6
    *ph = *pn;             // 0<-7

    return h;
}
uint16_t onesComplement(uint16_t start, int count, void* pData)
{    
    uint32_t sum = start;                               //Initialise the 32 bit accumulator with the last sum
    uint16_t* p = (uint16_t*)pData;                     //Set up a 16 bit pointer for the data
    
    while(count > 1)
    {
        sum += *p++;                                    // Add each pair of bytes into 32 bit accumulator
        count -= 2;
    }
    if(count) sum += * (uint8_t*) p;                    // Add left-over byte, if any
    while (sum>>16) sum = (sum & 0xffff) + (sum >> 16); // Add any carries from the sum back into the sum to make it ones complement
    return sum;
}
uint16_t NetCheckSumTwo(int count1, void* pData1, int count2, void* pData2)
{
    uint16_t sum = onesComplement(0, count1, pData1);
    return ~onesComplement(sum, count2, pData2);
}
uint16_t NetCheckSum(int count, void* pData)
{
    return ~onesComplement(0, count, pData);
}

int NetInit(char* name4, char* name6)
{
    NetName4 = name4;
    NetName6 = name6;
         PhyInit();
         TcpInit();
         Ar4Init();
         Ar6Init();
         Nr4Init();
         Nr6Init();
       SlaacInit();
    return 0;
}
int NetMain()
{
    PhyMain();
    Ar4Main();
    Ar6Main();
    Nr4Main();
    Nr6Main();
   DhcpMain();
    DnsMain();
    NdpMain();
    return 0;
}