⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ip.h

📁 完整的TCP/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 + -