diff options
author | tuexen <tuexen@FreeBSD.org> | 2011-09-14 08:15:21 +0000 |
---|---|---|
committer | tuexen <tuexen@FreeBSD.org> | 2011-09-14 08:15:21 +0000 |
commit | eab7de0c8f2e020f13c85e1f6c4169d552b72d8e (patch) | |
tree | bfbae5e50e0ce4c3b8e5ca776cf5fb38b53e8bf9 /sys/netinet/sctp_pcb.c | |
parent | 8494658150198f84d6b4f924e45deb4918496bb3 (diff) | |
download | FreeBSD-src-eab7de0c8f2e020f13c85e1f6c4169d552b72d8e.zip FreeBSD-src-eab7de0c8f2e020f13c85e1f6c4169d552b72d8e.tar.gz |
Fix the handling of the flowlabel and DSCP value in the SCTP_PEER_ADDR_PARAMS
socket option.
Honor the net.inet6.ip6.auto_flowlabel sysctl setting.
Approved by: re (bz)
MFC after: 1 month.
Diffstat (limited to 'sys/netinet/sctp_pcb.c')
-rw-r--r-- | sys/netinet/sctp_pcb.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/sys/netinet/sctp_pcb.c b/sys/netinet/sctp_pcb.c index 912e348..e397316 100644 --- a/sys/netinet/sctp_pcb.c +++ b/sys/netinet/sctp_pcb.c @@ -49,6 +49,9 @@ __FBSDID("$FreeBSD$"); #include <netinet/sctp_bsd_addr.h> #include <netinet/sctp_dtrace_define.h> #include <netinet/udp.h> +#ifdef INET6 +#include <netinet6/ip6_var.h> +#endif #include <sys/sched.h> #include <sys/smp.h> #include <sys/unistd.h> @@ -2503,6 +2506,11 @@ sctp_inpcb_alloc(struct socket *so, uint32_t vrf_id) /* setup socket pointers */ inp->sctp_socket = so; inp->ip_inp.inp.inp_socket = so; +#ifdef INET6 + if (MODULE_GLOBAL(ip6_auto_flowlabel)) { + inp->ip_inp.inp.inp_flags |= IN6P_AUTOFLOWLABEL; + } +#endif inp->sctp_associd_counter = 1; inp->partial_delivery_point = SCTP_SB_LIMIT_RCV(so) >> SCTP_PARTIAL_DELIVERY_SHIFT; inp->sctp_frag_point = SCTP_DEFAULT_MAXSEGMENT; @@ -2668,6 +2676,10 @@ sctp_inpcb_alloc(struct socket *so, uint32_t vrf_id) */ m->local_hmacs = sctp_default_supported_hmaclist(); m->local_auth_chunks = sctp_alloc_chunklist(); + m->default_dscp = 0; +#ifdef INET6 + m->default_flowlabel = 0; +#endif sctp_auth_set_default_chunks(m->local_auth_chunks); LIST_INIT(&m->shared_keys); /* add default NULL key as key id 0 */ @@ -4015,7 +4027,9 @@ sctp_add_remote_addr(struct sctp_tcb *stcb, struct sockaddr *newaddr, net->port = 0; } net->dscp = stcb->asoc.default_dscp; +#ifdef INET6 net->flowlabel = stcb->asoc.default_flowlabel; +#endif if (sctp_is_feature_on(stcb->sctp_ep, SCTP_PCB_FLAGS_DONOT_HEARTBEAT)) { net->dest_state |= SCTP_ADDR_NOHB; } else { |