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

📄 ip6.h

📁 SinFP是一种新的识别对方计算机操作系统类型的工具
💻 H
字号:
/* * ip6.h * * Internet Protocol, Version 6 (RFC 2460). * * Copyright (c) 2002 Dug Song <dugsong@monkey.org> * * $Id: ip6.h,v 1.6 2004/02/23 10:01:15 dugsong Exp $ */#ifndef DNET_IP6_H#define DNET_IP6_H#define IP6_ADDR_LEN	16#define IP6_ADDR_BITS	128#define IP6_HDR_LEN	40		/* IPv6 header length */#define IP6_LEN_MIN	IP6_HDR_LEN#define IP6_LEN_MAX	65535		/* non-jumbo payload */#define IP6_MTU_MIN	1280		/* minimum MTU (1024 + 256) */typedef struct ip6_addr {	uint8_t         data[IP6_ADDR_LEN];} ip6_addr_t;#ifndef __GNUC__# define __attribute__(x)# pragma pack(1)#endif/* * IPv6 header */struct ip6_hdr {	union {		struct ip6_hdr_ctl {			uint32_t	ip6_un1_flow; /* 20 bits of flow ID */			uint16_t	ip6_un1_plen; /* payload length */			uint8_t		ip6_un1_nxt;  /* next header */			uint8_t		ip6_un1_hlim; /* hop limit */		} ip6_un1;		uint8_t	ip6_un2_vfc;	/* 4 bits version, top 4 bits class */	} ip6_ctlun;	ip6_addr_t	ip6_src;	ip6_addr_t	ip6_dst;} __attribute__((__packed__));#define ip6_vfc		ip6_ctlun.ip6_un2_vfc#define ip6_flow	ip6_ctlun.ip6_un1.ip6_un1_flow#define ip6_plen	ip6_ctlun.ip6_un1.ip6_un1_plen#define ip6_nxt		ip6_ctlun.ip6_un1.ip6_un1_nxt	/* IP_PROTO_* */#define ip6_hlim	ip6_ctlun.ip6_un1.ip6_un1_hlim#define IP6_VERSION		0x60#define IP6_VERSION_MASK	0xf0		/* ip6_vfc version */#if DNET_BYTESEX == DNET_BIG_ENDIAN#define IP6_FLOWINFO_MASK	0x0fffffff	/* ip6_flow info (28 bits) */#define IP6_FLOWLABEL_MASK	0x000fffff	/* ip6_flow label (20 bits) */#elif DNET_BYTESEX == DNET_LIL_ENDIAN#define IP6_FLOWINFO_MASK	0xffffff0f	/* ip6_flow info (28 bits) */#define IP6_FLOWLABEL_MASK	0xffff0f00	/* ip6_flow label (20 bits) */#endif/* * Hop limit (ip6_hlim) */#define IP6_HLIM_DEFAULT	64#define IP6_HLIM_MAX		255/* * Preferred extension header order from RFC 2460, 4.1: * * IP_PROTO_IPV6, IP_PROTO_HOPOPTS, IP_PROTO_DSTOPTS, IP_PROTO_ROUTING, * IP_PROTO_FRAGMENT, IP_PROTO_AH, IP_PROTO_ESP, IP_PROTO_DSTOPTS, IP_PROTO_* *//* * Routing header data (IP_PROTO_ROUTING) */struct ip6_ext_data_routing {	uint8_t  type;			/* routing type */	uint8_t  segleft;		/* segments left */	/* followed by routing type specific data */} __attribute__((__packed__));struct ip6_ext_data_routing0 {	uint8_t  type;			/* always zero */	uint8_t  segleft;		/* segments left */	uint8_t  reserved;		/* reserved field */	uint8_t  slmap[3];		/* strict/loose bit map */	ip6_addr_t  addr[1];		/* up to 23 addresses */} __attribute__((__packed__));/* * Fragment header data (IP_PROTO_FRAGMENT) */struct ip6_ext_data_fragment {	uint16_t  offlg;		/* offset, reserved, and flag */	uint32_t  ident;		/* identification */} __attribute__((__packed__));/* * Fragmentation offset, reserved, and flags (offlg) */#if DNET_BYTESEX == DNET_BIG_ENDIAN#define IP6_OFF_MASK		0xfff8	/* mask out offset from offlg */#define IP6_RESERVED_MASK	0x0006	/* reserved bits in offlg */#define IP6_MORE_FRAG		0x0001	/* more-fragments flag */#elif DNET_BYTESEX == DNET_LIL_ENDIAN#define IP6_OFF_MASK		0xf8ff	/* mask out offset from offlg */#define IP6_RESERVED_MASK	0x0600	/* reserved bits in offlg */#define IP6_MORE_FRAG		0x0100	/* more-fragments flag */#endif/* * Option types, for IP_PROTO_HOPOPTS, IP_PROTO_DSTOPTS headers */#define IP6_OPT_PAD1		0x00	/* 00 0 00000 */#define IP6_OPT_PADN		0x01	/* 00 0 00001 */#define IP6_OPT_JUMBO		0xC2	/* 11 0 00010 = 194 */#define IP6_OPT_JUMBO_LEN	6#define IP6_OPT_RTALERT		0x05	/* 00 0 00101 */#define IP6_OPT_RTALERT_LEN	4#define IP6_OPT_RTALERT_MLD	0	/* Datagram contains an MLD message */#define IP6_OPT_RTALERT_RSVP	1	/* Datagram contains an RSVP message */#define IP6_OPT_RTALERT_ACTNET	2 	/* contains an Active Networks msg */#define IP6_OPT_LEN_MIN		2#define IP6_OPT_TYPE(o)		((o) & 0xC0)	/* high 2 bits of opt_type */#define IP6_OPT_TYPE_SKIP	0x00	/* continue processing on failure */#define IP6_OPT_TYPE_DISCARD	0x40	/* discard packet on failure */#define IP6_OPT_TYPE_FORCEICMP	0x80	/* discard and send ICMP on failure */#define IP6_OPT_TYPE_ICMP	0xC0	/* ...only if non-multicast dst */#define IP6_OPT_MUTABLE		0x20	/* option data may change en route *//* * Extension header (chained via {ip6,ext}_nxt, following IPv6 header) */struct ip6_ext_hdr {	uint8_t  ext_nxt;	/* next header */	uint8_t  ext_len;	/* following length in units of 8 octets */	union {		struct ip6_ext_data_routing	routing;		struct ip6_ext_data_fragment	fragment;	} ext_data;} __attribute__((__packed__));#ifndef __GNUC__# pragma pack()#endif/* * Reserved addresses */#define IP6_ADDR_UNSPEC	\	"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#define IP6_ADDR_LOOPBACK \	"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01"#define ip6_pack_hdr(hdr, fc, fl, plen, nxt, hlim, src, dst) do {	\	struct ip6_hdr *ip6 = (struct ip6_hdr *)(hdr);			\	ip6->ip6_flow = htonl(((uint32_t)(fc) << 28) &			\	    (IP6_FLOWLABEL_MASK | (fl)));				\	ip6->ip6_vfc = (IP6_VERSION | ((fc) >> 4));			\	ip6->ip6_plen = htons((plen));					\	ip6->ip6_nxt = (nxt); ip6->ip6_hlim = (hlim);			\	memmove(&ip6->ip6_src, &(src), IP6_ADDR_LEN);			\	memmove(&ip6->ip6_dst, &(dst), IP6_ADDR_LEN);			\} while (0);__BEGIN_DECLSchar	*ip6_ntop(const ip6_addr_t *ip6, char *dst, size_t size);int	 ip6_pton(const char *src, ip6_addr_t *dst);char	*ip6_ntoa(const ip6_addr_t *ip6);#define	 ip6_aton ip6_ptonvoid	 ip6_checksum(void *buf, size_t len);__END_DECLS#endif /* DNET_IP6_H */

⌨️ 快捷键说明

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