1e5df9dc1SAsim Jamshed<!-- Creator     : groff version 1.22.3 -->
2e5df9dc1SAsim Jamshed<!-- CreationDate: Sat Aug 26 16:40:01 2017 -->
3e5df9dc1SAsim Jamshed<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
4e5df9dc1SAsim Jamshed"http://www.w3.org/TR/html4/loose.dtd">
5e5df9dc1SAsim Jamshed<html>
6e5df9dc1SAsim Jamshed<head>
7e5df9dc1SAsim Jamshed<meta name="generator" content="groff -Thtml, see www.gnu.org">
8e5df9dc1SAsim Jamshed<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
9e5df9dc1SAsim Jamshed<meta name="Content-Style" content="text/css">
10e5df9dc1SAsim Jamshed<style type="text/css">
11e5df9dc1SAsim Jamshed       p       { margin-top: 0; margin-bottom: 0; vertical-align: top }
12e5df9dc1SAsim Jamshed       pre     { margin-top: 0; margin-bottom: 0; vertical-align: top }
13e5df9dc1SAsim Jamshed       table   { margin-top: 0; margin-bottom: 0; vertical-align: top }
14e5df9dc1SAsim Jamshed       h1      { text-align: center }
15e5df9dc1SAsim Jamshed</style>
16e5df9dc1SAsim Jamshed<title>mtcp_sendpkt</title>
17e5df9dc1SAsim Jamshed<link rel="stylesheet" href="./common.css">
18e5df9dc1SAsim Jamshed</head>
19e5df9dc1SAsim Jamshed<body>
20e5df9dc1SAsim Jamshed<div class="main">
21e5df9dc1SAsim Jamshed<h1 align="center">mtcp_sendpkt</h1>
22e5df9dc1SAsim Jamshed<!--
23e5df9dc1SAsim Jamshed<a href="#NAME">NAME</a><br>
24e5df9dc1SAsim Jamshed<a href="#SYNOPSIS">SYNOPSIS</a><br>
25e5df9dc1SAsim Jamshed<a href="#DESCRIPTION">DESCRIPTION</a><br>
26e5df9dc1SAsim Jamshed<a href="#RETURN VALUE">RETURN VALUE</a><br>
27e5df9dc1SAsim Jamshed<a href="#ERRORS">ERRORS</a><br>
28e5df9dc1SAsim Jamshed<a href="#AUTHORS">AUTHORS</a><br>
29e5df9dc1SAsim Jamshed<a href="#SEE ALSO">SEE ALSO</a><br>
30e5df9dc1SAsim Jamshed<a href="#COLOPHON">COLOPHON</a><br>
31e5df9dc1SAsim Jamshed
32e5df9dc1SAsim Jamshed<hr>
33e5df9dc1SAsim Jamshed-->
34e5df9dc1SAsim Jamshed
35e5df9dc1SAsim Jamshed<h2>NAME
36e5df9dc1SAsim Jamshed<a name="NAME"></a>
37e5df9dc1SAsim Jamshed</h2>
38e5df9dc1SAsim Jamshed
39e5df9dc1SAsim Jamshed
40e5df9dc1SAsim Jamshed<p style="margin-left:11%; margin-top: 1em">mtcp_sendpkt
41e5df9dc1SAsim Jamshed&minus; Sends a self-constructed TCP packet to network</p>
42e5df9dc1SAsim Jamshed
43e5df9dc1SAsim Jamshed<h2>SYNOPSIS
44e5df9dc1SAsim Jamshed<a name="SYNOPSIS"></a>
45e5df9dc1SAsim Jamshed</h2>
46e5df9dc1SAsim Jamshed
47e5df9dc1SAsim Jamshed
48e5df9dc1SAsim Jamshed<p style="margin-left:11%; margin-top: 1em"><b>#include
49e5df9dc1SAsim Jamshed&lt;mos_api.h&gt;</b></p>
50e5df9dc1SAsim Jamshed
51e5df9dc1SAsim Jamshed<p style="margin-left:11%; margin-top: 1em"><b>int
52e5df9dc1SAsim Jamshedmtcp_sendpkt(mctx_t</b> <i>mctx</i><b>, int</b>
53e5df9dc1SAsim Jamshed<i>sockid</i><b>, struct pkt_info
54e5df9dc1SAsim Jamshed*</b><i>pinfo</i><b>);</b></p>
55e5df9dc1SAsim Jamshed
56e5df9dc1SAsim Jamshed<h2>DESCRIPTION
57e5df9dc1SAsim Jamshed<a name="DESCRIPTION"></a>
58e5df9dc1SAsim Jamshed</h2>
59e5df9dc1SAsim Jamshed
60e5df9dc1SAsim Jamshed
61e5df9dc1SAsim Jamshed
62e5df9dc1SAsim Jamshed<p style="margin-left:11%; margin-top: 1em"><b>mtcp_sendpkt</b>()
63e5df9dc1SAsim Jamshedsends a self-constructed TCP packet for a given flow to
64e5df9dc1SAsim Jamshednetwork. The user can select the socket descriptor using
65e5df9dc1SAsim Jamshed<i>sockid</i> and the <i>pinfo</i> points to an instance of
66e5df9dc1SAsim Jamshed<b>struct</b> pkt_info that is allocated and filled by the
67e5df9dc1SAsim Jamsheduser via mtcp_getlastpkt() function.
68e5df9dc1SAsim JamshedIt is the user's responsibility to allocate the <i>pkt_info </i>
69e5df9dc1SAsim Jamshedstructure before the function call, and free the
70e5df9dc1SAsim Jamshed<i>pkt_info</i> after the function call. The structure is
71e5df9dc1SAsim Jamsheddefined as:</p>
72e5df9dc1SAsim Jamshed
73e5df9dc1SAsim Jamshed<p style="margin-left:11%; margin-top: 1em">struct pkt_info
74e5df9dc1SAsim Jamshed{</p>
75e5df9dc1SAsim Jamshed
76e5df9dc1SAsim Jamshed<table width="100%" border="0" rules="none" frame="void"
77e5df9dc1SAsim Jamshed       cellspacing="0" cellpadding="0">
78e5df9dc1SAsim Jamshed<tr valign="top" align="left">
79e5df9dc1SAsim Jamshed<td width="8%"></td>
80e5df9dc1SAsim Jamshed<td width="7%"></td>
81e5df9dc1SAsim Jamshed<td width="85%">
82e5df9dc1SAsim Jamshed
83e5df9dc1SAsim Jamshed
84e5df9dc1SAsim Jamshed<p>// pkt recving time</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>
92e5df9dc1SAsim Jamshed<tr valign="top" align="left">
93e5df9dc1SAsim Jamshed<td width="8%"></td>
94e5df9dc1SAsim Jamshed<td width="7%"></td>
95e5df9dc1SAsim Jamshed<td width="85%">
96e5df9dc1SAsim Jamshed
97e5df9dc1SAsim Jamshed
98e5df9dc1SAsim Jamshed<p>// ETH</p></td></tr>
99e5df9dc1SAsim Jamshed<tr valign="top" align="left">
100e5df9dc1SAsim Jamshed<td width="8%"></td>
101e5df9dc1SAsim Jamshed<td width="7%"></td>
102e5df9dc1SAsim Jamshed<td width="85%">
103e5df9dc1SAsim Jamshed
104e5df9dc1SAsim Jamshed
105e5df9dc1SAsim Jamshed<p>uint16_t eth_len;</p></td></tr>
106e5df9dc1SAsim Jamshed<tr valign="top" align="left">
107e5df9dc1SAsim Jamshed<td width="8%"></td>
108e5df9dc1SAsim Jamshed<td width="7%"></td>
109e5df9dc1SAsim Jamshed<td width="85%">
110e5df9dc1SAsim Jamshed
111e5df9dc1SAsim Jamshed
112e5df9dc1SAsim Jamshed<p>// IP</p></td></tr>
113e5df9dc1SAsim Jamshed<tr valign="top" align="left">
114e5df9dc1SAsim Jamshed<td width="8%"></td>
115e5df9dc1SAsim Jamshed<td width="7%"></td>
116e5df9dc1SAsim Jamshed<td width="85%">
117e5df9dc1SAsim Jamshed
118e5df9dc1SAsim Jamshed
119e5df9dc1SAsim Jamshed<p>uint16_t ip_len;</p></td></tr>
120e5df9dc1SAsim Jamshed<tr valign="top" align="left">
121e5df9dc1SAsim Jamshed<td width="8%"></td>
122e5df9dc1SAsim Jamshed<td width="7%"></td>
123e5df9dc1SAsim Jamshed<td width="85%">
124e5df9dc1SAsim Jamshed
125e5df9dc1SAsim Jamshed
126e5df9dc1SAsim Jamshed<p>//TCP</p></td></tr>
127e5df9dc1SAsim Jamshed<tr valign="top" align="left">
128e5df9dc1SAsim Jamshed<td width="8%"></td>
129e5df9dc1SAsim Jamshed<td width="7%"></td>
130e5df9dc1SAsim Jamshed<td width="85%">
131e5df9dc1SAsim Jamshed
132e5df9dc1SAsim Jamshed
133e5df9dc1SAsim Jamshed<p>uint64_t offset; // TCP recv buffer offset</p></td></tr>
134e5df9dc1SAsim Jamshed<tr valign="top" align="left">
135e5df9dc1SAsim Jamshed<td width="8%"></td>
136e5df9dc1SAsim Jamshed<td width="7%"></td>
137e5df9dc1SAsim Jamshed<td width="85%">
138e5df9dc1SAsim Jamshed
139e5df9dc1SAsim Jamshed
140e5df9dc1SAsim Jamshed<p>uint16_t payloadlen;</p></td></tr>
141e5df9dc1SAsim Jamshed<tr valign="top" align="left">
142e5df9dc1SAsim Jamshed<td width="8%"></td>
143e5df9dc1SAsim Jamshed<td width="7%"></td>
144e5df9dc1SAsim Jamshed<td width="85%">
145e5df9dc1SAsim Jamshed
146e5df9dc1SAsim Jamshed
147e5df9dc1SAsim Jamshed<p>uint32_t seq;</p></td></tr>
148e5df9dc1SAsim Jamshed<tr valign="top" align="left">
149e5df9dc1SAsim Jamshed<td width="8%"></td>
150e5df9dc1SAsim Jamshed<td width="7%"></td>
151e5df9dc1SAsim Jamshed<td width="85%">
152e5df9dc1SAsim Jamshed
153e5df9dc1SAsim Jamshed
154e5df9dc1SAsim Jamshed<p>uint32_t ack_seq;</p></td></tr>
155e5df9dc1SAsim Jamshed<tr valign="top" align="left">
156e5df9dc1SAsim Jamshed<td width="8%"></td>
157e5df9dc1SAsim Jamshed<td width="7%"></td>
158e5df9dc1SAsim Jamshed<td width="85%">
159e5df9dc1SAsim Jamshed
160e5df9dc1SAsim Jamshed
161e5df9dc1SAsim Jamshed<p>uint16_t window;</p></td></tr>
162e5df9dc1SAsim Jamshed<tr valign="top" align="left">
163e5df9dc1SAsim Jamshed<td width="8%"></td>
164e5df9dc1SAsim Jamshed<td width="7%"></td>
165e5df9dc1SAsim Jamshed<td width="85%">
166e5df9dc1SAsim Jamshed
167e5df9dc1SAsim Jamshed
168e5df9dc1SAsim Jamshed<p>struct ethhdr *ethh;</p></td></tr>
169e5df9dc1SAsim Jamshed<tr valign="top" align="left">
170e5df9dc1SAsim Jamshed<td width="8%"></td>
171e5df9dc1SAsim Jamshed<td width="7%"></td>
172e5df9dc1SAsim Jamshed<td width="85%">
173e5df9dc1SAsim Jamshed
174e5df9dc1SAsim Jamshed
175e5df9dc1SAsim Jamshed<p>struct iphdr *iph;</p></td></tr>
176e5df9dc1SAsim Jamshed<tr valign="top" align="left">
177e5df9dc1SAsim Jamshed<td width="8%"></td>
178e5df9dc1SAsim Jamshed<td width="7%"></td>
179e5df9dc1SAsim Jamshed<td width="85%">
180e5df9dc1SAsim Jamshed
181e5df9dc1SAsim Jamshed
182e5df9dc1SAsim Jamshed<p>struct tcphdr *tcph;</p></td></tr>
183e5df9dc1SAsim Jamshed<tr valign="top" align="left">
184e5df9dc1SAsim Jamshed<td width="8%"></td>
185e5df9dc1SAsim Jamshed<td width="7%"></td>
186e5df9dc1SAsim Jamshed<td width="85%">
187e5df9dc1SAsim Jamshed
188e5df9dc1SAsim Jamshed
189e5df9dc1SAsim Jamshed<p>uint8_t *payload;</p></td></tr>
190e5df9dc1SAsim Jamshed</table>
191e5df9dc1SAsim Jamshed
192e5df9dc1SAsim Jamshed<p style="margin-left:11%;">}</p>
193e5df9dc1SAsim Jamshed
194e5df9dc1SAsim Jamshed<p style="margin-left:11%; margin-top: 1em">A successful
195e5df9dc1SAsim Jamshedcall to <b>mtcp_sendpkt()</b> constructs a TCP packet based
196e5df9dc1SAsim Jamshedon the given packet information <i>pinfo</i> and send the
197e5df9dc1SAsim Jamshedpacket to the network.</p>
198e5df9dc1SAsim Jamshed
199e5df9dc1SAsim Jamshed<p style="margin-left:11%; margin-top: 1em">An
200e5df9dc1SAsim Jamshed<b>mtcp_sendpkt</b>() call takes an additional argument
201e5df9dc1SAsim Jamshednamed <i>mctx</i> that represents the per-core mTCP context
202e5df9dc1SAsim Jamshedin an application (see <b>mtcp_create_context()</b> for
203e5df9dc1SAsim Jamsheddetails).</p>
204e5df9dc1SAsim Jamshed
205e5df9dc1SAsim Jamshed<h2>RETURN VALUE
206e5df9dc1SAsim Jamshed<a name="RETURN VALUE"></a>
207e5df9dc1SAsim Jamshed</h2>
208e5df9dc1SAsim Jamshed
209e5df9dc1SAsim Jamshed
210e5df9dc1SAsim Jamshed<p style="margin-left:11%; margin-top: 1em">Returns 0 on
211e5df9dc1SAsim Jamshedsuccess; -1 on failure. In case of failure, <i>errno</i> is
212e5df9dc1SAsim Jamshedset appropriately.</p>
213e5df9dc1SAsim Jamshed
214e5df9dc1SAsim Jamshed<h2>ERRORS
215e5df9dc1SAsim Jamshed<a name="ERRORS"></a>
216e5df9dc1SAsim Jamshed</h2>
217e5df9dc1SAsim Jamshed
218e5df9dc1SAsim Jamshed
219e5df9dc1SAsim Jamshed<table width="100%" border="0" rules="none" frame="void"
220e5df9dc1SAsim Jamshed       cellspacing="0" cellpadding="0">
221e5df9dc1SAsim Jamshed<tr valign="top" align="left">
222e5df9dc1SAsim Jamshed<td width="11%"></td>
223e5df9dc1SAsim Jamshed<td width="11%">
224e5df9dc1SAsim Jamshed
225e5df9dc1SAsim Jamshed
226e5df9dc1SAsim Jamshed<p style="margin-top: 1em"><b>EACCES</b></p></td>
227e5df9dc1SAsim Jamshed<td width="12%"></td>
228e5df9dc1SAsim Jamshed<td width="66%">
229e5df9dc1SAsim Jamshed
230e5df9dc1SAsim Jamshed
231e5df9dc1SAsim Jamshed<p style="margin-top: 1em"><i>mctx</i> is invalid, or
232e5df9dc1SAsim Jamshed<i>pinfo</i> is NULL.</p></td></tr>
233e5df9dc1SAsim Jamshed<tr valign="top" align="left">
234e5df9dc1SAsim Jamshed<td width="11%"></td>
235e5df9dc1SAsim Jamshed<td width="11%">
236e5df9dc1SAsim Jamshed
237e5df9dc1SAsim Jamshed
238e5df9dc1SAsim Jamshed<p><b>ENODATA</b></p></td>
239e5df9dc1SAsim Jamshed<td width="12%"></td>
240e5df9dc1SAsim Jamshed<td width="66%">
241e5df9dc1SAsim Jamshed
242e5df9dc1SAsim Jamshed
243e5df9dc1SAsim Jamshed<p>The packet information does not contain a valid IP
244e5df9dc1SAsim Jamshedheader or TCP header information. This normally does not
245e5df9dc1SAsim Jamshedoccur when we put the result of the <b>mtcp_sendpkt()</b>
246e5df9dc1SAsim Jamshedfunction. Therefore, it means that the user modified the
247e5df9dc1SAsim Jamshedpacket information inappropriately.</p></td></tr>
248e5df9dc1SAsim Jamshed</table>
249e5df9dc1SAsim Jamshed
250e5df9dc1SAsim Jamshed<h2>AUTHORS
251e5df9dc1SAsim Jamshed<a name="AUTHORS"></a>
252e5df9dc1SAsim Jamshed</h2>
253e5df9dc1SAsim Jamshed
254e5df9dc1SAsim Jamshed
255e5df9dc1SAsim Jamshed<p style="margin-left:11%; margin-top: 1em">mOS development
256e5df9dc1SAsim Jamshedteam &lt;[email protected]&gt;</p>
257e5df9dc1SAsim Jamshed
258*626fc701SYoungGyoun
259*626fc701SYoungGyoun<!----------------------------------------------------------->
260*626fc701SYoungGyoun<h2>EXAMPLES
261*626fc701SYoungGyoun  <a name="EXAMPLES"></a>
262*626fc701SYoungGyoun</h2>
263*626fc701SYoungGyoun
264*626fc701SYoungGyoun<p style="margin-left:11%; margin-top: 1em">
265*626fc701SYoungGyoun  <a href="http://mos.kaist.edu/guide/programmer/05_api_example.html#generating-and-sending-a-packet">
266*626fc701SYoungGyoun	http://mos.kaist.edu/guide/programmer/05_api_example.html#generating-and-sending-a-packet
267*626fc701SYoungGyoun  </a>
268*626fc701SYoungGyoun</p>
269*626fc701SYoungGyoun<!----------------------------------------------------------->
270*626fc701SYoungGyoun
271*626fc701SYoungGyoun
272e5df9dc1SAsim Jamshed<h2>SEE ALSO
273e5df9dc1SAsim Jamshed<a name="SEE ALSO"></a>
274e5df9dc1SAsim Jamshed</h2>
275e5df9dc1SAsim Jamshed
276e5df9dc1SAsim Jamshed
277e5df9dc1SAsim Jamshed
278e5df9dc1SAsim Jamshed<p style="margin-left:11%; margin-top: 1em"><b>mtcp_create_context</b>(),
279e5df9dc1SAsim Jamshed<b>mtcp_setlastpkt</b>(), <b>mtcp_socket</b>(),</p>
280e5df9dc1SAsim Jamshed
281e5df9dc1SAsim Jamshed<h2>COLOPHON
282e5df9dc1SAsim Jamshed<a name="COLOPHON"></a>
283e5df9dc1SAsim Jamshed</h2>
284e5df9dc1SAsim Jamshed
285e5df9dc1SAsim Jamshed
286e5df9dc1SAsim Jamshed<p style="margin-left:11%; margin-top: 1em">This page is
287e5df9dc1SAsim Jamshedpart of mOS release 0.3 <i>docs</i> section. A description
288e5df9dc1SAsim Jamshedof the project, and information about reporting bugs, can be
289e5df9dc1SAsim Jamshedfound at http://mos.kaist.edu/.</p>
290e5df9dc1SAsim Jamshed<hr>
291e5df9dc1SAsim Jamshed<div class="footer">
292e5df9dc1SAsim Jamshed  <img src="back-arrow.jpg" width="2%" height="2%"><a href="http://mos.kaist.edu/index_man.html">Back to Index</a>
293e5df9dc1SAsim Jamshed</div>
294e5df9dc1SAsim Jamshed</div>
295e5df9dc1SAsim Jamshed</body>
296e5df9dc1SAsim Jamshed</html>
297