Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Pygments / examplefiles / output / IPDispatchP.nc
Size: Mime:
€]q(cpygments.token
_TokenType
qXCommentqX	Multilineq†q…qq}q(Xsubtypesqcbuiltins
set
q	]q
…qRqXparentq
hh…q…qq}q(hh	]q(hhXPreprocq†q…qq}q(hh	]q…qRqh
hubhhXMultiq†q…qq}q(hh	]q …q!Rq"h
hubhhXHashbangq#†q$…q%q&}q'(hh	]q(…q)Rq*h
hubhhXSingleq+†q,…q-q.}q/(hh	]q0…q1Rq2h
hubhhX
SingleLineq3†q4…q5q6}q7(hh	]q8…q9Rq:h
hubhhXDocq;†q<…q=q>}q?(hh	]q@…qARqBh
hubhhX	DirectiveqC†qD…qEqF}qG(hh	]qH…qIRqJh
hubhhhX
SinglelineqK†qL…qMqN}qO(hh	]qP…qQRqRh
hubhhXPreprocFileqS†qT…qUqV}qW(hh	]qX…qYRqZh
hubhhXSpecialq[†q\…q]q^}q_(hh	]q`…qaRqbh
hube…qcRqdh
h)…qeqf}qg(hh	]qh(hXEscapeqi…qj…qkql}qm(hh	]qn…qoRqph
hfubhXOperatorqq…qr…qsqt}qu(hh	]qv(hhqXDBSqw†qx…qyqz}q{(hh	]q|…q}Rq~h
htubhhqXWordq†q€…qq‚}qƒ(hh	]q„…q…Rq†h
htube…q‡Rqˆh
hfhh‚hwhzubhXNameq‰…qŠ…q‹qŒ}q(hh	]qŽ(hh‰XTagq†q…q‘q’}q“(hh	]q”…q•Rq–h
hŒubhh‰XEntityq—†q˜…q™qš}q›(hh	]qœhh‰h—hw‡q…qžqŸ}q (hh	]q¡…q¢Rq£h
hšuba…q¤Rq¥h
hŒhwhŸubhh‰X	Exceptionq¦†q§…q¨q©}qª(hh	]q«…q¬Rq­h
hŒubhh‰X	Decoratorq®†q¯…q°q±}q²(hh	]q³…q´Rqµh
hŒubhh‰XClassq¶†q·…q¸q¹}qº(hh	]q»(hh‰h¶hw‡q¼…q½q¾}q¿(hh	]qqÁRqÂh
h¹ubhh‰h¶XStartqÇqąqŁqÆ}qÇ(hh	]qȅqÉRqÊh
h¹ube…qËRqÌh
hŒhÃhÆhwh¾ubhh‰XVariableq͆q΅qρqÐ}qÑ(hh	]qÒ(hh‰hÍX	AnonymousqӇqԅqՁqÖ}q×(hh	]q؅qÙRqÚh
hÐubhh‰hÍh¶‡qۅq܁qÝ}qÞ(hh	]q߅qàRqáh
hÐubhh‰hÍXMagicqâ‡qã…qäqå}qæ(hh	]qç…qèRqéh
hÐubhh‰hÍXGlobalqê‡që…qìqí}qî(hh	]qï…qðRqñh
hÐubhh‰hÍXInstanceqò‡qó…qôqõ}qö(hh	]q÷…qøRqùh
hÐube…qúRqûh
hŒh¶hÝhêhíhòhõhâhåhÓhÖubhh‰X	Attributeqü†qý…qþqÿ}r(hh	]rhh‰hüh͇r…rr}r(hh	]r…rRrh
hÿuba…r	Rr
h
hŒhÍjubhh‰X	Namespacer†r…r
r}r(hh	]r…rRrh
hŒubhh‰XPropertyr†r…rr}r(hh	]r…rRrh
hŒubhh‰XSymbolr†r…rr}r(hh	]r …r!Rr"h
hŒubhh‰XClassesr#†r$…r%r&}r'(hh	]r(…r)Rr*h
hŒubhh‰XPseudor+†r,…r-r.}r/(hh	]r0…r1Rr2h
hŒubhh‰XLabelr3†r4…r5r6}r7(hh	]r8…r9Rr:h
hŒubhh‰hq†r;…r<r=}r>(hh	]r?…r@RrAh
hŒubhh‰XBuiltinrB†rC…rDrE}rF(hh	]rG(hh‰jBj+‡rH…rIrJ}rK(hh	]rL…rMRrNh
jEubhh‰jBXTyperO‡rP…rQrR}rS(hh	]rT…rURrVh
jEube…rWRrXh
hŒj+jJjOjRubhh‰XFieldrY†rZ…r[r\}r](hh	]r^…r_Rr`h
hŒubhh‰XOtherra†rb…rcrd}re(hh	]rfhh‰jaXMemberrg‡rh…rirj}rk(hh	]rl…rmRrnh
jduba…roRrph
hŒjgjjubhh‰XFunctionrq†rr…rsrt}ru(hh	]rvhh‰jqhâ‡rw…rxry}rz(hh	]r{…r|Rr}h
jtuba…r~Rrh
hŒhâjyubhh‰jO†r€…rr‚}rƒ(hh	]r„…r…Rr†h
hŒubhh‰XConstantr‡†rˆ…r‰rŠ}r‹(hh	]rŒ…rRrŽh
hŒube…rRrh
hfhühÿjBjEh¶h¹j‡jŠh®h±h—hšh¦h©jqjtjjj3j6jjjajdhh’hÍhÐjYj\jjj+j.hqj=j#j&jOj‚ubhXLiteralr‘…r’…r“r”}r•(hh	]r–(hj‘ja†r—…r˜r™}rš(hh	]r›…rœRrh
j”ubhj‘XCharrž†rŸ…r r¡}r¢(hh	]r£…r¤Rr¥h
j”ubhj‘XDater¦†r§…r¨r©}rª(hh	]r«…r¬Rr­h
j”ubhj‘XScalarr®†r¯…r°r±}r²(hh	]r³hj‘j®XPlainr´‡rµ…r¶r·}r¸(hh	]r¹…rºRr»h
j±uba…r¼Rr½h
j”j´j·ubhj‘XStringr¾†r¿…rÀrÁ}rÂ(hh	]rÃ(hj‘j¾XInterpolrćrÅ…rƁrÇ}rÈ(hh	]rÉ…rÊRrËh
jÁubhj‘j¾X	DelimeterṙrÍ…r΁rÏ}rÐ(hh	]rÑ…rÒRrÓh
jÁubhj‘j¾jž‡rÔ…rՁrÖ}r×(hh	]rØ…rÙRrÚh
jÁubhj‘j¾j‡rÛ…r܁rÝ}rÞ(hh	]rß…ràRráh
jÁubhj‘j¾h+‡râ…rãrä}rå(hh	]ræ…rçRrèh
jÁubhj‘j¾ja‡ré…rêrë}rì(hh	]rí…rîRrïh
jÁubhj‘j¾XBacktickrð‡rñ…ròró}rô(hh	]rõ…röRr÷h
jÁubhj‘j¾hi‡rø…rùrú}rû(hh	]rü…rýRrþh
jÁubhj‘j¾XRegexrÿ‡r…rr}r(hh	]r…rRrh
jÁubhj‘j¾XMomentr‡r…r	r
}r(hh	]r…r
Rrh
jÁubhj‘j¾XBooleanr‡r…rr}r(hh	]r…rRrh
jÁubhj‘j¾X	Characterr‡r…rr}r(hh	]r…rRrh
jÁubhj‘j¾X	Delimiterr‡r …r!r"}r#(hh	]r$…r%Rr&h
jÁubhj‘j¾h;‡r'…r(r)}r*(hh	]r+…r,Rr-h
jÁubhj‘j¾h‰‡r.…r/r0}r1(hh	]r2…r3Rr4h
jÁubhj‘j¾XAffixr5‡r6…r7r8}r9(hh	]r:…r;Rr<h
jÁubhj‘j¾XHeredocr=‡r>…r?r@}rA(hh	]rB…rCRrDh
jÁubhj‘j¾XDoublerE‡rF…rGrH}rI(hh	]rJ…rKRrLh
jÁubhj‘j¾XInterprM‡rN…rOrP}rQ(hh	]rR…rSRrTh
jÁubhj‘j¾XAtomrU‡rV…rWrX}rY(hh	]rZ…r[Rr\h
jÁube…r]Rr^h
j”j5j8jðjójžjÖjj"h;j)jEjHhijúj=j@jÄjÇjajëjÿjh+jäjjÝjjjj
jMjPjjjÌjÏjUjXh‰j0ubhj‘XNumberr_†r`…rarb}rc(hh	]rd(hj‘j_XFloatre‡rf…rgrh}ri(hh	]rj…rkRrlh
jbubhj‘j_XDecrm‡rn…rorp}rq(hh	]rr…rsRrth
jbubhj‘j_XRadixru‡rv…rwrx}ry(hh	]rz…r{Rr|h
jbubhj‘j_XOctr}‡r~…rr€}r(hh	]r‚…rƒRr„h
jbubhj‘j_XBinr…‡r†…r‡rˆ}r‰(hh	]rŠ…r‹RrŒh
jbubhj‘j_hü‡r…rށr}r(hh	]r‘…r’Rr“h
jbubhj‘j_XHexr”‡r•…r–r—}r˜(hh	]r™…ršRr›h
jbubhj‘j_XIntegerrœ‡r…ržrŸ}r (hh	]r¡h(j‘j_jœXLongr¢tr£…r¤r¥}r¦(hh	]r§…r¨Rr©h
jŸuba…rªRr«h
jbj¢j¥ubhj‘j_XDecimalr¬‡r­…r®r¯}r°(hh	]r±…r²Rr³h
jbube…r´Rrµh
j”j…jˆjejhj”j—jœjŸj}j€jujxhüjj¬j¯jmjpube…r¶Rr·h
hfj¾jÁj_jbj¦j©j®j±jaj™jžj¡ubhXGenericr¸…r¹…rºr»}r¼(hh	]r½(hj¸XErrorr¾†r¿…rÀrÁ}rÂ(hh	]rÃ…rÄRrÅh
j»ubhj¸X
SubheadingrƆrÇ…rȁrÉ}rÊ(hh	]rË…rÌRrÍh
j»ubhj¸X	TracebackrΆrÏ…rЁrÑ}rÒ(hh	]rÓ…rÔRrÕh
j»ubhj¸XOutputrÖ†r×…r؁rÙ}rÚ(hh	]rÛ…rÜRrÝh
j»ubhj¸XPromptrÞ†rß…ràrá}râ(hh	]rã…räRråh
j»ubhj¸XDeletedræ†rç…rèré}rê(hh	]rë…rìRríh
j»ubhj¸XInsertedrî†rï…rðrñ}rò(hh	]ró…rôRrõh
j»ubhj¸XHeadingrö†r÷…rørù}rú(hh	]rû…rüRrýh
j»ubhj¸XStrongrþ†rÿ…rr}r(hh	]r…rRrh
j»ubhj¸XEmphr†r…rr	}r
(hh	]r…rRr
h
j»ube…rRrh
hfjæjéjj	j¾jÁjöjùjîjñjÖjÙjÞjájþjjÆjÉjÎjÑubhj¾…r…rr}r(hh	]r…rRrh
hfubhXKeywordr…r…rr}r(hh	]r(hjh†r…rr}r (hh	]r!…r"Rr#h
jubhjj†r$…r%r&}r'(hh	]r(…r)Rr*h
jubhjjO†r+…r,r-}r.(hh	]r/…r0Rr1h
jubhjXPreProcr2†r3…r4r5}r6(hh	]r7…r8Rr9h
jubhjXControlr:†r;…r<r=}r>(hh	]r?…r@RrAh
jubhjj‡†rB…rCrD}rE(hh	]rF…rGRrHh
jubhjj†rI…rJrK}rL(hh	]rM…rNRrOh
jubhjj+†rP…rQrR}rS(hh	]rT…rURrVh
jubhjXDeclarationrW†rX…rYrZ}r[(hh	]r\…r]Rr^h
jubhjXReservedr_†r`…rarb}rc(hh	]rd…reRrfh
jube…rgRrhh
hfj‡jDjWjZjjKj+jRj_jbjOj-j:j=jj&j2j5hjubhja…ri…rjrk}rl(hh	]rm…rnRroh
hfubhXTextrp…rq…rrrs}rt(hh	]ru(hjpXRootrv†rw…rxry}rz(hh	]r{…r|Rr}h
jsubhjpj†r~…rr€}r(hh	]r‚…rƒRr„h
jsubhjpXRagr…†r†…r‡rˆ}r‰(hh	]rŠ…r‹RrŒh
jsubhjpX
Whitespacer†rŽ…rr}r‘(hh	]r’…r“Rr”h
jsubhjpXBeerr•†r–…r—r˜}r™(hh	]rš…r›Rrœh
jsubhjpXPunctuationr†rž…rŸr }r¡(hh	]r¢…r£Rr¤h
jsube…r¥Rr¦h
hfjjjj€jj jvjyj•j˜j…jˆubhhj…r§…r¨r©}rª(hh	]r«hjX	Indicatorr¬†r­…r®r¯}r°(hh	]r±…r²Rr³h
j©uba…r´Rrµh
hfj¬j¯ube…r¶Rr·jpjshihlj¾jjajkjjh‰hŒj‘j”jj©hqhthhj¸j»XTokenr¸hfj¾jÁj_jbubh#h&hhhhhShVh+h.h[h^hChFh3h6h;h>hhhKhNububXC/*
 * "Copyright (c) 2008 The Regents of the University  of California.
 * All rights reserved."
 *
 * Permission to use, copy, modify, and distribute this software and its
 * documentation for any purpose, without fee, and without written agreement is
 * hereby granted, provided that the above copyright notice, the following
 * two paragraphs and the author appear in all copies of this software.
 *
 * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
 * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
 * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
 * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
 * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
 * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS."
 *
 */r¹†rºjsX
