11 typedef union uIPv4 tIPv4;
12 typedef union uIPv6 tIPv6;
13 typedef struct sMacAddr tMacAddr;
14 typedef struct sAdapter tAdapter;
15 typedef struct sInterface tInterface;
16 typedef struct sSocketFile tSocketFile;
18 typedef enum eIPErrorMode
21 IPERR_HOST_UNREACHABLE,
22 IPERR_PORT_UNREACHABLE,
25 // NOTE: Non-const to allow reuse of Rx buffer for prepping Tx
26 typedef void tIPRxCallback(tInterface *Interface, void *Address, int Length, void *Buffer);
27 typedef void tIPErrorCallback(tInterface *Interface, tIPErrorMode mode, const void *Address, int Length, const void *Buffer);
29 enum eInterfaceTypes {
31 AF_INET4 = 4, // tIPv4
38 } __attribute__((packed));
44 } __attribute__((packed));
48 } __attribute__((packed));
51 * \brief Route definition structure
53 typedef struct sRoute {
56 tVFS_Node Node; //!< Node for route manipulation
58 tInterface *Interface; //!< Interface for this route
59 int AddressType; //!< 0: Invalid, 4: IPv4, 6: IPv4
60 void *Network; //!< Network - Pointer to tIPv4/tIPv6/... at end of structure
61 int SubnetBits; //!< Number of bits in \a Network that are valid
62 void *NextHop; //!< Next Hop address - Pointer to tIPv4/tIPv6/... at end of structure
63 int Metric; //!< Route priority
67 struct sInterface *Next; //!< Next interface in list
69 tVFS_Node Node; //!< Node to use the interface
71 tAdapter *Adapter; //!< Adapter the interface is associated with
72 int TimeoutDelay; //!< Time in miliseconds before a packet times out
73 int Type; //!< Interface type, see ::eInterfaceTypes
75 void *Address; //!< IP address (stored after the Name)
76 int SubnetBits; //!< Number of bits that denote the address network
78 tRoute Route; //!< Interface route
85 * \brief Represents a network adapter
88 struct sAdapter *Next;
90 int DeviceFD; //!< File descriptor of the device
91 int NRef; //!< Number of times it's been referenced
93 tMacAddr MacAddr; //!< Physical address of the adapter
94 int DeviceLen; //!< Device name length
95 char Device[]; //!< Device name
100 * \brief Describes a socket file definition
104 struct sSocketFile *Next;
107 tVFS_Node *(*Init)(tInterface *Interface);
110 static const tMacAddr cMAC_BROADCAST = {{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}};
111 static const tMacAddr cMAC_ZERO = {{0x00,0x00,0x00,0x00,0x00,0x00}};
113 #define MAC_SET(t,v) memcpy(&(t),&(v),sizeof(tMacAddr))
114 #define IP4_SET(t,v) (t).L = (v).L;
115 #define IP6_SET(t,v) memcpy(&(t),&(v),sizeof(tIPv6))
117 #define MAC_EQU(a,b) (memcmp(&(a),&(b),sizeof(tMacAddr))==0)
118 #define IP4_EQU(a,b) ((a).L==(b).L)
119 #define IP6_EQU(a,b) (memcmp(&(a),&(b),sizeof(tIPv6))==0)
123 #define htons(v) BigEndian16(v)
124 #define htonl(v) BigEndian32(v)
126 #define ntohs(v) BigEndian16(v)
127 #define ntohl(v) BigEndian32(v)
129 extern int IPStack_AddFile(tSocketFile *File);
130 extern int IPStack_GetAddressSize(int AddressType);
131 extern int IPStack_CompareAddress(int AddressType, const void *Address1, const void *Address2, int CheckBits);
132 extern bool IPStack_AddressIsBroadcast(int AddrType, const void *Addr, int SubnetBits);
133 extern const char *IPStack_PrintAddress(int AddressType, const void *Address);
135 extern tRoute *IPStack_FindRoute(int AddressType, tInterface *Interface, const void *Address);