Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
Conflicts: drivers/infiniband/core/iwcm.c drivers/net/chelsio/cxgb2.c drivers/net/wireless/bcm43xx/bcm43xx_main.c drivers/net/wireless/prism54/islpci_eth.c drivers/usb/core/hub.h drivers/usb/input/hid-core.c net/core/netpoll.c Fix up merge failures with Linus's head and fix new compilation failures. Signed-Off-By: David Howells <dhowells@redhat.com>
This commit is contained in:
@@ -486,7 +486,7 @@ void sctp_assoc_rm_peer(struct sctp_association *asoc,
|
||||
" port: %d\n",
|
||||
asoc,
|
||||
(&peer->ipaddr),
|
||||
peer->ipaddr.v4.sin_port);
|
||||
ntohs(peer->ipaddr.v4.sin_port));
|
||||
|
||||
/* If we are to remove the current retran_path, update it
|
||||
* to the next peer before removing this peer from the list.
|
||||
@@ -535,13 +535,13 @@ struct sctp_transport *sctp_assoc_add_peer(struct sctp_association *asoc,
|
||||
sp = sctp_sk(asoc->base.sk);
|
||||
|
||||
/* AF_INET and AF_INET6 share common port field. */
|
||||
port = addr->v4.sin_port;
|
||||
port = ntohs(addr->v4.sin_port);
|
||||
|
||||
SCTP_DEBUG_PRINTK_IPADDR("sctp_assoc_add_peer:association %p addr: ",
|
||||
" port: %d state:%d\n",
|
||||
asoc,
|
||||
addr,
|
||||
addr->v4.sin_port,
|
||||
port,
|
||||
peer_state);
|
||||
|
||||
/* Set the port if it has not been set yet. */
|
||||
@@ -707,6 +707,7 @@ void sctp_assoc_control_transport(struct sctp_association *asoc,
|
||||
struct sctp_transport *first;
|
||||
struct sctp_transport *second;
|
||||
struct sctp_ulpevent *event;
|
||||
struct sockaddr_storage addr;
|
||||
struct list_head *pos;
|
||||
int spc_state = 0;
|
||||
|
||||
@@ -729,8 +730,9 @@ void sctp_assoc_control_transport(struct sctp_association *asoc,
|
||||
/* Generate and send a SCTP_PEER_ADDR_CHANGE notification to the
|
||||
* user.
|
||||
*/
|
||||
event = sctp_ulpevent_make_peer_addr_change(asoc,
|
||||
(struct sockaddr_storage *) &transport->ipaddr,
|
||||
memset(&addr, 0, sizeof(struct sockaddr_storage));
|
||||
memcpy(&addr, &transport->ipaddr, transport->af_specific->sockaddr_len);
|
||||
event = sctp_ulpevent_make_peer_addr_change(asoc, &addr,
|
||||
0, spc_state, error, GFP_ATOMIC);
|
||||
if (event)
|
||||
sctp_ulpq_tail_event(&asoc->ulpq, event);
|
||||
@@ -866,7 +868,7 @@ struct sctp_transport *sctp_assoc_lookup_tsn(struct sctp_association *asoc,
|
||||
struct list_head *entry, *pos;
|
||||
struct sctp_transport *transport;
|
||||
struct sctp_chunk *chunk;
|
||||
__u32 key = htonl(tsn);
|
||||
__be32 key = htonl(tsn);
|
||||
|
||||
match = NULL;
|
||||
|
||||
@@ -924,8 +926,8 @@ struct sctp_transport *sctp_assoc_is_match(struct sctp_association *asoc,
|
||||
|
||||
sctp_read_lock(&asoc->base.addr_lock);
|
||||
|
||||
if ((asoc->base.bind_addr.port == laddr->v4.sin_port) &&
|
||||
(asoc->peer.port == paddr->v4.sin_port)) {
|
||||
if ((htons(asoc->base.bind_addr.port) == laddr->v4.sin_port) &&
|
||||
(htons(asoc->peer.port) == paddr->v4.sin_port)) {
|
||||
transport = sctp_assoc_lookup_paddr(asoc, paddr);
|
||||
if (!transport)
|
||||
goto out;
|
||||
@@ -1136,7 +1138,7 @@ void sctp_assoc_update_retran_path(struct sctp_association *asoc)
|
||||
" port: %d\n",
|
||||
asoc,
|
||||
(&t->ipaddr),
|
||||
t->ipaddr.v4.sin_port);
|
||||
ntohs(t->ipaddr.v4.sin_port));
|
||||
}
|
||||
|
||||
/* Choose the transport for sending a INIT packet. */
|
||||
@@ -1161,7 +1163,7 @@ struct sctp_transport *sctp_assoc_choose_init_transport(
|
||||
" port: %d\n",
|
||||
asoc,
|
||||
(&t->ipaddr),
|
||||
t->ipaddr.v4.sin_port);
|
||||
ntohs(t->ipaddr.v4.sin_port));
|
||||
|
||||
return t;
|
||||
}
|
||||
|
@@ -161,7 +161,7 @@ int sctp_add_bind_addr(struct sctp_bind_addr *bp, union sctp_addr *new,
|
||||
* Both v4 and v6 have the port at the same offset.
|
||||
*/
|
||||
if (!addr->a.v4.sin_port)
|
||||
addr->a.v4.sin_port = bp->port;
|
||||
addr->a.v4.sin_port = htons(bp->port);
|
||||
|
||||
addr->use_as_src = use_as_src;
|
||||
|
||||
@@ -275,7 +275,7 @@ int sctp_raw_to_bind_addrs(struct sctp_bind_addr *bp, __u8 *raw_addr_list,
|
||||
break;
|
||||
}
|
||||
|
||||
af->from_addr_param(&addr, rawaddr, port, 0);
|
||||
af->from_addr_param(&addr, rawaddr, htons(port), 0);
|
||||
retval = sctp_add_bind_addr(bp, &addr, 1, gfp);
|
||||
if (retval) {
|
||||
/* Can't finish building the list, clean up. */
|
||||
|
@@ -72,6 +72,10 @@ static struct sctp_endpoint *sctp_endpoint_init(struct sctp_endpoint *ep,
|
||||
{
|
||||
memset(ep, 0, sizeof(struct sctp_endpoint));
|
||||
|
||||
ep->digest = kzalloc(SCTP_SIGNATURE_SIZE, gfp);
|
||||
if (!ep->digest)
|
||||
return NULL;
|
||||
|
||||
/* Initialize the base structure. */
|
||||
/* What type of endpoint are we? */
|
||||
ep->base.type = SCTP_EP_TYPE_SOCKET;
|
||||
@@ -181,6 +185,9 @@ static void sctp_endpoint_destroy(struct sctp_endpoint *ep)
|
||||
/* Free up the HMAC transform. */
|
||||
crypto_free_hash(sctp_sk(ep->base.sk)->hmac);
|
||||
|
||||
/* Free the digest buffer */
|
||||
kfree(ep->digest);
|
||||
|
||||
/* Cleanup. */
|
||||
sctp_inq_free(&ep->base.inqueue);
|
||||
sctp_bind_addr_free(&ep->base.bind_addr);
|
||||
@@ -222,7 +229,7 @@ struct sctp_endpoint *sctp_endpoint_is_match(struct sctp_endpoint *ep,
|
||||
struct sctp_endpoint *retval;
|
||||
|
||||
sctp_read_lock(&ep->base.addr_lock);
|
||||
if (ep->base.bind_addr.port == laddr->v4.sin_port) {
|
||||
if (htons(ep->base.bind_addr.port) == laddr->v4.sin_port) {
|
||||
if (sctp_bind_addr_match(&ep->base.bind_addr, laddr,
|
||||
sctp_sk(ep->base.sk))) {
|
||||
retval = ep;
|
||||
@@ -250,7 +257,7 @@ static struct sctp_association *__sctp_endpoint_lookup_assoc(
|
||||
struct sctp_association *asoc;
|
||||
struct list_head *pos;
|
||||
|
||||
rport = paddr->v4.sin_port;
|
||||
rport = ntohs(paddr->v4.sin_port);
|
||||
|
||||
list_for_each(pos, &ep->asocs) {
|
||||
asoc = list_entry(pos, struct sctp_association, asocs);
|
||||
|
@@ -726,7 +726,7 @@ static struct sctp_endpoint *__sctp_rcv_lookup_endpoint(const union sctp_addr *l
|
||||
struct sctp_endpoint *ep;
|
||||
int hash;
|
||||
|
||||
hash = sctp_ep_hashfn(laddr->v4.sin_port);
|
||||
hash = sctp_ep_hashfn(ntohs(laddr->v4.sin_port));
|
||||
head = &sctp_ep_hashtable[hash];
|
||||
read_lock(&head->lock);
|
||||
for (epb = head->chain; epb; epb = epb->next) {
|
||||
@@ -830,7 +830,7 @@ static struct sctp_association *__sctp_lookup_association(
|
||||
/* Optimize here for direct hit, only listening connections can
|
||||
* have wildcards anyways.
|
||||
*/
|
||||
hash = sctp_assoc_hashfn(local->v4.sin_port, peer->v4.sin_port);
|
||||
hash = sctp_assoc_hashfn(ntohs(local->v4.sin_port), ntohs(peer->v4.sin_port));
|
||||
head = &sctp_assoc_hashtable[hash];
|
||||
read_lock(&head->lock);
|
||||
for (epb = head->chain; epb; epb = epb->next) {
|
||||
@@ -957,7 +957,7 @@ static struct sctp_association *__sctp_rcv_init_lookup(struct sk_buff *skb,
|
||||
if (!af)
|
||||
continue;
|
||||
|
||||
af->from_addr_param(paddr, params.addr, ntohs(sh->source), 0);
|
||||
af->from_addr_param(paddr, params.addr, sh->source, 0);
|
||||
|
||||
asoc = __sctp_lookup_association(laddr, paddr, &transport);
|
||||
if (asoc)
|
||||
|
@@ -84,7 +84,7 @@ static struct notifier_block sctp_inet6addr_notifier = {
|
||||
|
||||
/* ICMP error handler. */
|
||||
SCTP_STATIC void sctp_v6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
|
||||
int type, int code, int offset, __u32 info)
|
||||
int type, int code, int offset, __be32 info)
|
||||
{
|
||||
struct inet6_dev *idev;
|
||||
struct ipv6hdr *iph = (struct ipv6hdr *)skb->data;
|
||||
@@ -170,8 +170,6 @@ static int sctp_v6_xmit(struct sk_buff *skb, struct sctp_transport *transport,
|
||||
fl.oif = transport->saddr.v6.sin6_scope_id;
|
||||
else
|
||||
fl.oif = sk->sk_bound_dev_if;
|
||||
fl.fl_ip_sport = inet_sk(sk)->sport;
|
||||
fl.fl_ip_dport = transport->ipaddr.v6.sin6_port;
|
||||
|
||||
if (np->opt && np->opt->srcrt) {
|
||||
struct rt0_hdr *rt0 = (struct rt0_hdr *) np->opt->srcrt;
|
||||
@@ -239,7 +237,7 @@ static inline int sctp_v6_addr_match_len(union sctp_addr *s1,
|
||||
int i, j;
|
||||
|
||||
for (i = 0; i < 4 ; i++) {
|
||||
__u32 a1xora2;
|
||||
__be32 a1xora2;
|
||||
|
||||
a1xora2 = a1->s6_addr32[i] ^ a2->s6_addr32[i];
|
||||
|
||||
@@ -350,7 +348,7 @@ static void sctp_v6_from_skb(union sctp_addr *addr,struct sk_buff *skb,
|
||||
int is_saddr)
|
||||
{
|
||||
void *from;
|
||||
__u16 *port;
|
||||
__be16 *port;
|
||||
struct sctphdr *sh;
|
||||
|
||||
port = &addr->v6.sin6_port;
|
||||
@@ -360,10 +358,10 @@ static void sctp_v6_from_skb(union sctp_addr *addr,struct sk_buff *skb,
|
||||
|
||||
sh = (struct sctphdr *) skb->h.raw;
|
||||
if (is_saddr) {
|
||||
*port = ntohs(sh->source);
|
||||
*port = sh->source;
|
||||
from = &skb->nh.ipv6h->saddr;
|
||||
} else {
|
||||
*port = ntohs(sh->dest);
|
||||
*port = sh->dest;
|
||||
from = &skb->nh.ipv6h->daddr;
|
||||
}
|
||||
ipv6_addr_copy(&addr->v6.sin6_addr, from);
|
||||
@@ -373,7 +371,7 @@ static void sctp_v6_from_skb(union sctp_addr *addr,struct sk_buff *skb,
|
||||
static void sctp_v6_from_sk(union sctp_addr *addr, struct sock *sk)
|
||||
{
|
||||
addr->v6.sin6_family = AF_INET6;
|
||||
addr->v6.sin6_port = inet_sk(sk)->num;
|
||||
addr->v6.sin6_port = 0;
|
||||
addr->v6.sin6_addr = inet6_sk(sk)->rcv_saddr;
|
||||
}
|
||||
|
||||
@@ -407,7 +405,7 @@ static void sctp_v6_to_sk_daddr(union sctp_addr *addr, struct sock *sk)
|
||||
/* Initialize a sctp_addr from an address parameter. */
|
||||
static void sctp_v6_from_addr_param(union sctp_addr *addr,
|
||||
union sctp_addr_param *param,
|
||||
__u16 port, int iif)
|
||||
__be16 port, int iif)
|
||||
{
|
||||
addr->v6.sin6_family = AF_INET6;
|
||||
addr->v6.sin6_port = port;
|
||||
@@ -425,7 +423,7 @@ static int sctp_v6_to_addr_param(const union sctp_addr *addr,
|
||||
int length = sizeof(sctp_ipv6addr_param_t);
|
||||
|
||||
param->v6.param_hdr.type = SCTP_PARAM_IPV6_ADDRESS;
|
||||
param->v6.param_hdr.length = ntohs(length);
|
||||
param->v6.param_hdr.length = htons(length);
|
||||
ipv6_addr_copy(¶m->v6.addr, &addr->v6.sin6_addr);
|
||||
|
||||
return length;
|
||||
@@ -433,7 +431,7 @@ static int sctp_v6_to_addr_param(const union sctp_addr *addr,
|
||||
|
||||
/* Initialize a sctp_addr from a dst_entry. */
|
||||
static void sctp_v6_dst_saddr(union sctp_addr *addr, struct dst_entry *dst,
|
||||
unsigned short port)
|
||||
__be16 port)
|
||||
{
|
||||
struct rt6_info *rt = (struct rt6_info *)dst;
|
||||
addr->sa.sa_family = AF_INET6;
|
||||
@@ -480,7 +478,7 @@ static int sctp_v6_cmp_addr(const union sctp_addr *addr1,
|
||||
}
|
||||
|
||||
/* Initialize addr struct to INADDR_ANY. */
|
||||
static void sctp_v6_inaddr_any(union sctp_addr *addr, unsigned short port)
|
||||
static void sctp_v6_inaddr_any(union sctp_addr *addr, __be16 port)
|
||||
{
|
||||
memset(addr, 0x00, sizeof(union sctp_addr));
|
||||
addr->v6.sin6_family = AF_INET6;
|
||||
@@ -855,7 +853,7 @@ static int sctp_inet6_send_verify(struct sctp_sock *opt, union sctp_addr *addr)
|
||||
* Returns number of addresses supported.
|
||||
*/
|
||||
static int sctp_inet6_supported_addrs(const struct sctp_sock *opt,
|
||||
__u16 *types)
|
||||
__be16 *types)
|
||||
{
|
||||
types[0] = SCTP_PARAM_IPV4_ADDRESS;
|
||||
types[1] = SCTP_PARAM_IPV6_ADDRESS;
|
||||
|
@@ -1065,7 +1065,7 @@ int sctp_outq_sack(struct sctp_outq *q, struct sctp_sackhdr *sack)
|
||||
* A) Initialize the cacc_saw_newack to 0 for all destination
|
||||
* addresses.
|
||||
*/
|
||||
if (sack->num_gap_ack_blocks > 0 &&
|
||||
if (sack->num_gap_ack_blocks &&
|
||||
primary->cacc.changeover_active) {
|
||||
list_for_each(pos, transport_list) {
|
||||
transport = list_entry(pos, struct sctp_transport,
|
||||
@@ -1632,7 +1632,7 @@ pass:
|
||||
}
|
||||
|
||||
static inline int sctp_get_skip_pos(struct sctp_fwdtsn_skip *skiplist,
|
||||
int nskips, __u16 stream)
|
||||
int nskips, __be16 stream)
|
||||
{
|
||||
int i;
|
||||
|
||||
|
@@ -160,7 +160,7 @@ static void sctp_seq_dump_local_addrs(struct seq_file *seq, struct sctp_ep_commo
|
||||
|
||||
list_for_each(pos, &epb->bind_addr.address_list) {
|
||||
laddr = list_entry(pos, struct sctp_sockaddr_entry, list);
|
||||
addr = (union sctp_addr *)&laddr->a;
|
||||
addr = &laddr->a;
|
||||
af = sctp_get_af_specific(addr->sa.sa_family);
|
||||
if (primary && af->cmp_addr(addr, primary)) {
|
||||
seq_printf(seq, "*");
|
||||
@@ -177,10 +177,10 @@ static void sctp_seq_dump_remote_addrs(struct seq_file *seq, struct sctp_associa
|
||||
union sctp_addr *addr, *primary;
|
||||
struct sctp_af *af;
|
||||
|
||||
primary = &(assoc->peer.primary_addr);
|
||||
primary = &assoc->peer.primary_addr;
|
||||
list_for_each(pos, &assoc->peer.transport_addr_list) {
|
||||
transport = list_entry(pos, struct sctp_transport, transports);
|
||||
addr = (union sctp_addr *)&transport->ipaddr;
|
||||
addr = &transport->ipaddr;
|
||||
af = sctp_get_af_specific(addr->sa.sa_family);
|
||||
if (af->cmp_addr(addr, primary)) {
|
||||
seq_printf(seq, "*");
|
||||
|
@@ -251,7 +251,7 @@ static void sctp_v4_from_skb(union sctp_addr *addr, struct sk_buff *skb,
|
||||
int is_saddr)
|
||||
{
|
||||
void *from;
|
||||
__u16 *port;
|
||||
__be16 *port;
|
||||
struct sctphdr *sh;
|
||||
|
||||
port = &addr->v4.sin_port;
|
||||
@@ -259,10 +259,10 @@ static void sctp_v4_from_skb(union sctp_addr *addr, struct sk_buff *skb,
|
||||
|
||||
sh = (struct sctphdr *) skb->h.raw;
|
||||
if (is_saddr) {
|
||||
*port = ntohs(sh->source);
|
||||
*port = sh->source;
|
||||
from = &skb->nh.iph->saddr;
|
||||
} else {
|
||||
*port = ntohs(sh->dest);
|
||||
*port = sh->dest;
|
||||
from = &skb->nh.iph->daddr;
|
||||
}
|
||||
memcpy(&addr->v4.sin_addr.s_addr, from, sizeof(struct in_addr));
|
||||
@@ -272,7 +272,7 @@ static void sctp_v4_from_skb(union sctp_addr *addr, struct sk_buff *skb,
|
||||
static void sctp_v4_from_sk(union sctp_addr *addr, struct sock *sk)
|
||||
{
|
||||
addr->v4.sin_family = AF_INET;
|
||||
addr->v4.sin_port = inet_sk(sk)->num;
|
||||
addr->v4.sin_port = 0;
|
||||
addr->v4.sin_addr.s_addr = inet_sk(sk)->rcv_saddr;
|
||||
}
|
||||
|
||||
@@ -291,7 +291,7 @@ static void sctp_v4_to_sk_daddr(union sctp_addr *addr, struct sock *sk)
|
||||
/* Initialize a sctp_addr from an address parameter. */
|
||||
static void sctp_v4_from_addr_param(union sctp_addr *addr,
|
||||
union sctp_addr_param *param,
|
||||
__u16 port, int iif)
|
||||
__be16 port, int iif)
|
||||
{
|
||||
addr->v4.sin_family = AF_INET;
|
||||
addr->v4.sin_port = port;
|
||||
@@ -307,7 +307,7 @@ static int sctp_v4_to_addr_param(const union sctp_addr *addr,
|
||||
int length = sizeof(sctp_ipv4addr_param_t);
|
||||
|
||||
param->v4.param_hdr.type = SCTP_PARAM_IPV4_ADDRESS;
|
||||
param->v4.param_hdr.length = ntohs(length);
|
||||
param->v4.param_hdr.length = htons(length);
|
||||
param->v4.addr.s_addr = addr->v4.sin_addr.s_addr;
|
||||
|
||||
return length;
|
||||
@@ -315,7 +315,7 @@ static int sctp_v4_to_addr_param(const union sctp_addr *addr,
|
||||
|
||||
/* Initialize a sctp_addr from a dst_entry. */
|
||||
static void sctp_v4_dst_saddr(union sctp_addr *saddr, struct dst_entry *dst,
|
||||
unsigned short port)
|
||||
__be16 port)
|
||||
{
|
||||
struct rtable *rt = (struct rtable *)dst;
|
||||
saddr->v4.sin_family = AF_INET;
|
||||
@@ -338,7 +338,7 @@ static int sctp_v4_cmp_addr(const union sctp_addr *addr1,
|
||||
}
|
||||
|
||||
/* Initialize addr struct to INADDR_ANY. */
|
||||
static void sctp_v4_inaddr_any(union sctp_addr *addr, unsigned short port)
|
||||
static void sctp_v4_inaddr_any(union sctp_addr *addr, __be16 port)
|
||||
{
|
||||
addr->v4.sin_family = AF_INET;
|
||||
addr->v4.sin_addr.s_addr = INADDR_ANY;
|
||||
@@ -481,7 +481,7 @@ static struct dst_entry *sctp_v4_get_dst(struct sctp_association *asoc,
|
||||
list);
|
||||
if (!laddr->use_as_src)
|
||||
continue;
|
||||
sctp_v4_dst_saddr(&dst_saddr, dst, bp->port);
|
||||
sctp_v4_dst_saddr(&dst_saddr, dst, htons(bp->port));
|
||||
if (sctp_v4_cmp_addr(&dst_saddr, &laddr->a))
|
||||
goto out_unlock;
|
||||
}
|
||||
@@ -538,7 +538,7 @@ static void sctp_v4_get_saddr(struct sctp_association *asoc,
|
||||
|
||||
if (rt) {
|
||||
saddr->v4.sin_family = AF_INET;
|
||||
saddr->v4.sin_port = asoc->base.bind_addr.port;
|
||||
saddr->v4.sin_port = htons(asoc->base.bind_addr.port);
|
||||
saddr->v4.sin_addr.s_addr = rt->rt_src;
|
||||
}
|
||||
}
|
||||
@@ -791,7 +791,7 @@ static int sctp_inet_send_verify(struct sctp_sock *opt, union sctp_addr *addr)
|
||||
* chunks. Returns number of addresses supported.
|
||||
*/
|
||||
static int sctp_inet_supported_addrs(const struct sctp_sock *opt,
|
||||
__u16 *types)
|
||||
__be16 *types)
|
||||
{
|
||||
types[0] = SCTP_PARAM_IPV4_ADDRESS;
|
||||
return 1;
|
||||
@@ -808,7 +808,7 @@ static inline int sctp_v4_xmit(struct sk_buff *skb,
|
||||
NIPQUAD(((struct rtable *)skb->dst)->rt_dst));
|
||||
|
||||
SCTP_INC_STATS(SCTP_MIB_OUTSCTPPACKS);
|
||||
return ip_queue_xmit(skb, ipfragok);
|
||||
return ip_queue_xmit(skb, skb->sk, ipfragok);
|
||||
}
|
||||
|
||||
static struct sctp_af sctp_ipv4_specific;
|
||||
|
@@ -111,7 +111,7 @@ static const struct sctp_paramhdr prsctp_param = {
|
||||
* provided chunk, as most cause codes will be embedded inside an
|
||||
* abort chunk.
|
||||
*/
|
||||
void sctp_init_cause(struct sctp_chunk *chunk, __u16 cause_code,
|
||||
void sctp_init_cause(struct sctp_chunk *chunk, __be16 cause_code,
|
||||
const void *payload, size_t paylen)
|
||||
{
|
||||
sctp_errhdr_t err;
|
||||
@@ -183,7 +183,7 @@ struct sctp_chunk *sctp_make_init(const struct sctp_association *asoc,
|
||||
int num_types, addrs_len = 0;
|
||||
struct sctp_sock *sp;
|
||||
sctp_supported_addrs_param_t sat;
|
||||
__u16 types[2];
|
||||
__be16 types[2];
|
||||
sctp_adaption_ind_param_t aiparam;
|
||||
|
||||
/* RFC 2960 3.3.2 Initiation (INIT) (1)
|
||||
@@ -775,7 +775,7 @@ struct sctp_chunk *sctp_make_abort_no_data(
|
||||
const struct sctp_chunk *chunk, __u32 tsn)
|
||||
{
|
||||
struct sctp_chunk *retval;
|
||||
__u32 payload;
|
||||
__be32 payload;
|
||||
|
||||
retval = sctp_make_abort(asoc, chunk, sizeof(sctp_errhdr_t)
|
||||
+ sizeof(tsn));
|
||||
@@ -951,7 +951,7 @@ nodata:
|
||||
/* Create an Operation Error chunk. */
|
||||
struct sctp_chunk *sctp_make_op_error(const struct sctp_association *asoc,
|
||||
const struct sctp_chunk *chunk,
|
||||
__u16 cause_code, const void *payload,
|
||||
__be16 cause_code, const void *payload,
|
||||
size_t paylen)
|
||||
{
|
||||
struct sctp_chunk *retval;
|
||||
@@ -1190,15 +1190,14 @@ void sctp_chunk_assign_ssn(struct sctp_chunk *chunk)
|
||||
if (chunk->chunk_hdr->flags & SCTP_DATA_UNORDERED) {
|
||||
ssn = 0;
|
||||
} else {
|
||||
sid = htons(chunk->subh.data_hdr->stream);
|
||||
sid = ntohs(chunk->subh.data_hdr->stream);
|
||||
if (chunk->chunk_hdr->flags & SCTP_DATA_LAST_FRAG)
|
||||
ssn = sctp_ssn_next(&chunk->asoc->ssnmap->out, sid);
|
||||
else
|
||||
ssn = sctp_ssn_peek(&chunk->asoc->ssnmap->out, sid);
|
||||
ssn = htons(ssn);
|
||||
}
|
||||
|
||||
chunk->subh.data_hdr->ssn = ssn;
|
||||
chunk->subh.data_hdr->ssn = htons(ssn);
|
||||
chunk->has_ssn = 1;
|
||||
}
|
||||
|
||||
@@ -1280,15 +1279,13 @@ static sctp_cookie_param_t *sctp_pack_cookie(const struct sctp_endpoint *ep,
|
||||
- (bodysize % SCTP_COOKIE_MULTIPLE);
|
||||
*cookie_len = headersize + bodysize;
|
||||
|
||||
retval = kmalloc(*cookie_len, GFP_ATOMIC);
|
||||
|
||||
if (!retval)
|
||||
goto nodata;
|
||||
|
||||
/* Clear this memory since we are sending this data structure
|
||||
* out on the network.
|
||||
*/
|
||||
memset(retval, 0x00, *cookie_len);
|
||||
retval = kzalloc(*cookie_len, GFP_ATOMIC);
|
||||
if (!retval)
|
||||
goto nodata;
|
||||
|
||||
cookie = (struct sctp_signed_cookie *) retval->body;
|
||||
|
||||
/* Set up the parameter header. */
|
||||
@@ -1438,7 +1435,7 @@ no_hmac:
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (ntohs(chunk->sctp_hdr->source) != bear_cookie->peer_addr.v4.sin_port ||
|
||||
if (chunk->sctp_hdr->source != bear_cookie->peer_addr.v4.sin_port ||
|
||||
ntohs(chunk->sctp_hdr->dest) != bear_cookie->my_port) {
|
||||
*error = -SCTP_IERROR_BAD_PORTS;
|
||||
goto fail;
|
||||
@@ -1473,10 +1470,10 @@ no_hmac:
|
||||
suseconds_t usecs = (tv.tv_sec -
|
||||
bear_cookie->expiration.tv_sec) * 1000000L +
|
||||
tv.tv_usec - bear_cookie->expiration.tv_usec;
|
||||
__be32 n = htonl(usecs);
|
||||
|
||||
usecs = htonl(usecs);
|
||||
sctp_init_cause(*errp, SCTP_ERROR_STALE_COOKIE,
|
||||
&usecs, sizeof(usecs));
|
||||
&n, sizeof(n));
|
||||
*error = -SCTP_IERROR_STALE_COOKIE;
|
||||
} else
|
||||
*error = -SCTP_IERROR_NOMEM;
|
||||
@@ -1539,8 +1536,8 @@ malformed:
|
||||
********************************************************************/
|
||||
|
||||
struct __sctp_missing {
|
||||
__u32 num_missing;
|
||||
__u16 type;
|
||||
__be32 num_missing;
|
||||
__be16 type;
|
||||
} __attribute__((packed));
|
||||
|
||||
/*
|
||||
@@ -1852,9 +1849,10 @@ int sctp_process_init(struct sctp_association *asoc, sctp_cid_t cid,
|
||||
* added as the primary transport. The source address seems to
|
||||
* be a a better choice than any of the embedded addresses.
|
||||
*/
|
||||
if (peer_addr)
|
||||
if (peer_addr) {
|
||||
if(!sctp_assoc_add_peer(asoc, peer_addr, gfp, SCTP_ACTIVE))
|
||||
goto nomem;
|
||||
}
|
||||
|
||||
/* Process the initialization parameters. */
|
||||
|
||||
@@ -1910,10 +1908,9 @@ int sctp_process_init(struct sctp_association *asoc, sctp_cid_t cid,
|
||||
/* Copy cookie in case we need to resend COOKIE-ECHO. */
|
||||
cookie = asoc->peer.cookie;
|
||||
if (cookie) {
|
||||
asoc->peer.cookie = kmalloc(asoc->peer.cookie_len, gfp);
|
||||
asoc->peer.cookie = kmemdup(cookie, asoc->peer.cookie_len, gfp);
|
||||
if (!asoc->peer.cookie)
|
||||
goto clean_up;
|
||||
memcpy(asoc->peer.cookie, cookie, asoc->peer.cookie_len);
|
||||
}
|
||||
|
||||
/* RFC 2960 7.2.1 The initial value of ssthresh MAY be arbitrarily
|
||||
@@ -2027,7 +2024,7 @@ static int sctp_process_param(struct sctp_association *asoc,
|
||||
/* Fall through. */
|
||||
case SCTP_PARAM_IPV4_ADDRESS:
|
||||
af = sctp_get_af_specific(param_type2af(param.p->type));
|
||||
af->from_addr_param(&addr, param.addr, asoc->peer.port, 0);
|
||||
af->from_addr_param(&addr, param.addr, htons(asoc->peer.port), 0);
|
||||
scope = sctp_scope(peer_addr);
|
||||
if (sctp_in_scope(&addr, scope))
|
||||
if (!sctp_assoc_add_peer(asoc, &addr, gfp, SCTP_UNCONFIRMED))
|
||||
@@ -2230,7 +2227,7 @@ struct sctp_chunk *sctp_make_asconf_update_ip(struct sctp_association *asoc,
|
||||
union sctp_addr *laddr,
|
||||
struct sockaddr *addrs,
|
||||
int addrcnt,
|
||||
__u16 flags)
|
||||
__be16 flags)
|
||||
{
|
||||
sctp_addip_param_t param;
|
||||
struct sctp_chunk *retval;
|
||||
@@ -2363,14 +2360,14 @@ static struct sctp_chunk *sctp_make_asconf_ack(const struct sctp_association *as
|
||||
}
|
||||
|
||||
/* Add response parameters to an ASCONF_ACK chunk. */
|
||||
static void sctp_add_asconf_response(struct sctp_chunk *chunk, __u32 crr_id,
|
||||
__u16 err_code, sctp_addip_param_t *asconf_param)
|
||||
static void sctp_add_asconf_response(struct sctp_chunk *chunk, __be32 crr_id,
|
||||
__be16 err_code, sctp_addip_param_t *asconf_param)
|
||||
{
|
||||
sctp_addip_param_t ack_param;
|
||||
sctp_errhdr_t err_param;
|
||||
int asconf_param_len = 0;
|
||||
int err_param_len = 0;
|
||||
__u16 response_type;
|
||||
__be16 response_type;
|
||||
|
||||
if (SCTP_ERROR_NO_ERROR == err_code) {
|
||||
response_type = SCTP_PARAM_SUCCESS_REPORT;
|
||||
@@ -2404,7 +2401,7 @@ static void sctp_add_asconf_response(struct sctp_chunk *chunk, __u32 crr_id,
|
||||
}
|
||||
|
||||
/* Process a asconf parameter. */
|
||||
static __u16 sctp_process_asconf_param(struct sctp_association *asoc,
|
||||
static __be16 sctp_process_asconf_param(struct sctp_association *asoc,
|
||||
struct sctp_chunk *asconf,
|
||||
sctp_addip_param_t *asconf_param)
|
||||
{
|
||||
@@ -2413,7 +2410,7 @@ static __u16 sctp_process_asconf_param(struct sctp_association *asoc,
|
||||
union sctp_addr addr;
|
||||
struct list_head *pos;
|
||||
union sctp_addr_param *addr_param;
|
||||
|
||||
|
||||
addr_param = (union sctp_addr_param *)
|
||||
((void *)asconf_param + sizeof(sctp_addip_param_t));
|
||||
|
||||
@@ -2421,7 +2418,7 @@ static __u16 sctp_process_asconf_param(struct sctp_association *asoc,
|
||||
if (unlikely(!af))
|
||||
return SCTP_ERROR_INV_PARAM;
|
||||
|
||||
af->from_addr_param(&addr, addr_param, asoc->peer.port, 0);
|
||||
af->from_addr_param(&addr, addr_param, htons(asoc->peer.port), 0);
|
||||
switch (asconf_param->param_hdr.type) {
|
||||
case SCTP_PARAM_ADD_IP:
|
||||
/* ADDIP 4.3 D9) If an endpoint receives an ADD IP address
|
||||
@@ -2487,7 +2484,7 @@ struct sctp_chunk *sctp_process_asconf(struct sctp_association *asoc,
|
||||
sctp_addip_param_t *asconf_param;
|
||||
struct sctp_chunk *asconf_ack;
|
||||
|
||||
__u16 err_code;
|
||||
__be16 err_code;
|
||||
int length = 0;
|
||||
int chunk_len = asconf->skb->len;
|
||||
__u32 serial;
|
||||
@@ -2586,7 +2583,7 @@ static int sctp_asconf_param_success(struct sctp_association *asoc,
|
||||
|
||||
/* We have checked the packet before, so we do not check again. */
|
||||
af = sctp_get_af_specific(param_type2af(addr_param->v4.param_hdr.type));
|
||||
af->from_addr_param(&addr, addr_param, bp->port, 0);
|
||||
af->from_addr_param(&addr, addr_param, htons(bp->port), 0);
|
||||
|
||||
switch (asconf_param->param_hdr.type) {
|
||||
case SCTP_PARAM_ADD_IP:
|
||||
@@ -2630,7 +2627,7 @@ static int sctp_asconf_param_success(struct sctp_association *asoc,
|
||||
* All TLVs after the failed response are considered unsuccessful unless a
|
||||
* specific success indication is present for the parameter.
|
||||
*/
|
||||
static __u16 sctp_get_asconf_response(struct sctp_chunk *asconf_ack,
|
||||
static __be16 sctp_get_asconf_response(struct sctp_chunk *asconf_ack,
|
||||
sctp_addip_param_t *asconf_param,
|
||||
int no_err)
|
||||
{
|
||||
@@ -2638,7 +2635,7 @@ static __u16 sctp_get_asconf_response(struct sctp_chunk *asconf_ack,
|
||||
sctp_errhdr_t *err_param;
|
||||
int length;
|
||||
int asconf_ack_len = asconf_ack->skb->len;
|
||||
__u16 err_code;
|
||||
__be16 err_code;
|
||||
|
||||
if (no_err)
|
||||
err_code = SCTP_ERROR_NO_ERROR;
|
||||
@@ -2694,7 +2691,7 @@ int sctp_process_asconf_ack(struct sctp_association *asoc,
|
||||
int all_param_pass = 0;
|
||||
int no_err = 1;
|
||||
int retval = 0;
|
||||
__u16 err_code = SCTP_ERROR_NO_ERROR;
|
||||
__be16 err_code = SCTP_ERROR_NO_ERROR;
|
||||
|
||||
/* Skip the chunkhdr and addiphdr from the last asconf sent and store
|
||||
* a pointer to address parameter.
|
||||
|
@@ -442,7 +442,7 @@ static void sctp_do_8_2_transport_strike(struct sctp_association *asoc,
|
||||
" transport IP: port:%d failed.\n",
|
||||
asoc,
|
||||
(&transport->ipaddr),
|
||||
transport->ipaddr.v4.sin_port);
|
||||
ntohs(transport->ipaddr.v4.sin_port));
|
||||
sctp_assoc_control_transport(asoc, transport,
|
||||
SCTP_TRANSPORT_DOWN,
|
||||
SCTP_FAILED_THRESHOLD);
|
||||
@@ -1360,12 +1360,12 @@ static int sctp_cmd_interpreter(sctp_event_t event_type,
|
||||
break;
|
||||
|
||||
case SCTP_CMD_INIT_FAILED:
|
||||
sctp_cmd_init_failed(commands, asoc, cmd->obj.u32);
|
||||
sctp_cmd_init_failed(commands, asoc, cmd->obj.err);
|
||||
break;
|
||||
|
||||
case SCTP_CMD_ASSOC_FAILED:
|
||||
sctp_cmd_assoc_failed(commands, asoc, event_type,
|
||||
subtype, chunk, cmd->obj.u32);
|
||||
subtype, chunk, cmd->obj.err);
|
||||
break;
|
||||
|
||||
case SCTP_CMD_INIT_COUNTER_INC:
|
||||
@@ -1420,7 +1420,7 @@ static int sctp_cmd_interpreter(sctp_event_t event_type,
|
||||
|
||||
case SCTP_CMD_PROCESS_CTSN:
|
||||
/* Dummy up a SACK for processing. */
|
||||
sackh.cum_tsn_ack = cmd->obj.u32;
|
||||
sackh.cum_tsn_ack = cmd->obj.be32;
|
||||
sackh.a_rwnd = 0;
|
||||
sackh.num_gap_ack_blocks = 0;
|
||||
sackh.num_dup_tsns = 0;
|
||||
|
@@ -93,7 +93,7 @@ static sctp_disposition_t sctp_sf_shut_8_4_5(const struct sctp_endpoint *ep,
|
||||
static struct sctp_sackhdr *sctp_sm_pull_sack(struct sctp_chunk *chunk);
|
||||
|
||||
static sctp_disposition_t sctp_stop_t1_and_abort(sctp_cmd_seq_t *commands,
|
||||
__u16 error, int sk_err,
|
||||
__be16 error, int sk_err,
|
||||
const struct sctp_association *asoc,
|
||||
struct sctp_transport *transport);
|
||||
|
||||
@@ -443,7 +443,7 @@ sctp_disposition_t sctp_sf_do_5_1C_ack(const struct sctp_endpoint *ep,
|
||||
__u32 init_tag;
|
||||
struct sctp_chunk *err_chunk;
|
||||
struct sctp_packet *packet;
|
||||
__u16 error;
|
||||
sctp_error_t error;
|
||||
|
||||
if (!sctp_vtag_verify(chunk, asoc))
|
||||
return sctp_sf_pdiscard(ep, asoc, type, arg, commands);
|
||||
@@ -886,7 +886,7 @@ sctp_disposition_t sctp_sf_sendbeat_8_3(const struct sctp_endpoint *ep,
|
||||
SCTP_ERROR(ETIMEDOUT));
|
||||
/* CMD_ASSOC_FAILED calls CMD_DELETE_TCB. */
|
||||
sctp_add_cmd_sf(commands, SCTP_CMD_ASSOC_FAILED,
|
||||
SCTP_U32(SCTP_ERROR_NO_ERROR));
|
||||
SCTP_PERR(SCTP_ERROR_NO_ERROR));
|
||||
SCTP_INC_STATS(SCTP_MIB_ABORTEDS);
|
||||
SCTP_DEC_STATS(SCTP_MIB_CURRESTAB);
|
||||
return SCTP_DISPOSITION_DELETE_TCB;
|
||||
@@ -2138,7 +2138,7 @@ static sctp_disposition_t sctp_sf_do_5_2_6_stale(const struct sctp_endpoint *ep,
|
||||
sctp_add_cmd_sf(commands, SCTP_CMD_SET_SK_ERR,
|
||||
SCTP_ERROR(ETIMEDOUT));
|
||||
sctp_add_cmd_sf(commands, SCTP_CMD_INIT_FAILED,
|
||||
SCTP_U32(SCTP_ERROR_STALE_COOKIE));
|
||||
SCTP_PERR(SCTP_ERROR_STALE_COOKIE));
|
||||
return SCTP_DISPOSITION_DELETE_TCB;
|
||||
}
|
||||
|
||||
@@ -2158,7 +2158,7 @@ static sctp_disposition_t sctp_sf_do_5_2_6_stale(const struct sctp_endpoint *ep,
|
||||
* to give ample time to retransmit the new cookie and thus
|
||||
* yield a higher probability of success on the reattempt.
|
||||
*/
|
||||
stale = ntohl(*(suseconds_t *)((u8 *)err + sizeof(sctp_errhdr_t)));
|
||||
stale = ntohl(*(__be32 *)((u8 *)err + sizeof(sctp_errhdr_t)));
|
||||
stale = (stale * 2) / 1000;
|
||||
|
||||
bht.param_hdr.type = SCTP_PARAM_COOKIE_PRESERVATIVE;
|
||||
@@ -2250,7 +2250,7 @@ sctp_disposition_t sctp_sf_do_9_1_abort(const struct sctp_endpoint *ep,
|
||||
{
|
||||
struct sctp_chunk *chunk = arg;
|
||||
unsigned len;
|
||||
__u16 error = SCTP_ERROR_NO_ERROR;
|
||||
__be16 error = SCTP_ERROR_NO_ERROR;
|
||||
|
||||
if (!sctp_vtag_verify_either(chunk, asoc))
|
||||
return sctp_sf_pdiscard(ep, asoc, type, arg, commands);
|
||||
@@ -2275,7 +2275,7 @@ sctp_disposition_t sctp_sf_do_9_1_abort(const struct sctp_endpoint *ep,
|
||||
|
||||
sctp_add_cmd_sf(commands, SCTP_CMD_SET_SK_ERR, SCTP_ERROR(ECONNRESET));
|
||||
/* ASSOC_FAILED will DELETE_TCB. */
|
||||
sctp_add_cmd_sf(commands, SCTP_CMD_ASSOC_FAILED, SCTP_U32(error));
|
||||
sctp_add_cmd_sf(commands, SCTP_CMD_ASSOC_FAILED, SCTP_PERR(error));
|
||||
SCTP_INC_STATS(SCTP_MIB_ABORTEDS);
|
||||
SCTP_DEC_STATS(SCTP_MIB_CURRESTAB);
|
||||
|
||||
@@ -2295,7 +2295,7 @@ sctp_disposition_t sctp_sf_cookie_wait_abort(const struct sctp_endpoint *ep,
|
||||
{
|
||||
struct sctp_chunk *chunk = arg;
|
||||
unsigned len;
|
||||
__u16 error = SCTP_ERROR_NO_ERROR;
|
||||
__be16 error = SCTP_ERROR_NO_ERROR;
|
||||
|
||||
if (!sctp_vtag_verify_either(chunk, asoc))
|
||||
return sctp_sf_pdiscard(ep, asoc, type, arg, commands);
|
||||
@@ -2357,7 +2357,7 @@ sctp_disposition_t sctp_sf_cookie_echoed_abort(const struct sctp_endpoint *ep,
|
||||
* This is common code called by several sctp_sf_*_abort() functions above.
|
||||
*/
|
||||
static sctp_disposition_t sctp_stop_t1_and_abort(sctp_cmd_seq_t *commands,
|
||||
__u16 error, int sk_err,
|
||||
__be16 error, int sk_err,
|
||||
const struct sctp_association *asoc,
|
||||
struct sctp_transport *transport)
|
||||
{
|
||||
@@ -2370,7 +2370,7 @@ static sctp_disposition_t sctp_stop_t1_and_abort(sctp_cmd_seq_t *commands,
|
||||
sctp_add_cmd_sf(commands, SCTP_CMD_SET_SK_ERR, SCTP_ERROR(sk_err));
|
||||
/* CMD_INIT_FAILED will DELETE_TCB. */
|
||||
sctp_add_cmd_sf(commands, SCTP_CMD_INIT_FAILED,
|
||||
SCTP_U32(error));
|
||||
SCTP_PERR(error));
|
||||
return SCTP_DISPOSITION_ABORT;
|
||||
}
|
||||
|
||||
@@ -2466,7 +2466,7 @@ sctp_disposition_t sctp_sf_do_9_2_shutdown(const struct sctp_endpoint *ep,
|
||||
* received by the SHUTDOWN sender.
|
||||
*/
|
||||
sctp_add_cmd_sf(commands, SCTP_CMD_PROCESS_CTSN,
|
||||
SCTP_U32(chunk->subh.shutdown_hdr->cum_tsn_ack));
|
||||
SCTP_BE32(chunk->subh.shutdown_hdr->cum_tsn_ack));
|
||||
|
||||
out:
|
||||
return disposition;
|
||||
@@ -2545,6 +2545,7 @@ sctp_disposition_t sctp_sf_do_ecn_cwr(const struct sctp_endpoint *ep,
|
||||
{
|
||||
sctp_cwrhdr_t *cwr;
|
||||
struct sctp_chunk *chunk = arg;
|
||||
u32 lowest_tsn;
|
||||
|
||||
if (!sctp_vtag_verify(chunk, asoc))
|
||||
return sctp_sf_pdiscard(ep, asoc, type, arg, commands);
|
||||
@@ -2556,14 +2557,14 @@ sctp_disposition_t sctp_sf_do_ecn_cwr(const struct sctp_endpoint *ep,
|
||||
cwr = (sctp_cwrhdr_t *) chunk->skb->data;
|
||||
skb_pull(chunk->skb, sizeof(sctp_cwrhdr_t));
|
||||
|
||||
cwr->lowest_tsn = ntohl(cwr->lowest_tsn);
|
||||
lowest_tsn = ntohl(cwr->lowest_tsn);
|
||||
|
||||
/* Does this CWR ack the last sent congestion notification? */
|
||||
if (TSN_lte(asoc->last_ecne_tsn, cwr->lowest_tsn)) {
|
||||
if (TSN_lte(asoc->last_ecne_tsn, lowest_tsn)) {
|
||||
/* Stop sending ECNE. */
|
||||
sctp_add_cmd_sf(commands,
|
||||
SCTP_CMD_ECN_CWR,
|
||||
SCTP_U32(cwr->lowest_tsn));
|
||||
SCTP_U32(lowest_tsn));
|
||||
}
|
||||
return SCTP_DISPOSITION_CONSUME;
|
||||
}
|
||||
@@ -3360,7 +3361,7 @@ sctp_disposition_t sctp_sf_do_asconf_ack(const struct sctp_endpoint *ep,
|
||||
sctp_add_cmd_sf(commands, SCTP_CMD_SET_SK_ERR,
|
||||
SCTP_ERROR(ECONNABORTED));
|
||||
sctp_add_cmd_sf(commands, SCTP_CMD_ASSOC_FAILED,
|
||||
SCTP_U32(SCTP_ERROR_ASCONF_ACK));
|
||||
SCTP_PERR(SCTP_ERROR_ASCONF_ACK));
|
||||
SCTP_INC_STATS(SCTP_MIB_ABORTEDS);
|
||||
SCTP_DEC_STATS(SCTP_MIB_CURRESTAB);
|
||||
return SCTP_DISPOSITION_ABORT;
|
||||
@@ -3388,7 +3389,7 @@ sctp_disposition_t sctp_sf_do_asconf_ack(const struct sctp_endpoint *ep,
|
||||
sctp_add_cmd_sf(commands, SCTP_CMD_SET_SK_ERR,
|
||||
SCTP_ERROR(ECONNABORTED));
|
||||
sctp_add_cmd_sf(commands, SCTP_CMD_ASSOC_FAILED,
|
||||
SCTP_U32(SCTP_ERROR_ASCONF_ACK));
|
||||
SCTP_PERR(SCTP_ERROR_ASCONF_ACK));
|
||||
SCTP_INC_STATS(SCTP_MIB_ABORTEDS);
|
||||
SCTP_DEC_STATS(SCTP_MIB_CURRESTAB);
|
||||
return SCTP_DISPOSITION_ABORT;
|
||||
@@ -3743,12 +3744,12 @@ static sctp_disposition_t sctp_sf_violation_chunklen(
|
||||
sctp_add_cmd_sf(commands, SCTP_CMD_SET_SK_ERR,
|
||||
SCTP_ERROR(ECONNREFUSED));
|
||||
sctp_add_cmd_sf(commands, SCTP_CMD_INIT_FAILED,
|
||||
SCTP_U32(SCTP_ERROR_PROTO_VIOLATION));
|
||||
SCTP_PERR(SCTP_ERROR_PROTO_VIOLATION));
|
||||
} else {
|
||||
sctp_add_cmd_sf(commands, SCTP_CMD_SET_SK_ERR,
|
||||
SCTP_ERROR(ECONNABORTED));
|
||||
sctp_add_cmd_sf(commands, SCTP_CMD_ASSOC_FAILED,
|
||||
SCTP_U32(SCTP_ERROR_PROTO_VIOLATION));
|
||||
SCTP_PERR(SCTP_ERROR_PROTO_VIOLATION));
|
||||
SCTP_DEC_STATS(SCTP_MIB_CURRESTAB);
|
||||
}
|
||||
|
||||
@@ -4062,7 +4063,7 @@ sctp_disposition_t sctp_sf_do_9_1_prm_abort(
|
||||
SCTP_ERROR(ECONNABORTED));
|
||||
/* Delete the established association. */
|
||||
sctp_add_cmd_sf(commands, SCTP_CMD_ASSOC_FAILED,
|
||||
SCTP_U32(SCTP_ERROR_USER_ABORT));
|
||||
SCTP_PERR(SCTP_ERROR_USER_ABORT));
|
||||
|
||||
SCTP_INC_STATS(SCTP_MIB_ABORTEDS);
|
||||
SCTP_DEC_STATS(SCTP_MIB_CURRESTAB);
|
||||
@@ -4199,7 +4200,7 @@ sctp_disposition_t sctp_sf_cookie_wait_prm_abort(
|
||||
SCTP_ERROR(ECONNREFUSED));
|
||||
/* Delete the established association. */
|
||||
sctp_add_cmd_sf(commands, SCTP_CMD_INIT_FAILED,
|
||||
SCTP_U32(SCTP_ERROR_USER_ABORT));
|
||||
SCTP_PERR(SCTP_ERROR_USER_ABORT));
|
||||
|
||||
return retval;
|
||||
}
|
||||
@@ -4571,7 +4572,7 @@ sctp_disposition_t sctp_sf_do_6_3_3_rtx(const struct sctp_endpoint *ep,
|
||||
SCTP_ERROR(ETIMEDOUT));
|
||||
/* CMD_ASSOC_FAILED calls CMD_DELETE_TCB. */
|
||||
sctp_add_cmd_sf(commands, SCTP_CMD_ASSOC_FAILED,
|
||||
SCTP_U32(SCTP_ERROR_NO_ERROR));
|
||||
SCTP_PERR(SCTP_ERROR_NO_ERROR));
|
||||
SCTP_INC_STATS(SCTP_MIB_ABORTEDS);
|
||||
SCTP_DEC_STATS(SCTP_MIB_CURRESTAB);
|
||||
return SCTP_DISPOSITION_DELETE_TCB;
|
||||
@@ -4693,7 +4694,7 @@ sctp_disposition_t sctp_sf_t1_init_timer_expire(const struct sctp_endpoint *ep,
|
||||
sctp_add_cmd_sf(commands, SCTP_CMD_SET_SK_ERR,
|
||||
SCTP_ERROR(ETIMEDOUT));
|
||||
sctp_add_cmd_sf(commands, SCTP_CMD_INIT_FAILED,
|
||||
SCTP_U32(SCTP_ERROR_NO_ERROR));
|
||||
SCTP_PERR(SCTP_ERROR_NO_ERROR));
|
||||
return SCTP_DISPOSITION_DELETE_TCB;
|
||||
}
|
||||
|
||||
@@ -4745,7 +4746,7 @@ sctp_disposition_t sctp_sf_t1_cookie_timer_expire(const struct sctp_endpoint *ep
|
||||
sctp_add_cmd_sf(commands, SCTP_CMD_SET_SK_ERR,
|
||||
SCTP_ERROR(ETIMEDOUT));
|
||||
sctp_add_cmd_sf(commands, SCTP_CMD_INIT_FAILED,
|
||||
SCTP_U32(SCTP_ERROR_NO_ERROR));
|
||||
SCTP_PERR(SCTP_ERROR_NO_ERROR));
|
||||
return SCTP_DISPOSITION_DELETE_TCB;
|
||||
}
|
||||
|
||||
@@ -4781,7 +4782,7 @@ sctp_disposition_t sctp_sf_t2_timer_expire(const struct sctp_endpoint *ep,
|
||||
SCTP_ERROR(ETIMEDOUT));
|
||||
/* Note: CMD_ASSOC_FAILED calls CMD_DELETE_TCB. */
|
||||
sctp_add_cmd_sf(commands, SCTP_CMD_ASSOC_FAILED,
|
||||
SCTP_U32(SCTP_ERROR_NO_ERROR));
|
||||
SCTP_PERR(SCTP_ERROR_NO_ERROR));
|
||||
SCTP_INC_STATS(SCTP_MIB_ABORTEDS);
|
||||
SCTP_DEC_STATS(SCTP_MIB_CURRESTAB);
|
||||
return SCTP_DISPOSITION_DELETE_TCB;
|
||||
@@ -4859,7 +4860,7 @@ sctp_disposition_t sctp_sf_t4_timer_expire(
|
||||
sctp_add_cmd_sf(commands, SCTP_CMD_SET_SK_ERR,
|
||||
SCTP_ERROR(ETIMEDOUT));
|
||||
sctp_add_cmd_sf(commands, SCTP_CMD_ASSOC_FAILED,
|
||||
SCTP_U32(SCTP_ERROR_NO_ERROR));
|
||||
SCTP_PERR(SCTP_ERROR_NO_ERROR));
|
||||
SCTP_INC_STATS(SCTP_MIB_ABORTEDS);
|
||||
SCTP_INC_STATS(SCTP_MIB_CURRESTAB);
|
||||
return SCTP_DISPOSITION_ABORT;
|
||||
@@ -4915,7 +4916,7 @@ sctp_disposition_t sctp_sf_t5_timer_expire(const struct sctp_endpoint *ep,
|
||||
sctp_add_cmd_sf(commands, SCTP_CMD_SET_SK_ERR,
|
||||
SCTP_ERROR(ETIMEDOUT));
|
||||
sctp_add_cmd_sf(commands, SCTP_CMD_ASSOC_FAILED,
|
||||
SCTP_U32(SCTP_ERROR_NO_ERROR));
|
||||
SCTP_PERR(SCTP_ERROR_NO_ERROR));
|
||||
|
||||
return SCTP_DISPOSITION_DELETE_TCB;
|
||||
nomem:
|
||||
@@ -5365,7 +5366,7 @@ static int sctp_eat_data(const struct sctp_association *asoc,
|
||||
sctp_add_cmd_sf(commands, SCTP_CMD_SET_SK_ERR,
|
||||
SCTP_ERROR(ECONNABORTED));
|
||||
sctp_add_cmd_sf(commands, SCTP_CMD_ASSOC_FAILED,
|
||||
SCTP_U32(SCTP_ERROR_NO_DATA));
|
||||
SCTP_PERR(SCTP_ERROR_NO_DATA));
|
||||
SCTP_INC_STATS(SCTP_MIB_ABORTEDS);
|
||||
SCTP_DEC_STATS(SCTP_MIB_CURRESTAB);
|
||||
return SCTP_IERROR_NO_DATA;
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -229,11 +229,9 @@ static struct sctp_transport *sctp_addr_id2transport(struct sock *sk,
|
||||
struct sctp_transport *transport;
|
||||
union sctp_addr *laddr = (union sctp_addr *)addr;
|
||||
|
||||
laddr->v4.sin_port = ntohs(laddr->v4.sin_port);
|
||||
addr_asoc = sctp_endpoint_lookup_assoc(sctp_sk(sk)->ep,
|
||||
(union sctp_addr *)addr,
|
||||
laddr,
|
||||
&transport);
|
||||
laddr->v4.sin_port = htons(laddr->v4.sin_port);
|
||||
|
||||
if (!addr_asoc)
|
||||
return NULL;
|
||||
@@ -368,9 +366,7 @@ SCTP_STATIC int sctp_do_bind(struct sock *sk, union sctp_addr *addr, int len)
|
||||
sctp_write_lock(&ep->base.addr_lock);
|
||||
|
||||
/* Use GFP_ATOMIC since BHs are disabled. */
|
||||
addr->v4.sin_port = ntohs(addr->v4.sin_port);
|
||||
ret = sctp_add_bind_addr(bp, addr, 1, GFP_ATOMIC);
|
||||
addr->v4.sin_port = htons(addr->v4.sin_port);
|
||||
sctp_write_unlock(&ep->base.addr_lock);
|
||||
sctp_local_bh_enable();
|
||||
|
||||
@@ -572,7 +568,6 @@ static int sctp_send_asconf_add_ip(struct sock *sk,
|
||||
addr = (union sctp_addr *)addr_buf;
|
||||
af = sctp_get_af_specific(addr->v4.sin_family);
|
||||
memcpy(&saveaddr, addr, af->sockaddr_len);
|
||||
saveaddr.v4.sin_port = ntohs(saveaddr.v4.sin_port);
|
||||
retval = sctp_add_bind_addr(bp, &saveaddr, 0,
|
||||
GFP_ATOMIC);
|
||||
addr_buf += af->sockaddr_len;
|
||||
@@ -607,9 +602,8 @@ int sctp_bindx_rem(struct sock *sk, struct sockaddr *addrs, int addrcnt)
|
||||
int cnt;
|
||||
struct sctp_bind_addr *bp = &ep->base.bind_addr;
|
||||
int retval = 0;
|
||||
union sctp_addr saveaddr;
|
||||
void *addr_buf;
|
||||
struct sockaddr *sa_addr;
|
||||
union sctp_addr *sa_addr;
|
||||
struct sctp_af *af;
|
||||
|
||||
SCTP_DEBUG_PRINTK("sctp_bindx_rem (sk: %p, addrs: %p, addrcnt: %d)\n",
|
||||
@@ -627,19 +621,13 @@ int sctp_bindx_rem(struct sock *sk, struct sockaddr *addrs, int addrcnt)
|
||||
goto err_bindx_rem;
|
||||
}
|
||||
|
||||
/* The list may contain either IPv4 or IPv6 address;
|
||||
* determine the address length to copy the address to
|
||||
* saveaddr.
|
||||
*/
|
||||
sa_addr = (struct sockaddr *)addr_buf;
|
||||
af = sctp_get_af_specific(sa_addr->sa_family);
|
||||
sa_addr = (union sctp_addr *)addr_buf;
|
||||
af = sctp_get_af_specific(sa_addr->sa.sa_family);
|
||||
if (!af) {
|
||||
retval = -EINVAL;
|
||||
goto err_bindx_rem;
|
||||
}
|
||||
memcpy(&saveaddr, sa_addr, af->sockaddr_len);
|
||||
saveaddr.v4.sin_port = ntohs(saveaddr.v4.sin_port);
|
||||
if (saveaddr.v4.sin_port != bp->port) {
|
||||
if (sa_addr->v4.sin_port != htons(bp->port)) {
|
||||
retval = -EINVAL;
|
||||
goto err_bindx_rem;
|
||||
}
|
||||
@@ -654,7 +642,7 @@ int sctp_bindx_rem(struct sock *sk, struct sockaddr *addrs, int addrcnt)
|
||||
sctp_local_bh_disable();
|
||||
sctp_write_lock(&ep->base.addr_lock);
|
||||
|
||||
retval = sctp_del_bind_addr(bp, &saveaddr);
|
||||
retval = sctp_del_bind_addr(bp, sa_addr);
|
||||
|
||||
sctp_write_unlock(&ep->base.addr_lock);
|
||||
sctp_local_bh_enable();
|
||||
@@ -693,7 +681,6 @@ static int sctp_send_asconf_del_ip(struct sock *sk,
|
||||
struct sctp_bind_addr *bp;
|
||||
struct sctp_chunk *chunk;
|
||||
union sctp_addr *laddr;
|
||||
union sctp_addr saveaddr;
|
||||
void *addr_buf;
|
||||
struct sctp_af *af;
|
||||
struct list_head *pos, *pos1;
|
||||
@@ -773,13 +760,11 @@ static int sctp_send_asconf_del_ip(struct sock *sk,
|
||||
for (i = 0; i < addrcnt; i++) {
|
||||
laddr = (union sctp_addr *)addr_buf;
|
||||
af = sctp_get_af_specific(laddr->v4.sin_family);
|
||||
memcpy(&saveaddr, laddr, af->sockaddr_len);
|
||||
saveaddr.v4.sin_port = ntohs(saveaddr.v4.sin_port);
|
||||
list_for_each(pos1, &bp->address_list) {
|
||||
saddr = list_entry(pos1,
|
||||
struct sctp_sockaddr_entry,
|
||||
list);
|
||||
if (sctp_cmp_addr_exact(&saddr->a, &saveaddr))
|
||||
if (sctp_cmp_addr_exact(&saddr->a, laddr))
|
||||
saddr->use_as_src = 0;
|
||||
}
|
||||
addr_buf += af->sockaddr_len;
|
||||
@@ -979,7 +964,7 @@ static int __sctp_connect(struct sock* sk,
|
||||
int err = 0;
|
||||
int addrcnt = 0;
|
||||
int walk_size = 0;
|
||||
struct sockaddr *sa_addr;
|
||||
union sctp_addr *sa_addr;
|
||||
void *addr_buf;
|
||||
|
||||
sp = sctp_sk(sk);
|
||||
@@ -999,8 +984,8 @@ static int __sctp_connect(struct sock* sk,
|
||||
/* Walk through the addrs buffer and count the number of addresses. */
|
||||
addr_buf = kaddrs;
|
||||
while (walk_size < addrs_size) {
|
||||
sa_addr = (struct sockaddr *)addr_buf;
|
||||
af = sctp_get_af_specific(sa_addr->sa_family);
|
||||
sa_addr = (union sctp_addr *)addr_buf;
|
||||
af = sctp_get_af_specific(sa_addr->sa.sa_family);
|
||||
|
||||
/* If the address family is not supported or if this address
|
||||
* causes the address buffer to overflow return EINVAL.
|
||||
@@ -1010,18 +995,16 @@ static int __sctp_connect(struct sock* sk,
|
||||
goto out_free;
|
||||
}
|
||||
|
||||
err = sctp_verify_addr(sk, (union sctp_addr *)sa_addr,
|
||||
af->sockaddr_len);
|
||||
err = sctp_verify_addr(sk, sa_addr, af->sockaddr_len);
|
||||
if (err)
|
||||
goto out_free;
|
||||
|
||||
memcpy(&to, sa_addr, af->sockaddr_len);
|
||||
to.v4.sin_port = ntohs(to.v4.sin_port);
|
||||
|
||||
/* Check if there already is a matching association on the
|
||||
* endpoint (other than the one created here).
|
||||
*/
|
||||
asoc2 = sctp_endpoint_lookup_assoc(ep, &to, &transport);
|
||||
asoc2 = sctp_endpoint_lookup_assoc(ep, sa_addr, &transport);
|
||||
if (asoc2 && asoc2 != asoc) {
|
||||
if (asoc2->state >= SCTP_STATE_ESTABLISHED)
|
||||
err = -EISCONN;
|
||||
@@ -1034,7 +1017,7 @@ static int __sctp_connect(struct sock* sk,
|
||||
* make sure that there is no peeled-off association matching
|
||||
* the peer address even on another socket.
|
||||
*/
|
||||
if (sctp_endpoint_is_peeled_off(ep, &to)) {
|
||||
if (sctp_endpoint_is_peeled_off(ep, sa_addr)) {
|
||||
err = -EADDRNOTAVAIL;
|
||||
goto out_free;
|
||||
}
|
||||
@@ -1065,7 +1048,7 @@ static int __sctp_connect(struct sock* sk,
|
||||
}
|
||||
}
|
||||
|
||||
scope = sctp_scope(&to);
|
||||
scope = sctp_scope(sa_addr);
|
||||
asoc = sctp_association_new(ep, sk, scope, GFP_KERNEL);
|
||||
if (!asoc) {
|
||||
err = -ENOMEM;
|
||||
@@ -1074,7 +1057,7 @@ static int __sctp_connect(struct sock* sk,
|
||||
}
|
||||
|
||||
/* Prime the peer's transport structures. */
|
||||
transport = sctp_assoc_add_peer(asoc, &to, GFP_KERNEL,
|
||||
transport = sctp_assoc_add_peer(asoc, sa_addr, GFP_KERNEL,
|
||||
SCTP_UNKNOWN);
|
||||
if (!transport) {
|
||||
err = -ENOMEM;
|
||||
@@ -1427,11 +1410,6 @@ SCTP_STATIC int sctp_sendmsg(struct kiocb *iocb, struct sock *sk,
|
||||
if (msg_namelen > sizeof(to))
|
||||
msg_namelen = sizeof(to);
|
||||
memcpy(&to, msg->msg_name, msg_namelen);
|
||||
SCTP_DEBUG_PRINTK("Just memcpy'd. msg_name is "
|
||||
"0x%x:%u.\n",
|
||||
to.v4.sin_addr.s_addr, to.v4.sin_port);
|
||||
|
||||
to.v4.sin_port = ntohs(to.v4.sin_port);
|
||||
msg_name = msg->msg_name;
|
||||
}
|
||||
|
||||
@@ -3217,8 +3195,8 @@ static int sctp_getsockopt_sctp_status(struct sock *sk, int len,
|
||||
status.sstat_outstrms = asoc->c.sinit_num_ostreams;
|
||||
status.sstat_fragmentation_point = asoc->frag_point;
|
||||
status.sstat_primary.spinfo_assoc_id = sctp_assoc2id(transport->asoc);
|
||||
memcpy(&status.sstat_primary.spinfo_address,
|
||||
&(transport->ipaddr), sizeof(union sctp_addr));
|
||||
memcpy(&status.sstat_primary.spinfo_address, &transport->ipaddr,
|
||||
transport->af_specific->sockaddr_len);
|
||||
/* Map ipv4 address into v4-mapped-on-v6 address. */
|
||||
sctp_get_pf_specific(sk->sk_family)->addr_v4map(sctp_sk(sk),
|
||||
(union sctp_addr *)&status.sstat_primary.spinfo_address);
|
||||
@@ -3770,7 +3748,6 @@ static int sctp_getsockopt_peer_addrs_old(struct sock *sk, int len,
|
||||
memcpy(&temp, &from->ipaddr, sizeof(temp));
|
||||
sctp_get_pf_specific(sk->sk_family)->addr_v4map(sp, &temp);
|
||||
addrlen = sctp_get_af_specific(sk->sk_family)->sockaddr_len;
|
||||
temp.v4.sin_port = htons(temp.v4.sin_port);
|
||||
if (copy_to_user(to, &temp, addrlen))
|
||||
return -EFAULT;
|
||||
to += addrlen ;
|
||||
@@ -3821,7 +3798,6 @@ static int sctp_getsockopt_peer_addrs(struct sock *sk, int len,
|
||||
addrlen = sctp_get_af_specific(sk->sk_family)->sockaddr_len;
|
||||
if(space_left < addrlen)
|
||||
return -ENOMEM;
|
||||
temp.v4.sin_port = htons(temp.v4.sin_port);
|
||||
if (copy_to_user(to, &temp, addrlen))
|
||||
return -EFAULT;
|
||||
to += addrlen;
|
||||
@@ -3889,7 +3865,7 @@ static int sctp_getsockopt_local_addrs_num_old(struct sock *sk, int len,
|
||||
struct sctp_sockaddr_entry,
|
||||
list);
|
||||
if ((PF_INET == sk->sk_family) &&
|
||||
(AF_INET6 == addr->a.sa.sa_family))
|
||||
(AF_INET6 == addr->a.sa.sa_family))
|
||||
continue;
|
||||
cnt++;
|
||||
}
|
||||
@@ -3933,7 +3909,6 @@ static int sctp_copy_laddrs_to_user_old(struct sock *sk, __u16 port, int max_add
|
||||
sctp_get_pf_specific(sk->sk_family)->addr_v4map(sctp_sk(sk),
|
||||
&temp);
|
||||
addrlen = sctp_get_af_specific(temp.sa.sa_family)->sockaddr_len;
|
||||
temp.v4.sin_port = htons(port);
|
||||
if (copy_to_user(to, &temp, addrlen)) {
|
||||
sctp_spin_unlock_irqrestore(&sctp_local_addr_lock,
|
||||
flags);
|
||||
@@ -3970,7 +3945,6 @@ static int sctp_copy_laddrs_to_user(struct sock *sk, __u16 port,
|
||||
addrlen = sctp_get_af_specific(temp.sa.sa_family)->sockaddr_len;
|
||||
if(space_left<addrlen)
|
||||
return -ENOMEM;
|
||||
temp.v4.sin_port = htons(port);
|
||||
if (copy_to_user(*to, &temp, addrlen)) {
|
||||
sctp_spin_unlock_irqrestore(&sctp_local_addr_lock,
|
||||
flags);
|
||||
@@ -4055,7 +4029,6 @@ static int sctp_getsockopt_local_addrs_old(struct sock *sk, int len,
|
||||
memcpy(&temp, &addr->a, sizeof(temp));
|
||||
sctp_get_pf_specific(sk->sk_family)->addr_v4map(sp, &temp);
|
||||
addrlen = sctp_get_af_specific(temp.sa.sa_family)->sockaddr_len;
|
||||
temp.v4.sin_port = htons(temp.v4.sin_port);
|
||||
if (copy_to_user(to, &temp, addrlen)) {
|
||||
err = -EFAULT;
|
||||
goto unlock;
|
||||
@@ -4146,7 +4119,6 @@ static int sctp_getsockopt_local_addrs(struct sock *sk, int len,
|
||||
addrlen = sctp_get_af_specific(temp.sa.sa_family)->sockaddr_len;
|
||||
if(space_left < addrlen)
|
||||
return -ENOMEM; /*fixme: right error?*/
|
||||
temp.v4.sin_port = htons(temp.v4.sin_port);
|
||||
if (copy_to_user(to, &temp, addrlen)) {
|
||||
err = -EFAULT;
|
||||
goto unlock;
|
||||
@@ -4194,12 +4166,8 @@ static int sctp_getsockopt_primary_addr(struct sock *sk, int len,
|
||||
if (!asoc->peer.primary_path)
|
||||
return -ENOTCONN;
|
||||
|
||||
asoc->peer.primary_path->ipaddr.v4.sin_port =
|
||||
htons(asoc->peer.primary_path->ipaddr.v4.sin_port);
|
||||
memcpy(&prim.ssp_addr, &asoc->peer.primary_path->ipaddr,
|
||||
sizeof(union sctp_addr));
|
||||
asoc->peer.primary_path->ipaddr.v4.sin_port =
|
||||
ntohs(asoc->peer.primary_path->ipaddr.v4.sin_port);
|
||||
asoc->peer.primary_path->af_specific->sockaddr_len);
|
||||
|
||||
sctp_get_pf_specific(sk->sk_family)->addr_v4map(sp,
|
||||
(union sctp_addr *)&prim.ssp_addr);
|
||||
@@ -4645,9 +4613,7 @@ static long sctp_get_port_local(struct sock *sk, union sctp_addr *addr)
|
||||
unsigned short snum;
|
||||
int ret;
|
||||
|
||||
/* NOTE: Remember to put this back to net order. */
|
||||
addr->v4.sin_port = ntohs(addr->v4.sin_port);
|
||||
snum = addr->v4.sin_port;
|
||||
snum = ntohs(addr->v4.sin_port);
|
||||
|
||||
SCTP_DEBUG_PRINTK("sctp_get_port() begins, snum=%d\n", snum);
|
||||
sctp_local_bh_disable();
|
||||
@@ -4784,7 +4750,6 @@ fail_unlock:
|
||||
|
||||
fail:
|
||||
sctp_local_bh_enable();
|
||||
addr->v4.sin_port = htons(addr->v4.sin_port);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -5083,7 +5048,7 @@ static int sctp_autobind(struct sock *sk)
|
||||
{
|
||||
union sctp_addr autoaddr;
|
||||
struct sctp_af *af;
|
||||
unsigned short port;
|
||||
__be16 port;
|
||||
|
||||
/* Initialize a local sockaddr structure to INADDR_ANY. */
|
||||
af = sctp_sk(sk)->pf->af;
|
||||
|
@@ -401,13 +401,14 @@ __u16 sctp_tsnmap_num_gabs(struct sctp_tsnmap *map)
|
||||
|
||||
/* Refresh the gap ack information. */
|
||||
if (sctp_tsnmap_has_gap(map)) {
|
||||
__u16 start, end;
|
||||
sctp_tsnmap_iter_init(map, &iter);
|
||||
while (sctp_tsnmap_next_gap_ack(map, &iter,
|
||||
&map->gabs[gabs].start,
|
||||
&map->gabs[gabs].end)) {
|
||||
&start,
|
||||
&end)) {
|
||||
|
||||
map->gabs[gabs].start = htons(map->gabs[gabs].start);
|
||||
map->gabs[gabs].end = htons(map->gabs[gabs].end);
|
||||
map->gabs[gabs].start = htons(start);
|
||||
map->gabs[gabs].end = htons(end);
|
||||
gabs++;
|
||||
if (gabs >= SCTP_MAX_GABS)
|
||||
break;
|
||||
|
@@ -351,7 +351,7 @@ struct sctp_ulpevent *sctp_ulpevent_make_remote_error(
|
||||
struct sctp_remote_error *sre;
|
||||
struct sk_buff *skb;
|
||||
sctp_errhdr_t *ch;
|
||||
__u16 cause;
|
||||
__be16 cause;
|
||||
int elen;
|
||||
|
||||
ch = (sctp_errhdr_t *)(chunk->skb->data);
|
||||
|
Reference in New Issue
Block a user