r»†r¼jsj»†r½hX#r¾†r¿hXincluderÀ†rÁjsX r†rÃhVX#<lib6lowpan/blip-tinyos-includes.h>rĆrÅhj»†rÆhj¾†rÇhXincluderȆrÉjsj†rÊhVX<lib6lowpan/6lowpan.h>rˆrÌhj»†rÍhj¾†rÎhXincluderφrÐjsj†rÑhVX<lib6lowpan/lib6lowpan.h>rÒ†rÓhj»†rÔhj¾†rÕhXincluderÖ†r×jsj†rØhVX<lib6lowpan/ip.h>rÙ†rÚhj»†rÛhj¾†rÜhXincluder݆rÞjsj†rßhVX<lib6lowpan/in_cksum.h>rà†ráhj»†râhj¾†rãhXincluderä†råjsj†ræhVX<lib6lowpan/ip_malloc.h>rç†rèhj»†réjsj»†rêhj¾†rëhXincluderì†ríjsj†rîhVX"blip_printf.h"rï†rðhj»†rñhj¾†ròhXincluderó†rôjsj†rõhVX"IPDispatch.h"rö†r÷hj»†røhj¾†rùhXincluderú†rûjsj†rühVX"BlipStatistics.h"rý†rþhj»†rÿhj¾†rhXincluder†rjsj†rhVX	"table.h"r†rhj»†rjsj»†rhX/*
 * Provides IP layer reception to applications on motes.
 *
 * @author Stephen Dawson-Haggerty <stevedh@cs.berkeley.edu>
 */r†r	jsj»†r
