]> git.hungrycats.org Git - linux/commitdiff
[SCTP/IPV6]: Move sockaddr storage and in6addr_{any,loopback} to generic places.
authorBruce Allan <bwa@us.ibm.com>
Fri, 21 Feb 2003 15:42:14 +0000 (07:42 -0800)
committerLinus Torvalds <torvalds@home.transmeta.com>
Fri, 21 Feb 2003 15:42:14 +0000 (07:42 -0800)
include/linux/in6.h
include/linux/socket.h
include/net/sctp/structs.h
net/ipv6/addrconf.c

index 01976510f76dc65a6d880f9ba4b89e02545580b9..ee7e68e39d9edc1426c34fa1162296db5b47f0f8 100644 (file)
@@ -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 # */
index f8e90303576d8f09644c41d23b6ed3b3040e222a..9352f72c5988418d8803ca3e0c29f737f8fa0329 100644 (file)
@@ -24,6 +24,21 @@ struct linger {
        int             l_linger;       /* How long to linger for       */
 };
 
+/*
+ * 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
index 45bd3fc4df773f43eb7f3466d22591fba08cd293..1ebfd5467d8fe13113c41087f835d8b1e5773450 100644 (file)
 #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.
  */
index 2a3104014f5b95953c54c713735410c2276cb38e..0b6c6fb5a423e8390dcfa794548b510fd585767a 100644 (file)
@@ -136,6 +136,10 @@ static struct ipv6_devconf ipv6_devconf_dflt =
        MAX_RTR_SOLICITATION_DELAY,     /* rtr solicit delay    */
 };
 
+/* IPv6 Wildcard Address and Loopback Address defined by RFC2553 */
+const struct in6_addr in6addr_any = IN6ADDR_ANY_INIT;
+const struct in6_addr in6addr_loopback = IN6ADDR_LOOPBACK_INIT;
+
 int ipv6_addr_type(struct in6_addr *addr)
 {
        u32 st;