OpenCores
URL https://opencores.org/ocsvn/c0or1k/c0or1k/trunk

Subversion Repositories c0or1k

[/] [c0or1k/] [trunk/] [conts/] [posix/] [libposix/] [include/] [posix/] [netinet/] [ip6.h] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 drasko
/* Copyright (C) 1991-1997, 2001, 2003 Free Software Foundation, Inc.
2
   This file is part of the GNU C Library.
3
 
4
   The GNU C Library is free software; you can redistribute it and/or
5
   modify it under the terms of the GNU Lesser General Public
6
   License as published by the Free Software Foundation; either
7
   version 2.1 of the License, or (at your option) any later version.
8
 
9
   The GNU C Library is distributed in the hope that it will be useful,
10
   but WITHOUT ANY WARRANTY; without even the implied warranty of
11
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12
   Lesser General Public License for more details.
13
 
14
   You should have received a copy of the GNU Lesser General Public
15
   License along with the GNU C Library; if not, write to the Free
16
   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
17
   02111-1307 USA.  */
18
 
19
#ifndef _NETINET_IP6_H
20
#define _NETINET_IP6_H 1
21
 
22
#include <inttypes.h>
23
#include <netinet/in.h>
24
 
25
struct ip6_hdr
26
  {
27
    union
28
      {
29
        struct ip6_hdrctl
30
          {
31
            uint32_t ip6_un1_flow;   /* 4 bits version, 8 bits TC,
32
                                        20 bits flow-ID */
33
            uint16_t ip6_un1_plen;   /* payload length */
34
            uint8_t  ip6_un1_nxt;    /* next header */
35
            uint8_t  ip6_un1_hlim;   /* hop limit */
36
          } ip6_un1;
37
        uint8_t ip6_un2_vfc;       /* 4 bits version, top 4 bits tclass */
38
      } ip6_ctlun;
39
    struct in6_addr ip6_src;      /* source address */
40
    struct in6_addr ip6_dst;      /* destination address */
41
  };
42
 
43
#define ip6_vfc   ip6_ctlun.ip6_un2_vfc
44
#define ip6_flow  ip6_ctlun.ip6_un1.ip6_un1_flow
45
#define ip6_plen  ip6_ctlun.ip6_un1.ip6_un1_plen
46
#define ip6_nxt   ip6_ctlun.ip6_un1.ip6_un1_nxt
47
#define ip6_hlim  ip6_ctlun.ip6_un1.ip6_un1_hlim
48
#define ip6_hops  ip6_ctlun.ip6_un1.ip6_un1_hlim
49
 
50
/* Generic extension header.  */
51
struct ip6_ext
52
  {
53
    uint8_t  ip6e_nxt;          /* next header.  */
54
    uint8_t  ip6e_len;          /* length in units of 8 octets.  */
55
  };
56
 
57
/* Hop-by-Hop options header.  */
58
struct ip6_hbh
59
  {
60
    uint8_t  ip6h_nxt;          /* next header.  */
61
    uint8_t  ip6h_len;          /* length in units of 8 octets.  */
62
    /* followed by options */
63
  };
64
 
65
/* Destination options header */
66
struct ip6_dest
67
  {
68
    uint8_t  ip6d_nxt;          /* next header */
69
    uint8_t  ip6d_len;          /* length in units of 8 octets */
70
    /* followed by options */
71
  };
72
 
73
/* Routing header */
74
struct ip6_rthdr
75
  {
76
    uint8_t  ip6r_nxt;          /* next header */
77
    uint8_t  ip6r_len;          /* length in units of 8 octets */
78
    uint8_t  ip6r_type;         /* routing type */
79
    uint8_t  ip6r_segleft;      /* segments left */
80
    /* followed by routing type specific data */
81
  };
82
 
83
/* Type 0 Routing header */
84
struct ip6_rthdr0
85
  {
86
    uint8_t  ip6r0_nxt;         /* next header */
87
    uint8_t  ip6r0_len;         /* length in units of 8 octets */
88
    uint8_t  ip6r0_type;        /* always zero */
89
    uint8_t  ip6r0_segleft;     /* segments left */
90
    uint8_t  ip6r0_reserved;    /* reserved field */
91
    uint8_t  ip6r0_slmap[3];    /* strict/loose bit map */
92
    struct in6_addr  ip6r0_addr[1];  /* up to 23 addresses */
93
  };
94
 
95
/* Fragment header */
96
struct ip6_frag
97
  {
98
    uint8_t   ip6f_nxt;         /* next header */
99
    uint8_t   ip6f_reserved;    /* reserved field */
100
    uint16_t  ip6f_offlg;       /* offset, reserved, and flag */
101
    uint32_t  ip6f_ident;       /* identification */
102
  };
103
 
104
#if     BYTE_ORDER == BIG_ENDIAN
105
#define IP6F_OFF_MASK       0xfff8  /* mask out offset from _offlg */
106
#define IP6F_RESERVED_MASK  0x0006  /* reserved bits in ip6f_offlg */
107
#define IP6F_MORE_FRAG      0x0001  /* more-fragments flag */
108
#else   /* BYTE_ORDER == LITTLE_ENDIAN */
109
#define IP6F_OFF_MASK       0xf8ff  /* mask out offset from _offlg */
110
#define IP6F_RESERVED_MASK  0x0600  /* reserved bits in ip6f_offlg */
111
#define IP6F_MORE_FRAG      0x0100  /* more-fragments flag */
112
#endif
113
 
114
/* IPv6 options */
115
struct ip6_opt
116
  {
117
    uint8_t  ip6o_type;
118
    uint8_t  ip6o_len;
119
  };
120
 
121
/* The high-order 3 bits of the option type define the behavior
122
 * when processing an unknown option and whether or not the option
123
 * content changes in flight.
124
 */
125
#define IP6OPT_TYPE(o)          ((o) & 0xc0)
126
#define IP6OPT_TYPE_SKIP        0x00
127
#define IP6OPT_TYPE_DISCARD     0x40
128
#define IP6OPT_TYPE_FORCEICMP   0x80
129
#define IP6OPT_TYPE_ICMP        0xc0
130
#define IP6OPT_TYPE_MUTABLE     0x20
131
 
132
/* Special option types for padding.  */
133
#define IP6OPT_PAD1     0
134
#define IP6OPT_PADN     1
135
 
136
#define IP6OPT_JUMBO            0xc2
137
#define IP6OPT_NSAP_ADDR        0xc3
138
#define IP6OPT_TUNNEL_LIMIT     0x04
139
#define IP6OPT_ROUTER_ALERT     0x05
140
 
141
/* Jumbo Payload Option */
142
struct ip6_opt_jumbo
143
  {
144
    uint8_t  ip6oj_type;
145
    uint8_t  ip6oj_len;
146
    uint8_t  ip6oj_jumbo_len[4];
147
  };
148
#define IP6OPT_JUMBO_LEN        6
149
 
150
/* NSAP Address Option */
151
struct ip6_opt_nsap
152
  {
153
    uint8_t  ip6on_type;
154
    uint8_t  ip6on_len;
155
    uint8_t  ip6on_src_nsap_len;
156
    uint8_t  ip6on_dst_nsap_len;
157
      /* followed by source NSAP */
158
      /* followed by destination NSAP */
159
  };
160
 
161
/* Tunnel Limit Option */
162
struct ip6_opt_tunnel
163
  {
164
    uint8_t  ip6ot_type;
165
    uint8_t  ip6ot_len;
166
    uint8_t  ip6ot_encap_limit;
167
  };
168
 
169
/* Router Alert Option */
170
struct ip6_opt_router
171
  {
172
    uint8_t  ip6or_type;
173
    uint8_t  ip6or_len;
174
    uint8_t  ip6or_value[2];
175
  };
176
 
177
/* Router alert values (in network byte order) */
178
#if     BYTE_ORDER == BIG_ENDIAN
179
# define IP6_ALERT_MLD  0x0000
180
# define IP6_ALERT_RSVP 0x0001
181
# define IP6_ALERT_AN   0x0002
182
#else /* BYTE_ORDER == LITTLE_ENDING */
183
# define IP6_ALERT_MLD  0x0000
184
# define IP6_ALERT_RSVP 0x0100
185
# define IP6_ALERT_AN   0x0200
186
#endif
187
 
188
#endif /* netinet/ip6.h */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.