jsj»†rjXmoduler†r
jsj†rhŒXIPDispatchPr†rjsj†rj©X{r†rjsj»†rjsX  r†rjXprovidesr†rjsj†rj©j†rjsj»†rjsX    r†rjX	interfacer†rjsj†r hŒXSplitControlr!†r"j©X;r#†r$jsj»†r%jsX    r&†r'h.X>// interface for protocols not requiring special hand-holding
r(†r)jsX    r*†r+jX	interfacer,†r-jsj†r.hŒXIPLowerr/†r0j©j#†r1jsj»†r2jsj»†r3jsX    r4†r5jX	interfacer6†r7jsj†r8hŒXBlipStatisticsr9†r:htX<r;†r<hŒXip_statistics_tr=†r>htX>r?†r@j©j#†rAjsj»†rBjsj»†rCjsX  rD†rEj©X}rF†rGjsj»†rHjsX  rI†rJjXusesrK†rLjsj†rMj©j†rNjsj»†rOjsX    rP†rQjX	interfacerR†rSjsj†rThŒXBootrU†rVj©j#†rWjsj»†rXjsj»†rYjsj»†rZjsX    r[†r\hX/* link-layer wiring */r]†r^jsj»†r_jsX    r`†rajX	interfacerb†rcjsj†rdhŒXSplitControlre†rfjsj†rgjXasrh†rijsj†rjhŒXRadioControlrk†rlj©j#†rmjsj»†rnjsj»†rojsX    rp†rqjX	interfacerr†rsjsj†rthŒXPacketru†rvjsj†rwjXasrx†ryjsj†rzhŒX
BarePacketr{†r|j©j#†r}jsj»†r~jsX    r†r€jX	interfacer†r‚jsj†rƒhŒXSendr„†r…jsj†r†jXasr‡†rˆjsj†r‰hŒXIeee154SendrІr‹j©j#†rŒjsj»†rjsX    rކrjX	interfacer†r‘jsj†r’hŒXReceiver“†r”jsj†r•jXasr–†r—jsj†r˜hŒXIeee154Receiver™†ršj©j#†r›jsj»†rœjsj»†rjsX    rž†rŸhX/* context lookup */r †r¡jsj»†r¢jsX    r£†r¤jX	interfacer¥†r¦jsj†r§hŒXNeighborDiscoveryr¨†r©j©j#†rªjsj»†r«jsj»†r¬jsX    r­†r®jX	interfacer¯†r°jsj†r±hŒXReadLqir²†r³j©j#†r´jsj»†rµjsX    r¶†r·jX	interfacer¸†r¹jsj†rºhŒX
PacketLinkr»†r¼j©j#†r½jsj»†r¾jsX    r¿†rÀjX	interfacerÁ†rÂjsj†rÃhŒXLowPowerListeningrĆrÅj©j#†rÆjsj»†rÇjsj»†rÈjsX    rɆrÊhX$/* buffers for outgoing fragments */rˆrÌjsj»†rÍjsX    rΆrÏjX	interfacerІrÑjsj†rÒhŒXPoolrÓ†rÔhtj;†rÕhŒX	message_trÖ†r×htj?†rØjsj†rÙjXasrÚ†rÛjsj†rÜhŒXFragPoolr݆rÞj©j#†rßjsj»†ràjsX    rá†râjX	interfacerã†räjsj†råhŒXPoolræ†rçhtj;†rèjXstructré†rêjsj†rëhŒX	send_inforì†ríhtj?†rîjsj†rïjXasrð†rñjsj†ròhŒXSendInfoPoolró†rôj©j#†rõjsj»†röjsX    r÷†røjX	interfacerù†rújsj†rûhŒXPoolrü†rýhtj;†rþjXstructrÿ†rjsj†rhŒX
send_entryr†rhtj?†rjsj†rjXasr†rjsj†rhŒX
SendEntryPoolr	†r
j©j#†rjsj»†rjsX    r
†rjX	interfacer†rjsj†rhŒXQueuer†rhtj;†rjXstructr†rjsj†rhŒX
send_entryr†rjsj†rhtX*r†rhtj?†rjsj†rjXasr†r jsj†r!hŒX	SendQueuer"†r#j©j#†r$jsj»†r%jsj»†r&jsX    r'†r(hX/* expire reconstruction */r)†r*jsj»†r+jsX    r,†r-jX	interfacer.†r/jsj†r0hŒXTimerr1†r2htj;†r3hŒXTMillir4†r5htj?†r6jsj†r7jXasr8†r9jsj†r:hŒXExpireTimerr;†r<j©j#†r=jsj»†r>jsj»†r?jsX    r@†rAjX	interfacerB†rCjsj†rDhŒXLedsrE†rFj©j#†rGjsj»†rHjsj»†rIjsX  rJ†rKj©jF†rLjsj»†rMjsX  rN†rOjXprovidesrP†rQjsj†rRjX	interfacerS†rTjsj†rUhŒXInitrV†rWj©j#†rXjsj»†rYj©jF†rZjsj†r[jXimplementationr\†r]jsj†r^j©j†r_jsj»†r`jsj»†rahj¾†rbhX'define HAVE_LOWPAN_EXTERN_MATCH_CONTEXTrc†rdhj»†rej-Xintrf†rgjsj†rhhŒXlowpan_extern_read_contextri†rjj©X(rk†rljXstructrm†rnjsj†rohŒXin6_addrrp†rqjsj†rrhtj†rshŒXaddrrt†ruj©X,rv†rwjsj†rxj-Xintry†rzjsj†r{hŒXcontextr|†r}j©X)r~†rjsj†r€j©j†rjsj»†r‚jsX  rƒ†r„jXreturnr…†r†jsj†r‡jXcallrˆ†r‰jsj†rŠhŒXNeighborDiscoveryr‹†rŒj©X.r†rŽhŒX
getContextr†rj©jk†r‘hŒXcontextr’†r“j©jv†r”jsj†r•hŒXaddrr–†r—j©j~†r˜j©j#†r™jsj»†ršj©jF†r›jsj»†rœjsj»†rj-Xintrž†rŸjsj†r hŒXlowpan_extern_match_contextr¡†r¢j©jk†r£jXstructr¤†r¥jsj†r¦hŒXin6_addrr§†r¨jsj†r©htj†rªhŒXaddrr«†r¬j©jv†r­jsj†r®j-Xuint8_tr¯†r°jsj†r±htj†r²hŒXctx_idr³†r´j©j~†rµjsj†r¶j©j†r·jsj»†r¸jsX  r¹†rºjXreturnr»†r¼jsj†r½jXcallr¾†r¿jsj†rÀhŒXNeighborDiscoveryrÁ†rÂj©j†rÃhŒXmatchContextrĆrÅj©jk†rÆhŒXaddrrdžrÈj©jv†rÉjsj†rÊhŒXctx_idrˆrÌj©j~†rÍj©j#†rÎjsj»†rÏj©jF†rÐjsj»†rÑjsj»†rÒjsX  rÓ†rÔh.XE// generally including source files like this is a no-no.  I'm doing
rÕ†rÖjsX  r׆rØh.XA// this in the hope that the optimizer will do a better job when
rÙ†rÚjsX  rÛ†rÜh.X // they're part of a component.
r݆rÞhj¾†rßhXincluderà†rájsj†râhVX<lib6lowpan/ieee154_header.c>rã†rähj»†råhj¾†ræhXincluderç†rèjsj†réhVX<lib6lowpan/lib6lowpan.c>rê†rëhj»†rìhj¾†ríhXincluderî†rïjsj†rðhVX<lib6lowpan/lib6lowpan_4944.c>rñ†ròhj»†róhj¾†rôhXincluderõ†röjsj†r÷hVX<lib6lowpan/lib6lowpan_frag.c>rø†rùhj»†rújsj»†rûjsX  rü†rýjXenumrþ†rÿjsj†rj©j†rjsj»†rjsX    r†rhŒX	S_RUNNINGr†rj©jv†rjsj»†rjsX    r	†r
hŒX	S_STOPPEDr†rj©jv†r
jsj»†rjsX    r†rhŒX
S_STOPPINGr†rj©jv†rjsj»†rjsX  r†rj©jF†rj©j#†rjsj»†rjsX  r†rj-Xuint8_tr†rjsj†rhŒXstater†r jsj†r!htX=r"†r#jsj†r$hŒX	S_STOPPEDr%†r&j©j#†r'jsj»†r(jsX  r)†r*j-Xboolr+†r,jsj†r-hŒX	radioBusyr.†r/j©j#†r0jsj»†r1jsX  r2†r3j-Xuint8_tr4†r5jsj†r6hŒXcurrent_local_labelr7†r8jsj†r9htj"†r:jsj†r;jŸX0r<†r=j©j#†r>jsj»†r?jsX  r@†rAhŒXip_statistics_trB†rCjsj†rDhŒXstatsrE†rFj©j#†rGjsj»†rHjsj»†rIjsX  rJ†rKh.XC// this in theory could be arbitrarily large; however, it needs to
rL†rMjsX  rN†rOh.XD// be large enough to hold all active reconstructions, and any tags
rP†rQjsX  rR†rSh.X?// which we are dropping.  It's important to keep dropped tags
rT†rUjsX  rV†rWh.XA// around for a while, or else there are pathological situations
rX†rYjsX  rZ†r[h.XA// where you continually allocate buffers for packets which will
r\†r]jsX  r^†r_h.X// never complete.
r`†rajsj»†rbjsX  rc†rdh.X)////////////////////////////////////////
re†rfjsX  rg†rhh.X//
ri†rjjsX  rk†rlh.X//
rm†rnjsj»†rojsX  rp†rqhŒXtable_trr†rsjsj†rthŒXrecon_cacheru†rvj©j#†rwjsj»†rxjsj»†ryjsX  rz†r{h.XD// table of packets we are currently receiving fragments from, that
r|†r}jsX  r~†rh.X// are destined to us
r€†rjsX  r‚†rƒjXstructr„†r…jsj†r†hŒXlowpan_reconstructr‡†rˆjsj†r‰hŒX
recon_datarІr‹j©X[rŒ†rhŒXN_RECONSTRUCTIONSrކrj©X]r†r‘j©j#†r’jsj»†r“jsj»†r”jsX  r•†r–h.X//
r—†r˜jsX  r™†ršh.X//
r›†rœjsX  r†ržh.X)////////////////////////////////////////
rŸ†r jsj»†r¡jsX  r¢†r£h.X// task void sendTask();
r¤†r¥jsj»†r¦jsX  r§†r¨j-Xvoidr©†rªjsj†r«jtXreconstruct_clearr¬†r­j©jk†r®j-Xvoidr¯†r°jsj†r±htj†r²hŒXentr³†r´j©j~†rµjsj†r¶j©j†r·jsj»†r¸jsX    r¹†rºjXstructr»†r¼jsj†r½hŒXlowpan_reconstructr¾†r¿jsj†rÀhtj†rÁhŒXreconr†rÃjsj†rÄhtj"†rÅjsj†rÆj©jk†rÇjXstructrȆrÉjsj†rÊhŒXlowpan_reconstructrˆrÌjsj†rÍhtj†rÎj©j~†rÏhŒXentrІrÑj©j#†rÒjsj»†rÓjsX    rÔ†rÕhŒXmemclrrÖ†r×j©jk†rØj©jk†rÙj-Xuint8_trÚ†rÛjsj†rÜhtj†rÝj©j~†rÞhtX&r߆ràhŒXreconrá†râhtX-rã†rähtj?†råhŒXr_metaræ†rçj©jv†rèjsj†réjXsizeofrê†rëj©jk†rìjXstructrí†rîjsj†rïhŒXip6_metadatarð†rñj©j~†ròj©j~†rój©j#†rôjsj»†rõjsX    rö†r÷hŒXreconrø†rùhtjã†rúhtj?†rûhŒX	r_timeoutrü†rýjsj†rþhtj"†rÿjsj†rhŒXT_UNUSEDr†rj©j#†rjsj»†rjsX    r†rhŒXreconr†rhtjã†r	htj?†r
hŒXr_bufr†rjsj†r
htj"†rjsj†rjEXNULLr†rj©j#†rjsj»†rjsX  r†rj©jF†rjsj»†rjsj»†rjsX  r†rjXstructr†rjsj†rhŒX	send_infor†rjsj†r htj†r!jtXgetSendInfor"†r#j©jk†r$j©j~†r%jsj†r&j©j†r'jsj»†r(jsX    r)†r*jXstructr+†r,jsj†r-hŒX	send_infor.†r/jsj†r0htj†r1hŒXretr2†r3jsj†r4htj"†r5jsj†r6jXcallr7†r8jsj†r9hŒXSendInfoPoolr:†r;j©j†r<hŒXgetr=†r>j©jk†r?j©j~†r@j©j#†rAjsj»†rBjsX    rC†rDjXifrE†rFjsj†rGj©jk†rHhŒXretrI†rJjsj†rKhtj"†rLhtj"†rMjsj†rNjEXNULLrO†rPj©j~†rQjsj†rRjXreturnrS†rTjsj†rUhŒXretrV†rWj©j#†rXjsj»†rYjsX    rZ†r[hŒXretr\†r]htjã†r^htj?†r_hŒX	_refcountr`†rajsj†rbhtj"†rcjsj†rdjŸX1re†rfj©j#†rgjsj»†rhjsX    ri†rjhŒXretrk†rlhtjã†rmhtj?†rnhŒX
upper_dataro†rpjsj†rqhtj"†rrjsj†rsjEXNULLrt†ruj©j#†rvjsj»†rwjsX    rx†ryhŒXretrz†r{htjã†r|htj?†r}hŒXfailedr~†rjsj†r€htj"†rjsj†r‚hŒXFALSErƒ†r„j©j#†r…jsj»†r†jsX    r‡†rˆhŒXretr‰†rŠhtjã†r‹htj?†rŒhŒXlink_transmissionsr†rŽjsj†rhtj"†rjsj†r‘jŸj<†r’j©j#†r“jsj»†r”jsX    r•†r–hŒXretr—†r˜htjã†r™htj?†ršhŒXlink_fragmentsr›†rœjsj†rhtj"†ržjsj†rŸjŸj<†r j©j#†r¡jsj»†r¢jsX    r£†r¤hŒXretr¥†r¦htjã†r§htj?†r¨hŒXlink_fragment_attemptsr©†rªjsj†r«htj"†r¬jsj†r­jŸj<†r®j©j#†r¯jsj»†r°jsX    r±†r²jXreturnr³†r´jsj†rµhŒXretr¶†r·j©j#†r¸jsj»†r¹jsX  rº†r»j©jF†r¼jsj»†r½hj¾†r¾hX*define SENDINFO_INCR(X) ((X)->_refcount)++r¿†rÀhj»†rÁj-Xvoidr†rÃjsj†rÄjtX
SENDINFO_DECRrņrÆj©jk†rÇjXstructrȆrÉjsj†rÊhŒX	send_inforˆrÌjsj†rÍhtj†rÎhŒXsirφrÐj©j~†rÑjsj†rÒj©j†rÓjsj»†rÔjsX  rÕ†rÖjXifr׆rØjsj†rÙj©jk†rÚhtjã†rÛhtjã†rÜj©jk†rÝhŒXsirÞ†rßhtjã†ràhtj?†ráhŒX	_refcountrâ†rãj©j~†räjsj†råhtj"†ræhtj"†rçjsj†rèjŸj<†réj©j~†rêjsj†rëj©j†rìjsj»†ríjsX    rî†rïjXcallrð†rñjsj†ròhŒXSendInfoPoolró†rôj©j†rõhŒXputrö†r÷j©jk†røhŒXsirù†rúj©j~†rûj©j#†rüjsj»†rýjsX  rþ†rÿj©jF†rjsj»†rj©jF†rjsj»†rjsj»†rjsX  r†rjXcommandr†rjsj†r	hŒXerror_tr
†rjsj†rhŒXSplitControlr
†rj©j†rhŒXstartr†rj©jk†rj©j~†rjsj†rj©j†rjsj»†rjsX    r†rjXreturnr†rjsj†rjXcallr†rjsj†rhŒXRadioControlr†r j©j†r!hŒXstartr"†r#j©jk†r$j©j~†r%j©j#†r&jsj»†r'jsX  r(†r)j©jF†r*jsj»†r+jsj»†r,jsX  r-†r.jXcommandr/†r0jsj†r1hŒXerror_tr2†r3jsj†r4hŒXSplitControlr5†r6j©j†r7hŒXstopr8†r9j©jk†r:j©j~†r;jsj†r<j©j†r=jsj»†r>jsX    r?†r@jXifrA†rBjsj†rCj©jk†rDhtX!rE†rFhŒX	radioBusyrG†rHj©j~†rIjsj†rJj©j†rKjsj»†rLjsX      rM†rNhŒXstaterO†rPjsj†rQhtj"†rRjsj†rShŒX	S_STOPPEDrT†rUj©j#†rVjsj»†rWjsX      rX†rYjXreturnrZ†r[jsj†r\jXcallr]†r^jsj†r_hŒXRadioControlr`†raj©j†rbhŒXstoprc†rdj©jk†rej©j~†rfj©j#†rgjsj»†rhjsX    ri†rjj©jF†rkjsj†rljXelserm†rnjsj†roj©j†rpjsj»†rqjsX      rr†rsh.X@// if there's a packet in the radio, wait for it to exit before
rt†rujsX      rv†rwh.X// stopping
rx†ryjsX      rz†r{hŒXstater|†r}jsj†r~htj"†rjsj†r€hŒX
S_STOPPINGr†r‚j©j#†rƒjsj»†r„jsX      r…†r†jXreturnr‡†rˆjsj†r‰hŒXSUCCESSrІr‹j©j#†rŒjsj»†rjsX    rކrj©jF†rjsj»†r‘jsX  r’†r“j©jF†r”jsj»†r•jsj»†r–jsX  r—†r˜jXeventr™†ršjsj†r›j-Xvoidrœ†rjsj†ržhŒXRadioControlrŸ†r j©j†r¡hŒX	startDoner¢†r£j©jk†r¤hŒXerror_tr¥†r¦jsj†r§hŒXerrorr¨†r©j©j~†rªjsj†r«j©j†r¬jsj»†r­hj¾†r®hXifdef LPL_SLEEP_INTERVALr¯†r°hj»†r±jsX    r²†r³jXcallr´†rµjsj†r¶hŒXLowPowerListeningr·†r¸j©j†r¹hŒXsetLocalWakeupIntervalrº†r»j©jk†r¼hŒXLPL_SLEEP_INTERVALr½†r¾j©j~†r¿j©j#†rÀjsj»†rÁhj¾†rÂhXendifrÆrÄhj»†rÅjsj»†rÆjsX    rdžrÈjXifrɆrÊjsj†rËj©jk†rÌhŒXerrorr͆rÎjsj†rÏhtj"†rÐhtj"†rÑjsj†rÒhŒXSUCCESSrÓ†rÔj©j~†rÕjsj†rÖj©j†r×jsj»†rØjsX      rÙ†rÚjXcallrÛ†rÜjsj†rÝhŒXLedsrÞ†rßj©j†ràhŒX
led2Togglerá†râj©jk†rãj©j~†räj©j#†råjsj»†ræjsX      rç†rèjXcallré†rêjsj†rëhŒXExpireTimerrì†ríj©j†rîhŒX
startPeriodicrï†rðj©jk†rñhŒXFRAG_EXPIRE_TIMErò†rój©j~†rôj©j#†rõjsj»†röjsX      r÷†røhŒXstaterù†rújsj†rûhtj"†rüjsj†rýhŒX	S_RUNNINGrþ†rÿj©j#†r	jsj»†r	jsX      r	†r	hŒX	radioBusyr	†r	jsj†r	htj"†r	jsj†r	hŒXFALSEr		†r
	j©j#†r	jsj»†r	jsX    r
	†r	j©jF†r	jsj»†r	jsj»†r	jsX    r	†r	jXsignalr	†r	jsj†r	hŒXSplitControlr	†r	j©j†r	hŒX	startDoner	†r	j©jk†r	hŒXerrorr	†r	j©j~†r	j©j#†r 	jsj»†r!	jsX  r"	†r#	j©jF†r$	jsj»†r%	jsj»†r&	jsX  r'	†r(	jXeventr)	†r*	jsj†r+	j-Xvoidr,	†r-	jsj†r.	hŒXRadioControlr/	†r0	j©j†r1	hŒXstopDoner2	†r3	j©jk†r4	hŒXerror_tr5	†r6	jsj†r7	hŒXerrorr8	†r9	j©j~†r:	jsj†r;	j©j†r<	jsj»†r=	jsX    r>	†r?	jXsignalr@	†rA	jsj†rB	hŒXSplitControlrC	†rD	j©j†rE	hŒXstopDonerF	†rG	j©jk†rH	hŒXerrorrI	†rJ	j©j~†rK	j©j#†rL	jsj»†rM	e(jsX  rN	†rO	j©jF†rP	jsj»†rQ	jsj»†rR	jsX  rS	†rT	jXcommandrU	†rV	jsj†rW	hŒXerror_trX	†rY	jsj†rZ	hŒXInitr[	†r\	j©j†r]	hŒXinitr^	†r_	j©jk†r`	j©j~†ra	jsj†rb	j©j†rc	jsj»†rd	jsX    re	†rf	h.X;// ip_malloc_init needs to be in init, not booted, because
rg	†rh	jsX    ri	†rj	h.X+// context for coap is initialised in init
rk	†rl	jsX    rm	†rn	hŒXip_malloc_initro	†rp	j©jk†rq	j©j~†rr	j©j#†rs	jsj»†rt	jsX    ru	†rv	jXreturnrw	†rx	jsj†ry	hŒXSUCCESSrz	†r{	j©j#†r|	jsj»†r}	jsX  r~	†r	j©jF†r€	jsj»†r	jsj»†r‚	jsX  rƒ	†r„	jXeventr…	†r†	jsj†r‡	j-Xvoidrˆ	†r‰	jsj†rŠ	hŒXBootr‹	†rŒ	j©j†r	hŒXbootedrŽ	†r	j©jk†r	j©j~†r‘	jsj†r’	j©j†r“	jsj»†r”	jsX    r•	†r–	jXcallr—	†r˜	jsj†r™	hŒXBlipStatisticsrš	†r›	j©j†rœ	hŒXclearr	†rž	j©jk†rŸ	j©j~†r 	j©j#†r¡	jsj»†r¢	jsj»†r£	jsX    r¤	†r¥	hX%/* set up our reconstruction cache */r¦	†r§	jsj»†r¨	jsX    r©	†rª	hŒX
table_initr«	†r¬	j©jk†r­	htj߆r®	hŒXrecon_cacher¯	†r°	j©jv†r±	jsj†r²	hŒX
recon_datar³	†r´	j©jv†rµ	jsj†r¶	jXsizeofr·	†r¸	j©jk†r¹	jXstructrº	†r»	jsj†r¼	hŒXlowpan_reconstructr½	†r¾	j©j~†r¿	j©jv†rÀ	jsj†rÁ	hŒXN_RECONSTRUCTIONSrÂ	†rÃ	j©j~†rÄ	j©j#†rÅ	jsj»†rÆ	jsX    rÇ	†rÈ	hŒX	table_maprÉ	†rÊ	j©jk†rË	htj߆rÌ	hŒXrecon_cacherÍ	†rÎ	j©jv†rÏ	jsj†rÐ	hŒXreconstruct_clearrÑ	†rÒ	j©j~†rÓ	j©j#†rÔ	jsj»†rÕ	jsj»†rÖ	jsX    r×	†rØ	jXcallrÙ	†rÚ	jsj†rÛ	hŒXSplitControlrÜ	†rÝ	j©j†rÞ	hŒXstartrß	†rà	j©jk†rá	j©j~†râ	j©j#†rã	jsj»†rä	jsX  rå	†ræ	j©jF†rç	jsj»†rè	jsj»†ré	jsX  rê	†rë	hX!/*
   *  Receive-side code.
   */rì	†rí	jsX 
  rî	†rï	j-Xvoidrð	†rñ	jsj†rò	hŒXdeliverró	†rô	j©jk†rõ	jXstructrö	†r÷	jsj†rø	hŒXlowpan_reconstructrù	†rú	jsj†rû	htj†rü	hŒXreconrý	†rþ	j©j~†rÿ	jsj†r
j©j†r
jsjȠr
jsX    r
†r
jXstructr
†r
jsj†r
hŒXip6_hdrr
†r	
jsj†r

htj†r
hŒXiphr
†r
jsj†r
htj"†r
jsj†r
j©jk†r
jXstructr
†r
jsj†r
hŒXip6_hdrr
†r
jsj†r
htj†r
j©j~†r
hŒXreconr
†r
htjã†r
htj?†r
hŒXr_bufr
†r
j©j#†r 
jsjȠr!
jsjȠr"
jsX    r#
†r$
h.X2// printf("deliver [%i]: ", recon->r_bytes_rcvd);
r%
†r&
jsX    r'
†r(
h.X2// printf_buf(recon->r_buf, recon->r_bytes_rcvd);
r)
†r*
jsjȠr+
jsX    r,
†r-
hXM/* the payload length field is always compressed, have to put it back here */r.
†r/
jsjȠr0
jsX    r1
†r2
hŒXiphr3
†r4
htjã†r5
htj?†r6
hŒXip6_plenr7
†r8
jsj†r9
htj"†r:
jsj†r;
hŒXhtonsr<
†r=
j©jk†r>
hŒXreconr?
†r@
htjã†rA
htj?†rB
hŒXr_bytes_rcvdrC
†rD
jsj†rE
htjã†rF
jsj†rG
jXsizeofrH
†rI
j©jk†rJ
jXstructrK
†rL
jsj†rM
hŒXip6_hdrrN
†rO
j©j~†rP
j©j~†rQ
j©j#†rR
jsjȠrS
jsX    rT
†rU
jXsignalrV
†rW
jsj†rX
hŒXIPLowerrY
†rZ
j©j†r[
hŒXrecvr\
†r]
j©jk†r^
hŒXiphr_
†r`
j©jv†ra
jsj†rb
j©jk†rc
j-Xvoidrd
†re
jsj†rf
htj†rg
j©j~†rh
j©jk†ri
hŒXiphrj
†rk
jsj†rl
htX+rm
†rn
jsj†ro
jŸje†rp
j©j~†rq
j©jv†rr
jsj†rs
htj߆rt
hŒXreconru
†rv
htjã†rw
htj?†rx
hŒXr_metary
†rz
j©j~†r{
j©j#†r|
jsjȠr}
jsjȠr~
jsX    r
†r€
h.X*// printf("ip_free(%p)\n", recon->r_buf);
r
†r‚
jsX    rƒ
†r„
hŒXip_freer…
†r†
j©jk†r‡
hŒXreconrˆ
†r‰
htjã†rŠ
htj?†r‹
hŒXr_bufrŒ
†r
j©j~†rŽ
j©j#†r
jsj»†r
jsX    r‘
†r’
hŒXreconr“
†r”
htjã†r•
htj?†r–
hŒX	r_timeoutr—
†r˜
jsj†r™
htj"†rš
jsj†r›
hŒXT_UNUSEDrœ
†r
j©j#†rž
jsj»†rŸ
jsX    r 
†r¡
hŒXreconr¢
†r£
htjã†r¤
htj?†r¥
hŒXr_bufr¦
†r§
jsj†r¨
htj"†r©
jsj†rª
jEXNULLr«
†r¬
j©j#†r­
jsj»†r®
jsX  r¯
†r°
j©jF†r±
jsj»†r²
jsj»†r³
jsX  r´
†rµ
hXò/*
   * Bulletproof recovery logic is very important to make sure we
   * don't get wedged with no free buffers.
   * 
   * The table is managed as follows:
   *  - unused entries are marked T_UNUSED
   *  - entries which 
   *     o have a buffer allocated
   *     o have had a fragment reception before we fired
   *     are marked T_ACTIVE
   *  - entries which have not had a fragment reception during the last timer period
   *     and were active are marked T_ZOMBIE
   *  - zombie receptions are deleted: their buffer is freed and table entry marked unused.
   *  - when a fragment is dropped, it is entered into the table as T_FAILED1.
   *     no buffer is allocated
   *  - when the timer fires, T_FAILED1 entries are aged to T_FAILED2.
   * - T_FAILED2 entries are deleted.  Incomming fragments with tags
   *     that are marked either FAILED1 or FAILED2 are dropped; this
   *     prevents us from allocating a buffer for a packet which we
   *     have already dropped fragments from.
   *
   */r¶
†r·
jsX 
  r¸
†r¹
j-Xvoidrº
†r»
jsj†r¼
hŒXreconstruct_ager½
†r¾
j©jk†r¿
j-XvoidrÀ
†rÁ
jsj†rÂ
htj†rÃ
hŒXeltrÄ
†rÅ
j©j~†rÆ
jsj†rÇ
j©j†rÈ
jsj»†rÉ
jsX    rÊ
†rË
jXstructrÌ
†rÍ
jsj†rÎ
hŒXlowpan_reconstructrÏ
†rÐ
jsj†rÑ
htj†rÒ
hŒXreconrÓ
†rÔ
jsj†rÕ
htj"†rÖ
jsj†r×
j©jk†rØ
jXstructrÙ
†rÚ
jsj†rÛ
hŒXlowpan_reconstructrÜ
†rÝ
jsj†rÞ
htj†rß
j©j~†rà
hŒXeltrá
†râ
j©j#†rã
jsj»†rä
jsX    rå
†ræ
jXifrç
†rè
jsj†ré
j©jk†rê
hŒXreconrë
†rì
htjã†rí
htj?†rî
hŒX	r_timeoutrï
†rð
jsj†rñ
htjE†rò
htj"†ró
jsj†rô
hŒXT_UNUSEDrõ
†rö
j©j~†r÷
jsX 
      rø
†rù
hŒXprintfrú
†rû
j©jk†rü
jÁX"rý
†rþ
jÁX.recon src: 0x%x tag: 0x%x buf: %p recvd: %i/%irÿ
†rjúX\nr†rjÁjý
†rj©jv†rjsX 
                 r†rhŒXreconr†rhtjã†r	htj?†r
hŒXr_source_keyr†rj©jv†r
jsj†rhŒXreconr†rhtjã†rhtj?†rhŒXr_tagr†rj©jv†rjsj†rhŒXreconr†rhtjã†rhtj?†rhŒXr_bufr†rj©jv†rjsX 
                 r†rhŒXreconr †r!htjã†r"htj?†r#hŒXr_bytes_rcvdr$†r%j©jv†r&jsj†r'hŒXreconr(†r)htjã†r*htj?†r+hŒXr_sizer,†r-j©j~†r.j©j#†r/jsj»†r0jsX    r1†r2jXswitchr3†r4jsj†r5j©jk†r6hŒXreconr7†r8htjã†r9htj?†r:hŒX	r_timeoutr;†r<j©j~†r=jsj†r>j©j†r?jsj»†r@jsX    rA†rBjXcaserC†rDjsj†rEj6XT_ACTIVErF†rGj©X:rH†rIjsj»†rJjsX      rK†rLhŒXreconrM†rNhtjã†rOhtj?†rPhŒX	r_timeoutrQ†rRjsj†rShtj"†rTjsj†rUhŒXT_ZOMBIErV†rWj©j#†rXjsj†rYjXbreakrZ†r[j©j#†r\jsj†r]h.X// age existing receptions
r^†r_jsX    r`†rajXcaserb†rcjsj†rdj6X	T_FAILED1re†rfj©jH†rgjsj»†rhjsX      ri†rjhŒXreconrk†rlhtjã†rmhtj?†rnhŒX	r_timeoutro†rpjsj†rqhtj"†rrjsj†rshŒX	T_FAILED2rt†ruj©j#†rvjsj†rwjXbreakrx†ryj©j#†rzjsj†r{h.X// age existing receptions
r|†r}jsX    r~†rjXcaser€†rjsj†r‚j6XT_ZOMBIErƒ†r„j©jH†r…jsj»†r†jsX    r‡†rˆjXcaser‰†rŠjsj†r‹j6X	T_FAILED2rŒ†rj©jH†rŽjsj»†rjsX      r†r‘h.X+// deallocate the space for reconstruction
r’†r“jsX      r”†r•hŒXprintfr–†r—j©jk†r˜jÁjý
†r™jÁX"timing out buffer: src: %i tag: %irš†r›júX\nrœ†rjÁjý
†ržj©jv†rŸjsj†r hŒXreconr¡†r¢htjã†r£htj?†r¤hŒXr_source_keyr¥†r¦j©jv†r§jsj†r¨hŒXreconr©†rªhtjã†r«htj?†r¬hŒXr_tagr­†r®j©j~†r¯j©j#†r°jsj»†r±jsX      r²†r³jXifr´†rµjsj†r¶j©jk†r·hŒXreconr¸†r¹htjã†rºhtj?†r»hŒXr_bufr¼†r½jsj†r¾htjE†r¿htj"†rÀjsj†rÁjEXNULLr†rÃj©j~†rÄjsj†rÅj©j†rÆjsj»†rÇjsX        rȆrÉhŒXprintfrʆrËj©jk†rÌjÁjý
†rÍjÁXip_free(%p)rΆrÏjúX\nrІrÑjÁjý
†rÒj©jv†rÓjsj†rÔhŒXreconrÕ†rÖhtjã†r×htj?†rØhŒXr_bufrÙ†rÚj©j~†rÛj©j#†rÜjsj»†rÝjsX        rÞ†rßhŒXip_freerà†ráj©jk†râhŒXreconrã†rähtjã†råhtj?†ræhŒXr_bufrç†rèj©j~†réj©j#†rêjsj»†rëjsX      rì†ríj©jF†rîjsj»†rïjsX      rð†rñhŒXreconrò†róhtjã†rôhtj?†rõhŒX	r_timeoutrö†r÷jsj†røhtj"†rùjsj†rúhŒXT_UNUSEDrû†rüj©j#†rýjsj»†rþjsX      rÿ†rhŒXreconr†rhtjã†rhtj?†rhŒXr_bufr†rjsj†rhtj"†rjsj†r	jEXNULLr
†rj©j#†rjsj»†r
jsX      r†rjXbreakr†rj©j#†rjsj»†rjsX    r†rj©jF†rjsj»†rjsX  r†rj©jF†rjsj»†rjsj»†rjsX  r†rj-Xvoidr†r jsj†r!hŒX
ip_print_heapr"†r#j©jk†r$j©j~†r%jsj†r&j©j†r'jsj»†r(hj¾†r)hXifdef PRINTFUART_ENABLEDr*†r+hj»†r,jsX    r-†r.hŒXbndrt_tr/†r0jsj†r1htj†r2hŒXcurr3†r4jsj†r5htj"†r6jsj†r7j©jk†r8hŒXbndrt_tr9†r:jsj†r;htj†r<j©j~†r=hŒXheapr>†r?j©j#†r@jsj»†rAjsX    rB†rCjXwhilerD†rEjsj†rFj©jk†rGj©jk†rHj©jk†rIj-Xuint8_trJ†rKjsj†rLhtj†rMj©j~†rNhŒXcurrO†rPj©j~†rQjsX  rR†rShtjã†rTjsj†rUhŒXheaprV†rWjsj†rXhtj;†rYjsj†rZhŒXIP_MALLOC_HEAP_SIZEr[†r\j©j~†r]jsj†r^j©j†r_jsj»†r`jsX      ra†rbhŒXprintfrc†rdjsj†rej©jk†rfjÁjý
†rgjÁX)heap region start: %p length: %u used: %urh†rijúX\nrj†rkjÁjý
†rlj©jv†rmjsX 
                  rn†rohŒXcurrp†rqj©jv†rrjsj†rsj©jk†rthtj†ruhŒXcurrv†rwjsj†rxhtj߆ryjsj†rzhŒX
