X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Modules%2FIPStack%2Fipstack.h;h=2076d5a778037119142e22e501006aba393b385e;hb=37eb4d555b07704870b7dc87591d72b5b2539dec;hp=885e048dd2d1150e95695c99de4cd0ffe9351ec3;hpb=8025b7daeb599847864cc3d8e3c2a41e63e3789d;p=tpg%2Facess2.git diff --git a/Modules/IPStack/ipstack.h b/Modules/IPStack/ipstack.h index 885e048d..2076d5a7 100644 --- a/Modules/IPStack/ipstack.h +++ b/Modules/IPStack/ipstack.h @@ -38,26 +38,35 @@ struct sMacAddr { 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[]; }; @@ -68,12 +77,12 @@ struct sInterface { 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 }; /** @@ -107,6 +116,9 @@ static const tMacAddr cMAC_BROADCAST = {{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}}; extern int IPStack_AddFile(tSocketFile *File); extern int IPStack_GetAddressSize(int AddressType); -extern int IPStack_CompareAddress(int AddressType, void *Address1, void *Address2, int CheckBits); +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