From owner-svn-src-all@FreeBSD.ORG Sun Aug 14 20:55:33 2011 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 206A2106564A; Sun, 14 Aug 2011 20:55:33 +0000 (UTC) (envelope-from tuexen@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 0F8B18FC17; Sun, 14 Aug 2011 20:55:33 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p7EKtWZg079415; Sun, 14 Aug 2011 20:55:32 GMT (envelope-from tuexen@svn.freebsd.org) Received: (from tuexen@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p7EKtWNA079408; Sun, 14 Aug 2011 20:55:32 GMT (envelope-from tuexen@svn.freebsd.org) Message-Id: <201108142055.p7EKtWNA079408@svn.freebsd.org> From: Michael Tuexen Date: Sun, 14 Aug 2011 20:55:32 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r224870 - head/sys/netinet X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 14 Aug 2011 20:55:33 -0000 Author: tuexen Date: Sun Aug 14 20:55:32 2011 New Revision: 224870 URL: http://svn.freebsd.org/changeset/base/224870 Log: Add support for the spp_dscp field in the SCTP_PEER_ADDR_PARAMS socket option. Backwards compatibility is provided by still supporting the spp_ipv4_tos field. Approved by: re@ MFC after: 2 months. Modified: head/sys/netinet/sctp_output.c head/sys/netinet/sctp_pcb.c head/sys/netinet/sctp_structs.h head/sys/netinet/sctp_uio.h head/sys/netinet/sctp_usrreq.c head/sys/netinet/sctputil.c Modified: head/sys/netinet/sctp_output.c ============================================================================== --- head/sys/netinet/sctp_output.c Sun Aug 14 20:54:13 2011 (r224869) +++ head/sys/netinet/sctp_output.c Sun Aug 14 20:55:32 2011 (r224870) @@ -3967,7 +3967,7 @@ sctp_lowlevel_chunk_output(struct sctp_i ip->ip_v = IPVERSION; ip->ip_hl = (sizeof(struct ip) >> 2); if (net) { - tos_value = net->tos_flowlabel & 0x000000ff; + tos_value = net->dscp; } else { tos_value = inp->ip_inp.inp.inp_ip_tos; } @@ -4204,7 +4204,7 @@ sctp_lowlevel_chunk_output(struct sctp_i int len; if (net != NULL) { - flowlabel = net->tos_flowlabel; + flowlabel = net->flowlabel; } else { flowlabel = ((struct in6pcb *)inp)->in6p_flowinfo; } Modified: head/sys/netinet/sctp_pcb.c ============================================================================== --- head/sys/netinet/sctp_pcb.c Sun Aug 14 20:54:13 2011 (r224869) +++ head/sys/netinet/sctp_pcb.c Sun Aug 14 20:55:32 2011 (r224870) @@ -4009,20 +4009,13 @@ sctp_add_remote_addr(struct sctp_tcb *st stcb->asoc.numnets++; *(&net->ref_count) = 1; net->cwr_window_tsn = net->last_cwr_tsn = stcb->asoc.sending_seq - 1; - net->tos_flowlabel = 0; if (SCTP_BASE_SYSCTL(sctp_udp_tunneling_for_client_enable)) { net->port = htons(SCTP_BASE_SYSCTL(sctp_udp_tunneling_port)); } else { net->port = 0; } -#ifdef INET - if (newaddr->sa_family == AF_INET) - net->tos_flowlabel = stcb->asoc.default_tos; -#endif -#ifdef INET6 - if (newaddr->sa_family == AF_INET6) - net->tos_flowlabel = stcb->asoc.default_flowlabel; -#endif + net->dscp = stcb->asoc.default_dscp; + net->flowlabel = stcb->asoc.default_flowlabel; if (sctp_is_feature_on(stcb->sctp_ep, SCTP_PCB_FLAGS_DONOT_HEARTBEAT)) { net->dest_state |= SCTP_ADDR_NOHB; } else { Modified: head/sys/netinet/sctp_structs.h ============================================================================== --- head/sys/netinet/sctp_structs.h Sun Aug 14 20:54:13 2011 (r224869) +++ head/sys/netinet/sctp_structs.h Sun Aug 14 20:55:32 2011 (r224870) @@ -321,7 +321,8 @@ struct sctp_nets { uint32_t fast_recovery_tsn; uint32_t heartbeat_random1; uint32_t heartbeat_random2; - uint32_t tos_flowlabel; + uint32_t flowlabel; + uint8_t dscp; struct timeval start_time; /* time when this net was created */ uint32_t marked_retrans;/* number or DATA chunks marked for timer @@ -1137,7 +1138,7 @@ struct sctp_association { uint8_t last_flags_delivered; uint8_t hb_ect_randombit; uint8_t hb_random_idx; - uint8_t default_tos; + uint8_t default_dscp; uint8_t asconf_del_pending; /* asconf delete last addr pending */ /* Modified: head/sys/netinet/sctp_uio.h ============================================================================== --- head/sys/netinet/sctp_uio.h Sun Aug 14 20:54:13 2011 (r224869) +++ head/sys/netinet/sctp_uio.h Sun Aug 14 20:55:32 2011 (r224870) @@ -505,9 +505,11 @@ struct sctp_paddrparams { uint32_t spp_flags; uint32_t spp_ipv6_flowlabel; uint16_t spp_pathmaxrxt; - uint8_t spp_ipv4_tos; + uint8_t spp_dscp; }; +#define spp_ipv4_tos spp_dscp + #define SPP_HB_ENABLE 0x00000001 #define SPP_HB_DISABLE 0x00000002 #define SPP_HB_DEMAND 0x00000004 @@ -515,7 +517,8 @@ struct sctp_paddrparams { #define SPP_PMTUD_DISABLE 0x00000010 #define SPP_HB_TIME_IS_ZERO 0x00000080 #define SPP_IPV6_FLOWLABEL 0x00000100 -#define SPP_IPV4_TOS 0x00000200 +#define SPP_DSCP 0x00000200 +#define SPP_IPV4_TOS SPP_DSCP struct sctp_paddrthlds { sctp_assoc_t spt_assoc_id; Modified: head/sys/netinet/sctp_usrreq.c ============================================================================== --- head/sys/netinet/sctp_usrreq.c Sun Aug 14 20:54:13 2011 (r224869) +++ head/sys/netinet/sctp_usrreq.c Sun Aug 14 20:55:32 2011 (r224870) @@ -2416,13 +2416,13 @@ flags_out: } #ifdef INET if (net->ro._l_addr.sin.sin_family == AF_INET) { - paddrp->spp_ipv4_tos = net->tos_flowlabel & 0x000000fc; - paddrp->spp_flags |= SPP_IPV4_TOS; + paddrp->spp_dscp = net->dscp; + paddrp->spp_flags |= SPP_DSCP; } #endif #ifdef INET6 if (net->ro._l_addr.sin6.sin6_family == AF_INET6) { - paddrp->spp_ipv6_flowlabel = net->tos_flowlabel; + paddrp->spp_ipv6_flowlabel = net->flowlabel; paddrp->spp_flags |= SPP_IPV6_FLOWLABEL; } #endif @@ -2436,8 +2436,8 @@ flags_out: paddrp->spp_pathmaxrxt = stcb->asoc.def_net_failure; paddrp->spp_pathmtu = sctp_get_frag_point(stcb, &stcb->asoc); #ifdef INET - paddrp->spp_ipv4_tos = stcb->asoc.default_tos & 0x000000fc; - paddrp->spp_flags |= SPP_IPV4_TOS; + paddrp->spp_dscp = stcb->asoc.default_dscp & 0x000000fc; + paddrp->spp_flags |= SPP_DSCP; #endif #ifdef INET6 paddrp->spp_ipv6_flowlabel = stcb->asoc.default_flowlabel; @@ -2470,8 +2470,8 @@ flags_out: paddrp->spp_assoc_id = SCTP_FUTURE_ASSOC; /* get inp's default */ #ifdef INET - paddrp->spp_ipv4_tos = inp->ip_inp.inp.inp_ip_tos; - paddrp->spp_flags |= SPP_IPV4_TOS; + paddrp->spp_dscp = inp->ip_inp.inp.inp_ip_tos; + paddrp->spp_flags |= SPP_DSCP; #endif #ifdef INET6 if (inp->sctp_flags & SCTP_PCB_FLAGS_BOUND_V6) { @@ -4626,16 +4626,16 @@ sctp_setopt(struct socket *so, int optna net->failure_threshold = paddrp->spp_pathmaxrxt; } #ifdef INET - if (paddrp->spp_flags & SPP_IPV4_TOS) { + if (paddrp->spp_flags & SPP_DSCP) { if (net->ro._l_addr.sin.sin_family == AF_INET) { - net->tos_flowlabel = paddrp->spp_ipv4_tos & 0x000000fc; + net->dscp = paddrp->spp_dscp & 0xfc; } } #endif #ifdef INET6 if (paddrp->spp_flags & SPP_IPV6_FLOWLABEL) { if (net->ro._l_addr.sin6.sin6_family == AF_INET6) { - net->tos_flowlabel = paddrp->spp_ipv6_flowlabel; + net->flowlabel = paddrp->spp_ipv6_flowlabel & 0x000fffff; } } #endif @@ -4724,27 +4724,18 @@ sctp_setopt(struct socket *so, int optna } } } -#ifdef INET - if (paddrp->spp_flags & SPP_IPV4_TOS) { + if (paddrp->spp_flags & SPP_DSCP) { TAILQ_FOREACH(net, &stcb->asoc.nets, sctp_next) { - if (net->ro._l_addr.sin.sin_family == AF_INET) { - net->tos_flowlabel = paddrp->spp_ipv4_tos & 0x000000fc; - } + net->dscp = paddrp->spp_dscp & 0x000000fc; } - stcb->asoc.default_tos = paddrp->spp_ipv4_tos & 0x000000fc; + stcb->asoc.default_dscp = paddrp->spp_dscp & 0x000000fc; } -#endif -#ifdef INET6 if (paddrp->spp_flags & SPP_IPV6_FLOWLABEL) { TAILQ_FOREACH(net, &stcb->asoc.nets, sctp_next) { - if (net->ro._l_addr.sin6.sin6_family == AF_INET6) { - net->tos_flowlabel = paddrp->spp_ipv6_flowlabel; - } + net->flowlabel = paddrp->spp_ipv6_flowlabel; } stcb->asoc.default_flowlabel = paddrp->spp_ipv6_flowlabel; } -#endif - } SCTP_TCB_UNLOCK(stcb); } else { Modified: head/sys/netinet/sctputil.c ============================================================================== --- head/sys/netinet/sctputil.c Sun Aug 14 20:54:13 2011 (r224869) +++ head/sys/netinet/sctputil.c Sun Aug 14 20:55:32 2011 (r224870) @@ -924,9 +924,9 @@ sctp_init_asoc(struct sctp_inpcb *m, str asoc->sctp_frag_point = m->sctp_frag_point; asoc->sctp_features = m->sctp_features; #ifdef INET - asoc->default_tos = m->ip_inp.inp.inp_ip_tos; + asoc->default_dscp = m->ip_inp.inp.inp_ip_tos; #else - asoc->default_tos = 0; + asoc->default_dscp = 0; #endif #ifdef INET6