IP_MALLOC_LENr{†r|j©j~†r}j©jv†r~jsj†rj©jk†r€htj†rhŒXcurr‚†rƒjsj†r„htj߆r…jsj†r†hŒXIP_MALLOC_INUSEr‡†rˆj©j~†r‰jsj†rŠhtj?†r‹htj?†rŒjsj†rjŸX15rŽ†rj©j~†rj©j#†r‘jsj»†r’jsX      r“†r”hŒXcurr•†r–jsj†r—htj"†r˜jsj†r™j©jk†ršhŒXbndrt_tr›†rœjsj†rhtj†ržj©j~†rŸj©jk†r j©jk†r¡j©jk†r¢j-Xuint8_tr£†r¤jsj†r¥htj†r¦j©j~†r§hŒXcurr¨†r©j©j~†rªjsj†r«htjm
†r¬jsj†r­j©jk†r®j©jk†r¯htj†r°hŒXcurr±†r²j©j~†r³jsj†r´htj߆rµjsj†r¶hŒX
IP_MALLOC_LENr·†r¸j©j~†r¹j©j~†rºj©j#†r»jsj»†r¼jsX    r½†r¾j©jF†r¿jsj»†rÀhj¾†rÁhXendifrÂ†rÃhj»†rÄjsX  rÅ†rÆj©jF†rÇjsj»†rÈjsj»†rÉjsX  rÊ†rËjXeventrÌ†rÍjsj†rÎj-XvoidrÏ†rÐjsj†rÑhŒXExpireTimerrÒ†rÓj©j†rÔhŒXfiredrÕ†rÖj©jk†r×j©j~†rØjsj†rÙj©j†rÚjsj»†rÛjsX    rÜ†rÝhŒX	table_maprÞ†rßj©jk†ràhtj߆ráhŒXrecon_cacherâ†rãj©jv†räjsj†råhŒXreconstruct_ageræ†rçj©j~†rèj©j#†réjsj»†rêjsj»†rëjsX	    
    rì†ríhŒXprintfrî†rïj©jk†rðjÁjý
†rñjÁXFrag pool size: %irò†rójúX\nrô†rõjÁjý
†röj©jv†r÷jsj†røjXcallrù†rújsj†rûhŒXFragPoolrü†rýj©j†rþhŒXsizerÿ†r
j©jk†r
j©j~†r
j©j~†r
j©j#†r
jsjȠr
jsX    r
†r
hŒXprintfr
†r	
j©jk†r

jÁjý
†r
jÁXSendInfo pool size: %ir
†r

júX\nr
†r
jÁjý
†r
j©jv†r
jsj†r
jXcallr
†r
jsj†r
hŒXSendInfoPoolr
†r
j©j†r
hŒXsizer
†r
j©jk†r
j©j~†r
j©j~†r
j©j#†r
jsjȠr
jsX    r 
†r!
hŒXprintfr"
†r#
j©jk†r$
jÁjý
†r%
jÁXSendEntry pool size: %ir&
†r'
júX\nr(
†r)
jÁjý
†r*
j©jv†r+
jsj†r,
jXcallr-
†r.
jsj†r/
hŒX
SendEntryPoolr0
†r1
j©j†r2
hŒXsizer3
†r4
j©jk†r5
j©j~†r6
j©j~†r7
j©j#†r8
jsjȠr9
jsX    r:
†r;
hŒXprintfr<
†r=
j©jk†r>
jÁjý
†r?
jÁXForward queue length: %ir@
†rA
júX\nrB
†rC
jÁjý
†rD
j©jv†rE
jsj†rF
jXcallrG
†rH
jsj†rI
hŒX	SendQueuerJ
†rK
j©j†rL
hŒXsizerM
†rN
j©jk†rO
j©j~†rP
j©j~†rQ
j©j#†rR
jsjȠrS
jsX    rT
†rU
hŒX
ip_print_heaprV
†rW
j©jk†rX
j©j~†rY
j©j#†rZ
jsjȠr[
jsX    r\
†r]
hŒXprintfflushr^
†r_
j©jk†r`
j©j~†ra
j©j#†rb
jsjȠrc
jsX  rd
†re
j©jF†rf
jsjȠrg
jsjȠrh
jsX  ri
†rj
hXW/*
   * allocate a structure for recording information about incomming fragments.
   */rk
†rl
jsjȠrm
jsjȠrn
jsX  ro
†rp
jXstructrq
†rr
jsj†rs
hŒXlowpan_reconstructrt
†ru
jsj†rv
htj†rw
hŒXget_reconstructrx
†ry
j©jk†rz
j-Xuint16_tr{
†r|
jsj†r}
hŒXkeyr~
†r
j©jv†r€
jsj†r
j-Xuint16_tr‚
†rƒ
jsj†r„
hŒXtagr…
†r†
j©j~†r‡
jsj†rˆ
j©j†r‰
jsj»†rŠ
jsX    r‹
†rŒ
jXstructr
†rŽ
jsj†r
hŒXlowpan_reconstructr
†r‘
jsj†r’
htj†r“
hŒXretr”
†r•
jsj†r–
htj"†r—
jsj†r˜
jEXNULLr™
†rš
j©j#†r›
jsj»†rœ
jsX    r
†rž
j-XintrŸ
†r 
jsj†r¡
hŒXir¢
†r£
j©j#†r¤
jsj»†r¥
jsj»†r¦
jsX    r§
†r¨
h.X1// printf("get_reconstruct: %x %i\n", key, tag);
r©
†rª
jsj»†r«
jsX    r¬
†r­
jXforr®
†r¯
jsj†r°
j©jk†r±
hŒj¢
†r²
jsj†r³
htj"†r´
jsj†rµ
jŸj<†r¶
j©j#†r·
jsj†r¸
hŒj¢
†r¹
jsj†rº
htj;†r»
jsj†r¼
hŒXN_RECONSTRUCTIONSr½
†r¾
j©j#†r¿
jsj†rhŒj¢
†rÁ
htjm
†rÂ
htjm
†rÃ
j©j~†rÄ
jsj†rÅ
j©j†rÆ
jsj»†rÇ
jsX      rÈ
†rÉ
jXstructrÊ
†rË
jsj†rÌ
hŒXlowpan_reconstructrÍ
†rÎ
jsj†rÏ
htj†rÐ
hŒXreconrÑ
†rÒ
jsj†rÓ
htj"†rÔ
jsj†rÕ
j©jk†rÖ
jXstructr×
†rØ
jsj†rÙ
hŒXlowpan_reconstructrÚ
†rÛ
jsj†rÜ
htj†rÝ
j©j~†rÞ
htj߆rß
hŒX
recon_datarà
†rá
j©jŒ†râ
hŒj¢
†rã
j©j†rä
j©j#†rå
jsj»†ræ
jsj»†rç
jsX      rè
†ré
jXifrê
†rë
jsj†rì
j©jk†rí
hŒXreconrî
†rï
htjã†rð
htj?†rñ
hŒXr_tagrò
†ró
jsj†rô
htj"†rõ
htj"†rö
jsj†r÷
hŒXtagrø
†rù
jsj†rú
htj߆rû
htj߆rü
jsj»†rý
jsX
          rþ
†rÿ
hŒXreconr†rhtjã†rhtj?†rhŒXr_source_keyr†rjsj†rhtj"†rhtj"†rjsj†r	hŒXkeyr
†rj©j~†rjsj†r
j©j†rjsj»†rjsj»†rjsX        r†rjXifr†rjsj†rj©jk†rhŒXreconr†rhtjã†rhtj?†rhŒX	r_timeoutr†rjsj†rhtj?†rjsj†rhŒXT_UNUSEDr †r!j©j~†r"jsj†r#j©j†r$jsX          
          r%†r&hŒXreconr'†r(htjã†r)htj?†r*hŒX	r_timeoutr+†r,jsj†r-htj"†r.jsj†r/hŒXT_ACTIVEr0†r1j©j#†r2jsj»†r3jsX
          r4†r5hŒXretr6†r7jsj†r8htj"†r9jsj†r:hŒXreconr;†r<j©j#†r=jsj»†r>jsX
          r?†r@jXgotorA†rBjsj†rChŒXdonerD†rEj©j#†rFjsj»†rGjsj»†rHjsX        rI†rJj©jF†rKjsj†rLjXelserM†rNjsj†rOjXifrP†rQjsj†rRj©jk†rShŒXreconrT†rUhtjã†rVhtj?†rWhŒX	r_timeoutrX†rYjsj†rZhtj;†r[jsj†r\hŒXT_UNUSEDr]†r^j©j~†r_jsj†r`j©j†rajsj»†rbjsX
          rc†rdh.X;// if we have already tried and failed to get a buffer, we
