Commit 707e45b3 authored by Xin Long's avatar Xin Long Committed by David S. Miller

sctp: use SCTP_FUTURE_ASSOC and add SCTP_CURRENT_ASSOC for SCTP_DEFAULT_SEND_PARAM sockopt

Check with SCTP_ALL_ASSOC instead in sctp_setsockopt_default_send_param and
check with SCTP_FUTURE_ASSOC instead in sctp_getsockopt_default_send_param,
it's compatible with 0.

SCTP_CURRENT_ASSOC is supported for SCTP_DEFAULT_SEND_PARAM in this patch.
Signed-off-by: default avatarXin Long <lucien.xin@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 9c5829e1
...@@ -3009,15 +3009,22 @@ static int sctp_setsockopt_default_send_param(struct sock *sk, ...@@ -3009,15 +3009,22 @@ static int sctp_setsockopt_default_send_param(struct sock *sk,
return -EINVAL; return -EINVAL;
asoc = sctp_id2assoc(sk, info.sinfo_assoc_id); asoc = sctp_id2assoc(sk, info.sinfo_assoc_id);
if (!asoc && info.sinfo_assoc_id && sctp_style(sk, UDP)) if (!asoc && info.sinfo_assoc_id > SCTP_ALL_ASSOC &&
sctp_style(sk, UDP))
return -EINVAL; return -EINVAL;
if (asoc) { if (asoc) {
asoc->default_stream = info.sinfo_stream; asoc->default_stream = info.sinfo_stream;
asoc->default_flags = info.sinfo_flags; asoc->default_flags = info.sinfo_flags;
asoc->default_ppid = info.sinfo_ppid; asoc->default_ppid = info.sinfo_ppid;
asoc->default_context = info.sinfo_context; asoc->default_context = info.sinfo_context;
asoc->default_timetolive = info.sinfo_timetolive; asoc->default_timetolive = info.sinfo_timetolive;
} else {
return 0;
}
if (info.sinfo_assoc_id == SCTP_FUTURE_ASSOC ||
info.sinfo_assoc_id == SCTP_ALL_ASSOC) {
sp->default_stream = info.sinfo_stream; sp->default_stream = info.sinfo_stream;
sp->default_flags = info.sinfo_flags; sp->default_flags = info.sinfo_flags;
sp->default_ppid = info.sinfo_ppid; sp->default_ppid = info.sinfo_ppid;
...@@ -3025,6 +3032,17 @@ static int sctp_setsockopt_default_send_param(struct sock *sk, ...@@ -3025,6 +3032,17 @@ static int sctp_setsockopt_default_send_param(struct sock *sk,
sp->default_timetolive = info.sinfo_timetolive; sp->default_timetolive = info.sinfo_timetolive;
} }
if (info.sinfo_assoc_id == SCTP_CURRENT_ASSOC ||
info.sinfo_assoc_id == SCTP_ALL_ASSOC) {
list_for_each_entry(asoc, &sp->ep->asocs, asocs) {
asoc->default_stream = info.sinfo_stream;
asoc->default_flags = info.sinfo_flags;
asoc->default_ppid = info.sinfo_ppid;
asoc->default_context = info.sinfo_context;
asoc->default_timetolive = info.sinfo_timetolive;
}
}
return 0; return 0;
} }
...@@ -6223,8 +6241,10 @@ static int sctp_getsockopt_default_send_param(struct sock *sk, ...@@ -6223,8 +6241,10 @@ static int sctp_getsockopt_default_send_param(struct sock *sk,
return -EFAULT; return -EFAULT;
asoc = sctp_id2assoc(sk, info.sinfo_assoc_id); asoc = sctp_id2assoc(sk, info.sinfo_assoc_id);
if (!asoc && info.sinfo_assoc_id && sctp_style(sk, UDP)) if (!asoc && info.sinfo_assoc_id != SCTP_FUTURE_ASSOC &&
sctp_style(sk, UDP))
return -EINVAL; return -EINVAL;
if (asoc) { if (asoc) {
info.sinfo_stream = asoc->default_stream; info.sinfo_stream = asoc->default_stream;
info.sinfo_flags = asoc->default_flags; info.sinfo_flags = asoc->default_flags;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment