Uint8 B[6];
} __attribute__((packed));
+/**
+ * \brief Route definition structure
+ */
+typedef struct sRoute {
+ struct sRoute *Next;
+
+ tVFS_Node Node; //!< Node for route manipulation
+
+ tInterface *Interface; //!< Interface for this route
+ int AddressType; //!< 0: Invalid, 4: IPv4, 6: IPv4
+ void *Network; //!< Network - Pointer to tIPv4/tIPv6/... at end of structure
+ int SubnetBits; //!< Number of bits in \a Network that are valid
+ void *NextHop; //!< Next Hop address - Pointer to tIPv4/tIPv6/... at end of structure
+ int Metric; //!< Route priority
+} tRoute;
+
struct sInterface {
- struct sInterface *Next;
- tVFS_Node Node;
- tAdapter *Adapter;
- int TimeoutDelay; // Time in miliseconds before a packet times out
- int Type; // 0 for disabled, 4 for IPv4 and 6 for IPv6
+ struct sInterface *Next; //!< Next interface in list
- //TODO: Remove explicit mentions of IPv4/IPv6 and make more general
- union {
- struct {
- tIPv6 Address;
- int SubnetBits; //Should this be outside the union?
- } IP6;
-
- struct {
- tIPv4 Address;
- tIPv4 Gateway;
- int SubnetBits;
- } IP4;
- };
+ tVFS_Node Node; //!< Node to use the interface
+
+ tAdapter *Adapter; //!< Adapter the interface is associated with
+ int TimeoutDelay; //!< Time in miliseconds before a packet times out
+ int Type; //!< Interface type, see ::eInterfaceTypes
+
+ void *Address; //!< IP address (stored after the Name)
+ int SubnetBits; //!< Number of bits that denote the address network
+
+ tRoute Route; //!< Interface route
+
+ char Name[];
};
/**
struct sAdapter {
struct sAdapter *Next;
- int DeviceFD;
- int NRef;
+ int DeviceFD; //!< File descriptor of the device
+ int NRef; //!< Number of times it's been referenced
- tMacAddr MacAddr;
- int DeviceLen;
- char Device[];
+ tMacAddr MacAddr; //!< Physical address of the adapter
+ int DeviceLen; //!< Device name length
+ char Device[]; //!< Device name
};
/**
};
static const tMacAddr cMAC_BROADCAST = {{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}};
+static const tMacAddr cMAC_ZERO = {{0x00,0x00,0x00,0x00,0x00,0x00}};
#define MAC_SET(t,v) memcpy(&(t),&(v),sizeof(tMacAddr))
#define IP4_SET(t,v) (t).L = (v).L;
extern int IPStack_AddFile(tSocketFile *File);
extern int IPStack_GetAddressSize(int AddressType);
+extern int IPStack_CompareAddress(int AddressType, const void *Address1, const void *Address2, int CheckBits);
+extern const char *IPStack_PrintAddress(int AddressType, const void *Address);
+
+extern tRoute *IPStack_FindRoute(int AddressType, tInterface *Interface, void *Address);
#endif