about summary refs log tree commit diff
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.gz
glibc-a4596570324480a8af6a9a277dadb1c2ff7be3f9.tar.xz
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 */