diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2006-11-20 20:04:42 -0500 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2006-12-03 00:26:30 -0500 |
commit | 2a6fd78adec062f16f8662563115679e669efaca (patch) | |
tree | 3c2e93e5cccb7a11176079509e55f103464b1b98 /net/sctp | |
parent | 09ef7fecea40c5e4c0dfe35bed3f0ed8da554cf5 (diff) |
[SCTP] embedded sctp_addr: net-endian mirrors
Add sctp_chunk->source, sctp_sockaddr_entry->a, sctp_transport->ipaddr
and sctp_transport->saddr, maintain them as net-endian mirrors of
their host-endian counterparts.
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/sctp')
-rw-r--r-- | net/sctp/bind_addr.c | 2 | ||||
-rw-r--r-- | net/sctp/ipv6.c | 9 | ||||
-rw-r--r-- | net/sctp/protocol.c | 7 | ||||
-rw-r--r-- | net/sctp/sm_make_chunk.c | 1 | ||||
-rw-r--r-- | net/sctp/transport.c | 3 |
5 files changed, 15 insertions, 7 deletions
diff --git a/net/sctp/bind_addr.c b/net/sctp/bind_addr.c index b8115cb31ae3..2b36e4238170 100644 --- a/net/sctp/bind_addr.c +++ b/net/sctp/bind_addr.c | |||
@@ -163,6 +163,8 @@ int sctp_add_bind_addr(struct sctp_bind_addr *bp, union sctp_addr *new, | |||
163 | if (!addr->a_h.v4.sin_port) | 163 | if (!addr->a_h.v4.sin_port) |
164 | addr->a_h.v4.sin_port = bp->port; | 164 | addr->a_h.v4.sin_port = bp->port; |
165 | 165 | ||
166 | flip_to_n(&addr->a, &addr->a_h); | ||
167 | |||
166 | addr->use_as_src = use_as_src; | 168 | addr->use_as_src = use_as_src; |
167 | 169 | ||
168 | INIT_LIST_HEAD(&addr->list); | 170 | INIT_LIST_HEAD(&addr->list); |
diff --git a/net/sctp/ipv6.c b/net/sctp/ipv6.c index e533970fa335..8ebd177296ba 100644 --- a/net/sctp/ipv6.c +++ b/net/sctp/ipv6.c | |||
@@ -332,10 +332,11 @@ static void sctp_v6_copy_addrlist(struct list_head *addrlist, | |||
332 | /* Add the address to the local list. */ | 332 | /* Add the address to the local list. */ |
333 | addr = t_new(struct sctp_sockaddr_entry, GFP_ATOMIC); | 333 | addr = t_new(struct sctp_sockaddr_entry, GFP_ATOMIC); |
334 | if (addr) { | 334 | if (addr) { |
335 | addr->a_h.v6.sin6_family = AF_INET6; | 335 | addr->a.v6.sin6_family = AF_INET6; |
336 | addr->a_h.v6.sin6_port = 0; | 336 | addr->a.v6.sin6_port = 0; |
337 | addr->a_h.v6.sin6_addr = ifp->addr; | 337 | addr->a.v6.sin6_addr = ifp->addr; |
338 | addr->a_h.v6.sin6_scope_id = dev->ifindex; | 338 | addr->a.v6.sin6_scope_id = dev->ifindex; |
339 | addr->a_h = addr->a; | ||
339 | INIT_LIST_HEAD(&addr->list); | 340 | INIT_LIST_HEAD(&addr->list); |
340 | list_add_tail(&addr->list, addrlist); | 341 | list_add_tail(&addr->list, addrlist); |
341 | } | 342 | } |
diff --git a/net/sctp/protocol.c b/net/sctp/protocol.c index 20883ffd51d9..363274045032 100644 --- a/net/sctp/protocol.c +++ b/net/sctp/protocol.c | |||
@@ -150,9 +150,10 @@ static void sctp_v4_copy_addrlist(struct list_head *addrlist, | |||
150 | /* Add the address to the local list. */ | 150 | /* Add the address to the local list. */ |
151 | addr = t_new(struct sctp_sockaddr_entry, GFP_ATOMIC); | 151 | addr = t_new(struct sctp_sockaddr_entry, GFP_ATOMIC); |
152 | if (addr) { | 152 | if (addr) { |
153 | addr->a_h.v4.sin_family = AF_INET; | 153 | addr->a.v4.sin_family = AF_INET; |
154 | addr->a_h.v4.sin_port = 0; | 154 | addr->a.v4.sin_port = 0; |
155 | addr->a_h.v4.sin_addr.s_addr = ifa->ifa_local; | 155 | addr->a.v4.sin_addr.s_addr = ifa->ifa_local; |
156 | addr->a_h = addr->a; | ||
156 | list_add_tail(&addr->list, addrlist); | 157 | list_add_tail(&addr->list, addrlist); |
157 | } | 158 | } |
158 | } | 159 | } |
diff --git a/net/sctp/sm_make_chunk.c b/net/sctp/sm_make_chunk.c index 13109cfc3ae5..b8e0f72b319f 100644 --- a/net/sctp/sm_make_chunk.c +++ b/net/sctp/sm_make_chunk.c | |||
@@ -1032,6 +1032,7 @@ void sctp_init_addrs(struct sctp_chunk *chunk, union sctp_addr *src, | |||
1032 | union sctp_addr *dest) | 1032 | union sctp_addr *dest) |
1033 | { | 1033 | { |
1034 | memcpy(&chunk->source_h, src, sizeof(union sctp_addr)); | 1034 | memcpy(&chunk->source_h, src, sizeof(union sctp_addr)); |
1035 | flip_to_n(&chunk->source, &chunk->source_h); | ||
1035 | memcpy(&chunk->dest, dest, sizeof(union sctp_addr)); | 1036 | memcpy(&chunk->dest, dest, sizeof(union sctp_addr)); |
1036 | } | 1037 | } |
1037 | 1038 | ||
diff --git a/net/sctp/transport.c b/net/sctp/transport.c index 1f56c9d95739..bacd09448b8e 100644 --- a/net/sctp/transport.c +++ b/net/sctp/transport.c | |||
@@ -62,10 +62,12 @@ static struct sctp_transport *sctp_transport_init(struct sctp_transport *peer, | |||
62 | { | 62 | { |
63 | /* Copy in the address. */ | 63 | /* Copy in the address. */ |
64 | peer->ipaddr_h = *addr; | 64 | peer->ipaddr_h = *addr; |
65 | flip_to_n(&peer->ipaddr, &peer->ipaddr_h); | ||
65 | peer->af_specific = sctp_get_af_specific(addr->sa.sa_family); | 66 | peer->af_specific = sctp_get_af_specific(addr->sa.sa_family); |
66 | peer->asoc = NULL; | 67 | peer->asoc = NULL; |
67 | 68 | ||
68 | peer->dst = NULL; | 69 | peer->dst = NULL; |
70 | memset(&peer->saddr, 0, sizeof(union sctp_addr)); | ||
69 | memset(&peer->saddr_h, 0, sizeof(union sctp_addr)); | 71 | memset(&peer->saddr_h, 0, sizeof(union sctp_addr)); |
70 | 72 | ||
71 | /* From 6.3.1 RTO Calculation: | 73 | /* From 6.3.1 RTO Calculation: |
@@ -258,6 +260,7 @@ void sctp_transport_route(struct sctp_transport *transport, | |||
258 | memcpy(&transport->saddr_h, saddr, sizeof(union sctp_addr)); | 260 | memcpy(&transport->saddr_h, saddr, sizeof(union sctp_addr)); |
259 | else | 261 | else |
260 | af->get_saddr(asoc, dst, daddr, &transport->saddr_h); | 262 | af->get_saddr(asoc, dst, daddr, &transport->saddr_h); |
263 | flip_to_n(&transport->saddr, &transport->saddr_h); | ||
261 | 264 | ||
262 | transport->dst = dst; | 265 | transport->dst = dst; |
263 | if ((transport->param_flags & SPP_PMTUD_DISABLE) && transport->pathmtu) { | 266 | if ((transport->param_flags & SPP_PMTUD_DISABLE) && transport->pathmtu) { |