/*
*name:jiangtao
*WuhanUniversity
*Copyright(c)2011 All right reserve
*@(#)ip.h 1.0.0 (jiangtao) 2011-8-2
*/
#ifndef _IP_H
#define _IP_H
#include"type.h"
#define ICMP 1
#define TCP 6
#define UDP 17
#define MTU 1500
#define IPVERSION 4
#define FAIL 0
#define SUCC 1
#define LEN 20
#define IP_DF 0x4000
#define IP_MF 0x2000 //more fragment
#define RIGHTSUM 0xFFFF
#define BROADCAST (INT32U) 0xFFFFFFFF //broadcast
#define SELF (INT32U) 0x00000000 //self
#define MAXBUF /**mbuf能存储的最大单元**/
INT16U ip_id ;
#define mtod(m,t) ((t)((m)->m_data))
typedef struct ip_addr
{
INT32U s_addr;
}ip_addr;
typedef struct ip_head
{
INT8U versionLength ;
INT8U tos ; //TCP,UDP,ICMP
INT16U length ;
INT16U id ; //identification
INT16U off ;
INT8U ttl ;
INT8U protocol ;
INT16U sum ;
struct ip_addr srcAddr ;
struct ip_addr dstAddr ;
}ip_head;
typedef struct ipInfo
{
INT8U tos;//8位服务类型
INT16U len;//16位全长
INT8U ttl;//8位生存时间
INT8U pro;//8位协议
struct ip_addr ipSrc;//32位源地址
struct ip_addr ipDst;//32位目的IP地址
}ipInfo;
typedef struct ipq
{
struct ipq *next ,*prev;
INT8U ttl;
INT8U protocol;
INT8U id;
struct ipfrag * nextfrag ,*prevfrag;
struct ip_addr srcAddr ,dstAddr ;
}ipq;
typedef struct ipfrag
{
INT8U versionLenth ;
INT8U mff ;
INT16U length ;
INT16U id ;//identification
INT16U off ;
INT8U ttl ;
INT8U protocol ;
INT16U sum ;
struct ipfrag* next ;
struct ipfrag* prev ;
}ipfrag;
INT8U IP_output(struct mbuf* p_buf , struct ipInfo* p_info) ;
INT8U IP_input(struct mbuf* p_buf) ;
struct ip_head* Head_initiate(struct ip_head* head,struct ipInfo* p_info) ;
INT8U Head_remove(struct mbuf * p_buf) ;
INT8U Fragment(struct mbuf* p_buf) ;
struct mbuf* Reassemble(struct mbuf* p_buf) ;
INT16U Checksum(struct ip_head* head , INT8U len) ;
#endif
ip.h
最新推荐文章于 2022-02-25 21:57:21 发布