re†rfjsX
          rg†rhh.X%// need to drop remaining fragments.
ri†rjjsX
          rk†rlhŒXretrm†rnjsj†rohtj"†rpjsj†rqjEXNULLrr†rsj©j#†rtjsj»†rujsX
          rv†rwjXgotorx†ryjsj†rzhŒXdoner{†r|j©j#†r}jsj»†r~jsX        r†r€j©jF†rjsj»†r‚jsX      rƒ†r„j©jF†r…jsj»†r†jsX      r‡†rˆjXifr‰†rŠjsj†r‹j©jk†rŒhŒXreconr†rŽhtjã†rhtj?†rhŒX	r_timeoutr‘†r’jsj†r“htj"†r”htj"†r•jsj†r–hŒXT_UNUSEDr—†r˜j©j~†r™jsX
 
        rš†r›hŒXretrœ†rjsj†rže(htj"†rŸjsj†r hŒXreconr¡†r¢j©j#†r£jsj»†r¤jsX    r¥†r¦j©jF†r§jsj»†r¨jsX  r©†rªj6Xdoner«†r¬j©jH†r­jsj»†r®jsX    r¯†r°h.X// printf("got%p\n", ret);
r±†r²jsX    r³†r´jXreturnrµ†r¶jsj†r·hŒXretr¸†r¹j©j#†rºjsj»†r»jsX  r¼†r½j©jF†r¾jsj»†r¿jsj»†rÀjsX  rÁ†rÂjXeventrÆrÄjsj†rÅhŒX	message_trƆrÇjsj†rÈhtj†rÉhŒXIeee154ReceiverʆrËj©j†rÌhŒXreceiver͆rÎj©jk†rÏhŒX	message_trІrÑjsj†rÒhtj†rÓhŒXmsgrÔ†rÕj©jv†rÖjsj†r×j-Xvoidr؆rÙjsj†rÚhtj†rÛhŒXmsg_payloadr܆rÝj©jv†rÞjsj†rßj-Xuint8_trà†rájsj†râhŒXlenrã†räj©j~†råjsj†ræj©j†rçjsj»†rèjsX    ré†rêjXstructrë†rìjsj†ríhŒX
packed_lowmsgrî†rïjsj†rðhŒXlowmsgrñ†ròj©j#†rójsj»†rôjsX    rõ†röjXstructr÷†røjsj†rùhŒXieee154_frame_addrrú†rûjsj†rühŒX
frame_addressrý†rþj©j#†rÿjsj»†rjsX    r†rj-Xuint8_tr†rjsj†rhtj†rhŒXbufr†rjsj†r	htj"†r
jsj†rhŒXmsg_payloadr†r
j©j#†rjsj»†rjsj»†rjsX    r†rh.X-// printf(" -- RECEIVE -- len : %i\n", len);
r†rjsj»†rjsX    r†rhŒXBLIP_STATS_INCRr†rj©jk†rhŒXstatsr†rj©j†rhŒXrx_totalr†rj©j~†r j©j#†r!jsj»†r"jsj»†r#jsX    r$†r%hX(/* unpack the 802.15.4 address fields */r&†r'jsj»†r(jsX    r)†r*hŒXbufr+†r,jsX  r-†r.htj"†r/jsj†r0hŒXunpack_ieee154_hdrr1†r2j©jk†r3hŒXmsg_payloadr4†r5j©jv†r6jsj†r7htj߆r8hŒX
frame_addressr9†r:j©j~†r;j©j#†r<jsj»†r=jsX    r>†r?hŒXlenr@†rAjsj†rBhtjã†rChtj"†rDjsj†rEhŒXbufrF†rGjsj†rHhtjã†rIjsj†rJj©jk†rKj-Xuint8_trL†rMjsj†rNhtj†rOj©j~†rPhŒXmsg_payloadrQ†rRj©j#†rSjsj»†rTjsj»†rUjsX    rV†rWhX /* unpack and 6lowpan headers */rX†rYjsj»†rZjsX    r[†r\hŒXlowmsgr]†r^j©j†r_hŒXdatar`†rajsj†rbhtj"†rcjsj†rdhŒXbufre†rfj©j#†rgjsj»†rhjsX    ri†rjhŒXlowmsgrk†rlj©j†rmhŒXlenrn†rojsX  rp†rqhtj"†rrjsj†rshŒXlenrt†ruj©j#†rvjsj»†rwjsX    rx†ryhŒXlowmsgrz†r{j©j†r|hŒXheadersr}†r~jsj†rhtj"†r€jsj†rhŒXgetHeaderBitmapr‚†rƒj©jk†r„htj߆r…hŒXlowmsgr††r‡j©j~†rˆj©j#†r‰jsj»†rŠjsX    r‹†rŒjXifr†rŽjsj†rj©jk†rhŒXlowmsgr‘†r’j©j†r“hŒXheadersr”†r•jsj†r–htj"†r—htj"†r˜jsj†r™hŒXLOWMSG_NALPrš†r›j©j~†rœjsj†rj©j†ržjsj»†rŸjsX      r †r¡jXgotor¢†r£jsj†r¤hŒXfailr¥†r¦j©j#†r§jsj»†r¨jsX    r©†rªj©jF†r«jsj»†r¬jsj»†r­jsX    r®†r¯jXifr°†r±jsj†r²j©jk†r³hŒXhasFrag1Headerr´†rµj©jk†r¶htj߆r·hŒXlowmsgr¸†r¹j©j~†rºjsj†r»htX|r¼†r½htj¼†r¾jsj†r¿hŒXhasFragNHeaderrÀ†rÁj©jk†rÂhtj߆rÃhŒXlowmsgrĆrÅj©j~†rÆj©j~†rÇjsj†rÈj©j†rÉjsj»†rÊjsX      rˆrÌh.X// start reassembly
r͆rÎjsX      rφrÐj-XintrцrÒjsj†rÓhŒXrvrÔ†rÕj©j#†rÖjsj»†r×jsX      r؆rÙjXstructrÚ†rÛjsj†rÜhŒXlowpan_reconstructr݆rÞjsj†rßhtj†ràhŒXreconrá†râj©j#†rãjsj»†räjsX      rå†ræj-Xuint16_trç†rèjsj†réhŒXtagrê†rëj©jv†rìjsj†ríhŒX
source_keyrî†rïj©j#†rðjsj»†rñjsj»†ròjsX      ró†rôhŒX
source_keyrõ†röjsj†r÷htj"†røjsj†rùhŒXieee154_hashaddrrú†rûj©jk†rühtj߆rýhŒX
frame_addressrþ†rÿj©j†rhŒXieee_srcr†rj©j~†rj©j#†rjsj»†rjsX      r†rhŒXgetFragDgramTagr†r	j©jk†r
htj߆rhŒXlowmsgr†r
j©jv†rjsj†rhtj߆rhŒXtagr†rj©j~†rj©j#†rjsj»†rjsX      r†rhŒXreconr†rjsj†rhtj"†rjsj†rhŒXget_reconstructr†rj©jk†rhŒX
source_keyr †r!j©jv†r"jsj†r#hŒXtagr$†r%j©j~†r&j©j#†r'jsj»†r(jsX      r)†r*jXifr+†r,jsj†r-j©jk†r.htjE†r/hŒXreconr0†r1j©j~†r2jsj†r3j©j†r4jsj»†r5jsX        r6†r7jXgotor8†r9jsj†r:hŒXfailr;†r<j©j#†r=jsj»†r>jsX      r?†r@j©jF†rAjsj»†rBjsj»†rCjsX      rD†rEhX^/* fill in metadata: on fragmented packets, it applies to the
         first fragment only  */rF†rGjsj»†rHjsX      rI†rJhŒXmemcpyrK†rLj©jk†rMhtj߆rNhŒXreconrO†rPhtjã†rQhtj?†rRhŒXr_metarS†rTj©j†rUhŒXsenderrV†rWj©jv†rXjsj†rYhtj߆rZhŒX
frame_addressr[†r\j©j†r]hŒXieee_srcr^†r_j©jv†r`jsj»†rajsX
             rb†rcjXsizeofrd†rej©jk†rfhŒXieee154_addr_trg†rhj©j~†rij©j~†rjj©j#†rkjsj»†rljsX      rm†rnhŒXreconro†rphtjã†rqhtj?†rrhŒXr_metars†rtj©j†ruhŒXlqirv†rwjsj†rxhtj"†ryjsj†rzjXcallr{†r|jsj†r}hŒXReadLqir~†rj©j†r€hŒXreadLqir†r‚j©jk†rƒhŒXmsgr„†r…j©j~†r†j©j#†r‡jsj»†rˆjsX      r‰†rŠhŒXreconr‹†rŒhtjã†rhtj?†rŽhŒXr_metar†rj©j†r‘hŒXrssir’†r“jsj†r”htj"†r•jsj†r–jXcallr—†r˜jsj†r™hŒXReadLqirš†r›j©j†rœhŒXreadRssir†ržj©jk†rŸhŒXmsgr †r¡j©j~†r¢j©j#†r£jsj»†r¤jsj»†r¥jsX      r¦†r§jXifr¨†r©jsj†rªj©jk†r«hŒXhasFrag1Headerr¬†r­j©jk†r®htj߆r¯hŒXlowmsgr°†r±j©j~†r²j©j~†r³jsj†r´j©j†rµjsj»†r¶jsX        r·†r¸jXifr¹†rºjsj†r»j©jk†r¼hŒXreconr½†r¾htjã†r¿htj?†rÀhŒXr_bufrÁ†rÂjsj†rÃhtjE†rÄhtj"†rÅjsj†rÆjEXNULLrdžrÈj©j~†rÉjsj†rÊjXgotorˆrÌjsj†rÍhŒXfailrΆrÏj©j#†rÐjsj»†rÑjsX        rÒ†rÓhŒXrvrÔ†rÕjsj†rÖhtj"†r×jsj†rØhŒXlowpan_recon_startrÙ†rÚj©jk†rÛhtj߆rÜhŒX
frame_addressr݆rÞj©jv†rßjsj†ràhŒXreconrá†râj©jv†rãjsj†rähŒXbufrå†ræj©jv†rçjsj†rèhŒXlenré†rêj©j~†rëj©j#†rìjsj»†ríjsX      rî†rïj©jF†rðjsj†rñjXelserò†rójsj†rôj©j†rõjsj»†röjsX        r÷†røhŒXrvrù†rújsj†rûhtj"†rüjsj†rýhŒXlowpan_recon_addrþ†rÿj©jk†rhŒXreconr†rj©jv†rjsj†rhŒXbufr†rj©jv†rjsj†rhŒXlenr	†r
j©j~†rj©j#†rjsj»†r
jsX      r†rj©jF†rjsj»†rjsX        
      r†rjXifr†rjsj†rj©jk†rhŒXrvr†rjsj†rhtj;†rjsj†rjŸj<†rj©j~†rjsj†rj©j†r jsj»†r!jsX        r"†r#hŒXreconr$†r%htjã†r&htj?†r'hŒX	r_timeoutr(†r)jsj†r*htj"†r+jsj†r,hŒX	T_FAILED1r-†r.j©j#†r/jsj»†r0jsX        r1†r2jXgotor3†r4jsj†r5hŒXfailr6†r7j©j#†r8jsj»†r9jsX      r:†r;j©jF†r<jsj†r=jXelser>†r?jsj†r@j©j†rAjsj»†rBjsX        rC†rDh.X2// printf("start recon buf: %p\n", recon->r_buf);
rE†rFjsX        rG†rHhŒXreconrI†rJhtjã†rKhtj?†rLhŒX	r_timeoutrM†rNjsj†rOhtj"†rPjsj†rQhŒXT_ACTIVErR†rSj©j#†rTjsj»†rUjsX        rV†rWhŒXreconrX†rYhtjã†rZhtj?†r[hŒXr_source_keyr\†r]jsj†r^htj"†r_jsj†r`hŒX
source_keyra†rbj©j#†rcjsj»†rdjsX        re†rfhŒXreconrg†rhhtjã†rihtj?†rjhŒXr_tagrk†rljsj†rmhtj"†rnjsj†rohŒXtagrp†rqj©j#†rrjsj»†rsjsX      rt†ruj©jF†rvjsj»†rwjsj»†rxjsX      ry†rzjXifr{†r|jsj†r}j©jk†r~hŒXreconr†r€htjã†rhtj?†r‚hŒXr_sizerƒ†r„jsj†r…htj"†r†htj"†r‡jsj†rˆhŒXreconr‰†rŠhtjã†r‹htj?†rŒhŒXr_bytes_rcvdr†rŽj©j~†rjsj†rj©j†r‘jsj»†r’jsX        r“†r”hŒXdeliverr•†r–j©jk†r—hŒXreconr˜†r™j©j~†ršj©j#†r›jsj»†rœjsX      r†ržj©jF†rŸjsj»†r jsj»†r¡jsX    r¢†r£j©jF†r¤jsj†r¥jXelser¦†r§jsj†r¨j©j†r©jsj»†rªjsX      r«†r¬hX'/* no fragmentation, just deliver it */r­†r®jsj»†r¯jsX      r°†r±j-Xintr²†r³jsj†r´hŒXrvrµ†r¶j©j#†r·jsj»†r¸jsX      r¹†rºjXstructr»†r¼jsj†r½hŒXlowpan_reconstructr¾†r¿jsj†rÀhŒXreconrÁ†rÂj©j#†rÃjsj»†rÄjsj»†rÅjsX      rƆrÇhX/* fill in metadata */rȆrÉjsj»†rÊjsX      rˆrÌhŒXmemcpyr͆rÎj©jk†rÏhtj߆rÐhŒXreconrцrÒj©j†rÓhŒXr_metarÔ†rÕj©j†rÖhŒXsenderr׆rØj©jv†rÙjsj†rÚhtj߆rÛhŒX
frame_addressr܆rÝj©j†rÞhŒXieee_srcr߆ràj©jv†rájsX 
             râ†rãjXsizeofrä†råj©jk†ræhŒXieee154_addr_trç†rèj©j~†réj©j~†rêj©j#†rëjsj»†rìjsX      rí†rîhŒXreconrï†rðj©j†rñhŒXr_metarò†rój©j†rôhŒXlqirõ†röjsj†r÷htj"†røjsj†rùjXcallrú†rûjsj†rühŒXReadLqirý†rþj©j†rÿhŒXreadLqir†rj©jk†rhŒXmsgr†rj©j~†rj©j#†rjsj»†rjsX      r†r	hŒXreconr
†rj©j†rhŒXr_metar
†rj©j†rhŒXrssir†rjsj†rhtj"†rjsj†rjXcallr†rjsj†rhŒXReadLqir†rj©j†rhŒXreadRssir†rj©jk†rhŒXmsgr†rj©j~†r j©j#†r!jsj»†r"jsj»†r#jsX      r$†r%hŒXbufr&†r'jsj†r(htj"†r)jsj†r*hŒXgetLowpanPayloadr+†r,j©jk†r-htj߆r.hŒXlowmsgr/†r0j©j~†r1j©j#†r2jsj»†r3jsX      r4†r5jXifr6†r7jsj†r8j©jk†r9j©jk†r:hŒXrvr;†r<jsj†r=htj"†r>jsj†r?hŒXlowpan_recon_startr@†rAj©jk†rBhtj߆rChŒX
frame_addressrD†rEj©jv†rFjsj†rGhtj߆rHhŒXreconrI†rJj©jv†rKjsj†rLhŒXbufrM†rNj©jv†rOjsj†rPhŒXlenrQ†rRj©j~†rSj©j~†rTjsj†rUhtj;†rVjsj†rWjŸj<†rXj©j~†rYjsj†rZj©j†r[jsj»†r\jsX        r]†r^jXgotor_†r`jsj†rahŒXfailrb†rcj©j#†rdjsj»†rejsX      rf†rgj©jF†rhjsj»†rijsj»†rjjsX      rk†rljXifrm†rnjsj†roj©jk†rphŒXreconrq†rrj©j†rshŒXr_sizert†rujsj†rvhtj"†rwhtj"†rxjsj†ryhŒXreconrz†r{j©j†r|hŒXr_bytes_rcvdr}†r~j©j~†rjsj†r€j©j†rjsj»†r‚jsX        rƒ†r„hŒXdeliverr…†r†j©jk†r‡htj߆rˆhŒXreconr‰†rŠj©j~†r‹j©j#†rŒjsj»†rjsX      rކrj©jF†rjsj†r‘jXelser’†r“jsj†r”j©j†r•jsj»†r–jsX        r—†r˜h.X)// printf("ip_free(%p)\n", recon.r_buf);
r™†ršjsX        r›†rœhŒXip_freer†ržj©jk†rŸhŒXreconr †r¡j©j†r¢hŒXr_bufr£†r¤j©j~†r¥j©j#†r¦jsj»†r§jsX      r¨†r©j©jF†rªjsj»†r«jsX    r¬†r­j©jF†r®jsj»†r¯jsX    r°†r±jXgotor²†r³jsj†r´hŒXdonerµ†r¶j©j#†r·jsj»†r¸jsX  r¹†rºj6Xfailr»†r¼j©jH†r½jsj»†r¾jsX    r¿†rÀhŒXBLIP_STATS_INCRrÁ†rÂj©jk†rÃhŒXstatsrĆrÅj©j†rÆhŒXrx_droprdžrÈj©j~†rÉj©j#†rÊjsj»†rËjsX  r̆rÍj6XdonerΆrÏj©jH†rÐjsj»†rÑjsX    rÒ†rÓjXreturnrÔ†rÕjsj†rÖhŒXmsgr׆rØj©j#†rÙjsj»†rÚjsX  rÛ†rÜj©jF†rÝjsj»†rÞjsj»†rßjsj»†ràjsX  rá†râhX%/*
   * Send-side functionality
   */rã†räjsj»†råjsX  ræ†rçjXtaskrè†réjsj†rêj-Xvoidrë†rìjsj†ríhŒXsendTaskrî†rïj©jk†rðj©j~†rñjsj†ròj©j†rójsj»†rôjsX    rõ†röjXstructr÷†røjsj†rùhŒX
send_entryrú†rûjsj†rühtj†rýhŒXs_entryrþ†rÿj©j#†rjsj»†rjsj»†rjsX    r†rh.X%// printf("sendTask() - sending\n");
r†rjsj»†rjsX    r†r	jXifr
†rjsj†rj©jk†r
hŒX	radioBusyr†rjsj†rhtj¼†rhtj¼†rjsj†rhŒXstater†rjsj†rhtjE†rhtj"†rjsj†rhŒX	S_RUNNINGr†rj©j~†rjsj†rjXreturnr†rj©j#†r jsj»†r!jsX    r"†r#jXifr$†r%jsj†r&j©jk†r'jXcallr(†r)jsj†r*hŒX	SendQueuer+†r,j©j†r-hŒXemptyr.†r/j©jk†r0j©j~†r1j©j~†r2jsj†r3jXreturnr4†r5j©j#†r6jsj»†r7jsX    r8†r9h.X// this does not dequeue
r:†r;jsX    r<†r=hŒXs_entryr>†r?jsj†r@htj"†rAjsj†rBjXcallrC†rDjsj†rEhŒX	SendQueuerF†rGj©j†rHhŒXheadrI†rJj©jk†rKj©j~†rLj©j#†rMjsj»†rNjsj»†rOhj¾†rPhXifdef LPL_SLEEP_INTERVALrQ†rRhj»†rSjsX    rT†rUjXcallrV†rWjsj†rXhŒXLowPowerListeningrY†rZj©j†r[hŒXsetRemoteWakeupIntervalr\†r]j©jk†r^hŒXs_entryr_†r`htjã†rahtj?†rbhŒXmsgrc†rdj©jv†rejsj»†rfjsX            rg†rhjXcallri†rjjsj†rkhŒXLowPowerListeningrl†rmj©j†rnhŒXgetLocalWakeupIntervalro†rpj©jk†rqj©j~†rrj©j~†rsj©j#†rtjsj»†ruhj¾†rvhXendifrw†rxhj»†ryjsj»†rzjsX    r{†r|jXifr}†r~jsj†rj©jk†r€hŒXs_entryr†r‚htjã†rƒhtj?†r„hŒXinfor…†r†htjã†r‡htj?†rˆhŒXfailedr‰†rŠj©j~†r‹jsj†rŒj©j†rjsj»†rŽjsX      r†rhŒXdbgr‘†r’j©jk†r“jÁjý
†r”jÁXDropsr•†r–jÁjý
†r—j©jv†r˜jsj†r™jÁjý
†ršjÁX)drops: sendTask: dropping failed fragmentr›†rœjúX\nr†ržjÁjý
†rŸj©j~†r j©j#†r¡jsj»†r¢jsX      r£†r¤jXgotor¥†r¦jsj†r§hŒXfailr¨†r©j©j#†rªjsj»†r«jsX    r¬†r­j©jF†r®jsj»†r¯jsj»†r°jsX    r±†r²jXifr³†r´jsj†rµj©jk†r¶j©jk†r·jXcallr¸†r¹jsj†rºhŒXIeee154Sendr»†r¼j©j†r½hŒXsendr¾†r¿j©jk†rÀhŒXs_entryrÁ†rÂhtjã†rÃhtj?†rÄhŒXmsgrņrÆj©jv†rÇjsj»†rÈjsX                               rɆrÊjXcallrˆrÌjsj†rÍhŒX
BarePacketrΆrÏj©j†rÐhŒX
payloadLengthrцrÒj©jk†rÓhŒXs_entryrÔ†rÕhtjã†rÖhtj?†r×hŒXmsgr؆rÙj©j~†rÚj©j~†rÛj©j~†rÜjsj†rÝhtjE†rÞhtj"†rßjsj†ràhŒXSUCCESSrá†râj©j~†rãjsj†räj©j†råjsj»†ræjsX      rç†rèhŒXdbgré†rêj©jk†rëjÁjý
†rìjÁXDropsrí†rîjÁjý
†rïj©jv†rðjsj†rñjÁjý
†ròjÁXdrops: sendTask: send failedró†rôjúX\nrõ†röjÁjý
†r÷j©j~†røj©j#†rùjsj»†rújsX      rû†rüjXgotorý†rþjsj†rÿe(hŒXfailr†rj©j#†rjsj»†rjsX    r†rj©jF†rjsj†rjXelser†r	jsj†r
j©j†rjsj»†rjsX      r
†rhŒX	radioBusyr†rjsj†rhtj"†rjsj†rhŒXTRUEr†rj©j#†rjsj»†rjsX    r†rj©jF†rjsj»†rjsj»†rjsX    r†rjXreturnr†r j©j#†r!jsj»†r"jsX  r#†r$j6Xfailr%†r&j©jH†r'jsj»†r(jsX    r)†r*hŒXprintfr+†r,j©jk†r-jÁjý
†r.jÁX	SEND FAILr/†r0júX\nr1†r2jÁjý
†r3j©j~†r4j©j#†r5jsj»†r6jsX    r7†r8jXpostr9†r:jsj†r;jtXsendTaskr<†r=j©jk†r>j©j~†r?j©j#†r@jsj»†rAjsX    rB†rChŒXBLIP_STATS_INCRrD†rEj©jk†rFhŒXstatsrG†rHj©j†rIhŒXtx_droprJ†rKj©j~†rLj©j#†rMjsj»†rNjsj»†rOjsX    rP†rQh.X7// deallocate the memory associated with this request.
rR†rSjsX    rT†rUh.XA// other fragments associated with this packet will get dropped.
rV†rWjsX    rX†rYhŒXs_entryrZ†r[htjã†r\htj?†r]hŒXinfor^†r_htjã†r`htj?†rahŒXfailedrb†rcjsj†rdhtj"†rejsj†rfhŒXTRUErg†rhj©j#†rijsj»†rjjsX    rk†rlhŒX
SENDINFO_DECRrm†rnj©jk†rohŒXs_entryrp†rqhtjã†rrhtj?†rshŒXinfort†ruj©j~†rvj©j#†rwjsj»†rxjsX    ry†rzjXcallr{†r|jsj†r}hŒXFragPoolr~†rj©j†r€hŒXputr†r‚j©jk†rƒhŒXs_entryr„†r…htjã†r†htj?†r‡hŒXmsgrˆ†r‰j©j~†rŠj©j#†r‹jsj»†rŒjsX    r†rŽjXcallr†rjsj†r‘hŒX
SendEntryPoolr’†r“j©j†r”hŒXputr•†r–j©jk†r—hŒXs_entryr˜†r™j©j~†ršj©j#†r›jsj»†rœjsX    r†ržjXcallrŸ†r jsj†r¡hŒX	SendQueuer¢†r£j©j†r¤hŒXdequeuer¥†r¦j©jk†r§j©j~†r¨j©j#†r©jsj»†rªjsX  r«†r¬j©jF†r­jsj»†r®jsX  

  r¯†r°hX/*
   *  it will pack the message into the fragment pool and enqueue
   *  those fragments for sending
   *
   * it will set
   *  - payload length
   *  - version, traffic class and flow label
   *
   * the source and destination IP addresses must be set by higher
   * layers.
   */r±†r²jsj»†r³jsX  r´†rµjXcommandr¶†r·jsj†r¸hŒXerror_tr¹†rºjsj†r»hŒXIPLowerr¼†r½j©j†r¾hŒXsendr¿†rÀj©jk†rÁjXstructr†rÃjsj†rÄhŒXieee154_frame_addrrņrÆjsj†rÇhtj†rÈhŒX
frame_addrrɆrÊj©jv†rËjsj»†rÌjsX                               r͆rÎjXstructrφrÐjsj†rÑhŒX
ip6_packetrÒ†rÓjsj†rÔhtj†rÕhŒXmsgrÖ†r×j©jv†rØjsj»†rÙjsX                               rÚ†rÛj-Xvoidr܆rÝjsX  rÞ†rßhtj†ràhŒXdatará†râj©j~†rãjsj†räj©j†råjsj»†ræjsX    rç†rèjXstructré†rêjsj†rëhŒX
lowpan_ctxrì†ríjsj†rîhŒXctxrï†rðj©j#†rñjsj»†ròjsX    ró†rôjXstructrõ†röjsj†r÷hŒX	send_inforø†rùjsX  rú†rûhtj†rühŒXs_inforý†rþj©j#†rÿjsj»†rjsX    r†rjXstructr†rjsj†rhŒX
send_entryr†rjsj†rhtj†r	hŒXs_entryr
†rj©j#†rjsj»†r
jsX    r†rhŒX	message_tr†rjsj†rhtj†rhŒXoutgoingr†rj©j#†rjsj»†rjsj»†rjsX    r†rj-Xintr†rjsj†rhŒXfrag_lenr†rjsj†r htj"†r!jsj†r"jŸje†r#j©j#†r$jsj»†r%jsX    r&†r'hŒXerror_tr(†r)jsj†r*hŒXrcr+†r,jsj†r-htj"†r.jsj†r/hŒXSUCCESSr0†r1j©j#†r2jsj»†r3jsj»†r4jsX    r5†r6jXifr7†r8jsj†r9j©jk†r:hŒXstater;†r<jsj†r=htjE†r>htj"†r?jsj†r@hŒX	S_RUNNINGrA†rBj©j~†rCjsj†rDj©j†rEjsj»†rFjsX      rG†rHjXreturnrI†rJjsj†rKhŒXEOFFrL†rMj©j#†rNjsj»†rOjsX    rP†rQj©jF†rRjsj»†rSjsj»†rTjsX    rU†rVhX2/* set version to 6 in case upper layers forgot */rW†rXjsj»†rYjsX    rZ†r[hŒXmsgr\†r]htjã†r^htj?†r_hŒXip6_hdrr`†raj©j†rbhŒXip6_vfcrc†rdjsj†rehtj߆rfhtj"†rgjsj†rhhtX~ri†rjhŒXIPV6_VERSION_MASKrk†rlj©j#†rmjsj»†rnjsX    ro†rphŒXmsgrq†rrhtjã†rshtj?†rthŒXip6_hdrru†rvj©j†rwhŒXip6_vfcrx†ryjsj†rzhtj¼†r{htj"†r|jsj†r}hŒXIPV6_VERSIONr~†rj©j#†r€jsj»†rjsj»†r‚jsX    rƒ†r„hŒXctxr…†r†j©j†r‡hŒXtagrˆ†r‰jsj†rŠhtj"†r‹jsj†rŒhŒXcurrent_local_labelr†rŽhtjm
†rhtjm
†rj©j#†r‘jsj»†r’jsX    r“†r”hŒXctxr•†r–j©j†r—hŒXoffsetr˜†r™jsj†ršhtj"†r›jsj†rœjŸj<†rj©j#†ržjsj»†rŸjsj»†r jsX    r¡†r¢hŒXs_infor£†r¤jsj†r¥htj"†r¦jsj†r§hŒXgetSendInfor¨†r©j©jk†rªj©j~†r«j©j#†r¬jsj»†r­jsX    r®†r¯jXifr°†r±jsj†r²j©jk†r³hŒXs_infor´†rµjsj†r¶htj"†r·htj"†r¸jsj†r¹jEXNULLrº†r»j©j~†r¼jsj†r½j©j†r¾jsj»†r¿jsX      rÀ†rÁhŒXrcr†rÃjsj†rÄhtj"†rÅjsj†rÆhŒXERETRYrdžrÈj©j#†rÉjsj»†rÊjsX      rˆrÌjXgotor͆rÎjsj†rÏhŒX
cleanup_outerrІrÑj©j#†rÒjsj»†rÓjsX    rÔ†rÕj©jF†rÖjsj»†r×jsX    r؆rÙhŒXs_inforÚ†rÛhtjã†rÜhtj?†rÝhŒX
upper_datarÞ†rßjsj†ràhtj"†rájsj†râhŒXdatarã†räj©j#†råjsj»†ræjsj»†rçjsX    rè†réjXwhilerê†rëjsj†rìj©jk†ríhŒXfrag_lenrî†rïjsj†rðhtj?†rñjsj†ròjŸj<†rój©j~†rôjsj†rõj©j†röjsj»†r÷jsX      rø†rùhŒXs_entryrú†rûjsX  rü†rýhtj"†rþjsj†rÿjXcallr†rjsj†rhŒX
SendEntryPoolr†rj©j†rhŒXgetr†rj©jk†rj©j~†r	j©j#†r
jsj»†rjsX      r†r
hŒXoutgoingr†rjsj†rhtj"†rjsj†rjXcallr†rjsj†rhŒXFragPoolr†rj©j†rhŒXgetr†rj©jk†rj©j~†rj©j#†rjsj»†rjsj»†rjsX      r †r!jXifr"†r#jsj†r$j©jk†r%hŒXs_entryr&†r'jsj†r(htj"†r)htj"†r*jsj†r+jEXNULLr,†r-jsj†r.htj¼†r/htj¼†r0jsj†r1hŒXoutgoingr2†r3jsj†r4htj"†r5htj"†r6jsj†r7jEXNULLr8†r9j©j~†r:jsj†r;j©j†r<jsj»†r=jsX        r>†r?jXifr@†rAjsj†rBj©jk†rChŒXs_entryrD†rEjsj†rFhtjE†rGhtj"†rHjsj†rIjEXNULLrJ†rKj©j~†rLjsj»†rMjsX
          rN†rOjXcallrP†rQjsj†rRhŒX
