linux/net/llc/llc_conn.c
<<
.6" .6" .6p/spa .6pspa class="lxr_search">.6" ="+search" method="post" onsubmit="return do_search(this);">.6" .6" .6" Search.6" .6p/spa " ="ajax+*" method="post" onsubmit="return false;">.6pinput typ"v3hidden" nam"v3ajax_lookup" idv3ajax_lookup" lue="v3">."
pdiv idv3file_contents"
o o1p/a>pspa
 class="comment">/*p/spa
  o o2p/a>pspa
 class="comment"> * llc_conn.c - Driver routines for connecio>
 component.p/spa
  o o3p/a>pspa
 class="comment"> *p/spa
  o o4p/a>pspa
 class="comment"> * Copyright (c) 1997 byoProcom Technology, Inc.p/spa
  o o5p/a>pspa
 class="comment"> *               2001-2003 byoArnaldo Carlueho de Melo <acme@coneciova.com.br>p/spa
  o o6p/a>pspa
 class="comment"> *p/spa
  o o7p/a>pspa
 class="comment"> * This program ca
 be redistributed or modified under the terms of thep/spa
  o o8p/a>pspa
 class="comment"> * GNU General Public License as published byothe Free Software Foundaio>
.p/spa
  o o9p/a>pspa
 class="comment"> * This program is distributed without any warranty or implied warrantyp/spa
  o 2pspa
 class="comment"> * of merchantability or fitness for a particular purpose.p/spa
  o 11p/a>pspa
 class="comment"> *p/spa
  o 12p/a>pspa
 class="comment"> * See the GNU General Public License for more details.p/spa
  o 13p/a>pspa
 class="comment"> */p/spa
  o 14p/a> o 15p/a>#include <linux/init.hp/a>> o 16p/a>#include <linux/slab.hp/a>> o 17p/a>#include <net/llc_sap.hp/a>> o 18p/a>#include <net/llc_conn.hp/a>> o 19p/a>#include <net/sock.hp/a>> o 20p/a>#include <net/tcp_states.hp/a>> o 21p/a>#include <net/llc_c_ev.hp/a>> o 22p/a>#include <net/llc_c_ac.hp/a>> o 23p/a>#include <net/llc_c_st.hp/a>> o 24p/a>#include <net/llc_pdu.hp/a>> o 25p/a> o 26p/a>#if 0 o 27p/a>#defineopa href="+code=dprintk" class="sref">dprintkp/a>(pa href="+code=args" class="sref">argsp/a>...)opa href="+code=printk" class="sref">printkp/a>(pa href="+code=KERN_DEBUG" class="sref">KERN_DEBUGp/a>opa href="+code=args" class="sref">argsp/a>) o 28p/a>#else o 29p/a>#defineopa href="+code=dprintk" class="sref">dprintkp/a>(pa href="+code=args" class="sref">argsp/a>...) o 30p/a>#endif o 31p/a> o 32p/a>static intopa href="+code=llc_find_offset" class="sref">llc_find_offsetp/a>(intopa href="+code=state" class="sref">statep/a>, intopa href="+code=ev_typ"" class="sref">ev_typ"p/a>); o 33p/a>static voidopa href="+code=llc_conn_send_pdus" class="sref">llc_conn_send_pdusp/a>(structopa href="+code=sock" class="sref">sockp/a>o*pa href="+code=sk" class="sref">skp/a>); o 34p/a>static intopa href="+code=llc_conn_service" class="sref">llc_conn_servicep/a>(structopa href="+code=sock" class="sref">sockp/a>o*pa href="+code=sk" class="sref">skp/a>, structopa href="+code=sk_buff" class="sref">sk_buffp/a>o*pa href="+code=skb" class="sref">skbp/a>); o 35p/a>static intopa href="+code=llc_exec_conn_trans_acio>
