linux/net/sctp/ulpevent.c
<<
ue="/op/spa14. /op/form4. /opa ue="/o href="../linux+v3.8.2/net/sctp/ulpevent.c">ue="/opimg src="../.static/gfx/right.png" alt=">>">uep/spa14.uepspa1 class="lxr_search">ue="ue="/opinput typue="/opinput typue="/opbutt> typSearch 4. /op/form4. p/spa14.uepspa1 class="lxr_prefs"4. /opa href="+prefs?return=net/sctp/ulpevent.c"ue="/o onclick="return ajax_prefs();">ue="/oPrefs. /op/a>uep/spa14.="/o op/div4.="/o opform acv3.1="ajax+*" method="post" onsubmit="return false;">uepinput typu="/o op/form4.u="/o opdiv class="headingbott>m">o o1p/a>pspa1 class="comment"4/* SCTP kernel implementav3.1p/spa14.o o2p/a>pspa1 class="comment"4 * (C) Copyright IBM Corp. 2001, 2004p/spa14.o o3p/a>pspa1 class="comment"4 * Copyright (c) 1999-2000 Cisco, Inc.p/spa14.o o4p/a>pspa1 class="comment"4 * Copyright (c) 1999-2001 Motorola, Inc.p/spa14.o o5p/a>pspa1 class="comment"4 * Copyright (c) 2001 Intel Corp.p/spa14.o o6p/a>pspa1 class="comment"4 * Copyright (c) 2001 Nokia, Inc.p/spa14.o o7p/a>pspa1 class="comment"4 * Copyright (c) 2001 La Monte H.P. Yarrollp/spa14.o o8p/a>pspa1 class="comment"4 *p/spa14.o o9p/a>pspa1 class="comment"4 * These funcv3.1s manipulate a1 sctp event.o oThe struct ulpevent is usedp/spa14.o > a>pspa1 class="comment"4 * to carry notificav3.1s and data to the ULP (sockets).p/spa14.o 11p/a>pspa1 class="comment"4 *p/spa14.o 12p/a>pspa1 class="comment"4 * This SCTP implementav3.1 is free software;p/spa14.o 13p/a>pspa1 class="comment"4 * you can redistribute it and/or modify it under the terms ofp/spa14.o 14p/a>pspa1 class="comment"4 * the GNU General Public License as published byp/spa14.o 15p/a>pspa1 class="comment"4 * the Free Software Foundav3.1; either vers3.1 2, or (at your v3.1)p/spa14.o 16p/a>pspa1 class="comment"4 * any later vers3.1.p/spa14.o 17p/a>pspa1 class="comment"4 *p/spa14.o 18p/a>pspa1 class="comment"4 * This SCTP implementav3.1 is distributed in the hope that itp/spa14.o 19p/a>pspa1 class="comment"4 * will be useful, but WITHOUT ANY WARRANTY; without even the impliedp/spa14.o 2 > a>pspa1 class="comment"4 * ************************p/spa14.o 21p/a>pspa1 class="comment"4 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.p/spa14.o 22p/a>pspa1 class="comment"4 * See the GNU General Public License for more details.p/spa14.o 23p/a>pspa1 class="comment"4 *p/spa14.o 24p/a>pspa1 class="comment"4 * You should have received a copy of the GNU General Public Licensep/spa14.o 25p/a>pspa1 class="comment"4 * along with GNU CC; see the file COPYING.o If not, write top/spa14.o 26p/a>pspa1 class="comment"4 * the Free Software Foundav3.1, 59 Temple Place - Suite 330,p/spa14.o 27p/a>pspa1 class="comment"4 * Bost.1, MA 02111-1307, USA.p/spa14.o 28p/a>pspa1 class="comment"4 *p/spa14.o 29p/a>pspa1 class="comment"4 * Please send any bug reports or fixes you make to thep/spa14.o 3 > a>pspa1 class="comment"4 * email address(es):p/spa14.o 31p/a>pspa1 class="comment"4 * lksctp developers <lksctp-developers@lists.sourceforge.net>p/spa14.o 32p/a>pspa1 class="comment"4 *p/spa14.o 33p/a>pspa1 class="comment"4 * Or submit a bug report through the following website:p/spa14.o 34p/a>pspa1 class="comment"4 * /o http://www.sf.net/projects/lksctpp/spa14.o 35p/a>pspa1 class="comment"4 *p/spa14.o 36p/a>pspa1 class="comment"4 * Written or modified by:p/spa14.o 37p/a>pspa1 class="comment"4 * J.1 Grimm <jgrimm@us.ibm.com>p/spa14.o 38p/a>pspa1 class="comment"4 * La Monte H.P. Yarroll <piggy@acm.org>p/spa14.o 39p/a>pspa1 class="comment"4 * Ardelle Fa1 <ardelle.fan@intel.com>p/spa14.o 4 > a>pspa1 class="comment"4 * Sridhar Samudrala <sri@us.ibm.com>p/spa14.o 41p/a>pspa1 class="comment"4 *p/spa14.o 42p/a>pspa1 class="comment"4 * Any bugs reported given to us we will try to fix... any fixes shared willp/spa14.o 43p/a>pspa1 class="comment"4 * be incorporated into the next SCTP release.p/spa14.o 44p/a>pspa1 class="comment"4 */p/spa14.o 45p/a>.o 46p/a>#include <linux/slab.hp/a>>.o 47p/a>#include <linux/typ>.o 48p/a>#include <linux/skbuff.hp/a>>.o 49p/a>#include <net/sctp/structs.hp/a>>.o 50p/a>#include <net/sctp/sctp.hp/a>>.o 51p/a>#include <net/sctp/sm.hp/a>>.o 52p/a>.o 53p/a>static voidopa href="+code=sctp_ulpevent_receive_data" class="sref">sctp_ulpevent_receive_datap/a>(struct pa href="+code=sctp_ulpevent" class="sref">sctp_ulpeventp/a> *pa href="+code=event" class="sref">eventp/a>,.o 54p/a> struct pa href="+code=sctp_associav3.1" class="sref">sctp_associav3.1p/a> *pa href="+code=asoc" class="sref">asocp/a>);.o 55p/a>static voidopa href="+code=sctp_ulpevent_release_data" class="sref">sctp_ulpevent_release_datap/a>(struct pa href="+code=sctp_ulpevent" class="sref">sctp_ulpeventp/a> *pa href="+code=event" class="sref">eventp/a>);.o 56p/a>static voidopa href="+code=sctp_ulpevent_release_frag_data" class="sref">sctp_ulpevent_release_frag_datap/a>(struct pa href="+code=sctp_ulpevent" class="sref">sctp_ulpeventp/a> *pa href="+code=event" class="sref">eventp/a>);.o 57p/a>.o 58p/a>.o 59p/a>pspa1 class="comment"4/* Initialize a1 ULP event from a1 given skb. */p/spa14.o 6 > a>pa href="+code=SCTP_STATIC" class="sref">SCTP_STATICp/a> voidopa href="+code=sctp_ulpevent_init" class="sref">sctp_ulpevent_initp/a>(struct pa href="+code=sctp_ulpevent" class="sref">sctp_ulpeventp/a> *pa href="+code=event" class="sref">eventp/a>,.o 61p/a> int pa href="+code=msg_flags" class="sref">msg_flagsp/a>,.o 62p/a> unsigned int pa href="+code=le1" class="sref">le1p/a>).o 63p/a>{.o 64p/a> pa href="+code=memset" class="sref">memsetp/a>(pa href="+code=event" class="sref">eventp/a>, 0, sizeof(struct pa href="+code=sctp_ulpevent" class="sref">sctp_ulpeventp/a>));.o 65p/a> pa href="+code=event" class="sref">eventp/a>->pa href="+code=msg_flags" class="sref">msg_flagsp/a> = pa href="+code=msg_flags" class="sref">msg_flagsp/a>;.o 66p/a> pa href="+code=event" class="sref">eventp/a>->pa href="+code=rmem_le1" class="sref">rmem_le1p/a> = pa href="+code=le1" class="sref">le1p/a>;.o 67p/a>}.o 68p/a>.o 69p/a>pspa1 class="comment"4/* Create a new sctp_ulpevent. */p/spa14.o 7 > a>pa href="+code=SCTP_STATIC" class="sref">SCTP_STATICp/a> struct pa href="+code=sctp_ulpevent" class="sref">sctp_ulpeventp/a> *pa href="+code=sctp_ulpevent_new" class="sref">sctp_ulpevent_newp/a>(int pa href="+code=size" class="sref">sizep/a>, int pa href="+code=msg_flags" class="sref">msg_flagsp/a>,.o 71p/a> pa href="+code=gfp_t" class="sref">gfp_tp/a> pa href="+code=gfp" class="sref">gfpp/a>).o 72p/a>{.o 73p/a> struct pa href="+code=sctp_ulpevent" class="sref">sctp_ulpeventp/a> *pa href="+code=event" class="sref">eventp/a>;.o 74p/a> struct pa href="+code=sk_buff" class="sref">sk_buffp/a> *pa href="+code=skb" class="sref">skbp/a>;.o 75p/a>.o 76p/a> pa href="+code=skb" class="sref">skbp/a> = pa href="+code=alloc_skb" class="sref">alloc_skbp/a>(pa href="+code=size" class="sref">sizep/a>, pa href="+code=gfp" class="sref">gfpp/a>);.o 77p/a> if (!pa href="+code=skb" class="sref">skbp/a>).o 78p/a> goto pa href="+code=fail" class="sref">failp/a>;.o 79p/a>.o 80p/a> pa href="+code=event" class="sref">eventp/a> = pa href="+code=sctp_skb2event" class="sref">sctp_skb2eventp/a>(pa href="+code=skb" class="sref">skbp/a>);.o 81p/a> pa href="+code=sctp_ulpevent_init" class="sref">sctp_ulpevent_initp/a>(pa href="+code=event" class="sref">eventp/a>, pa href="+code=msg_flags" class="sref">msg_flagsp/a>, pa href="+code=skb" class="sref">skbp/a>->pa href="+code=truesize" class="sref">truesizep/a>);.o 82p/a>.o 83p/a> return pa href="+code=event" class="sref">eventp/a>;.o 84p/a>.o 85> a>pa href="+code=fail" class="sref">failp/a>:.o 86p/a> return pa href="+code=NULL" class="sref">NULLp/a>;.o 87p/a>}.o 88p/a>.o 89p/a>pspa1 class="comment"4/* Is this a MSG_NOTIFICATION? */p/spa14.o 90p/a>int pa href="+code=sctp_ulpevent_is_notificav3.1" class="sref">sctp_ulpevent_is_notificav3.1p/a>(const struct pa href="+code=sctp_ulpevent" class="sref">sctp_ulpeventp/a> *pa href="+code=event" class="sref">eventp/a>).o 91p/a>{.o 92p/a> return pa href="+code=MSG_NOTIFICATION" class="sref">MSG_NOTIFICATIONp/a> == (pa href="+code=event" class="sref">eventp/a>->pa href="+code=msg_flags" class="sref">msg_flagsp/a> & pa href="+code=MSG_NOTIFICATION" class="sref">MSG_NOTIFICATIONp/a>);.o 93p/a>}.o 94p/a>.o 95p/a>pspa1 class="comment"4/* Hold the associav3.1 in case the msg_nam< needs read out ofp/spa14.o 96p/a>pspa1 class="comment"4 * the associav3.1.p/spa14.o 97p/a>pspa1 class="comment"4 */p/spa14.o 98p/a>static pa href="+code=inline" class="sref">inlinep/a> voidopa href="+code=sctp_ulpevent_set_owner" class="sref">sctp_ulpevent_set_ownerp/a>(struct pa href="+code=sctp_ulpevent" class="sref">sctp_ulpeventp/a> *pa href="+code=event" class="sref">eventp/a>,.o 99p/a> const struct pa href="+code=sctp_associav3.1" class="sref">sctp_associav3.1p/a> *pa href="+code=asoc" class="sref">asocp/a>).o100p/a>{.o101p/a> struct pa href="+code=sk_buff" class="sref">sk_buffp/a> *pa href="+code=skb" class="sref">skbp/a>;.o102p/a>.o103p/a> pspa1 class="comment"4/* Cast away the const, as we are just wanting top/spa14.o104p/a>pspa1 class="comment"4 * bump the reference count.p/spa14.o105p/a>pspa1 class="comment"4 */p/spa14.o106p/a> pa href="+code=sctp_associav3.1_hold" class="sref">sctp_associav3.1_holdp/a>((struct pa href="+code=sctp_associav3.1" class="sref">sctp_associav3.1p/a> *)pa href="+code=asoc" class="sref">asocp/a>);.o107p/a> pa href="+code=skb" class="sref">skbp/a> = pa href="+code=sctp_event2skb" class="sref">sctp_event2skbp/a>(pa href="+code=event" class="sref">eventp/a>);.o108p/a> pa href="+code=event" class="sref">eventp/a>->pa href="+code=asoc" class="sref">asocp/a> = (struct pa href="+code=sctp_associav3.1" class="sref">sctp_associav3.1p/a> *)pa href="+code=asoc" class="sref">asocp/a>;.o109p/a> pa href="+code=atomic_add" class="sref">atomic_addp/a>(pa href="+code=event" class="sref">eventp/a>->pa href="+code=rmem_le1" class="sref">rmem_le1p/a>, &pa href="+code=event" class="sref">eventp/a>->pa href="+code=asoc" class="sref">asocp/a>->pa href="+code=rmem_alloc" class="sref">rmem_allocp/a>);.o110p/a> pa href="+code=sctp_skb_set_owner_r" class="sref">sctp_skb_set_owner_rp/a>(pa href="+code=skb" class="sref">skbp/a>, pa href="+code=asoc" class="sref">asocp/a>->pa href="+code=base" class="sref">basep/a>.pa href="+code=sk" class="sref">skp/a>);.o111p/a>}.o112p/a>.o113p/a>pspa1 class="comment"4/* A simple destructor to give up the reference to the associav3.1. */p/spa14.o114p/a>static pa href="+code=inline" class="sref">inlinep/a> voidopa href="+code=sctp_ulpevent_release_owner" class="sref">sctp_ulpevent_release_ownerp/a>(struct pa href="+code=sctp_ulpevent" class="sref">sctp_ulpeventp/a> *pa href="+code=event" class="sref">eventp/a>).o115p/a>{.o116p/a> struct pa href="+code=sctp_associav3.1" class="sref">sctp_associav3.1p/a> *pa href="+code=asoc" class="sref">asocp/a> = pa href="+code=event" class="sref">eventp/a>->pa href="+code=asoc" class="sref">asocp/a>;.o117p/a>.o118p/a> pa href="+code=atomic_sub" class="sref">atomic_subp/a>(pa href="+code=event" class="sref">eventp/a>->pa href="+code=rmem_le1" class="sref">rmem_le1p/a>, &pa href="+code=asoc" class="sref">asocp/a>->pa href="+code=rmem_alloc" class="sref">rmem_allocp/a>);.o119p/a> pa href="+code=sctp_associav3.1_put" class="sref">sctp_associav3.1_putp/a>(pa href="+code=asoc" class="sref">asocp/a>);.o12 > a>}.o121p/a>.o122p/a>pspa1 class="comment"4/* Create and initialize a1 SCTP_ASSOC_CHANGE event.p/spa14.o123p/a>pspa1 class="comment"4 *p/spa14.o124p/a>pspa1 class="comment"4 * 5.3.1.1 SCTP_ASSOC_CHANGEp/spa14.o125p/a>pspa1 class="comment"4 *p/spa14.o126p/a>pspa1 class="comment"4 * Communicav3.1 notificav3.1s inform the ULP that a1 SCTP associav3.1p/spa14.o127p/a>pspa1 class="comment"4 * has either begun or ended.oThe identifier for a new associav3.1 isp/spa14.o128p/a>pspa1 class="comment"4 * provided by this notificav3.1.p/spa14.o129p/a>pspa1 class="comment"4 *p/spa14.o13 > a>pspa1 class="comment"4 * Note:oThere is no field checking here.o If a field is unused it will bep/spa14.o131p/a>pspa1 class="comment"4 * zero'd out.p/spa14.o132p/a>pspa1 class="comment"4 */p/spa14.o133p/a>struct pa href="+code=sctp_ulpevent" class="sref">sctp_ulpeventp/a> *pa href="+code=sctp_ulpevent_make_assoc_change" class="sref">sctp_ulpevent_make_assoc_changep/a>(.o134p/a> const struct pa href="+code=sctp_associav3.1" class="sref">sctp_associav3.1p/a> *pa href="+code=asoc" class="sref">asocp/a>,.o135p/a> pa href="+code=__u16" class="sref">__u16p/a> pa href="+code=flags" class="sref">flagsp/a>, pa href="+code=__u16" class="sref">__u16p/a> pa href="+code=state" class="sref">statep/a>, pa href="+code=__u16" class="sref">__u16p/a> pa href="+code=error" class="sref">errorp/a>, pa href="+code=__u16" class="sref">__u16p/a> pa href="+code=outbound" class="sref">outboundp/a>,.o136p/a> pa href="+code=__u16" class="sref">__u16p/a> pa href="+code=inbound" class="sref">inboundp/a>, struct pa href="+code=sctp_chunk" class="sref">sctp_chunkp/a> *pa href="+code=chunk" class="sref">chunkp/a>, pa href="+code=gfp_t" class="sref">gfp_tp/a> pa href="+code=gfp" class="sref">gfpp/a>).o137p/a>{.o138p/a> struct pa href="+code=sctp_ulpevent" class="sref">sctp_ulpeventp/a> *pa href="+code=event" class="sref">eventp/a>;.o139p/a> struct pa href="+code=sctp_assoc_change" class="sref">sctp_assoc_changep/a> *pa href="+code=sac" class="sref">sacp/a>;.o140p/a> struct pa href="+code=sk_buff" class="sref">sk_buffp/a> *pa href="+code=skb" class="sref">skbp/a>;.o141p/a>.o142p/a> pspa1 class="comment"4/* If the lower layer passed in the chunk, it will bep/spa14.o143p/a>pspa1 class="comment"4 * a1 ABORT, so we need to include it in the sac_info.p/spa14.o144p/a>pspa1 class="comment"4 */p/spa14.o145p/a> if (pa href="+code=chunk" class="sref">chunkp/a>) {.o146p/a> pspa1 class="comment"4/* Copy the chunk data to a new skb and reserve enoughp/spa14.o147p/a>pspa1 class="comment"4 * head room to use as notificav3.1.p/spa14.o148p/a>pspa1 class="comment"4 */p/spa14.o149p/a> pa href="+code=skb" class="sref">skbp/a> = pa href="+code=skb_copy_expa1d" class="sref">skb_copy_expa1dp/a>(pa href="+code=chunk" class="sref">chunkp/a>->pa href="+code=skb" class="sref">skbp/a>,.o150p/a> sizeof(struct pa href="+code=sctp_assoc_change" class="sref">sctp_assoc_changep/a>), 0, pa href="+code=gfp" class="sref">gfpp/a>);.o151p/a>.o152p/a> if (!pa href="+code=skb" class="sref">skbp/a>).o153p/a> goto pa href="+code=fail" class="sref">failp/a>;.o154p/a>.o155p/a> pspa1 class="comment"4/* Embed the event fields inside the cloned skb. */p/spa14.o156p/a> pa href="+code=event" class="sref">eventp/a> = pa href="+code=sctp_skb2event" class="sref">sctp_skb2eventp/a>(pa href="+code=skb" class="sref">skbp/a>);.o157p/a> pa href="+code=sctp_ulpevent_init" class="sref">sctp_ulpevent_initp/a>(pa href="+code=event" class="sref">eventp/a>, pa href="+code=MSG_NOTIFICATION" class="sref">MSG_NOTIFICATIONp/a>, pa href="+code=skb" class="sref">skbp/a>->pa href="+code=truesize" class="sref">truesizep/a>);.o158p/a>.o159p/a> pspa1 class="comment"4/* Include the notificav3.1 structure */p/spa14.o160p/a> pa href="+code=sac" class="sref">sacp/a> = (struct pa href="+code=sctp_assoc_change" class="sref">sctp_assoc_changep/a> *).o161p/a> pa href="+code=skb_push" class="sref">skb_pushp/a>(pa href="+code=skb" class="sref">skbp/a>, sizeof(struct pa href="+code=sctp_assoc_change" class="sref">sctp_assoc_changep/a>));.o162p/a>.o163p/a> pspa1 class="comment"4/* Trim the buffer to the right length. */p/spa14.o164p/a> pa href="+code=skb_trim" class="sref">skb_trimp/a>(pa href="+code=skb" class="sref">skbp/a>, sizeof(struct pa href="+code=sctp_assoc_change" class="sref">sctp_assoc_changep/a>) +.o165p/a> pa href="+code=ntohs" class="sref">ntohsp/a>(pa href="+code=chunk" class="sref">chunkp/a>->pa href="+code=chunk_hdr" class="sref">chunk_hdrp/a>->pa href="+code=length" class="sref">lengthp/a>) -.o166p/a> sizeof(pa href="+code=sctp_chunkhdr_t" class="sref">sctp_chunkhdr_tp/a>));.o167p/a> } else {.o168p/a> pa href="+code=event" class="sref">eventp/a> = pa href="+code=sctp_ulpevent_new" class="sref">sctp_ulpevent_newp/a>(sizeof(struct pa href="+code=sctp_assoc_change" class="sref">sctp_assoc_changep/a>),.o169p/a> pa href="+code=MSG_NOTIFICATION" class="sref">MSG_NOTIFICATIONp/a>, pa href="+code=gfp" class="sref">gfpp/a>);.o170p/a> if (!pa href="+code=event" class="sref">eventp/a>).o171p/a> goto pa href="+code=fail" class="sref">failp/a>;.o172p/a>.o173p/a> pa href="+code=skb" class="sref">skbp/a> = pa href="+code=sctp_event2skb" class="sref">sctp_event2skbp/a>(pa href="+code=event" class="sref">eventp/a>);.o174p/a> pa href="+code=sac" class="sref">sacp/a> = (struct pa href="+code=sctp_assoc_change" class="sref">sctp_assoc_changep/a> *) pa href="+code=skb_put" class="sref">skb_putp/a>(pa href="+code=skb" class="sref">skbp/a>,.o175p/a> sizeof(struct pa href="+code=sctp_assoc_change" class="sref">sctp_assoc_changep/a>));.o176p/a> }.o177p/a>.o178p/a> pspa1 class="comment"4/* Socket Extens3.1s for SCTPp/spa14.o179p/a>pspa1 class="comment"4 * 5.3.1.1 SCTP_ASSOC_CHANGEp/spa14.o18 > a>pspa1 class="comment"4 *p/spa14.o181p/a>pspa1 class="comment"4 * sac_typ<:p/spa14.o182p/a>pspa1 class="comment"4 * It should be SCTP_ASSOC_CHANGE.p/spa14.o183p/a>pspa1 class="comment"4 */p/spa14.o184p/a> pa href="+code=sac" class="sref">sacp/a>->pa href="+code=sac_typ<" class="sref">sac_typ

