X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Modules%2FIPStack%2Fipv4.h;h=e8c2bc388d5ad55ebe039f69103ec559bb321a71;hb=775bf8013abe9fe4ef3d4883ea2e43bba2a84da1;hp=67b3dc83252882a4307b2773d91aa571e3d50a25;hpb=6c5a509b5e14e097ca537c539bc9babe3b8f0c4c;p=tpg%2Facess2.git diff --git a/Modules/IPStack/ipv4.h b/Modules/IPStack/ipv4.h index 67b3dc83..e8c2bc38 100644 --- a/Modules/IPStack/ipv4.h +++ b/Modules/IPStack/ipv4.h @@ -12,9 +12,10 @@ typedef struct sIPv4Header tIPv4Header; struct sIPv4Header { struct { - unsigned Version: 4; // = 4 + // Spec says Version is first, but stupid bit ordering unsigned HeaderLength: 4; // in 4-byte chunks - }; + unsigned Version: 4; // = 4 + } __attribute__((packed)); Uint8 DiffServices; // Differentiated Services Uint16 TotalLength; Uint16 Identifcation; @@ -24,7 +25,7 @@ struct sIPv4Header unsigned DontFragment: 1; unsigned MoreFragments: 1; unsigned FragOffLow: 5; - }; + } __attribute__((packed)); Uint8 FragOffHi; // Number of 8-byte blocks from the original start Uint8 TTL; // Max number of hops effectively @@ -35,7 +36,7 @@ struct sIPv4Header tIPv4 Destination; Uint8 Options[]; -}; +} __attribute__((packed)); #define IP4PROT_ICMP 1 #define IP4PROT_TCP 6 @@ -43,4 +44,9 @@ struct sIPv4Header #define IPV4_ETHERNET_ID 0x0800 +// === FUNCTIONS === +extern int IPv4_RegisterCallback(int ID, tIPCallback Callback); +extern Uint16 IPv4_Checksum(void *Buf, int Size); +extern int IPv4_SendPacket(tInterface *Iface, tIPv4 Address, int Protocol, int ID, int Length, void *Data); + #endif