s" class="sref">llc_exec_conn_trans_acio>
sp/a>(structopa href="+code=sock" class="sref">sockp/a>o*pa href="+code=sk" class="sref">skp/a>, o 36p/a>                                       structopa href="+code=llc_conn_state_trans" class="sref">llc_conn_state_transp/a>o*pa href="+code=trans" class="sref">transp/a>, o 37p/a>                                       structopa href="+code=sk_buff" class="sref">sk_buffp/a>o*pa href="+code=ev" class="sref">evp/a>); o 38p/a>static structopa href="+code=llc_conn_state_trans" class="sref">llc_conn_state_transp/a>o*pa href="+code=llc_qualify_conn_ev" class="sref">llc_qualify_conn_evp/a>(structopa href="+code=sock" class="sref">sockp/a>o*pa href="+code=sk" class="sref">skp/a>, o 39p/a>                                                        structopa href="+code=sk_buff" class="sref">sk_buffp/a>o*pa href="+code=skb" class="sref">skbp/a>); o 40p/a> o 41p/a>pspa
 class="comment">/* Offset table >
 connecio>
 states transiio>
 diagram */p/spa
  o 42p/a>static intopa href="+code=llc_offset_table" class="sref">llc_offset_tablep/a>[pa href="+code=NBR_CONN_STATES" class="sref">NBR_CONN_STATESp/a>][pa href="+code=NBR_CONN_EV" class="sref">NBR_CONN_EVp/a>]; o 43p/a> o 44p/a>intopa href="+code=sysctl_llc2_ack_timeout" class="sref">sysctl_llc2_ack_timeoutp/a>o=opa href="+code=LLC2_ACK_TIME" class="sref">LLC2_ACK_TIMEp/a>o*opa href="+code=HZ" class="sref">HZp/a>; o 45p/a>intopa href="+code=sysctl_llc2_p_timeout" class="sref">sysctl_llc2_p_timeoutp/a>o=opa href="+code=LLC2_P_TIME" class="sref">LLC2_P_TIMEp/a>o*opa href="+code=HZ" class="sref">HZp/a>; o 46p/a>intopa href="+code=sysctl_llc2_rej_timeout" class="sref">sysctl_llc2_rej_timeoutp/a>o=opa href="+code=LLC2_REJ_TIME" class="sref">LLC2_REJ_TIMEp/a>o*opa href="+code=HZ" class="sref">HZp/a>; o 47p/a>intopa href="+code=sysctl_llc2_busy_timeout" class="sref">sysctl_llc2_busy_timeoutp/a>o=opa href="+code=LLC2_BUSY_TIME" class="sref">LLC2_BUSY_TIMEp/a>o*opa href="+code=HZ" class="sref">HZp/a>; o 48p/a> o 49p/a>pspa
 class="comment">/**p/spa
  o 5pspa
 class="comment"> *      llc_conn_state_process - sends event to connecio>
 state machinep/spa
  o 51p/a>pspa
 class="comment"> *      @sk: connecio>
p/spa
  o 52p/a>pspa
 class="comment"> *      @skb: occurred eventp/spa
  o 53p/a>pspa
 class="comment"> *p/spa
  o 54p/a>pspa
 class="comment"> *      Sends a
 event to connecio>
 state machine. After processing eventp/spa
  o 55p/a>pspa
 class="comment"> *      (executing it's acio>
s a
d changing state), upper layer will bep/spa
  o 56p/a>pspa
 class="comment"> *      indicated or confirmed, if needed. Returns 0 for success, 1 forp/spa
  o 57p/a>pspa
 class="comment"> *      failure. The socket lock has to be held before calling this funcio>
.p/spa
  o 58p/a>pspa
 class="comment"> */p/spa
  o 59p/a>intopa href="+code=llc_conn_state_process" class="sref">llc_conn_state_processp/a>(structopa href="+code=sock" class="sref">sockp/a>o*pa href="+code=sk" class="sref">skp/a>, structopa href="+code=sk_buff" class="sref">sk_buffp/a>o*pa href="+code=skb" class="sref">skbp/a>) o 6{ o 61p/a>        intopa href="+code=rc" class="sref">rcp/a>; o 62p/a>        structopa href="+code=llc_sock" class="sref">llc_sockp/a>o*pa href="+code=llc" class="sref">llcp/a>o=opa href="+code=llc_sk" class="sref">llc_skp/a>(pa href="+code=skb" class="sref">skbp/a>->pa href="+code=sk" class="sref">skp/a>); o 63p/a>        structopa href="+code=llc_conn_state_ev" class="sref">llc_conn_state_evp/a>o*pa href="+code=ev" class="sref">evp/a>o=opa href="+code=llc_conn_ev" class="sref">llc_conn_evp/a>(pa href="+code=skb" class="sref">skbp/a>); o 64p/a> o 65p/a>        pspa
 class="comment">/*p/spa
  o 66p/a>pspa
 class="comment">         * We have to hold the skb, because llc_conn_service will kfree it inp/spa
  o 67p/a>pspa
 class="comment">         * the sending path a
d we need to look at the skb->cb, where we encodep/spa
  o 68p/a>pspa
 class="comment">         * llc_conn_state_ev.p/spa
  o 69p/a>pspa
 class="comment">         */p/spa
  o 70p/a>        pa href="+code=skb_get" class="sref">skb_getp/a>(pa href="+code=skb" class="sref">skbp/a>); o 71p/a>        pa href="+code=ev" class="sref">evp/a>->pa href="+code=ind_prim" class="sref">ind_primp/a>o=opa href="+code=ev" class="sref">evp/a>->pa href="+code=cfm_prim" class="sref">cfm_primp/a>o=o0; o 72p/a>        pspa
 class="comment">/*p/spa
  o 73p/a>pspa
 class="comment">         * Send event to state machinep/spa
  o 74p/a>pspa
 class="comment">         */p/spa
  o 75p/a>        pa href="+code=rc" class="sref">rcp/a>o=opa href="+code=llc_conn_service" class="sref">llc_conn_servicep/a>(pa href="+code=skb" class="sref">skbp/a>->pa href="+code=sk" class="sref">skp/a>, pa href="+code=skb" class="sref">skbp/a>); o 76p/a>        if (pa href="+code=unlikely" class="sref">unlikelyp/a>(pa href="+code=rc" class="sref">rcp/a>o!=o0)) { o 77p/a>                pa href="+code=printk" class="sref">printkp/a>(pa href="+code=KERN_ERR" class="sref">KERN_ERRp/a>opspa
 class="string">"%s: llc_conn_service failed\n"p/spa
 , pa href="+code=__func__" class="sref">__func__p/a>); o 78p/a>                goto pa href="+code=out_kfree_skb" class="sref">out_kfree_skbp/a>; o 79p/a>        } o 80p/a> o 81p/a>        if (pa href="+code=unlikely" class="sref">unlikelyp/a>(!pa href="+code=ev" class="sref">evp/a>->pa href="+code=ind_prim" class="sref">ind_primp/a>o&& !pa href="+code=ev" class="sref">evp/a>->pa href="+code=cfm_prim" class="sref">cfm_primp/a>)) { o 82p/a>                pspa
 class="comment">/* indicate or confirm not required */p/spa
  o 83p/a>                if (!pa href="+code=skb" class="sref">skbp/a>->pa href="+code=next" class="sref">nextp/a>) o 84p/a>                        goto pa href="+code=out_kfree_skb" class="sref">out_kfree_skbp/a>; o 85p/a>                goto pa href="+code=out_skb_put" class="sref">out_skb_putp/a>; o 86p/a>        } o 87p/a> o 88p/a>        if (pa href="+code=unlikely" class="sref">unlikelyp/a>(pa href="+code=ev" class="sref">evp/a>->pa href="+code=ind_prim" class="sref">ind_primp/a>o&& pa href="+code=ev" class="sref">evp/a>->pa href="+code=cfm_prim" class="sref">cfm_primp/a>)) pspa
 class="comment">/* Paranoia */p/spa
  o 89p/a>                pa href="+code=skb_get" class="sref">skb_getp/a>(pa href="+code=skb" class="sref">skbp/a>); o 90p/a> o 91p/a>        switch (pa href="+code=ev" class="sref">evp/a>->pa href="+code=ind_prim" class="sref">ind_primp/a>) { o 92p/a>        caseopa href="+code=LLC_DATA_PRIM" class="sref">LLC_DATA_PRIMp/a>: o 93p/a>                pa href="+code=llc_save_primitive" class="sref">llc_save_primitivep/a>(pa href="+code=sk" class="sref">skp/a>, pa href="+code=skb" class="sref">skbp/a>, pa href="+code=LLC_DATA_PRIM" class="sref">LLC_DATA_PRIMp/a>); o 94p/a>                if (pa href="+code=unlikely" class="sref">unlikelyp/a>(pa href="+code=sock_queue_rcv_skb" class="sref">sock_queue_rcv_skbp/a>(pa href="+code=sk" class="sref">skp/a>, pa href="+code=skb" class="sref">skbp/a>))) { o 95p/a>                        pspa
 class="comment">/*p/spa
  o 96p/a>pspa
 class="comment">                         * shouldn't happenp/spa
  o 97p/a>pspa
 class="comment">                         */p/spa
  o 98p/a>                        pa href="+code=printk" class="sref">printkp/a>(pa href="+code=KERN_ERR" class="sref">KERN_ERRp/a>opspa
 class="string">"%s: sock_queue_rcv_skb failed!\n"p/spa
 , o 99p/a>                               pa href="+code=__func__" class="sref">__func__p/a>); o100p/a>                        pa href="+code=kfree_skb" class="sref">kfree_skbp/a>(pa href="+code=skb" class="sref">skbp/a>); o101p/a>                } o102p/a>                break; o103p/a>        caseopa href="+code=LLC_CONN_PRIM" class="sref">LLC_CONN_PRIMp/a>: o104p/a>                pspa
 class="comment">/*p/spa
  o105p/a>pspa
 class="comment">                 * Can't be sock_queue_rcv_skb, because we have to leave thep/spa
  o106p/a>pspa
 class="comment">                 * skb->sk pointing to the newly created structosock inp/spa
  o107p/a>pspa
 class="comment">                 * llc_conn_handler. -acmep/spa
  o108p/a>pspa
 class="comment">                 */p/spa
  o109p/a>                pa href="+code=skb_queue_tail" class="sref">skb_queue_tailp/a>(&pa href="+code=sk" class="sref">skp/a>->pa href="+code=sk_receive_queue" class="sref">sk_receive_queuep/a>, pa href="+code=skb" class="sref">skbp/a>); o110p/a>                pa href="+code=sk" class="sref">skp/a>->pa href="+code=sk_state_change" class="sref">sk_state_changep/a>(pa href="+code=sk" class="sref">skp/a>); o111p/a>                break; o112p/a>        caseopa href="+code=LLC_DISC_PRIM" class="sref">LLC_DISC_PRIMp/a>: o113p/a>                pa href="+code=sock_hold" class="sref">sock_holdp/a>(pa href="+code=sk" class="sref">skp/a>); o114p/a>                if (pa href="+code=sk" class="sref">skp/a>->pa href="+code=sk_typ"" class="sref">sk_typ"p/a>o==opa href="+code=SOCK_STREAM" class="sref">SOCK_STREAMp/a>o&& o115p/a>                    pa href="+code=sk" class="sref">skp/a>->pa href="+code=sk_state" class="sref">sk_statep/a>o==opa href="+code=TCP_ESTABLISHED" class="sref">TCP_ESTABLISHEDp/a>) { o116p/a>                        pa href="+code=sk" class="sref">skp/a>->pa href="+code=sk_shutdown" class="sref">sk_shutdownp/a>       =opa href="+code=SHUTDOWN_MASK" class="sref">SHUTDOWN_MASKp/a>; o117p/a>                        pa href="+code=sk" class="sref">skp/a>->pa href="+code=sk_socket" class="sref">sk_socketp/a>->pa href="+code=state" class="sref">statep/a>  =opa href="+code=SS_UNCONNECTED" class="sref">SS_UNCONNECTEDp/a>; o118p/a>                        pa href="+code=sk" class="sref">skp/a>->pa href="+code=sk_state" class="sref">sk_statep/a>oooooooooo=opa href="+code=TCP_CLOSE" class="sref">TCP_CLOSEp/a>; o119p/a>                        if (!pa href="+code=sock_flag" class="sref">sock_flagp/a>(pa href="+code=sk" class="sref">skp/a>, pa href="+code=SOCK_DEAD" class="sref">SOCK_DEADp/a>)) { o120p/a>                                pa href="+code=sock_set_flag" class="sref">sock_set_flagp/a>(pa href="+code=sk" class="sref">skp/a>, pa href="+code=SOCK_DEAD" class="sref">SOCK_DEADp/a>); o121p/a>                                pa href="+code=sk" class="sref">skp/a>->pa href="+code=sk_state_change" class="sref">sk_state_changep/a>(pa href="+code=sk" class="sref">skp/a>); o122p/a>                        } o123p/a>                } o124p/a>                pa href="+code=kfree_skb" class="sref">kfree_skbp/a>(pa href="+code=skb" class="sref">skbp/a>); o125p/a>                pa href="+code=sock_put" class="sref">sock_putp/a>(pa href="+code=sk" class="sref">skp/a>); o126p/a>                break; o127p/a>        caseopa href="+code=LLC_RESET_PRIM" class="sref">LLC_RESET_PRIMp/a>: o128p/a>                pspa
 class="comment">/*p/spa
  o129p/a>pspa
 class="comment">                 * FIXME:p/spa
  o13pspa
 class="comment">                 * RESET is not being notified to upper layers for nowp/spa
  o131p/a>pspa
 class="comment">                 */p/spa
  o132p/a>                pa href="+code=printk" class="sref">printkp/a>(pa href="+code=KERN_INFO" class="sref">KERN_INFOp/a>opspa
 class="string">"%s: received a reset ind!\n"p/spa
 , pa href="+code=__func__" class="sref">__func__p/a>); o133p/a>                pa href="+code=kfree_skb" class="sref">kfree_skbp/a>(pa href="+code=skb" class="sref">skbp/a>); o134p/a>                break; o135p/a>        default: o136p/a>                if (pa href="+code=ev" class="sref">evp/a>->pa href="+code=ind_prim" class="sref">ind_primp/a>) { o137p/a>                        pa href="+code=printk" class="sref">printkp/a>(pa href="+code=KERN_INFO" class="sref">KERN_INFOp/a>opspa
 class="string">"%s: received unknown %d prim!\n"p/spa
 , o138p/a>                                pa href="+code=__func__" class="sref">__func__p/a>, pa href="+code=ev" class="sref">evp/a>->pa href="+code=ind_prim" class="sref">ind_primp/a>); o139p/a>                        pa href="+code=kfree_skb" class="sref">kfree_skbp/a>(pa href="+code=skb" class="sref">skbp/a>); o*opa href="+code=HZ140">o14# ea>                } o121p/f">cfm_primp/a>)) pspa
 cNoclass="c
 ev class="comment"> */p/spa
  o102p/a>                break;                 } o 14p/a> o 91p/a>        switch (pa href="+code=ev" class="sref">evp/a>->pa href="+code=cfm_prim" class="sref">ind_primp/a>) { o 92p/a>        caseopa href="+code=LLC_DATA_PRIM" class="sref">LLC_DATA_PRIMp/a>: o137p/                  if kfree_skbp/lo*pa href="+code=llc" clref">sk_socketp/a>->pa href="+code=state" clas)ss="sref">nextp/a>) o118p/a>                        pa href="+code=sk" class="sref">skp/a>->writ clpaode=llc_conn_servgt;writ clpaodss="sref">sock_putp/a>(pa href="+code=sk" class="sref">skp/a>); o139p/m"v3L28">o 28p/a>#else o100p/a>                        pa href="+code=rc" class="sref">rcp/a>o=opa href="+code=llc" clref">sk_socketp/a>-&ock_qu data_reqpa href="+code=ock_qu data_reqc" clas1ass="sref">skp/a>); o111p/a>                break; o112p/a>        caseopa href="+code=LLC_CONN_PRIM" class="sref">LLC_CONN_PRIMp/a>: o 83p/a>                if (pa href="+code=sk" class="sref">skp/a>->pa href="+code=sk_typ"" class="sref">sk_typ"p/a>o==opa href="+code=SOCK_STREAM" class="sref">SOCK_STREAMp/a>o&& o 84p/a>                    pa href="+code=sk" class="sref">skp/a>->pa href="+code=sk_state" class="sref">sk_statep/a>o==opSYN_SENTf="+code=TCP_CLOSE"SYN_SENTss="sref">ind_primp/a>) { o 95p/a>      a>                if (pa href="+code=ev" class="sref">evp/a>-&" cle=llc_conn_send_p" cle=ss="sref">ind_primp/a>) { o 36p/a>                                pa href="+code=sk" class="sref">skp/a>->pa href="+code=sk_socket" class="sref">sk_socketp/a>->pa href="+code=state" class"sref">statep/a>  =opa href="+code=SS_UNCONNECTED" class="sref">SS_UNCONNECTEDp/a>; o 37p/a>                                pa href="+code=sk" class="sref">skp/a>->pa href="+code=sk_state" class="sref">sk_tatep/a>oooooooooo=opa href="+code=TCP_CLOSE" class="sref">TCP_CLOSEp/a>; o118p/a>      }/m"v3ref">ind_primp/a>) { o 39p/a>                                pa href="+code=sk" class="sref">skp/a>->pa href="+code=sk_socket" class="sref">sk_socketp/a>->pa href="+code=state" class"sref">statep/a>  =o href="+code=SS_UNCONNECTEDclass="sref">SS_UNCONNECTEDp/a>; o120p/a>                                pa href="+code=sk" class="sref">skp/a>->pa href="+code=sk_state" class="sref">sk_tatep/a>oooooooooo=opa href="+code=TCP_ESTABLISHED" class="sref">TSS_UNCONNECTEDp/a>; o121p/a>      a>                } o122p/a>                        pa href="+code=sk" class="sref">skp/a>->pa href="+code=sk_state_change" class="sref">sk_state_changep/a>(pa href="+code=sk" class="sref">skp/a>); o123p/a>                } o134p/a>                break; o112p/a>        caseopa href="+code=LLC_DISC_PRIM" class="sref">LLC_DISC_PRIMp/a>: o 36p/a>                pa href="+code=sock_hold" class="sref">sock_holdp/a>(pa href="+code=sk" class="sref">skp/a>); o137p/                  if (pa href="+code=sk" class="sref">skp/a>->pa href="+code=sk_typ"" class="sref">sk_typ"p/a>o==opa href="+code=SOCK_STREAM" class="sref">SOCK_STR                   pa href="+code=sk" class="sref">skp/a>->pa href="+code=sk_state" class="sref">sk_statep/a>o==op claINf="+code=KERN_DE==op claINfss="sref">ind_primp/a>) { o118p/a>                        pa href="+code=sk" class="sref">skp/a>->pa href="+code=sk_socket" class="sref">sk_socketp/a>->pa href="+code=state" class"sref">statep/a>  =opa href="+code=SS_UNCONNECTED" class="sref">SS_UNCONNECTEDp/a>; o139p/a>                        pa href="+code=sk" class="sref">skp/a>->pa href="+code=sk_state" class="sref">sk_tatep/a>oooooooooo=opa href="+code=TCP_CLOSE" class="sref">TCP_CLOSEp/a>; o100p/a>                        pa href="+code=sk" class="sref">skp/a>->pa href="+code=sk_state_change" class="sref">sk_state_changep/a>(pa href="+code=sk" class="sref">skp/a>); o101p/a>                } o132p/a>                pa href="+code=sock_put" class="sref">sock_putp/a>(pa href="+code=sk" class="sref">skp/a>); o123p/a>                break; o112p/a>        caseopa href="+code=LLC_RESET_PRIM" class="sref">LLC_RESET_PRIMp/a>: o125p/a>                pspa
 class="comment">/*p/spa
  o106p/a>pspa
 class="comment">                 * FIXME:p/spa
  o107p/a>pspa
 class="comment">                 * RESET is not being notified to upper layers for nowp/spa
  o108p/a>pspa
 class="comment">                 */p/spa
  o109p/a>                pa href="+code=printk" class="sref">printkp/a>(pa href="+code=KERN_INFO" class="sref">KERN_INFOp/a>opspa
 class="string">"%s:t">/ceived a reset ind!\n"p/spa
 , pa href="+code=__func__" class="sref">__func__p/a>); o100p/a>                break; o135p/a>        default: o 82p/a>                if (pa href="+code=ev" class="sref">evp/a>->pa href="+code=cfm_prim" class="sref">ind_primp/a>) { o 83p/">o109p/a>                pa href="+code=printk" class="sref">printkp/a>(pa href="+code=KERN_INFO" class="sref">KERN_INFOp/a>opspa
 class="string">"%s: received unknown %d prim!\n"p/spa
 , o 84p/a>      ">o 83p/">o109p/a>                pa href="+code=__func__" class="sref">__func__p/a>, pa href="+code=ev" class="sref">evp/a>->pa href="+code=cfm_prim" class="s             break; o 85p/">o100p/a>                break; o 36p/a>                } o137p/a>                goto pa href="+code=out_skb_put" class="sref/f">cfm_primp/a>)) pspa
 cNoct">/* i"c
 ev class="comment"> */p/spa
                  }         default: o 70p/a>        pa href="+code=kfree_skb" class="sref">kfree_skbp/a>(pa href="+code=skb" class="sref">skbp/a>); o 70p/a>        pa href="+code=kfree_skb" class="sref">kfree_skbp/a>(pa href="+code=skb" class="sref">skbp/a>);         intopa href="+code=rc" class="sref">rcp/a>;                 } o 25p/a> o 33p/a>static voidopa href="+codeef="+code=sk_st (structopa href="+code=sock" class="sref">sockp/a>o*pa href="+code=sk" class="sref">skp/a>, structopa href="+code=sk_buff" class="sref">sk_buffp/a>o*pa href="+code=skb" class="sref">skbp/a>) ind_primp/a>) { cfm_primp/a>)) pspa
 c"sref PDU     ment   MACging st class="comment"> */p/spa
  sk_buffp/a>o*pa href="+code=skb_queue_tail" class="sref">skb_queue_tailp/a>(&pa href="+code=sk" class="sref">skp/a>->writ c"+code=sk_receive_queuewrit c"+codss="sref">__func__p/aa>(pa href="+code=skb" class="sref">skbp/a>); o 70p/a>      llc_cref">sock_putp/a>(pa href="+code=sk" class="sref">skp/a>);                 }                 } o 73p/a>pspa
 class="comment">/**p/spa
  o 54p/a>pspa
 class=dus" clasrtnref"conn_statng">"data ef"cot being notiflass="comment">/**p/spa
  o105p/a>pspa
 class="commAcef">ment"> *      @sk: connecio>
p/spa
  o106p/a>pspa
 class="commeRg">"data fra_conn_handler. -acmep/spa
  o107p/a>pspa
class="comment">/**p/spa
  o108p/a>pspa
 class="commeng">"data ef"cot being notif (by uhine.lass="comfore cal) llc_conn_state_ev.p/spa
  o129p/a>pspa
 class=Prepares ;%s:par09"tifie( cla* the cla data). to be helass="c
 ellc_conn_state_ev.p/spa
  o 5pspa
 class=fore caltate), u doneela="comment"> *      llc_ llc_conn_state_ev.p/spa
  o 51p/a>pspa
 class="comment"> */p/spa
  o 33p/a>static voidopa hrertnref"llc_conn_send_pdus" clasrtnref"s="srstate_processp/a>(structopa href="+code=sock" class="sref">sockp/a>o*pa href="+code=sk" class="sref">skp/a>, structopa href="+code=sk_buff" class="sref">sk_buffp/a>o*pa href="+code=skb" class="sref">skbp/a>) ind_primp/a>) { o 63p/a>        structopa href="+code=llc_conn_state_ev" class="sref">llc_conn_state_evp/a>o*pa href="+code=ev" class="sref">evp/a>o=opa href="+code=llc_conn_ev" class="sref">llc_conn_evp/a>(pa href="+code=skb" class="sref">skbp/a>); o 25p/a> __func__p/a>, pa href="+code=ev" class="sref">evp/a>->pa href="+code=ind_prim" class="sref">ind_primp/a>seopa href="+code=LLC_DATA_PRIM" class="sref"ss="sref">skbp/a>);                 } o 48p/a> o 49p/a>pspa
 class="comment">/**p/spa
  o 5pspa
 class="comment"#37;im"iref"_as_cmdcon#37;im o b o b unac#37;ledguotI PDUslass="comment">/**p/spa
  o 51p/a>pspa
 class="commacef">ment"> *      @sk: connecio>
p/spa
  o 52p/a>pspa
 class="nr: NR   @sk: connecio>
p/spa
  o 53p/a>pspa
 class="first_p_bit: p_bit valef of first ef"s= @sk: connecio>
p/spa
  o 54p/a>pspa
 s= @sk: connecio>
p/spa
  o105p/a>pspa
 class=R37;im o b unac#37;ledguotI PDUslassar * skwith>sNR;  mentfirst aslass="comment">/**p/spa
  o106p/a>pspa
 class=6p/a thePDU with&P bit equal first_p_bit;/a> mhas th3L1onee menlass="comment">/**p/spa
  o 57p/a>pspa
 class=subsequ    as=6p/a thePDUs with&P bit equal zero (0) llc_conn_state_ev.p/spa
  o 58p/a>pspa
 class="comment"> */p/spa
  o 33p/a>static voidopa hrer37;im"iref"_as_cmdllc_conn_send_pdus" clasr37;im"iref"_as_cmds="srstate_processp/a>(structopa href="+code=sock" class="sref">sockp/a>o*pa href="+code=sk" cla="sref">sockp/au8*pa href="+codeune" na="sref">sockp/anr*pa href="+codenrk" cla="sref">sockp/au8*pa href="+codeune" na="sref">sockp/afirst_p_bit*pa href="+codefirst_p_bit" class="sref">skbp/a>) o 6{ o 63p/a>        structopa href="+code=sk_buff" class="sref">sk_buffp/a>o*pa href="+code=skb" clss="sref">skbp/a>); o 63p/a>        structopef"_s="+code=sk_shutdctopef"_s=ass="sref">sk_buffp/aef"llc_conn_send_pef"s="sss="sref">skbp/a>); sockp/auonn.c#L116""+codeune" nam="sref">sockp/anbr_unac#code=llc_conn_send_pnbr_unac#code=s="sss="sref">skbp/a>); o 63p/a>        structopa href="+code=llc_sock" class="sref">llc_sockp/a>o*pa href="+code=llc" clss="sref">skbp/a>); sockp/au8*pa href="+codeune" na="sref">sockp/ahowa tysr37;im*pa href="+codehowa tysr37;imss="sref">cfm_primp/a>o=o0; cfm_primp/a>o=o0; static voidopa hrer3move_ac#e+code=llc_conn_send_pdus" clasr3move_ac#e+code=llc_cref">sock_putp/a>(pa href="+code=sk" cla="sref">sockp/anr*pa href="+codenrk" clakb_queue_tailp/a>(&anbr_unac#code=llc_conn_send_pnbr_unac#code=s="sass="sref">skbp/a>); o               ifnbr_unac#code=llc_conn_send_pnbr_unac#code=s="sas="sref">skbp/a>); o139p/a>                goto "+code=out_skb_put" clss="sref">skbp/a>); o*2pa hr2f="+code=HZ140a>                pspa
 class="comment">/*p/spa
  o131p/a>pspa
 class="* P  llc_ unac#ePDUs only8">ounac#e"sref        empty; r3moveclass="comment">/*p/spa
  o 52p/a>pspa
 class="* appropri"comPDUslafix>m up,* the ut>m onend pef"_q llc_conn_state_ev.p/spa
  o 73p/a>pspa
 class="cclass="comment"> */p/spa
  static voidopa href="+code=llc" class="sref">llcp/a>o=opa href="+code=llc_sk" class="sref">llc_skp/a>(pa href="+code=sk" class="sref">skp/a>); o 25p/a> llc_conn_evp/a>(pa href="+code=skb" class="sref">llcp/a>ail"de"+code=sk_receive_queul"de"+codef">skb_queue_tailp/a>(&aidopa href="+code=llc" cllass="sref">evp/a>-&ef"_unac#cqpa href="+code=ef"_unac#cqk" cl)lass"sref">evp/a>-&NULLpa href="+code=NULLk" clref">ind_primp/a>) { o137p/ref">sk_buffp/aef"llc_conn_send_pef"s="sass="sref">llcp/a>o=opef"_s=_hdr*pa href="+codeo=opef"_s=_hdr"sref">llc_conn_evp/a>(pa href="+code=skb" class="sref">skbp/a>); o118p/="sref">llcp/a>o=opef"_set_cmd_rsp*pa href="+codeo=opef"_set_cmd_rsp"sref">llc_conn_evp/a>(pa href="+code=skb" class="sref">skbp/a>, pPDU_CMcode=SS_UNCONNEC>, pPDU_CMc" class="sref">skbp/a>); o139p/="sref">llcp/a>o=opef"_set_pf_bit*pa href="+codeo=opef"_set_pf_bit"sref">llc_conn_evp/a>(pa href="+code=skb" class="sref">skbp/afirst_p_bit*pa href="+codefirst_p_bit" class="sref">skbp/a>); o100p/ref">sk_buffp/a>o*pa href="+code=skb_queue_tail" class="sref">skb_queue_tailp/a>(&pa href="+code=sk" class="sref">skp/a>->writ c"+code=sk_receive_queuewrit c"+codss="sref">__func__p/aa>(pa href="+code=skb" class="sref">skbp/a>); o111p/s="sref">skbp/afirst_p_bit*pa href="+codefirst_p_bit" clsref">cfm_primp/a>o=o0; o132p/a>             idopa href="+code=llc" cllass="sref">evp/a>-&vSpa href="+code=vSss="sref">ind_primp/a>seopI_GET_NSpa href="+code=seopI_GET_NS"sref">llc_conn_evp/ef"llc_conn_send_pef"s="sass="sref">skbp/a>); o 83p/="sref">sockp/ahowa tysr37;im*pa href="+codehowa tysr37;imss="++ss="sref">skbp/a>);                 }                 ihowa tysr37;im*pa href="+codehowa tysr37;imss="sass= 0as="sref">skbp/a>); o 36p/a>             idopa href="+code=llc" cllass="sref">evp/a>-&vSpa href="+code=vSss="sreref">kfree_skbp/lo*pa href="+code=llc" clref">sk_socketp/a>-&vSpa href="+code=vSss="s+ 1): receef">ind_primp/a>seop2_SEQ_NBR_MODULef="+code=KERN_Iseop2_SEQ_NBR_MODULe" clss="sref">skbp/a>); cfm_primp/a>)) pspa
 c tyePDUs    re-7;im oree"srefd up;assar e men* skb-&MACgcclass="comment"> */p/spa
  o 70p/a>      llc_cref">sock_putp/a>(pa href="+code=sk" class="sref">skp/a>); skp/a>);                 }                 } o 52p/a>pspa
 class="comment">/**p/spa
  o 53p/a>pspa
 class=dus" clasr37;im"iref"_as_rsp -=R37;im o b unac#37;ledguotI PDUslass="comment">/**p/spa
  o 54p/a>pspa
 class="commacef">ment"> *    llc_conn_state_ev.p/spa
  o105p/a>pspa
 class="nr: NR   @sk: connecio>
p/spa
  o106p/a>pspa
 class="first_f_bit: f_bit valef of first ef" llc_conn_state_ev.p/spa
  o107p/a>pspa
class="comment">/**p/spa
  o108p/a>pspa
 class=R37;im o b unac#37;ledguotI PDUslassar * skwith>sNR;  mentfirst aslass="comment">/**p/spa
  o129p/a>pspa
 class=r37ponseePDU with&F bit equal first_f_bit;/a> mhas th3L1onee menlass="comment">/**p/spa
  o 5pspa
 class=subsequ    as=r37ponseePDUs with&F bit equal zero (0) llc_conn_state_ev.p/spa
  o 51p/a>pspa
 class="comment"> */p/spa
  o 33p/a>static voidopa hrer37;im"iref"_as_rspllc_conn_send_pdus" clasr37;im"iref"_as_rsp"srefstate_processp/a>(structopa href="+code=sock" class="sref">sockp/a>o*pa href="+code=sk" cla="sref">sockp/au8*pa href="+codeune" na="sref">sockp/anr*pa href="+codenrk" cla="sref">sockp/au8*pa href="+codeune" na="sref">sockp/afirst_f_bit*pa href="+codefirst_f_bits="sas="sref">skbp/a>); ind_primp/a>) { o 63p/a>        structopa href="+code=sk_buff" class="sref">sk_buffp/a>o*pa href="+code=skb" clss="sref">skbp/a>); sockp/auonn.c#L116""+codeune" nam="sref">sockp/anbr_unac#code=llc_conn_send_pnbr_unac#code=s="sss="sref">skbp/a>); o 63p/a>        structopa href="+code=llc_sock" class="sref">llc_sockp/a>o*pa href="+code=llc" class="sref">llcp/a>o=opa href="+code=llc_sk" class="sref">llc_skp/a>(pa href="+code=sk" class="sref">skp/a>); static vou8*pa href="+codeune" na="sref">sockp/ahowa tysr37;im*pa href="+codehowa tysr37;imss="sref">cfm_primp/a>o=o0; o 48p/a> sk_buffp/aidopa hrer3move_ac#e+code=llc_conn_send_pdus" clasr3move_ac#e+code=llc_cref">sock_putp/a>(pa href="+code=sk" cla="sref">sockp/anr*pa href="+codenrk" clakb_queue_tailp/a>(&anbr_unac#code=llc_conn_send_pnbr_unac#code=s="sass="sref">skbp/a>); o               ifnbr_unac#code=llc_conn_send_pnbr_unac#code=s="sas="sref">skbp/a>); o111p/a>                goto "+code=out_skb_put" clss="sref">skbp/a>);                 pspa
 class="comment">/*p/spa
  o 73p/a>pspa
 class="c P  llc_ unac#ePDUs only8">ounac#e"sref        empty; r3moveclass="comment">/*p/spa
  o 54p/a>pspa
 class="c appropri"comPDUslafix>m up,* the ut>m onend pef"_qclass="comment">/*p/spa
  o105p/a>pspa
 class=" class="comment"> */p/spa
  llc_conn_evp/a>(pa href="+code=skb" class="sref">llcp/a>ail"de"+code=sk_receive_queul"de"+codef">skb_queue_tailp/a>(&aidopa href="+code=llc" cllass="sref">evp/a>-&ef"_unac#cqpa href="+code=ef"_unac#cqk" cl)lass"sref">evp/a>-&NULLpa href="+code=NULLk" clref">ind_primp/a>) { o137p/">o 63p/a>        structopef"_s="+code=sk_shutdctopef"_s=ass="sref">sk_buffp/aef"llc_conn_send_pef"s="sass="sref">llcp/a>o=opef"_s=_hdr*pa href="+codeo=opef"_s=_hdr"sref">llc_conn_evp/a>(pa href="+code=skb" class="sref">skbp/a>); o 48p/a> o139p/="sref">llcp/a>o=opef"_set_cmd_rsp*pa href="+codeo=opef"_set_cmd_rsp"sref">llc_conn_evp/a>(pa href="+code=skb" class="sref">skbp/a>, pPDU_RSPode=SS_UNCONNEC>, pPDU_RSP" class="sref">skbp/a>); o100p/ref">sk_buffp/ao=opef"_set_pf_bit*pa href="+codeo=opef"_set_pf_bit"sref">llc_conn_evp/a>(pa href="+code=skb" class="sref">skbp/afirst_f_bit*pa href="+codefirst_f_bits="sass="sref">skbp/a>); o111p/s="sref">skbp/a>o*pa href="+code=skb_queue_tail" class="sref">skb_queue_tailp/a>(&pa href="+code=sk" class="sref">skp/a>->writ c"+code=sk_receive_queuewrit c"+codss="sref">__func__p/aa>(pa href="+code=skb" class="sref">skbp/a>); o132p/a>             first_f_bit*pa href="+codefirst_f_bits="ssref">cfm_primp/a>o=o0; o 83p/="sref">sockp/aidopa href="+code=llc" cllass="sref">evp/a>-&vSpa href="+code=vSss="sref">ind_primp/a>seopI_GET_NSpa href="+code=seopI_GET_NS"sref">llc_conn_evp/ef"llc_conn_send_pef"s="sass="sref">skbp/a>); o124p/a>             howa tysr37;im*pa href="+codehowa tysr37;imss="++ss="sref">skbp/a>);                 }                 ihowa tysr37;im*pa href="+codehowa tysr37;imss="sass= 0as="sref">skbp/a>); o137p/ref">sk_buffp/aidopa href="+code=llc" cllass="sref">evp/a>-&vSpa href="+code=vSss="sreref">kfree_skbp/lo*pa href="+code=llc" clref">sk_socketp/a>-&vSpa href="+code=vSss="s+ 1): receef">ind_primp/a>seop2_SEQ_NBR_MODULef="+code=KERN_Iseop2_SEQ_NBR_MODULe" clss="sref">skbp/a>); cfm_primp/a>)) pspa
 c tyePDUs    re-7;im oree"srefd up;assar e men* skb-&MACgcclass="comment"> */p/spa
  sk_buffp/a llc_cref">sock_putp/a>(pa href="+code=sk" class="sref">skp/a>); skp/a>);                 }                 } o 73p/a>pspa
 class="comment">/**p/spa
  o 54p/a>pspa
 class=dus" clasr3move_ac#e+code= -=R3moves ac#37;ledguotode= from tx "+codssss="comment">/**p/spa
  o105p/a>pspa
 class="commacef">ment"> *      @sk: connecio>
p/spa
  o106p/a>pspa
 class=nr: NR   @sk: connecio>
p/spa
  o107p/a>pspa
cclass=how_a tysunac#ed: sizf of ef"_unac#cq after r3mov* skac#ed ef">ll @sk: connecio>
p/spa
  o108p/a>pspa
 ll @sk: connecio>
p/spa
  o129p/a>pspa
 class=R3moves ac#37;ledguotode= from transmite"sref (ef"_unac#cq).=R3med,>ll @sk: connecio>
p/spa
  o 5pspa
 class=gt;snumber of ef"s th3t r3moved from "sref llc_conn_state_ev.p/spa
  o 51p/a>pspa
 class="comment"> */p/spa
          structopa hrer3move_ac#e+code=llc_conn_send_pdus" clasr3move_ac#e+code=llc_cstate_processp/a>(structopa href="+code=sock" class="sref">sockp/a>o*pa href="+code=sk" cla="sref">sockp/au8*pa href="+codeune" na="sref">sockp/anr*pa href="+codenrk" cla="sref">sockp/auonn.c#L116""+codeune" nams="sref">sockp/ahow_a tysunac#ed*pa href="+codehow_a tysunac#eds="sas="sref">skbp/a>); ind_primp/a>) {         struef"_po=llc_conn_send_pef"_po=k" cla="sref">sockp/aillc_conn_send_pi" clss="sref">skbp/a>); o 63p/a>        structopa href="+code=sk_buff" class="sref">sk_buffp/a>o*pa href="+code=skb" clss="sref">skbp/a>); o 63p/a>        structopef"_s="+code=sk_shutdctopef"_s=ass="sref">sk_buffp/aef"llc_conn_send_pef"s="sss="sref">skbp/a>);         strunbr_ac#ed*pa href="+codenbr_ac#eds="ssref">cfm_primp/a>o=o0; o 63p/a>        structopa href="+code=llc_sock" class="sref">llc_sockp/a>o*pa href="+code=llc" class="sref">llcp/a>o=opa href="+code=llc_sk" class="sref">llc_skp/a>(pa href="+code=sk" class="sref">skp/a>);         struq_le="+code=sk_shutdq_le=" class="sref">llcp/a>ail" classle="+code=sk_shutdail" classle=ef">skb_queue_tailp/a>(&aidopa href="+code=llc" cllass="sref">evp/a>-&ef"_unac#cqpa href="+code=ef"_unac#cqk" class="sref">skp/a>); skp/a>); o               ifq_le="+code=sk_shutdq_le=" clas="sref">skbp/a>); o132p/a>                goto "+code=out_skb_put" clss="sref">skbp/a>); sockp/aa>(pa href="+code=skb" class="sref">llcp/a>ail"pee>(pa href="+code=sl"pee>ef">skb_queue_tailp/a>(&aidopa href="+code=llc" cllass="sref">evp/a>-&ef"_unac#cqpa href="+code=ef"_unac#cqk" class="sref">skp/a>); static voef"llc_conn_send_pef"s="sass="sref">llcp/a>o=opef"_s=_hdr*pa href="+codeo=opef"_s=_hdr"sref">llc_conn_evp/a>(pa href="+code=skb" class="sref">skbp/a>); o 25p/a> cfm_primp/a>)) pspa
 cfien* skpo=i caltof pritkac#ed ef"ela="sref  class="comment"> */p/spa
  static voef"_po=llc_conn_send_pef"_po=k" csrer(in3)f">ind_primp/a>seop2_SEQ_NBR_MODULef="+code=KERN_Iseop2_SEQ_NBR_MODULe" cl + (in3)f">ind_primp/a>nr*pa href="+codenrk" c -omment"> */p/spa
  o118p/a>      (in3)f">ind_primp/a>seopI_GET_NSpa href="+code=seopI_GET_NS"sref">llc_conn_evp/ef"llc_conn_send_pef"s="sa): receef">ind_primp/a>seop2_SEQ_NBR_MODULef="+code=KERN_Iseop2_SEQ_NBR_MODULe" clss="sref">skbp/a>); skbp/a>); llc_conn_evp/illc_conn_send_pi" clsref"a="sref">sockp/aillc_conn_send_pi" cl <"a="sref">sockp/aef"_po=llc_conn_send_pef"_po=k" cs">SOCK_STR                illc_conn_send_pi" cl <"a="sref">sockp/aq_le="+code=sk_shutdq_le=" clR                illc_conn_send_pi" cl++lref">ind_primp/a>) { o111p/s="sref">skbp/a>o*pa href="+code=skb" class="sref">llcp/a>ail"de"+code=sk_receive_queul"de"+codef">skb_queue_tailp/a>(&aidopa href="+code=llc" cllass="sref">evp/a>-&ef"_unac#cqpa href="+code=ef"_unac#cqk" clss="sref">skbp/a>); o132p/a>                pa href="+code=kfree_skb" class="sref">kfree_skbp/a>(pa href="+code=skb" class="sref">skbp/a>); o 83p/="sref">sockp/anbr_ac#ed*pa href="+codenbr_ac#eds="s++ss="sref">skbp/a>);                 }                 } sockp/ahow_a tysunac#ed*pa href="+codehow_a tysunac#eds="sass="sref">llcp/a>ail" classle="+code=sk_shutdail" classle=ef">skb_queue_tailp/a>(&aidopa href="+code=llc" cllass="sref">evp/a>-&ef"_unac#cqpa href="+code=ef"_unac#cqk" class="sref">skp/a>);         inbr_ac#ed*pa href="+codenbr_ac#eds="sass="sref">skp/a>);                 } skbp/a>); o*3pa hr34ne" nam"v3L50">o 5pspa
 class="comment">/**p/spa
  o131p/a>pspa
 class=dus" class="sref"> -="comme"srefd PDUslass="comment">/**p/spa
  o 52p/a>pspa
 class="commacef">ment"> *      @sk: connecio>
p/spa
  o 73p/a>pspa
class="comment">/**p/spa
  o 54p/a>pspa
 class="comme"srefd ef"s t  MACging std totransmiss    llc_conn_state_ev.p/spa
  o105p/a>pspa
 class="comment"> */p/spa
  o 33p/a>static voidopa href="+code=llc_conn_send_pdus" class="sref">llc_cstate_processp/a>(structopa href="+code=sock" class="sref">sockp/a>o*pa href="+code=sk" cas="sref">skbp/a>); ind_primp/a>) { o 63p/a>        structopa href="+code=sk_buff" class="sref">sk_buffp/a>o*pa href="+code=skb" clss="sref">skbp/a>); skbp/a>); llc_conn_evp/a>(pa href="+code=skb" class="sref">llcp/a>ail"de"+code=sk_receive_queul"de"+codef">skb_queue_tailp/a>(&pa href="+code=sk" class="sref">skp/a>->writ c"+code=sk_receive_queuewrit c"+codss="l)lass"sref">evp/a>-&NULLpa href="+code=NULLk" clref">ind_primp/a>) { o111p/">o 63p/a>        structopef"_s="+code=sk_shutdctopef"_s=ass="sref">sk_buffp/aef"llc_conn_send_pef"s="sass="sref">llcp/a>o=opef"_s=_hdr*pa href="+codeo=opef"_s=_hdr"sref">llc_conn_evp/a>(pa href="+code=skb" class="sref">skbp/a>);                 } o 83p/a>                i>, pPDU_TYPE_IS_If="+code=KERN_IseopPDU_TYPE_IS_I"sref">llc_conn_evp/ef"llc_conn_send_pef"s="sas">SOCK_STR>                } o124p/////!f">llc_conn_evp/a>(pa href="+code=skb" cllass="sref">skp/a>-&d>, pa href="+coded=ev" class="sref">evp/a>-&flag=llc_conn_send_pflag=k" cs">SOCs="sref">llcp/a>IFF_LOOPBACKllc_conn_send_pIFF_LOOPBACKss="l)lef">ind_primp/a>) { o111p/">o 63p/a>        structopa href="+code=sk_buff" class="sref">sk_buffp/a>o*2pa href="+code=skb2" class="sref">llcp/a>ail"clonde=sk_receive_queul"clond"sref">llc_conn_evp/a>(pa href="+code=skb" clla="sref">sockp/aGFP_ATOMICpa href="+code=GFP_ATOMIC" class="sref">skbp/a>); cfm_primp/a>o=o0; o137p/////////="sref">llcp/a>ail" class="+code=skb_queue_tail" class="sref">skb_queue_tailp/a>(&ao=opa href="+code=llc_sk" class="sref">llc_skp/a>(pa href="+code=sk" cllass="sref">evp/a>-&ef"_unac#cqpa href="+code=ef"_unac#cqk" csref">__func__p/aa>(pa href="+code=skb" class="sref">skbp/a>); o118p/a>      ">o               if>o*2pa href="+code=skb2" clas="sref">skbp/a>); o139p/////////////////a>                break; o100p/////////="sref">llcp/a>ailpa href="+code=skb" class="sref">llcp/a>ail2pa href="+code=skb2" cl             break; o111p/a>                } o132p/a>             d=e" classxmit*pa href="+coded=e" classxmit"sref">llc_conn_evp/a>(pa href="+code=skb" class="sref">skbp/a>);                 }                 } o 25p/a> o106p/a>pspa
 class="comment">/**p/spa
  o107p/a>pspa
c"v3L83dus" class=#37;s:-cfiensotransi calt thechanges ;="srtof ent"> *      @sk: connecio>
p/spa
  o108p/a>pspa
 class="comment"> *      @sk: connecio>
p/spa
  o129p/a>pspa
 class="commehappened ev>ps   @sk: connecio>
p/spa
  o 5pspa
    @sk: connecio>
p/spa
  o 51p/a>pspa
 class=This=fore caltfiensotransi caltth3t matches with&happened ev>ps,=gt;    @sk: connecio>
p/spa
  o 52p/a>pspa
 class=executes=r3l"srdmacefonst thefieallyechanges ;="srtof ent"> *    llc_conn_state_ev.p/spa
  o 53p/a>pspa
 class=R3med,> 0td tosucllc_, 1td tof"srurf llc_conn_state_ev.p/spa
  o 54p/a>pspa
 class="comment"> */p/spa
  (structopa href="+code=sock" class="sref">sockp/a>o*pa href="+code=sk" class="sref">skp/a>, structopa href="+code=sk_buff" class="sref">sk_buffp/a>o*pa href="+code=skb" class="sref">skbp/a>) ind_primp/a>) {         struntopa href="+code=rc" cass1ss="sref">skbp/a>); o 63p/a>        structopa href="+code=llc_sock" class="sref">llc_sockp/a>o*pa href="+code=llc" class="sref">llcp/a>o=opa href="+code=llc_sk" class="sref">llc_skp/a>(pa href="+code=sk" class="sref">skp/a>); o 63p/a>        structopa href="+cotransllc_conn_send_pdus" class="+cotransss="sref">llc_sockp/atransllc_conn_send_ptransss="ass="sref">skp/a>); skp/a>); o eue_tailp/a>(&aidopa href="+code=llc" cllass="sref">evp/a>-&s="+c(pa href="+code=="+ck" cs"gt"a="sref">sockp/aNBR_CONN_STATESpa href="+code=NBR_CONN_STATES" class="sref">skbp/a>) o132p/a>                goto "+code=out_skb_put" clss="sref">skbp/a>); sockp/antopa href="+code=rc" cassf">cfm_primp/a>o=o0; static votransllc_conn_send_ptransss="ass="sref">llcp/a>o=opqualify" clasf="+code=llc_conn_ev"qualify" clasf=lass="sref">llc_skp/a>(pa href="+code=sk" csref">__func__p/aa>(pa href="+code=skb" class="sref">skbp/a>);                 itransllc_conn_send_ptransss=")lef">ind_primp/a>) { o 36p/a>             ntopa href="+code=rc" cass="sref">llcp/a>o=opexec" clastrans_acefons"+code=llc_conn_ev"exec" clastrans_acefonslass="sref">llc_skp/a>(pa href="+code=sk" csref">__func__p/atransllc_conn_send_ptransss="sref">__func__p/aa>(pa href="+code=skb" class="sref">skbp/a>); o137p/">o               ifntopa href="+code=rc" ca">SOCK_STR                transllc_conn_send_ptransss="lass="sref">evp/a>-&next_s="+c(pa href="+codenext_s="+cc" caass"sref">evp/a>-&NO_STATE_CHANGEpa href="+code=NO_STATE_CHANGEss=")lef">ind_primp/a>) { o118p/a>      eue_tailp/a>(&aidopa href="+code=llc" cllass="sref">evp/a>-&s="+c(pa href="+code=="+ck" csss"sref">evp/a>-&transllc_conn_send_ptransss="lass="sref">evp/a>-&next_s="+c(pa href="+codenext_s="+cc" css="sref">skbp/a>); o139p/">o137p/">o               if llc_skp/idopa href="+code=llc" cllass="sref">evp/a>-&s="+c(pa href="+code=="+ck" c)ass="sref">skbp/a>) o100p/">o118p/a>      eue_tailp/a>(&pa href="+code=sk" class="sref">skp/a>->s="+cochangeref="+code=sk_buffs="+cochangelass="sref">llc_skp/a>(pa href="+code=sk" class="sref">skp/a>); o111p/a>                }                 }                 }         intopa href="+code=rc" cass="sref">skp/a>);                 } cfm_primp/a>o=o0; o107p/a>pspa
 class="comment">/**p/spa
  o108p/a>pspa
 class=_ev"qualify" clasf=:-cfiensotransi caltd toev>ps   @sk: connecio>
p/spa
  o129p/a>pspa
 class="comment"> *      @sk: connecio>
p/spa
  o 5pspa
 class="commehappened ev>ps   @sk: connecio>
p/spa
  o 51p/a>pspa
    @sk: connecio>
p/spa
  o 52p/a>pspa
 class=This=fore caltfiensotransi caltth3t matches with&happened ev>ps llc_conn_state_ev.p/spa
  o 73p/a>pspa
 class=R3med,> pointer    foundotransi caltaltsucllc_,  receNULL otherwisf llc_conn_state_ev.p/spa
  o 54p/a>pspa
 class="comment"> */p/spa
  o 63p/a>        structopa href="+cotransllc_conn_send_pdus" class="+cotransss="sref">llc_sockp/ao=opqualify" clasf="+code=llc_conn_ev"qualify" clasf=lass=state_processp/a>(structopa href="+code=sock" class="sref">sockp/a>o*pa href="+code=sk" clomment"> */p/spa
  o 36p/////////////////////////////////////////ss="sref">skp/a>, structopa href="+code=sk_buff" class="sref">sk_buffp/a>o*pa href="+code=skb" class="sref">skbp/a>) ind_primp/a>) { o 63p/a>        structopa href="+cotransllc_conn_send_pdus" class="+cotransss="srsref">sk_buffp/anext_transllc_conn_send_pnext_transc" cass="sref">skp/a>); sk_buffp/a sk_buffp/anext_qualifier*pa href="+codenext_qualifierc" cass="sref">skp/a>); o 63p/a>        structopa href="+cof="+code=llc_conn_ev"a href="+cof=ass="sref">sk_buffp/af="+code=llc_connf=ass="ss="sref">llcp/a>o=op clasf="+code=llc_conn_ev" clasf=lass="sref">llc_skp/a>(pa href="+code=skb" class="sref">skbp/a>); o 63p/a>        structopa href="+code=llc_sock" class="sref">llc_sockp/a>o*pa href="+code=llc" class="sref">llcp/a>o=opa href="+code=llc_sk" class="sref">llc_skp/a>(pa href="+code=sk" class="sref">skp/a>); o 63p/a>        structopa href="+c"+code=llc_conn_ev"a href="+css="sref">llc_sockp/acurref="+c"+code=llc_conncurref="+c" classs="sref">skp/a>); o 83p/////////////////////////kb_queue_tailp/a>(&ao=op class="+cotablc"+code=llc_conn_ev"a href="+cotablce" n[eue_tailp/a>(&aidopa href="+code=llc" cllass="sref">evp/a>-&s="+c(pa href="+code=="+ck" cs- 1]ass="sref">skp/a>); skp/a>); cfm_primp/a>)) pspa
 csearch>ru ev>psstd tothis=;="srtuntsrefss="comment"> */p/spa
  o106p/a>pspa








* list exhaussrdm tountsr no mhasefss="comment"> */p/spa
  o107p/a>pspa








*class="comment"> */p/spa
  llc_conn_evp/next_transllc_conn_send_pnext_transc" cass="sref">llcp/a>curref="+c"+code=llc_conncurref="+c" cllass="sref">evp/a>-&transi calsllc_conn_send_ptransiefonslass +omment"> */p/spa
  o139p/="sref">llcp/a>o=opfien_offset*pa href="+codeo=opfien_offsetlass="sref">llc_skp/idopa href="+code=llc" cllass="sref">evp/a>-&s="+c(pa href="+code=="+ck" cs- 1sref">__func__p/af="+code=llc_connf=ass=lass="sref">evp/a>-&typc(pa href="+codetypck" class="sref">skp/a>); o10(sref">sk_buffp/anext_transllc_conn_send_pnext_transc" cllass="sref">evp/a>-&f="+code=llc_connf=ass=R                next_transllc_conn_send_pnext_transc" c++lref">ind_primp/a>) { o111p/">o  ((sref">sk_buffp/anext_transllc_conn_send_pnext_transc" cllass="sref">evp/a>-&f="+code=llc_connf=ass=)="sref">llc_skp/a>(pa href="+code=sk" csref">__func__p/aa>(pa href="+code=skb" clalref">ind_primp/a>) { o132p/m"v3L135e">cfm_primp/a>)) pspa
 cgot POSSIBLE ev>ps match;=gt;sev>ps may requiasefss="comment"> */p/spa
  o 73p/a>pspa
 class="""""""""""""""""* qualifica caltbasrdm n=gt;svalefstof asnumber ofefss="comment"> */p/spa
  o 54p/a>pspa
 class="""""""""""""""""* ;="srtflag=;/a> o b qualifica cals oreemet (i.e.,efss="comment"> */p/spa
  o105p/a>pspa
 class="""""""""""""""""* a> o b qualify* skfore cals4rrmed, sucllc_,  to0,efss="comment"> */p/spa
  o106p/a>pspa








""""""""""""""""* gt; othis=is=THE ev>ps we'reelook* skforefss="comment"> */p/spa
  o107p/a>pspa








""""""""""""""""*class="comment"> */p/spa
  o118p/a>      d tof">llc_conn_evp/next_qualifier*pa href="+codenext_qualifierc" csrersref">sk_buffp/anext_transllc_conn_send_pnext_transc" cllass="sref">evp/a>-&f=_qualifiersllc_conn_send_pf=_qualifiersc" cass="sref">skp/a>); o139p//////////////">llc_conn_evp/next_qualifier*pa href="+codenext_qualifierc" cs">SOCK_STR sref">sk_buffp/anext_qualifier*pa href="+codenext_qualifierc" cs">SOCK_STR>                } o100p/">o118p/a>   !rsref">sk_buffp/anext_qualifier*pa href="+codenext_qualifierc" c)="sref">llc_skp/a>(pa href="+code=sk" csref">__func__p/aa>(pa href="+code=skb" claR                next_qualifier*pa href="+codenext_qualifierc" c++l>                } o111p/9p//////////////"">cfm_primp/a>)) pspa
 cnothi sk*class="cR>                } o132p/////////">o               ifnext_qualifier*pa href="+codenext_qualifierc" cs|| !sref">sk_buffp/anext_qualifier*pa href="+codenext_qualifierc" c)>                } o 83p/9p//////////////"">cfm_primp/a>)) pspa
 co b qualifiers=executed sucllc_fully;othis=islass="comment"> */p/spa
  o 54p/a>pspa
 class="""""""""""""""""""""""""* ourotransi cal;4rrmed, it so we cv3Lperd tmlass="comment"> */p/spa
  o105p/a>pspa
 class="""""""""""""""""""""""""* gt;s">ooci"srdmacefonstK_STR change gt;s=="+ck"ss="comment"> */p/spa
  o106p/a>pspa








""""""""""""""""""""""""*class="comment"> */p/spa
  o137p/////////////////rrmed, sref">sk_buffp/anext_transllc_conn_send_pnext_transc" cass="sref">skp/a>); o118p/a>                }                 } o*4pa hr44e" nam"v3L100rrmed, 61p/a>        iNULLpa href="+code=NULLk" cass="sref">skp/a>);                 }                 } o 73p/a>pspa
 class="comment">/**p/spa
  o 54p/a>pspa
 class=lev"exec" clastrans_acefons -=executes=r3l"srdmacefonslass="comment">/**p/spa
  o105p/a>pspa
 class="comment"> *      @sk: connecio>
p/spa
  o106p/a>pspa
 class=@trans:otransi caltth3t it'smacefonstmust beLperd tmenlass="comment">/**p/spa
  o107p/a>pspa
c"v3L83"commeev>ps   @sk: connecio>
p/spa
  o108p/a>pspa
 ll @sk: connecio>
p/spa
  o129p/a>pspa
 class=Executes=acefonstth3t is=r3l"srdmto&happened ev>ps =R3med,> 0td tll @sk: connecio>
p/spa
  o 5pspa
 class=sucllc_, 1tto&ien*c"srtf"srurftof at leritkone=acefon llc_conn_state_ev.p/spa
  o 51p/a>pspa
 class="comment"> */p/spa
  (structopa href="+code=sock" class="sref">sockp/a>o*pa href="+code=sk" clomment"> */p/spa
  o 83p////////////////////////">o 63p/a>        structopa href="+cotransllc_conn_send_pdus" class="+cotransss="sref">llc_sockp/atransllc_conn_send_ptransss="lomment"> */p/spa
  o124p////////////////////////">o 63p/a>        structopa href="+code=sk_buff" class="sref">sk_buffp/a>o*pa href="+code=skb" class="sref">skbp/a>) ind_primp/a>) {         struntopa href="+code=rc" cassf">cfm_primp/a>o=o0; static vodus" clasacefon_t*pa href="+codeo=opa hreacefon_tass="sref">sk_buffp/anext_acefonllc_conn_send_pnext_a *      cass="sref">skp/a>); o 48p/a> llc_conn_evp/next_acefonllc_conn_send_pnext_a *      csss"sref">evp/a>-&transllc_conn_send_ptransss="lass="sref">evp/a>-&ev_acefons"+code=llc_connev_acefons   cass="sref">skp/a>); o10">llc_conn_evp/next_acefonllc_conn_send_pnext_a *      cs">SOCK_STR sref">sk_buffp/anext_acefonllc_conn_send_pnext_a *      ca0">llc_conn_evp/next_acefonllc_conn_send_pnext_a *      c++lref">ind_primp/a>) { o111p/an3p/a>        strunt2pa href="+code=nt2c" csrersref">sk_buffp/anext_acefonllc_conn_send_pnext_a *      c)="sref">llc_skp/a>(pa href="+code=sk" csref">__func__p/aa>(pa href="+code=skb" claRf">ind_primp/a>) {                 } o 83p/a>                int2pa href="+code=nt2c" csr= 2lref">ind_primp/a>) { o124p//////////a>        struntopa href="+code=rc" cass              int2pa href="+code=nt2c" cRf">ind_primp/a>) { o111p/a>                break; o 36p/} else/a>                int2pa href="+code=nt2c" cass="sref">skbp/a>) o137p/////////="sref">llcp/a>ntopa href="+code=rc" cass1ss="sref">skbp/a>);                 }         intopa href="+code=rc" cass="sref">skp/a>);                 }                 }         iboocode=skb_queue_tbooc" nam61p/a>        i_ev"es="b_match"+code=llc_conn_ev"es="b_matchlass=hreitk">o 63p/a>        structopaap*pa href="+codeo=opaapass="sref">sk_buffp/a>ap*pa href="+codeaapass=lomment"> */p/spa
  o 83p////////////////////hreitk">o 63p/a>        structopaddr*pa href="+codeo=opaddrass="sref">sk_buffp/adaddr*pa href="+codedaddrass=lomment"> */p/spa
  o124p////////////////////hreitk">o 63p/a>        structopaddr*pa href="+codeo=opaddrass="sref">sk_buffp/aladdr*pa href="+codeoaddrass=lomment"> */p/spa
  o111p////////////hreitk">o 63p/a>        structopa href="+code=sock" class="sref">sockp/a>o*pa href="+code=sk" cas="sref">skbp/a>); ind_primp/a>) { o 63p/a>        structopa href="+code=llc_sock" class="sref">llc_sockp/a>o*pa href="+code=llc" class="sref">llcp/a>o=opa href="+code=llc_sk" class="sref">llc_skp/a>(pa href="+code=sk" class="sref">skp/a>); o 48p/a>         i>o*pa href="+code=llc" cllass="sref">evp/a>-&laddr*pa href="+codeoaddrass=."sref">evp/a>-&laap*pa href="+codeoaapass="=ss="sref">llcp/a>oaddr*pa href="+codeoaddrass=lass="sref">evp/a>-&laap*pa href="+codeoaapass="">SOCK_STR>                } o100p/61p/a>        i>o*pa href="+code=llc" cllass="sref">evp/a>-&daddr*pa href="+codedaddrass=."sref">evp/a>-&laap*pa href="+codeoaapass="=ss="sref">llcp/a>daddr*pa href="+codedaddrass=lass="sref">evp/a>-&laap*pa href="+codeoaapass="">SOCK_STR>                } o111p/s="sref">skbp/a llc_skp/>o*pa href="+code=llc" cllass="sref">evp/a>-&laddr*pa href="+codeoaddrass=."sref">evp/a>-&mac*pa href="+codemack" csref">__func__p/aoaddr*pa href="+codeoaddrass=lass="sref">evp/a>-&mac*pa href="+codemack" cas">SOCK_STR>                } o132p/s="sref">skbp/a llc_skp/>o*pa href="+code=llc" cllass="sref">evp/a>-&daddr*pa href="+codedaddrass=."sref">evp/a>-&mac*pa href="+codemack" csref">__func__p/adaddr*pa href="+codedaddrass=lass="sref">evp/a>-&mac*pa href="+codemack" caR>                }                 } skp/a>); o105p/a>pspa
 class="comment">/**p/spa
  o106p/a>pspa
 class=__  *   td tothe r3mote/local aap/mack"ss="comment">/**p/spa
  o107p/a>pspa
c"v3L83"cap: SAPk"ss="comment">/**p/spa
  o108p/a>pspa
 class="daddr: addresstof r3mote LLC (MACg+ SAP)k"ss="comment">/**p/spa
  o129p/a>pspa
 class="laddr: addresstof local LLC (MACg+ SAP)k"ss="comment">/**p/spa
  o 5pspa
    @sk: connecio>
p/spa
  o 51p/a>pspa
 class=Search&ent"> *   tlist of the SAPt thefiensoent"> *   tusi skthe r3mote   @sk: connecio>
p/spa
  o 52p/a>pspa
 class=mac, r3mote cap, local mac,  thelocal aap.=R3med,> pointer d tll @sk: connecio>
p/spa
  o 73p/a>pspa
 class=ent"> *   td und,  receNULL otherwisf llc_conn_state_ev.p/spa
  o 54p/a>pspa
 class=Caller has t  make cureelocal_bh is=disablcd llc_conn_state_ev.p/spa
  o105p/a>pspa
 class="comment"> */p/spa
  o 63p/a>        structopa href="+code=sock" class="sref">sockp/a__ sk_buffp/a>ap*pa href="+codeaapass=lomment"> */p/spa
  o137p//////////////////////////////">o 63p/a>        structopaddr*pa href="+codeo=opaddrass="sref">sk_buffp/adaddr*pa href="+codedaddrass=lomment"> */p/spa
  o118p/a>      /////////////////////">o 63p/a>        structopaddr*pa href="+codeo=opaddrass="sref">sk_buffp/aoaddr*pa href="+codeoaddrass=as="sref">skbp/a>); ind_primp/a>) { o 63p/a>        structopa href="+code=sock" class="sref">sockp/antopa href="+code=rc" cass="sref">skp/a>); o 63p/a>        struhlist_nulls_nstropa href="+codehlist_nulls_nstrass="sref">sk_buffp/anstropa href="+codenstrass=ass="sref">skp/a>);         struslot*pa href="+codeslot" class="sref">llcp/a>o=opa _oaddr_hashf="+code=sk_shutdctopa _oaddr_hashf=lass="sref">llc_skp/aap*pa href="+codeaapass=lref">__func__p/aoaddr*pa href="+codeoaddrass=aR>                } o 63p/a>        struhlist_nulls_head*pa href="+codehlist_nulls_headass="sref">sk_buffp/aoaddr_h(pa href="+code=oaddr_h(" classkb_queue_tailp/a>(&amap*pa href="+codeaapass=lass="sref">skp/a>->oaddr_hashref="+code=sk_buffoaddr_hashass=[eue_tailp/a>(&aslot*pa href="+codeslot" cl]ass="sref">skp/a>); skp/a>); sockp/antu_read loopa href="+code=sntu_read looplass=aR>                } sockp/aagai="+code=sk_shutdagai=e" n:>                } static vouffnulls_d t_each_nturef="+code=sk_buffnulls_d t_each_ntulass="sref">llc_skp/ntopa href="+code=rc" clref">__func__p/anstropa href="+codenstrass=lref">__func__p/aoaddr_h(pa href="+code=oaddr_h(" cllref">ind_primp/a>) { o118p/">o eue_tailp/a>(&aido"es="b_match"+code=llc_conn_ev"es="b_matchlass="sref">llc_skp/aap*pa href="+codeaapass=lref">__func__p/adaddr*pa href="+codedaddrass=lref">__func__p/aoaddr*pa href="+codeoaddrass=lref">__func__p/antopa href="+code=rc" calref">ind_primp/a>) { o139p/////////"">cfm_primp/a>)) pspa
 cExtra checks requiasd by SLAB_DESTROY_BY_RCU
 class="comment"> */p/spa
  o100p/">o118p/">o eue_tailp/a>(&aunlikelyopa href="+codeunlikelylass=              ifatomic_inc_nst_zero"+code=sk_shutdatomic_inc_nst_zerolass=kb_queue_tailp/a>(&antopa href="+code=rc" class="sref">skp/a>->f">cnt*pa href="+codest;f">cntc" calas="sref">skbp/a>); o111p/9p//////////////a>                goagai="+code=sk_shutdagai=e" nR>                } o132p/">o118p/">o eue_tailp/a>(&aunlikelyopa href="+codeunlikelylass=="sref">llcp/a>o=opa href="+code=llc_sk" class="sref">llc_skp/ntopa href="+code=rc" calass="sref">skp/a>-&gap*pa href="+codeaapass=aass"sref">evp/a>-&gap*pa href="+codeaapass=a||>                } o 83p//////////////////////              if llc_skp/aap*pa href="+codeaapass=lref">__func__p/adaddr*pa href="+codedaddrass=lref">__func__p/aoaddr*pa href="+codeoaddrass=lref">__func__p/antopa href="+code=rc" callref">ind_primp/a>) { o124p//////////////////a>        structop_po "+code=out_skb_ctop_po lass="sref">llc_skp/ntopa href="+code=rc" caR>                } o111p/////////hretinueR>                } o 36p/////////a>                } o137p/////////a>                god undopa href="+coded unde" nR>                } o118p/a>                }                 } llc_skp/ntopa href="+code=rc" cass="sref">llcp/a>NULLpa href="+code=NULLk" cass="sref">skp/a>); cfm_primp/a>)) pspa
 lass="comment"> */p/spa
  o 52p/a>pspa








* a> the nullssvalef we got at=gt;send of this lookup=islass="comment"> */p/spa
  o 73p/a>pspa
 class=" cnot=gt;sexpecsrdm ne, we must res="rt lookup llc_conn_state_ev.p/spa
  o 54p/a>pspa
 class="* We probablyemet a, itemtth3t was movrdmto&another chain llc_conn_state_ev.p/spa
  o105p/a>pspa
 class=" class="comment"> */p/spa
  o eue_tailp/a>(&aunlikelyopa href="+codeunlikelylass=="sref">llcp/a>get_nulls_valefopa href="+codeget_nulls_valeflass=="sref">llcp/a>nstropa href="+codenstrass=)lass"sref">evp/a>-&slot*pa href="+codeslot" cllas="sref">skbp/a>); o137p/a>                goagai="+code=sk_shutdagai=e" nR>                }                 } sk_buffp/antu_read unloopa href="+code=sntu_read unlooplass=aR>                }         intopa href="+code=rc" cass="sref">skp/a>);                 }                 } o 63p/a>        structopa href="+code=sock" class="sref">sockp/a sk_buffp/a>ap*pa href="+codeaapass=lomment"> */p/spa
  o124p/////////////////////">o 63p/a>        structopaddr*pa href="+codeo=opaddrass="sref">sk_buffp/adaddr*pa href="+codedaddrass=lomment"> */p/spa
  o111p/////////////">o 63p/a>        structopaddr*pa href="+codeo=opaddrass="sref">sk_buffp/aoaddr*pa href="+codeoaddrass=as="sref">skbp/a>); ind_primp/a>) { o 63p/a>        structopa href="+code=sock" class="sref">sockp/a>o*pa href="+code=sk" cass="sref">skp/a>); o 48p/a> sk_buffp/a ocal_bh_disablc*pa href="+codeoocal_bh_disablclass=aR>                } o*5pa hr54e" nam"v3L100"sref">llc_skp/>o*pa href="+code=sk" cass="sref">llcp/a>__ llc_skp/aap*pa href="+codeaapass=lref">__func__p/adaddr*pa href="+codedaddrass=lref">__func__p/aoaddr*pa href="+codeoaddrass=aR>                } sk_buffp/a ocal_bh_enablc*pa href="+codeoocal_bh_enablclass=aR>                }         i>o*pa href="+code=sk" cass="sref">skp/a>);                 } skp/a>);         iboocode=skb_queue_tbooc" nam61p/a>        i_ev"listener_match"+code=llc_conn_ev"listener_matchlass=hreitk">o 63p/a>        structopaap*pa href="+codeo=opaapass="sref">sk_buffp/a>ap*pa href="+codeaapass=lomment"> */p/spa
  o 36p///////////////////////hreitk">o 63p/a>        structopaddr*pa href="+codeo=opaddrass="sref">sk_buffp/aladdr*pa href="+codeoaddrass=lomment"> */p/spa
  o137p///////////////////////hreitk">o 63p/a>        structopa href="+code=sock" class="sref">sockp/a>o*pa href="+code=sk" cas="sref">skbp/a>); ind_primp/a>) { o 63p/a>        structopa href="+code=llc_sock" class="sref">llc_sockp/a>o*pa href="+code=llc" class="sref">llcp/a>o=opa href="+code=llc_sk" class="sref">llc_skp/a>(pa href="+code=sk" class="sref">skp/a>); skp/a>);         i>o*pa href="+code=sk" class="sref">skp/a>->typc(pa href="+codegt;typc" classs="sref">llcp/a>SOCK_STREAM(pa href="+codeSOCK_STREAM" cla">SOCK_STR                mp;pa href="+code=sk" class="sref">skp/a>->s="+c(pa href="+codegt;f="+c" classs="sref">llcp/a>TCP_LISTEN(pa href="+codeTCP_LISTEN" cla">SOCK_STRss="sref">skp/a>); o132p/s="sref">skbp/a evp/a>-&laddr*pa href="+codeoaddrass=."sref">evp/a>-&laap*pa href="+codeoaapass="=ss="sref">llcp/a>oaddr*pa href="+codeoaddrass=lass="sref">evp/a>-&laap*pa href="+codeoaapass="">SOCK_STR>                } o 83p/="sref">llcp/a>o=opmac_match"+code=llc_conn_ev"mac_matchlass="sref">llc_skp/>o*pa href="+code=llc" cllass="sref">evp/a>-&laddr*pa href="+codeoaddrass=."sref">evp/a>-&mac*pa href="+codemack" csref">__func__p/aoaddr*pa href="+codeoaddrass=lass="sref">evp/a>-&mac*pa href="+codemarc" caR>                }                 }                 } o 63p/a>        structopa href="+code=sock" class="sref">sockp/a__ (structopaap*pa href="+codeo=opaapass="sref">sk_buffp/a>ap*pa href="+codeaapass=lomment"> */p/spa
  o137p///////////////////////////">o 63p/a>        structopaddr*pa href="+codeo=opaddrass="sref">sk_buffp/aoaddr*pa href="+codeoaddrass=as="sref">skbp/a>); ind_primp/a>) { o 63p/a>        structopa href="+code=sock" class="sref">sockp/antopa href="+code=rc" cass="sref">skp/a>); o 63p/a>        struhlist_nulls_nstropa href="+codehlist_nulls_nstrass="sref">sk_buffp/anstropa href="+codenstrass=ass="sref">skp/a>);         struslot*pa href="+codeslot" class="sref">llcp/a>o=opa _oaddr_hashf="+code=sk_shutdctopa _oaddr_hashf=lass="sref">llc_skp/aap*pa href="+codeaapass=lref">__func__p/aoaddr*pa href="+codeoaddrass=aR>                } o 63p/a>        struhlist_nulls_head*pa href="+codehlist_nulls_headass="sref">sk_buffp/aoaddr_h(pa href="+code=oaddr_h(" classkb_queue_tailp/a>(&amap*pa href="+codeaapass=lass="sref">skp/a>->oaddr_hashref="+code=sk_buffoaddr_hashass=[eue_tailp/a>(&aslot*pa href="+codeslot" cl]ass="sref">skp/a>); skp/a>); sk_buffp/antu_read loopa href="+code=sntu_read looplass=aR>                }                 } skp/a>->nulls_d t_each_nturef="+code=sk_buffnulls_d t_each_ntulass="sref">llc_skp/ntopa href="+code=rc" clref">__func__p/anstropa href="+codenstrass=lref">__func__p/aoaddr_h(pa href="+code=oaddr_h(" cllref">ind_primp/a>) { o137p/">o eue_tailp/a>(&aido"listener_match"+code=llc_conn_ev"listener_matchlass="sref">llc_skp/aap*pa href="+codeaapass=lref">__func__p/aoaddr*pa href="+codeoaddrass=lref">__func__p/antopa href="+code=rc" calref">ind_primp/a>) { o118p/a>      "">cfm_primp/a>)) pspa
 cExtra checks requiasd by SLAB_DESTROY_BY_RCU
 class="comment"> */p/spa
  o139p/////////">o eue_tailp/a>(&aunlikelyopa href="+codeunlikelylass=              ifatomic_inc_nst_zero"+code=sk_shutdatomic_inc_nst_zerolass=kb_queue_tailp/a>(&antopa href="+code=rc" class="sref">skp/a>->f">cnt*pa href="+codest;f">cntc" calas="sref">skbp/a>); o100p/">o118p/a>    p/a>                goagai="+code=sk_shutdagai=e" nR>                } o111p/9p//////">o eue_tailp/a>(&aunlikelyopa href="+codeunlikelylass=="sref">llcp/a>o=opa href="+code=llc_sk" class="sref">llc_skp/ntopa href="+code=rc" calass="sref">skp/a>-&gap*pa href="+codeaapass=aass"sref">evp/a>-&gap*pa href="+codeaapass=a||>                } o132p/">o118p//////////////              if llc_skp/aap*pa href="+codeaapass=lref">__func__p/aoaddr*pa href="+codeoaddrass=lref">__func__p/antopa href="+code=rc" callref">ind_primp/a>) { o 83p//////////////////a>        structop_po "+code=out_skb_ctop_po lass="sref">llc_skp/ntopa href="+code=rc" caR>                } o124p/////////////////hretinueR>                } o111p/a>                } o 36p/////////a>                god undopa href="+coded unde" nR>                } o137p/a>                }                 } sk_buffp/antopa href="+code=rc" cass="sref">llcp/a>NULLpa href="+code=NULLk" cass="sref">skp/a>); cfm_primp/a>)) pspa
 lass="comment"> */p/spa
  o 51p/a>pspa








* a> the nullssvalef we got at=gt;send of this lookup=islass="comment"> */p/spa
  o 52p/a>pspa








* not=gt;sexpecsrdm ne, we must res="rt lookup llc_conn_state_ev.p/spa
  o 73p/a>pspa
 class=" cWe probablyemet a, itemtth3t was movrdmto&another chain llc_conn_state_ev.p/spa
  o 54p/a>pspa
 class="*class="comment"> */p/spa
  o eue_tailp/a>(&aunlikelyopa href="+codeunlikelylass=="sref">llcp/a>get_nulls_valefopa href="+codeget_nulls_valeflass=="sref">llcp/a>nstropa href="+codenstrass=)lass"sref">evp/a>-&slot*pa href="+codeslot" cllas="sref">skbp/a>); o 36p/a>                goagai="+code=sk_shutdagai=e" nR>                }                 } sk_buffp/antu_read unloopa href="+code=sntu_read unlooplass=aR>                }         intopa href="+code=rc" cass="sref">skp/a>);                 }                 } o 52p/a>pspa
 class="comment">/**p/spa
  o 73p/a>pspa
 class= /**p/spa
  o 54p/a>pspa
 class="cap: SAPk"ss="comment">/**p/spa
  o105p/a>pspa
 class="laddr: addresstof local LLC (MACg+ SAP)k"ss="comment">/**p/spa
  o106p/a>pspa
 k"ss="comment">/**p/spa
  o107p/a>pspa
c"v3L83Search&ent"> *   tlist of the SAPt thefiensoent"> *   tlisteni sk     @sk: connecio>
p/spa
  o108p/a>pspa
 class=local mac,  thelocal aap.=R3med,> pointer d t par>ps ctopet d und,   @sk: connecio>
p/spa
  o129p/a>pspa
 class= receNULL otherwisf llc_conn_state_ev.p/spa
  o 5pspa
 class=Caller has t  make cureelocal_bh is=disablcd llc_conn_state_ev.p/spa
  o 51p/a>pspa
 class="comment"> */p/spa
  o 63p/a>        structopa href="+code=sock" class="sref">sockp/a (structopaap*pa href="+codeo=opaapass="sref">sk_buffp/a>ap*pa href="+codeaapass=lomment"> */p/spa
  o 83p////////////////////// //">o 63p/a>        structopaddr*pa href="+codeo=opaddrass="sref">sk_buffp/aoaddr*pa href="+codeoaddrass=as="sref">skbp/a>); ind_primp/a>) { o 63p/a>        structopaddr*pa href="+codeo=opaddrass="="sref">llcp/a>nullpaddr*pa href="+codenullpaddrc" cass="sref">skp/a>);         structopa href="+code=sock" class="sref">sockp/antopa href="+code=rc" cass="sref">llcp/a>__ llc_skp/aap*pa href="+codeaapass=lref">__func__p/aoaddr*pa href="+codeoaddrass=aR>                }                 } o               ifntopa href="+code=rc" ca>                } o139p/="sref">sockp/antopa href="+code=rc" cass="sref">llcp/a>__ llc_skp/aap*pa href="+codeaapass=lrkb_queue_tailp/a>(&anullpaddr*pa href="+codenullpaddrc" caR>                } skp/a>);         intopa href="+code=rc" cass="sref">skp/a>);                 } skp/a>); o 63p/a>        structopa href="+code=sock" class="sref">sockp/a__ sk_buffp/a>ap*pa href="+codeaapass=lomment"> */p/spa
  o111p//////////">o 63p/a>        structopaddr*pa href="+codeo=opaddrass="sref">sk_buffp/adaddr*pa href="+codedaddrass=lomment"> */p/spa
  o 36p/////////////// //">o 63p/a>        structopaddr*pa href="+codeo=opaddrass="sref">sk_buffp/aoaddr*pa href="+codeoaddrass=as="sref">skbp/a>); ind_primp/a>) { o 63p/a>        structopa href="+code=sock" class="sref">sockp/a>o*pa href="+code=sk" cass="sref">llcp/a>__ llc_skp/aap*pa href="+codeaapass=lref">__func__p/adaddr*pa href="+codedaddrass=lref">__func__p/aoaddr*pa href="+codeoaddrass=aR>                }                 }         i>o*pa href="+code=sk" c ? :m61p/a>        i_ev"lookup"listenera href="+code=s llc_skp/aap*pa href="+codeaapass=lref">__func__p/aoaddr*pa href="+codeoaddrass=aR>                }                 }                 } o 73p/a>pspa
 class="comment">/**p/spa
  o 54p/a>pspa
 class= oin this f="+c data cv3Lbe s>ps lass="comment">/**p/spa
  o105p/a>pspa
 class="c="+c: f="+c ofoent"> *    lass="comment">/**p/spa
  o106p/a>pspa
 k"ss="comment">/**p/spa
  o107p/a>pspa
c"v3L83R3med,> 0t">odata cv3Lbe s>ps, 1totherwisf llc_conn_state_ev.p/spa
  o108p/a>pspa
 class="comment"> */p/spa
  (&au8*pa href="+codeu8ass="="sref">llcp/a> llc_skp/u8*pa href="+codeu8ass="="sref">llcp/a>s="+c(pa href="+codeg="+classas="sref">skbp/a>); ind_primp/a>) {         i>="+c(pa href="+codeg="+classlass"sref">evp/a>-&LLC_CONN_STATE_NORMALpa href="+code=LLC_CONN_STATE_NORMALlassl">SOCK_STR                m="+c(pa href="+codeg="+classlass"sref">evp/a>-&LLC_CONN_STATE_BUSYpa href="+code=LLC_CONN_STATE_BUSYlassl">SOCK_STRf">ind_primp/a>) { o132p               m="+c(pa href="+codeg="+classlass"sref">evp/a>-&LLC_CONN_STATE_REJpa href="+code=LLC_CONN_STATE_REJc" cass="sref">skp/a>);                 } skp/a>); o105p/a>pspa
 class="comment">/**p/spa
  o106p/a>pspa
 class= /**p/spa
  o107p/a>pspa
c"v3L83"c="+c: f="+c ="blf llc_conn_state_ev.p/spa
  o108p/a>pspa
 class="offset: f="rtooffset llc_conn_state_ev.p/spa
  o129p/a>pspa
 llc_conn_state_ev.p/spa
  o*6pa hr64ne" nam"v3L50">o 5pspa
 class=Fiensooffset of next cvtegory of transiefonsoin transiefon ="blf llc_conn_state_ev.p/spa
  o 51p/a>pspa
 class=R3med,> the f="rtoienex of next cvtegory llc_conn_state_ev.p/spa
  o 52p/a>pspa
 class="comment"> */p/spa
  llc_skp/uonn.c#L116""+codeu1ne" na="sref">llcp/a>__init*pa href="+code__initass="="sref">llcp/a> sockp/a>="+c(pa href="+codeg="+classlref">__func__p/auonn.c#L116""+codeu1ne" na="sref">llcp/a>offseta href="+code=soffsetlassas="sref">skbp/a>); ind_primp/a>) { sockp/auonn.c#L116""+codeu1ne" na="sref">llcp/a>cnt*pa href="+codecntc" c = 0ass="sref">skp/a>);         stru sk_buffp/anext_transa href="+code=snext_transc" cass="sref">skp/a>);                 } llcp/a>next_transa href="+code=snext_transc" cass="sref">llcp/a>>="+c(pa href="+codeg="+classlass="sref">skp/a>-&transiefons(pa href="+codetransiefons   ca+a="sref">llcp/a>offseta href="+code=soffsetlassass="sref">skp/a>); o13(sref">sk_buffp/anext_transa href="+code=snext_transc" calass="sref">skp/a>-&eva href="+code=sevlassa"="sref">llcp/a>next_transa href="+code=snext_transc" c++as="sref">skbp/a>); o100p/++="sref">llcp/a>cnt*pa href="+codecntc" cass="sref">skp/a>);         icnt*pa href="+codecntc" cass="sref">skp/a>);                 } skp/a>); o 54p/a>pspa
 class="comment">/**p/spa
  o105p/a>pspa
 class=  *   lass="comment">/**p/spa
  o106p/a>pspa
 k"ss="comment">/**p/spa
  o107p/a>pspa
c"v3L83Fillssoffset ="blf ofoent"> *    f="+c =ransiefon ="blfk"ss="comment">/**p/spa
  o108p/a>pspa
 class=( o129p/a>pspa
 class="comment"> */p/spa
  llcp/a>__init*pa href="+code__initass="="sref">llcp/a> skbp/a>); ind_primp/a>) { o 63p/a>        structophref;f="+ca href="+code=s sockp/acurr;f="+ca href="+code=scurr;f="+cc" cass="sref">skp/a>);         strus="+c(pa href="+codeg="+classlref">__func__p/aev;typc(pa href="+codeev;typclasslref">__func__p/anext_offseta href="+code=snext_offsetlassass="sref">skp/a>); skp/a>); llcp/a>m="+c(pa href="+codeg="+classl= 0ap               m="+c(pa href="+codeg="+classl<ap               NBR_CONN_STATES(pa href="+codeNBR_CONN_STATESlassa"="sref">llcp/a>m="+c(pa href="+codeg="+class++aref">ind_primp/a>) { o 36p/="sref">sockp/acurr;f="+ca href="+code=scurr;f="+cc" casskb_queue_tailp/a>(&a (&as="+c(pa href="+codeg="+class]ass="sref">skp/a>); o137p/ef">__func__p/anext_offseta href="+code=snext_offsetlass = 0ass="sref">skp/a>); o118p/d t =="sref">llcp/a>ev;typc(pa href="+codeev;typclassl= 0ap               ev;typc(pa href="+codeev;typclassl<ap               NBR_CONN_EV(pa href="+codeNBR_CONN_EVlassa"="sref">llcp/a>ev;typc(pa href="+codeev;typclass++aref">ind_primp/a>) { o139p/////////eue_tailp/a>(&a (&aev;typc(pa href="+codeev;typclass]ass="sref">llcp/a>next_offseta href="+code=snext_offsetlassass="sref">skp/a>); o100p/">o118p/ef">__func__p/anext_offseta href="+code=snext_offsetlass +ss="sref">llcp/a>o=opfien_next_offseta href="+code=s sockp/acurr;f="+ca href="+code=scurr;f="+cc" clomment"> */p/spa
  o111p/9p//////////////////////////////////////////ef">__func__p/anext_offseta href="+code=snext_offsetlass) + 1ass="sref">skp/a>); o132p/a>                }                 }                 }                 } o106p/a>pspa
 class="comment">/**p/spa
  o107p/a>pspa
c"v3L83 /**p/spa
  o108p/a>pspa
 class="c="+c: f="+c ofoent"> *     ss="comment">/**p/spa
  o129p/a>pspa
 class=@ev;typc: typc ofohappened eventc"ss="comment">/**p/spa
  o 5pspa
 c"ss="comment">/**p/spa
  o 51p/a>pspa
 class=Fiensof="rtooffset ofodesiasd evtegory of transiefons.=R3med,> thec"ss="comment">/**p/spa
  o 52p/a>pspa
 class=desiasd f="rtooffset llc_conn_state_ev.p/spa
  o 73p/a>pspa
 class="comment"> */p/spa
          strus="+c(pa href="+codeg="+classlran3p/a>        struev;typc(pa href="+codeev;typclassas="sref">skbp/a>); ind_primp/a>) {         struntopa href="+code=rc" cass0ass="sref">skp/a>); cfm_primp/a>)) pspa
 cat=gtis f="ge,   */p/spa
  o108p/a>pspa








* init_pf_cycle  theI don't know wh3t is=it llc_conn_state_ev.p/spa
  o129p/a>pspa








*class="comment"> */p/spa
  llcp/a>ev;typc(pa href="+codeev;typclassaref">ind_primp/a>) { evp/a>-&LLC_CONN_EV_TYPE_PRIM(pa href="+codeLLC_CONN_EV_TYPE_PRIM" na:>                } o132p/s="sref">skbp/antopa href="+code=rc" cass="sref">llcp/a> skp/a>); evp/a>-&LLC_CONN_EV_TYPE_PDU(pa href="+codeLLC_CONN_EV_TYPE_PDU" na:>                } o124p/s="sref">skbp/antopa href="+code=rc" cass="sref">llcp/a> skp/a>); evp/a>-&LLC_CONN_EV_TYPE_SIMPLE(pa href="+codeLLC_CONN_EV_TYPE_SIMPLE" na:>                } o 36p/="sref">sockp/antopa href="+code=rc" cass="sref">llcp/a> skp/a>); evp/a>-&LLC_CONN_EV_TYPE_P_TMR(pa href="+codeLLC_CONN_EV_TYPE_P_TMR" na:>                } evp/a>-&LLC_CONN_EV_TYPE_ACK_TMR(pa href="+codeLLC_CONN_EV_TYPE_ACK_TMR" na:>                } evp/a>-&LLC_CONN_EV_TYPE_REJ_TMR(pa href="+codeLLC_CONN_EV_TYPE_REJ_TMR" na:>                } evp/a>-&LLC_CONN_EV_TYPE_BUSY_TMR(pa href="+codeLLC_CONN_EV_TYPE_BUSY_TMR" na:>                } o111p/="sref">sockp/antopa href="+code=rc" cass="sref">llcp/a> skp/a>);                 }         intopa href="+code=rc" cass="sref">skp/a>);                 }                 } o106p/a>pspa
 class="comment">/**p/spa
  o107p/a>pspa
c"v3L83 /**p/spa
  o108p/a>pspa
 class="cap: SAPk"ss="comment">/**p/spa
  o129p/a>pspa
 class=@sk: ctopetk"ss="comment">/**p/spa
  o 5pspa
 c"ss="comment">/**p/spa
  o 51p/a>pspa
 class=Ttis fun *    adds a ctopet to&the hash ="blfstof a SAP llc_conn_state_ev.p/spa
  o 52p/a>pspa
 class="comment"> */p/spa
  llcp/a> sk_buffp/a>ap*pa href="+codeaapass=lk">o 63p/a>        structopa href="+code=sock" class="sref">sockp/a>o*pa href="+code=sk" cas="sref">skbp/a>); ind_primp/a>) { o 63p/a>        structopa href="+code=llc_sock" class="sref">llc_sockp/a>o*pa href="+code=llc" class="sref">llcp/a>o=opa href="+code=llc_sk" class="sref">llc_skp/a>(pa href="+code=sk" class="sref">skp/a>);         struhlist_head*pa href="+codehlist_headass="sref">sk_buffp/adev_h(pa href="+code=dev_h(" class="sref">llcp/a>o=opa _dev_hashref="+code=sk_bo=opa _dev_hashlass="sref">llc_skp/aap*pa href="+codeaapass=lref">__func__p/aoo*pa href="+code=llc" cllass="sref">evp/a>-&deva href="+code=sdevlasslass="sref">evp/a>-&ifienexa href="+code=sifienexk" class="sref">skp/a>); o 63p/a>        struhlist_nulls_head*pa href="+codehlist_nulls_headass="sref">sk_buffp/aoaddr_h(pa href="+code=oaddr_h(" class="sref">llcp/a>o=opa _oaddr_hashref="+code=sk_bo=opa _oaddr_hashlass="sref">llc_skp/aap*pa href="+codeaapass=lrkb_queue_tailp/a>(&a evp/a>-&oaddr*pa href="+codeoaddrass=aR>                } o 48p/a> sk_buffp/a llc_skp/aap*pa href="+codeaapass=aR>                } llcp/a>o=opa href="+code=llc_sk" class="sref">llc_skp/a>(pa href="+code=sk" cllass="sref">skp/a>-&gap*pa href="+codeaapass=ass"sref">evp/a>-&gap*pa href="+codeaapass=R>                }                 } llcp/a>spin loop_bhref="+code=sk_bupin loop_bhlass=kb_queue_tailp/a>(&amap*pa href="+codeaapass=lass="sref">skp/a>->otopa href="+code=sok looplassaR>                } llcp/a>sap*pa href="+codeaapass=lass="sref">skp/a>->count*pa href="+codest;countlass++R>                } sk_buffp/auffnulls_add_nstr_nturef="+code=sk_buffnulls_add_nstr_ntulass="sref">llc_skp/a>(pa href="+code=sk" clref">__func__p/aoaddr_h(pa href="+code=oaddr_h(" cllR>                } sockp/ahlist_add_head*pa href="+codehlist_add_headlass=kb_queue_tailp/a>(&aoo*pa href="+code=llc" cllass="sref">evp/a>-&dev_hash_nstropa href="+codedev_hash_nstrk" clref">__func__p/adev_h(pa href="+code=dev_h(" cllR>                } skp/a>-&gpin unloop_bhref="+code=sk_bupin unloop_bhlass=kb_queue_tailp/a>(&amap*pa href="+codeaapass=lass="sref">skp/a>->otopa href="+code=sok looplassaR>                }                 } o 48p/a> o129p/a>pspa
 class="comment">/**p/spa
  o 5pspa
 class= /**p/spa
  o 51p/a>pspa
 class="cap: SAPk"ss="comment">/**p/spa
  o 52p/a>pspa
 class=@sk: ctopetk"ss="comment">/**p/spa
  o 73p/a>pspa
 k"ss="comment">/**p/spa
  o 54p/a>pspa
 class=Ttis fun *    removrs a ent"> *    from the hash ="blfstof a SAP ifk"ss="comment">/**p/spa
  o105p/a>pspa
 class=the ent"> *    was in this list llc_conn_state_ev.p/spa
  o106p/a>pspa
 class="comment"> */p/spa
  llcp/a> sk_buffp/a>ap*pa href="+codeaapass=lk">o 63p/a>        structopa href="+code=sock" class="sref">sockp/a>o*pa href="+code=sk" cas="sref">skbp/a>); ind_primp/a>) { o 63p/a>        structopa href="+code=llc_sock" class="sref">llc_sockp/a>o*pa href="+code=llc" class="sref">llcp/a>o=opa href="+code=llc_sk" class="sref">llc_skp/a>(pa href="+code=sk" class="sref">skp/a>); o*7pa hr74ne" nss="sref">skp/a>); skp/a>-&gpin loop_bhref="+code=sk_bupin loop_bhlass=kb_queue_tailp/a>(&amap*pa href="+codeaapass=lass="sref">skp/a>->otopa href="+code=sok looplassaR>                } llcp/a>sffnulls_del_nstr_init_nturef="+code=sk_buffnulls_del_nstr_init_ntulass="sref">llc_skp/a>(pa href="+code=sk" class="sref">skp/a>); llcp/a>hlist_del*pa href="+codehlist_dellass=kb_queue_tailp/a>(&aoo*pa href="+code=llc" cllass="sref">evp/a>-&dev_hash_nstropa href="+codedev_hash_nstrk" class="sref">skp/a>); sk_buffp/auap*pa href="+codeaapass=lass="sref">skp/a>->count*pa href="+codest;countlass--ass="sref">skp/a>); sockp/agpin unloop_bhref="+code=sk_bupin unloop_bhlass=kb_queue_tailp/a>(&amap*pa href="+codeaapass=lass="sref">skp/a>->otopa href="+code=sok looplassaR>                } skp/a>-& llc_skp/aap*pa href="+codeaapass=aR>                }                 } o 48p/a> o129p/a>pspa
 class="comment">/**p/spa
  o 5pspa
 class=  *    f="+c mach idlass="comment">/**p/spa
  o 51p/a>pspa
 class="ck: curr>ps ent"> *    f=o 63urf llc_conn_state_ev.p/spa
  o 52p/a>pspa
 class=@skb:oreceivrdmfr52" llc_conn_state_ev.p/spa
  o 73p/a>pspa
 k"ss="comment">/**p/spa
  o 54p/a>pspa
c"v3L83Seensoreceivrdmpdus to&the ent"> *    f="+c mach id llc_conn_state_ev.p/spa
  o105p/a>pspa
 class="comment"> */p/spa
  (structopa href="+code=sock" cla* 61p/a>        i>o*pa href="+code=sk" clk">o 63p/a>        strucp_buffa href="+code=sok buff class="sref">sockp/a>o(pa href="+code=>o(k" cas="sref">skbp/a>); ind_primp/a>) { o 63p/a>        stru sockp/aeva href="+code=sevlassass="sref">llcp/a>o=ophref;eva href="+code=s llc_skp/a>(pa href="+code=>o(k" caR>                }                 } llcp/a>eva href="+code=sevlasslass="sref">skp/a>-&typc(pa href="+codetypclassl ass="sref">llcp/a>LLC_CONN_EV_TYPE_PDU(pa href="+codeLLC_CONN_EV_TYPE_PDU" naR>                } skp/a>-&eva href="+code=sevlasslass="sref">skp/a>-&reaso="+code=sk_shutdreaso=lassass0ass="sref">skp/a>);         i llc_skp/a>(pa href="+code=sk" clref">__func__p/aa>(pa href="+code=>o(k" caR>                }                 } skp/a>); o 63p/a>        structopa href="+code=sock" class="sref">sockp/a (structopa href="+code=sock" class="sref">sockp/a>o*pa href="+code=sk" clomment"> */p/spa
  o 36p//////////////////////////////state_processp/a>(stru/p/_devicc(pa href="+code/p/_devicc class="sref">sockp/adeva href="+code=sdevlasslomment"> */p/spa
  o137p//////////////////////////////state_processp/a>(stru sk_buffp/asaddr*pa href="+codesaddrass=lomment"> */p/spa
  o118p//////////////////////////////state_processp/a>(stru sk_buffp/adaddr*pa href="+codedaddrass=as="sref">skbp/a>); ind_primp/a>) { (structopa href="+code=sock" class="sref">sockp/anew>o*pa href="+codenew>o" class="sref">llcp/a>o=opa _allo*pa href="+code=llcpa _allo*lass="sref">llc_skp/aoop_neta href="+code=saoop_netlass="sref">llc_skp/a>(pa href="+code=sk" cllref">__func__p/aa>(pa href="+code=sk" class="sref">skp/a>->familyopa href="+codegt;familyk" clref">__func__p/aGFP_ATOMICopa href="+codeGFP_ATOMICass=lomment"> */p/spa
  o111p/9p////////////////////////ef">__func__p/aa>(pa href="+code=sk" class="sref">skp/a>->prot*pa href="+codest;protk" caR>                } o 63p/a>        structopa href="+code=llc_sock" class="sref">llc_sockp/anewoo*pa href="+code=newoo*k" clrref">llc_sockp/a>o*pa href="+code=llc" class="sref">llcp/a>o=opa href="+code=llc_sk" class="sref">llc_skp/a>(pa href="+code=sk" class="sref">skp/a>); skp/a>); o               if="+code=sk" class="sref">skp/*p/spa
  sap*pa hrebacp/a>sap*pa hr3" idv3L53" cl6ass="6/jcs;="66n2l3l7ass="77e" nacrc/llc7_conn.c#L73" idv3L73" cl7ass=7         7 } llc_sockp/anewoo*>o*pa href="+code=llc" class="sref">llcp/a>o=opa href="+code=llc_f="ne">o               if="+coc7_conn.c#L73" idv3L73" cl7ass=7 > */p/spa
  skp/a>-memcps"+code=sk_bupin unloop_bh class="sref">llc_sockp/anewoo* evp/a>-&oaddaap*pa href="+codeaapass=lref">__func__p/adaddr*sizeofhref="+code=llc_f="ass="sref">llc_sockp/anewoo* evp/a>-&oadd)oc7_conn.c#L73" idv3L73" cl7ass=7 > */p/spa
  skp/a>-memcps"+code=sk_bupin unloop_bh class="sref">llc_sockp/anewoo* __func__p/adaddr*pa href="+codedaddrass="sref">sk_buffp/asaddr*sizeofhref="+code=llc_f="ass="sref">llc_sockp/anewoo* sk_buffp/adaddroc7_conn.c#L73" idv3L73" cl7ass=7 ">skbp/a>
  llc_sockp/anewoo* sockp/a>o*pa href="+code=aicc class="sref">sockp/ac7_conn.c#L73" idv3L73" cl7ass=7">/**p/sp7
  sk_buffp/a <_hash9reopa href="+code=llc_aicc class="sref">sockp/aoc7_conn.c#L73" idv3L73" cl7ass=7">/**p/sp7
  llcp/a> (&aoo*pa href="+code=ll_hashlass="sref">llc_skp/aap*pa href="+codf="ne">o               if="+coc7_conn.c#L73" idv3L73" cl7ass=7">/**p/sp7
  sk_buffp/a llc_skp/oc7_conn.c#L73" idv3L73" cl7ass=7"f">skp/a>
       "> */p/sp7
  o               if="+cc7_conn.c#L73" idv3L73" cl7ass=7"      _primp/a>7 {      _> */p/spa); (structopaap*pa href="+codeo=opaapass="sref">sk_buffp/a>ap*pa href="+codeaapass=lk">o 63p/a>        strucp_buffa href="+code=sok buff class="sref">sockp/a>o(pa href="+code=>o(k" cas="sre"> */p/sp7
  inde_ev.p/sp7
  o 63p/a>        structopaddr*pa href="+codeo=oaddrass="sref">sk_buffp/asaddr* href="+code=lladdrass="sref">sk_buffp/adaddc7_conn.c#L73" idv3L73" cl7ass=7"> */p/sp7
  (structopa href="+code=ssk" class="sref">llc_skc7_conn.c#L73" idv3L73" cl7ass=7">/**p/sp7 {               7 }         structpdu_de742"cto href="+code=s llc_skp/r*pa href="+codedaddrass="sref">sk_buffp/asadd." cl7ass="74ne"mass=kb_queue_tailmasskp/oc7_conn.c#L73" idv3L73" cl7ass=7ef">skp/a7); (strucpdu_de742"cttat href="+code=s llc_skp/r*e=sk_bupin unloop_bhladrass="sref">sk_buffp/asadd." cl7ass="74ne"ltate_processp/a>(stlc_skp/oc7_conn.c#L73" idv3L73" cl7ass=7         7 }         structpdu_de742"cdo href="+code=s llc_skp/r*pa href="+codedaddrass="sref">sk_buffp/adadd." cl7ass="74ne"mass=kb_queue_tailmasskp/oc7_conn.c#L73" idv3L73" cl7ass=7e (strucpdu_de742"cdtat href="+code=s llc_skp/r*e=sk_bupin unloop_bhaddrass="sref">sk_buffp/adadd." cl7ass="74ne"ltate_processp/a>(stlc_skp/oc7_conn.c#L73" idv3L73" cl7ass=7 primp/a>7 }      ef">skp/a7); sockp/a>o*pa href="+code=sk" cass="k" class="sref"e=sk" cass=" href="+code=s llc_skp/aap*pa href="+codeaapaaddrass="sref">sk_buffp/asaddr*e=sk_bupin unloop_bhaddrass="sref">sk_buffp/adaddoc7_conn.c#L73" idv3L73" cl7ass=7 > */p/sp7 } sockp/a>o*pa href="+code=sk" cas="sre         7 } ldroac_skc7_conn.c#L73" idv3L73" cl7ass=8         8 } o*7pa hr74ne" nss="s8         8 } llc_skp/a>(pa href="+code=sk" class="s8ef">skp/a8); o105p/a>pspa
 class="commen8         8 } hac"v3Lbe



e herpa



a of3">cfe upper layer oo*paca hrem"v3L105">o105p/a>pspa
 class="commen8 4       8 } o105p/a>pspa
 class="commen8 5       8 ;  *(see,s="66indmpnce,m"v3L105">o105p/a>pspa
 class="commen8 6       8 } pspa
 class=_st.c)a



pa
  a pas=Ttis m"v3L105">o105p/a>pspa
 class="commen8 7       8 ; hac"v3Lbem"v3L105">o105p/a>pspa
 class="commen8 8       8 } apa . -acmem"v3L105">o105p/a>pspa
 class="commen8 9       8 } o105p/a>pspa
 class="commen8">/**p/sp8
  skp/a>-unlikessopa href="+code=llc_sk" class="sref">llc_sk/aa>(pa href="+code=sk"="blflass[eue_tailp/ak;f="+ca hrefa>o*pa href="+codTCP_LISTENlass[eue_tailp/TCP_LISTENdaddroa href="+codeev;typclassaref">in8">/**p/sp8
  (structopa href="+code=sock" class="sref">sockp/anew>o*pa href="+codenew>o" class="sref">sockp/a llc_skp/a>(pa href="+code=sk" clref">__func__p/a sockp/ahref="+codeGFP_ATOMICass=lommen8e_ev.p/sp8
  sk_buffp/asaddr*e=sk_bupin unloop_bhaddrass="sref">sk_buffp/adaddoc7_conn.c#L73" idv3L73" cl7ass=8"> */p/sp8
  o               if="+code=sk" class="sref">skp/*p/spa8f">skbp/a8); ldroaoop_bhrc_skc7_conn.c#L73" idv3L73" cl7ass=8_primp/a>8 { (pa href="+code=_blfaowner_ass="sref">sk_bufe=_blfaowner_a href="+code=s llc_skp/r*pa href="+codedf="ne">o               if="+coc7_conn.c#L73" idv3L73" cl7ass=8ef">skp/a8); in8"7       8); o105p/a>pspa
 class="commen8         8 } cfem"v3L105">o105p/a>pspa
 class="commen8 9       8a> o105p/a>pspa
 class="commen8         8 } o 5s fcopepwith how
cfe PROCOMrdmpdufoevtegory of transiefons  ss="commen8 _ev.p/sp8 } o105p/a>pspa
 class="commen8         8 } o105p/a>pspa
 class="commen8         8 } __func__p/a sockp/a>o*pa href="+codsk" class="sref">llc_skc7_conn.c#L73" idv3L73" cl7ass=8         8 }     8         8 } sk_bufp_bhowned_by_uspaopa href="+code=llc_sk" class="sref">llc_skpode=sk" class="sref">skp/*p/spa8         8 }         stru llc_skp/a>(pa href="+code=sk" clref">__func__p/aoc7_conn.c#L73" idv3L73" cl7ass=8         8 } in848">o 48p8a> ldprintrcode=ridv3L53" cl7" code">"* i7;s:pspaode"v3Lbacklog...\n"m"v3L10p/a>(pa href="+co__o 54__k" class="sref"e=o 54___p/aoc7_conn.c#L73" idv3L73" cl7ass=8">/**p/sp8
  llcpls=stlfabacklog"witc href="+code=s llc_skp/r*pa href="+codedV_TYPACKETevlass="sref">lV_TYPACKET_p/aoc7_conn.c#L73" idv3L73" cl7ass=8"        8
  llc_skp/a>(pa href="+code=sk" clref">__func__p/a/a>(pa href="+code=sk" cllref">__func__p/aa>(pa href="+code=sk"v"+bu 63p/a>        struv"+bu c_skpode=sk" class="sref">skp/*p/spa8">/**p/sp8
  ldroaoop_bhrc_skc7_conn.c#L73" idv3L73" cl7ass=8">/**p/sp8
      8">/**p/sp8
      8">/**p/sp8
  llc_skp/a>(pa href="+code=sk" class="s8e_ev.p/sp8
  skp/a>-&  bhre36"opa href="+code=llc_sk" class="sref">llc_skp/a>(pa href="+code=sk" class="s8e        8
  (pa href="+code=sk" class="s8e        8); ldroac_skCONN_EV_TYPE_BUSY_TMR" na:>    8"8">o 48p8 { __fukfree_de= href="+code=s llc_skp/p/a>(pa href="+code=sk" class="s8ef">skp/a8); (pa href="+code=sk" class="s8ef">skp/a8); ldroaoop_bhrc_skCONN_EV_TYPE_BUSY_TMR" na:>    8         8 } __fukfree_de= href="+code=s llc_skp/p/a>(pa href="+code=sk" class="s8e>/**p/sp8); skp/a8);     8ef">skp/a8);     8         8 } lV_TYREFCNT_DEBUGL95" idv3L95" cl7ss="l70ne" n>    8         8 } lV_TYREFCNT_DEBUGL95" idv3L95" cl7ss="l70ne" n>    8         8 }         structt/aoop6c/llc7_conn.c#L73" idv3L73" cl7ass=8e8">o 48p8a> /**p/sp8
  o*7pa hr74ne" nss="s8">/**p/sp8
  o129p/a>pspa
 class="commen8e_ev.p/sp8
  psP="+codes rxspa
 csa



exp">o 5simers ent"> *    f="+c mach id llc_conn_sta8e_ev.p/sp8
  V_Ts100s (p8022eensoreceiv)ent"> *    f="+c mach id llc_conn_sta8ef">skp/a8
  oqueucd rxspa
 c orev;typc: typc ofohappened eventc"ss="commen8e_ev.p/sp8
  o 54p/a>pp="+codes pa
 csatle  hac" 54p/a>ps



cimersatle  hacc: typc ofohappened eventc"ss="commen8e        8); o 5ducodeLpa

odeL3L1Ispa
 (apper to data_reqshandl  ).  pa
 csc: typc ofohappened eventc"ss="commen8e        8 { o 54p/a>p(lassmac.c)a



cimersaqueuc by3cimerc: typc ofohappened eventc"ss="commen8e8">o 48p8 } o 54p/a>s(lass=_ac.c) ent"> *    f="+c mach id llc_conn_sta8         8 } o105p/a>pspa
 class="commen8         8 }         structbacklog"/oa hrefcreatr_in5p/ingpa hrlass=state_processp/a>(structopa href="+code=sock" class="sref">sockp/ap*pa href="+codeaapass=lk">o 63p/a>        strucp_buffa href="+code=sok buff class="sref">sockp/a>o(pa href="+code=>o(k" cas="sr8ef">skp/a8); in8         8 }         struntopa href="+code=rc" cass0ass="s8         8 } o 63p/a>        structopa href="+code=llc_sock" class="sref">llc_sockp/a>o*pa href="+code=llc" class="sref">llcp/a>o=opa href="+code=llc_sk" class="sref">llc_skp/a>(pa href="+code=sk" class="s8ef">skp/a8);     8"> */p/sp8
  skp/a>-likessopa href="+code=llc_ructbacklog"witch =="sref">llcpls=sbacklog"witc href="+code=s llc_skp/)efa>o*pa href="+codV_TYPACKETevlass="sref">lV_TYPACKET_p/aooa href="+codeev;typclassaref">in8"> */p/sp8
  skp/a>-likessopa href="+code=llc_rucass="sref">llc_sockp/a/aa>(pa href="+code=s"blflass[eue_tailp/a>(&as="+ aa>( 1ooa" cl6ass="68e" nam"v3L137a ofcloso 5 am"v3L105">o105p/a>pspa
 class="commen8         8
          strun="66e" nam"v3L1p"lirocesp/a>        stru llc_skp/a>(pa href="+code=sk" clref">__func__p/aoc7_conn.c#L73" idv3L73" cl7ass=8f">skbp/a8); 8 { __fu6n2_kfree_de=c/llc7_conn.c#L73" idv3L73" cl7ass=8"> */p/sp8
  llcpls=sbacklog"witc href="+code=s llc_skp/)efa>o*pa href="+codV_TYEVENTevlass="sref">lV_TYEVENTskp/)e href="+codeev;typclassaref">in8         8 } ap/a>pv;typ5 am"v3L105">o105p/a>pspa
 class="commen8ef">skp/a8); skp/a>-likessopa href="+code=llc_rucass="sref">llc_sockp/a/aa>(pa href="+code=s"blflass[eue_tailp/a>(&as="+ aa>( 1ooaa" cl6ass="68e" nam"v3L137a ofcloso 5 am"v3L105">o105p/a>pspa
 class="commen8ef">skp/a8);         strun="66e" nam"v3L1p"liroces 61p/a>        i llc_skp/a>(pa href="+code=sk" clref">__func__p/aa>(pa href="+code=>o(k" caR>    8  sap*pa8hreba8p/a>sap*pa hr3" idv3L5elsp7_conn.c#L73" idv3L73" cl7ass=8_> */p/sp8 } __fu6n2_kfree_de=c/llc7_conn.c#L73" idv3L73" cl7ass=8"> */p/sp8
  in8 > */p/sp8
  lprintrcode=rass="6/jcs;="6KERN_ER&LLC_CONN_EV_TYPKERN_ER&L43" iidv3L53" cl7" code">"* i7;s:pinvalid fe=3in
backlog\n"m"v3L10p/a>(pa href="+co__o 54__k" class="sref"e=o 54___p/aoc7_conn.c#L73" idv3L73" cl7ass=8 ">skbp/a8
  __fu6n2_kfree_de=c/llc7_conn.c#L73" idv3L73" cl7ass=8">/**p/sp8
      8">/**p/sp8
      8">/**p/sp8
          intopa href="+code=rc" cass="s8"f">skp/a8
  __fu6n2_kfree_de=c/llCONN_EV_TYPE_BUSY_TMR" na:>    8"f">skp/a8
  __fukfree_de= href="+code=s llc_skp/p/a>(pa href="+code=sk" class="s8" 8 {     8"> */p/sp8);     8"> */p/sp8
  o129p/a>pspa
 class="commen8e_ev.p/sp8
  o=ode=s - Ie=sializsappremovr_cwith default3p/a values ent"> *    f="+c mach id llc_conn_sta8"> */p/sp8
  o 52p/ to ie=sializs ent"> *    f="+c mach id llc_conn_sta8">/**p/sp8 {  *    f="+c mach id llc_conn_sta8">/**p/sp8 }  *    f="+c mach id llc_conn_sta8"f">skp/a8); o105p/a>pspa
 class="commen8         8 } llcp/a>o=ode=s hrefcreatr_in5p/ingpa hrlass=state_processp/a>(structopa href="+code=sock" cla* 61p/a>       >o(pa href="+code=>o(k" cas="sr8e in8 primp/a>8 } o 63p/a>        structopa href="+code=llc_sock" class="sref">llc_sockp/a>o*pa href="+code=llc" class="sref">llcp/a>o=opa href="+code=llc_sk" class="sref">llc_skp/a>(pa href="+code=sk" class="s8ef">skp/a8);     8 > */p/sp8 } llc_sockp/a/aa>(pa href="+code=s"blflass[eue_tailp/a>(&as="+  c(pa href="+codetypclassl asSTATE_ADMevlass="sref">lV_TYsl asSTATE_ADMc/llc7_conn.c#L73" idv3L73" cl7ass=8         8 } llc_sockp/a/aa>(pa href="+code=i54_cnt63p/a>        sti54_cnt6kp/a>o*pa href="+code=llcass="sref">llc_sockp/a/aa>(pa href="+code=de4_cnt63p/a>        stde4_cnt6kp/a>o*2c7_conn.c#L73" idv3L73" cl7ass=9         9 } llc_sockp/a/aa>(pa href="+code=de4_steashlass="sref">lde4_steakp/a>o*pa href="+code=llcass="sref">llc_sockp/a/aa>(pa href="+code=ensorec_steashlass="sref">lensorec_steakp/a>o*1c7_conn.c#L73" idv3L73" cl7ass=9 1       9 {     9ef">skp/a9); (&a." cl7ass="74ne"cimerlass[eue_tailp/cimer>(&ap/a>(pa href="+codc_procesack_cmr_cclref">__func__p/c_procesack_cmr_cc>(&apidv3L121" cl7ss="l72ne" n>    9e3">skp/a9); llc_skp/a>(pa href="+code=sk" class="s9 4       9 } (&aoo*pa href="+code=llack_cimerlass[eue_tailp/ack_cimer>(&a." cl7ass="74ne"exp">olass[eue_tailp/exp">oL92" idv3L92"a>o*pa href="+codsysctl_p/a2_ack_cime6n2l3l7ass="77e" nsysctl_p/a2_ack_cime6n2c/llc7_conn.c#L73" idv3L73" cl7ass=9 5       9 ;     9 6       9 } (&a." cl7ass="74ne"cimerlass[eue_tailp/cimer>(&ap/a>(pa href="+codc_procespf_cycle_cmr_cclref">__func__p/c_procespf_cycle_cmr_cc>(&apidv3L121" cl7ss="l72ne" n>    9e7       9 ; llc_skp/a>(pa href="+code=sk" class="s9 8       9 } llc_sockp/a/aa>(pa href="+code=pf_cycle_cimerlass[eue_tailp/pf_cycle_cimer>(&a." cl7ass="74ne"exp">olass[eue_tailp/exp">oL92" idv3L92"a>o*pa href="+codsysctl_p/a2_p_cime6n2l3l7ass="77e" nsysctl_p/a2_p_cime6n2c/llc7_conn.c#L73" idv3L73" cl7ass=9 9       9 }     9">/**p/sp9
  (&a." cl7ass="74ne"cimerlass[eue_tailp/cimer>(&ap/a>(pa href="+codc_procesrej_cmr_cclref">__func__p/c_procesrej_cmr_cc>(&apidv3L121" cl7ss="l72ne" n>    9">/**p/sp9
  llc_skp/a>(pa href="+code=sk" class="s9e_ev.p/sp9
  (&aoo*pa href="+code=llrej_s"75_cimerlass[eue_tailp/rej_s"75_cimer>(&a." cl7ass="74ne"exp">olass[eue_tailp/exp">oL92" idv3L92"a>o*pa href="+codsysctl_p/a2_rej_cime6n2l3l7ass="77e" nsysctl_p/a2_rej_cime6n2c/llc7_conn.c#L73" idv3L73" cl7ass=9"> */p/sp9
  skbp/a9); (&a." cl7ass="74ne"cimerlass[eue_tailp/cimer>(&ap/a>(pa href="+codc_procesbusyscmr_cclref">__func__p/c_procesbusyscmr_cc>(&apidv3L121" cl7ss="l72ne" n>    9"5       9 { llc_skp/a>(pa href="+code=sk" class="s9e6       9); (&aoo*pa href="+code=llbusyssa hrecimerlass[eue_tailp/busyssa hrecimer>(&a." cl7ass="74ne"exp">olass[eue_tailp/exp">oL92" idv3L92"a>o*pa href="+codsysctl_p/a2_busyscime6n2l3l7ass="77e" nsysctl_p/a2_busyscime6n2c/llc7_conn.c#L73" idv3L73" cl7ass=9"7       9);     9         9 } llc_sockp/a/aa>(pa href="+code=n2ass="sref">llc_n2kp/a>o*2c aa" cl6ass="68e" nam"v3L137max2" cransmip5 am"v3L105">o105p/a>pspa
 class="commen9 9       9a> llc_sockp/a/aa>(pa href="+code=k" class="sref"> href=>o*2c aa" cl6ass="68e" nam"v3L137tx win*size,pwillLadjust dylc/5 am"v3L105">o105p/a>pspa
 class="commen9         9 } llc_sockp/a/aa>(pa href="+code=rwlass[eue_tailp/rwkp/a>o*128;a" cl6ass="68e" nam"v3L137rx win*size (opta



equalis m"v3L105">o105p/a>pspa
 class="commen9         9 } V_T)5 am"v3L105">o105p/a>pspa
 class="commen9 _ev.p/sp9 } llcse=_queucoheadode=sopa hhref="+codehlist_dellass=kb_queue_tailp/a>(&aoo*pa href="+code=llpdu_unack_qlass[eue_tailp/pdu_unack_qc_skp/a>(pa href="+code=sk" class="s9         9 } __func__p/aa>(pa href="+code=sk"backlog"/oa3p/a>        stsk"backlog"/oakp/a>o*pa href="+code=llc"backlog"/oa3p/a>        structbacklog"/oa hre/a>(pa href="+code=sk" class="s9 ">skbp/a9 }     9         9 }     9         9 } o129p/a>pspa
 class="commen9         9 } o=olo*pa - Ao*pa hrs>V_Ts100sm"v3L129">o129p/a>pspa
 class="commen9         9 } o129p/a>pspa
 class="commen9 9       9a>  *    f="+c mach id llc_conn_sta9">/**p/sp9
   *    f="+c mach id llc_conn_sta9"        9
  a>V_Ts100s 



ie=sializsapit. R cl7ss
cfe neweV_Ts100sm"v3L129">o129p/a>pspa
 class="commen9">/**p/sp9
   ="66onem"v3L105">o105p/a>pspa
 class="commen9">/**p/sp9
  o105p/a>pspa
 class="commen9">/**p/sp9
  o 63p/a>        structopa href="+code=sock" class="sref">llcp/a>o=opa _allo*pa href/////////////////////////ass="sref">llc_n="+codopa href="+code=soc/ass="sref">llc_n="+cod,3" cl6ass="68ne" nam class="sref">skp/a>-;familyopa href="+codegt;fagfp_2l3l7ass="77e" ngfp_2+codo href="+code=llprioritllass[eue_tailp/prioritlyopa h//////////////////////gt;polass[eue_tailp/pros m"odopa href="+code=s class="sref">skp/agt;prot*p5">o105p/a>pspa
 class="commen9"        9
  in9e_ev.p/sp9
  (structopa href="+code=sock" class="sref">sockp/a>o*pa href="+codsklass="sref">llcp/a>o=_allo*pa href="+code=llcpa _oc/ass="sref">llc_n="+cod,36ass="68ne" nam class="sref">skp/a>-;familyopa href="+codegt;faprioritllass[eue_tailp/prioritlyopa ha href="+code=s class="sref">skp/agt;prot*p/a>(pa href="+code=sk" class="s9e        9
      9e        9); sockp/a>o*pa href="+code=sk" cas="sr9"8">o 48p9 { skp/a9); llcp/a>o=ode=s hrefref="+code=llc_sk" class="sref">llc_skp/a>(pa href="+code=sk" class="s9ef">skp/a9); (stode=s_data hrefref="+code=llc_NULLtate_processp/aNULLyopa ha href="+code=ssk" class="sref">llc_skp/a>(pa href="+code=sk" class="s9e>/**p/sp9 } lV_TYREFCNT_DEBUGL95" idv3L95" cl7ss="l70ne" n>    9e>/**p/sp9); llcp/a>o=atomic_in"opa hhref="+codehlist_dellasst/aoop63p/a>        structt/aoop6c/llp/a>(pa href="+code=sk" class="s9e>/**p/sp9); lprintrcode=rass="6/jcs;="6KERN_DEBUGevlass="sref">lKERN_DEBUG+codo idv3L53" cl7" code">"V_Ts100set6n2l3lp gpa hrd0in6n2l3ls, now wephave6n2l3ld6_oive\n"m"v3L10p/a>(pa href="+coocesslass="sref">llc_skpa>(pa href="+code=sk" class="s9e        9); (pa href="+co__o 54__k" class="sref"e=o 54___p/ap/a>(pa href="+coatomic_pa ef">sk_buffp/a     9         9 } llc_skc7_conn.c#L73" idv3L73" cl7ass=9e8">o 48p9a>     9">/**p/sp9
  o*7pa hr74ne" nss="s9">/**p/sp9
  o129p/a>pspa
 class="commen9e_ev.p/sp9
  a>V_Ts100sepc: typc ofohappened eventc"ss="commen9e_ev.p/sp9
  a>V_Ts100sepc: typc ofohappened eventc"ss="commen9e_ev.p/sp9
  o105p/a>pspa
 class="commen9e        9); llcp/a>o=ofreec:refcreatr_in5p/ingpa hrlass=state_processp/a>(structopa href="+code=sock" class="sref">sockp/a>o*pa href="+code=sk" cas="sr9e        9 { in9e8">o 48p9 } o 63p/a>        structopa href="+code=llc_sock" class="sref">llc_sockp/a>o*pa href="+code=llc" class="sref">llcp/a>o=opa href="+code=llc_sk" class="sref">llc_skp/a>(pa href="+code=sk" class="s9         9 } o*7pa hr74ne" nss="s9         9 } (&aoo*pa href="+code=lls"blflass[eue_tailp/a>(&as="+ pa href="+codetypclassl asOUT_OF_SVCevlass="sref">lV_TYsl asOUT_OF_SVCc_skc7_conn.c#L73" idv3L73" cl7ass=9ef">skp/a9); o105p/a>pspa
 class="commen9         9 } llc_skp/a>(pa href="+coNULLtate_processp/aNULLyopap/a>(pa href="+code=sk" class="s9 >/**p/sp9 } lDEBUG_V_TYsl asALLOC40" idv3L1p/a>o*7pa hr74ne" nss="s9         9); lprintrcode=rass="6/jcs;="6KERN_INFOevlass="sref">lKERN_INFO+codo idv3L53" cl7" code">"* i7;s:punackq=n2l3ld, txq=n2l3ld\n"m"v3L10p/a>(pa href="+co__o 54__k" class="sref"e=o 54___p/apa>(pa href="+code=sk" class="s9"> */p/sp9
  llcse=_queucolenopa hhref="+codehlist_dellass=kb_queue_tailp/a>(&aoo*pa href="+code=llpdu_unack_qlass[eue_tailp/pdu_unack_qc_skppa>(pa href="+code=sk" class="s9"        9
  llcse=_queucolenopa hhref="+codehlist_dele=sk" cllref">__func__p/aa>(pa href="+code=sk"write_queucsref">llcp/a>o=_alwrite_queucc/llpp/a>(pa href="+code=sk" class="s9         9
  skbp/a9); llcp/a>o=_a=_queucopurgcopa hhref="+codehlist_dele=sk" cllref">__func__p/aa>(pa href="+code=sk" 54p/a>_queucsref">llcp/a>o=_al 54p/a>_queucyopap/a>(pa href="+code=sk" class="s9_primp/a>9 { llcp/a>o=_a=_queucopurgcopa hhref="+codehlist_dele=sk" cllref">__func__p/aa>(pa href="+code=sk"write_queucsref">llcp/a>o=_alwrite_queucc/llp/a>(pa href="+code=sk" class="s9_        9
  llcp/a>o=_a=_queucopurgcopa hhref="+codehlist_dellass=kb_queue_tailp/a>(&aoo*pa href="+code=llpdu_unack_qlass[eue_tailp/pdu_unack_qc_skp/a>(pa href="+code=sk" class="s9         9 } lV_TYREFCNT_DEBUGL95" idv3L95" cl7ss="l70ne" n>    9ef">skp/a9); sk_buffp/a __func__p/aa>(pa href="+code=sk" 5fcnslass="sref">llcse" 5fcnsc_skp != 1)e href="+codeev;typclassaref">in9ef">skp/a9); lprintrcode=rass="6/jcs;="6KERN_DEBUGevlass="sref">lKERN_DEBUG+codo idv3L53" cl7" code">"De" cl7s" idof>V_Ts100s n2l3lp delayed0in6n2l3ls, cns=n2l3ld\n"m"v3L10phref="+codeev;typclassaref">in9e        97ass="77e" nacp/a>sap*pa9hreba9p/a>sap*pa hr3" idv3L5 idv3L61" cl7ass="761e"te" class="sref">llc_skp/a>(pa href="+co__o 54__k" class="sref"e=o 54___p/ap/a>(pa href="+coatomic_pa ef">sk_buffp/a __func__p/aa>(pa href="+code=sk" 5fcnslass="sref">llcse" 5fcnsc_skpp/a>(pa href="+code=sk" class="s9 > */p/sp9 } lprintrcode=rass="6/jcs;="6KERN_DEBUGevlass="sref">lKERN_DEBUG+codo idv3L53" cl7" code">"n2l3ld6V_Ts100seps>apa stillLaoive\n"m"v3L10pa>(pa href="+code=sk" class="s9         9
  (pa href="+coatomic_pa ef">sk_buffp/a in9 ">skbp/a9
  (pa href="+coatomic_de"sref">llcp/a>o=atomic_de"opa hhref="+codehlist_dellasst/aoop63p/a>        structt/aoop6c/llp/a>(pa href="+code=sk" class="s9">/**p/sp9
  lprintrcode=rass="6/jcs;="6KERN_DEBUGevlass="sref">lKERN_DEBUG+codo idv3L53" cl7" code">"V_Ts100set6n2l3lp released0in6n2l3ls, n2l3ld6_pa stillLaoive\n"m"v3L10p/a>(pa href="+coocesslass="sref">llc_skpa>(pa href="+code=sk" class="s9">/**p/sp9
  (pa href="+co__o 54__k" class="sref"e=o 54___p/ap/a>(pa href="+coatomic_pa ef">sk_buffp/a /**p/sp9
      9"f">skp/a9
  skp/a9
  skp/a>-&  bhre36"opa href="+code=llc_sk" class="sref">llc_skp/a>(pa href="+code=sk" class="s9"     9"> */p/sp9 {     9"        9); o129p/a>pspa
 class="commen9"> */p/sp9
  a>ensorec" im"v3L129">o129p/a>pspa
 class="commen9"">skbp/a9
  V_Ts100sp/ to resesm"v3L129">o129p/a>pspa
 class="commen9"> */p/sp9
  o129p/a>pspa
 class="commen9">/**p/sp9 { a>ensorec" i to cfe outdof>servicerdmpdu. Stopapits cimer opv3L129">o129p/a>pspa
 class="commen9">/**p/sp9 } any pa
 csain6cfe queucsdof>cfe ensorec" i ent"> *    f="+c mach id llc_conn_sta9"f">skp/a9); o105p/a>pspa
 class="commen9         9 } llcp/a>o=oresesm"refcreatr_in5p/ingpa hrlass=state_processp/a>(structopa href="+code=sock" class="sref">sockp/a>o*pa href="+code=sk" cas="sr9e in9 primp/a>9 } o 63p/a>        structopa href="+code=llc_sock" class="sref">llc_sockp/a>o*pa href="+code=llc" class="sref">llcp/a>o=opa href="+code=llc_sk" class="sref">llc_skp/a>(pa href="+code=sk" class="s9ef">skp/a9);     9 > */p/sp9 } llc_skp/a>(pa href="+coNULLtate_processp/aNULLyopap/a>(pa href="+code=sk" class="s9         9 } llcp/a>o=_a=_queucopurgcopa hhref="+codehlist_dele=sk" cllref">__func__p/aa>(pa href="+code=sk"write_queucsref">llcp/a>o=_alwrite_queucc/llp/a>(pa href="+code=sk" class="s10         10    a href="ne6t/llc/llc10   >10  L61" idv3L61" cl7ass="761e"te=_queucopurgcsref">llcp/a>o=_a=_queucopurgcopa hhref="+codehlist_dellass=kb_queue_tailp/a>(&aoo*pa href="+code=llpdu_unack_qlass[eue_tailp/pdu_unack_qc_skp/a>/pre>>(pa href="+code=sk" class="s10 1       10 { (&aoo*pa href="+code=ll" mote_busysflaglass[eue_tailp/" mote_busysflagL61" iduntopa href="+code=rc" cass0ass="s10 2       10 } (&aoo*pa href="+code=llcausesflaglass[eue_tailp/causesflagL71" idv3L71"untopa href="+code=rc" cass0ass="s10 3       10 ; (&aoo*pa href="+code=ll" tryss0unslass="sref">llc" tryss0unsL43" idv3L43untopa href="+code=rc" cass0ass="s10 4       10 } llc_skp/0p/a>(pa href="+code=sk" class="s10 5       10 ; (&aoo*pa href="+code=llfsflaglass[eue_tailp/fsflagL71" idv3L71"3L43untopa href="+code=rc" cass0ass="s10 6       10 } (&aoo*pa href="+code=llssflaglass[eue_tailp/ssflagL71" idv3L71"3L43untopa href="+code=rc" cass0ass="s10 7       10 ; (&aoo*pa href="+code=llack_p 63p/a>        sack_p L71" idv3L71"3L43untopa href="+code=rc" cass0ass="s10 8       10 } llc_sockp/a/aa>(pa href="+code=firsfapdu_N   i 10 119" idv3L119" cl7ss="l71ne" naass="sref">llc_sockp/a/aa>(pa href="+code=ack_musfabe_s"7ef">sk_buffp/a 10
 19" idv3L119" cl7ss="l71ne" naass="sref">llc_sockp/a/aa>(pa href="+code=de4_steashlass="sref">lde4_steakp/a>v3L71"3L43un1c7_conn.c#L73" idv3L73" cl7ass=10
1       10
  (&aoo*pa href="+code=lli54_cnt63p/a>        sti54_cnt6kp/a>v3L71"3L43un2c7_conn.c#L73" idv3L73" cl7ass=10
2       10
  (&aoo*pa href="+code=llde4_cnt63p/a>        stde4_cnt6kp/a>v3L71"3L43un2c7_conn.c#L73" idv3L73" cl7ass=10
3       10
  (&aoo*pa href="+code=llXs=kb_queue_tailXL71" idv3L71" cl7ass="untopa href="+code=rc" cass0ass="s1014       10); (&aoo*pa href="+code=llfailed_data_req  i 10
#L45" idv3L45" cl7ass="74e" lass=kb_queue_tailp/a>(&aoo*pa href="+code=llb_qtop63p/a>        str_qtop6L71" idv3L71" cluntopa href="+code=rc" cass0ass="s1016       10);     10
7       10); 
Tfe original LXR softw_pa by3cfe v3L104" chttp://sourceforgc.l7ssprojects/lxr">LXR ass=unitlyopa ht54">experi="75al ver " i by3v3L104" cmailto:lxr@"neux.nostrxr@"neux.noyopa. rxr."neux.no kindly hoshrd0by3v3L104" chttp://www.redpill-"nepro.nostRedpill Lnepro ASyopa hproviderdof>Vneux enssultodeL3Ld oper h" is>services>si54e 1995.