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

📄 ip.h

📁 COPE the first practical network coding scheme which is developped on click
💻 H
字号:
/* -*- mode: c; c-basic-offset: 4 -*- */#ifndef CLICKNET_IP_H#define CLICKNET_IP_H/* get struct in_addr */#include <click/cxxprotect.h>CLICK_CXX_PROTECT#if CLICK_LINUXMODULE# include <net/checksum.h># include <linux/in.h>#else# include <sys/types.h># include <netinet/in.h>#endif/* * <clicknet/ip.h> -- IP header definitions, based on one of the BSDs. * * Relevant RFCs include: *   RFC791	Internet Protocol *   RFC3168	The Addition of Explicit Congestion Notification (ECN) to IP */struct click_ip {#if CLICK_BYTE_ORDER == CLICK_BIG_ENDIAN    unsigned	ip_v : 4;		/* 0     version == 4		     */    unsigned	ip_hl : 4;		/*       header length		     */#elif CLICK_BYTE_ORDER == CLICK_LITTLE_ENDIAN    unsigned	ip_hl : 4;		/* 0     header length		     */    unsigned	ip_v : 4;		/*       version == 4		     */#else#   error "unknown byte order"#endif    uint8_t	ip_tos;			/* 1     type of service	     */#define IP_DSCPMASK	0xFC		/*         diffserv code point	     */#define IP_ECNMASK	0x03		/*	   ECN code point	     */#define   IP_ECN_NOT_ECT  0x00		/*         not ECN capable transport */#define   IP_ECN_ECT1	  0x01		/*         ECN capable transport     */#define   IP_ECN_ECT2	  0x02		/*         ECN capable transport     */#define   IP_ECN_CE	  0x03		/*         ECN congestion exp'd	     */    uint16_t	ip_len;			/* 2-3   total length		     */    uint16_t	ip_id;			/* 4-5   identification		     */    uint16_t	ip_off;			/* 6-7   fragment offset field	     */#define	IP_RF		0x8000		/*         reserved fragment flag    */#define	IP_DF		0x4000		/*         don't fragment flag	     */#define	IP_MF		0x2000		/*         more fragments flag	     */#define	IP_OFFMASK	0X1FFF		/*         mask for fragmenting bits */    uint8_t	ip_ttl;			/* 8     time to live		     */    uint8_t	ip_p;			/* 9     protocol		     */    uint16_t	ip_sum;			/* 10-11 checksum		     */    struct in_addr ip_src;		/* 12-15 source address		     */    struct in_addr ip_dst;		/* 16-19 destination address	     */};/* ip_protocol */#define IP_PROTO_ICMP		1#define IP_PROTO_IGMP		2#define IP_PROTO_GGP		3#define IP_PROTO_IPIP		4#define IP_PROTO_ST		5#define IP_PROTO_TCP		6#define IP_PROTO_UCL		7#define IP_PROTO_EGP		8#define IP_PROTO_IGP		9#define IP_PROTO_BBN		10#define IP_PROTO_NVPII		11#define IP_PROTO_PUP		12#define IP_PROTO_ARGUS		13#define IP_PROTO_EMCON		14#define IP_PROTO_XNET		15#define IP_PROTO_CHAOS		16#define IP_PROTO_UDP		17#define IP_PROTO_MUX		18#define IP_PROTO_DCN		19#define IP_PROTO_HMP		20#define IP_PROTO_PRM		21#define IP_PROTO_XNS		22#define IP_PROTO_TRUNK1		23#define IP_PROTO_TRUNK2		24#define IP_PROTO_LEAF1		25#define IP_PROTO_LEAF2		26#define IP_PROTO_RDP		27#define IP_PROTO_IRTP		28#define IP_PROTO_ISOTP4		29#define IP_PROTO_NETBLT		30#define IP_PROTO_MFENSP		31#define IP_PROTO_MERIT		32#define IP_PROTO_SEP		33#define IP_PROTO_ICMP6          58#define IP_PROTO_CFTP		62#define IP_PROTO_SATNET		64#define IP_PROTO_MITSUBNET	65#define IP_PROTO_RVD		66#define IP_PROTO_IPPC		67#define IP_PROTO_SATMON		69#define IP_PROTO_IPCV		71#define IP_PROTO_BRSATMON	76#define IP_PROTO_WBMON		78#define IP_PROTO_WBEXPAK	79#define IP_PROTO_NONE		257#define IP_PROTO_TRANSP		258#define IP_PROTO_TCP_OR_UDP	256#define IP_PROTO_PAYLOAD	259#define	IPOPT_EOL		0	/* end of option list */#define	IPOPT_NOP		1	/* no operation */#define IPOPT_RR		7	/* record packet route */#define IPOPT_TS		68	/* timestamp */#define IPOPT_SECURITY		130	/* provide s,c,h,tcc */#define IPOPT_LSRR		131	/* loose source route */#define IPOPT_SATID		136	/* satnet id */#define IPOPT_SSRR		137	/* strict source route */#define IPOPT_RA		148	/* router alert */#define IP_ISFRAG(iph)	  (((iph)->ip_off & htons(IP_MF | IP_OFFMASK)) != 0)#define IP_FIRSTFRAG(iph) (((iph)->ip_off & htons(IP_OFFMASK)) == 0)/* checksum functions */#if !CLICK_LINUXMODULEuint16_t click_in_cksum(const unsigned char *addr, int len);uint16_t click_in_cksum_pseudohdr_raw(uint32_t csum, uint32_t src, uint32_t dst, int proto, int packet_len);#else# define click_in_cksum(addr, len) \		ip_compute_csum((unsigned char *)(addr), (len))# define click_in_cksum_pseudohdr_raw(csum, src, dst, proto, packet_len) \		csum_tcpudp_magic((src), (dst), (packet_len), (proto), ~(csum) & 0xFFFF)#endifuint16_t click_in_cksum_pseudohdr_hard(uint32_t csum, const struct click_ip *iph, int packet_len);/* use if you're not sure whether there are source routing options */static inline uint16_tclick_in_cksum_pseudohdr(uint32_t csum, const struct click_ip *iph, int packet_len){    if (iph->ip_hl == 5)	return click_in_cksum_pseudohdr_raw(csum, iph->ip_src.s_addr, iph->ip_dst.s_addr, iph->ip_p, packet_len);    else	return click_in_cksum_pseudohdr_hard(csum, iph, packet_len);}static inline voidclick_update_in_cksum(uint16_t *csum, uint16_t old_hw, uint16_t new_hw){    /* incrementally update IP checksum according to RFC1624:       new_sum = ~(~old_sum + ~old_halfword + new_halfword) */    uint32_t sum = (~*csum & 0xFFFF) + (~old_hw & 0xFFFF) + new_hw;    sum = (sum & 0xFFFF) + (sum >> 16);    *csum = ~(sum + (sum >> 16));}CLICK_CXX_UNPROTECT#include <click/cxxunprotect.h>#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -