diff options
| author | Bruce Allan <bwa@us.ibm.com> | 2003-02-21 07:42:14 -0800 |
|---|---|---|
| committer | Linus Torvalds <torvalds@home.transmeta.com> | 2003-02-21 07:42:14 -0800 |
| commit | 32c0c014580b09cbdd7b334bbe994401d41dece2 (patch) | |
| tree | 0a56710a111c5dddd15658bb4c8464812253724a /include | |
| parent | 132325b4385fb12490a65488da3ceba681a7b430 (diff) | |
[SCTP/IPV6]: Move sockaddr storage and in6addr_{any,loopback} to generic places.
Diffstat (limited to 'include')
| -rw-r--r-- | include/linux/in6.h | 9 | ||||
| -rw-r--r-- | include/linux/socket.h | 15 | ||||
| -rw-r--r-- | include/net/sctp/structs.h | 32 |
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. */ |
