?? dhcpc.h
字號:
// dhcpc.h
//
#ifndef __DHCPC_H__
#define __DHCPC_H__
//#include
#include <linux/if_ether.h> //for ethhdr
#include <stdint.h>
#include "dhcpprotol.h"
#include "IntotoDNS.h"
#include "DhcpcMsg.h" //
//#define INADDR_LOOPBACK 0x7f000001
#define BROADCAST_IP_ADDRESS 0xffffffff
#define DHCP_CLIENT_CONFIG_PORT 9000
#define MAX_INTERFACE_NAMELEN 16
#define MAX_INTERFACE_NUM 16
//DHCPC Listen event config
#ifndef __WAG302TYPE_H__
#define TRUE 1
#define FALSE 0
#endif
#define MAX_FDS_TOPOLL 2
#define IPADDR_LEN 4
typedef uint32_t ipaddr;
typedef uint32_t bool_t;
#ifndef _NETINET_IN_H // /usr/include/netinet/in.h
typedef uint32_t in_addr_t;
#endif
enum WaitEventType
{
WAIT_DISCOVER = 0,
WAIT_REQUEST,
WAIT_INFORM
};
typedef struct DHCPWAITEvent_s
{
#define DEFAULT_DISCOVER_TIMEOUT 6
#define DEFAULT_REQUEST_TIMEOUT 6
bool_t bStartWaitEvent;
uint32_t iWaitStartTime;
uint32_t iWaitTimeOutTime;
bool_t iInitSet;
enum WaitEventType EventType;
int iIfIndex;//Interface 's index
char cszIfName[MAX_INTERFACE_NAMELEN];
struct DHCPClientBlock_s *pPointToBlock; /*point to interface struct */
bool_t fWillSend;
uint32_t uiStartLeaseTime;
int iTimeOutNums;
int iSendNums;
struct DHCPWAITEvent_s *Next;
}DHCPWAITEvent_t;
typedef struct DHCPClientBlock_s
{
char cszIfName[MAX_INTERFACE_NAMELEN];
#define MAX_VALID_MAC_ADDR_LEN 6
uint8_t aucHwAddress[MAX_VALID_MAC_ADDR_LEN];
uint32_t ulTransActionId; //to identify
uint8_t CurrentState;
ipaddr LeasedIpAddress;
ipaddr DHCPServerIpAddr;
uint32_t ulLeasedTime;
uint32_t ulStartLeaseTime;
uint32_t ulRenewTmOut;
uint32_t ulRebindTmOut;
uint32_t ulRemainingTime;
bool_t bUsed;
bool_t bDHCPClientEnabled;
//xhema 20041118
int uiIfIndex; //interface index
bool_t bIfActive; //if interface active state
struct DhcpcIPSetting_t sAllocedStruct; /*dhcp server alloced parma*/
struct DhcpcIPSetting_t sDefaultConfigStruct;/*default parma */
struct DHCPWAITEvent_s *pTimer; /*interface's timeout point */
//end
//xhema 20041126
bool_t bRequestToConnect; //DHCP Client timeout will set default ip setting,but it still try to connect to dhcp server
uint32_t ulLeaveTime;
//end
//xhema 20041201
bool_t bSendArp;
uint32_t ulLeaveArpSendTime; //DHCP Client will send arp packet on minute to find ip clash
struct DHCPClientBlock_s *next;
}DHCPClientBlock_t;
/* DHCP client Current state */
typedef enum DHCPClientCurrentStatus_t
{
DHCP_CLIENT_INITIALIZED = 0,
DHCP_CLIENT_SELECT,
DHCP_CLIENT_REQUEST,
DHCP_CLIENT_ARP_AWAIT,
DHCP_CLIENT_BOUND,
DHCP_CLIENT_RENEW,
DHCP_CLIENT_REBIND,
DHCP_CLIENT_STOP,
} DHCPClientCurrentStatus_t;
//udphdr
struct udphdr {
uint16_t source; /* source port */
uint16_t dest; /* destination port */
int16_t len; /* udp length */
uint16_t check; /* udp checksum */
};
#ifndef IPTOS_LOWDELAY
# define IPTOS_LOWDELAY 0x10
# define IPTOS_THROUGHPUT 0x08
# define IPTOS_RELIABILITY 0x04
# define IPTOS_LOWCOST 0x02
# define IPTOS_MINCOST IPTOS_LOWCOST
#endif /* IPTOS_LOWDELAY */
//ip hdr
struct iphdr {
uint8_t ver:4, /* version */
hlen:4; /* header length */
uint8_t tos; /* type of service */ //IPTOS_LOWDELAY
int16_t tot_len; /* total length */
uint16_t id; /* identification */
int16_t frag_off; /* fragment offset field */
#define IP_DF 0x4000 /* dont fragment flag */
#define IP_MF 0x2000 /* more fragments flag */
#define IP_OFFMASK 0x1fff /* mask for fragmenting bits */
uint8_t ttl; /* time to live */
uint8_t protocol; /* protocol */
uint16_t check; /* checksum */
ipaddr saddr;
ipaddr daddr; /* source and dest address */
};
//eth head struct
struct hardware
{
uint8_t htype;
uint8_t hlen;
uint8_t haddr[6];
};
//arp head struct
struct arpheader
{
#define ARPHRD_ETHER 1
#define ARPOP_REQUEST 1
#define ARPOP_REPLY 2
uint16_t ar_hrd;
uint16_t ar_pro;
uint8_t ar_hlen;
uint8_t ar_plen;
uint16_t ar_op;
uint8_t sha[6];
uint8_t sip[4];
//ipaddr sip;
uint8_t tha[6];
uint8_t tip[4];
//ipaddr tip;
};
typedef enum ArpReplyType_t
{
ARP_SUCCESS = 5000,
ARP_HAVE_SAME_ADDR = 5001,
ARP_ERROR = 5002
}ArpReplyType_t;
typedef enum ReturnValueType_t
{
R_SUCCESS = 6000
}ReturnValueType_t;
typedef struct DHCPCIpAddressInfo_s
{
ipaddr ulClientIpAddress;
uint16_t usClientPort;
ipaddr ulServerIpAddress;
uint16_t usServerPort;
}DHCPCIpAddressInfo_t;
typedef struct DHCPClientFunctions{
bool_t (*DHCPNetworkConfig)(const char *cszIfName,
struct DhcpcIPSetting_t *ConfigStruct);
bool_t (*DhcpClientEnable)(const char *cszIfName);
int (*SendPacket)(int8_t *cszIfName, uint8_t *data,
uint32_t len, ipaddr source, ipaddr dest);
void (*FillOptions)(const char *cszIfName, uint8_t *pData, uint32_t *ulDataLen,
uint8_t ucDHCPMsgType);
}DHCPClientFunctions_t;
void DHCPClientFillFunctions(DHCPClientFunctions_t *pEntry);
bool_t DHCPClientDefaultConfig(const char *cszIfName,
struct DhcpcIPSetting_t *ConfigStruct);
void DHCPCFillOptions(const char *cszIfName,
uint8_t *pData,
uint32_t *ulDataLen,
uint8_t ucDHCPMsgType);
int DHCPClientReadPort68Message(void);
//packet Assembly
int32_t IGWCreateLpfSock(int8_t *cszIfName);
void make_discover(struct dhcp_packet *, DHCPClientBlock_t *);
int32_t ZCOM_IGWSendPacket(int8_t *cszIfName,
uint8_t *data,
uint32_t len,
ipaddr source,
ipaddr dest);
void DHCPCAddOptionsToPkt(uint8_t *caSendingPkt,
DHCPClientBlock_t *pCurCtxtBlock,
uint32_t *ulTotLength,
uint8_t ucDHCPMsgType);
int DHCPClientGetOptionBuf( uint8_t *pBuffer,
int32_t iLength,
uint8_t *DhcpMessageType,
ipaddr *DHCPServerIpAddr,
uint32_t *ulLeasedTime,
uint32_t *ulRenewTmOut,
uint32_t *ulRebindTmOut
) ;
int DHCPClientGetParam(uint8_t *pBuffer,
int32_t iLength,
DhcpcIPSetting_t *ConfigStruct);
int DHCPClientSendDHCPRequest(DHCPClientBlock_t *pCurCtxtBlock);
int DHCPClientSendDHCPRelease(DHCPClientBlock_t *pCurCtxtBlock);
int DHCPClientSendDHCPDecline(DHCPClientBlock_t *pCurCtxtBlock);
int DHCPClientSelectDHCPOffer(DHCPClientBlock_t *pCurCtxtBlock);
int DHCPClientSelectDHCPDiscover(DHCPClientBlock_t *pCurCtxtBlock);
ArpReplyType_t DHCPClientSendArp(char *cszIfName,
uint8_t *shaddr, //source hardware addr
uint8_t *thaddr,
ipaddr source, ipaddr dest
);
void GetHwAddr(uint8_t *hw, const char *cszIfName);
bool_t IsValidIP(in_addr_t ulIP);
void IGWAssembleEthernetHeader (uint8_t *buf,
int *bufix,
struct hardware *from,
struct hardware *to);
void IGWAssembleUdpIpHeader(uint8_t *buf,
int32_t *bufix,
ipaddr from,
ipaddr to,
int32_t port,
uint8_t *data,
int32_t len);
void DHCPClientMonitor(void);
bool_t DHCPClientInit(void);
bool_t DHCPClientEnable(const char *cszIfName);
uint32_t checksum (uint8_t *buf,int nbytes,uint32_t sum);
uint32_t wrapsum (uint32_t sum);
int32_t DHCPClientActiveSocketFd(int32_t bActive);
bool_t InterfaceGatewaySet(const char *cszIfName, in_addr_t ulGateway);
bool_t IntotoStaticNameServerUpdate(
in_addr_t inDnsPrimary,
in_addr_t inDnsSecondary
);
void IntotoStaticNameServerRemoveAll(void);
bool_t IntotoStaticNameServerAdd(in_addr_t ulIP);
int DHCPClientSendDHCPDiscover(DHCPClientBlock_t *pCurCtxtBlock);
void DHCPClientUpdateIfStatus(DHCPWAITEvent_t *pEvent);
int DHCPClientDiscoverTimeoutProcess(DHCPWAITEvent_t *p, DHCPClientBlock_t *pCurCtxtBlock);
int DHCPClientRequestTimeoutProcess(DHCPWAITEvent_t *p);
#endif//__DHCPC_H__
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -