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

ip6/slaac.cpp

Committer:
andrewboyson
Date:
2017-09-22
Revision:
35:93c39d260a83
Parent:
15:6ca6778168b1
Child:
37:793b39683406

File content as of revision 35:93c39d260a83:

#include "mbed.h"
#include  "mac.h"
#include  "ip6.h"

char SlaacLinkLocalIp[16];
char SlaacGlobalIp[16];

bool SlaacIsMe(char* ip)
{
    return Ip6IsSame(ip, SlaacLinkLocalIp) || Ip6IsSame(ip, SlaacGlobalIp);
}

void SlaacMakeGlobal(char* pPrefix)
{
    memcpy(SlaacGlobalIp, pPrefix, 8);
    char* p = SlaacGlobalIp + 8;
    *p++ = MacLocal[0] | 0x02; //Modified EUI-64
    *p++ = MacLocal[1];
    *p++ = MacLocal[2];
    *p++ = 0xFF;
    *p++ = 0xFE;
    *p++ = MacLocal[3];
    *p++ = MacLocal[4];
    *p++ = MacLocal[5];
    
}
void SlaacInit()
{
    char* p = SlaacLinkLocalIp;
    *p++ = 0xFE;
    *p++ = 0x80;
    *p++ = 0x00;
    *p++ = 0x00;
    *p++ = 0x00;
    *p++ = 0x00;
    *p++ = 0x00;
    *p++ = 0x00;
    *p++ = MacLocal[0] | 0x02; //Modified EUI-64
    *p++ = MacLocal[1];
    *p++ = MacLocal[2];
    *p++ = 0xFF;
    *p++ = 0xFE;
    *p++ = MacLocal[3];
    *p++ = MacLocal[4];
    *p++ = MacLocal[5];
}