netsukuku/d5/d89/pkts_8h_source.html

475 lines
89 KiB
HTML
Raw Normal View History

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.6"/>
<title>The Netsukuku Project: src/pkts.h Source File</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../jquery.js"></script>
<script type="text/javascript" src="../../dynsections.js"></script>
<link href="../../navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../resize.js"></script>
<script type="text/javascript" src="../../navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="../../search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
2014-02-20 00:30:40 +00:00
<td id="projectlogo"><img alt="Logo" src="../../Logo_netsukuku.jpg"/></td>
<td style="padding-left: 0.5em;">
<div id="projectname">The Netsukuku Project
&#160;<span id="projectnumber">0.0.9</span>
</div>
<div id="projectbrief">An Alternative routing method</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
<li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
<li class="current"><a href="../../files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="../../search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="../../search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="../../files.html"><span>File&#160;List</span></a></li>
<li><a href="../../globals.html"><span>Globals</span></a></li>
</ul>
</div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('d5/d89/pkts_8h_source.html','../../');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Macros</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">pkts.h</div> </div>
</div><!--header-->
<div class="contents">
<a href="../../d5/d89/pkts_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/* This file is part of Netsukuku system</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * (c) Copyright 2005 Andrea Lo Pumo aka AlpT &lt;alpt@freaknet.org&gt;</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This source code is free software; you can redistribute it and/or</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * modify it under the terms of the GNU General Public License as published </span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * by the Free Software Foundation; either version 2 of the License,</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * or (at your option) any later version.</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * This source code is distributed in the hope that it will be useful,</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * Please refer to the GNU Public License for more details.</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * You should have received a copy of the GNU Public License along with</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * this source code; if not, write to:</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#ifndef PKTS_H</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#define PKTS_H</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="../../dc/d8d/if_8h.html">if.h</a>&quot;</span></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="../../d4/d43/request_8h.html">request.h</a>&quot;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="../../d4/de1/llist_8c.html">llist.c</a>&quot;</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;</div>
<div class="line"><a name="l00026"></a><span class="lineno"><a class="line" href="../../d5/d89/pkts_8h.html#ad48fa2177876b436aa09377afc975bda"> 26</a></span>&#160;<span class="preprocessor">#define NETSUKUKU_ID &quot;ntk&quot;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"><a class="line" href="../../d5/d89/pkts_8h.html#a7c8509d2b14c4a106700d07ac8fcbf28"> 27</a></span>&#160;<span class="preprocessor">#define MAXMSGSZ 65536</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="comment">/*\</span></div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="comment"> * Pkt&#39;s op definitions</span></div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="comment"> * (The requests and replies are in request.h)</span></div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="comment">\*/</span></div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="comment">/* Pkt.sk_type */</span></div>
<div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="../../d5/d89/pkts_8h.html#ad5325d537ed1d93050c6d04f9f5d12e0"> 37</a></span>&#160;<span class="preprocessor">#define SKT_TCP 1</span></div>
<div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="../../d5/d89/pkts_8h.html#ae9fa0a84f523660737558e8ca4057eda"> 38</a></span>&#160;<span class="preprocessor">#define SKT_UDP 2</span></div>
<div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="../../d5/d89/pkts_8h.html#a35f93a614f3fcf1a7d35d7cdabb5e8cf"> 39</a></span>&#160;<span class="preprocessor">#define SKT_BCAST 3</span></div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="comment">/* </span></div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="comment"> * Pkt.pkt_flags flags </span></div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="../../d5/d89/pkts_8h.html#a25b5eac1caaceeaba5c80c644d6a107a"> 44</a></span>&#160;<span class="preprocessor">#define PKT_BIND_DEV 1 </span><span class="comment">/* Bind the pkt.sk socket to pkt.dev */</span><span class="preprocessor"></span></div>
<div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="../../d5/d89/pkts_8h.html#a0dec610214d2bf7c407f238980c642eb"> 45</a></span>&#160;<span class="preprocessor">#define PKT_RECV_TIMEOUT (1&lt;&lt;1)</span></div>
<div class="line"><a name="l00046"></a><span class="lineno"><a class="line" href="../../d5/d89/pkts_8h.html#a2ad27b31e72a80ea07909cf704e31360"> 46</a></span>&#160;<span class="preprocessor">#define PKT_SEND_TIMEOUT (1&lt;&lt;2)</span></div>
<div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="../../d5/d89/pkts_8h.html#ae8fe92b855ab2cf0e15a6c9f204448ca"> 47</a></span>&#160;<span class="preprocessor">#define PKT_SET_LOWDELAY (1&lt;&lt;3)</span></div>
<div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="../../d5/d89/pkts_8h.html#a0d59625544111e1fe04638d9a33db6ba"> 48</a></span>&#160;<span class="preprocessor">#define PKT_COMPRESSED (1&lt;&lt;4) </span><span class="comment">/* If set the packet will be Z </span></div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="comment"> compressed before being sent */</span><span class="preprocessor"></span></div>
<div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="../../d5/d89/pkts_8h.html#aa1551b70f2350d696e6b607b245dad22"> 50</a></span>&#160;<span class="preprocessor">#define PKT_KEEPALIVE (1&lt;&lt;5) </span><span class="comment">/* Let the pkt.sk socket be alive */</span><span class="preprocessor"></span></div>
<div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="../../d5/d89/pkts_8h.html#a10cf50e3e171e6734d611cd825c1a57b"> 51</a></span>&#160;<span class="preprocessor">#define PKT_NONBLOCK (1&lt;&lt;6) </span><span class="comment">/* Socket must not block */</span><span class="preprocessor"></span></div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="comment">/* </span></div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="comment"> * Pkt.hdr flags </span></div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="../../d5/d89/pkts_8h.html#a2164f6ad1577cf495d8bc8c27cddb430"> 56</a></span>&#160;<span class="preprocessor">#define SEND_ACK 1</span></div>
<div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="../../d5/d89/pkts_8h.html#a668ac2f12e9a43a4fcfeb2871a5b5ce1"> 57</a></span>&#160;<span class="preprocessor">#define BCAST_PKT (1&lt;&lt;1) </span><span class="comment">/* In this pkt there is encapsulated a </span></div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="comment"> * broadcast/flood pkt. Woa */</span><span class="preprocessor"></span></div>
<div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="../../d5/d89/pkts_8h.html#a69c1118db5e011cb450290af4d67225e"> 59</a></span>&#160;<span class="preprocessor">#define HOOK_PKT (1&lt;&lt;2) </span><span class="comment">/* All the pkts sent while hooking have</span></div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="comment"> * this flag set */</span><span class="preprocessor"></span></div>
<div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="../../d5/d89/pkts_8h.html#a9ab80b8faf583c04bd8ff09cff3aab2d"> 61</a></span>&#160;<span class="preprocessor">#define ASYNC_REPLY (1&lt;&lt;3) </span><span class="comment">/* Tells the receiver to reply with a new </span></div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;<span class="comment"> connection. The reply pkt will be</span></div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="comment"> handled by the pkt_queue. */</span><span class="preprocessor"></span></div>
<div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="../../d5/d89/pkts_8h.html#a19cfd4c822f73d88db53840672cc7dba"> 64</a></span>&#160;<span class="preprocessor">#define ASYNC_REPLIED (1&lt;&lt;4)</span></div>
<div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="../../d5/d89/pkts_8h.html#a3bbaaccab455b79f5528c27363b38bd8"> 65</a></span>&#160;<span class="preprocessor">#define LOOPBACK_PKT (1&lt;&lt;5) </span><span class="comment">/* This is a packet destinated to me */</span><span class="preprocessor"></span></div>
<div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="../../d5/d89/pkts_8h.html#a8612f6bdeea6a6067a981970a592cc33"> 66</a></span>&#160;<span class="preprocessor">#define RESTRICTED_PKT (1&lt;&lt;6) </span><span class="comment">/* Packet sent from a node in restricted </span></div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;<span class="comment"> mode */</span><span class="preprocessor"></span></div>
<div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="../../d5/d89/pkts_8h.html#a7a1e32a712fc200cf71e7254cc8fd8f0"> 68</a></span>&#160;<span class="preprocessor">#define COMPRESSED_PKT (1&lt;&lt;7) </span><span class="comment">/* The whole packet is Z compressed */</span><span class="preprocessor"></span></div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="comment"> * Broacast ptk&#39;s flags</span></div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00074"></a><span class="lineno"><a class="line" href="../../d5/d89/pkts_8h.html#ae0fca5da80b53d88cf58ebbfed281fd0"> 74</a></span>&#160;<span class="preprocessor">#define BCAST_TRACER_PKT 1 </span><span class="comment">/*When a bcast is marked with this, it </span></div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="comment"> acts as a tracer_pkt ;)*/</span><span class="preprocessor"></span></div>
<div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="../../d5/d89/pkts_8h.html#aad1c360c5023ab2dbffa16be66d20a7f"> 76</a></span>&#160;<span class="preprocessor">#define BCAST_TRACER_BBLOCK (1&lt;&lt;1) </span><span class="comment">/*When set, the tracer pkt carries also</span></div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;<span class="comment"> bnodes blocks.*/</span><span class="preprocessor"></span></div>
<div class="line"><a name="l00078"></a><span class="lineno"><a class="line" href="../../d5/d89/pkts_8h.html#a37759a336cfdcf15ae66edf1dfef0cf8"> 78</a></span>&#160;<span class="preprocessor">#define BCAST_TRACER_STARTERS (1&lt;&lt;2) </span><span class="comment">/*Tracer pkt bound to the qspn starter </span></div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;<span class="comment"> continual group*/</span><span class="preprocessor"></span></div>
<div class="line"><a name="l00080"></a><span class="lineno"><a class="line" href="../../d5/d89/pkts_8h.html#a893aadc1e8099f0c45264d13f2238466"> 80</a></span>&#160;<span class="preprocessor">#define QSPN_BNODE_CLOSED (1&lt;&lt;3) </span><span class="comment">/*The last bnode, who forwarded this </span></div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="comment"> qspn pkt has all its links closed.*/</span><span class="preprocessor"></span></div>
<div class="line"><a name="l00082"></a><span class="lineno"><a class="line" href="../../d5/d89/pkts_8h.html#a5a53cfd547b2012aee7b2e7c8dc7ede6"> 82</a></span>&#160;<span class="preprocessor">#define QSPN_BNODE_OPENED (1&lt;&lt;4)</span></div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="comment">/* General defines */</span></div>
<div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="../../d5/d89/pkts_8h.html#aaac9cd9a93bd9b6c303610433bb14318"> 85</a></span>&#160;<span class="preprocessor">#define PKT_MAX_MSG_SZ 1048576 </span><span class="comment">/* bytes */</span><span class="preprocessor"></span></div>
<div class="line"><a name="l00086"></a><span class="lineno"><a class="line" href="../../d5/d89/pkts_8h.html#ab588a0f5b6fc02ddf4ad95385e241ace"> 86</a></span>&#160;<span class="preprocessor">#define PKT_COMPRESS_LEVEL Z_DEFAULT_COMPRESSION</span></div>
<div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="../../d5/d89/pkts_8h.html#a7b0b46056407c3a5d7fdb9ed21e6e7fa"> 87</a></span>&#160;<span class="preprocessor">#define PKT_COMPRESS_THRESHOLD 1024 </span><span class="comment">/* If the flag PKT_COMPRESSED is set </span></div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;<span class="comment"> and hdr.sz &gt; PKT_COMPRESS_THRESHOLD,</span></div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;<span class="comment"> then compress the packet */</span><span class="preprocessor"></span></div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;<span class="comment"> * pkt_hdr: the pkt_hdr is always put at the very beginning of any netsukuku</span></div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;<span class="comment"> * packets</span></div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct</span></div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;{</div>
<div class="line"><a name="l00097"></a><span class="lineno"><a class="line" href="../../d3/d5a/struct__PACKED__.html#a5a48c517e4128b28a48ac340c7351bae"> 97</a></span>&#160; <span class="keywordtype">char</span> ntk_id[3];</div>
<div class="line"><a name="l00098"></a><span class="lineno"><a class="line" href="../../d3/d5a/struct__PACKED__.html#a8da3de0e87324508a0a1b78fe47804ad"> 98</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="../../d3/d5a/struct__PACKED__.html#a8da3de0e87324508a0a1b78fe47804ad">id</a>;</div>
<div class="line"><a name="l00099"></a><span class="lineno"><a class="line" href="../../d3/d5a/struct__PACKED__.html#a85904e9d09b5bea18e0a94082e2e67f5"> 99</a></span>&#160; u_char <a class="code" href="../../d3/d5a/struct__PACKED__.html#a85904e9d09b5bea18e0a94082e2e67f5">flags</a>; </div>
<div class="line"><a name="l00100"></a><span class="lineno"><a class="line" href="../../d3/d5a/struct__PACKED__.html#ae00894a2de1d89e65fb5ed6a92009a43"> 100</a></span>&#160; u_char <a class="code" href="../../d3/d5a/struct__PACKED__.html#ae00894a2de1d89e65fb5ed6a92009a43">op</a>;</div>
<div class="line"><a name="l00101"></a><span class="lineno"><a class="line" href="../../d3/d5a/struct__PACKED__.html#af3cd0fdd5756902df339ccc3855686ff"> 101</a></span>&#160; <span class="keywordtype">size_t</span> <a class="code" href="../../d3/d5a/struct__PACKED__.html#af3cd0fdd5756902df339ccc3855686ff">sz</a>; <span class="comment">/* The size of the message */</span></div>
<div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="../../d3/d5a/struct__PACKED__.html#af2f3f5bb1366fbd7a2ece8c3cb0cd1c5"> 102</a></span>&#160; <span class="keywordtype">size_t</span> <a class="code" href="../../d3/d5a/struct__PACKED__.html#af2f3f5bb1366fbd7a2ece8c3cb0cd1c5">uncompress_sz</a>; <span class="comment">/* The size of the decompressed packet. */</span></div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;}<a class="code" href="../../d3/d5a/struct__PACKED__.html">_PACKED_</a> pkt_hdr;</div>
<div class="line"><a name="l00104"></a><span class="lineno"><a class="line" href="../../d5/d89/pkts_8h.html#ad3b23356f48288023e3ba8f333efef82"> 104</a></span>&#160;<a class="code" href="../../dc/d3e/endianness_8h.html#a3e44b8503d7a90af675c81800fe6d275">INT_INFO</a> <a class="code" href="../../d5/d89/pkts_8h.html#ad3b23356f48288023e3ba8f333efef82">pkt_hdr_iinfo</a> = { 3, </div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; { <a class="code" href="../../dc/d3e/endianness_8h.html#acc663d0291dd4a32c1dfbed3167bd58b">INT_TYPE_32BIT</a>, <a class="code" href="../../dc/d3e/endianness_8h.html#acc663d0291dd4a32c1dfbed3167bd58b">INT_TYPE_32BIT</a>, INT_TYPE_32BIT },</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; { <span class="keyword">sizeof</span>(char)*3, <span class="keyword">sizeof</span>(<span class="keywordtype">char</span>)*5+<span class="keyword">sizeof</span>(int), </div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keyword">sizeof</span>(<span class="keywordtype">char</span>)*5+<span class="keyword">sizeof</span>(int)+<span class="keyword">sizeof</span>(<span class="keywordtype">size_t</span>) },</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; { 1, 1, 1 }</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; };</div>
<div class="line"><a name="l00110"></a><span class="lineno"><a class="line" href="../../d5/d89/pkts_8h.html#a7601416d92e47d0f96368ed7f3a46adb"> 110</a></span>&#160;<span class="preprocessor">#define PACKET_SZ(sz) (sizeof(pkt_hdr)+(sz))</span></div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;<span class="comment"> * PACKET</span></div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;<span class="comment"> * this struct is used only to represent internally a packet, which</span></div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;<span class="comment"> * will be sent or received.</span></div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00118"></a><span class="lineno"><a class="line" href="../../d6/dbc/structPACKET.html"> 118</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct</span></div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;{</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="comment">/* General informations of the packet */</span></div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; </div>
<div class="line"><a name="l00122"></a><span class="lineno"><a class="line" href="../../d6/dbc/structPACKET.html#aa917f2a4f9185f043b1bc61b32a614f1"> 122</a></span>&#160; <a class="code" href="../../da/d1d/structinet__prefix.html">inet_prefix</a> <a class="code" href="../../d6/dbc/structPACKET.html#aa917f2a4f9185f043b1bc61b32a614f1">from</a>; <span class="comment">/* The sender ip of this packet */</span></div>
<div class="line"><a name="l00123"></a><span class="lineno"><a class="line" href="../../d6/dbc/structPACKET.html#afaa210c68577fe0d5753c41689e1c1fa"> 123</a></span>&#160; <a class="code" href="../../da/d1d/structinet__prefix.html">inet_prefix</a> <a class="code" href="../../d6/dbc/structPACKET.html#afaa210c68577fe0d5753c41689e1c1fa">to</a>; <span class="comment">/* Where to send this packet */</span></div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;</div>
<div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="../../d6/dbc/structPACKET.html#ac38507058e8d545ea9885148fb152f44"> 125</a></span>&#160; <span class="keyword">interface </span>*<a class="code" href="../../d6/dbc/structPACKET.html#ac38507058e8d545ea9885148fb152f44">dev</a>; <span class="comment">/* Device used to send/receive the </span></div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;<span class="comment"> packet. `sk&#39; will be bound to it</span></div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;<span class="comment"> if `dev&#39; is not null and if the </span></div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;<span class="comment"> PKT_BIND_DEV flag is set in</span></div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;<span class="comment"> `pkt_flags&#39;. `dev&#39; is a pointer</span></div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;<span class="comment"> to a struct contained in the </span></div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;<span class="comment"> me.cur_ifs array. */</span></div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; </div>
<div class="line"><a name="l00133"></a><span class="lineno"><a class="line" href="../../d6/dbc/structPACKET.html#a7e0bcc42622da58fe0430ade67608334"> 133</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="../../d6/dbc/structPACKET.html#a7e0bcc42622da58fe0430ade67608334">family</a>;</div>
<div class="line"><a name="l00134"></a><span class="lineno"><a class="line" href="../../d6/dbc/structPACKET.html#ab31fd943dc2f849b90aaefb1215e9d8d"> 134</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="../../d6/dbc/structPACKET.html#ab31fd943dc2f849b90aaefb1215e9d8d">sk</a>;</div>
<div class="line"><a name="l00135"></a><span class="lineno"><a class="line" href="../../d6/dbc/structPACKET.html#ae9ec9fb519848d3c0a195b90e7d7f152"> 135</a></span>&#160; <span class="keywordtype">char</span> <a class="code" href="../../d6/dbc/structPACKET.html#ae9ec9fb519848d3c0a195b90e7d7f152">sk_type</a>;</div>
<div class="line"><a name="l00136"></a><span class="lineno"><a class="line" href="../../d6/dbc/structPACKET.html#a149ce9dd04e68b8492a6f4b5f31be887"> 136</a></span>&#160; u_short <a class="code" href="../../d6/dbc/structPACKET.html#a149ce9dd04e68b8492a6f4b5f31be887">port</a>;</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160;</div>
<div class="line"><a name="l00138"></a><span class="lineno"><a class="line" href="../../d6/dbc/structPACKET.html#ad90e6ba075d693017ae0ef856e652b34"> 138</a></span>&#160; u_char <a class="code" href="../../d6/dbc/structPACKET.html#ad90e6ba075d693017ae0ef856e652b34">pkt_flags</a>; <span class="comment">/*Flags for this PACKET*/</span></div>
<div class="line"><a name="l00139"></a><span class="lineno"><a class="line" href="../../d6/dbc/structPACKET.html#a67063adb87cb1d9c3a542e26b96cf95d"> 139</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="../../d6/dbc/structPACKET.html#a67063adb87cb1d9c3a542e26b96cf95d">flags</a>; <span class="comment">/*Flags used by send/recv*/</span></div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;</div>
<div class="line"><a name="l00141"></a><span class="lineno"><a class="line" href="../../d6/dbc/structPACKET.html#a2b136d1e398a410df1cfc9f105afd6f6"> 141</a></span>&#160; u_int <a class="code" href="../../d6/dbc/structPACKET.html#a2b136d1e398a410df1cfc9f105afd6f6">timeout</a>; <span class="comment">/*After `timeout&#39; seconds give up the</span></div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;<span class="comment"> send/recv of the packet. </span></div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;<span class="comment"> The PKT_[RECV/SEND]_TIMEOUT flags are</span></div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;<span class="comment"> used to determine its scope (send, </span></div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;<span class="comment"> recv or both).*/</span></div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="comment">/* Body of the packet */</span></div>
<div class="line"><a name="l00148"></a><span class="lineno"><a class="line" href="../../d6/dbc/structPACKET.html#a4c6c9b02f521be9c56809d9db993c690"> 148</a></span>&#160; pkt_hdr <a class="code" href="../../d6/dbc/structPACKET.html#a4c6c9b02f521be9c56809d9db993c690">hdr</a>;</div>
<div class="line"><a name="l00149"></a><span class="lineno"><a class="line" href="../../d6/dbc/structPACKET.html#ab02eb819e29b5b4c9d5759f6547ba6e7"> 149</a></span>&#160; <span class="keywordtype">char</span> *<a class="code" href="../../d6/dbc/structPACKET.html#ab02eb819e29b5b4c9d5759f6547ba6e7">msg</a>;</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;} <a class="code" href="../../d6/dbc/structPACKET.html">PACKET</a>;</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; </div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;<span class="comment">/*Broadcast packet*/</span></div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct</span></div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;{</div>
<div class="line"><a name="l00155"></a><span class="lineno"><a class="line" href="../../d3/d5a/struct__PACKED__.html#a45474e36c0c7716aa39ef1e97bf76e79"> 155</a></span>&#160; u_char <a class="code" href="../../d3/d5a/struct__PACKED__.html#a45474e36c0c7716aa39ef1e97bf76e79">g_node</a>; <span class="comment">/*The gnode the brdcast_pkt is restricted to*/</span></div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; u_char level; <span class="comment">/*The level of the g_node*/</span></div>
<div class="line"><a name="l00157"></a><span class="lineno"><a class="line" href="../../d3/d5a/struct__PACKED__.html#a8717612282eae63131455f5a45eb9abe"> 157</a></span>&#160; u_char <a class="code" href="../../d3/d5a/struct__PACKED__.html#a8717612282eae63131455f5a45eb9abe">gttl</a>; <span class="comment">/*Gnode ttl: How many gnodes the packet</span></div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;<span class="comment"> can traverse*/</span></div>
<div class="line"><a name="l00159"></a><span class="lineno"><a class="line" href="../../d3/d5a/struct__PACKED__.html#a60abdda7ab2a59086c3fdba4151e913c"> 159</a></span>&#160; u_char <a class="code" href="../../d3/d5a/struct__PACKED__.html#a60abdda7ab2a59086c3fdba4151e913c">sub_id</a>; <span class="comment">/*The sub_id is the node who sent the pkt,</span></div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;<span class="comment"> but is only used by the qspn_open*/</span></div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="keywordtype">size_t</span> sz; <span class="comment">/*Sizeof(the pkt)*/</span></div>
<div class="line"><a name="l00162"></a><span class="lineno"><a class="line" href="../../d3/d5a/struct__PACKED__.html#a7a0f473b2cd05bb9ad8c2eac2249f261"> 162</a></span>&#160; <span class="keywordtype">char</span> <a class="code" href="../../d3/d5a/struct__PACKED__.html#a7a0f473b2cd05bb9ad8c2eac2249f261">flags</a>; <span class="comment">/*Various flags*/</span></div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;}<a class="code" href="../../d3/d5a/struct__PACKED__.html">_PACKED_</a> brdcast_hdr;</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;</div>
<div class="line"><a name="l00165"></a><span class="lineno"><a class="line" href="../../d5/d89/pkts_8h.html#a9fd2ae7f2ad83c3d156b5ee16bb37793"> 165</a></span>&#160;<a class="code" href="../../dc/d3e/endianness_8h.html#a3e44b8503d7a90af675c81800fe6d275">INT_INFO</a> <a class="code" href="../../d5/d89/pkts_8h.html#a9fd2ae7f2ad83c3d156b5ee16bb37793">brdcast_hdr_iinfo</a> = { 1, { <a class="code" href="../../dc/d3e/endianness_8h.html#acc663d0291dd4a32c1dfbed3167bd58b">INT_TYPE_32BIT</a> }, { <span class="keyword">sizeof</span>(char)*4 }, { 1 } };</div>
<div class="line"><a name="l00166"></a><span class="lineno"><a class="line" href="../../d5/d89/pkts_8h.html#a23002ef60d76c0a688a559d1db8f30f9"> 166</a></span>&#160;<span class="preprocessor">#define BRDCAST_SZ(pkt_sz) (sizeof(brdcast_hdr)+(pkt_sz))</span></div>
<div class="line"><a name="l00167"></a><span class="lineno"><a class="line" href="../../d5/d89/pkts_8h.html#adaae90f61ccc825e683a383003a0ccd0"> 167</a></span>&#160;<span class="preprocessor">#define BRDCAST_HDR_PTR(msg) ((brdcast_hdr *)(msg))</span></div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;</div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;<span class="comment">/* </span></div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;<span class="comment"> * In this stable, each op (request or reply) is associated with a</span></div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160;<span class="comment"> * `pkt_exec_func&#39;, which pkt_exec() will use to handle the incoming packets of</span></div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;<span class="comment"> * the same op.</span></div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;<span class="comment"> * Each op is also associated with its specific socket type (udp, tcp, bcast)</span></div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;<span class="comment"> * with `sk_type&#39;, and the `port&#39; where the pkt will be sent or received.</span></div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;<span class="comment"> * Each element in the table is equivalent to a request or reply, ie the</span></div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160;<span class="comment"> * function to handle the x request is at pkt_op_table[x].exec_func;</span></div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00179"></a><span class="lineno"><a class="line" href="../../dd/db4/structpkt__op__table.html"> 179</a></span>&#160;<span class="keyword">struct </span><a class="code" href="../../dd/db4/structpkt__op__table.html">pkt_op_table</a> {</div>
<div class="line"><a name="l00180"></a><span class="lineno"><a class="line" href="../../dd/db4/structpkt__op__table.html#aced1fc4866cd3139cf0e2661582eaf1c"> 180</a></span>&#160; <span class="keywordtype">char</span> <a class="code" href="../../dd/db4/structpkt__op__table.html#aced1fc4866cd3139cf0e2661582eaf1c">sk_type</a>;</div>
<div class="line"><a name="l00181"></a><span class="lineno"><a class="line" href="../../dd/db4/structpkt__op__table.html#afd5ce78279b65d9bb6de2b630f487f6f"> 181</a></span>&#160; u_short <a class="code" href="../../dd/db4/structpkt__op__table.html#afd5ce78279b65d9bb6de2b630f487f6f">port</a>;</div>
<div class="line"><a name="l00182"></a><span class="lineno"><a class="line" href="../../dd/db4/structpkt__op__table.html#a7f2b020d16bf065a39f750dd07f35165"> 182</a></span>&#160; <span class="keywordtype">void</span> *<a class="code" href="../../dd/db4/structpkt__op__table.html#a7f2b020d16bf065a39f750dd07f35165">exec_func</a>;</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;} <a class="code" href="../../d5/d89/pkts_8h.html#a6b051f2b2e5723577d39175dd2f02383">pkt_op_tbl</a>[<a class="code" href="../../d4/d43/request_8h.html#abfe63755e353f7ff7520db9ad7a613f3">TOTAL_OPS</a>];</div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;<span class="comment">/* pkt_queue&#39;s flags */</span></div>
<div class="line"><a name="l00186"></a><span class="lineno"><a class="line" href="../../d5/d89/pkts_8h.html#ac8ee444ec3dd8037b7e2430c6087155e"> 186</a></span>&#160;<span class="preprocessor">#define PKT_Q_MTX_LOCKED 1 </span><span class="comment">/* We are waiting the reply */</span><span class="preprocessor"></span></div>
<div class="line"><a name="l00187"></a><span class="lineno"><a class="line" href="../../d5/d89/pkts_8h.html#aa9c2e0b9537a22fb871711371a5f3243"> 187</a></span>&#160;<span class="preprocessor">#define PKT_Q_PKT_RECEIVED (1&lt;&lt;1) </span><span class="comment">/* The reply was received */</span><span class="preprocessor"></span></div>
<div class="line"><a name="l00188"></a><span class="lineno"><a class="line" href="../../d5/d89/pkts_8h.html#a73958181a89e55331a8d131787e57b6c"> 188</a></span>&#160;<span class="preprocessor">#define PKT_Q_TIMEOUT (1&lt;&lt;2) </span><span class="comment">/* None replied ._, */</span><span class="preprocessor"></span></div>
<div class="line"><a name="l00189"></a><span class="lineno"><a class="line" href="../../d5/d89/pkts_8h.html#a0f7dd3b216ccea2595b463b933579f1f"> 189</a></span>&#160;<span class="preprocessor">#define PKT_Q_CHECK_FROM (1&lt;&lt;3) </span><span class="comment">/* Check the from ip while</span></div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160;<span class="comment"> receiving the async pkt */</span><span class="preprocessor"></span></div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160;<span class="comment"> * The pkt_queue is used when a reply will be received with a completely new </span></div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;<span class="comment"> * connection. This is how it works:</span></div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160;<span class="comment"> * The pkt.hdr.flags is ORed with ASYNC_REPLY, a new struct is added in the</span></div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160;<span class="comment"> * pkt_q linked list, pkt_q-&gt;pkt.hdr.id is set to the id of the outgoing pkt</span></div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;<span class="comment"> * and pkt_q-&gt;pkt.hdr.op is set to the waited reply op.</span></div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;<span class="comment"> * The function x() it&#39;s started as a new thread and the request is sent; to </span></div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;<span class="comment"> * receive the reply, x() locks twice `mtx&#39;. The thread is now freezed.</span></div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;<span class="comment"> * The reply is received by pkt_exec() which passes the pkt to the function</span></div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160;<span class="comment"> * y(). y() searches in the pkt_q a struct which has the same pkt.hdr.id of</span></div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;<span class="comment"> * the received pkt. The reply pkt is copied in the found struct and `mtx&#39; is</span></div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;<span class="comment"> * unlocked. x() can now continue to read the reply and unlocks `mtx&#39;.</span></div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;<span class="comment"> * Note that the reply pkt must have the ASYNC_REPLIED flag set in pkt.hdr.flags.</span></div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00206"></a><span class="lineno"><a class="line" href="../../dd/d5c/structpkt__queue.html"> 206</a></span>&#160;<span class="keyword">struct </span><a class="code" href="../../dd/d5c/structpkt__queue.html">pkt_queue</a>{</div>
<div class="line"><a name="l00207"></a><span class="lineno"><a class="line" href="../../dd/d5c/structpkt__queue.html#a3351cf0fe6d855568127aa6a7cf7ba4b"> 207</a></span>&#160; <a class="code" href="../../d4/de1/llist_8c.html#ac92348e99cfae025c3893c07fee7b263">LLIST_HDR</a> (<span class="keyword">struct</span> <a class="code" href="../../dd/d5c/structpkt__queue.html">pkt_queue</a>);</div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;</div>
<div class="line"><a name="l00209"></a><span class="lineno"><a class="line" href="../../dd/d5c/structpkt__queue.html#aa45d788fc0fe8d8e71e0df90536d8a9c"> 209</a></span>&#160; <a class="code" href="../../d6/dbc/structPACKET.html">PACKET</a> <a class="code" href="../../dd/d5c/structpkt__queue.html#aa45d788fc0fe8d8e71e0df90536d8a9c">pkt</a>;</div>
<div class="line"><a name="l00210"></a><span class="lineno"><a class="line" href="../../dd/d5c/structpkt__queue.html#a1de48022c678659654a5f7e5b00feaa9"> 210</a></span>&#160; pthread_mutex_t <a class="code" href="../../dd/d5c/structpkt__queue.html#a1de48022c678659654a5f7e5b00feaa9">mtx</a>;</div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160;</div>
<div class="line"><a name="l00212"></a><span class="lineno"><a class="line" href="../../dd/d5c/structpkt__queue.html#ad796ff1ec0ecfeed014c07eb9c5154d5"> 212</a></span>&#160; <span class="keywordtype">char</span> <a class="code" href="../../dd/d5c/structpkt__queue.html#ad796ff1ec0ecfeed014c07eb9c5154d5">flags</a>;</div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160;};</div>
<div class="line"><a name="l00214"></a><span class="lineno"><a class="line" href="../../d5/d89/pkts_8h.html#a55935510f3cb11ef2c86102cdcf67bd0"> 214</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="../../dd/d5c/structpkt__queue.html">pkt_queue</a> <a class="code" href="../../dd/d5c/structpkt__queue.html">pkt_queue</a>;</div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160;</div>
<div class="line"><a name="l00216"></a><span class="lineno"><a class="line" href="../../d5/d89/pkts_8h.html#a3d1cd9afbe8889411d3066b39a95a8ff"> 216</a></span>&#160;<a class="code" href="../../dd/d5c/structpkt__queue.html">pkt_queue</a> *<a class="code" href="../../d5/d89/pkts_8h.html#a3d1cd9afbe8889411d3066b39a95a8ff">pkt_q</a>;</div>
<div class="line"><a name="l00217"></a><span class="lineno"><a class="line" href="../../d5/d89/pkts_8h.html#adbdf7d2b9a24e5ace1bf3169797f6fcf"> 217</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="../../d5/d89/pkts_8h.html#adbdf7d2b9a24e5ace1bf3169797f6fcf">pkt_q_counter</a>;</div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;</div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160;<span class="comment">/*Functions&#39; declarations*/</span></div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d5/d89/pkts_8h.html#a9101abce2bfc19c4036f2ae7b618beec">pkts_init</a>(<a class="code" href="../../d9/dbe/structinterface.html">interface</a> *ifs, <span class="keywordtype">int</span> ifs_n, <span class="keywordtype">int</span> queue_init);</div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; </div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d5/d89/pkts_8h.html#add9d3fdd60f0e0e8a0b0c15e2470b3d7">pkt_addfrom</a>(<a class="code" href="../../d6/dbc/structPACKET.html">PACKET</a> *<a class="code" href="../../dd/d5c/structpkt__queue.html#aa45d788fc0fe8d8e71e0df90536d8a9c">pkt</a>, <a class="code" href="../../da/d1d/structinet__prefix.html">inet_prefix</a> *from);</div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d5/d89/pkts_8h.html#a9994ee280b9db73a6eaca0462b361d58">pkt_addto</a>(<a class="code" href="../../d6/dbc/structPACKET.html">PACKET</a> *<a class="code" href="../../dd/d5c/structpkt__queue.html#aa45d788fc0fe8d8e71e0df90536d8a9c">pkt</a>, <a class="code" href="../../da/d1d/structinet__prefix.html">inet_prefix</a> *to);</div>
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d5/d89/pkts_8h.html#ae5bd461fc16a3e66ff48dbb83f6a91a0">pkt_add_dev</a>(<a class="code" href="../../d6/dbc/structPACKET.html">PACKET</a> *<a class="code" href="../../dd/d5c/structpkt__queue.html#aa45d788fc0fe8d8e71e0df90536d8a9c">pkt</a>, <a class="code" href="../../d9/dbe/structinterface.html">interface</a> *dev, <span class="keywordtype">int</span> bind_the_socket);</div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d5/d89/pkts_8h.html#a8fb27f7c76bb4c5e4f22315d4a51a0c4">pkt_addsk</a>(<a class="code" href="../../d6/dbc/structPACKET.html">PACKET</a> *<a class="code" href="../../dd/d5c/structpkt__queue.html#aa45d788fc0fe8d8e71e0df90536d8a9c">pkt</a>, <span class="keywordtype">int</span> <a class="code" href="../../d7/de2/if_8c.html#a4417150d9f858949bd9ea8794995ebcc">family</a>, <span class="keywordtype">int</span> sk, <span class="keywordtype">int</span> sk_type);</div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d5/d89/pkts_8h.html#a10af98abd797f411f0c06bc4bff939ee">pkt_addport</a>(<a class="code" href="../../d6/dbc/structPACKET.html">PACKET</a> *<a class="code" href="../../dd/d5c/structpkt__queue.html#aa45d788fc0fe8d8e71e0df90536d8a9c">pkt</a>, u_short port);</div>
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d5/d89/pkts_8h.html#a41340ddd69b01d92d390a512f2363a56">pkt_addflags</a>(<a class="code" href="../../d6/dbc/structPACKET.html">PACKET</a> *<a class="code" href="../../dd/d5c/structpkt__queue.html#aa45d788fc0fe8d8e71e0df90536d8a9c">pkt</a>, <span class="keywordtype">int</span> <a class="code" href="../../d7/de2/if_8c.html#ac8bf36fe0577cba66bccda3a6f7e80a4">flags</a>);</div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d5/d89/pkts_8h.html#aa27a33c6310aee1bd27afa42578bc7f4">pkt_addtimeout</a>(<a class="code" href="../../d6/dbc/structPACKET.html">PACKET</a> *<a class="code" href="../../dd/d5c/structpkt__queue.html#aa45d788fc0fe8d8e71e0df90536d8a9c">pkt</a>, u_int timeout, <span class="keywordtype">int</span> recv, <span class="keywordtype">int</span> send);</div>
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d5/d89/pkts_8h.html#a7ef10aa6a3c9ec3730420c5f692fb195">pkt_addcompress</a>(<a class="code" href="../../d6/dbc/structPACKET.html">PACKET</a> *<a class="code" href="../../dd/d5c/structpkt__queue.html#aa45d788fc0fe8d8e71e0df90536d8a9c">pkt</a>);</div>
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d5/d89/pkts_8h.html#a2d9d7b7b56f6e28d0b4836353c593a7a">pkt_addlowdelay</a>(<a class="code" href="../../d6/dbc/structPACKET.html">PACKET</a> *<a class="code" href="../../dd/d5c/structpkt__queue.html#aa45d788fc0fe8d8e71e0df90536d8a9c">pkt</a>);</div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d5/d89/pkts_8h.html#af14e2a3a65d01caa39230da9114c4c24">pkt_addnonblock</a>(<a class="code" href="../../d6/dbc/structPACKET.html">PACKET</a> *<a class="code" href="../../dd/d5c/structpkt__queue.html#aa45d788fc0fe8d8e71e0df90536d8a9c">pkt</a>);</div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d5/d89/pkts_8h.html#ad3a3fbf0cd903aa35f60e274b9d5d65e">pkt_addhdr</a>(<a class="code" href="../../d6/dbc/structPACKET.html">PACKET</a> *<a class="code" href="../../dd/d5c/structpkt__queue.html#aa45d788fc0fe8d8e71e0df90536d8a9c">pkt</a>, pkt_hdr *hdr);</div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d5/d89/pkts_8h.html#a68b302fcf3c663d33c7bcbc24b65de1b">pkt_addmsg</a>(<a class="code" href="../../d6/dbc/structPACKET.html">PACKET</a> *<a class="code" href="../../dd/d5c/structpkt__queue.html#aa45d788fc0fe8d8e71e0df90536d8a9c">pkt</a>, <span class="keywordtype">char</span> *msg);</div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d5/d89/pkts_8h.html#ac4d4cb4e990a267fcc7e8008461ba760">pkt_copy</a>(<a class="code" href="../../d6/dbc/structPACKET.html">PACKET</a> *dst, <a class="code" href="../../d6/dbc/structPACKET.html">PACKET</a> *src);</div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d5/d89/pkts_8h.html#a9323e08c6a2d6764207f80cd8dc992aa">pkt_clear</a>(<a class="code" href="../../d6/dbc/structPACKET.html">PACKET</a> *<a class="code" href="../../dd/d5c/structpkt__queue.html#aa45d788fc0fe8d8e71e0df90536d8a9c">pkt</a>);</div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160;</div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d5/d89/pkts_8h.html#a3169b3f057f310203a70d49f038f81b7">pkt_free</a>(<a class="code" href="../../d6/dbc/structPACKET.html">PACKET</a> *<a class="code" href="../../dd/d5c/structpkt__queue.html#aa45d788fc0fe8d8e71e0df90536d8a9c">pkt</a>, <span class="keywordtype">int</span> close_socket);</div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160;<span class="keywordtype">char</span> *<a class="code" href="../../d5/d89/pkts_8h.html#ae6409550716070c3ff80141d94dab212">pkt_pack</a>(<a class="code" href="../../d6/dbc/structPACKET.html">PACKET</a> *<a class="code" href="../../dd/d5c/structpkt__queue.html#aa45d788fc0fe8d8e71e0df90536d8a9c">pkt</a>);</div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160;</div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160;<span class="keywordtype">int</span> <a class="code" href="../../d5/d89/pkts_8h.html#a56916d86b390965421fda804d7ee0a3d">pkt_verify_hdr</a>(<a class="code" href="../../d6/dbc/structPACKET.html">PACKET</a> <a class="code" href="../../dd/d5c/structpkt__queue.html#aa45d788fc0fe8d8e71e0df90536d8a9c">pkt</a>);</div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;ssize_t <a class="code" href="../../d5/d89/pkts_8h.html#aa27d4dfa0f7d6c8ee64399780800ae1f">pkt_send</a>(<a class="code" href="../../d6/dbc/structPACKET.html">PACKET</a> *<a class="code" href="../../dd/d5c/structpkt__queue.html#aa45d788fc0fe8d8e71e0df90536d8a9c">pkt</a>);</div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160;ssize_t <a class="code" href="../../d5/d89/pkts_8h.html#ac8bb8c9b1659c15702e273b4a795f3d7">pkt_recv</a>(<a class="code" href="../../d6/dbc/structPACKET.html">PACKET</a> *<a class="code" href="../../dd/d5c/structpkt__queue.html#aa45d788fc0fe8d8e71e0df90536d8a9c">pkt</a>);</div>
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160;<span class="keywordtype">int</span> <a class="code" href="../../d5/d89/pkts_8h.html#ac024e276423e4ad5476ae1730d71cf76">pkt_tcp_connect</a>(<a class="code" href="../../da/d1d/structinet__prefix.html">inet_prefix</a> *host, <span class="keywordtype">short</span> port, <a class="code" href="../../d9/dbe/structinterface.html">interface</a> *dev);</div>
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160;</div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d5/d89/pkts_8h.html#a3245bdb71a5a4e0d04cdaa214adaac51">pkt_fill_hdr</a>(pkt_hdr *hdr, u_char <a class="code" href="../../d7/de2/if_8c.html#ac8bf36fe0577cba66bccda3a6f7e80a4">flags</a>, <span class="keywordtype">int</span> <span class="keywordtype">id</span>, u_char op, <span class="keywordtype">size_t</span> sz);</div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160;</div>
<div class="line"><a name="l00247"></a><span class="lineno"><a class="line" href="../../d5/d89/pkts_8h.html#a587354926ec47a76614798f00616a36e"> 247</a></span>&#160;<span class="preprocessor">#define SEND_RQ_ERR -1</span></div>
<div class="line"><a name="l00248"></a><span class="lineno"><a class="line" href="../../d5/d89/pkts_8h.html#a9a7306d67322ac40f87a122b24d75923"> 248</a></span>&#160;<span class="preprocessor">#define SEND_RQ_ERR_RQ -2</span></div>
<div class="line"><a name="l00249"></a><span class="lineno"><a class="line" href="../../d5/d89/pkts_8h.html#ac6ec3c7bf95f08019bb2555293f4baa7"> 249</a></span>&#160;<span class="preprocessor">#define SEND_RQ_ERR_RE -3</span></div>
<div class="line"><a name="l00250"></a><span class="lineno"><a class="line" href="../../d5/d89/pkts_8h.html#aba5d9e39ec0422b2ce234337e18a5f6e"> 250</a></span>&#160;<span class="preprocessor">#define SEND_RQ_ERR_PORT -4</span></div>
<div class="line"><a name="l00251"></a><span class="lineno"><a class="line" href="../../d5/d89/pkts_8h.html#a89fc52605fa52b9528c68667bb2748b4"> 251</a></span>&#160;<span class="preprocessor">#define SEND_RQ_ERR_TO -5</span></div>
<div class="line"><a name="l00252"></a><span class="lineno"><a class="line" href="../../d5/d89/pkts_8h.html#a611c5725295a0f49ef6e1d8a78ec7581"> 252</a></span>&#160;<span class="preprocessor">#define SEND_RQ_ERR_CONNECT -6</span></div>
<div class="line"><a name="l00253"></a><span class="lineno"><a class="line" href="../../d5/d89/pkts_8h.html#a44f70462b839cbe88b75052fce4b68b7"> 253</a></span>&#160;<span class="preprocessor">#define SEND_RQ_ERR_SEND -7</span></div>
<div class="line"><a name="l00254"></a><span class="lineno"><a class="line" href="../../d5/d89/pkts_8h.html#a3758daa0a01bc6eb484ece9db0a413d0"> 254</a></span>&#160;<span class="preprocessor">#define SEND_RQ_ERR_RECV -8</span></div>
<div class="line"><a name="l00255"></a><span class="lineno"><a class="line" href="../../d5/d89/pkts_8h.html#a806a02ac13c63f497bfa5cf82393a654"> 255</a></span>&#160;<span class="preprocessor">#define SEND_RQ_ERR_RECVOP -9</span></div>
<div class="line"><a name="l00256"></a><span class="lineno"><a class="line" href="../../d5/d89/pkts_8h.html#a1491327b4e69d41bfdeefe68871d5209"> 256</a></span>&#160;<span class="preprocessor">#define SEND_RQ_ERR_RECVID -10</span></div>
<div class="line"><a name="l00257"></a><span class="lineno"><a class="line" href="../../d5/d89/pkts_8h.html#a2a9145136bf4066072c52032d7717060"> 257</a></span>&#160;<span class="preprocessor">#define SEND_RQ_ERR_REPLY -11</span></div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160;<span class="keywordtype">int</span> <a class="code" href="../../d5/d89/pkts_8h.html#add26b86f4b7d350021c4a96e6db6ce6c">send_rq</a>(<a class="code" href="../../d6/dbc/structPACKET.html">PACKET</a> *<a class="code" href="../../dd/d5c/structpkt__queue.html#aa45d788fc0fe8d8e71e0df90536d8a9c">pkt</a>, <span class="keywordtype">int</span> pkt_flags, u_char rq, <span class="keywordtype">int</span> rq_id, u_char re, </div>
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keywordtype">int</span> check_ack, <a class="code" href="../../d6/dbc/structPACKET.html">PACKET</a> *rpkt);</div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160;</div>
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160;<span class="keywordtype">int</span> <a class="code" href="../../d5/d89/pkts_8h.html#a9705190f4cb9031da8070644993515d5">forward_pkt</a>(<a class="code" href="../../d6/dbc/structPACKET.html">PACKET</a> rpkt, <a class="code" href="../../da/d1d/structinet__prefix.html">inet_prefix</a> to);</div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160;<span class="keywordtype">int</span> <a class="code" href="../../d5/d89/pkts_8h.html#ad386f9f8ac111df2a8d5a5e9912013ca">pkt_err</a>(<a class="code" href="../../d6/dbc/structPACKET.html">PACKET</a> <a class="code" href="../../dd/d5c/structpkt__queue.html#aa45d788fc0fe8d8e71e0df90536d8a9c">pkt</a>, u_char err, <span class="keywordtype">int</span> free_pkt);</div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160;</div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d5/d89/pkts_8h.html#abec2e55dc4f3d4e5c639f048bf35316c">add_pkt_op</a>(u_char op, <span class="keywordtype">char</span> sk_type, u_short port, <span class="keywordtype">int</span> (*exec_f)(<a class="code" href="../../d6/dbc/structPACKET.html">PACKET</a> <a class="code" href="../../dd/d5c/structpkt__queue.html#aa45d788fc0fe8d8e71e0df90536d8a9c">pkt</a>));</div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160;<span class="keywordtype">int</span> <a class="code" href="../../d5/d89/pkts_8h.html#ad72bbdba1c2025145f30bba79981c11d">pkt_exec</a>(<a class="code" href="../../d6/dbc/structPACKET.html">PACKET</a> <a class="code" href="../../dd/d5c/structpkt__queue.html#aa45d788fc0fe8d8e71e0df90536d8a9c">pkt</a>, <span class="keywordtype">int</span> acpt_idx);</div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;</div>
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d5/d89/pkts_8h.html#a01001fd998fb3abf74fea80de24882c3">pkt_queue_init</a>(<span class="keywordtype">void</span>);</div>
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d5/d89/pkts_8h.html#a61d1b4bc2230ca26679230b75fa7c1c9">pkt_queue_close</a>(<span class="keywordtype">void</span>);</div>
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;<span class="keywordtype">int</span> <a class="code" href="../../d5/d89/pkts_8h.html#a9bcb8ed5a94ff428d1f9f5f8b0e83d63">pkt_q_wait_recv</a>(<span class="keywordtype">int</span> <span class="keywordtype">id</span>, <a class="code" href="../../da/d1d/structinet__prefix.html">inet_prefix</a> *from, <a class="code" href="../../d6/dbc/structPACKET.html">PACKET</a> *rpkt, <a class="code" href="../../dd/d5c/structpkt__queue.html">pkt_queue</a> **ret_pq);</div>
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;<span class="keywordtype">int</span> <a class="code" href="../../d5/d89/pkts_8h.html#a30bc04fb2e922d6ca7d89176b36c441d">pkt_q_add_pkt</a>(<a class="code" href="../../d6/dbc/structPACKET.html">PACKET</a> <a class="code" href="../../dd/d5c/structpkt__queue.html#aa45d788fc0fe8d8e71e0df90536d8a9c">pkt</a>);</div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d5/d89/pkts_8h.html#a8ccb46810f5a6b74d733c837dd5f4fbe">pkt_q_del</a>(<a class="code" href="../../dd/d5c/structpkt__queue.html">pkt_queue</a> *pq, <span class="keywordtype">int</span> close_socket);</div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;</div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/*PKTS_H*/</span><span class="preprocessor"></span></div>
<div class="ttc" id="structpkt__queue_html_a1de48022c678659654a5f7e5b00feaa9"><div class="ttname"><a href="../../dd/d5c/structpkt__queue.html#a1de48022c678659654a5f7e5b00feaa9">pkt_queue::mtx</a></div><div class="ttdeci">pthread_mutex_t mtx</div><div class="ttdef"><b>Definition:</b> pkts.h:210</div></div>
<div class="ttc" id="pkts_8h_html_aa27a33c6310aee1bd27afa42578bc7f4"><div class="ttname"><a href="../../d5/d89/pkts_8h.html#aa27a33c6310aee1bd27afa42578bc7f4">pkt_addtimeout</a></div><div class="ttdeci">void pkt_addtimeout(PACKET *pkt, u_int timeout, int recv, int send)</div><div class="ttdef"><b>Definition:</b> pkts.c:94</div></div>
<div class="ttc" id="struct__PACKED___html_a8717612282eae63131455f5a45eb9abe"><div class="ttname"><a href="../../d3/d5a/struct__PACKED__.html#a8717612282eae63131455f5a45eb9abe">_PACKED_::gttl</a></div><div class="ttdeci">u_char gttl</div><div class="ttdef"><b>Definition:</b> pkts.h:157</div></div>
<div class="ttc" id="struct__PACKED___html_ae00894a2de1d89e65fb5ed6a92009a43"><div class="ttname"><a href="../../d3/d5a/struct__PACKED__.html#ae00894a2de1d89e65fb5ed6a92009a43">_PACKED_::op</a></div><div class="ttdeci">u_char op</div><div class="ttdef"><b>Definition:</b> pkts.h:100</div></div>
<div class="ttc" id="structPACKET_html_aa917f2a4f9185f043b1bc61b32a614f1"><div class="ttname"><a href="../../d6/dbc/structPACKET.html#aa917f2a4f9185f043b1bc61b32a614f1">PACKET::from</a></div><div class="ttdeci">inet_prefix from</div><div class="ttdef"><b>Definition:</b> pkts.h:122</div></div>
<div class="ttc" id="pkts_8h_html_a9994ee280b9db73a6eaca0462b361d58"><div class="ttname"><a href="../../d5/d89/pkts_8h.html#a9994ee280b9db73a6eaca0462b361d58">pkt_addto</a></div><div class="ttdeci">void pkt_addto(PACKET *pkt, inet_prefix *to)</div><div class="ttdef"><b>Definition:</b> pkts.c:67</div></div>
<div class="ttc" id="struct__PACKED___html_a8da3de0e87324508a0a1b78fe47804ad"><div class="ttname"><a href="../../d3/d5a/struct__PACKED__.html#a8da3de0e87324508a0a1b78fe47804ad">_PACKED_::id</a></div><div class="ttdeci">int id</div><div class="ttdef"><b>Definition:</b> pkts.h:98</div></div>
<div class="ttc" id="structpkt__op__table_html_aced1fc4866cd3139cf0e2661582eaf1c"><div class="ttname"><a href="../../dd/db4/structpkt__op__table.html#aced1fc4866cd3139cf0e2661582eaf1c">pkt_op_table::sk_type</a></div><div class="ttdeci">char sk_type</div><div class="ttdef"><b>Definition:</b> pkts.h:180</div></div>
<div class="ttc" id="structpkt__queue_html_aa45d788fc0fe8d8e71e0df90536d8a9c"><div class="ttname"><a href="../../dd/d5c/structpkt__queue.html#aa45d788fc0fe8d8e71e0df90536d8a9c">pkt_queue::pkt</a></div><div class="ttdeci">PACKET pkt</div><div class="ttdef"><b>Definition:</b> pkts.h:209</div></div>
<div class="ttc" id="structPACKET_html_a2b136d1e398a410df1cfc9f105afd6f6"><div class="ttname"><a href="../../d6/dbc/structPACKET.html#a2b136d1e398a410df1cfc9f105afd6f6">PACKET::timeout</a></div><div class="ttdeci">u_int timeout</div><div class="ttdef"><b>Definition:</b> pkts.h:141</div></div>
<div class="ttc" id="pkts_8h_html_a8fb27f7c76bb4c5e4f22315d4a51a0c4"><div class="ttname"><a href="../../d5/d89/pkts_8h.html#a8fb27f7c76bb4c5e4f22315d4a51a0c4">pkt_addsk</a></div><div class="ttdeci">void pkt_addsk(PACKET *pkt, int family, int sk, int sk_type)</div><div class="ttdef"><b>Definition:</b> pkts.c:82</div></div>
<div class="ttc" id="structPACKET_html_ae9ec9fb519848d3c0a195b90e7d7f152"><div class="ttname"><a href="../../d6/dbc/structPACKET.html#ae9ec9fb519848d3c0a195b90e7d7f152">PACKET::sk_type</a></div><div class="ttdeci">char sk_type</div><div class="ttdef"><b>Definition:</b> pkts.h:135</div></div>
<div class="ttc" id="structPACKET_html_a4c6c9b02f521be9c56809d9db993c690"><div class="ttname"><a href="../../d6/dbc/structPACKET.html#a4c6c9b02f521be9c56809d9db993c690">PACKET::hdr</a></div><div class="ttdeci">pkt_hdr hdr</div><div class="ttdef"><b>Definition:</b> pkts.h:148</div></div>
<div class="ttc" id="pkts_8h_html_abec2e55dc4f3d4e5c639f048bf35316c"><div class="ttname"><a href="../../d5/d89/pkts_8h.html#abec2e55dc4f3d4e5c639f048bf35316c">add_pkt_op</a></div><div class="ttdeci">void add_pkt_op(u_char op, char sk_type, u_short port, int(*exec_f)(PACKET pkt))</div><div class="ttdef"><b>Definition:</b> pkts.c:563</div></div>
<div class="ttc" id="structPACKET_html_ab02eb819e29b5b4c9d5759f6547ba6e7"><div class="ttname"><a href="../../d6/dbc/structPACKET.html#ab02eb819e29b5b4c9d5759f6547ba6e7">PACKET::msg</a></div><div class="ttdeci">char * msg</div><div class="ttdef"><b>Definition:</b> pkts.h:149</div></div>
<div class="ttc" id="pkts_8h_html_a30bc04fb2e922d6ca7d89176b36c441d"><div class="ttname"><a href="../../d5/d89/pkts_8h.html#a30bc04fb2e922d6ca7d89176b36c441d">pkt_q_add_pkt</a></div><div class="ttdeci">int pkt_q_add_pkt(PACKET pkt)</div><div class="ttdef"><b>Definition:</b> pkts.c:1003</div></div>
<div class="ttc" id="pkts_8h_html_adbdf7d2b9a24e5ace1bf3169797f6fcf"><div class="ttname"><a href="../../d5/d89/pkts_8h.html#adbdf7d2b9a24e5ace1bf3169797f6fcf">pkt_q_counter</a></div><div class="ttdeci">int pkt_q_counter</div><div class="ttdef"><b>Definition:</b> pkts.h:217</div></div>
<div class="ttc" id="pkts_8h_html_ac8bb8c9b1659c15702e273b4a795f3d7"><div class="ttname"><a href="../../d5/d89/pkts_8h.html#ac8bb8c9b1659c15702e273b4a795f3d7">pkt_recv</a></div><div class="ttdeci">ssize_t pkt_recv(PACKET *pkt)</div><div class="ttdef"><b>Definition:</b> pkts.c:477</div></div>
<div class="ttc" id="pkts_8h_html_add26b86f4b7d350021c4a96e6db6ce6c"><div class="ttname"><a href="../../d5/d89/pkts_8h.html#add26b86f4b7d350021c4a96e6db6ce6c">send_rq</a></div><div class="ttdeci">int send_rq(PACKET *pkt, int pkt_flags, u_char rq, int rq_id, u_char re, int check_ack, PACKET *rpkt)</div><div class="ttdef"><b>Definition:</b> pkts.c:604</div></div>
<div class="ttc" id="pkts_8h_html_a41340ddd69b01d92d390a512f2363a56"><div class="ttname"><a href="../../d5/d89/pkts_8h.html#a41340ddd69b01d92d390a512f2363a56">pkt_addflags</a></div><div class="ttdeci">void pkt_addflags(PACKET *pkt, int flags)</div></div>
<div class="ttc" id="struct__PACKED___html_a60abdda7ab2a59086c3fdba4151e913c"><div class="ttname"><a href="../../d3/d5a/struct__PACKED__.html#a60abdda7ab2a59086c3fdba4151e913c">_PACKED_::sub_id</a></div><div class="ttdeci">u_char sub_id</div><div class="ttdef"><b>Definition:</b> pkts.h:159</div></div>
<div class="ttc" id="pkts_8h_html_a6b051f2b2e5723577d39175dd2f02383"><div class="ttname"><a href="../../d5/d89/pkts_8h.html#a6b051f2b2e5723577d39175dd2f02383">pkt_op_tbl</a></div><div class="ttdeci">struct pkt_op_table pkt_op_tbl[(ACK_NEGATIVE+1)]</div></div>
<div class="ttc" id="pkts_8h_html_aa27d4dfa0f7d6c8ee64399780800ae1f"><div class="ttname"><a href="../../d5/d89/pkts_8h.html#aa27d4dfa0f7d6c8ee64399780800ae1f">pkt_send</a></div><div class="ttdeci">ssize_t pkt_send(PACKET *pkt)</div><div class="ttdef"><b>Definition:</b> pkts.c:335</div></div>
<div class="ttc" id="structinet__prefix_html"><div class="ttname"><a href="../../da/d1d/structinet__prefix.html">inet_prefix</a></div><div class="ttdef"><b>Definition:</b> inet.h:73</div></div>
<div class="ttc" id="pkts_8h_html_a9fd2ae7f2ad83c3d156b5ee16bb37793"><div class="ttname"><a href="../../d5/d89/pkts_8h.html#a9fd2ae7f2ad83c3d156b5ee16bb37793">brdcast_hdr_iinfo</a></div><div class="ttdeci">static const int_info brdcast_hdr_iinfo</div><div class="ttdef"><b>Definition:</b> pkts.h:165</div></div>
<div class="ttc" id="structpkt__queue_html"><div class="ttname"><a href="../../dd/d5c/structpkt__queue.html">pkt_queue</a></div><div class="ttdef"><b>Definition:</b> pkts.h:206</div></div>
<div class="ttc" id="pkts_8h_html_a10af98abd797f411f0c06bc4bff939ee"><div class="ttname"><a href="../../d5/d89/pkts_8h.html#a10af98abd797f411f0c06bc4bff939ee">pkt_addport</a></div><div class="ttdeci">void pkt_addport(PACKET *pkt, u_short port)</div><div class="ttdef"><b>Definition:</b> pkts.c:89</div></div>
<div class="ttc" id="pkts_8h_html_a3169b3f057f310203a70d49f038f81b7"><div class="ttname"><a href="../../d5/d89/pkts_8h.html#a3169b3f057f310203a70d49f038f81b7">pkt_free</a></div><div class="ttdeci">void pkt_free(PACKET *pkt, int close_socket)</div><div class="ttdef"><b>Definition:</b> pkts.c:162</div></div>
<div class="ttc" id="struct__PACKED___html_a7a0f473b2cd05bb9ad8c2eac2249f261"><div class="ttname"><a href="../../d3/d5a/struct__PACKED__.html#a7a0f473b2cd05bb9ad8c2eac2249f261">_PACKED_::flags</a></div><div class="ttdeci">char flags</div><div class="ttdef"><b>Definition:</b> pkts.h:162</div></div>
<div class="ttc" id="llist_8c_html"><div class="ttname"><a href="../../d4/de1/llist_8c.html">llist.c</a></div></div>
<div class="ttc" id="pkts_8h_html_a9101abce2bfc19c4036f2ae7b618beec"><div class="ttname"><a href="../../d5/d89/pkts_8h.html#a9101abce2bfc19c4036f2ae7b618beec">pkts_init</a></div><div class="ttdeci">void pkts_init(interface *ifs, int ifs_n, int queue_init)</div><div class="ttdef"><b>Definition:</b> pkts.c:44</div></div>
<div class="ttc" id="structPACKET_html_ab31fd943dc2f849b90aaefb1215e9d8d"><div class="ttname"><a href="../../d6/dbc/structPACKET.html#ab31fd943dc2f849b90aaefb1215e9d8d">PACKET::sk</a></div><div class="ttdeci">int sk</div><div class="ttdef"><b>Definition:</b> pkts.h:134</div></div>
<div class="ttc" id="structinterface_html"><div class="ttname"><a href="../../d9/dbe/structinterface.html">interface</a></div><div class="ttdef"><b>Definition:</b> if.h:29</div></div>
<div class="ttc" id="structPACKET_html_a149ce9dd04e68b8492a6f4b5f31be887"><div class="ttname"><a href="../../d6/dbc/structPACKET.html#a149ce9dd04e68b8492a6f4b5f31be887">PACKET::port</a></div><div class="ttdeci">u_short port</div><div class="ttdef"><b>Definition:</b> pkts.h:136</div></div>
<div class="ttc" id="pkts_8h_html_ad3a3fbf0cd903aa35f60e274b9d5d65e"><div class="ttname"><a href="../../d5/d89/pkts_8h.html#ad3a3fbf0cd903aa35f60e274b9d5d65e">pkt_addhdr</a></div><div class="ttdeci">void pkt_addhdr(PACKET *pkt, pkt_hdr *hdr)</div><div class="ttdef"><b>Definition:</b> pkts.c:119</div></div>
<div class="ttc" id="structPACKET_html_ac38507058e8d545ea9885148fb152f44"><div class="ttname"><a href="../../d6/dbc/structPACKET.html#ac38507058e8d545ea9885148fb152f44">PACKET::dev</a></div><div class="ttdeci">interface * dev</div><div class="ttdef"><b>Definition:</b> pkts.h:125</div></div>
<div class="ttc" id="pkts_8h_html_a01001fd998fb3abf74fea80de24882c3"><div class="ttname"><a href="../../d5/d89/pkts_8h.html#a01001fd998fb3abf74fea80de24882c3">pkt_queue_init</a></div><div class="ttdeci">void pkt_queue_init(void)</div><div class="ttdef"><b>Definition:</b> pkts.c:878</div></div>
<div class="ttc" id="if_8h_html"><div class="ttname"><a href="../../dc/d8d/if_8h.html">if.h</a></div></div>
<div class="ttc" id="structpkt__op__table_html"><div class="ttname"><a href="../../dd/db4/structpkt__op__table.html">pkt_op_table</a></div><div class="ttdef"><b>Definition:</b> pkts.h:179</div></div>
<div class="ttc" id="request_8h_html_abfe63755e353f7ff7520db9ad7a613f3"><div class="ttname"><a href="../../d4/d43/request_8h.html#abfe63755e353f7ff7520db9ad7a613f3">TOTAL_OPS</a></div><div class="ttdeci">#define TOTAL_OPS</div><div class="ttdef"><b>Definition:</b> request.h:102</div></div>
<div class="ttc" id="pkts_8h_html_a68b302fcf3c663d33c7bcbc24b65de1b"><div class="ttname"><a href="../../d5/d89/pkts_8h.html#a68b302fcf3c663d33c7bcbc24b65de1b">pkt_addmsg</a></div><div class="ttdeci">void pkt_addmsg(PACKET *pkt, char *msg)</div><div class="ttdef"><b>Definition:</b> pkts.c:127</div></div>
<div class="ttc" id="structPACKET_html_a7e0bcc42622da58fe0430ade67608334"><div class="ttname"><a href="../../d6/dbc/structPACKET.html#a7e0bcc42622da58fe0430ade67608334">PACKET::family</a></div><div class="ttdeci">int family</div><div class="ttdef"><b>Definition:</b> pkts.h:133</div></div>
<div class="ttc" id="pkts_8h_html_ad3b23356f48288023e3ba8f333efef82"><div class="ttname"><a href="../../d5/d89/pkts_8h.html#ad3b23356f48288023e3ba8f333efef82">pkt_hdr_iinfo</a></div><div class="ttdeci">static const int_info pkt_hdr_iinfo</div><div class="ttdef"><b>Definition:</b> pkts.h:104</div></div>
<div class="ttc" id="struct__PACKED___html_a45474e36c0c7716aa39ef1e97bf76e79"><div class="ttname"><a href="../../d3/d5a/struct__PACKED__.html#a45474e36c0c7716aa39ef1e97bf76e79">_PACKED_::g_node</a></div><div class="ttdeci">u_char g_node</div><div class="ttdef"><b>Definition:</b> pkts.h:155</div></div>
<div class="ttc" id="structpkt__op__table_html_afd5ce78279b65d9bb6de2b630f487f6f"><div class="ttname"><a href="../../dd/db4/structpkt__op__table.html#afd5ce78279b65d9bb6de2b630f487f6f">pkt_op_table::port</a></div><div class="ttdeci">u_short port</div><div class="ttdef"><b>Definition:</b> pkts.h:181</div></div>
<div class="ttc" id="pkts_8h_html_ae5bd461fc16a3e66ff48dbb83f6a91a0"><div class="ttname"><a href="../../d5/d89/pkts_8h.html#ae5bd461fc16a3e66ff48dbb83f6a91a0">pkt_add_dev</a></div><div class="ttdeci">void pkt_add_dev(PACKET *pkt, interface *dev, int bind_the_socket)</div><div class="ttdef"><b>Definition:</b> pkts.c:75</div></div>
<div class="ttc" id="pkts_8h_html_ac4d4cb4e990a267fcc7e8008461ba760"><div class="ttname"><a href="../../d5/d89/pkts_8h.html#ac4d4cb4e990a267fcc7e8008461ba760">pkt_copy</a></div><div class="ttdeci">void pkt_copy(PACKET *dst, PACKET *src)</div><div class="ttdef"><b>Definition:</b> pkts.c:151</div></div>
<div class="ttc" id="structPACKET_html_afaa210c68577fe0d5753c41689e1c1fa"><div class="ttname"><a href="../../d6/dbc/structPACKET.html#afaa210c68577fe0d5753c41689e1c1fa">PACKET::to</a></div><div class="ttdeci">inet_prefix to</div><div class="ttdef"><b>Definition:</b> pkts.h:123</div></div>
<div class="ttc" id="structPACKET_html_ad90e6ba075d693017ae0ef856e652b34"><div class="ttname"><a href="../../d6/dbc/structPACKET.html#ad90e6ba075d693017ae0ef856e652b34">PACKET::pkt_flags</a></div><div class="ttdeci">u_char pkt_flags</div><div class="ttdef"><b>Definition:</b> pkts.h:138</div></div>
<div class="ttc" id="struct__PACKED___html_a85904e9d09b5bea18e0a94082e2e67f5"><div class="ttname"><a href="../../d3/d5a/struct__PACKED__.html#a85904e9d09b5bea18e0a94082e2e67f5">_PACKED_::flags</a></div><div class="ttdeci">u_char flags</div><div class="ttdef"><b>Definition:</b> pkts.h:99</div></div>
<div class="ttc" id="pkts_8h_html_ac024e276423e4ad5476ae1730d71cf76"><div class="ttname"><a href="../../d5/d89/pkts_8h.html#ac024e276423e4ad5476ae1730d71cf76">pkt_tcp_connect</a></div><div class="ttdeci">int pkt_tcp_connect(inet_prefix *host, short port, interface *dev)</div><div class="ttdef"><b>Definition:</b> pkts.c:502</div></div>
<div class="ttc" id="endianness_8h_html_a3e44b8503d7a90af675c81800fe6d275"><div class="ttname"><a href="../../dc/d3e/endianness_8h.html#a3e44b8503d7a90af675c81800fe6d275">INT_INFO</a></div><div class="ttdeci">#define INT_INFO</div><div class="ttdef"><b>Definition:</b> endianness.h:90</div></div>
<div class="ttc" id="structpkt__op__table_html_a7f2b020d16bf065a39f750dd07f35165"><div class="ttname"><a href="../../dd/db4/structpkt__op__table.html#a7f2b020d16bf065a39f750dd07f35165">pkt_op_table::exec_func</a></div><div class="ttdeci">void * exec_func</div><div class="ttdef"><b>Definition:</b> pkts.h:182</div></div>
<div class="ttc" id="struct__PACKED___html_af2f3f5bb1366fbd7a2ece8c3cb0cd1c5"><div class="ttname"><a href="../../d3/d5a/struct__PACKED__.html#af2f3f5bb1366fbd7a2ece8c3cb0cd1c5">_PACKED_::uncompress_sz</a></div><div class="ttdeci">size_t uncompress_sz</div><div class="ttdef"><b>Definition:</b> pkts.h:102</div></div>
<div class="ttc" id="request_8h_html"><div class="ttname"><a href="../../d4/d43/request_8h.html">request.h</a></div></div>
<div class="ttc" id="pkts_8h_html_ad386f9f8ac111df2a8d5a5e9912013ca"><div class="ttname"><a href="../../d5/d89/pkts_8h.html#ad386f9f8ac111df2a8d5a5e9912013ca">pkt_err</a></div><div class="ttdeci">int pkt_err(PACKET pkt, u_char err, int free_pkt)</div><div class="ttdef"><b>Definition:</b> pkts.c:775</div></div>
<div class="ttc" id="pkts_8h_html_a9bcb8ed5a94ff428d1f9f5f8b0e83d63"><div class="ttname"><a href="../../d5/d89/pkts_8h.html#a9bcb8ed5a94ff428d1f9f5f8b0e83d63">pkt_q_wait_recv</a></div><div class="ttdeci">int pkt_q_wait_recv(int id, inet_prefix *from, PACKET *rpkt, pkt_queue **ret_pq)</div><div class="ttdef"><b>Definition:</b> pkts.c:946</div></div>
<div class="ttc" id="pkts_8h_html_add9d3fdd60f0e0e8a0b0c15e2470b3d7"><div class="ttname"><a href="../../d5/d89/pkts_8h.html#add9d3fdd60f0e0e8a0b0c15e2470b3d7">pkt_addfrom</a></div><div class="ttdeci">void pkt_addfrom(PACKET *pkt, inet_prefix *from)</div><div class="ttdef"><b>Definition:</b> pkts.c:59</div></div>
<div class="ttc" id="pkts_8h_html_a3d1cd9afbe8889411d3066b39a95a8ff"><div class="ttname"><a href="../../d5/d89/pkts_8h.html#a3d1cd9afbe8889411d3066b39a95a8ff">pkt_q</a></div><div class="ttdeci">pkt_queue * pkt_q</div><div class="ttdef"><b>Definition:</b> pkts.h:216</div></div>
<div class="ttc" id="pkts_8h_html_a7ef10aa6a3c9ec3730420c5f692fb195"><div class="ttname"><a href="../../d5/d89/pkts_8h.html#a7ef10aa6a3c9ec3730420c5f692fb195">pkt_addcompress</a></div><div class="ttdeci">void pkt_addcompress(PACKET *pkt)</div><div class="ttdef"><b>Definition:</b> pkts.c:104</div></div>
<div class="ttc" id="pkts_8h_html_a9323e08c6a2d6764207f80cd8dc992aa"><div class="ttname"><a href="../../d5/d89/pkts_8h.html#a9323e08c6a2d6764207f80cd8dc992aa">pkt_clear</a></div><div class="ttdeci">void pkt_clear(PACKET *pkt)</div><div class="ttdef"><b>Definition:</b> pkts.c:138</div></div>
<div class="ttc" id="structPACKET_html"><div class="ttname"><a href="../../d6/dbc/structPACKET.html">PACKET</a></div><div class="ttdef"><b>Definition:</b> pkts.h:118</div></div>
<div class="ttc" id="struct__PACKED___html_af3cd0fdd5756902df339ccc3855686ff"><div class="ttname"><a href="../../d3/d5a/struct__PACKED__.html#af3cd0fdd5756902df339ccc3855686ff">_PACKED_::sz</a></div><div class="ttdeci">size_t sz</div><div class="ttdef"><b>Definition:</b> pkts.h:101</div></div>
<div class="ttc" id="llist_8c_html_ac92348e99cfae025c3893c07fee7b263"><div class="ttname"><a href="../../d4/de1/llist_8c.html#ac92348e99cfae025c3893c07fee7b263">LLIST_HDR</a></div><div class="ttdeci">#define LLIST_HDR(_struct)</div><div class="ttdef"><b>Definition:</b> llist.c:44</div></div>
<div class="ttc" id="if_8c_html_a4417150d9f858949bd9ea8794995ebcc"><div class="ttname"><a href="../../d7/de2/if_8c.html#a4417150d9f858949bd9ea8794995ebcc">family</a></div><div class="ttdeci">int family</div><div class="ttdef"><b>Definition:</b> if.c:34</div></div>
<div class="ttc" id="if_8c_html_ac8bf36fe0577cba66bccda3a6f7e80a4"><div class="ttname"><a href="../../d7/de2/if_8c.html#ac8bf36fe0577cba66bccda3a6f7e80a4">flags</a></div><div class="ttdeci">int flags</div><div class="ttdef"><b>Definition:</b> if.c:39</div></div>
<div class="ttc" id="pkts_8h_html_a3245bdb71a5a4e0d04cdaa214adaac51"><div class="ttname"><a href="../../d5/d89/pkts_8h.html#a3245bdb71a5a4e0d04cdaa214adaac51">pkt_fill_hdr</a></div><div class="ttdeci">void pkt_fill_hdr(pkt_hdr *hdr, u_char flags, int id, u_char op, size_t sz)</div><div class="ttdef"><b>Definition:</b> pkts.c:545</div></div>
<div class="ttc" id="pkts_8h_html_af14e2a3a65d01caa39230da9114c4c24"><div class="ttname"><a href="../../d5/d89/pkts_8h.html#af14e2a3a65d01caa39230da9114c4c24">pkt_addnonblock</a></div><div class="ttdeci">void pkt_addnonblock(PACKET *pkt)</div><div class="ttdef"><b>Definition:</b> pkts.c:114</div></div>
<div class="ttc" id="pkts_8h_html_a8ccb46810f5a6b74d733c837dd5f4fbe"><div class="ttname"><a href="../../d5/d89/pkts_8h.html#a8ccb46810f5a6b74d733c837dd5f4fbe">pkt_q_del</a></div><div class="ttdeci">void pkt_q_del(pkt_queue *pq, int close_socket)</div><div class="ttdef"><b>Definition:</b> pkts.c:1043</div></div>
<div class="ttc" id="pkts_8h_html_a61d1b4bc2230ca26679230b75fa7c1c9"><div class="ttname"><a href="../../d5/d89/pkts_8h.html#a61d1b4bc2230ca26679230b75fa7c1c9">pkt_queue_close</a></div><div class="ttdeci">void pkt_queue_close(void)</div><div class="ttdef"><b>Definition:</b> pkts.c:886</div></div>
<div class="ttc" id="endianness_8h_html_acc663d0291dd4a32c1dfbed3167bd58b"><div class="ttname"><a href="../../dc/d3e/endianness_8h.html#acc663d0291dd4a32c1dfbed3167bd58b">INT_TYPE_32BIT</a></div><div class="ttdeci">#define INT_TYPE_32BIT</div><div class="ttdef"><b>Definition:</b> endianness.h:35</div></div>
<div class="ttc" id="pkts_8h_html_a2d9d7b7b56f6e28d0b4836353c593a7a"><div class="ttname"><a href="../../d5/d89/pkts_8h.html#a2d9d7b7b56f6e28d0b4836353c593a7a">pkt_addlowdelay</a></div><div class="ttdeci">void pkt_addlowdelay(PACKET *pkt)</div><div class="ttdef"><b>Definition:</b> pkts.c:109</div></div>
<div class="ttc" id="pkts_8h_html_ad72bbdba1c2025145f30bba79981c11d"><div class="ttname"><a href="../../d5/d89/pkts_8h.html#ad72bbdba1c2025145f30bba79981c11d">pkt_exec</a></div><div class="ttdeci">int pkt_exec(PACKET pkt, int acpt_idx)</div><div class="ttdef"><b>Definition:</b> pkts.c:813</div></div>
<div class="ttc" id="pkts_8h_html_a9705190f4cb9031da8070644993515d5"><div class="ttname"><a href="../../d5/d89/pkts_8h.html#a9705190f4cb9031da8070644993515d5">forward_pkt</a></div><div class="ttdeci">int forward_pkt(PACKET rpkt, inet_prefix to)</div><div class="ttdef"><b>Definition:</b> pkts.c:756</div></div>
<div class="ttc" id="pkts_8h_html_ae6409550716070c3ff80141d94dab212"><div class="ttname"><a href="../../d5/d89/pkts_8h.html#ae6409550716070c3ff80141d94dab212">pkt_pack</a></div><div class="ttdeci">char * pkt_pack(PACKET *pkt)</div><div class="ttdef"><b>Definition:</b> pkts.c:227</div></div>
<div class="ttc" id="pkts_8h_html_a56916d86b390965421fda804d7ee0a3d"><div class="ttname"><a href="../../d5/d89/pkts_8h.html#a56916d86b390965421fda804d7ee0a3d">pkt_verify_hdr</a></div><div class="ttdeci">int pkt_verify_hdr(PACKET pkt)</div><div class="ttdef"><b>Definition:</b> pkts.c:320</div></div>
<div class="ttc" id="structPACKET_html_a67063adb87cb1d9c3a542e26b96cf95d"><div class="ttname"><a href="../../d6/dbc/structPACKET.html#a67063adb87cb1d9c3a542e26b96cf95d">PACKET::flags</a></div><div class="ttdeci">int flags</div><div class="ttdef"><b>Definition:</b> pkts.h:139</div></div>
<div class="ttc" id="struct__PACKED___html"><div class="ttname"><a href="../../d3/d5a/struct__PACKED__.html">_PACKED_</a></div><div class="ttdef"><b>Definition:</b> bmap.h:89</div></div>
<div class="ttc" id="structpkt__queue_html_ad796ff1ec0ecfeed014c07eb9c5154d5"><div class="ttname"><a href="../../dd/d5c/structpkt__queue.html#ad796ff1ec0ecfeed014c07eb9c5154d5">pkt_queue::flags</a></div><div class="ttdeci">char flags</div><div class="ttdef"><b>Definition:</b> pkts.h:212</div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="../../dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="../../d5/d89/pkts_8h.html">pkts.h</a></li>
2014-02-20 00:30:40 +00:00
<li class="footer">Generated on Wed Feb 19 2014 16:28:40 for The Netsukuku Project by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="../../doxygen.png" alt="doxygen"/></a> 1.8.6 </li>
</ul>
</div>
</body>
</html>