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− 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<mos_api.h></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 <[email protected]></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