📄 ip.h
字号:
/**************************************************************************
*
* FILENAME VERSION
*
* IP.H 1.0
*
* DESCRIPTION
*
* This include file will handle defines relating to the IP layer.
*
* DATA STRUCTURES
*
* IP_LAYER
* PSEUDOTCP
* IP_FRAG
* IP_QUEUE_ELEMENT
* IP_QUEUE
* _IP_MULTI
* _IP_MULTI_OPTIONS
*
* DEPENDENCIES
*
* rtab.h
*
****************************************************************************/
#ifndef IP_H
#define IP_H
#include "C:\wql\tcpipsocket\target.h"
/***********************************************************************/
/* Internet protocol
*
*/
typedef struct iph
{
UINT8 ip_versionandhdrlen; /* I prefer to OR them myself */
/* each half is four bits */
UINT8 ip_service; /* type of service for IP */
UINT16 ip_tlen; /* total length of IP packet */
UINT16 ip_ident; /* these are all BYTE-SWAPPED! */
UINT16 ip_frags; /* combination of flags and value */
UINT8 ip_ttl; /* time to live */
UINT8 ip_protocol; /* higher level protocol type */
UINT16 ip_check; /* header checksum, byte-swapped */
UINT8 ip_src[4]; /* IP source address */
UINT8 ip_dest[4]; /* IP destination address */
} IPLAYER;
//**************************************************
typedef struct IP_frame
{
IPLAYER IP_HEADER;
UINT8 PRO_BUF[1480];
UINT16 PRO_BUF_LEN;
} IP_frame;
//**************************************************
/*
* used for computing checksums in TCP
*/
struct pseudotcp
{
UINT8 source[4]; /* Source IP address. */
UINT8 dest[4]; /* Destination IP address. */
UINT8 z; /* zero */
UINT8 proto; /* protocol number */
UINT16 tcplen; /* byte-swapped length field */
};
#define IP_FORWARDING (1<<0)
#define IP_RAWOUTPUT (1<<1)
#define IP_ROUTETOIF (1<<2)
#define IP_ALLOWBROADCAST (1<<3)
#define IP_VERSION 0x4
#define IP_DF 0x4000 /* don't fragment flag */
#define IP_MF 0x2000 /* more fragments flag */
#define IP_ADDR_ANY 0x0UL
#define IP_ADDR_BROADCAST 0xFFFFFFFFUL
#define IP_TIME_TO_LIVE 30
#define IP_TYPE_OF_SERVICE 0
/* Length of IP address in bytes */
#define IP_ADDR_LEN 4
#define IP_CLASSA_ADDR(i) (((UINT32)(i) & 0x80000000UL) == 0)
#define IP_CLASSB_ADDR(i) (((UINT32)(i) & 0xc0000000UL) == 0x80000000UL)
#define IP_CLASSC_ADDR(i) (((UINT32)(i) & 0xe0000000UL) == 0xc0000000UL)
#define IP_CLASSD_ADDR(i) (((UINT32)(i) & 0xf0000000UL) == 0xe0000000UL)
#define IP_MULTICAST_ADDR(i) IP_CLASSD_ADDR(i)
#define IP_EXPERIMENTAL_ADDR(i) (((UINT32)(i) & 0xf0000000UL) == 0xf0000000UL)
#define IP_ADDR(a) TLS_IP_Address(a)
#define IP_ADDR_COPY(dest, src) ((UINT8 *)(dest))[0] = ((UINT8 *)(src))[0]; \
((UINT8 *)(dest))[1] = ((UINT8 *)(src))[1]; \
((UINT8 *)(dest))[2] = ((UINT8 *)(src))[2]; \
((UINT8 *)(dest))[3] = ((UINT8 *)(src))[3]
/* The Standard protocol types for IP packets. */
#define IP_UDP_PROT 17
#define IP_TCP_PROT 6
#define IP_ICMP_PROT 1
#define IP_IGMP_PROT 2
#define IP_RAW_PROT 255
#define IP_HELLO_PROT 63
#define IP_OSPF_PROT 89
/*
* Definitions for options.
*/
#define IP_OPT_COPIED(o) ((o)&0x80)
#define IP_OPT_CLASS(o) ((o)&0x60)
#define IP_OPT_NUMBER(o) ((o)&0x1f)
#define IP_OPT_CONTROL 0x00
#define IP_OPT_RESERVED1 0x20
#define IP_OPT_DEBMEAS 0x40
#define IP_OPT_RESERVED2 0x60
#define IP_OPT_EOL 0 /* end of option list */
#define IP_OPT_NOP 1 /* no operation */
#define IP_OPT_RR 7 /* record packet route */
#define IP_OPT_TS 68 /* timestamp */
#define IP_OPT_SECURITY 130 /* provide s,c,h,tcc */
#define IP_OPT_LSRR 131 /* loose source route */
#define IP_OPT_SATID 136 /* satnet id */
#define IP_OPT_SSRR 137 /* strict source route */
/*
* Offsets to fields in options other than EOL and NOP.
*/
#define IP_OPT_OPTVAL 0 /* option ID */
#define IP_OPT_OLEN 1 /* option length */
#define IP_OPT_OFFSET 2 /* offset within option */
#define IP_OPT_MINOFF 4 /* min value of above */
/* External declarations. */
extern UINT8 IP_Brd_Cast[IP_ADDR_LEN];
extern UINT8 IP_Null[IP_ADDR_LEN];
extern UINT8 IP_A_Mask[4];
extern UINT8 IP_B_Mask[4];
extern UINT8 IP_C_Mask[4];
/* Function prototypes. */
void IP_Initialize(void);
UINT8 IP_Interpret (IPLAYER *pkt, UINT8 * BUFFER, UINT16 BUFFER_SIZE);
void IP_Send(UINT8 *buf_ptr, UINT16 buf_len, UINT8 *DES_IP,UINT8 PRO_TYPE,UINT8 TTL);
#define RTFREE(x)
#define IP_VERSIONANDHDRLEN_OFFSET 0
#define IP_SERVICE_OFFSET 1
#define IP_TLEN_OFFSET 2
#define IP_IDENT_OFFSET 4
#define IP_FRAGS_OFFSET 6
#define IP_TTL_OFFSET 8
#define IP_PROTOCOL_OFFSET 9
#define IP_CHECK_OFFSET 10
#define IP_SRC_OFFSET 12
#define IP_DEST_OFFSET 16
#define IPF_HL_OFFSET 0
#define IPF_MFF_OFFSET 1
#define IPF_TLEN_OFFSET 2
#define IPF_ID_OFFSET 4
#define IPF_OFF_OFFSET 6
#define IPF_TTL_OFFSET 8
#define IPF_BUF_OFFSET 9
#define IPF_CHECK_OFFSET 10
#define IPF_NEXT_OFFSET 12
#define IPF_PREV_OFFSET 16
#ifdef __cplusplus
}
#endif /* _cplusplus */
#endif /* IP_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -