aboutsummaryrefslogtreecommitdiff
path: root/inet/netinet
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2003-06-14 08:39:08 +0000
committerUlrich Drepper <drepper@redhat.com>2003-06-14 08:39:08 +0000
commita4596570324480a8af6a9a277dadb1c2ff7be3f9 (patch)
treebe782079b9c76b16eff7d6dd9979e89da93b64c9 /inet/netinet
parentda4fef4bc3403c7d6f481ec35d7153328e222f9b (diff)
downloadglibc-a4596570324480a8af6a9a277dadb1c2ff7be3f9.tar
glibc-a4596570324480a8af6a9a277dadb1c2ff7be3f9.tar.gz
glibc-a4596570324480a8af6a9a277dadb1c2ff7be3f9.tar.bz2
glibc-a4596570324480a8af6a9a277dadb1c2ff7be3f9.zip
Update.
2003-06-14 Ulrich Drepper <drepper@redhat.com> * inet/netinet/ip6.h (IP6OPT_PAD1, IP6OPT_PADn): Define. * inet/netinet/in.h: Add prototypes for inet6_option_* functions. * inet/Makefile (routines): Add inet6_option. * inet/inet6_option.c: New file. * inet/Versions [GLIBC_2.3.3] (libc): Add inet6_option_space, inet6_option_init, inet6_option_append, inet6_option_alloc, inet6_option_next, and inet6_option_find. * inet/netinet/ip6.h (struct ip6_ext): Define.
Diffstat (limited to 'inet/netinet')
-rw-r--r--inet/netinet/in.h18
-rw-r--r--inet/netinet/ip6.h49
2 files changed, 48 insertions, 19 deletions
diff --git a/inet/netinet/in.h b/inet/netinet/in.h
index a87f35e99a..9f969ccc5c 100644
--- a/inet/netinet/in.h
+++ b/inet/netinet/in.h
@@ -21,6 +21,7 @@
#include <features.h>
#include <stdint.h>
+#include <sys/socket.h>
#include <bits/types.h>
@@ -366,6 +367,23 @@ struct in6_pktinfo
unsigned int ipi6_ifindex; /* send/recv interface index */
};
+
+#ifdef __USE_GNU
+/* Hop-by-Hop and Destination Options Processing. */
+extern int inet6_option_space (int __nbytes);
+extern int inet6_option_init (void *__bp, struct cmsghdr **__cmsgp,
+ int __type);
+extern int inet6_option_append (struct cmsghdr *__cmsg,
+ __const uint8_t *__typep, int __multx,
+ int __plusy);
+extern uint8_t *inet6_option_alloc (struct cmsghdr *__cmsg, int __datalen,
+ int __multx, int __plusy);
+extern int inet6_option_next (__const struct cmsghdr *__cmsg,
+ uint8_t **__tptrp);
+extern int inet6_option_find (__const struct cmsghdr *__cmsg,
+ uint8_t **__tptrp, int __type);
+#endif /* use GNU */
+
__END_DECLS
#endif /* netinet/in.h */
diff --git a/inet/netinet/ip6.h b/inet/netinet/ip6.h
index c6fc2b31c7..7045836df6 100644
--- a/inet/netinet/ip6.h
+++ b/inet/netinet/ip6.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991-1997, 2001 Free Software Foundation, Inc.
+/* Copyright (C) 1991-1997, 2001, 2003 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
@@ -47,51 +47,58 @@ struct ip6_hdr
#define ip6_hlim ip6_ctlun.ip6_un1.ip6_un1_hlim
#define ip6_hops ip6_ctlun.ip6_un1.ip6_un1_hlim
+/* Generic extension header. */
+struct ip6_ext
+ {
+ uint8_t ip6e_nxt; /* next header. */
+ uint8_t ip6e_len; /* length in units of 8 octets. */
+ };
+
/* Hop-by-Hop options header. */
struct ip6_hbh
{
- uint8_t ip6h_nxt; /* next hesder. */
- uint8_t ip6h_len; /* length in units of 8 octets. */
+ uint8_t ip6h_nxt; /* next header. */
+ 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 */
+ 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 */
+ 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 */
+ 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]; /* up to 23 addresses */
};
/* 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 */
+ 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
@@ -104,4 +111,8 @@ struct ip6_frag
#define IP6F_MORE_FRAG 0x0100 /* more-fragments flag */
#endif
+/* Special option types for padding. */
+#define IP6OPT_PAD1 0
+#define IP6OPT_PADN 1
+
#endif /* netinet/ip6.h */