1*91df013fSAsim Jamshed<!-- Creator     : groff version 1.22.2 -->
2*91df013fSAsim Jamshed<!-- CreationDate: Sat Feb  4 18:32:18 2017 -->
3*91df013fSAsim Jamshed<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
4*91df013fSAsim Jamshed"http://www.w3.org/TR/html4/loose.dtd">
5*91df013fSAsim Jamshed<html>
6*91df013fSAsim Jamshed<head>
7*91df013fSAsim Jamshed<meta name="generator" content="groff -Thtml, see www.gnu.org">
8*91df013fSAsim Jamshed<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
9*91df013fSAsim Jamshed<meta name="Content-Style" content="text/css">
10*91df013fSAsim Jamshed<style type="text/css">
11*91df013fSAsim Jamshed       p       { margin-top: 0; margin-bottom: 0; vertical-align: top }
12*91df013fSAsim Jamshed       pre     { margin-top: 0; margin-bottom: 0; vertical-align: top }
13*91df013fSAsim Jamshed       table   { margin-top: 0; margin-bottom: 0; vertical-align: top }
14*91df013fSAsim Jamshed       h1      { text-align: center }
15*91df013fSAsim Jamshed</style>
16*91df013fSAsim Jamshed<title>mtcp_getlastpkt</title>
17*91df013fSAsim Jamshed
18*91df013fSAsim Jamshed</head>
19*91df013fSAsim Jamshed<body>
20*91df013fSAsim Jamshed
21*91df013fSAsim Jamshed<h1 align="center">mtcp_getlastpkt</h1>
22*91df013fSAsim Jamshed
23*91df013fSAsim Jamshed<a href="#NAME">NAME</a><br>
24*91df013fSAsim Jamshed<a href="#SYNOPSIS">SYNOPSIS</a><br>
25*91df013fSAsim Jamshed<a href="#DESCRIPTION">DESCRIPTION</a><br>
26*91df013fSAsim Jamshed<a href="#RETURN VALUE">RETURN VALUE</a><br>
27*91df013fSAsim Jamshed<a href="#ERRORS">ERRORS</a><br>
28*91df013fSAsim Jamshed<a href="#AUTHORS">AUTHORS</a><br>
29*91df013fSAsim Jamshed<a href="#SEE ALSO">SEE ALSO</a><br>
30*91df013fSAsim Jamshed<a href="#COLOPHON">COLOPHON</a><br>
31*91df013fSAsim Jamshed
32*91df013fSAsim Jamshed<hr>
33*91df013fSAsim Jamshed
34*91df013fSAsim Jamshed
35*91df013fSAsim Jamshed<h2>NAME
36*91df013fSAsim Jamshed<a name="NAME"></a>
37*91df013fSAsim Jamshed</h2>
38*91df013fSAsim Jamshed
39*91df013fSAsim Jamshed
40*91df013fSAsim Jamshed
41*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">mtcp_getlastpkt
42*91df013fSAsim Jamshed&minus; Retrieves the last Ethernet frame of a monitoring
43*91df013fSAsim Jamshedflow</p>
44*91df013fSAsim Jamshed
45*91df013fSAsim Jamshed<h2>SYNOPSIS
46*91df013fSAsim Jamshed<a name="SYNOPSIS"></a>
47*91df013fSAsim Jamshed</h2>
48*91df013fSAsim Jamshed
49*91df013fSAsim Jamshed
50*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em"><b>#include
51*91df013fSAsim Jamshed&lt;mos_api.h&gt;</b></p>
52*91df013fSAsim Jamshed
53*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em"><b>int
54*91df013fSAsim Jamshedmtcp_getlastpkt(mctx_t</b> <i>mctx</i><b>, int</b>
55*91df013fSAsim Jamshed<i>sockid</i><b>, int</b> <i>side</i><b>, struct pkt_info
56*91df013fSAsim Jamshed*</b><i>pinfo</i><b>);</b></p>
57*91df013fSAsim Jamshed
58*91df013fSAsim Jamshed<h2>DESCRIPTION
59*91df013fSAsim Jamshed<a name="DESCRIPTION"></a>
60*91df013fSAsim Jamshed</h2>
61*91df013fSAsim Jamshed
62*91df013fSAsim Jamshed
63*91df013fSAsim Jamshed
64*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em"><b>mtcp_getlastpkt</b>()
65*91df013fSAsim Jamshedfetches a copy of the last Ethernet frame for a given flow
66*91df013fSAsim Jamshedobserved by the stack. The user can select the socket
67*91df013fSAsim Jamsheddescriptor using <i>sockid</i> and the <i>side</i> argument
68*91df013fSAsim Jamshed(MOS_SIDE_CLI or MOS_SIDE_SVR) to fetch the Ethernet frame
69*91df013fSAsim Jamshedof her choosing. <i>pinfo</i> points to an instance of
70*91df013fSAsim Jamshed<b>struct</b> pkt_info that should be allocated by the user
71*91df013fSAsim Jamshedbefore calling the function. The structure is defined
72*91df013fSAsim Jamshedas:</p>
73*91df013fSAsim Jamshed
74*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">struct pkt_info
75*91df013fSAsim Jamshed{</p>
76*91df013fSAsim Jamshed
77*91df013fSAsim Jamshed<table width="100%" border="0" rules="none" frame="void"
78*91df013fSAsim Jamshed       cellspacing="0" cellpadding="0">
79*91df013fSAsim Jamshed<tr valign="top" align="left">
80*91df013fSAsim Jamshed<td width="8%"></td>
81*91df013fSAsim Jamshed<td width="7%"></td>
82*91df013fSAsim Jamshed<td width="85%">
83*91df013fSAsim Jamshed
84*91df013fSAsim Jamshed
85*91df013fSAsim Jamshed<p>// pkt recving time</p></td></tr>
86*91df013fSAsim Jamshed<tr valign="top" align="left">
87*91df013fSAsim Jamshed<td width="8%"></td>
88*91df013fSAsim Jamshed<td width="7%"></td>
89*91df013fSAsim Jamshed<td width="85%">
90*91df013fSAsim Jamshed
91*91df013fSAsim Jamshed
92*91df013fSAsim Jamshed<p>uint32_t cur_ts;</p></td></tr>
93*91df013fSAsim Jamshed<tr valign="top" align="left">
94*91df013fSAsim Jamshed<td width="8%"></td>
95*91df013fSAsim Jamshed<td width="7%"></td>
96*91df013fSAsim Jamshed<td width="85%">
97*91df013fSAsim Jamshed
98*91df013fSAsim Jamshed
99*91df013fSAsim Jamshed<p>// ETH</p></td></tr>
100*91df013fSAsim Jamshed<tr valign="top" align="left">
101*91df013fSAsim Jamshed<td width="8%"></td>
102*91df013fSAsim Jamshed<td width="7%"></td>
103*91df013fSAsim Jamshed<td width="85%">
104*91df013fSAsim Jamshed
105*91df013fSAsim Jamshed
106*91df013fSAsim Jamshed<p>uint16_t eth_len;</p></td></tr>
107*91df013fSAsim Jamshed<tr valign="top" align="left">
108*91df013fSAsim Jamshed<td width="8%"></td>
109*91df013fSAsim Jamshed<td width="7%"></td>
110*91df013fSAsim Jamshed<td width="85%">
111*91df013fSAsim Jamshed
112*91df013fSAsim Jamshed
113*91df013fSAsim Jamshed<p>// IP</p></td></tr>
114*91df013fSAsim Jamshed<tr valign="top" align="left">
115*91df013fSAsim Jamshed<td width="8%"></td>
116*91df013fSAsim Jamshed<td width="7%"></td>
117*91df013fSAsim Jamshed<td width="85%">
118*91df013fSAsim Jamshed
119*91df013fSAsim Jamshed
120*91df013fSAsim Jamshed<p>uint16_t ip_len;</p></td></tr>
121*91df013fSAsim Jamshed<tr valign="top" align="left">
122*91df013fSAsim Jamshed<td width="8%"></td>
123*91df013fSAsim Jamshed<td width="7%"></td>
124*91df013fSAsim Jamshed<td width="85%">
125*91df013fSAsim Jamshed
126*91df013fSAsim Jamshed
127*91df013fSAsim Jamshed<p>//TCP</p></td></tr>
128*91df013fSAsim Jamshed<tr valign="top" align="left">
129*91df013fSAsim Jamshed<td width="8%"></td>
130*91df013fSAsim Jamshed<td width="7%"></td>
131*91df013fSAsim Jamshed<td width="85%">
132*91df013fSAsim Jamshed
133*91df013fSAsim Jamshed
134*91df013fSAsim Jamshed<p>uint64_t offset; // TCP recv buffer offset</p></td></tr>
135*91df013fSAsim Jamshed<tr valign="top" align="left">
136*91df013fSAsim Jamshed<td width="8%"></td>
137*91df013fSAsim Jamshed<td width="7%"></td>
138*91df013fSAsim Jamshed<td width="85%">
139*91df013fSAsim Jamshed
140*91df013fSAsim Jamshed
141*91df013fSAsim Jamshed<p>uint16_t payloadlen;</p></td></tr>
142*91df013fSAsim Jamshed<tr valign="top" align="left">
143*91df013fSAsim Jamshed<td width="8%"></td>
144*91df013fSAsim Jamshed<td width="7%"></td>
145*91df013fSAsim Jamshed<td width="85%">
146*91df013fSAsim Jamshed
147*91df013fSAsim Jamshed
148*91df013fSAsim Jamshed<p>uint32_t seq;</p></td></tr>
149*91df013fSAsim Jamshed<tr valign="top" align="left">
150*91df013fSAsim Jamshed<td width="8%"></td>
151*91df013fSAsim Jamshed<td width="7%"></td>
152*91df013fSAsim Jamshed<td width="85%">
153*91df013fSAsim Jamshed
154*91df013fSAsim Jamshed
155*91df013fSAsim Jamshed<p>uint32_t ack_seq;</p></td></tr>
156*91df013fSAsim Jamshed<tr valign="top" align="left">
157*91df013fSAsim Jamshed<td width="8%"></td>
158*91df013fSAsim Jamshed<td width="7%"></td>
159*91df013fSAsim Jamshed<td width="85%">
160*91df013fSAsim Jamshed
161*91df013fSAsim Jamshed
162*91df013fSAsim Jamshed<p>uint16_t window;</p></td></tr>
163*91df013fSAsim Jamshed<tr valign="top" align="left">
164*91df013fSAsim Jamshed<td width="8%"></td>
165*91df013fSAsim Jamshed<td width="7%"></td>
166*91df013fSAsim Jamshed<td width="85%">
167*91df013fSAsim Jamshed
168*91df013fSAsim Jamshed
169*91df013fSAsim Jamshed<p>struct ethhdr *ethh;</p></td></tr>
170*91df013fSAsim Jamshed<tr valign="top" align="left">
171*91df013fSAsim Jamshed<td width="8%"></td>
172*91df013fSAsim Jamshed<td width="7%"></td>
173*91df013fSAsim Jamshed<td width="85%">
174*91df013fSAsim Jamshed
175*91df013fSAsim Jamshed
176*91df013fSAsim Jamshed<p>struct iphdr *iph;</p></td></tr>
177*91df013fSAsim Jamshed<tr valign="top" align="left">
178*91df013fSAsim Jamshed<td width="8%"></td>
179*91df013fSAsim Jamshed<td width="7%"></td>
180*91df013fSAsim Jamshed<td width="85%">
181*91df013fSAsim Jamshed
182*91df013fSAsim Jamshed
183*91df013fSAsim Jamshed<p>struct tcphdr *tcph;</p></td></tr>
184*91df013fSAsim Jamshed<tr valign="top" align="left">
185*91df013fSAsim Jamshed<td width="8%"></td>
186*91df013fSAsim Jamshed<td width="7%"></td>
187*91df013fSAsim Jamshed<td width="85%">
188*91df013fSAsim Jamshed
189*91df013fSAsim Jamshed
190*91df013fSAsim Jamshed<p>uint8_t *payload;</p></td></tr>
191*91df013fSAsim Jamshed</table>
192*91df013fSAsim Jamshed
193*91df013fSAsim Jamshed<p style="margin-left:11%;">}</p>
194*91df013fSAsim Jamshed
195*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">A successful
196*91df013fSAsim Jamshedcall to <b>mtcp_getlastpkt()</b> creates a copy of the last
197*91df013fSAsim Jamshedrecorded Ethernet frame and appends its meta-data (in host
198*91df013fSAsim Jamshedbyte order). The last four fields of <i>pinfo</i> (ethh,
199*91df013fSAsim Jamshediph, tcph and payload) point to the copied frame at the
200*91df013fSAsim Jamshedappropriate offsets. Please note that the packet buffer that
201*91df013fSAsim Jamshedcontains the copied frame is reused for future invocations
202*91df013fSAsim Jamshedof <b>mtcp_getlastpkt().</b></p>
203*91df013fSAsim Jamshed
204*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">An
205*91df013fSAsim Jamshed<b>mtcp_getlastpkt</b>() call takes an additional argument
206*91df013fSAsim Jamshednamed <i>mctx</i> that represents the per-core mTCP context
207*91df013fSAsim Jamshedin an application (see <b>mtcp_create_context()</b> for
208*91df013fSAsim Jamsheddetails).</p>
209*91df013fSAsim Jamshed
210*91df013fSAsim Jamshed<h2>RETURN VALUE
211*91df013fSAsim Jamshed<a name="RETURN VALUE"></a>
212*91df013fSAsim Jamshed</h2>
213*91df013fSAsim Jamshed
214*91df013fSAsim Jamshed
215*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">Returns 0 on
216*91df013fSAsim Jamshedsuccess; -1 on failure. In case of failure, <i>errno</i> is
217*91df013fSAsim Jamshedset appropriately.</p>
218*91df013fSAsim Jamshed
219*91df013fSAsim Jamshed<h2>ERRORS
220*91df013fSAsim Jamshed<a name="ERRORS"></a>
221*91df013fSAsim Jamshed</h2>
222*91df013fSAsim Jamshed
223*91df013fSAsim Jamshed
224*91df013fSAsim Jamshed<table width="100%" border="0" rules="none" frame="void"
225*91df013fSAsim Jamshed       cellspacing="0" cellpadding="0">
226*91df013fSAsim Jamshed<tr valign="top" align="left">
227*91df013fSAsim Jamshed<td width="11%"></td>
228*91df013fSAsim Jamshed<td width="11%">
229*91df013fSAsim Jamshed
230*91df013fSAsim Jamshed
231*91df013fSAsim Jamshed<p style="margin-top: 1em"><b>EACCES</b></p></td>
232*91df013fSAsim Jamshed<td width="12%"></td>
233*91df013fSAsim Jamshed<td width="66%">
234*91df013fSAsim Jamshed
235*91df013fSAsim Jamshed
236*91df013fSAsim Jamshed<p style="margin-top: 1em"><i>mctx</i> is invalid.</p></td></tr>
237*91df013fSAsim Jamshed<tr valign="top" align="left">
238*91df013fSAsim Jamshed<td width="11%"></td>
239*91df013fSAsim Jamshed<td width="11%">
240*91df013fSAsim Jamshed
241*91df013fSAsim Jamshed
242*91df013fSAsim Jamshed<p><b>EPERM</b></p></td>
243*91df013fSAsim Jamshed<td width="12%"></td>
244*91df013fSAsim Jamshed<td width="66%">
245*91df013fSAsim Jamshed
246*91df013fSAsim Jamshed
247*91df013fSAsim Jamshed<p>Permission denied.</p></td></tr>
248*91df013fSAsim Jamshed<tr valign="top" align="left">
249*91df013fSAsim Jamshed<td width="11%"></td>
250*91df013fSAsim Jamshed<td width="11%">
251*91df013fSAsim Jamshed
252*91df013fSAsim Jamshed
253*91df013fSAsim Jamshed<p><b>ENODATA</b></p></td>
254*91df013fSAsim Jamshed<td width="12%"></td>
255*91df013fSAsim Jamshed<td width="66%">
256*91df013fSAsim Jamshed
257*91df013fSAsim Jamshed
258*91df013fSAsim Jamshed<p>The last captured Ethernet frame for this flow does not
259*91df013fSAsim Jamshedexist. This can occur if <b>mtcp_getlastpkt()</b> is called
260*91df013fSAsim Jamshedduring e.g. connection initiation.</p></td></tr>
261*91df013fSAsim Jamshed<tr valign="top" align="left">
262*91df013fSAsim Jamshed<td width="11%"></td>
263*91df013fSAsim Jamshed<td width="11%">
264*91df013fSAsim Jamshed
265*91df013fSAsim Jamshed
266*91df013fSAsim Jamshed<p><b>EBADF</b></p></td>
267*91df013fSAsim Jamshed<td width="12%"></td>
268*91df013fSAsim Jamshed<td width="66%">
269*91df013fSAsim Jamshed
270*91df013fSAsim Jamshed
271*91df013fSAsim Jamshed<p><i>sockid</i> is not a valid socket descriptor for
272*91df013fSAsim Jamshedcreating a connection.</p></td></tr>
273*91df013fSAsim Jamshed</table>
274*91df013fSAsim Jamshed
275*91df013fSAsim Jamshed<h2>AUTHORS
276*91df013fSAsim Jamshed<a name="AUTHORS"></a>
277*91df013fSAsim Jamshed</h2>
278*91df013fSAsim Jamshed
279*91df013fSAsim Jamshed
280*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">mOS development
281*91df013fSAsim Jamshedteam &lt;[email protected]&gt;</p>
282*91df013fSAsim Jamshed
283*91df013fSAsim Jamshed<h2>SEE ALSO
284*91df013fSAsim Jamshed<a name="SEE ALSO"></a>
285*91df013fSAsim Jamshed</h2>
286*91df013fSAsim Jamshed
287*91df013fSAsim Jamshed
288*91df013fSAsim Jamshed
289*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em"><b>mtcp_create_context</b>(),
290*91df013fSAsim Jamshed<b>mtcp_setlastpkt</b>(), <b>mtcp_socket</b>(),</p>
291*91df013fSAsim Jamshed
292*91df013fSAsim Jamshed<h2>COLOPHON
293*91df013fSAsim Jamshed<a name="COLOPHON"></a>
294*91df013fSAsim Jamshed</h2>
295*91df013fSAsim Jamshed
296*91df013fSAsim Jamshed
297*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">This page is
298*91df013fSAsim Jamshedpart of mOS release 0.3 <i>docs</i> section. A description
299*91df013fSAsim Jamshedof the project, and information about reporting bugs, can be
300*91df013fSAsim Jamshedfound at http://mos.kaist.edu/.</p>
301*91df013fSAsim Jamshed<hr>
302*91df013fSAsim Jamshed</body>
303*91df013fSAsim Jamshed</html>
304