www.pudn.com > uCOSII上实现的tcpip.rar > zipv4.h
#ifndef _ZIPV4_H
#define _ZIPV4_H
#include "zarch.h"
#include "zdef.h"
#include "zbuffer.h"
#include "znetif.h"
#define ETH_HEAD_LEN 14
#define IP_HEAD_LEN 20
#define IP_PROTO_ICMP 1
#define IP_PROTO_UDP 17
#define IP_PROTO_UDPLITE 170
#define IP_PROTO_TCP 6
#define IP_OFFMASK 0x1fff /* mask for fragmenting bits */
#define IP_MF 0x2000 /* more fragments flag */
#define IP_DF 0x4000 /* dont fragment flag */
STRUCT_BEGIN
typedef struct _ip_header
{
u16_t _v_hl_tos;
u16_t _len;
/* identification */
u16_t _id;
/* fragment offset field */
u16_t _offset;
/* time to live / protocol*/
u16_t _ttl_proto;
/* checksum */
u16_t _chksum;
/* source and destination IP addresses */
ipaddr_t src_ipaddr;
ipaddr_t dest_ipaddr;
}ip_header_t;
STRUCT_END
#define NTOHS
#define HTONS
#define IPH_V(hdr) (NTOHS((hdr)->_v_hl_tos) >> 12)
#define IPH_HL(hdr) ((NTOHS((hdr)->_v_hl_tos) >> 8) & 0x0f)
#define IPH_TOS(hdr) HTONS((NTOHS((hdr)->_v_hl_tos) & 0xff))
#define IPH_LEN(hdr) ((hdr)->_len)
#define IPH_ID(hdr) ((hdr)->_id)
#define IPH_OFFSET(hdr) ((hdr)->_offset)
#define IPH_TTL(hdr) (NTOHS((hdr)->_ttl_proto) >> 8)
#define IPH_PROTO(hdr) (NTOHS((hdr)->_ttl_proto) & 0xff)
#define IPH_CHKSUM(hdr) ((hdr)->_chksum)
#define IPH_VHLTOS_SET(hdr, v, hl, tos) (hdr)->_v_hl_tos = HTONS(((v) << 12) | ((hl) << 8) | (tos))
#define IPH_LEN_SET(hdr, len) (hdr)->_len = (len)
#define IPH_ID_SET(hdr, id) (hdr)->_id = (id)
#define IPH_OFFSET_SET(hdr, off) (hdr)->_offset = (off)
#define IPH_TTL_SET(hdr, ttl) (hdr)->_ttl_proto = HTONS(IPH_PROTO(hdr) | ((ttl) << 8))
#define IPH_PROTO_SET(hdr, proto) (hdr)->_ttl_proto = HTONS((proto) | (IPH_TTL(hdr) << 8))
#define IPH_CHKSUM_SET(hdr, chksum) (hdr)->_chksum = (chksum)
#define ip_addr_maskcmp(addr1, addr2, mask) (((addr1) & \
(mask)) == \
((addr2) & \
(mask)))
#define ip_addr_isbroadcast(addr1, mask) (((((addr1)) & ~((mask))) == \
(0xffffffff & ~((mask)))) || \
((addr1) == 0xffffffff) || \
((addr1) == 0x00000000))
#define ip_addr_ismulticast(addr1) (((addr1) & ntohl(0xf0000000)) == ntohl(0xe0000000))
extern u8_t ip_input(znetif_t *pnetif, zbuffer_t *pbuffer);
extern u16_t inet_chksum(void *pdata, u16_t len);
extern u16_t inet_chksum_pseudo(zbuffer_t *, ipaddr_t *, ipaddr_t *, u8_t, u16_t);
extern u16_t ip_id;
#endif