191df013fSAsim Jamshed<!-- Creator     : groff version 1.22.2 -->
2*e5df9dc1SAsim 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>
17*e5df9dc1SAsim Jamshed<link rel="stylesheet" href="./common.css">
1891df013fSAsim Jamshed</head>
1991df013fSAsim Jamshed<body>
20*e5df9dc1SAsim Jamshed<div class="main">
2191df013fSAsim Jamshed<h1 align="center">mtcp_getlastpkt</h1>
22*e5df9dc1SAsim 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>
32*e5df9dc1SAsim 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
84*e5df9dc1SAsim Jamshed<p>// pkt recving time<br>uint32_t cur_ts;</p></td></tr>
85*e5df9dc1SAsim Jamshed<!--<tr valign="top" align="left">
86*e5df9dc1SAsim Jamshed<td width="8%"></td>
87*e5df9dc1SAsim Jamshed<td width="7%"></td>
88*e5df9dc1SAsim Jamshed<td width="85%">
89*e5df9dc1SAsim Jamshed
90*e5df9dc1SAsim Jamshed
91*e5df9dc1SAsim 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
98*e5df9dc1SAsim Jamshed<p>// ETH<br>uint16_t eth_len;</p></td></tr>
99*e5df9dc1SAsim 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
106*e5df9dc1SAsim 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
113*e5df9dc1SAsim Jamshed<p>// IP<br>uint16_t ip_len;</p></td></tr>
114*e5df9dc1SAsim Jamshed<!--<tr valign="top" align="left">
115*e5df9dc1SAsim Jamshed<td width="8%"></td>
116*e5df9dc1SAsim Jamshed<td width="7%"></td>
117*e5df9dc1SAsim Jamshed<td width="85%">
118*e5df9dc1SAsim Jamshed
119*e5df9dc1SAsim Jamshed
120*e5df9dc1SAsim 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
127*e5df9dc1SAsim 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>
128*e5df9dc1SAsim Jamshed<!--<tr valign="top" align="left">
129*e5df9dc1SAsim Jamshed<td width="8%"></td>
130*e5df9dc1SAsim Jamshed<td width="7%"></td>
131*e5df9dc1SAsim Jamshed<td width="85%">
132*e5df9dc1SAsim Jamshed
133*e5df9dc1SAsim Jamshed
134*e5df9dc1SAsim 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
141*e5df9dc1SAsim 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
148*e5df9dc1SAsim 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
155*e5df9dc1SAsim 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
162*e5df9dc1SAsim 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
169*e5df9dc1SAsim Jamshed<p>struct ethhdr *ethh;<br>struct iphdr *iph;<br>struct tcphdr *tcph;<br>uint8_t *payload;</p></td></tr>
170*e5df9dc1SAsim Jamshed<!--<tr valign="top" align="left">
171*e5df9dc1SAsim Jamshed<td width="8%"></td>
172*e5df9dc1SAsim Jamshed<td width="7%"></td>
173*e5df9dc1SAsim Jamshed<td width="85%">
174*e5df9dc1SAsim Jamshed
175*e5df9dc1SAsim Jamshed
176*e5df9dc1SAsim 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
183*e5df9dc1SAsim 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
190*e5df9dc1SAsim 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
197*e5df9dc1SAsim Jamshedrecorded Ethernet frame and appends its meta-data (in host byte order). The last
198*e5df9dc1SAsim Jamshedfour fields of <i>pinfo</i> (ethh, iph, tcph and payload)
199*e5df9dc1SAsim Jamshedpoint to the copied frame at the appropriate offsets. Please
200*e5df9dc1SAsim Jamshednote that the packet buffer that contains the copied frame
201*e5df9dc1SAsim Jamshedis reused for future invocations of
202*e5df9dc1SAsim 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
28391df013fSAsim Jamshed<h2>SEE ALSO
28491df013fSAsim Jamshed<a name="SEE ALSO"></a>
28591df013fSAsim Jamshed</h2>
28691df013fSAsim Jamshed
28791df013fSAsim Jamshed
28891df013fSAsim Jamshed
28991df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em"><b>mtcp_create_context</b>(),
29091df013fSAsim Jamshed<b>mtcp_setlastpkt</b>(), <b>mtcp_socket</b>(),</p>
29191df013fSAsim Jamshed
29291df013fSAsim Jamshed<h2>COLOPHON
29391df013fSAsim Jamshed<a name="COLOPHON"></a>
29491df013fSAsim Jamshed</h2>
29591df013fSAsim Jamshed
29691df013fSAsim Jamshed
29791df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">This page is
29891df013fSAsim Jamshedpart of mOS release 0.3 <i>docs</i> section. A description
29991df013fSAsim Jamshedof the project, and information about reporting bugs, can be
30091df013fSAsim Jamshedfound at http://mos.kaist.edu/.</p>
301*e5df9dc1SAsim Jamshed<!-- <hr> -->
302*e5df9dc1SAsim Jamshed<br>
303*e5df9dc1SAsim Jamshed<div class="footer">
304*e5df9dc1SAsim Jamshed  <img src="back-arrow.jpg" width="2%" height="2%"><a href="http://mos.kaist.edu/index_man.html">Back to Index</a>
305*e5df9dc1SAsim Jamshed</div>
306*e5df9dc1SAsim Jamshed</div>
30791df013fSAsim Jamshed</body>
30891df013fSAsim Jamshed</html>
309