Benoît Locher / mbedNet
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers NetIF.h Source File

NetIF.h

00001 /*
00002  * $Id: NetIF.h 29 2011-06-11 14:53:08Z benoit $
00003  * $Author: benoit $
00004  * $Date: 2011-06-11 16:53:08 +0200 (sam., 11 juin 2011) $
00005  * $Rev: 29 $
00006  * 
00007  * 
00008  * 
00009  * 
00010  * 
00011  */
00012  
00013 #ifndef __NETIF_H__
00014 #define __NETIF_H__
00015 
00016 #include "mbedNet.h"
00017 
00018 
00019 struct IPv4_Header;
00020 typedef struct IPv4_Header IPv4_Header_t;
00021 struct NetIF;
00022 typedef struct NetIF NetIF_t;
00023 struct Protocol_Handler;
00024 typedef struct Protocol_Handler Protocol_Handler_t;
00025 typedef int32_t (*enet_drv_init_t)(NetIF_t *);
00026 typedef int32_t (*enet_drv_read_t)(uint8_t **, int32_t *);
00027 typedef int32_t (*enet_drv_write_t)(uint8_t *, int32_t);
00028 typedef void (*enet_drv_enable_t)(void);
00029 typedef void (*enet_drv_disable_t)(void);
00030 typedef uint8_t *(*enet_drv_get_tx_buffer_t)(void);
00031 
00032 
00033 enum Protocol_ID
00034 {
00035     Protocol_ID_Ethernet = 0,
00036     Protocol_ID_ARP,
00037     Protocol_ID_IPv4,
00038     Protocol_ID_ICMPv4,
00039     Protocol_ID_UDPv4,
00040     Protocol_ID_TCPv4,
00041     Protocol_ID_Count,
00042 };
00043 typedef enum Protocol_ID Protocol_ID_t;
00044 
00045 
00046 struct NetPacket
00047 {
00048     int8_t            depth;
00049     uint8_t            *headerPtrTable[NET_ENCAPSULATION_MAX_DEPTH];
00050     uint16_t        headerLenTable[NET_ENCAPSULATION_MAX_DEPTH];
00051     Protocol_ID_t    protocolTable[NET_ENCAPSULATION_MAX_DEPTH];
00052     uint8_t            *data;
00053     int32_t            length;
00054 };
00055 typedef struct NetPacket NetPacket_t;
00056 
00057 
00058 enum API_ID
00059 {
00060     API_ID_Sockets,
00061     API_ID_Count,
00062 };
00063 typedef enum API_ID API_ID_t;
00064 
00065 
00066 struct Net_API
00067 {
00068     API_ID_t        apiID;
00069     void             (*InitAPI)(void);
00070     int32_t         (*Hook)(NetIF_t *netIF, Protocol_ID_t protocolID, NetPacket_t *packet);
00071 };
00072 typedef struct Net_API Net_API_t;
00073 
00074 
00075 typedef int32_t (*Protocol_RegisterFunction_t)(Protocol_Handler_t *);
00076 typedef void (*Protocol_HandlerFunction_t)(NetIF_t *, NetPacket_t *);
00077 typedef void (*Protocol_InitFunction_t)(void);
00078 typedef int32_t (*API_RegisterFunction_t)(Net_API_t *);
00079 typedef void (*PeriodicFunction_t)(void);
00080 typedef int16_t FunctionPeriod_t;
00081 
00082 
00083 typedef int32_t    NetIF_DriverIndex_t;
00084 struct NetIF_Driver
00085 {
00086     char                        *name;
00087     enet_drv_init_t             Init;
00088     enet_drv_read_t             Read;
00089     enet_drv_write_t            Write;
00090     enet_drv_enable_t           Enable;
00091     enet_drv_disable_t          Disable;
00092     enet_drv_get_tx_buffer_t    GetTxBuffer;
00093     Protocol_Handler_t          *protocolHandler;
00094     uint16_t                    mtu;
00095 };
00096 typedef struct NetIF_Driver NetIF_Driver_t;
00097 
00098 
00099 typedef int32_t                    Protocol_Index_t;
00100 #define    PROTOCOL_INDEX_NOT_INITIALIZED    -1
00101 
00102 typedef uint32_t                Protocol_Number_t;
00103 #define    PROTOCOL_NUMBER_NONE            0
00104 
00105 struct Protocol_Handler
00106 {
00107     Protocol_Index_t            index;
00108     Protocol_ID_t                protocolID;
00109     Protocol_Number_t            protocolNumber;
00110     Protocol_InitFunction_t        Init;
00111     Protocol_HandlerFunction_t    HandlePacket;
00112     Protocol_RegisterFunction_t    RegisterProtocol;
00113     API_RegisterFunction_t        RegisterAPI;
00114 };
00115 
00116 
00117 typedef int32_t    NetIF_Index_t;
00118 struct NetIF
00119 {
00120     NetIF_Index_t                  index;
00121     const char                     *name;
00122     IPv4_Addr_t                    ipv4Address;
00123     IPv4_Addr_t                    ipv4Netmask;
00124     IPv4_Addr_t                    ipv4Network;
00125     IPv4_Addr_t                    ipv4Gateway;
00126     IPv4_Addr_t                    ipv4Broadcast;
00127     NetIF_Driver_t                 *driver;
00128     void                           *driverParameter;
00129     Bool_t                          up;
00130 };
00131 
00132 
00133 extern const char                 *api_IDNames[API_ID_Count];
00134 extern const char                 *protocol_IDNames[Protocol_ID_Count];
00135 
00136 
00137 NetIF_t    *NetIF_RegisterInterface(IPv4_Addr_t *address, IPv4_Addr_t *netmask, IPv4_Addr_t *gateway, NetIF_Driver_t *driver, void *driverParameter);
00138 int32_t    NetIF_RegisterPeriodicFunction(char *name, PeriodicFunction_t function, FunctionPeriod_t period);
00139 int32_t    NetIF_ProcessTimers(int32_t elapsedTime);
00140 int32_t    NetIF_SendIPv4Packet(IPv4_Header_t *ipv4Header);
00141 int32_t    NetIF_Up(NetIF_t *netIF);
00142 int32_t    NetIF_Down(NetIF_t *netIF);
00143 void       NetIF_ProtoPop(NetPacket_t *packet);
00144 void       NetIF_ProtoPush(NetPacket_t *packet, int32_t headerSize, Protocol_ID_t protocol);
00145 
00146 #endif /* __NETIF_H__ */