191df013fSAsim Jamshed<!-- Creator     : groff version 1.22.2 -->
2e5df9dc1SAsim Jamshed<!-- CreationDate: Sat Feb  4 18:19:20 2017 -->
391df013fSAsim Jamshed<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
491df013fSAsim Jamshed"http://www.w3.org/TR/html4/loose.dtd">
591df013fSAsim Jamshed<html>
691df013fSAsim Jamshed<head>
791df013fSAsim Jamshed<meta name="generator" content="groff -Thtml, see www.gnu.org">
891df013fSAsim Jamshed<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
991df013fSAsim Jamshed<meta name="Content-Style" content="text/css">
1091df013fSAsim Jamshed<style type="text/css">
1191df013fSAsim Jamshed       p       { margin-top: 0; margin-bottom: 0; vertical-align: top }
1291df013fSAsim Jamshed       pre     { margin-top: 0; margin-bottom: 0; vertical-align: top }
1391df013fSAsim Jamshed       table   { margin-top: 0; margin-bottom: 0; vertical-align: top }
1491df013fSAsim Jamshed       h1      { text-align: center }
1591df013fSAsim Jamshed</style>
1691df013fSAsim Jamshed<title>mtcp_getlastpkt</title>
17e5df9dc1SAsim Jamshed<link rel="stylesheet" href="./common.css">
1891df013fSAsim Jamshed</head>
1991df013fSAsim Jamshed<body>
20e5df9dc1SAsim Jamshed<div class="main">
2191df013fSAsim Jamshed<h1 align="center">mtcp_getlastpkt</h1>
22e5df9dc1SAsim Jamshed<!--
2391df013fSAsim Jamshed<a href="#NAME">NAME</a><br>
2491df013fSAsim Jamshed<a href="#SYNOPSIS">SYNOPSIS</a><br>
2591df013fSAsim Jamshed<a href="#DESCRIPTION">DESCRIPTION</a><br>
2691df013fSAsim Jamshed<a href="#RETURN VALUE">RETURN VALUE</a><br>
2791df013fSAsim Jamshed<a href="#ERRORS">ERRORS</a><br>
2891df013fSAsim Jamshed<a href="#AUTHORS">AUTHORS</a><br>
2991df013fSAsim Jamshed<a href="#SEE ALSO">SEE ALSO</a><br>
3091df013fSAsim Jamshed<a href="#COLOPHON">COLOPHON</a><br>
3191df013fSAsim Jamshed<hr>
32e5df9dc1SAsim Jamshed-->
3391df013fSAsim Jamshed
3491df013fSAsim Jamshed<h2>NAME
3591df013fSAsim Jamshed<a name="NAME"></a>
3691df013fSAsim Jamshed</h2>
3791df013fSAsim Jamshed
3891df013fSAsim Jamshed
3991df013fSAsim Jamshed
4091df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">mtcp_getlastpkt
4191df013fSAsim Jamshed&minus; Retrieves the last Ethernet frame of a monitoring
4291df013fSAsim Jamshedflow</p>
4391df013fSAsim Jamshed
4491df013fSAsim Jamshed<h2>SYNOPSIS
4591df013fSAsim Jamshed<a name="SYNOPSIS"></a>
4691df013fSAsim Jamshed</h2>
4791df013fSAsim Jamshed
4891df013fSAsim Jamshed
4991df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em"><b>#include
5091df013fSAsim Jamshed&lt;mos_api.h&gt;</b></p>
5191df013fSAsim Jamshed
5291df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em"><b>int
5391df013fSAsim Jamshedmtcp_getlastpkt(mctx_t</b> <i>mctx</i><b>, int</b>
5491df013fSAsim Jamshed<i>sockid</i><b>, int</b> <i>side</i><b>, struct pkt_info
5591df013fSAsim Jamshed*</b><i>pinfo</i><b>);</b></p>
5691df013fSAsim Jamshed
5791df013fSAsim Jamshed<h2>DESCRIPTION
5891df013fSAsim Jamshed<a name="DESCRIPTION"></a>
5991df013fSAsim Jamshed</h2>
6091df013fSAsim Jamshed
6191df013fSAsim Jamshed
6291df013fSAsim Jamshed
6391df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em"><b>mtcp_getlastpkt</b>()
6491df013fSAsim Jamshedfetches a copy of the last Ethernet frame for a given flow
6591df013fSAsim Jamshedobserved by the stack. The user can select the socket
6691df013fSAsim Jamsheddescriptor using <i>sockid</i> and the <i>side</i> argument
6791df013fSAsim Jamshed(MOS_SIDE_CLI or MOS_SIDE_SVR) to fetch the Ethernet frame
6891df013fSAsim Jamshedof her choosing. <i>pinfo</i> points to an instance of
6991df013fSAsim Jamshed<b>struct</b> pkt_info that should be allocated by the user
7091df013fSAsim Jamshedbefore calling the function. The structure is defined
7191df013fSAsim Jamshedas:</p>
7291df013fSAsim Jamshed
7391df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">struct pkt_info
7491df013fSAsim Jamshed{</p>
7591df013fSAsim Jamshed
7691df013fSAsim Jamshed<table width="100%" border="0" rules="none" frame="void"
7791df013fSAsim Jamshed       cellspacing="0" cellpadding="0">
7891df013fSAsim Jamshed<tr valign="top" align="left">
7991df013fSAsim Jamshed<td width="8%"></td>
8091df013fSAsim Jamshed<td width="7%"></td>
8191df013fSAsim Jamshed<td width="85%">
8291df013fSAsim Jamshed
8391df013fSAsim Jamshed
84e5df9dc1SAsim Jamshed<p>// pkt recving time<br>uint32_t cur_ts;</p></td></tr>
85e5df9dc1SAsim Jamshed<!--<tr valign="top" align="left">
86e5df9dc1SAsim Jamshed<td width="8%"></td>
87e5df9dc1SAsim Jamshed<td width="7%"></td>
88e5df9dc1SAsim Jamshed<td width="85%">
89e5df9dc1SAsim Jamshed
90e5df9dc1SAsim Jamshed
91e5df9dc1SAsim Jamshed<p>uint32_t cur_ts;</p></td></tr>-->
9291df013fSAsim Jamshed<tr valign="top" align="left">
9391df013fSAsim Jamshed<td width="8%"></td>
9491df013fSAsim Jamshed<td width="7%"></td>
9591df013fSAsim Jamshed<td width="85%">
9691df013fSAsim Jamshed
9791df013fSAsim Jamshed
98e5df9dc1SAsim Jamshed<p>// ETH<br>uint16_t eth_len;</p></td></tr>
99e5df9dc1SAsim Jamshed<!--
10091df013fSAsim Jamshed<tr valign="top" align="left">
10191df013fSAsim Jamshed<td width="8%"></td>
10291df013fSAsim Jamshed<td width="7%"></td>
10391df013fSAsim Jamshed<td width="85%">
10491df013fSAsim Jamshed
10591df013fSAsim Jamshed
106e5df9dc1SAsim Jamshed<p></p></td></tr>-->
10791df013fSAsim Jamshed<tr valign="top" align="left">
10891df013fSAsim Jamshed<td width="8%"></td>
10991df013fSAsim Jamshed<td width="7%"></td>
11091df013fSAsim Jamshed<td width="85%">
11191df013fSAsim Jamshed
11291df013fSAsim Jamshed
113e5df9dc1SAsim Jamshed<p>// IP<br>uint16_t ip_len;</p></td></tr>
114e5df9dc1SAsim Jamshed<!--<tr valign="top" align="left">
115e5df9dc1SAsim Jamshed<td width="8%"></td>
116e5df9dc1SAsim Jamshed<td width="7%"></td>
117e5df9dc1SAsim Jamshed<td width="85%">
118e5df9dc1SAsim Jamshed
119e5df9dc1SAsim Jamshed
120e5df9dc1SAsim Jamshed<p></p></td></tr>-->
12191df013fSAsim Jamshed<tr valign="top" align="left">
12291df013fSAsim Jamshed<td width="8%"></td>
12391df013fSAsim Jamshed<td width="7%"></td>
12491df013fSAsim Jamshed<td width="85%">
12591df013fSAsim Jamshed
12691df013fSAsim Jamshed
127e5df9dc1SAsim Jamshed<p>//TCP<br>uint64_t offset; // TCP recv buffer offset<br>uint16_t payloadlen;<br>uint32_t seq;<br>uint32_t ack_seq;<br>uint16_t window;</p></td></tr>
128e5df9dc1SAsim Jamshed<!--<tr valign="top" align="left">
129e5df9dc1SAsim Jamshed<td width="8%"></td>
130e5df9dc1SAsim Jamshed<td width="7%"></td>
131e5df9dc1SAsim Jamshed<td width="85%">
132e5df9dc1SAsim Jamshed
133e5df9dc1SAsim Jamshed
134e5df9dc1SAsim Jamshed<p></p></td></tr>
13591df013fSAsim Jamshed<tr valign="top" align="left">
13691df013fSAsim Jamshed<td width="8%"></td>
13791df013fSAsim Jamshed<td width="7%"></td>
13891df013fSAsim Jamshed<td width="85%">
13991df013fSAsim Jamshed
14091df013fSAsim Jamshed
141e5df9dc1SAsim Jamshed<p></p></td></tr>
14291df013fSAsim Jamshed<tr valign="top" align="left">
14391df013fSAsim Jamshed<td width="8%"></td>
14491df013fSAsim Jamshed<td width="7%"></td>
14591df013fSAsim Jamshed<td width="85%">
14691df013fSAsim Jamshed
14791df013fSAsim Jamshed
148e5df9dc1SAsim Jamshed<p></p></td></tr>
14991df013fSAsim Jamshed<tr valign="top" align="left">
15091df013fSAsim Jamshed<td width="8%"></td>
15191df013fSAsim Jamshed<td width="7%"></td>
15291df013fSAsim Jamshed<td width="85%">
15391df013fSAsim Jamshed
15491df013fSAsim Jamshed
155e5df9dc1SAsim Jamshed<p></p></td></tr>
15691df013fSAsim Jamshed<tr valign="top" align="left">
15791df013fSAsim Jamshed<td width="8%"></td>
15891df013fSAsim Jamshed<td width="7%"></td>
15991df013fSAsim Jamshed<td width="85%">
16091df013fSAsim Jamshed
16191df013fSAsim Jamshed
162e5df9dc1SAsim Jamshed<p></p></td></tr>-->
16391df013fSAsim Jamshed<tr valign="top" align="left">
16491df013fSAsim Jamshed<td width="8%"></td>
16591df013fSAsim Jamshed<td width="7%"></td>
16691df013fSAsim Jamshed<td width="85%">
16791df013fSAsim Jamshed
16891df013fSAsim Jamshed
169e5df9dc1SAsim Jamshed<p>struct ethhdr *ethh;<br>struct iphdr *iph;<br>struct tcphdr *tcph;<br>uint8_t *payload;</p></td></tr>
170e5df9dc1SAsim Jamshed<!--<tr valign="top" align="left">
171e5df9dc1SAsim Jamshed<td width="8%"></td>
172e5df9dc1SAsim Jamshed<td width="7%"></td>
173e5df9dc1SAsim Jamshed<td width="85%">
174e5df9dc1SAsim Jamshed
175e5df9dc1SAsim Jamshed
176e5df9dc1SAsim Jamshed<p></p></td></tr>
17791df013fSAsim Jamshed<tr valign="top" align="left">
17891df013fSAsim Jamshed<td width="8%"></td>
17991df013fSAsim Jamshed<td width="7%"></td>
18091df013fSAsim Jamshed<td width="85%">
18191df013fSAsim Jamshed
18291df013fSAsim Jamshed
183e5df9dc1SAsim Jamshed<p></p></td></tr>
18491df013fSAsim Jamshed<tr valign="top" align="left">
18591df013fSAsim Jamshed<td width="8%"></td>
18691df013fSAsim Jamshed<td width="7%"></td>
18791df013fSAsim Jamshed<td width="85%">
18891df013fSAsim Jamshed
18991df013fSAsim Jamshed
190e5df9dc1SAsim Jamshed<p></p></td></tr>-->
19191df013fSAsim Jamshed</table>
19291df013fSAsim Jamshed
19391df013fSAsim Jamshed<p style="margin-left:11%;">}</p>
19491df013fSAsim Jamshed
19591df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">A successful
19691df013fSAsim Jamshedcall to <b>mtcp_getlastpkt()</b> creates a copy of the last
197e5df9dc1SAsim Jamshedrecorded Ethernet frame and appends its meta-data (in host byte order). The last
198e5df9dc1SAsim Jamshedfour fields of <i>pinfo</i> (ethh, iph, tcph and payload)
199e5df9dc1SAsim Jamshedpoint to the copied frame at the appropriate offsets. Please
200e5df9dc1SAsim Jamshednote that the packet buffer that contains the copied frame
201e5df9dc1SAsim Jamshedis reused for future invocations of
202e5df9dc1SAsim Jamshed<b>mtcp_getlastpkt().</b></p>
20391df013fSAsim Jamshed
20491df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">An
20591df013fSAsim Jamshed<b>mtcp_getlastpkt</b>() call takes an additional argument
20691df013fSAsim Jamshednamed <i>mctx</i> that represents the per-core mTCP context
20791df013fSAsim Jamshedin an application (see <b>mtcp_create_context()</b> for
20891df013fSAsim Jamsheddetails).</p>
20991df013fSAsim Jamshed
21091df013fSAsim Jamshed<h2>RETURN VALUE
21191df013fSAsim Jamshed<a name="RETURN VALUE"></a>
21291df013fSAsim Jamshed</h2>
21391df013fSAsim Jamshed
21491df013fSAsim Jamshed
21591df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">Returns 0 on
21691df013fSAsim Jamshedsuccess; -1 on failure. In case of failure, <i>errno</i> is
21791df013fSAsim Jamshedset appropriately.</p>
21891df013fSAsim Jamshed
21991df013fSAsim Jamshed<h2>ERRORS
22091df013fSAsim Jamshed<a name="ERRORS"></a>
22191df013fSAsim Jamshed</h2>
22291df013fSAsim Jamshed
22391df013fSAsim Jamshed
22491df013fSAsim Jamshed<table width="100%" border="0" rules="none" frame="void"
22591df013fSAsim Jamshed       cellspacing="0" cellpadding="0">
22691df013fSAsim Jamshed<tr valign="top" align="left">
22791df013fSAsim Jamshed<td width="11%"></td>
22891df013fSAsim Jamshed<td width="11%">
22991df013fSAsim Jamshed
23091df013fSAsim Jamshed
23191df013fSAsim Jamshed<p style="margin-top: 1em"><b>EACCES</b></p></td>
23291df013fSAsim Jamshed<td width="12%"></td>
23391df013fSAsim Jamshed<td width="66%">
23491df013fSAsim Jamshed
23591df013fSAsim Jamshed
23691df013fSAsim Jamshed<p style="margin-top: 1em"><i>mctx</i> is invalid.</p></td></tr>
23791df013fSAsim Jamshed<tr valign="top" align="left">
23891df013fSAsim Jamshed<td width="11%"></td>
23991df013fSAsim Jamshed<td width="11%">
24091df013fSAsim Jamshed
24191df013fSAsim Jamshed
24291df013fSAsim Jamshed<p><b>EPERM</b></p></td>
24391df013fSAsim Jamshed<td width="12%"></td>
24491df013fSAsim Jamshed<td width="66%">
24591df013fSAsim Jamshed
24691df013fSAsim Jamshed
24791df013fSAsim Jamshed<p>Permission denied.</p></td></tr>
24891df013fSAsim Jamshed<tr valign="top" align="left">
24991df013fSAsim Jamshed<td width="11%"></td>
25091df013fSAsim Jamshed<td width="11%">
25191df013fSAsim Jamshed
25291df013fSAsim Jamshed
25391df013fSAsim Jamshed<p><b>ENODATA</b></p></td>
25491df013fSAsim Jamshed<td width="12%"></td>
25591df013fSAsim Jamshed<td width="66%">
25691df013fSAsim Jamshed
25791df013fSAsim Jamshed
25891df013fSAsim Jamshed<p>The last captured Ethernet frame for this flow does not
25991df013fSAsim Jamshedexist. This can occur if <b>mtcp_getlastpkt()</b> is called
26091df013fSAsim Jamshedduring e.g. connection initiation.</p></td></tr>
26191df013fSAsim Jamshed<tr valign="top" align="left">
26291df013fSAsim Jamshed<td width="11%"></td>
26391df013fSAsim Jamshed<td width="11%">
26491df013fSAsim Jamshed
26591df013fSAsim Jamshed
26691df013fSAsim Jamshed<p><b>EBADF</b></p></td>
26791df013fSAsim Jamshed<td width="12%"></td>
26891df013fSAsim Jamshed<td width="66%">
26991df013fSAsim Jamshed
27091df013fSAsim Jamshed
27191df013fSAsim Jamshed<p><i>sockid</i> is not a valid socket descriptor for
27291df013fSAsim Jamshedcreating a connection.</p></td></tr>
27391df013fSAsim Jamshed</table>
27491df013fSAsim Jamshed
27591df013fSAsim Jamshed<h2>AUTHORS
27691df013fSAsim Jamshed<a name="AUTHORS"></a>
27791df013fSAsim Jamshed</h2>
27891df013fSAsim Jamshed
27991df013fSAsim Jamshed
28091df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">mOS development
28191df013fSAsim Jamshedteam &lt;[email protected]&gt;</p>
28291df013fSAsim Jamshed
283*626fc701SYoungGyoun<!----------------------------------------------------------->
284*626fc701SYoungGyoun<h2>EXAMPLES
285*626fc701SYoungGyoun  <a name="EXAMPLES"></a>
286*626fc701SYoungGyoun</h2>
287*626fc701SYoungGyoun
288*626fc701SYoungGyoun<p style="margin-left:11%; margin-top: 1em">
289*626fc701SYoungGyoun  <a href="http://mos.kaist.edu/guide/programmer/05_api_example.html#monitoring-packet-metadata-and-payload">
290*626fc701SYoungGyoun	http://mos.kaist.edu/guide/programmer/05_api_example.html#monitoring-packet-metadata-and-payload
291*626fc701SYoungGyoun  </a>
292*626fc701SYoungGyoun</p>
293*626fc701SYoungGyoun<p style="margin-left:11%; margin-top: 1em">
294*626fc701SYoungGyoun  <a href="http://mos.kaist.edu/guide/programmer/05_api_example.html#generating-and-sending-a-packet">
295*626fc701SYoungGyoun	http://mos.kaist.edu/guide/programmer/05_api_example.html#generating-and-sending-a-packet
296*626fc701SYoungGyoun  </a>
297*626fc701SYoungGyoun</p>
298*626fc701SYoungGyoun<!----------------------------------------------------------->
299*626fc701SYoungGyoun
300*626fc701SYoungGyoun
301*626fc701SYoungGyoun
30291df013fSAsim Jamshed<h2>SEE ALSO
30391df013fSAsim Jamshed<a name="SEE ALSO"></a>
30491df013fSAsim Jamshed</h2>
30591df013fSAsim Jamshed
30691df013fSAsim Jamshed
30791df013fSAsim Jamshed
30891df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em"><b>mtcp_create_context</b>(),
30991df013fSAsim Jamshed<b>mtcp_setlastpkt</b>(), <b>mtcp_socket</b>(),</p>
31091df013fSAsim Jamshed
31191df013fSAsim Jamshed<h2>COLOPHON
31291df013fSAsim Jamshed<a name="COLOPHON"></a>
31391df013fSAsim Jamshed</h2>
31491df013fSAsim Jamshed
31591df013fSAsim Jamshed
31691df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">This page is
31791df013fSAsim Jamshedpart of mOS release 0.3 <i>docs</i> section. A description
31891df013fSAsim Jamshedof the project, and information about reporting bugs, can be
31991df013fSAsim Jamshedfound at http://mos.kaist.edu/.</p>
320e5df9dc1SAsim Jamshed<!-- <hr> -->
321e5df9dc1SAsim Jamshed<br>
322e5df9dc1SAsim Jamshed<div class="footer">
323e5df9dc1SAsim Jamshed  <img src="back-arrow.jpg" width="2%" height="2%"><a href="http://mos.kaist.edu/index_man.html">Back to Index</a>
324e5df9dc1SAsim Jamshed</div>
325e5df9dc1SAsim Jamshed</div>
32691df013fSAsim Jamshed</body>
32791df013fSAsim Jamshed</html>
328