📄 ip6.h
字号:
/* $USAGI: ip6.h,v 1.1 2001/02/11 08:04:19 yoshfuji Exp $ *//* Copyright (C) 1991, 92, 93, 94, 95, 96, 97 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with the GNU C Library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */#ifndef _NETINET_IP6_H#define _NETINET_IP6_H 1#include <inttypes.h>#include <netinet/in.h>struct ip6_hdr { union { struct ip6_hdrctl { uint32_t ip6_un1_flow; /* 24 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, 4 bits priority */ } ip6_ctlun; struct in6_addr ip6_src; /* source address */ struct in6_addr ip6_dst; /* destination address */ };#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#define ip6_hlim ip6_ctlun.ip6_un1.ip6_un1_hlim#define ip6_hops ip6_ctlun.ip6_un1.ip6_un1_hlim#ifdef __USE_GNU/* IPv6 extension header */struct ip6_ext { uint8_t ip6e_nxt; uint8_t ip6e_len; };#endif/* Hop-by-Hop options header. */struct ip6_hbh { uint8_t ip6h_nxt; /* next hesder. */ uint8_t ip6h_len; /* length in units of 8 octets. */ /* followed by options */ };/* Destination options header */struct ip6_dest { uint8_t ip6d_nxt; /* next header */ uint8_t ip6d_len; /* length in units of 8 octets */ /* followed by options */ };/* Routing header */struct ip6_rthdr { uint8_t ip6r_nxt; /* next header */ uint8_t ip6r_len; /* length in units of 8 octets */ uint8_t ip6r_type; /* routing type */ uint8_t ip6r_segleft; /* segments left */ /* followed by routing type specific data */ };/* Type 0 Routing header */struct ip6_rthdr0 { uint8_t ip6r0_nxt; /* next header */ uint8_t ip6r0_len; /* length in units of 8 octets */ uint8_t ip6r0_type; /* always zero */ uint8_t ip6r0_segleft; /* segments left */ uint8_t ip6r0_reserved; /* reserved field */ uint8_t ip6r0_slmap[3]; /* strict/loose bit map */ struct in6_addr ip6r0_addr[1]; /* XXX: removed in RFC2292bis */ };/* Fragment header */struct ip6_frag { uint8_t ip6f_nxt; /* next header */ uint8_t ip6f_reserved; /* reserved field */ uint16_t ip6f_offlg; /* offset, reserved, and flag */ uint32_t ip6f_ident; /* identification */ };#if BYTE_ORDER == BIG_ENDIAN#define IP6F_OFF_MASK 0xfff8 /* mask out offset from _offlg */#define IP6F_RESERVED_MASK 0x0006 /* reserved bits in ip6f_offlg */#define IP6F_MORE_FRAG 0x0001 /* more-fragments flag */#else /* BYTE_ORDER == LITTLE_ENDIAN */#define IP6F_OFF_MASK 0xf8ff /* mask out offset from _offlg */#define IP6F_RESERVED_MASK 0x0600 /* reserved bits in ip6f_offlg */#define IP6F_MORE_FRAG 0x0100 /* more-fragments flag */#endif/* IPv6 Options */struct ip6_opt { uint8_t ip6o_type; uint8_t ip6o_len;};/* * The high-order 3 bits of the option type define the behavior * when processing an unknown option and whether or not the option * content changes in flight. */#define IP6OPT_TYPE(o) ((o) & 0xc0)#define IP6OPT_TYPE_SKIP 0x00#define IP6OPT_TYPE_DISCARD 0x40#define IP6OPT_TYPE_FORCEICMP 0x80#define IP6OPT_TYPE_ICMP 0xc0#define IP6OPT_MUTABLE 0x20#define IP6OPT_PAD1 0x00 /* 00 0 00000 */#define IP6OPT_PADN 0x01 /* 00 0 00001 */#define IP6OPT_JUMBO 0xc2 /* 11 0 00010 = 194 */#define IP6OPT_NSAP_ADDR 0xc3 /* 11 0 00011 */#define IP6OPT_TUNNEL_LIMIT 0x04 /* 00 0 00100 */#define IP6OPT_ROUTER_ALERT 0x05 /* 00 0 00101 */#define IP6OPT_BINDING_UPDATE 0xc6 /* 11 0 00110 */#define IP6OPT_BINDING_ACK 0x07 /* 00 0 00111 */#define IP6OPT_BINDING_REQ 0x08 /* 00 0 01000 */#define IP6OPT_HOME_ADDRESS 0xc9 /* 11 0 01001 */#define IP6OPT_EID 0x8a /* 10 0 01010 *//* Jumbo Payload Option */struct ip6_opt_jumbo { uint8_t ip6oj_type; uint8_t ip6oj_len; uint8_t ip6oj_jumbo_len[4];};#define IP6OPT_JUMBO_LEN 6/* NSAP Address Option */struct ip6_opt_nsap { uint8_t ip6on_type; uint8_t ip6on_len; uint8_t ip6on_src_nsap_len; uint8_t ip6on_dst_nsap_len; /* followed by source NSAP */ /* followed by destination NSAP */};/* Tunnel Limit Option */struct ip6_opt_tunnel { uint8_t ip6ot_type; uint8_t ip6ot_len; uint8_t ip6ot_encap_limit;};/* Router Alert Option */struct ip6_opt_router { uint8_t ip6or_type; uint8_t ip6or_len; uint8_t ip6or_value[2];};/* Router alert values (in network byte order) */#ifdef _BIG_ENDIAN# define IP6_ALERT_MLD 0x0000# define IP6_ALERT_RSVP 0x0001# define IP6_ALERT_AN 0x0002#else# define IP6_ALERT_MLD 0x0000# define IP6_ALERT_RSVP 0x0100# define IP6_ALERT_AN 0x0200#endif/* Binding Update Option */struct ip6_opt_binding_update { uint8_t ip6ou_type; uint8_t ip6ou_len; uint8_t ip6ou_flags; uint8_t ip6ou_prefixlen; uint8_t ip6ou_seqno[2]; uint8_t ip6ou_lifetime[4]; uint8_t ip6ou_coa[16]; /* Optional based on flags */ /* followed by sub-options */};/* Binding Update Flags */#define IP6_BUF_ACK 0x80 /* Request a binding ack */#define IP6_BUF_HOME 0x40 /* Home Registration */#define IP6_BUF_COA 0x20 /* Care-of-address present in option */#define IP6_BUF_ROUTER 0x10 /* Sending mobile node is a router *//* Binding Ack Option */struct ip6_opt_binding_ack { uint8_t ip6oa_type; uint8_t ip6oa_len; uint8_t ip6oa_status; uint8_t ip6oa_seqno[2]; uint8_t ip6oa_lifetime[4]; uint8_t ip6oa_refresh[4]; /* followed by sub-options */};/* Binding Request Option */struct ip6_opt_binding_request { uint8_t ip6or_type; uint8_t ip6or_len; /* followed by sub-options */};/* Home Address Option */struct ip6_opt_home_address { uint8_t ip6oh_type; uint8_t ip6oh_len; uint8_t ip6oh_addr[16]; /* Home Address */ /* followed by sub-options */};#endif /* netinet/ip6.h */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -