summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorBruce Allan <bwa@us.ibm.com>2003-02-21 07:42:14 -0800
committerLinus Torvalds <torvalds@home.transmeta.com>2003-02-21 07:42:14 -0800
commit32c0c014580b09cbdd7b334bbe994401d41dece2 (patch)
tree0a56710a111c5dddd15658bb4c8464812253724a /include
parent132325b4385fb12490a65488da3ceba681a7b430 (diff)
[SCTP/IPV6]: Move sockaddr storage and in6addr_{any,loopback} to generic places.
Diffstat (limited to 'include')
-rw-r--r--include/linux/in6.h9
-rw-r--r--include/linux/socket.h15
-rw-r--r--include/net/sctp/structs.h32
3 files changed, 24 insertions, 32 deletions
diff --git a/include/linux/in6.h b/include/linux/in6.h
index 01976510f76d..ee7e68e39d9e 100644
--- a/include/linux/in6.h
+++ b/include/linux/in6.h
@@ -40,6 +40,15 @@ struct in6_addr
#define s6_addr32 in6_u.u6_addr32
};
+/* IPv6 Wildcard Address (::) and Loopback Address (::1) defined in RFC2553
+ * NOTE: Be aware the IN6ADDR_* constants and in6addr_* externals are defined
+ * in network byte order, not in host byte order as are the IPv4 equivalents
+ */
+extern const struct in6_addr in6addr_any;
+#define IN6ADDR_ANY_INIT { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } } }
+extern const struct in6_addr in6addr_loopback;
+#define IN6ADDR_LOOPBACK_INIT { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 } } }
+
struct sockaddr_in6 {
unsigned short int sin6_family; /* AF_INET6 */
__u16 sin6_port; /* Transport layer port # */
diff --git a/include/linux/socket.h b/include/linux/socket.h
index f8e90303576d..9352f72c5988 100644
--- a/include/linux/socket.h
+++ b/include/linux/socket.h
@@ -25,6 +25,21 @@ struct linger {
};
/*
+ * Desired design of maximum size and alignment (see RFC2553)
+ */
+#define _SS_MAXSIZE 128 /* Implementation specific max size */
+#define _SS_ALIGNSIZE (__alignof__ (struct sockaddr *))
+ /* Implementation specific desired alignment */
+
+struct sockaddr_storage {
+ sa_family_t ss_family; /* address family */
+ /* Following field(s) are implementation specific */
+ char __data[_SS_MAXSIZE - sizeof(sa_family_t)];
+ /* space to achieve desired size, */
+ /* _SS_MAXSIZE value minus size of ss_family */
+} __attribute__ ((aligned(_SS_ALIGNSIZE))); /* force desired alignment */
+
+/*
* As we do 4.4BSD message passing we use a 4.4BSD message passing
* system, not 4.3. Thus msg_accrights(len) are now missing. They
* belong in an obscure libc emulation or the bin.
diff --git a/include/net/sctp/structs.h b/include/net/sctp/structs.h
index 45bd3fc4df77..1ebfd5467d8f 100644
--- a/include/net/sctp/structs.h
+++ b/include/net/sctp/structs.h
@@ -61,38 +61,6 @@
#include <linux/workqueue.h> /* We need tq_struct. */
#include <linux/sctp.h> /* We need sctp* header structs. */
-/*
- * This is (almost) a direct quote from RFC 2553.
- */
-
-/*
- * Desired design of maximum size and alignment
- */
-#define _SS_MAXSIZE 128 /* Implementation specific max size */
-#define _SS_ALIGNSIZE (sizeof (__s64))
- /* Implementation specific desired alignment */
-/*
- * Definitions used for sockaddr_storage structure paddings design.
- */
-#define _SS_PAD1SIZE (_SS_ALIGNSIZE - sizeof (sa_family_t))
-#define _SS_PAD2SIZE (_SS_MAXSIZE - (sizeof (sa_family_t)+ \
- _SS_PAD1SIZE + _SS_ALIGNSIZE))
-
-struct sockaddr_storage {
- sa_family_t __ss_family; /* address family */
- /* Following fields are implementation specific */
- char __ss_pad1[_SS_PAD1SIZE];
- /* 6 byte pad, to make implementation */
- /* specific pad up to alignment field that */
- /* follows explicit in the data structure */
- __s64 __ss_align; /* field to force desired structure */
- /* storage alignment */
- char __ss_pad2[_SS_PAD2SIZE];
- /* 112 byte pad to achieve desired size, */
- /* _SS_MAXSIZE value minus size of ss_family */
- /* __ss_pad1, __ss_align fields is 112 */
-};
-
/* A convenience structure for handling sockaddr structures.
* We should wean ourselves off this.
*/