typedef void (*tIPCallback)(tInterface *Interface, void *Address, int Length, void *Buffer);
+enum eInterfaceTypes {
+ AF_NULL,
+ AF_INET4 = 4, // tIPv4
+ AF_INET6 = 6 // tIPv6
+};
+
union uIPv4 {
Uint32 L;
Uint8 B[4];
} __attribute__((packed));
union uIPv6 {
+ Uint16 W[8];
Uint32 L[4];
Uint8 B[16];
} __attribute__((packed));
struct sInterface *Next;
tVFS_Node Node;
tAdapter *Adapter;
- int TimeoutDelay; // Time in miliseconds before a connection times out
+ int TimeoutDelay; // Time in miliseconds before a packet times out
int Type; // 0 for disabled, 4 for IPv4 and 6 for IPv6
+
+ //TODO: Remove explicit mentions of IPv4/IPv6 and make more general
union {
struct {
tIPv6 Address;
#define IP4_SET(t,v) (t).L = (v).L;
#define IP6_SET(t,v) memcpy(&(t),&(v),sizeof(tIPv6))
-#define MAC_EQU(a,b) memcmp(&(a),&(b),sizeof(tMacAddr))
+#define MAC_EQU(a,b) (memcmp(&(a),&(b),sizeof(tMacAddr))==0)
#define IP4_EQU(a,b) ((a).L==(b).L)
-#define IP6_EQU(a,b) memcmp(&(a),&(b),sizeof(tIPv6))
+#define IP6_EQU(a,b) (memcmp(&(a),&(b),sizeof(tIPv6))==0)
// === FUNCTIONS ===
#define htonb(v) (v)
-#define htons(in) BigEndian16(in)
-#define htonl(in) BigEndian32(in)
+#define htons(v) BigEndian16(v)
+#define htonl(v) BigEndian32(v)
#define ntonb(v) (v)
-#define ntohs(in) BigEndian16(in)
-#define ntohl(in) BigEndian32(in)
+#define ntohs(v) BigEndian16(v)
+#define ntohl(v) BigEndian32(v)
extern int IPStack_AddFile(tSocketFile *File);
+extern int IPStack_GetAddressSize(int AddressType);
#endif