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

arp/arphdr.c

Committer:
andrewboyson
Date:
2021-05-20
Revision:
200:5acbc41bf469
Parent:
136:8a65abb0dc63

File content as of revision 200:5acbc41bf469:

#include <stdint.h>

#include "net.h"

char* ArpHdrPtrHardwareType      (char* pPacket) { return pPacket +  0; }
char* ArpHdrPtrProtocolType      (char* pPacket) { return pPacket +  2; }
char* ArpHdrPtrHardwareLength    (char* pPacket) { return pPacket +  4; }
char* ArpHdrPtrProtocolLength    (char* pPacket) { return pPacket +  5; }
char* ArpHdrPtrOpCode            (char* pPacket) { return pPacket +  6; }
char* ArpHdrPtrSenderHardwareAddr(char* pPacket) { return pPacket +  8; }
char* ArpHdrPtrSenderProtocolAddr(char* pPacket) { return pPacket + 14; }
char* ArpHdrPtrTargetHardwareAddr(char* pPacket) { return pPacket + 18; }
char* ArpHdrPtrTargetProtocolAddr(char* pPacket) { return pPacket + 24; }
const int ARP_HEADER_LENGTH = 28;

int16_t  ArpHdrGetHardwareType      (char* pPacket) { int16_t  r; NetInvert16(&r, ArpHdrPtrHardwareType      (pPacket)); return r; }
int16_t  ArpHdrGetProtocolType      (char* pPacket) { int16_t  r; NetInvert16(&r, ArpHdrPtrProtocolType      (pPacket)); return r; }
int8_t   ArpHdrGetHardwareLength    (char* pPacket) { return         *( int8_t* )(ArpHdrPtrHardwareLength    (pPacket));           }
int8_t   ArpHdrGetProtocolLength    (char* pPacket) { return         *( int8_t* )(ArpHdrPtrProtocolLength    (pPacket));           }
int16_t  ArpHdrGetOpCode            (char* pPacket) { int16_t  r; NetInvert16(&r, ArpHdrPtrOpCode            (pPacket)); return r; }
uint32_t ArpHdrGetSenderProtocolAddr(char* pPacket) { uint32_t r; NetDirect32(&r, ArpHdrPtrSenderProtocolAddr(pPacket)); return r; }
uint32_t ArpHdrGetTargetProtocolAddr(char* pPacket) { uint32_t r; NetDirect32(&r, ArpHdrPtrTargetProtocolAddr(pPacket)); return r; }

void     ArpHdrSetHardwareType      (char* pPacket,  int16_t value) {  NetInvert16(ArpHdrPtrHardwareType      (pPacket),  &value); }
void     ArpHdrSetProtocolType      (char* pPacket,  int16_t value) {  NetInvert16(ArpHdrPtrProtocolType      (pPacket),  &value); }
void     ArpHdrSetHardwareLength    (char* pPacket,  int8_t  value) { *( int8_t* )(ArpHdrPtrHardwareLength    (pPacket)) = value ; }
void     ArpHdrSetProtocolLength    (char* pPacket,  int8_t  value) { *( int8_t* )(ArpHdrPtrProtocolLength    (pPacket)) = value ; }
void     ArpHdrSetOpCode            (char* pPacket,  int16_t value) {  NetInvert16(ArpHdrPtrOpCode            (pPacket),  &value); }
void     ArpHdrSetSenderProtocolAddr(char* pPacket, uint32_t value) {  NetDirect32(ArpHdrPtrSenderProtocolAddr(pPacket),  &value); }
void     ArpHdrSetTargetProtocolAddr(char* pPacket, uint32_t value) {  NetDirect32(ArpHdrPtrTargetProtocolAddr(pPacket),  &value); }