= pa href="+code=SCTP_ASSOC_CHANGE" class="sref">SCTP_ASSOC_CHANGEp/a>;.o185p/a>.o186p/a> pspa1 class="comment"4/* Socket Extens3.1s for SCTPp/spa14.o187p/a>pspa1 class="comment"4 * 5.3.1.1 SCTP_ASSOC_CHANGEp/spa14.o188p/a>pspa1 class="comment"4 *p/spa14.o189p/a>pspa1 class="comment"4 * sac_state: 32 bits (signed integer)p/spa14.o19 > a>pspa1 class="comment"4 * This field holds one of a number of o191p/a>pspa1 class="comment"4 * event that happened to the associav3.1.p/spa14.o192p/a>pspa1 class="comment"4 */p/spa14.o193p/a> pa href="+code=sac" class="sref">sacp/a>->pa href="+code=sac_state" class="sref">sac_statep/a> = pa href="+code=state" class="sref">statep/a>;.o194p/a>.o195p/a> pspa1 class="comment"4/* Socket Extens3.1s for SCTPp/spa14.o196p/a>pspa1 class="comment"4 * 5.3.1.1 SCTP_ASSOC_CHANGEp/spa14.o197p/a>pspa1 class="comment"4 *p/spa14.o198p/a>pspa1 class="comment"4 * sac_flags: 16 bits (unsigned integer)p/spa14.o199p/a>pspa1 class="comment"4 * Currently unused.p/spa14.o20 > a>pspa1 class="comment"4 */p/spa14.o201p/a> pa href="+code=sac" class="sref">sacp/a>->pa href="+code=sac_flags" class="sref">sac_flagsp/a> = 0;.o202p/a>.o203p/a> pspa1 class="comment"4/* Socket Extens3.1s for SCTPp/spa14.o204p/a>pspa1 class="comment"4 * 5.3.1.1 SCTP_ASSOC_CHANGEp/spa14.o205p/a>pspa1 class="comment"4 *p/spa14.o206p/a>pspa1 class="comment"4 * sac_length: sizeof (__u32)p/spa14.o207p/a>pspa1 class="comment"4 * This field is the total length of the notificav3.1 data, includingp/spa14.o208p/a>pspa1 class="comment"4 * the notificav3.1 header.p/spa14.o209p/a>pspa1 class="comment"4 */p/spa14.o210p/a> pa href="+code=sac" class="sref">sacp/a>->pa href="+code=sac_length" class="sref">sac_lengthp/a> = pa href="+code=skb" class="sref">skbp/a>->pa href="+code=le1" class="sref">le1p/a>;.o211p/a>.o212p/a> pspa1 class="comment"4/* Socket Extens3.1s for SCTPp/spa14.o213p/a>pspa1 class="comment"4 * 5.3.1.1 SCTP_ASSOC_CHANGEp/spa14.o214p/a>pspa1 class="comment"4 *p/spa14.o215p/a>pspa1 class="comment"4 * sac_error: 32 bits (signed integer)p/spa14.o216p/a>pspa1 class="comment"4 *p/spa14.o217p/a>pspa1 class="comment"4 * If the state was reached due to a error condiv3.1 (e.g.p/spa14.o218p/a>pspa1 class="comment"4 * COMMUNICATION_LOST) any relevant error informav3.1 is available inp/spa14.o219p/a>pspa1 class="comment"4 * this field. This corresponds to the protocol error codes defined inp/spa14.o22 > a>pspa1 class="comment"4 * [SCTP].p/spa14.o221p/a>pspa1 class="comment"4 */p/spa14.o222p/a> pa href="+code=sac" class="sref">sacp/a>->pa href="+code=sac_error" class="sref">sac_errorp/a> = pa href="+code=error" class="sref">errorp/a>;.o223p/a>.o224p/a> pspa1 class="comment"4/* Socket Extens3.1s for SCTPp/spa14.o225p/a>pspa1 class="comment"4 * 5.3.1.1 SCTP_ASSOC_CHANGEp/spa14.o226p/a>pspa1 class="comment"4 *p/spa14.o227p/a>pspa1 class="comment"4 * sac_outbound_streams: 16 bits (unsigned integer)p/spa14.o228p/a>pspa1 class="comment"4 * sac_inbound_streams: 16 bits (unsigned integer)p/spa14.o229p/a>pspa1 class="comment"4 *p/spa14.o23 > a>pspa1 class="comment"4 * The maximum number of streams allowed in each direcv3.1 arep/spa14.o231p/a>pspa1 class="comment"4 * available in sac_outbound_streams and sac_inbound streams.p/spa14.o232p/a>pspa1 class="comment"4 */p/spa14.o233p/a> pa href="+code=sac" class="sref">sacp/a>->pa href="+code=sac_outbound_streams" class="sref">sac_outbound_streamsp/a> = pa href="+code=outbound" class="sref">outboundp/a>;.o234p/a> pa href="+code=sac" class="sref">sacp/a>->pa href="+code=sac_inbound_streams" class="sref">sac_inbound_streamsp/a> = pa href="+code=inbound" class="sref">inboundp/a>;.o235p/a>.o236p/a> pspa1 class="comment"4/* Socket Extens3.1s for SCTPp/spa14.o237p/a>pspa1 class="comment"4 * 5.3.1.1 SCTP_ASSOC_CHANGEp/spa14.o238p/a>pspa1 class="comment"4 *p/spa14.o239p/a>pspa1 class="comment"4 * sac_assoc_id: sizeof (sctp_assoc_t)p/spa14.o24 > a>pspa1 class="comment"4 *p/spa14.o241p/a>pspa1 class="comment"4 * The associav3.1 id field, holds the identifier for the associav3.1.p/spa14.o242p/a>pspa1 class="comment"4 * All notificav3.1s for a given associav3.1 have the same associav3.1p/spa14.o243p/a>pspa1 class="comment"4 * identifier. For TCP style socket, this field is ignored.p/spa14.o244p/a>pspa1 class="comment"4 */p/spa14.o245p/a> pa href="+code=sctp_ulpevent_set_owner" class="sref">sctp_ulpevent_set_ownerp/a>(pa href="+code=event" class="sref">eventp/a>, pa href="+code=asoc" class="sref">asocp/a>);.o246p/a> pa href="+code=sac" class="sref">sacp/a>->pa href="+code=sac_assoc_id" class="sref">sac_assoc_idp/a> = pa href="+code=sctp_assoc2id" class="sref">sctp_assoc2idp/a>(pa href="+code=asoc" class="sref">asocp/a>);.o247p/a>.o248p/a> return pa href="+code=event" class="sref">eventp/a>;.o249p/a>.o25 > a>pa href="+code=fail" class="sref">failp/a>:.o251p/a> return pa href="+code=NULL" class="sref">NULLp/a>;.o252p/a>}.o253p/a>.o254p/a>pspa1 class="comment"4/* Create and initialize a1 SCTP_PEER_ADDR_CHANGE event.p/spa14.o255p/a>pspa1 class="comment"4 *p/spa14.o256p/a>pspa1 class="comment"4 * Socket Extens3.1s for SCTP - draft-01p/spa14.o257p/a>pspa1 class="comment"4 * 5.3.1.2 SCTP_PEER_ADDR_CHANGEp/spa14.o258p/a>pspa1 class="comment"4 *p/spa14.o259p/a>pspa1 class="comment"4 * When a destinav3.1 address on a multi-homed peer encounters a changep/spa14.o26 > a>pspa1 class="comment"4 * an interface details event is sent.p/spa14.o261p/a>pspa1 class="comment"4 */p/spa14.o262p/a>struct pa href="+code=sctp_ulpevent" class="sref">sctp_ulpeventp/a> *pa href="+code=sctp_ulpevent_make_peer_addr_change" class="sref">sctp_ulpevent_make_peer_addr_changep/a>(.o263p/a> const struct pa href="+code=sctp_associav3.1" class="sref">sctp_associav3.1p/a> *pa href="+code=asoc" class="sref">asocp/a>,.o264p/a> const struct pa href="+code=sockaddr_storage" class="sref">sockaddr_storagep/a> *pa href="+code=aaddr" class="sref">aaddrp/a>,.o265p/a> int pa href="+code=flags" class="sref">flagsp/a>, int pa href="+code=state" class="sref">statep/a>, int pa href="+code=error" class="sref">errorp/a>, pa href="+code=gfp_t" class="sref">gfp_tp/a> pa href="+code=gfp" class="sref">gfpp/a>).o266p/a>{.o267p/a> struct pa href="+code=sctp_ulpevent" class="sref">sctp_ulpeventp/a> *pa href="+code=event" class="sref">eventp/a>;.o268p/a> struct pa href="+code=sctp_paddr_change" class="sref">sctp_paddr_changep/a> *pa href="+code=spc" class="sref">spcp/a>;.o269p/a> struct pa href="+code=sk_buff" class="sref">sk_buffp/a> *pa href="+code=skb" class="sref">skbp/a>;.o270p/a>.o271p/a> pa href="+code=event" class="sref">eventp/a> = pa href="+code=sctp_ulpevent_new" class="sref">sctp_ulpevent_newp/a>(sizeof(struct pa href="+code=sctp_paddr_change" class="sref">sctp_paddr_changep/a>),.o272p/a> pa href="+code=MSG_NOTIFICATION" class="sref">MSG_NOTIFICATIONp/a>, pa href="+code=gfp" class="sref">gfpp/a>);.o273p/a> if (!pa href="+code=event" class="sref">eventp/a>).o274p/a> goto pa href="+code=fail" class="sref">failp/a>;.o275p/a>.o276p/a> pa href="+code=skb" class="sref">skbp/a> = pa href="+code=sctp_event2skb" class="sref">sctp_event2skbp/a>(pa href="+code=event" class="sref">eventp/a>);.o277p/a> pa href="+code=spc" class="sref">spcp/a> = (struct pa href="+code=sctp_paddr_change" class="sref">sctp_paddr_changep/a> *).o278p/a> pa href="+code=skb_put" class="sref">skb_putp/a>(pa href="+code=skb" class="sref">skbp/a>, sizeof(struct pa href="+code=sctp_paddr_change" class="sref">sctp_paddr_changep/a>));.o279p/a>.o280p/a> pspa1 class="comment"4/* Sockets API Extens3.1s for SCTPp/spa14.o281p/a>pspa1 class="comment"4 * Secv3.1 5.3.1.2 SCTP_PEER_ADDR_CHANGEp/spa14.o282p/a>pspa1 class="comment"4 *p/spa14.o283p/a>pspa1 class="comment"4 * spc_typ<:p/spa14.o284p/a>pspa1 class="comment"4 *p/spa14.o285p/a>pspa1 class="comment"4 * It should be SCTP_PEER_ADDR_CHANGE.p/spa14.o286p/a>pspa1 class="comment"4 */p/spa14.o287p/a> pa href="+code=spc" class="sref">spcp/a>->pa href="+code=spc_typ<" class="sref">spc_typ

= pa href="+code=SCTP_PEER_ADDR_CHANGE" class="sref">SCTP_PEER_ADDR_CHANGEp/a>;.o288p/a>.o289p/a> pspa1 class="comment"4/* Sockets API Extens3.1s for SCTPp/spa14.o29 > a>pspa1 class="comment"4 * Secv3.1 5.3.1.2 SCTP_PEER_ADDR_CHANGEp/spa14.o291p/a>pspa1 class="comment"4 *p/spa14.o292p/a>pspa1 class="comment"4 * spc_length: sizeof (__u32)p/spa14.o293p/a>pspa1 class="comment"4 *p/spa14.o294p/a>pspa1 class="comment"4 * This field is the total length of the notificav3.1 data, includingp/spa14.o295p/a>pspa1 class="comment"4 * the notificav3.1 header.p/spa14.o296p/a>pspa1 class="comment"4 */p/spa14.o297p/a> pa href="+code=spc" class="sref">spcp/a>->pa href="+code=spc_length" class="sref">spc_lengthp/a> = sizeof(struct pa href="+code=sctp_paddr_change" class="sref">sctp_paddr_changep/a>);.o298p/a>.o299p/a> pspa1 class="comment"4/* Sockets API Extens3.1s for SCTPp/spa14.o30 > a>pspa1 class="comment"4 * Secv3.1 5.3.1.2 SCTP_PEER_ADDR_CHANGEp/spa14.o301p/a>pspa1 class="comment"4 *p/spa14.o302p/a>pspa1 class="comment"4 * spc_flags: 16 bits (unsigned integer)p/spa14.o303p/a>pspa1 class="comment"4 * Currently unused.p/spa14.o304p/a>pspa1 class="comment"4 */p/spa14.o305p/a> pa href="+code=spc" class="sref">spcp/a>->pa href="+code=spc_flags" class="sref">spc_flagsp/a> = 0;.o306p/a>.o307p/a> pspa1 class="comment"4/* Sockets API Extens3.1s for SCTPp/spa14.o308p/a>pspa1 class="comment"4 * Secv3.1 5.3.1.2 SCTP_PEER_ADDR_CHANGEp/spa14.o309p/a>pspa1 class="comment"4 *p/spa14.o31 > a>pspa1 class="comment"4 * spc_state: 32 bits (signed integer)p/spa14.o311p/a>pspa1 class="comment"4 *p/spa14.o312p/a>pspa1 class="comment"4 * This field holds one of a number of o313p/a>pspa1 class="comment"4 * event that happened to the address.p/spa14.o314p/a>pspa1 class="comment"4 */p/spa14.o315p/a> pa href="+code=spc" class="sref">spcp/a>->pa href="+code=spc_state" class="sref">spc_statep/a> = pa href="+code=state" class="sref">statep/a>;.o316p/a>.o317p/a> pspa1 class="comment"4/* Sockets API Extens3.1s for SCTPp/spa14.o318p/a>pspa1 class="comment"4 * Secv3.1 5.3.1.2 SCTP_PEER_ADDR_CHANGEp/spa14.o319p/a>pspa1 class="comment"4 *p/spa14.o32 > a>pspa1 class="comment"4 * spc_error: 32 bits (signed integer)p/spa14.o321p/a>pspa1 class="comment"4 *p/spa14.o322p/a>pspa1 class="comment"4 * If the state was reached due to any error condiv3.1 (e.g.p/spa14.o323p/a>pspa1 class="comment"4 * ADDRESS_UNREACHABLE) any relevant error informav3.1 is available inp/spa14.o324p/a>pspa1 class="comment"4 * this field.p/spa14.o325p/a>pspa1 class="comment"4 */p/spa14.o326p/a> pa href="+code=spc" class="sref">spcp/a>->pa href="+code=spc_error" class="sref">spc_errorp/a> = pa href="+code=error" class="sref">errorp/a>;.o327p/a>.o328p/a> pspa1 class="comment"4/* Socket Extens3.1s for SCTPp/spa14.o329p/a>pspa1 class="comment"4 * 5.3.1.1 SCTP_ASSOC_CHANGEp/spa14.o33 > a>pspa1 class="comment"4 *p/spa14.o331p/a>pspa1 class="comment"4 * spc_assoc_id: sizeof (sctp_assoc_t)p/spa14.o332p/a>pspa1 class="comment"4 *p/spa14.o333p/a>pspa1 class="comment"4 * The associav3.1 id field, holds the identifier for the associav3.1.p/spa14.o334p/a>pspa1 class="comment"4 * All notificav3.1s for a given associav3.1 have the same associav3.1p/spa14.o335p/a>pspa1 class="comment"4 * identifier. For TCP style socket, this field is ignored.p/spa14.o336p/a>pspa1 class="comment"4 */p/spa14.o337p/a> pa href="+code=sctp_ulpevent_set_owner" class="sref">sctp_ulpevent_set_ownerp/a>(pa href="+code=event" class="sref">eventp/a>, pa href="+code=asoc" class="sref">asocp/a>);.o338p/a> pa href="+code=spc" class="sref">spcp/a>->pa href="+code=spc_assoc_id" class="sref">spc_assoc_idp/a> = pa href="+code=sctp_assoc2id" class="sref">sctp_assoc2idp/a>(pa href="+code=asoc" class="sref">asocp/a>);.o339p/a>.o340p/a> pspa1 class="comment"4/* Sockets API Extens3.1s for SCTPp/spa14.o341p/a>pspa1 class="comment"4 * Secv3.1 5.3.1.2 SCTP_PEER_ADDR_CHANGEp/spa14.o342p/a>pspa1 class="comment"4 *p/spa14.o343p/a>pspa1 class="comment"4 * spc_aaddr: sizeof (struct sockaddr_storage)p/spa14.o344p/a>pspa1 class="comment"4 *p/spa14.o345p/a>pspa1 class="comment"4 * The affecved address field, holds the remote peer's address that isp/spa14.o346p/a>pspa1 class="comment"4 * encountering the change of state.p/spa14.o347p/a>pspa1 class="comment"4 */p/spa14.o348p/a> pa href="+code=memcpy" class="sref">memcpyp/a>(&pa href="+code=spc" class="sref">spcp/a>->pa href="+code=spc_aaddr" class="sref">spc_aaddrp/a>, pa href="+code=aaddr" class="sref">aaddrp/a>, sizeof(struct pa href="+code=sockaddr_storage" class="sref">sockaddr_storagep/a>));.o349p/a>.o350p/a> pspa1 class="comment"4/* Map ipv4 address into v4-mapped-on-v6 address. */p/spa14.o351p/a> pa href="+code=sctp_get_pf_specific" class="sref">sctp_get_pf_specificp/a>(pa href="+code=asoc" class="sref">asocp/a>->pa href="+code=base" class="sref">basep/a>.pa href="+code=sk" class="sref">skp/a>->pa href="+code=sk_family" class="sref">sk_familyp/a>)->pa href="+code=addr_v4map" class="sref">addr_v4mapp/a>(.o352p/a> pa href="+code=sctp_sk" class="sref">sctp_skp/a>(pa href="+code=asoc" class="sref">asocp/a>->pa href="+code=base" class="sref">basep/a>.pa href="+code=sk" class="sref">skp/a>),.o353p/a> (un3.1 pa href="+code=sctp_addr" class="sref">sctp_addrp/a> *)&pa href="+code=spc" class="sref">spcp/a>->pa href="+code=spc_aaddr" class="sref">spc_aaddrp/a>);.o354p/a>.o355p/a> return pa href="+code=event" class="sref">eventp/a>;.o356p/a>.o357p/a>pa href="+code=fail" class="sref">failp/a>:.o358p/a> return pa href="+code=NULL" class="sref">NULLp/a>;.o359p/a>}.o360p/a>.o361p/a>pspa1 class="comment"4/* Create and initialize a1 SCTP_REMOTE_ERROR notificav3.1.p/spa14.o362p/a>pspa1 class="comment"4 *p/spa14.o363p/a>pspa1 class="comment"4 * Note: This assumo364p/a>pspa1 class="comment"4 * operav3.1 error payload.p/spa14.o365p/a>pspa1 class="comment"4 *p/spa14.o366p/a>pspa1 class="comment"4 * Socket Extens3.1s for SCTP - draft-01p/spa14.o367p/a>pspa1 class="comment"4 * 5.3.1.3 SCTP_REMOTE_ERRORp/spa14.o368p/a>pspa1 class="comment"4 *p/spa14.o369p/a>pspa1 class="comment"4 * A remote peer may send a1 Operav3.1al Error mo37 > a>pspa1 class="comment"4 * This mo371p/a>pspa1 class="comment"4 * associav3.1. The entire error TLV as it appears on the wire isp/spa14.o372p/a>pspa1 class="comment"4 * included in a SCTP_REMOTE_ERROR event. Please refer to the SCTPp/spa14.o373p/a>pspa1 class="comment"4 * specificav3.1 [SCTP] and any extens3.1s for a list of possiblep/spa14.o374p/a>pspa1 class="comment"4 * error formavs.p/spa14.o375p/a>pspa1 class="comment"4 */p/spa14.o376p/a>struct pa href="+code=sctp_ulpevent" class="sref">sctp_ulpeventp/a> *pa href="+code=sctp_ulpevent_make_remote_error" class="sref">sctp_ulpevent_make_remote_errorp/a>(.o377p/a> const struct pa href="+code=sctp_associav3.1" class="sref">sctp_associav3.1p/a> *pa href="+code=asoc" class="sref">asocp/a>, struct pa href="+code=sctp_chunk" class="sref">sctp_chunkp/a> *pa href="+code=chunk" class="sref">chunkp/a>,.o378p/a> pa href="+code=__u16" class="sref">__u16p/a> pa href="+code=flags" class="sref">flagsp/a>, pa href="+code=gfp_t" class="sref">gfp_tp/a> pa href="+code=gfp" class="sref">gfpp/a>).o379p/a>{.o380p/a> struct pa href="+code=sctp_ulpevent" class="sref">sctp_ulpeventp/a> *pa href="+code=event" class="sref">eventp/a>;.o381p/a> struct pa href="+code=sctp_remote_error" class="sref">sctp_remote_errorp/a> *pa href="+code=sre" class="sref">srep/a>;.o382p/a> struct pa href="+code=sk_buff" class="sref">sk_buffp/a> *pa href="+code=skb" class="sref">skbp/a>;.o383p/a> pa href="+code=sctp_errhdr_t" class="sref">sctp_errhdr_tp/a> *pa href="+code=ch" class="sref">chp/a>;.o384p/a> pa href="+code=__be16" class="sref">__be16p/a> pa href="+code=cause" class="sref">causep/a>;.o385p/a> int pa href="+code=ele1" class="sref">ele1p/a>;.o386p/a>.o387p/a> pa href="+code=ch" class="sref">chp/a> = (pa href="+code=sctp_errhdr_t" class="sref">sctp_errhdr_tp/a> *)(pa href="+code=chunk" class="sref">chunkp/a>->pa href="+code=skb" class="sref">skbp/a>->pa href="+code=data" class="sref">datap/a>);.o388p/a> pa href="+code=cause" class="sref">causep/a> = pa href="+code=ch" class="sref">chp/a>->pa href="+code=cause" class="sref">causep/a>;.o389p/a> pa href="+code=ele1" class="sref">ele1p/a> = pa href="+code=WORD_ROUND" class="sref">WORD_ROUNDp/a>(pa href="+code=ntohs" class="sref">ntohsp/a>(pa href="+code=ch" class="sref">chp/a>->pa href="+code=length" class="sref">lengthp/a>)) - sizeof(pa href="+code=sctp_errhdr_t" class="sref">sctp_errhdr_tp/a>);.o390p/a>.o391p/a> pspa1 class="comment"4/* Pull off the ERROR header. */p/spa14.o392p/a> pa href="+code=skb_pull" class="sref">skb_pullp/a>(pa href="+code=chunk" class="sref">chunkp/a>->pa href="+code=skb" class="sref">skbp/a>, sizeof(pa href="+code=sctp_errhdr_t" class="sref">sctp_errhdr_tp/a>));.o393p/a>.o394p/a> pspa1 class="comment"4/* Copy the skb to a new skb with room for us to prependp/spa14.o395p/a>pspa1 class="comment"4 * notificav3.1 with.p/spa14.o396p/a>pspa1 class="comment"4 */p/spa14.o397p/a> pa href="+code=skb" class="sref">skbp/a> = pa href="+code=skb_copy_expa1d" class="sref">skb_copy_expa1dp/a>(pa href="+code=chunk" class="sref">chunkp/a>->pa href="+code=skb" class="sref">skbp/a>, sizeof(struct pa href="+code=sctp_remote_error" class="sref">sctp_remote_errorp/a>),.o398p/a> 0, pa href="+code=gfp" class="sref">gfpp/a>);.o399p/a>.o400p/a> pspa1 class="comment"4/* Pull off the rest of the cause TLV from the chunk. */p/spa14.o401p/a> pa href="+code=skb_pull" class="sref">skb_pullp/a>(pa href="+code=chunk" class="sref">chunkp/a>->pa href="+code=skb" class="sref">skbp/a>, pa href="+code=ele1" class="sref">ele1p/a>);.o402p/a> if (!pa href="+code=skb" class="sref">skbp/a>).o403p/a> goto pa href="+code=fail" class="sref">failp/a>;.o404p/a>.o405p/a> pspa1 class="comment"4/* Embed the event fields inside the cloned skb. */p/spa14.o406p/a> pa href="+code=event" class="sref">eventp/a> = pa href="+code=sctp_skb2event" class="sref">sctp_skb2eventp/a>(pa href="+code=skb" class="sref">skbp/a>);.o407p/a> pa href="+code=sctp_ulpevent_init" class="sref">sctp_ulpevent_initp/a>(pa href="+code=event" class="sref">eventp/a>, pa href="+code=MSG_NOTIFICATION" class="sref">MSG_NOTIFICATIONp/a>, pa href="+code=skb" class="sref">skbp/a>->pa href="+code=truesize" class="sref">truesizep/a>);.o408p/a>.o409p/a> pa href="+code=sre" class="sref">srep/a> = (struct pa href="+code=sctp_remote_error" class="sref">sctp_remote_errorp/a> *).o410p/a> pa href="+code=skb_push" class="sref">skb_pushp/a>(pa href="+code=skb" class="sref">skbp/a>, sizeof(struct pa href="+code=sctp_remote_error" class="sref">sctp_remote_errorp/a>));.o411p/a>.o412p/a> pspa1 class="comment"4/* Trim the buffer to the right length. */p/spa14.o413p/a> pa href="+code=skb_trim" class="sref">skb_trimp/a>(pa href="+code=skb" class="sref">skbp/a>, sizeof(struct pa href="+code=sctp_remote_error" class="sref">sctp_remote_errorp/a>) + pa href="+code=ele1" class="sref">ele1p/a>);.o414p/a>.o415p/a> pspa1 class="comment"4/* Socket Extens3.1s for SCTPp/spa14.o416p/a>pspa1 class="comment"4 * 5.3.1.3 SCTP_REMOTE_ERRORp/spa14.o417p/a>pspa1 class="comment"4 *p/spa14.o418p/a>pspa1 class="comment"4 * sre_typ<:p/spa14.o419p/a>pspa1 class="comment"4 * It should be SCTP_REMOTE_ERROR.p/spa14.o42 > a>pspa1 class="comment"4 */p/spa14.o421p/a> pa href="+code=sre" class="sref">srep/a>->pa href="+code=sre_typ<" class="sref">sre_typ

= pa href="+code=SCTP_REMOTE_ERROR" class="sref">SCTP_REMOTE_ERRORp/a>;.o422p/a>.o423p/a> pspa1 class="comment"4/*p/spa14.o424p/a>pspa1 class="comment"4 * Socket Extens3.1s for SCTPp/spa14.o425p/a>pspa1 class="comment"4 * 5.3.1.3 SCTP_REMOTE_ERRORp/spa14.o426p/a>pspa1 class="comment"4 *p/spa14.o427p/a>pspa1 class="comment"4 * sre_flags: 16 bits (unsigned integer)p/spa14.o428p/a>pspa1 class="comment"4 * Currently unused.p/spa14.o429p/a>pspa1 class="comment"4 */p/spa14.o430p/a> pa href="+code=sre" class="sref">srep/a>->pa href="+code=sre_flags" class="sref">sre_flagsp/a> = 0;.o431p/a>.o432p/a> pspa1 class="comment"4/* Socket Extens3.1s for SCTPp/spa14.o433p/a>pspa1 class="comment"4 * 5.3.1.3 SCTP_REMOTE_ERRORp/spa14.o434p/a>pspa1 class="comment"4 *p/spa14.o435p/a>pspa1 class="comment"4 * sre_length: sizeof (__u32)p/spa14.o436p/a>pspa1 class="comment"4 *p/spa14.o437p/a>pspa1 class="comment"4 * This field is the total length of the notificav3.1 data,p/spa14.o438p/a>pspa1 class="comment"4 * including the notificav3.1 header.p/spa14.o439p/a>pspa1 class="comment"4 */p/spa14.o440p/a> pa href="+code=sre" class="sref">srep/a>->pa href="+code=sre_length" class="sref">sre_lengthp/a> = pa href="+code=skb" class="sref">skbp/a>->pa href="+code=le1" class="sref">le1p/a>;.o441p/a>.o442p/a> pspa1 class="comment"4/* Socket Extens3.1s for SCTPp/spa14.o443p/a>pspa1 class="comment"4 * 5.3.1.3 SCTP_REMOTE_ERRORp/spa14.o444p/a>pspa1 class="comment"4 *p/spa14.o445p/a>pspa1 class="comment"4 * sre_error: 16 bits (unsigned integer)p/spa14.o446p/a>pspa1 class="comment"4 * This < represents one of the Operav3.1al Error causes defined inp/spa14.o447p/a>pspa1 class="comment"4 * the SCTP specificav3.1, in network byte order.p/spa14.o448p/a>pspa1 class="comment"4 */p/spa14.o449p/a> pa href="+code=sre" class="sref">srep/a>->pa href="+code=sre_error" class="sref">sre_errorp/a> = pa href="+code=cause" class="sref">causep/a>;.o450p/a>.o451p/a> pspa1 class="comment"4/* Socket Extens3.1s for SCTPp/spa14.o452p/a>pspa1 class="comment"4 * 5.3.1.3 SCTP_REMOTE_ERRORp/spa14.o453p/a>pspa1 class="comment"4 *p/spa14.o454p/a>pspa1 class="comment"4 * sre_assoc_id: sizeof (sctp_assoc_t)p/spa14.o455p/a>pspa1 class="comment"4 *p/spa14.o456p/a>pspa1 class="comment"4 * The associav3.1 id field, holds the identifier for the associav3.1.p/spa14.o457p/a>pspa1 class="comment"4 * All notificav3.1s for a given associav3.1 have the same associav3.1p/spa14.o458p/a>pspa1 class="comment"4 * identifier. For TCP style socket, this field is ignored.p/spa14.o459p/a>pspa1 class="comment"4 */p/spa14.o460p/a> pa href="+code=sctp_ulpevent_set_owner" class="sref">sctp_ulpevent_set_ownerp/a>(pa href="+code=event" class="sref">eventp/a>, pa href="+code=asoc" class="sref">asocp/a>);.o461p/a> pa href="+code=sre" class="sref">srep/a>->pa href="+code=sre_assoc_id" class="sref">sre_assoc_idp/a> = pa href="+code=sctp_assoc2id" class="sref">sctp_assoc2idp/a>(pa href="+code=asoc" class="sref">asocp/a>);.o462p/a>.o463p/a> return pa href="+code=event" class="sref">eventp/a>;.o464p/a>.o465p/a>pa href="+code=fail" class="sref">failp/a>:.o466p/a> return pa href="+code=NULL" class="sref">NULLp/a>;.o467p/a>}.o468p/a>.o469p/a>pspa1 class="comment"4/* Create and initialize a SCTP_SEND_FAILED notificav3.1.p/spa14.o47 > a>pspa1 class="comment"4 *p/spa14.o471p/a>pspa1 class="comment"4 * Socket Extens3.1s for SCTP - draft-01p/spa14.o472p/a>pspa1 class="comment"4 * 5.3.1.4 SCTP_SEND_FAILEDp/spa14.o473p/a>pspa1 class="comment"4 */p/spa14.o474p/a>struct pa href="+code=sctp_ulpevent" class="sref">sctp_ulpeventp/a> *pa href="+code=sctp_ulpevent_make_send_failed" class="sref">sctp_ulpevent_make_send_failedp/a>(.o475p/a> const struct pa href="+code=sctp_associav3.1" class="sref">sctp_associav3.1p/a> *pa href="+code=asoc" class="sref">asocp/a>, struct pa href="+code=sctp_chunk" class="sref">sctp_chunkp/a> *pa href="+code=chunk" class="sref">chunkp/a>,.o476p/a> pa href="+code=__u16" class="sref">__u16p/a> pa href="+code=flags" class="sref">flagsp/a>, pa href="+code=__u32" class="sref">__u32p/a> pa href="+code=error" class="sref">errorp/a>, pa href="+code=gfp_t" class="sref">gfp_tp/a> pa href="+code=gfp" class="sref">gfpp/a>).o477p/a>{.o478p/a> struct pa href="+code=sctp_ulpevent" class="sref">sctp_ulpeventp/a> *pa href="+code=event" class="sref">eventp/a>;.o479p/a> struct pa href="+code=sctp_send_failed" class="sref">sctp_send_failedp/a> *pa href="+code=ssf" class="sref">ssfp/a>;.o480p/a> struct pa href="+code=sk_buff" class="sref">sk_buffp/a> *pa href="+code=skb" class="sref">skbp/a>;.o481p/a>.o482p/a> pspa1 class="comment"4/* Pull off any padding. */p/spa14.o483p/a> int pa href="+code=le1" class="sref">le1p/a> = pa href="+code=ntohs" class="sref">ntohsp/a>(pa href="+code=chunk" class="sref">chunkp/a>->pa href="+code=chunk_hdr" class="sref">chunk_hdrp/a>->pa href="+code=le1gth" class="sref">lengthp/a>);.o484p/a>.o485p/a> pspa1 class="comment"4/* Make skb with more room so we can prepend notificav3.1. */p/spa14.o486p/a> pa href="+code=skb" class="sref">skbp/a> = pa href="+code=skb_copy_expa1d" class="sref">skb_copy_expa1dp/a>(pa href="+code=chunk" class="sref">chunkp/a>->pa href="+code=skb" class="sref">skbp/a>,.o487p/a> sizeof(struct pa href="+code=sctp_send_failed" class="sref">sctp_send_failedp/a>), pspa1 class="comment"4/* headroom */p/spa14.o488p/a> 0, pspa1 class="comment"4/* tailroom */p/spa14.o489p/a> pa href="+code=gfp" class="sref">gfpp/a>);.o490p/a> if (!pa href="+code=skb" class="sref">skbp/a>).o491p/a> goto pa href="+code=fail" class="sref">failp/a>;.o492p/a>.o493p/a> pspa1 class="comment"4/* Pull off the common chunk header and DATA header. */p/spa14.o494p/a> pa href="+code=skb_pull" class="sref">skb_pullp/a>(pa href="+code=skb" class="sref">skbp/a>, sizeof(struct pa href="+code=sctp_data_chunk" class="sref">sctp_data_chunkp/a>));.o495p/a> pa href="+code=le1" class="sref">le1p/a> -= sizeof(struct pa href="+code=sctp_data_chunk" class="sref">sctp_data_chunkp/a>);.o496p/a>.o497p/a> pspa1 class="comment"4/* Embed the event fields inside the cloned skb. */p/spa14.o498p/a> pa href="+code=event" class="sref">eventp/a> = pa href="+code=sctp_skb2event" class="sref">sctp_skb2eventp/a>(pa href="+code=skb" class="sref">skbp/a>);.o499p/a> pa href="+code=sctp_ulpevent_init" class="sref">sctp_ulpevent_initp/a>(pa href="+code=event" class="sref">eventp/a>, pa href="+code=MSG_NOTIFICATION" class="sref">MSG_NOTIFICATIONp/a>, pa href="+code=skb" class="sref">skbp/a>->pa href="+code=truesize" class="sref">truesizep/a>);.o500p/a>.o501p/a> pa href="+code=ssf" class="sref">ssfp/a> = (struct pa href="+code=sctp_send_failed" class="sref">sctp_send_failedp/a> *).o502p/a> pa href="+code=skb_push" class="sref">skb_pushp/a>(pa href="+code=skb" class="sref">skbp/a>, sizeof(struct pa href="+code=sctp_send_failed" class="sref">sctp_send_failedp/a>));.o503p/a>.o504p/a> pspa1 class="comment"4/* Socket Extens3.1s for SCTPp/spa14.o505p/a>pspa1 class="comment"4 * 5.3.1.4 SCTP_SEND_FAILEDp/spa14.o506p/a>pspa1 class="comment"4 *p/spa14.o507p/a>pspa1 class="comment"4 * ssf_typ<:p/spa14.o508p/a>pspa1 class="comment"4 * It should be SCTP_SEND_FAILED.p/spa14.o509p/a>pspa1 class="comment"4 */p/spa14.o510p/a> pa href="+code=ssf" class="sref">ssfp/a>->pa href="+code=ssf_typ<" class="sref">ssf_typ

= pa href="+code=SCTP_SEND_FAILED" class="sref">SCTP_SEND_FAILEDp/a>;.o511p/a>.o512p/a> pspa1 class="comment"4/* Socket Extens3.1s for SCTPp/spa14.o513p/a>pspa1 class="comment"4 * 5.3.1.4 SCTP_SEND_FAILEDp/spa14.o514p/a>pspa1 class="comment"4 *p/spa14.o515p/a>pspa1 class="comment"4 * ssf_flags: 16 bits (unsigned integer)p/spa14.o516p/a>pspa1 class="comment"4 * The flag < will take one of the following o517p/a>pspa1 class="comment"4 *p/spa14.o518p/a>pspa1 class="comment"4 * SCTP_DATA_UNSENT - Indicaves that the data was never put .1p/spa14.o519p/a>pspa1 class="comment"4 * the wire.p/spa14.o52 > a>pspa1 class="comment"4 *p/spa14.o521p/a>pspa1 class="comment"4 * SCTP_DATA_SENT - Indicaves that the data was put .1 the wire.p/spa14.o522p/a>pspa1 class="comment"4 * Note that this does not neco523p/a>pspa1 class="comment"4 * data was (or was not) succo524p/a>pspa1 class="comment"4 */p/spa14.o525p/a> pa href="+code=ssf" class="sref">ssfp/a>->pa href="+code=ssf_flags" class="sref">ssf_flagsp/a> = pa href="+code=flags" class="sref">flagsp/a>;.o526p/a>.o527p/a> pspa1 class="comment"4/* Socket Extens3.1s for SCTPp/spa14.o528p/a>pspa1 class="comment"4 * 5.3.1.4 SCTP_SEND_FAILEDp/spa14.o529p/a>pspa1 class="comment"4 *p/spa14.o53 > a>pspa1 class="comment"4 * ssf_length: sizeof (__u32)p/spa14.o531p/a>pspa1 class="comment"4 * This field is the total length of the notificav3.1 data, includingp/spa14.o532p/a>pspa1 class="comment"4 * the notificav3.1 header.p/spa14.o533p/a>pspa1 class="comment"4 */p/spa14.o534p/a> pa href="+code=ssf" class="sref">ssfp/a>->pa href="+code=ssf_length" class="sref">ssf_lengthp/a> = sizeof(struct pa href="+code=sctp_send_failed" class="sref">sctp_send_failedp/a>) + pa href="+code=le1" class="sref">le1p/a>;.o535p/a> pa href="+code=skb_trim" class="sref">skb_trimp/a>(pa href="+code=skb" class="sref">skbp/a>, pa href="+code=ssf" class="sref">ssfp/a>->pa href="+code=ssf_length" class="sref">ssf_lengthp/a>);.o536p/a>.o537p/a> pspa1 class="comment"4/* Socket Extens3.1s for SCTPp/spa14.o538p/a>pspa1 class="comment"4 * 5.3.1.4 SCTP_SEND_FAILEDp/spa14.o539p/a>pspa1 class="comment"4 *p/spa14.o54 > a>pspa1 class="comment"4 * ssf_error: 16 bits (unsigned integer)p/spa14.o541p/a>pspa1 class="comment"4 * This < represents the reas.1 why the send failed, and if set,p/spa14.o542p/a>pspa1 class="comment"4 * will be a SCTP protocol error code as defined in [SCTP] secv3.1p/spa14.o543p/a>pspa1 class="comment"4 * 3.3.10.p/spa14.o544p/a>pspa1 class="comment"4 */p/spa14.o545p/a> pa href="+code=ssf" class="sref">ssfp/a>->pa href="+code=ssf_error" class="sref">ssf_errorp/a> = pa href="+code=error" class="sref">errorp/a>;.o546p/a>.o547p/a> pspa1 class="comment"4/* Socket Extens3.1s for SCTPp/spa14.o548p/a>pspa1 class="comment"4 * 5.3.1.4 SCTP_SEND_FAILEDp/spa14.o549p/a>pspa1 class="comment"4 *p/spa14.o55 > a>pspa1 class="comment"4 * ssf_info: sizeof (struct sctp_sndrcvinfo)p/spa14.o551p/a>pspa1 class="comment"4 * The origi1al send informav3.1 associaved with the undeliveredp/spa14.o552p/a>pspa1 class="comment"4 * mo553p/a>pspa1 class="comment"4 */p/spa14.o554p/a> pa href="+code=memcpy" class="sref">memcpyp/a>(&pa href="+code=ssf" class="sref">ssfp/a>->pa href="+code=ssf_info" class="sref">ssf_infop/a>, &pa href="+code=chunk" class="sref">chunkp/a>->pa href="+code=sinfo" class="sref">sinfop/a>, sizeof(struct pa href="+code=sctp_sndrcvinfo" class="sref">sctp_sndrcvinfop/a>));.o555p/a>.o556p/a> pspa1 class="comment"4/* Per TSVWG discuss3.1 with Randy. Allow the applicav3.1 top/spa14.o557p/a>pspa1 class="comment"4 * reassemble a fragmented mo558p/a>pspa1 class="comment"4 */p/spa14.o559p/a> pa href="+code=ssf" class="sref">ssfp/a>->pa href="+code=ssf_info" class="sref">ssf_infop/a>.pa href="+code=sinfo_flags" class="sref">sinfo_flagsp/a> = pa href="+code=chunk" class="sref">chunkp/a>->pa href="+code=chunk_hdr" class="sref">chunk_hdrp/a>->pa href="+code=flags" class="sref">flagsp/a>;.o560p/a>.o561p/a> pspa1 class="comment"4/* Socket Extens3.1s for SCTPp/spa14.o562p/a>pspa1 class="comment"4 * 5.3.1.4 SCTP_SEND_FAILEDp/spa14.o563p/a>pspa1 class="comment"4 *p/spa14.o564p/a>pspa1 class="comment"4 * ssf_assoc_id: sizeof (sctp_assoc_t)p/spa14.o565p/a>pspa1 class="comment"4 * The associav3.1 id field, sf_assoc_id, holds the identifier for thep/spa14.o566p/a>pspa1 class="comment"4 * associav3.1. All notificav3.1s for a given associav3.1 have thep/spa14.o567p/a>pspa1 class="comment"4 * same associav3.1 identifier. For TCP style socket, this field isp/spa14.o568p/a>pspa1 class="comment"4 * ignored.p/spa14.o569p/a>pspa1 class="comment"4 */p/spa14.o570p/a> pa href="+code=sctp_ulpevent_set_owner" class="sref">sctp_ulpevent_set_ownerp/a>(pa href="+code=event" class="sref">eventp/a>, pa href="+code=asoc" class="sref">asocp/a>);.o571p/a> pa href="+code=ssf" class="sref">ssfp/a>->pa href="+code=ssf_assoc_id" class="sref">ssf_assoc_idp/a> = pa href="+code=sctp_assoc2id" class="sref">sctp_assoc2idp/a>(pa href="+code=asoc" class="sref">asocp/a>);.o572p/a> return pa href="+code=event" class="sref">eventp/a>;.o573p/a>.o574p/a>pa href="+code=fail" class="sref">failp/a>:.o575p/a> return pa href="+code=NULL" class="sref">NULLp/a>;.o576p/a>}.o577p/a>.o578p/a>pspa1 class="comment"4/* Create and initialize a SCTP_SHUTDOWN_EVENT notificav3.1.p/spa14.o579p/a>pspa1 class="comment"4 *p/spa14.o58 > a>pspa1 class="comment"4 * Socket Extens3.1s for SCTP - draft-01p/spa14.o581p/a>pspa1 class="comment"4 * 5.3.1.5 SCTP_SHUTDOWN_EVENTp/spa14.o582p/a>pspa1 class="comment"4 */p/spa14.o583p/a>struct pa href="+code=sctp_ulpevent" class="sref">sctp_ulpeventp/a> *pa href="+code=sctp_ulpevent_make_shutdown_event" class="sref">sctp_ulpevent_make_shutdown_eventp/a>(.o584p/a> const struct pa href="+code=sctp_associav3.1" class="sref">sctp_associav3.1p/a> *pa href="+code=asoc" class="sref">asocp/a>,.o585p/a> pa href="+code=__u16" class="sref">__u16p/a> pa href="+code=flags" class="sref">flagsp/a>, pa href="+code=gfp_t" class="sref">gfp_tp/a> pa href="+code=gfp" class="sref">gfpp/a>).o586p/a>{.o587p/a> struct pa href="+code=sctp_ulpevent" class="sref">sctp_ulpeventp/a> *pa href="+code=event" class="sref">eventp/a>;.o588p/a> struct pa href="+code=sctp_shutdown_event" class="sref">sctp_shutdown_eventp/a> *pa href="+code=ss<" class="sref">ssep/a>;.o589p/a> struct pa href="+code=sk_buff" class="sref">sk_buffp/a> *pa href="+code=skb" class="sref">skbp/a>;.o590p/a>.o591p/a> pa href="+code=event" class="sref">eventp/a> = pa href="+code=sctp_ulpevent_new" class="sref">sctp_ulpevent_newp/a>(sizeof(struct pa href="+code=sctp_shutdown_event" class="sref">sctp_shutdown_eventp/a>),.o592p/a> pa href="+code=MSG_NOTIFICATION" class="sref">MSG_NOTIFICATIONp/a>, pa href="+code=gfp" class="sref">gfpp/a>);.o593p/a> if (!pa href="+code=event" class="sref">eventp/a>).o594p/a> goto pa href="+code=fail" class="sref">failp/a>;.o595p/a>.o596p/a> pa href="+code=skb" class="sref">skbp/a> = pa href="+code=sctp_event2skb" class="sref">sctp_event2skbp/a>(pa href="+code=event" class="sref">eventp/a>);.o597p/a> pa href="+code=ss<" class="sref">ssep/a> = (struct pa href="+code=sctp_shutdown_event" class="sref">sctp_shutdown_eventp/a> *).o598p/a> pa href="+code=skb_put" class="sref">skb_putp/a>(pa href="+code=skb" class="sref">skbp/a>, sizeof(struct pa href="+code=sctp_shutdown_event" class="sref">sctp_shutdown_eventp/a>));.o599p/a>.o600p/a> pspa1 class="comment"4/* Socket Extens3.1s for SCTPp/spa14.o601p/a>pspa1 class="comment"4 * 5.3.1.5 SCTP_SHUTDOWN_EVENTp/spa14.o602p/a>pspa1 class="comment"4 *p/spa14.o603p/a>pspa1 class="comment"4 * sse_typ

o604p/a>pspa1 class="comment"4 * It should be SCTP_SHUTDOWN_EVENTp/spa14.o605p/a>pspa1 class="comment"4 */p/spa14.o606p/a> pa href="+code=ss<" class="sref">ssep/a>->pa href="+code=sse_typ<" class="sref">sse_typ

= pa href="+code=SCTP_SHUTDOWN_EVENT" class="sref">SCTP_SHUTDOWN_EVENTp/a>;.o607p/a>.o608p/a> pspa1 class="comment"4/* Socket Extens3.1s for SCTPp/spa14.o609p/a>pspa1 class="comment"4 * 5.3.1.5 SCTP_SHUTDOWN_EVENTp/spa14.o61 > a>pspa1 class="comment"4 *p/spa14.o611p/a>pspa1 class="comment"4 * sse_flags: 16 bits (unsigned integer)p/spa14.o612p/a>pspa1 class="comment"4 * Currently unused.p/spa14.o613p/a>pspa1 class="comment"4 */p/spa14.o614p/a> pa href="+code=ss<" class="sref">ssep/a>->pa href="+code=sse_flags" class="sref">sse_flagsp/a> = 0;.o615p/a>.o616p/a> pspa1 class="comment"4/* Socket Extens3.1s for SCTPp/spa14.o617p/a>pspa1 class="comment"4 * 5.3.1.5 SCTP_SHUTDOWN_EVENTp/spa14.o618p/a>pspa1 class="comment"4 *p/spa14.o619p/a>pspa1 class="comment"4 * sse_length: sizeof (__u32)p/spa14.o62 > a>pspa1 class="comment"4 * This field is the total length of the notificav3.1 data, includingp/spa14.o621p/a>pspa1 class="comment"4 * the notificav3.1 header.p/spa14.o622p/a>pspa1 class="comment"4 */p/spa14.o623p/a> pa href="+code=ss<" class="sref">ssep/a>->pa href="+code=sse_length" class="sref">sse_lengthp/a> = sizeof(struct pa href="+code=sctp_shutdown_event" class="sref">sctp_shutdown_eventp/a>);.o624p/a>.o625p/a> pspa1 class="comment"4/* Socket Extens3.1s for SCTPp/spa14.o626p/a>pspa1 class="comment"4 * 5.3.1.5 SCTP_SHUTDOWN_EVENTp/spa14.o627p/a>pspa1 class="comment"4 *p/spa14.o628p/a>pspa1 class="comment"4 * sse_assoc_id: sizeof (sctp_assoc_t)p/spa14.o629p/a>pspa1 class="comment"4 * The associav3.1 id field, holds the identifier for the associav3.1.p/spa14.o63 > a>pspa1 class="comment"4 * All notificav3.1s for a given associav3.1 have the same associav3.1p/spa14.o631p/a>pspa1 class="comment"4 * identifier. For TCP style socket, this field is ignored.p/spa14.o632p/a>pspa1 class="comment"4 */p/spa14.o633p/a> pa href="+code=sctp_ulpevent_set_owner" class="sref">sctp_ulpevent_set_ownerp/a>(pa href="+code=event" class="sref">eventp/a>, pa href="+code=asoc" class="sref">asocp/a>);.o634p/a> pa href="+code=ss<" class="sref">ssep/a>->pa href="+code=sse_assoc_id" class="sref">sse_assoc_idp/a> = pa href="+code=sctp_assoc2id" class="sref">sctp_assoc2idp/a>(pa href="+code=asoc" class="sref">asocp/a>);.o635p/a>.o636p/a> return pa href="+code=event" class="sref">eventp/a>;.o637p/a>.o638p/a>pa href="+code=fail" class="sref">failp/a>:.o639p/a> return pa href="+code=NULL" class="sref">NULLp/a>;.o64 > a>}.o641p/a>.o642p/a>pspa1 class="comment"4/* Create and initialize a SCTP_ADAPTATION_INDICATION notificav3.1.p/spa14.o643p/a>pspa1 class="comment"4 *p/spa14.o644p/a>pspa1 class="comment"4 * Socket Extens3.1s for SCTPp/spa14.o645p/a>pspa1 class="comment"4 * 5.3.1.6 SCTP_ADAPTATION_INDICATIONp/spa14.o646p/a>pspa1 class="comment"4 */p/spa14.o647p/a>struct pa href="+code=sctp_ulpevent" class="sref">sctp_ulpeventp/a> *pa href="+code=sctp_ulpevent_make_adaptav3.1_indicav3.1" class="sref">sctp_ulpevent_make_adaptav3.1_indicav3.1p/a>(.o648p/a> const struct pa href="+code=sctp_associav3.1" class="sref">sctp_associav3.1p/a> *pa href="+code=asoc" class="sref">asocp/a>, pa href="+code=gfp_t" class="sref">gfp_tp/a> pa href="+code=gfp" class="sref">gfpp/a>).o649p/a>{.o650p/a> struct pa href="+code=sctp_ulpevent" class="sref">sctp_ulpeventp/a> *pa href="+code=event" class="sref">eventp/a>;.o651p/a> struct pa href="+code=sctp_adaptav3.1_event" class="sref">sctp_adaptav3.1_eventp/a> *pa href="+code=sai" class="sref">saip/a>;.o652p/a> struct pa href="+code=sk_buff" class="sref">sk_buffp/a> *pa href="+code=skb" class="sref">skbp/a>;.o653p/a>.o654p/a> pa href="+code=event" class="sref">eventp/a> = pa href="+code=sctp_ulpevent_new" class="sref">sctp_ulpevent_newp/a>(sizeof(struct pa href="+code=sctp_adaptav3.1_event" class="sref">sctp_adaptav3.1_eventp/a>),.o655p/a> pa href="+code=MSG_NOTIFICATION" class="sref">MSG_NOTIFICATIONp/a>, pa href="+code=gfp" class="sref">gfpp/a>);.o656p/a> if (!pa href="+code=event" class="sref">eventp/a>).o657p/a> goto pa href="+code=fail" class="sref">failp/a>;.o658p/a>.o659p/a> pa href="+code=skb" class="sref">skbp/a> = pa href="+code=sctp_event2skb" class="sref">sctp_event2skbp/a>(pa href="+code=event" class="sref">eventp/a>);.o660p/a> pa href="+code=sai" class="sref">saip/a> = (struct pa href="+code=sctp_adaptav3.1_event" class="sref">sctp_adaptav3.1_eventp/a> *).o661p/a> pa href="+code=skb_put" class="sref">skb_putp/a>(pa href="+code=skb" class="sref">skbp/a>, sizeof(struct pa href="+code=sctp_adaptav3.1_event" class="sref">sctp_adaptav3.1_eventp/a>));.o662p/a>.o663p/a> pa href="+code=sai" class="sref">saip/a>->pa href="+code=sai_typ<" class="sref">sai_typ

= pa href="+code=SCTP_ADAPTATION_INDICATION" class="sref">SCTP_ADAPTATION_INDICATIONp/a>;.o664p/a> pa href="+code=sai" class="sref">saip/a>->pa href="+code=sai_flags" class="sref">sai_flagsp/a> = 0;.o665p/a> pa href="+code=sai" class="sref">saip/a>->pa href="+code=sai_length" class="sref">sai_lengthp/a> = sizeof(struct pa href="+code=sctp_adaptav3.1_event" class="sref">sctp_adaptav3.1_eventp/a>);.o666p/a> pa href="+code=sai" class="sref">saip/a>->pa href="+code=sai_adaptav3.1_ind" class="sref">sai_adaptav3.1_indp/a> = pa href="+code=asoc" class="sref">asocp/a>->pa href="+code=peer" class="sref">peerp/a>.pa href="+code=adaptav3.1_ind" class="sref">adaptav3.1_indp/a>;.o667p/a> pa href="+code=sctp_ulpevent_set_owner" class="sref">sctp_ulpevent_set_ownerp/a>(pa href="+code=event" class="sref">eventp/a>, pa href="+code=asoc" class="sref">asocp/a>);.o668p/a> pa href="+code=sai" class="sref">saip/a>->pa href="+code=sai_assoc_id" class="sref">sai_assoc_idp/a> = pa href="+code=sctp_assoc2id" class="sref">sctp_assoc2idp/a>(pa href="+code=asoc" class="sref">asocp/a>);.o669p/a>.o670p/a> return pa href="+code=event" class="sref">eventp/a>;.o671p/a>.o672p/a>pa href="+code=fail" class="sref">failp/a>:.o673p/a> return pa href="+code=NULL" class="sref">NULLp/a>;.o674p/a>}.o675p/a>.o676p/a>pspa1 class="comment"4/* A mo677p/a>pspa1 class="comment"4 * to pass it to the upper layers. Go ahead and calculate the sndrcvinfop/spa14.o678p/a>pspa1 class="comment"4 * even if filtered out later.p/spa14.o679p/a>pspa1 class="comment"4 *p/spa14.o68 > a>pspa1 class="comment"4 * Socket Extens3.1s for SCTPp/spa14.o681p/a>pspa1 class="comment"4 * 5.2.2 SCTP Header Informav3.1 Structure (SCTP_SNDRCV)p/spa14.o682p/a>pspa1 class="comment"4 */p/spa14.o683p/a>struct pa href="+code=sctp_ulpevent" class="sref">sctp_ulpeventp/a> *pa href="+code=sctp_ulpevent_make_rcvmsg" class="sref">sctp_ulpevent_make_rcvmsgp/a>(struct pa href="+code=sctp_associav3.1" class="sref">sctp_associav3.1p/a> *pa href="+code=asoc" class="sref">asocp/a>,.o684p/a> struct pa href="+code=sctp_chunk" class="sref">sctp_chunkp/a> *pa href="+code=chunk" class="sref">chunkp/a>,.o685p/a> pa href="+code=gfp_t" class="sref">gfp_tp/a> pa href="+code=gfp" class="sref">gfpp/a>).o686p/a>{.o687p/a> struct pa href="+code=sctp_ulpevent" class="sref">sctp_ulpeventp/a> *pa href="+code=event" class="sref">eventp/a> = pa href="+code=NULL" class="sref">NULLp/a>;.o688p/a> struct pa href="+code=sk_buff" class="sref">sk_buffp/a> *pa href="+code=skb" class="sref">skbp/a>;.o689p/a> pa href="+code=size_t" class="sref">size_tp/a> pa href="+code=padding" class="sref">paddingp/a>, pa href="+code=le1" class="sref">le1p/a>;.o690p/a> int pa href="+code=rx_count" class="sref">rx_countp/a>;.o691p/a>.o692p/a> pspa1 class="comment"4/*p/spa14.o693p/a>pspa1 class="comment"4 * check to see if we need to make space for thisp/spa14.o694p/a>pspa1 class="comment"4 * new skb, expand the rcvbuffer if needed, or dropp/spa14.o695p/a>pspa1 class="comment"4 * the fram

o696p/a>pspa1 class="comment"4 */p/spa14.o697p/a> if (pa href="+code=asoc" class="sref">asocp/a>->pa href="+code=ep" class="sref">epp/a>->pa href="+code=rcvbuf_policy" class="sref">rcvbuf_policyp/a>).o698p/a> pa href="+code=rx_count" class="sref">rx_countp/a> = pa href="+code=atomic_read" class="sref">atomic_readp/a>(&pa href="+code=asoc" class="sref">asocp/a>->pa href="+code=rmem_alloc" class="sref">rmem_allocp/a>);.o699p/a> else.o700p/a> pa href="+code=rx_count" class="sref">rx_countp/a> = pa href="+code=atomic_read" class="sref">atomic_readp/a>(&pa href="+code=asoc" class="sref">asocp/a>->pa href="+code=bas<" class="sref">bas

.pa href="+code=sk" class="sref">skp/a>->pa href="+code=sk_rmem_alloc" class="sref">sk_rmem_allocp/a>);.o701p/a>.o702p/a> if (pa href="+code=rx_count" class="sref">rx_countp/a> >= pa href="+code=asoc" class="sref">asocp/a>->pa href="+code=bas<" class="sref">bas

.pa href="+code=sk" class="sref">skp/a>->pa href="+code=sk_rcvbuf" class="sref">sk_rcvbufp/a>) {.o703p/a>.o704p/a> if ((pa href="+code=asoc" class="sref">asocp/a>->pa href="+code=bas<" class="sref">bas

.pa href="+code=sk" class="sref">skp/a>->pa href="+code=sk_userlocks" class="sref">sk_userlocksp/a> & pa href="+code=SOCK_RCVBUF_LOCK" class="sref">SOCK_RCVBUF_LOCKp/a>) ||.o705p/a> (!pa href="+code=sk_rmem_schedul<" class="sref">sk_rmem_schedul

(pa href="+code=asoc" class="sref">asocp/a>->pa href="+code=bas<" class="sref">bas

.pa href="+code=sk" class="sref">skp/a>, pa href="+code=chunk" class="sref">chunkp/a>->pa href="+code=skb" class="sref">skbp/a>,.o706p/a> pa href="+code=chunk" class="sref">chunkp/a>->pa href="+code=skb" class="sref">skbp/a>->pa href="+code=truesize" class="sref">truesizep/a>))).o707p/a> goto pa href="+code=fail" class="sref">failp/a>;.o708p/a> }.o709p/a>.o710p/a> pspa1 class="comment"4/* Clone the origi1al skb, sharing the data. */p/spa14.o711p/a> pa href="+code=skb" class="sref">skbp/a> = pa href="+code=skb_clone" class="sref">skb_clonep/a>(pa href="+code=chunk" class="sref">chunkp/a>->pa href="+code=skb" class="sref">skbp/a>, pa href="+code=gfp" class="sref">gfpp/a>);.o712p/a> if (!pa href="+code=skb" class="sref">skbp/a>).o713p/a> goto pa href="+code=fail" class="sref">failp/a>;.o714p/a>.o715p/a> pspa1 class="comment"4/* Now that all memory allocav3.1s for this chunk succo716p/a>pspa1 class="comment"4 * ca1 mark it as received so the tsn_map is updaved correctly.p/spa14.o717p/a>pspa1 class="comment"4 */p/spa14.o718p/a> if (pa href="+code=sctp_tsnmap_mark" class="sref">sctp_tsnmap_markp/a>(&pa href="+code=asoc" class="sref">asocp/a>->pa href="+code=peer" class="sref">peerp/a>.pa href="+code=tsn_map" class="sref">tsn_mapp/a>,.o719p/a> pa href="+code=ntohl" class="sref">ntohlp/a>(pa href="+code=chunk" class="sref">chunkp/a>->pa href="+code=subh" class="sref">subhp/a>.pa href="+code=data_hdr" class="sref">data_hdrp/a>->pa href="+code=ts1" class="sref">ts1p/a>),.o720p/a> pa href="+code=chunk" class="sref">chunkp/a>->pa href="+code=transport" class="sref">transportp/a>)).o721p/a> goto pa href="+code=fail_mark" class="sref">fail_markp/a>;.o722p/a>.o723p/a> pspa1 class="comment"4/* First calculate the padding, so we don't i1advertentlyp/spa14.o724p/a>pspa1 class="comment"4 * pass up the wrong length to the user.p/spa14.o725p/a>pspa1 class="comment"4 *p/spa14.o726p/a>pspa1 class="comment"4 * RFC 2960 - Secv3.1 3.2 Chunk Field Descripv3.1sp/spa14.o727p/a>pspa1 class="comment"4 *p/spa14.o728p/a>pspa1 class="comment"4 * The total length of a chunk(including Type, Length and V < fields)p/spa14.o729p/a>pspa1 class="comment"4 * MUST be a multiple of 4 bytes. If the length of the chunk is not ap/spa14.o73 > a>pspa1 class="comment"4 * multiple of 4 bytes, the sender MUST pad the chunk with all zerop/spa14.o731p/a>pspa1 class="comment"4 * bytes and this padding is not included in the chunk length field.p/spa14.o732p/a>pspa1 class="comment"4 * The sender should never pad with more tha1 3 bytes. The receiverp/spa14.o733p/a>pspa1 class="comment"4 * MUST ignore the padding bytes.p/spa14.o734p/a>pspa1 class="comment"4 */p/spa14.o735p/a> pa href="+code=le1" class="sref">le1p/a> = pa href="+code=ntohs" class="sref">ntohsp/a>(pa href="+code=chunk" class="sref">chunkp/a>->pa href="+code=chunk_hdr" class="sref">chunk_hdrp/a>->pa href="+code=length" class="sref">lengthp/a>);.o736p/a> pa href="+code=padding" class="sref">paddingp/a> = pa href="+code=WORD_ROUND" class="sref">WORD_ROUNDp/a>(pa href="+code=le1" class="sref">le1p/a>) - pa href="+code=le1" class="sref">le1p/a>;.o737p/a>.o738p/a> pspa1 class="comment"4/* Fixup cloned skb with just this chunks data. */p/spa14.o739p/a> pa href="+code=skb_trim" class="sref">skb_trimp/a>(pa href="+code=skb" class="sref">skbp/a>, pa href="+code=chunk" class="sref">chunkp/a>->pa href="+code=chunk_end" class="sref">chunk_endp/a> - pa href="+code=padding" class="sref">paddingp/a> - pa href="+code=skb" class="sref">skbp/a>->pa href="+code=data" class="sref">datap/a>);.o740p/a>.o741p/a> pspa1 class="comment"4/* Embed the event fields inside the cloned skb. */p/spa14.o742p/a> pa href="+code=event" class="sref">eventp/a> = pa href="+code=sctp_skb2event" class="sref">sctp_skb2eventp/a>(pa href="+code=skb" class="sref">skbp/a>);.o743p/a>.o744p/a> pspa1 class="comment"4/* Initialize event with flags 0 and correct lengthp/spa14.o745p/a>pspa1 class="comment"4 * Since this is a clone of the origi1al skb, only account forp/spa14.o746p/a>pspa1 class="comment"4 * the data of this chunk as other chunks will be accounted separately.p/spa14.o747p/a>pspa1 class="comment"4 */p/spa14.o748p/a> pa href="+code=sctp_ulpevent_init" class="sref">sctp_ulpevent_initp/a>(pa href="+code=event" class="sref">eventp/a>, 0, pa href="+code=skb" class="sref">skbp/a>->pa href="+code=le1" class="sref">le1p/a> + sizeof(struct pa href="+code=sk_buff" class="sref">sk_buffp/a>));.o749p/a>.o750p/a> pa href="+code=sctp_ulpevent_receive_data" class="sref">sctp_ulpevent_receive_datap/a>(pa href="+code=event" class="sref">eventp/a>, pa href="+code=asoc" class="sref">asocp/a>);.o751p/a>.o752p/a> pa href="+code=event" class="sref">eventp/a>->pa href="+code=stream" class="sref">streamp/a> = pa href="+code=ntohs" class="sref">ntohsp/a>(pa href="+code=chunk" class="sref">chunkp/a>->pa href="+code=subh" class="sref">subhp/a>.pa href="+code=data_hdr" class="sref">data_hdrp/a>->pa href="+code=stream" class="sref">streamp/a>);.o753p/a> pa href="+code=event" class="sref">eventp/a>->pa href="+code=ss1" class="sref">ss1p/a> = pa href="+code=ntohs" class="sref">ntohsp/a>(pa href="+code=chunk" class="sref">chunkp/a>->pa href="+code=subh" class="sref">subhp/a>.pa href="+code=data_hdr" class="sref">data_hdrp/a>->pa href="+code=ss1" class="sref">ss1p/a>);.o754p/a> pa href="+code=event" class="sref">eventp/a>->pa href="+code=ppid" class="sref">ppidp/a> = pa href="+code=chunk" class="sref">chunkp/a>->pa href="+code=subh" class="sref">subhp/a>.pa href="+code=data_hdr" class="sref">data_hdrp/a>->pa href="+code=ppid" class="sref">ppidp/a>;.o755p/a> if (pa href="+code=chunk" class="sref">chunkp/a>->pa href="+code=chunk_hdr" class="sref">chunk_hdrp/a>->pa href="+code=flags" class="sref">flagsp/a> & pa href="+code=SCTP_DATA_UNORDERED" class="sref">SCTP_DATA_UNORDEREDp/a>) {.o756p/a> pa href="+code=event" class="sref">eventp/a>->pa href="+code=flags" class="sref">flagsp/a> |= pa href="+code=SCTP_UNORDERED" class="sref">SCTP_UNORDEREDp/a>;.o757p/a> pa href="+code=event" class="sref">eventp/a>->pa href="+code=cumts1" class="sref">cumts1p/a> = pa href="+code=sctp_tsnmap_get_cts1" class="sref">sctp_tsnmap_get_cts1p/a>(&pa href="+code=asoc" class="sref">asocp/a>->pa href="+code=peer" class="sref">peerp/a>.pa href="+code=tsn_map" class="sref">tsn_mapp/a>);.o758p/a> }.o759p/a> pa href="+code=event" class="sref">eventp/a>->pa href="+code=ts1" class="sref">ts1p/a> = pa href="+code=ntohl" class="sref">ntohlp/a>(pa href="+code=chunk" class="sref">chunkp/a>->pa href="+code=subh" class="sref">subhp/a>.pa href="+code=data_hdr" class="sref">data_hdrp/a>->pa href="+code=ts1" class="sref">ts1p/a>);.o760p/a> pa href="+code=event" class="sref">eventp/a>->pa href="+code=msg_flags" class="sref">msg_flagsp/a> |= pa href="+code=chunk" class="sref">chunkp/a>->pa href="+code=chunk_hdr" class="sref">chunk_hdrp/a>->pa href="+code=flags" class="sref">flagsp/a>;.o761p/a> pa href="+code=event" class="sref">eventp/a>->pa href="+code=iif" class="sref">iifp/a> = pa href="+code=sctp_chunk_iif" class="sref">sctp_chunk_iifp/a>(pa href="+code=chunk" class="sref">chunkp/a>);.o762p/a>.o763p/a> return pa href="+code=event" class="sref">eventp/a>;.o764p/a>.o765p/a>pa href="+code=fail_mark" class="sref">fail_markp/a>:.o766p/a> pa href="+code=kfree_skb" class="sref">kfree_skbp/a>(pa href="+code=skb" class="sref">skbp/a>);.o767p/a>pa href="+code=fail" class="sref">failp/a>:.o768p/a> return pa href="+code=NULL" class="sref">NULLp/a>;.o769p/a>}.o770p/a>.o771p/a>pspa1 class="comment"4/* Create a partial delivery relaved event.p/spa14.o772p/a>pspa1 class="comment"4 *p/spa14.o773p/a>pspa1 class="comment"4 * 5.3.1.7 SCTP_PARTIAL_DELIVERY_EVENTp/spa14.o774p/a>pspa1 class="comment"4 *p/spa14.o775p/a>pspa1 class="comment"4 * When a receiver is engaged in a partial delivery of ap/spa14.o776p/a>pspa1 class="comment"4 * mo777p/a>pspa1 class="comment"4 * various events.p/spa14.o778p/a>pspa1 class="comment"4 */p/spa14.o779p/a>struct pa href="+code=sctp_ulpevent" class="sref">sctp_ulpeventp/a> *pa href="+code=sctp_ulpevent_make_pdapi" class="sref">sctp_ulpevent_make_pdapip/a>(.o780p/a> const struct pa href="+code=sctp_associav3.1" class="sref">sctp_associav3.1p/a> *pa href="+code=asoc" class="sref">asocp/a>, pa href="+code=__u32" class="sref">__u32p/a> pa href="+code=indicav3.1" class="sref">indicav3.1p/a>,.o781p/a> pa href="+code=gfp_t" class="sref">gfp_tp/a> pa href="+code=gfp" class="sref">gfpp/a>).o782p/a>{.o783p/a> struct pa href="+code=sctp_ulpevent" class="sref">sctp_ulpeventp/a> *pa href="+code=event" class="sref">eventp/a>;.o784p/a> struct pa href="+code=sctp_pdapi_event" class="sref">sctp_pdapi_eventp/a> *pa href="+code=pd" class="sref">pdp/a>;.o785p/a> struct pa href="+code=sk_buff" class="sref">sk_buffp/a> *pa href="+code=skb" class="sref">skbp/a>;.o786p/a>.o787p/a> pa href="+code=event" class="sref">eventp/a> = pa href="+code=sctp_ulpevent_new" class="sref">sctp_ulpevent_newp/a>(sizeof(struct pa href="+code=sctp_pdapi_event" class="sref">sctp_pdapi_eventp/a>),.o788p/a> pa href="+code=MSG_NOTIFICATION" class="sref">MSG_NOTIFICATIONp/a>, pa href="+code=gfp" class="sref">gfpp/a>);.o789p/a> if (!pa href="+code=event" class="sref">eventp/a>).o790p/a> goto pa href="+code=fail" class="sref">failp/a>;.o791p/a>.o792p/a> pa href="+code=skb" class="sref">skbp/a> = pa href="+code=sctp_event2skb" class="sref">sctp_event2skbp/a>(pa href="+code=event" class="sref">eventp/a>);.o793p/a> pa href="+code=pd" class="sref">pdp/a> = (struct pa href="+code=sctp_pdapi_event" class="sref">sctp_pdapi_eventp/a> *).o794p/a> pa href="+code=skb_put" class="sref">skb_putp/a>(pa href="+code=skb" class="sref">skbp/a>, sizeof(struct pa href="+code=sctp_pdapi_event" class="sref">sctp_pdapi_eventp/a>));.o795p/a>.o796p/a> pspa1 class="comment"4/* pdapi_typ

o797p/a>pspa1 class="comment"4 * It should be SCTP_PARTIAL_DELIVERY_EVENTp/spa14.o798p/a>pspa1 class="comment"4 *p/spa14.o799p/a>pspa1 class="comment"4 * pdapi_flags: 16 bits (unsigned integer)p/spa14.o80 > a>pspa1 class="comment"4 * Currently unused.p/spa14.o801p/a>pspa1 class="comment"4 */p/spa14.o802p/a> pa href="+code=pd" class="sref">pdp/a>->pa href="+code=pdapi_typ<" class="sref">pdapi_typ

= pa href="+code=SCTP_PARTIAL_DELIVERY_EVENT" class="sref">SCTP_PARTIAL_DELIVERY_EVENTp/a>;.o803p/a> pa href="+code=pd" class="sref">pdp/a>->pa href="+code=pdapi_flags" class="sref">pdapi_flagsp/a> = 0;.o804p/a>.o805p/a> pspa1 class="comment"4/* pdapi_length: 32 bits (unsigned integer)p/spa14.o806p/a>pspa1 class="comment"4 *p/spa14.o807p/a>pspa1 class="comment"4 * This field is the total length of the notificav3.1 data, includingp/spa14.o808p/a>pspa1 class="comment"4 * the notificav3.1 header. It will generally be sizeof (structp/spa14.o809p/a>pspa1 class="comment"4 * sctp_pdapi_event).p/spa14.o81 > a>pspa1 class="comment"4 */p/spa14.o811p/a> pa href="+code=pd" class="sref">pdp/a>->pa href="+code=pdapi_length" class="sref">pdapi_lengthp/a> = sizeof(struct pa href="+code=sctp_pdapi_event" class="sref">sctp_pdapi_eventp/a>);.o812p/a>.o813p/a> pspa1 class="comment"4/* pdapi_indicav3.1: 32 bits (unsigned integer)p/spa14.o814p/a>pspa1 class="comment"4 *p/spa14.o815p/a>pspa1 class="comment"4 * This field holds the indicav3.1 being sent to the applicav3.1.p/spa14.o816p/a>pspa1 class="comment"4 */p/spa14.o817p/a> pa href="+code=pd" class="sref">pdp/a>->pa href="+code=pdapi_indicav3.1" class="sref">pdapi_indicav3.1p/a> = pa href="+code=indicav3.1" class="sref">indicav3.1p/a>;.o818p/a>.o819p/a> pspa1 class="comment"4/* pdapi_assoc_id: sizeof (sctp_assoc_t)p/spa14.o82 > a>pspa1 class="comment"4 *p/spa14.o821p/a>pspa1 class="comment"4 * The associav3.1 id field, holds the identifier for the associav3.1.p/spa14.o822p/a>pspa1 class="comment"4 */p/spa14.o823p/a> pa href="+code=sctp_ulpevent_set_owner" class="sref">sctp_ulpevent_set_ownerp/a>(pa href="+code=event" class="sref">eventp/a>, pa href="+code=asoc" class="sref">asocp/a>);.o824p/a> pa href="+code=pd" class="sref">pdp/a>->pa href="+code=pdapi_assoc_id" class="sref">pdapi_assoc_idp/a> = pa href="+code=sctp_assoc2id" class="sref">sctp_assoc2idp/a>(pa href="+code=asoc" class="sref">asocp/a>);.o825p/a>.o826p/a> return pa href="+code=event" class="sref">eventp/a>;.o827p/a>pa href="+code=fail" class="sref">failp/a>:.o828p/a> return pa href="+code=NULL" class="sref">NULLp/a>;.o829p/a>}.o830p/a>.o831p/a>struct pa href="+code=sctp_ulpevent" class="sref">sctp_ulpeventp/a> *pa href="+code=sctp_ulpevent_make_authkey" class="sref">sctp_ulpevent_make_authkeyp/a>(.o832p/a> const struct pa href="+code=sctp_associav3.1" class="sref">sctp_associav3.1p/a> *pa href="+code=asoc" class="sref">asocp/a>, pa href="+code=__u16" class="sref">__u16p/a> pa href="+code=key_id" class="sref">key_idp/a>,.o833p/a> pa href="+code=__u32" class="sref">__u32p/a> pa href="+code=indicav3.1" class="sref">indicav3.1p/a>, pa href="+code=gfp_t" class="sref">gfp_tp/a> pa href="+code=gfp" class="sref">gfpp/a>).o834p/a>{.o835p/a> struct pa href="+code=sctp_ulpevent" class="sref">sctp_ulpeventp/a> *pa href="+code=event" class="sref">eventp/a>;.o836p/a> struct pa href="+code=sctp_authkey_event" class="sref">sctp_authkey_eventp/a> *pa href="+code=ak" class="sref">akp/a>;.o837p/a> struct pa href="+code=sk_buff" class="sref">sk_buffp/a> *pa href="+code=skb" class="sref">skbp/a>;.o838p/a>.o839p/a> pa href="+code=event" class="sref">eventp/a> = pa href="+code=sctp_ulpevent_new" class="sref">sctp_ulpevent_newp/a>(sizeof(struct pa href="+code=sctp_authkey_event" class="sref">sctp_authkey_eventp/a>),.o840p/a> pa href="+code=MSG_NOTIFICATION" class="sref">MSG_NOTIFICATIONp/a>, pa href="+code=gfp" class="sref">gfpp/a>);.o841p/a> opL791">o791p/a>.ntohsp/a>(href="net/sctp/ulpevent.c#6" clak_hpL750""+c4aring the data. vent.8#L743" idopL743" class="line" namo743p8a>.o792p/a> pa href="+code=skb" class="sref">skbp/a> = pa href="+code=sctp_event2skb" class="sref">sctp_event2skbp/a>(pa href="+code=event" class="sref8engthp/sp814.sctp_authkey_event pa href="+code=pd" class=>o836p/a> struct pa href="+code=sctp_authkey_1">o791p/a>.o794p/a> pa href="+code=skb_put" class="sref">skb_putp/a>(pa href="+code=skb" class="sref"t_newp/a>(sizeof(struct pa href="+code=sctp_authkeypa href="+code=event" class="sref8eef">akp/a14.sctp_authkey_event pa href="+code+codclass="sref">pdp/a>-+codclassf="+code=pdapi_typ<" class=AUTHENTode=MSG

= pa href="+code=SCTAUTHENTode=MSG

>ntohsp/a>(href="net/sctp/ulpevent.c#68">o838p/);.sctp_authkey_event pa href="+code+codclass="sref">pdp/a>-&+codclass="+code=pdapi_flags" class="sref">pdapi_fl49">o749p8a>.sctp_authkey_event pa href="+code+codclass="sref">pdp/a>-&g+codclass="code=pdapi_length" class="sref">pdapi_lent_newp/a>(sizeof(struct pa href="+code=sctp_authkeydapi_flags" class="sref">pdapi_fl4">gfpp/a>);.o751p8a>.sctp_authkey_event pa href="+code+codce=snumb pa href="+codce=snumb f="+code=pdapi_typ<" c_u16" class="sref">__u16p/a> padapi_flags" class="sref">pdapi_fl4" clak_hp);.sctp_authkey_event pa href="+code+codcalte=snumb pa href="+codcalte=snumb "+code=pdapi_flags" class="sref">pdapi_fl43">o743p8);.sctp_authkey_event pa href="+code+codc_u32" class="sref">__u32p+codc_u32" claspi_indicav3.1" class="sref">pdapi_indicav3.1p/a> = pa href="+code=indicav3.1" class="sref">indf">ppidp/8>;.8 {.o822p/a>pspa1 class="comment"4 ORDEREDp/8>;.o821p/a>pspa1 class="comment"4 * The associav3.1 id field, holds the identifier for the associasn_mapp/a8);.o822p/a>pspa1 class="comment"4 /a> 8 }.o823p/a> pa href="+code=sctp_ulpevent_set_owner" class="sref">sctp_ulpevent_set_ownerp/a>(pa href="+code=event" class="sref">eventp/a>, pa href="+code=asoc" class="sreff">ts1p/a8);.sctp_authkey_event pa href="+code+codcaass="sref">pdp/a>->+codcaass="sr=pdapi_assoc_id" class="sref">pdapi_assoc_idp/a> = pa href="+code=sctp_assoc2id" class="sref">sctp_assoc2idp/a>(pa href="+code=asoc" class="sref">flagsp/8>;.chunkp/a8);.o826p/a> return pa href="+code=event" class="sref62">o762p8a>.o827p/a>pa href="+code=fail" class="sre">eventp/8>;.o828p/a> return pa href="+code=NULL" class="sre64">o764p8a>.:.skbp/a8);.o822p/a>pspa1 class="comment"4 f">failp/8>:.o822p/a>pspa1 class="comment"4 fa> 8>;.o769p/8>}.o822p/a>pspa1 class="comment"4 70">o770p8a>.o831p/a>struct pa href="+code=sctp_ulpevent" class="sref">sctp_ulpe732p/a_dr/a>(sizeof(struct pa href="ref">sctp_ulpe732p/a_dr/a>(sizkey" class="sref">sctp_ulpevent_make_vent.p/sp814.o832p/a> const struct pa href="+code=sctp_associav3.1" class="sref">sctp_associav3.1p/a> *pa href="+code=class="sref">indicav3.1p/a>, pa href="+code=gfp_t" class="sref">gfp_tp/a> pa href="+code=gfp" class="srt"4 *p/sp814.o835p/a> struct pa href="+code=sctp_ulpevent" class="sref">sctp_ulpeventp/a> *pa href="+code=event" class="sreft"4 *p/sp814.(sizeof(struct pa href="732p/a_dr/a>(sizkey"ctp_ulpevent" clasdr/eof(struct pa hrdr/a> *pa href="+code=event" class="sreftl_markp/814.o837p/a> struct pa href="+code=sk_buff" class="sref">sk_buffp/a> *pa href="+code=skb" class="sricav

o839p/a> pa href="+code=event" class="sref">eventp/a> = pa href="+code=sctp_ulpevent_new" class="sref">sctp_ulpeven732p/a_dr/a>(sizeof(struct pa href="732p/a_dr/a>(sizkey"y_event" class="sref">sctp_authkey"4 */p/sp814.MSG_NOTIFICATIONp/a>, pa href="+code=gfp" class="sree_pdapip/8>(.o841p/a> opL791">o791p/a>.o828p/a> return pa href="+code=NULL" class="sreef">gfpp/8>).o782p/8>{.o792p/a> pa href="+code=skb" class="sref">skbp/a> = pa href="+code=sctp_event2skb" class="sref">sctp_event2skbp/a>(pa href="+code=event" class="sref8">eventp/8>;. * pa href="+code=pd" class=732p/a_dr/a>(sizeof(struct pa href="732p/a_dr/a>(sizkey"ct1">o791p/a>.;.o794p/a> pa href="+code=skb_put" class="sref">skb_putp/a>(pa href="+code=skb" class="sref"732p/a_dr/a>(sizeof(struct pa href="732p/a_dr/a>(sizkey"ypa href="+code=event" class="sref8"l_markp/8>;.o786p8a>. *pa href="+code=chunk"32p/a_dr/alass="sref">pdp/a>-"32p/a_dr/alassf="+code=pdapi_typ<" class=SENDER_D = pa href="+code=SCTSENDER_D * urn pa href="+code=NULL" class="sreents.p/sp8),. *pa href="+code=chunk"32p/a_dr/alass="sref">pdp/a>-&"32p/a_dr/alass="+code=pdapi_flags" class="sref">pdapi_flf">gfpp/a8);. *pa href="+code=chunk"32p/a_dr/alass="sref">pdp/a>-&g"32p/a_dr/alass="code=pdapi_length" class="sref">pdapi_len732p/a_dr/a>(sizeof(struct pa href="732p/a_dr/a>(sizkey"ydapi_flags" class="sref">pdapi_fl">eventp/8>).o823p/a> pa href="+code=sctp_ulpevent_set_owner" class="sref">sctp_ulpevent_set_ownerp/a>(pa href="+code=event" class="sref">eventp/a>, pa href="+code=asoc" class="sreff">failp/8>;. *pa href="+code=chunk"32p/a_dr/aaass="sref">pdp/a>->"32p/a_dr/aaass="sr=pdapi_assoc_id" class="sref">pdapi_assoc_idp/a> = pa href="+code=sctp_assoc2id" class="sref">sctp_assoc2idp/a>(pa href="+code=asoc" class="sref91">o791p8a>.eventp/a8);.o763p/a> return pa href="+code=event" class="sre8eventp/a>8*).8);.o795p8a>.o808p/a>pspa1 t * 6" um 5p/a>pspa1808p/a>pspa12">o822p/a>pspa1 class="comment"4 _typ

o822p/a>pspa1 class="comment"4 _nts.p/sp814.o822p/a>pspa1 class="comment"4 *p/sp814.asocp/a>, pa href="+code=_+code=sctp_ulpp_ts808p/a>pspa1alass="sref">pdp/a>-"code=sctp_ulpp_ts808p/a>pspa1alassde=sc2" class="line" namo832p>o835p/a> struct pa href="+code=sctp_ulpevent" class="sref">sctp_ulpeventp/a> *1">o791p/a>.o832p808p/a>pspa1> struct pa h808p/a>pspa12"=sctp_ulpevent" cla808p/a>pspa1> struct808p/a>pspa12"=spa href="+code=event" class="sre9 */p/sp914.o837p/a> struct pa href="+code=sk_buff" class="sref">sk_buffp/a> *pa href="+code=skb" class="s9Y_EVENTp/9>;. =90;.o792p/a> pa href="+code=skb" class="sref">skbp/a> = pa href="+code=sctp_event2skb" class="sref">sctp_event2skbp/a>(pa href="+code=event" class="sref904">o804p9a>.pspa1> struct808p/a>pspa12"=s unpa1 e" namo832p808p/a>pspa1> struct pa h808p/a>pspa12"=sct)24" class="line" namo792p/a> > - pa href="+code=skb" class="sref">skbp/a>-&ga href="+code=event" class="sref906">o804p9a>.pspa1> struct808p/a>pspa12"=spa href="+code=chunk"n_class=mo792p/n_class=2"=st;pa href="+codes1alass="sref">pdp/a>-"1alassde=sa href="+code=event" class="sref907">o804p9a4.pdp/a>-"code=sctp_ulprlas_ondrcvinf*de=sc2" class="line" namo832p>o835p/a> struct pa href="+code=sctp_ulpevent" class="sref">sctp_ulpeventp/a> *_event" class="sref">sctp_authke9 */p/sp914.>sghdrref">sctp_ulpev>sghdrde=sctp_ulpevent" cla>sghdrref">sctp_ulpev>sghdrde=s1">o791p/a>.o812p9a>.pdp/a>-"codeondrcvinf*de=sss="line" nampdp/a>-"inf*de=sa href="+code=event" class="sref9eger)p/sp914.pspa1> struct pa h=sctp_ulpisp808p/a>pspa1=sctp_event2skb" class="sref">sctp_event2skbp/a>(p1">o791p/a>.o804p914.o804p914.;.o822p/a>pspa1 class="comment"4 918">o818p9a>.o82 > a>pspa1 class="comment"4 9 *p/sp914.-&gpspa1 class="comment"4 * pdapi_flags: 16 bits (unsigned in9v3.1.p/sp914.o812p914.sg()ss="ce=SC stack placet"4 -&g numb t"4 * pdapi_flags: 16 bits (unsigned in9vger)p/sp9);.value 2">o822p/a>pspa1 class="comment"4 9">asocp/a9);.o825p9a>.pdp/a>-"inf*de=st;pa href="+codesinf*_/a>-&g="sref">pdp/a>-"inf*_/a>->pa href="+code=streass="sref">sctp_event2skbp/a>(f="+code=data_hdr" class="sref">data_hdrp/a>->paa href="+code=event" class="sref9">eventp/9>;.:.o798p/a>pspa1 class="comment"4 9f">NULLp/9>;.sg()ss=/a>value32" taint"4 /a>-&g seque>o74numb ttha header. It will generally be sizeof (99">o829p/9>}.psp4 /tp/4numb tcommal4 * Whei6s "4 (.oopLonemrecv>sg()s776peedt"4 * rlas key_idp/9>,.gfpp/9>).pdp/a>-"inf*de=st;pa href="+codesinf*_/mts1p/a> = pa hrefinf*_/mtt;pa href="+code=streass="sref">sctp_event2skbp/a>(f="+code=data_hdr" class="sref">data_hdrp/a>-a href="+code=event" class="sref94">o834p/9>{.eventp/9>;.o806p/a>pspa1 class="comment"4 9ref">akp/9>;.sg()ss=/a>value3is06">o806p/a>pspa1 class="comment"4 9rcav3.1p/9>;.o/tp/4inf*rmpspa1 tha was p8" mmeby08">oupp tlay t"408">ocp/a>-">o806p/a>pspa1 class="comment"4 9r">NULLp/9a>.o808e tha by8e ordp/a>psu6s ar6"NOT accouliedheader. It will generally be sizeof (9_eventp/a9),.pnf*rmpspa1 is p8" mmeopaque * tyss="ce=SC stack fromheader. It will generally be sizeof (9_ *p/sp9);.o822p/a>pspa1 class="comment"4 96" clak_h9L750""+c4aring the data.9vent.94L823" idopL823" class="line" inf*="sref">pdp/a>-"inf*de=st;pa href="+codesinf*_lass="sref">data_hdsinf*_lasst;pa href="+code=streass="sref">sctp_event2skbp/a>(f="+code=data_hdr" class="sref">data_hdrp/a>->pa href="+code=ppid" class="sr943">o743p9a>.pspa1 class="comment"4 * pdapi_flags: 16 bits (unsigned in9engthp/sp914.eventp/914.o815p/a>may32" tainmany "4 follow 9p/a>mand >o8asspo mmeof * pdapi_flags: 16 bits (unsigned in9eef">akp/914.oOR "4 s>ovaluep/a>pspa1 class="comment"4 * various e9 */p/sp914.o798p/a>pspa1 class="comment"4 968">o838p9);.sg()s9p/a>p98">o798p/a>pspa1 class="comment"4 949">o749p9a>.o82 > a>pspa1 class="comment"4 94">gfpp/a9);.o81p/a is pre *wopL7 o82 > a>pspa1 class="comment"4 94vent.c#L9a>.o743p9);.pdp/a>-"inf*de=st;pa href="+codesinf*_lass="sref">pdp/a>-&"inf*_lass=t;pa href="+code=streass="sref">sctp_event2skbp/a>(f="+code=data_hdr" cass="sref">chunk_hdrp/a>->pa href="+code=flags" class="sre9f">ppidp/9>;.9 {.o806p/a>pspa1 class="comment"4 9ORDEREDp/9>;.o775 ide, 5p/a>15p/a>pspa1 a TSN tha was06">o806p/a>pspa1 class="comment"4 9O */p/sp9);.pspa1 class="comment"4 * various e9/a> 9 }.ts1p/a9);.pdp/a>-"inf*de=st;pa href="+codesinf*_tmts1p/a> = pa hrefinf*_tmtt;pa href="+code=streass="sref">sctp_event2skbp/a>(f="+code=data_hdr" ctmts1p/a> = pa hretrp/a>-a href="+code=event" class="sref9">flagsp/9>;.chunkp/a9);.o762p9a>.o815p/a>nt"4 pspa co80 > comulpspve TSN as06">o806p/a>pspa1 class="comment"4 9">eventp/9>;.ou2p/aly e=SC lay t N08e th>o807p/a>ps06">o806p/a>pspa1 class="comment"4 9"">ppidp/9a>.o775p06">o806p/a>pspa1 class="comment"4 9"EREDp/a>9>:.pspa1 class="comment"4 * various e9f">skbp/a9);.:.pdp/a>-"inf*de=st;pa href="+codesinf*_cumts s1p/a> = pa hrefinf*_cumts t;pa href="+code=streass="sref">sctp_event2skbp/a>(f="+code=data_hdr" ccumts s1p/a> = pa hrecumts t;paa href="+code=event" class="sref9"a> 9>;. pspa1 class="comment"4/* pdapi_assoc_id: sizeof (sctp_as99">o769p/9>}.o770p9a>.o821p/a>pspa1handlelass="cofinf*_a/a> comment"4 * Th * pdapi_flags: 16 bits (unsigned in97chunkp/a914.pspa1slaomma5g75pno821p/a>pspa1have08">o/tp/4i * Th/a>pspa1 class="comment"4 * various e9t>eventp/914.pspa1 class="comment"4 * various e9t">ppidp/914.pdp/a>-"inf*de=st;pa href="+codesinf*_aass="sref">pdp/a>->"inf*_aass="sr pa href="+code=skb"a">pdapi_assoc_idp/a> = pa href="+code=sctp_assoc2id" clss="sref">sctp_event2skbp/a>(f="+code=data_hdr" cass="sref">sctp_assoc2idp/a>(pa href="+code=asoc" class="sre9icav

value3tha is"se *viahe=SCTCONTEXTlsocket1oplds t 8d the event fields inside the cloned sk9ta> 914.pdp/a>-"inf*de=st;pa href="+codesinf*_c" texts1p/a> = pa hrefinf*_c" textt;pa href="+code=streass="sref">sctp_event2skbp/a>(f="+code=data_hdr" cass="sref">sctp_assoc2idp/a> - pa href="+code=skefault_rcv_c" texts1p/a> = pa hrekefault_rcv_c" textt;paa href="+code=event" class="sref9e_pdapip/9>(.,.oass="= ar6"808 a1 casoilia">o775 t 8d the event fields inside the cloned sk9ef">gfpp/9>).pdp/a>-"inf*de=st;pa href="+codesinf*_timeto Whs1p/a> = pa hrefinf*_timeto Wht;pa hrpdapi_flags" class="sref">pdapi_f92">o782p/9>{.eventp/9>;.data_hdrut_cmsgde=sctp_assoc2id" cl>sghdrref">sctp_ulpev>sghdrde=spa href="+code=evIPPROTO_e=SCref">sctp_ulpevIPPROTO_e=SCde=spa href="+code=eve=SCTSNDRCVref">sctp_ulpeve=SCTSNDRCVa> *_event" class="sref">sctp_authke9i"4 *p/sp9>;.pdapi_len7ndrcvinf*="sref">pdp/a>-"codeondrcvinf*de=s), (voidp*)&code=data_hdr" clinf*="sref">pdp/a>-"inf*de=s>(pa href="+code=asoc" class="sre9"l_markp/9>;.o786p9a>.o775pd and pspa a5">fere>o74 This fi"+code=sctp_he event fields inside the cloned sk9ea> 9);.pspa1 class="comment"4 * various e9">eventp/9>).o822p/a>pspa1 class="comment"4 9f">failp/9>;.sk+code=sctp_ulprlo775p_kb" de=scss="line" namo832p>o835p/a> struct pa href="+code=sctp_ulpevent" class="sref">sctp_ulpeventp/a> *_event" class="sref">sctp_authke991">o791p9a>.o832p/a> const struct pa href="+code=sctp_associav3.1" class="sref">sctp_associav3.1p/a>1">o791p/a>.9*).o837p/a> struct pa href="+code=sk_buff" class="sref">sk_buffp/,ref="+code=sk_buffragsref">chunk_hdrpragt;paa href="+code=event" class="sref9eventp/a>9);.o795p9a>.o792p/a> pa href="+code=skb" class="sref">skbp/a> = pa href="+code=sctp_event2skb" class="sref">sctp_event2skbp/a>(pa href="+code=event" class="sref9_typ

o775pdEmbed the event fields inside the cloned sk9_nts.p/sp914. pa href="+code=sctp_ulpevent_set_owner" class="sref">sctp_ulpevent_set_ownerp/a>(pa href="+code=event" class="sref">eventp/a>, pa href="+code=asoc" class="sre9 *p/sp914.const struct pa href="+co""wnd_decreas>_owner" class="sref""sref">sctp_associav3.1p/a> *pa href="+code= clasle const struct pa clasle _owner" class="sref"Lnamo792p/a> ypa href="+code=event" class="sref10eger)p/sp10egera href="net/sctp/ulp10ege>10eg795" i/pre>href="+code=event" class="sref10e1er)p/sp10e;.o792p/a> > - pa href="+code=skb" _le const struct pakb" _le p/a>1">o791p/a>..>10ep842" idopL82sctp/ulp6" claa href="+code=event" class="sref10e3er)p/sp10e;.pspjusasa the event fields inside the cloned sk10e5er)p/sp10e;..pspa1 class="comment"4 * various e10e7er)p/sp10e4.o/kb p8" mmefrom IP caa1have0on * 1 lvarleof * pdapi_flags: 16 bits (unsigned in10e8er)p/sp10e4.10eL809" idopL809" class="line" nampdp/a>-&"na_walk_frag=_owner" class="sref"Lnamo792p/a> *pa href="+code=fragsref">chunk_hdrpragt;pa1">o791p/a>.101L721" idopL721" classa href="+code=_+code=sctp_ulprlo775p_kb" class="sref">sk+code=sctp_ulprlo775p_kb" de=scass="sref">pdapi_len7kb235p/a> struct pa h7kb235p/ade=scass="sref">pdapfragsref">chunk_hdrpragt;pa1pa href="+code=event" class="sref">eventp/a>, pa href="+code=asoc" class="sre1012er)p/sp10);..101L815" idopL815" class="line"*sociav3.1 id field, holds the identifier for the associ1016er)p/sp1014.sk+code=sctp_ulprlleas>_kb" de=scss="line" namo832p>o835p/a> struct pa href="+code=sctp_ulpevent" class="sref">sctp_ulpeventp/a> *1">o791p/a>.;.>1018773" idopL834" class="line" nam.o837p/a> struct pa href="+code=sk_buff" class="sref">sk_buffp/,ref="+code=sk_buffragsref">chunk_hdrpragt;paa href="+code=event" class="sref102ger)p/sp1014.101L751" idopL751" class="line" nam stack s" claures 6" ume3tha rcv uct p/a>p the event fields inside the cloned sk1023er)p/sp1014.psp808 " ce as06">o806p/a>pspa1 class="comment"4 1014er)p/sp10);.may3be0on aofingle UDP-stylelsocketld, holds the identifier for the associ1025er)p/sp10);.o local private ar6am"4 /kb Thirack s="ct_singd, holds the identifier for the associ1026er)p/sp10a>.;.:.;.o792p/a> pa href="+code=skb" class="sref">skbp/a> = pa href="+code=sctp_event2skb" class="sref">sctp_event2skbp/a>(pa href="+code=event" class="sref103ger)p/sp10>}. pa href="+code=namo792p/a> > - pa href="+code=sle const struct pale p/a>a href="+code=event" class="sref1031er)p/sp10a>.(.o792p/a> > - pa href="+code=skb" _le const struct pakb" _le p/a>1">o791p/a>.,.>10>L823" idopL8222222222go Tha href="+code=skoet/snst struct pakoetp/a>a href="+code=event" class="sref1034er)p/sp10>).5er)p/sp10>{.;.pdp/a>-&"na_walk_frag=_owner" class="sref"Lnamo792p/a> *pa href="+code=fragsref">chunk_hdrpragt;pa1 idopL834" class="line" nam;.o806p/a>pspa1 class="comment"4 1038er)p/sp10>;..>10>L809" idopL809" class="line" namo lvarlsld, holds the identifier for the associ104ger)p/sp10),.sk+code=sctp_ulprlleas>_frag_kb" de=scass="sref">pdapi_len7kb235p/a> struct pa h7kb235p/ade=scass="sref">pdapfragsref">chunk_hdrpragt;pa1pa href="+code=event" class="sref1042er)p/sp1092" idopL792" class="lin1092">10)2824" idopL82 idopL829" class="line" nam10)L743" idopL743" class="line" nam.10)L735" idopL735" class="line" href="+co""wnd_increas>const struct pa href="+co""wnd_increas>=sctp_event2skb" class="sref">sctp_event2skbp/a>(f="+code=data_hdr" cass="sref">sctp_assoc2idp/a *pa href="+code=le const struct pale p/a>pa href="+code=event" class="sref1046er)p/sp1014._/a> pa href="+code=sctp_ulprlleas>_/a> =sctp_event2skb" class="sref">sctp_event2skbp/a>(pa href="+code=event" class="sref1047er)p/sp1014.sk+code=sctp_ulprlleas>_frag_kb" de=scss="line" namo832p>o835p/a> struct pa href="+code=sctp_ulpevent" class="sref">sctp_ulpeventp/a> *1">o791p/a>..>10a>773" idopL834" class="line" namo837p/a> struct pa href="+code=sk_buff" class="sref">sk_buffp/,ref="+code=sk_buffragsref">chunk_hdrpragt;paa href="+code=event" class="sref1052er)p/sp10a>.o792p/a> pa href="+code=skb" class="sref">skbp/a> = pa href="+code=sctp_event2skb" class="sref">sctp_event2skbp/a>(pa href="+code=event" class="sref10a4er)p/sp10);.;.o792p/a> > - pa href="+code=skb" _le const struct pakb" _le p/a>1">o791p/a>.10aL756" idopL756" classgo Tha href="+code=skoet/snst struct pakoetp/a>a href="+code=event" class="sref1057er)p/sp10>;.pdp/a>-&"na_walk_frag=_owner" class="sref"Lnamo792p/a> *pa href="+code=fragsref">chunk_hdrpragt;pa1 idopL834" class="line" namo806p/a>pspa1 class="comment"4 1061er)p/sp10>;.10)L822" idopL822" class="line" namo lvarlsld, holds the identifier for the associ1063er)p/sp10a>.;.sk+code=sctp_ulprlleas>_frag_kb" de=scass="sref">pdapi_len7kb235p/a> struct pa h7kb235p/ade=scass="sref">pdapfragsref">chunk_hdrpragt;pa1pa href="+code=event" class="sref1065er)p/sp10a>.:.:.>10)L748" idopL748" class="line" code=sctp_ulprlleas>_/a> pa href="+code=sctp_ulprlleas>_/a> =sctp_event2skb" class="sref">sctp_event2skbp/a>(pa href="+code=event" class="sref1069er)p/sp10>;.}..manct_set. It1includes5">leas 5pemrefere>o7 the event fields inside the cloned sk1072er)p/sp1014.oofca code"" nam3and free 5pe the event fields inside the cloned sk1073er)p/sp1014.pspa1 class="comment"4 * various e10>4er)p/sp1014.o832p>o835p/a> struct pa href="+code=sctp_ulpevent" class="sref">sctp_ulpeventp/a> *1">o791p/a>.10>6773" idopL834" class="line" nampspa1> struct pa h=sctp_ulpisp808p/a>pspa1=sctp_event2skb" class="sref">sctp_event2skbp/a>(p1">o791p/a>.10>8823" idopL82222222224 href="+code=_+code=sctp_ulprlleas>_/a> pa href="+code=sctp_ulprlleas>_/a> =sctp_event2skb" class="sref">sctp_event2skbp/a>(pa href="+code=event" class="sref1079er)p/sp1014.(.>10>(823" idopL82222222224 href="+code=_+code=sctp_ulprlleas>_kb" class="sref">sk+code=sctp_ulprlleas>_kb" de=sc_event2skb" class="sref">sctp_event2skbp/a>(pa href="+code=event" class="sref1081er)p/sp10>,.).o792pkfree_Lnade=scass="sref">pdapi_len class="sref">skbp/a> = pa href="+code=sctp_event2skb" class="sref">sctp_event2skbp/a>(ppa href="+code=event" class="sref1083er)p/sp10>{.;.;.;.pdapi_lenqueue_purgie=sctp_ul="sref">pdp/a>-&"_lenqueue_purgie=sctp_ul=de=scss="line" namotruct clas837p/a> struct clasde=sctp_ulpevent" clalistconst struct palista> *1">o791p/a>..>10>7773" idopL834" class="line" namo837p/a> struct pa href="+code=sk_buff" class="sref">sk_buffp/a> *pa href="+code=skb" class="s10>9er)p/sp10);.pdapkb" _unrlas837p/a> kb" _unrlas pdapi_flags" class="sref">pdapi_f109ger)p/sp10>).;.o792p/a> pa href="+code=na_dequeue"sref">pdp/a>-&"na_dequeue=sctp_event2skb" clalistconst struct palista> *1) ! pa href="+codeNULLconst struct paNULLt;pa1 idopL834" class="line" nam.o832p>o835p/a> struct pa href="+code=sctp_ulpevent" class="sref">sctp_ulpeventp/a> * pa href="+code=skb"7kb235p/a> struct pa h7kb235p/ade=scass="sref">pdapLnamo792p/a> ydapi_flags" class="sref">pdapi_f1093er)p/sp10);.pspa1> struct pa h=sctp_ulpisp808p/a>pspa1=sctp_event2skb" class="sref">sctp_event2skbp/a>(p1">o791p/a>.10>L705" idopL705" classdidopL792" class="line"kb" _unrlas837p/a> kb" _unrlas + pa href="+code=namo792p/a> > - pa href="+code=sle const struct pale p/a>a href="+code=event" class="sref1096er)p/sp10a>.sctp_event2skbp/a>(pa href="+code=event" class="sref1098er)p/sp1014. kb" _unrlas a href="+code=event" class="sref11e1er)p/sp11e;..

1">ooriginal LXR softwar6"by08">odopL829" http://source9omge.clasprojects/lx >LXR ass=unity *5p/a>experi="lial versass"by0dopL829" mailto:lx @"neux.nopalx @"neux.no . lx ."neux.no kindly psstmmeby0dopL829" http://www.redpill-"nepro.nopaRedpill Lnepro AS *providp/aof Lneux32" sulti and opera1 cls"servio7s si>o741995.