SendEntryPoolrS†rTj©j†rUhŒXputrV†rWj©jk†rXhŒXs_entryrY†rZj©j~†r[j©j#†r\jsj»†r]jsX        r^†r_jXifr`†rajsj†rbj©jk†rchŒXoutgoingrd†rejsj†rfhtjE†rghtj"†rhjsj†rijEXNULLrj†rkj©j~†rljsj»†rmjsX
          rn†rojXcallrp†rqjsj†rrhŒXFragPoolrs†rtj©j†ruhŒXputrv†rwj©jk†rxhŒXoutgoingry†rzj©j~†r{j©j#†r|jsj»†r}jsX        r~†rh.X=// this will cause any fragments we have already enqueued to
r€†rjsX        r‚†rƒh.X // be dropped by the send task.
r„†r…jsX        r††r‡hŒXs_inforˆ†r‰htjã†rŠhtj?†r‹hŒXfailedrŒ†rjsj†rŽhtj"†rjsj†rhŒXTRUEr‘†r’j©j#†r“jsj»†r”jsX        r•†r–hŒXprintfr—†r˜j©jk†r™jÁjý
†ršjÁXdrops: IP send: no fragmentsr›†rœjúX\nr†ržjÁjý
†rŸj©j~†r j©j#†r¡jsj»†r¢jsX        r£†r¤hŒXrcr¥†r¦jsj†r§htj"†r¨jsj†r©hŒXERETRYrª†r«j©j#†r¬jsj»†r­jsX        r®†r¯jXgotor°†r±jsj†r²hŒXdoner³†r´j©j#†rµjsj»†r¶jsX      r·†r¸j©jF†r¹jsj»†rºjsj»†r»jsX      r¼†r½jXcallr¾†r¿jsj†rÀhŒX
BarePacketrÁ†rÂj©j†rÃhŒXclearrĆrÅj©jk†rÆhŒXoutgoingrdžrÈj©j~†rÉj©j#†rÊjsj»†rËjsX      r̆rÍhŒXfrag_lenrΆrÏjsj†rÐhtj"†rÑjsj†rÒhŒXlowpan_frag_getrÓ†rÔj©jk†rÕjXcallrÖ†r×jsj†rØhŒXIeee154SendrÙ†rÚj©j†rÛhŒX
getPayloadr܆rÝj©jk†rÞhŒXoutgoingr߆ràj©jv†rájsj†râjŸj<†rãj©j~†räj©jv†råjsj»†ræjsX!                                 rç†rèjXcallré†rêjsj†rëhŒX
BarePacketrì†ríj©j†rîhŒXmaxPayloadLengthrï†rðj©jk†rñj©j~†ròj©jv†rójsj»†rôjsX!                                 rõ†röhŒXmsgr÷†røj©jv†rùjsj»†rújsX!                                 rû†rühŒX
frame_addrrý†rþj©jv†rÿjsj»†rjsX!                                 r†rhtj߆rhŒXctxr†rj©j~†rj©j#†rjsj»†rjsX      r	†r
jXifr†rjsj†r
j©jk†rhŒXfrag_lenr†rjsj†rhtj;†rjsj†rjŸj<†rj©j~†rjsj†rj©j†rjsj»†rjsX        r†rhŒXprintfr†rj©jk†rjÁjý
†rjÁX get frag error: %ir†r júX\nr!†r"jÁjý
†r#j©jv†r$jsj†r%hŒXfrag_lenr&†r'j©j~†r(j©j#†r)jsj»†r*jsX      r+†r,j©jF†r-jsj»†r.jsj»†r/jsX      r0†r1hŒXprintfr2†r3j©jk†r4jÁjý
†r5jÁXfragment length: %i offset: %ir6†r7júX\nr8†r9jÁjý
†r:j©jv†r;jsj†r<hŒXfrag_lenr=†r>j©jv†r?jsj†r@hŒXctxrA†rBj©j†rChŒXoffsetrD†rEj©j~†rFj©j#†rGjsj»†rHjsX      rI†rJjXcallrK†rLjsj†rMhŒX
BarePacketrN†rOj©j†rPhŒXsetPayloadLengthrQ†rRj©jk†rShŒXoutgoingrT†rUj©jv†rVjsj†rWhŒXfrag_lenrX†rYj©j~†rZj©j#†r[jsj»†r\jsj»†r]jsX      r^†r_jXifr`†rajsj†rbj©jk†rchŒXfrag_lenrd†rejsj†rfhtj;†rghtj"†rhjsj†rijŸj<†rjj©j~†rkjsj†rlj©j†rmjsj»†rnjsX        ro†rpjXcallrq†rrjsj†rshŒXFragPoolrt†ruj©j†rvhŒXputrw†rxj©jk†ryhŒXoutgoingrz†r{j©j~†r|j©j#†r}jsj»†r~jsX        r†r€jXcallr†r‚jsj†rƒhŒX
SendEntryPoolr„†r…j©j†r†hŒXputr‡†rˆj©jk†r‰hŒXs_entryrІr‹j©j~†rŒj©j#†rjsj»†rŽjsX        r†rjXgotor‘†r’jsj†r“hŒXdoner”†r•j©j#†r–jsj»†r—jsX      r˜†r™j©jF†ršjsj»†r›jsj»†rœjsX      r†ržjXifrŸ†r jsj†r¡j©jk†r¢jXcallr£†r¤jsj†r¥hŒX	SendQueuer¦†r§j©j†r¨hŒXenqueuer©†rªj©jk†r«hŒXs_entryr¬†r­j©j~†r®jsj†r¯htjE†r°htj"†r±jsj†r²hŒXSUCCESSr³†r´j©j~†rµjsj†r¶j©j†r·jsj»†r¸jsX        r¹†rºhŒXBLIP_STATS_INCRr»†r¼j©jk†r½hŒXstatsr¾†r¿j©j†rÀhŒXencfailrÁ†rÂj©j~†rÃj©j#†rÄjsj»†rÅjsX        rƆrÇhŒXs_inforȆrÉhtjã†rÊhtj?†rËhŒXfailedr̆rÍjsj†rÎhtj"†rÏjsj†rÐhŒXTRUErцrÒj©j#†rÓjsj»†rÔjsX        rÕ†rÖhŒXprintfr׆rØj©jk†rÙjÁjý
†rÚjÁXdrops: IP send: enqueue failedrÛ†rÜjúX\nr݆rÞjÁjý
†rßj©j~†ràj©j#†rájsj»†râjsX        rã†räjXgotorå†ræjsj†rçhŒXdonerè†réj©j#†rêjsj»†rëjsX      rì†ríj©jF†rîjsj»†rïjsj»†rðjsX      rñ†ròhŒXs_inforó†rôhtjã†rõhtj?†röhŒXlink_fragmentsr÷†røhtjm
†rùhtjm
†rúj©j#†rûjsj»†rüjsX      rý†rþhŒXs_entryrÿ†rhtjã†rhtj?†rhŒXmsgr†rjsj†rhtj"†rjsj†rhŒXoutgoingr†r	j©j#†r
jsj»†rjsX      r†r
hŒXs_entryr†rhtjã†rhtj?†rhŒXinfor†rjsj†rhtj"†rjsj†rhŒXs_infor†rj©j#†rjsj»†rjsj»†rjsX      r†rhX/* configure the L2 */r†rjsj»†r jsX      r!†r"jXifr#†r$jsj†r%j©jk†r&hŒX
frame_addrr'†r(htjã†r)htj?†r*hŒXieee_dstr+†r,j©j†r-hŒX	ieee_moder.†r/jsj†r0htj"†r1htj"†r2jsj†r3hŒXIEEE154_ADDR_SHORTr4†r5jsj†r6htj߆r7htj߆r8jsj»†r9jsX
          r:†r;hŒX
frame_addrr<†r=htjã†r>htj?†r?hŒXieee_dstr@†rAj©j†rBhŒXi_saddrrC†rDjsj†rEhtj"†rFhtj"†rGjsj†rHhŒXIEEE154_BROADCAST_ADDRrI†rJj©j~†rKjsj†rLj©j†rMjsj»†rNjsX        rO†rPjXcallrQ†rRjsj†rShŒX
PacketLinkrT†rUj©j†rVhŒX
setRetriesrW†rXj©jk†rYhŒXs_entryrZ†r[htjã†r\htj?†r]hŒXmsgr^†r_j©jv†r`jsj†rajŸj<†rbj©j~†rcj©j#†rdjsj»†rejsX      rf†rgj©jF†rhjsj†rijXelserj†rkjsj†rlj©j†rmjsj»†rnjsX        ro†rpjXcallrq†rrjsj†rshŒX
PacketLinkrt†ruj©j†rvhŒX
setRetriesrw†rxj©jk†ryhŒXs_entryrz†r{htjã†r|htj?†r}hŒXmsgr~†rj©jv†r€jsj†rhŒXBLIP_L2_RETRIESr‚†rƒj©j~†r„j©j#†r…jsj»†r†jsX      r‡†rˆj©jF†r‰jsj»†rŠjsX      r‹†rŒjXcallr†rŽjsj†rhŒX
PacketLinkr†r‘j©j†r’hŒX
setRetryDelayr“†r”j©jk†r•hŒXs_entryr–†r—htjã†r˜htj?†r™hŒXmsgrš†r›j©jv†rœjsj†rhŒX
BLIP_L2_DELAYrž†rŸj©j~†r j©j#†r¡jsj»†r¢jsj»†r£jsX      r¤†r¥hŒX
SENDINFO_INCRr¦†r§j©jk†r¨hŒXs_infor©†rªj©j~†r«j©j#†r¬j©jF†r­jsj»†r®jsX       
    r¯†r°h.X5// printf("got %i frags\n", s_info->link_fragments);
r±†r²jsX  r³†r´j6Xdonerµ†r¶j©jH†r·jsj»†r¸jsX    r¹†rºhŒXBLIP_STATS_INCRr»†r¼j©jk†r½hŒXstatsr¾†r¿j©j†rÀhŒXsentrÁ†rÂj©j~†rÃj©j#†rÄjsj»†rÅjsX    rƆrÇhŒX
SENDINFO_DECRrȆrÉj©jk†rÊhŒXs_inforˆrÌj©j~†rÍj©j#†rÎjsj»†rÏjsX    rІrÑjXpostrÒ†rÓjsj†rÔjtXsendTaskrÕ†rÖj©jk†r×j©j~†rØj©j#†rÙjsj»†rÚjsX  rÛ†rÜj6X
cleanup_outerr݆rÞj©jH†rßjsj»†ràjsX    rá†râjXreturnrã†räjsj†råhŒXrcræ†rçj©j#†rèjsj»†réjsX  rê†rëj©jF†rìjsj»†ríjsj»†rîjsX  rï†rðjXeventrñ†ròjsj†rój-Xvoidrô†rõjsj†röhŒXIeee154Sendr÷†røj©j†rùhŒXsendDonerú†rûj©jk†rühŒX	message_trý†rþjsj†rÿhtj†rhŒXmsgr†rj©jv†rjsj†rhŒXerror_tr†rjsj†rhŒXerrorr†r	j©j~†r
jsj†rj©j†rjsj»†r
jsX    r†rjXstructr†rjsj†rhŒX
send_entryr†rjsj†rhtj†rhŒXs_entryr†rjsj†rhtj"†rjsj†rjXcallr†rjsj†rhŒX	SendQueuer†r j©j†r!hŒXheadr"†r#j©jk†r$j©j~†r%j©j#†r&jsj»†r'jsj»†r(jsX    r)†r*hŒX	radioBusyr+†r,jsj†r-htj"†r.jsj†r/hŒXFALSEr0†r1j©j#†r2jsj»†r3jsj»†r4jsX    r5†r6h.X,// printf("sendDone: %p %i\n", msg, error);
r7†r8jsj»†r9jsX    r:†r;jXifr<†r=jsj†r>j©jk†r?hŒXstater@†rAjsj†rBhtj"†rChtj"†rDjsj†rEhŒX
S_STOPPINGrF†rGj©j~†rHjsj†rIj©j†rJjsj»†rKjsX      rL†rMjXcallrN†rOjsj†rPhŒXRadioControlrQ†rRj©j†rShŒXstoprT†rUj©jk†rVj©j~†rWj©j#†rXjsj»†rYjsX      rZ†r[hŒXstater\†r]jsj†r^htj"†r_jsj†r`hŒX	S_STOPPEDra†rbj©j#†rcjsj»†rde(jsX      re†rfjXgotorg†rhjsj†rihŒXdonerj†rkj©j#†rljsj»†rmjsX    rn†roj©jF†rpjsj»†rqjsX	    
    rr†rshŒXs_entryrt†ruhtjã†rvhtj?†rwhŒXinforx†ryhtjã†rzhtj?†r{hŒXlink_transmissionsr|†r}jsj†r~htjm
†rhtj"†r€jsj†rj©jk†r‚jXcallrƒ†r„jsj†r…hŒX
PacketLinkr††r‡j©j†rˆhŒX
getRetriesr‰†rŠj©jk†r‹hŒXmsgrŒ†rj©j~†rŽj©j~†rj©j#†rjsj»†r‘jsX    r’†r“hŒXs_entryr”†r•htjã†r–htj?†r—hŒXinfor˜†r™htjã†ršhtj?†r›hŒXlink_fragment_attemptsrœ†rhtjm
†ržhtjm
†rŸj©j#†r jsj»†r¡jsj»†r¢jsX    r£†r¤jXifr¥†r¦jsj†r§j©jk†r¨htjE†r©jXcallrª†r«jsj†r¬hŒX
PacketLinkr­†r®j©j†r¯hŒXwasDeliveredr°†r±j©jk†r²hŒXmsgr³†r´j©j~†rµj©j~†r¶jsj†r·j©j†r¸jsj»†r¹jsX      rº†r»hŒXprintfr¼†r½j©jk†r¾jÁjý
†r¿jÁX'sendDone: was not delivered! (%i tries)rÀ†rÁjúX\nr†rÃjÁjý
†rÄj©jv†rÅjsX 
                 rƆrÇjXcallrȆrÉjsj†rÊhŒX
PacketLinkrˆrÌj©j†rÍhŒX
getRetriesrΆrÏj©jk†rÐhŒXmsgrцrÒj©j~†rÓj©j~†rÔj©j#†rÕjsj»†rÖjsX      r׆rØhŒXs_entryrÙ†rÚhtjã†rÛhtj?†rÜhŒXinfor݆rÞhtjã†rßhtj?†ràhŒXfailedrá†râjsj†rãhtj"†räjsj†råhŒXTRUEræ†rçj©j#†rèjsj»†réjsX      rê†rëjXsignalrì†ríjsj†rîhŒXIPLowerrï†rðj©j†rñhŒXsendDonerò†rój©jk†rôhŒXs_entryrõ†röhtjã†r÷htj?†røhŒXinforù†rúj©j~†rûj©j#†rüjsj»†rýhX8/*       if (s_entry->info->policy.dest[0] != 0xffff) */rþ†rÿjsj»†rhXH/*         dbg("Drops", "drops: sendDone: frag was not delivered\n"); */r†rjsj»†rjsX      r†rh.X&// need to check for broadcast frames
r†rjsX      r†r	h.X#// BLIP_STATS_INCR(stats.tx_drop);
r
†rjsX    r†r
j©jF†rjsj†rjXelser†rjsj†rjXifr†rjsj†rj©jk†rhŒXs_entryr†rhtjã†rhtj?†rhŒXinfor†rhtjã†rhtj?†rhŒXlink_fragment_attemptsr†r jsj†r!htj"†r"htj"†r#jsX 
               r$†r%hŒXs_entryr&†r'htjã†r(htj?†r)hŒXinfor*†r+htjã†r,htj?†r-hŒXlink_fragmentsr.†r/j©j~†r0jsj†r1j©j†r2jsj»†r3jsX      r4†r5jXsignalr6†r7jsj†r8hŒXIPLowerr9†r:j©j†r;hŒXsendDoner<†r=j©jk†r>hŒXs_entryr?†r@htjã†rAhtj?†rBhŒXinforC†rDj©j~†rEj©j#†rFjsj»†rGjsX    rH†rIj©jF†rJjsj»†rKjsj»†rLjsX  rM†rNj6XdonerO†rPj©jH†rQjsj»†rRjsX    rS†rTh.X"// kill off any pending fragments
rU†rVjsX    rW†rXhŒX
SENDINFO_DECRrY†rZj©jk†r[hŒXs_entryr\†r]htjã†r^htj?†r_hŒXinfor`†raj©j~†rbj©j#†rcjsj»†rdjsX    re†rfjXcallrg†rhjsj†rihŒXFragPoolrj†rkj©j†rlhŒXputrm†rnj©jk†rohŒXs_entryrp†rqhtjã†rrhtj?†rshŒXmsgrt†ruj©j~†rvj©j#†rwjsj»†rxjsX    ry†rzjXcallr{†r|jsj†r}hŒX
SendEntryPoolr~†rj©j†r€hŒXputr†r‚j©jk†rƒhŒXs_entryr„†r…j©j~†r†j©j#†r‡jsj»†rˆjsX    r‰†rŠjXcallr‹†rŒjsj†rhŒX	SendQueuerކrj©j†rhŒXdequeuer‘†r’j©jk†r“j©j~†r”j©j#†r•jsj»†r–jsj»†r—jsX    r˜†r™jXpostrš†r›jsj†rœjtXsendTaskr†ržj©jk†rŸj©j~†r j©j#†r¡jsj»†r¢jsX  r£†r¤j©jF†r¥jsj»†r¦jsj»†r§hX#if 0r¨†r©hj»†rªhXW  command struct tlv_hdr *IPExtensions.findTlv(struct ip6_ext *ext, uint8_t tlv_val) {
r«†r¬hX1    int len = ext->len - sizeof(struct ip6_ext);
r­†r®hX7    struct tlv_hdr *tlv = (struct tlv_hdr *)(ext + 1);
r¯†r°hX    while (len > 0) {
r±†r²hX,      if (tlv->type == tlv_val) return tlv;
r³†r´hX&      if (tlv->len == 0) return NULL;
rµ†r¶hX=      tlv = (struct tlv_hdr *)(((uint8_t *)tlv) + tlv->len);
r·†r¸hX      len -= tlv->len;
r¹†rºhX    }
r»†r¼hX    return NULL;
r½†r¾hX  }
r¿†rÀhX#endif
rÁ†rÂjsj»†rÃjsj»†rÄjsX  rņrÆhX&/*
   * BlipStatistics interface
   */rdžrÈjsj»†rÉjsX  rʆrËjXcommandr̆rÍjsj†rÎj-XvoidrφrÐjsj†rÑhŒXBlipStatisticsrÒ†rÓj©j†rÔhŒXgetrÕ†rÖj©jk†r×hŒXip_statistics_tr؆rÙjsj†rÚhtj†rÛhŒX
statisticsr܆rÝj©j~†rÞjsj†rßj©j†ràjsj»†ráhj¾†râhXifdef BLIP_STATS_IP_MEMrã†rähj»†råjsX    ræ†rçhŒXstatsrè†réj©j†rêhŒXfragpoolrë†rìjsj†ríhtj"†rîjsj†rïjXcallrð†rñjsj†ròhŒXFragPoolró†rôj©j†rõhŒXsizerö†r÷j©jk†røj©j~†rùj©j#†rújsj»†rûjsX    rü†rýhŒXstatsrþ†rÿj©j†rhŒXsendinfor†rjsj†rhtj"†rjsj†rjXcallr†rjsj†rhŒXSendInfoPoolr	†r
j©j†rhŒXsizer†r
j©jk†rj©j~†rj©j#†rjsj»†rjsX    r†rhŒXstatsr†rj©j†rhŒX	sendentryr†rhtj"†rjsj†rjXcallr†rjsj†rhŒX
SendEntryPoolr†rj©j†r hŒXsizer!†r"j©jk†r#j©j~†r$j©j#†r%jsj»†r&jsX    r'†r(hŒXstatsr)†r*j©j†r+hŒXsndqueuer,†r-jsj†r.htj"†r/jsj†r0jXcallr1†r2jsj†r3hŒX	SendQueuer4†r5j©j†r6hŒXsizer7†r8j©jk†r9j©j~†r:j©j#†r;jsj»†r<jsX    r=†r>hŒXstatsr?†r@j©j†rAhŒXheapfreerB†rCjsj†rDhtj"†rEjsj†rFhŒXip_malloc_freespacerG†rHj©jk†rIj©j~†rJj©j#†rKjsj»†rLjsX    rM†rNhŒXprintfrO†rPj©jk†rQjÁjý
†rRjÁX:frag: %i sendinfo: %i sendentry: %i sendqueue: %i heap: %irS†rTjúX\nrU†rVjÁjý
†rWj©jv†rXjsj»†rYjsX               rZ†r[hŒXstatsr\†r]j©j†r^hŒXfragpoolr_†r`j©jv†rajsj»†rbjsX               rc†rdhŒXstatsre†rfj©j†rghŒXsendinforh†rij©jv†rjjsj»†rkjsX               rl†rmhŒXstatsrn†roj©j†rphŒX	sendentryrq†rrj©jv†rsjsj»†rtjsX               ru†rvhŒXstatsrw†rxj©j†ryhŒXsndqueuerz†r{j©jv†r|jsj»†r}jsX               r~†rhŒXstatsr€†rj©j†r‚hŒXheapfreerƒ†r„j©j~†r…j©j#†r†jsj»†r‡hj¾†rˆhXendifr‰†rŠhj»†r‹jsX    rŒ†rhŒXmemcpyrކrj©jk†rhŒX
statisticsr‘†r’j©jv†r“jsj†r”htj߆r•hŒXstatsr–†r—j©jv†r˜jsj†r™jXsizeofrš†r›j©jk†rœhŒXip_statistics_tr†ržj©j~†rŸj©j~†r j©j#†r¡jsj»†r¢jsj»†r£jsX  r¤†r¥j©jF†r¦jsj»†r§jsj»†r¨jsX  r©†rªjXcommandr«†r¬jsj†r­j-Xvoidr®†r¯jsj†r°hŒXBlipStatisticsr±†r²j©j†r³hŒXclearr´†rµj©jk†r¶j©j~†r·jsj†r¸j©j†r¹jsj»†rºjsX    r»†r¼hŒXmemclrr½†r¾j©jk†r¿j©jk†rÀj-Xuint8_trÁ†rÂjsj†rÃhtj†rÄj©j~†rÅhtj߆rÆhŒXstatsrdžrÈj©jv†rÉjsj†rÊjXsizeofrˆrÌj©jk†rÍhŒXip_statistics_trΆrÏj©j~†rÐj©j~†rÑj©j#†rÒjsj»†rÓjsX  rÔ†rÕj©jF†rÖjsj»†r×jsj»†rØhXH/*   default event void IP.recv[uint8_t nxt_hdr](struct ip6_hdr *iph, */rÙ†rÚjsj»†rÛhXB/*                                               void *payload, */r܆rÝjsj»†rÞhXO/*                                               struct ip_metadata *meta) { */r߆ràjsj»†ráhX	/*   } */râ†rãjsj»†räjsj»†råhXM/*   default event void Multicast.recv[uint8_t scope](struct ip6_hdr *iph, */ræ†rçjsj»†rèhXG/*                                                    void *payload, */ré†rêjsj»†rëhXT/*                                                    struct ip_metadata *meta) { */rì†ríjsj»†rîhX	/*   } */rï†rðjsj»†rñj©jF†ròjsj»†róe.