1*e5df9dc1SAsim Jamshed<!-- Creator : groff version 1.22.3 --> 2*e5df9dc1SAsim Jamshed<!-- CreationDate: Mon Aug 28 02:48:47 2017 --> 3*e5df9dc1SAsim Jamshed<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 4*e5df9dc1SAsim Jamshed"http://www.w3.org/TR/html4/loose.dtd"> 5*e5df9dc1SAsim Jamshed<html> 6*e5df9dc1SAsim Jamshed<head> 7*e5df9dc1SAsim Jamshed<meta name="generator" content="groff -Thtml, see www.gnu.org"> 8*e5df9dc1SAsim Jamshed<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> 9*e5df9dc1SAsim Jamshed<meta name="Content-Style" content="text/css"> 10*e5df9dc1SAsim Jamshed<style type="text/css"> 11*e5df9dc1SAsim Jamshed p { margin-top: 0; margin-bottom: 0; vertical-align: top } 12*e5df9dc1SAsim Jamshed pre { margin-top: 0; margin-bottom: 0; vertical-align: top } 13*e5df9dc1SAsim Jamshed table { margin-top: 0; margin-bottom: 0; vertical-align: top } 14*e5df9dc1SAsim Jamshed h1 { text-align: center } 15*e5df9dc1SAsim Jamshed</style> 16*e5df9dc1SAsim Jamshed<title>mtcp_define_event</title> 17*e5df9dc1SAsim Jamshed<link rel="stylesheet" href="./common.css"> 18*e5df9dc1SAsim Jamshed</head> 19*e5df9dc1SAsim Jamshed<body> 20*e5df9dc1SAsim Jamshed<div class="main"> 21*e5df9dc1SAsim Jamshed<h1 align="center">mtcp_define_event</h1> 22*e5df9dc1SAsim Jamshed<!-- 23*e5df9dc1SAsim Jamshed<a href="#NAME">NAME</a><br> 24*e5df9dc1SAsim Jamshed<a href="#SYNOPSIS">SYNOPSIS</a><br> 25*e5df9dc1SAsim Jamshed<a href="#DESCRIPTION">DESCRIPTION</a><br> 26*e5df9dc1SAsim Jamshed<a href="#RETURN VALUE">RETURN VALUE</a><br> 27*e5df9dc1SAsim Jamshed<a href="#ERRORS">ERRORS</a><br> 28*e5df9dc1SAsim Jamshed<a href="#AUTHORS">AUTHORS</a><br> 29*e5df9dc1SAsim Jamshed<a href="#SEE ALSO">SEE ALSO</a><br> 30*e5df9dc1SAsim Jamshed<a href="#COLOPHON">COLOPHON</a><br> 31*e5df9dc1SAsim Jamshed 32*e5df9dc1SAsim Jamshed<hr> 33*e5df9dc1SAsim Jamshed--> 34*e5df9dc1SAsim Jamshed 35*e5df9dc1SAsim Jamshed<h2>NAME 36*e5df9dc1SAsim Jamshed<a name="NAME"></a> 37*e5df9dc1SAsim Jamshed</h2> 38*e5df9dc1SAsim Jamshed 39*e5df9dc1SAsim Jamshed 40*e5df9dc1SAsim Jamshed 41*e5df9dc1SAsim Jamshed<p style="margin-left:11%; margin-top: 1em">mtcp_define_event 42*e5df9dc1SAsim Jamshed− define a user-defined event function</p> 43*e5df9dc1SAsim Jamshed 44*e5df9dc1SAsim Jamshed<h2>SYNOPSIS 45*e5df9dc1SAsim Jamshed<a name="SYNOPSIS"></a> 46*e5df9dc1SAsim Jamshed</h2> 47*e5df9dc1SAsim Jamshed 48*e5df9dc1SAsim Jamshed 49*e5df9dc1SAsim Jamshed<p style="margin-left:11%; margin-top: 1em"><b>#include 50*e5df9dc1SAsim Jamshed<mos_api.h></b></p> 51*e5df9dc1SAsim Jamshed 52*e5df9dc1SAsim Jamshed<p style="margin-left:11%; margin-top: 1em"><b>int 53*e5df9dc1SAsim Jamshedmtcp_define_event(event_t</b> <i>event</i><b>, filter_t</b> 54*e5df9dc1SAsim Jamshed<i>filter</i><b>, struct filter_arg *</b> <i>arg</i> 55*e5df9dc1SAsim Jamshed<b>);</b></p> 56*e5df9dc1SAsim Jamshed 57*e5df9dc1SAsim Jamshed<h2>DESCRIPTION 58*e5df9dc1SAsim Jamshed<a name="DESCRIPTION"></a> 59*e5df9dc1SAsim Jamshed</h2> 60*e5df9dc1SAsim Jamshed 61*e5df9dc1SAsim Jamshed 62*e5df9dc1SAsim Jamshed 63*e5df9dc1SAsim Jamshed<p style="margin-left:11%; margin-top: 1em"><b>mtcp_define_event</b>() 64*e5df9dc1SAsim Jamshedcreates a new user-defined event (UDE) with a base event 65*e5df9dc1SAsim Jamshed<i>event</i> and a filter function <i>filter</i> with a 66*e5df9dc1SAsim Jamshedfilter argument <i>arg</i></p> 67*e5df9dc1SAsim Jamshed 68*e5df9dc1SAsim Jamshed<p style="margin-left:11%; margin-top: 1em">More 69*e5df9dc1SAsim Jamshedspecifically, a UDE is defined as a based event and a 70*e5df9dc1SAsim Jamshedboolean filter function that determines the event condition. 71*e5df9dc1SAsim JamshedWhen the base event for a UDE is raised, mOS triggers the 72*e5df9dc1SAsim JamshedUDE only when the filter function is evaluated to be 73*e5df9dc1SAsim Jamshedtrue.</p> 74*e5df9dc1SAsim Jamshed 75*e5df9dc1SAsim Jamshed<p style="margin-left:11%; margin-top: 1em"><i>event</i> 76*e5df9dc1SAsim Jamshedargument is a typedef’ed uint64_t integer. It can be 77*e5df9dc1SAsim Jamshedeither a built-in event or a user-defined event. mOS 78*e5df9dc1SAsim Jamshedprovides the following built-in events that a user can 79*e5df9dc1SAsim Jamshedemploy:</p> 80*e5df9dc1SAsim Jamshed 81*e5df9dc1SAsim Jamshed 82*e5df9dc1SAsim Jamshed<p align="center" style="margin-top: 1em"> 83*e5df9dc1SAsim Jamshed <table align="center" border="1" class="docutils"> 84*e5df9dc1SAsim Jamshed <colgroup> 85*e5df9dc1SAsim Jamshed <col width="40%" /> 86*e5df9dc1SAsim Jamshed <col width="60%" /> 87*e5df9dc1SAsim Jamshed </colgroup> 88*e5df9dc1SAsim Jamshed <tbody valign="top"> 89*e5df9dc1SAsim Jamshed <tr class="row-odd"><td>Built-in event</td> 90*e5df9dc1SAsim Jamshed <td>Description</td> 91*e5df9dc1SAsim Jamshed </tr> 92*e5df9dc1SAsim Jamshed <tr class="row-even"><td><code class="docutils literal"><span class="pre">MOS_ON_PKT_IN</span></code></td> 93*e5df9dc1SAsim Jamshed <td>In-flow TCP packet arrival</td> 94*e5df9dc1SAsim Jamshed </tr> 95*e5df9dc1SAsim Jamshed <tr class="row-odd"><td><code class="docutils literal"><span class="pre">MOS_ON_CONN_START</span></code></td> 96*e5df9dc1SAsim Jamshed <td>New connection initiation</td> 97*e5df9dc1SAsim Jamshed </tr> 98*e5df9dc1SAsim Jamshed <tr class="row-even"><td><code class="docutils literal"><span class="pre">MOS_ON_REXMIT</span></code></td> 99*e5df9dc1SAsim Jamshed <td>TCP retransmission</td> 100*e5df9dc1SAsim Jamshed </tr> 101*e5df9dc1SAsim Jamshed <tr class="row-odd"><td><code class="docutils literal"><span class="pre">MOS_ON_TCP_STATE_CHANGE</span></code></td> 102*e5df9dc1SAsim Jamshed <td>TCP state change</td> 103*e5df9dc1SAsim Jamshed </tr> 104*e5df9dc1SAsim Jamshed <tr class="row-even"><td><code class="docutils literal"><span class="pre">MOS_ON_CONN_END</span></code></td> 105*e5df9dc1SAsim Jamshed <td>Connection termination</td> 106*e5df9dc1SAsim Jamshed </tr> 107*e5df9dc1SAsim Jamshed <tr class="row-odd"><td><code class="docutils literal"><span class="pre">MOS_ON_CONN_NEW_DATA</span></code></td> 108*e5df9dc1SAsim Jamshed <td>New flow payload</td> 109*e5df9dc1SAsim Jamshed </tr> 110*e5df9dc1SAsim Jamshed <tr class="row-even"><td><code class="docutils literal"><span class="pre">MOS_ON_ORPHAN</span></code></td> 111*e5df9dc1SAsim Jamshed <td>non-TCP packet</td> 112*e5df9dc1SAsim Jamshed </tr> 113*e5df9dc1SAsim Jamshed <tr class="row-odd"><td><code class="docutils literal"><span class="pre">MOS_ON_ERROR</span></code></td> 114*e5df9dc1SAsim Jamshed <td>Error report (e.g., receive buffer full)</td> 115*e5df9dc1SAsim Jamshed </tr> 116*e5df9dc1SAsim Jamshed </tbody> 117*e5df9dc1SAsim Jamshed </table> 118*e5df9dc1SAsim Jamshed</p> 119*e5df9dc1SAsim Jamshed 120*e5df9dc1SAsim Jamshed<p style="margin-left:11%; margin-top: 1em">A typical usage 121*e5df9dc1SAsim Jamshedof <b>mtcp_define_event()</b> is illustrated below:</p> 122*e5df9dc1SAsim Jamshed 123*e5df9dc1SAsim Jamshed 124*e5df9dc1SAsim Jamshed<p style="margin-left:11%; margin-top: 1em">/*************************************************/ 125*e5df9dc1SAsim Jamshed<br> 126*e5df9dc1SAsim Jamshed// creates a passive monitoring socket with its scope <br> 127*e5df9dc1SAsim Jamsheds = mtcp_socket(m, AF_INET, MOS_SOCK_MONITOR_STREAM, 0); 128*e5df9dc1SAsim Jamshed<br> 129*e5df9dc1SAsim Jamshedft.stream_syn_filter = "dst net 216.58 and dst port 130*e5df9dc1SAsim Jamshed80"; <br> 131*e5df9dc1SAsim Jamshedmtcp_bind_monitor_filter(m, s, &ft);</p> 132*e5df9dc1SAsim Jamshed 133*e5df9dc1SAsim Jamshed<p style="margin-left:11%; margin-top: 1em">// defines a 134*e5df9dc1SAsim Jamsheduser-defined event that detects an HTTP request <br> 135*e5df9dc1SAsim Jamshedhev = mtcp_define_event(MOS_ON_CONN_NEW_DATA, IsHTTPRequest, 136*e5df9dc1SAsim JamshedNULL); <br> 137*e5df9dc1SAsim Jamshed/*************************************************/</p> 138*e5df9dc1SAsim Jamshed 139*e5df9dc1SAsim Jamshed<h2>RETURN VALUE 140*e5df9dc1SAsim Jamshed<a name="RETURN VALUE"></a> 141*e5df9dc1SAsim Jamshed</h2> 142*e5df9dc1SAsim Jamshed 143*e5df9dc1SAsim Jamshed 144*e5df9dc1SAsim Jamshed<p style="margin-left:11%; margin-top: 1em">Returns 0 on 145*e5df9dc1SAsim Jamshedsuccess; -1 on failure.</p> 146*e5df9dc1SAsim Jamshed 147*e5df9dc1SAsim Jamshed<h2>ERRORS 148*e5df9dc1SAsim Jamshed<a name="ERRORS"></a> 149*e5df9dc1SAsim Jamshed</h2> 150*e5df9dc1SAsim Jamshed 151*e5df9dc1SAsim Jamshed 152*e5df9dc1SAsim Jamshed<table width="100%" border="0" rules="none" frame="void" 153*e5df9dc1SAsim Jamshed cellspacing="0" cellpadding="0"> 154*e5df9dc1SAsim Jamshed<tr valign="top" align="left"> 155*e5df9dc1SAsim Jamshed<td width="11%"></td> 156*e5df9dc1SAsim Jamshed<td width="9%"> 157*e5df9dc1SAsim Jamshed 158*e5df9dc1SAsim Jamshed 159*e5df9dc1SAsim Jamshed<p style="margin-top: 1em"><b>EINVAL</b></p></td> 160*e5df9dc1SAsim Jamshed<td width="14%"></td> 161*e5df9dc1SAsim Jamshed<td width="63%"> 162*e5df9dc1SAsim Jamshed 163*e5df9dc1SAsim Jamshed 164*e5df9dc1SAsim Jamshed<p style="margin-top: 1em">The socket descriptor, 165*e5df9dc1SAsim Jamshed<i>sockid</i> is invalid.</p></td> 166*e5df9dc1SAsim Jamshed<td width="3%"> 167*e5df9dc1SAsim Jamshed</td></tr> 168*e5df9dc1SAsim Jamshed</table> 169*e5df9dc1SAsim Jamshed 170*e5df9dc1SAsim Jamshed<h2>AUTHORS 171*e5df9dc1SAsim Jamshed<a name="AUTHORS"></a> 172*e5df9dc1SAsim Jamshed</h2> 173*e5df9dc1SAsim Jamshed 174*e5df9dc1SAsim Jamshed<!-----------------------------------------------------------> 175*e5df9dc1SAsim Jamshed<h2>EXAMPLES 176*e5df9dc1SAsim Jamshed<a name="EXAMPLES"></a> 177*e5df9dc1SAsim Jamshed</h2> 178*e5df9dc1SAsim Jamshed 179*e5df9dc1SAsim Jamshed<p style="margin-left:11%; margin-top: 1em"> 180*e5df9dc1SAsim Jamshed <a href="http://mos.kaist.edu/guide/programmer/05_api_example.html#registering-for-user-defined-events-udes"> 181*e5df9dc1SAsim Jamshed http://mos.kaist.edu/guide/programmer/05_api_example.html#registering-for-user-defined-events-udes 182*e5df9dc1SAsim Jamshed </a> 183*e5df9dc1SAsim Jamshed</p> 184*e5df9dc1SAsim Jamshed<!-----------------------------------------------------------> 185*e5df9dc1SAsim Jamshed 186*e5df9dc1SAsim Jamshed<p style="margin-left:11%; margin-top: 1em">mOS development 187*e5df9dc1SAsim Jamshedteam <[email protected]></p> 188*e5df9dc1SAsim Jamshed 189*e5df9dc1SAsim Jamshed<h2>SEE ALSO 190*e5df9dc1SAsim Jamshed<a name="SEE ALSO"></a> 191*e5df9dc1SAsim Jamshed</h2> 192*e5df9dc1SAsim Jamshed 193*e5df9dc1SAsim Jamshed 194*e5df9dc1SAsim Jamshed 195*e5df9dc1SAsim Jamshed<p style="margin-left:11%; margin-top: 1em"><b>mtcp_socket</b>(), 196*e5df9dc1SAsim Jamshed<b>mtcp_bind_monitor_filter</b>(), 197*e5df9dc1SAsim Jamshed<b>mtcp_register_callback</b>()</p> 198*e5df9dc1SAsim Jamshed 199*e5df9dc1SAsim Jamshed<h2>COLOPHON 200*e5df9dc1SAsim Jamshed<a name="COLOPHON"></a> 201*e5df9dc1SAsim Jamshed</h2> 202*e5df9dc1SAsim Jamshed 203*e5df9dc1SAsim Jamshed 204*e5df9dc1SAsim Jamshed<p style="margin-left:11%; margin-top: 1em">This page is 205*e5df9dc1SAsim Jamshedpart of mOS release 0.3 <i>docs</i> section. A description 206*e5df9dc1SAsim Jamshedof the project, and information about reporting bugs, can be 207*e5df9dc1SAsim Jamshedfound at http://mos.kaist.edu/.</p> 208*e5df9dc1SAsim Jamshed<hr> 209*e5df9dc1SAsim Jamshed<div class="footer"> 210*e5df9dc1SAsim Jamshed <img src="back-arrow.jpg" width="2%" height="2%"><a href="http://mos.kaist.edu/index_man.html">Back to Index</a> 211*e5df9dc1SAsim Jamshed</div> 212*e5df9dc1SAsim Jamshed</div> 213*e5df9dc1SAsim Jamshed</body> 214*e5df9dc1SAsim Jamshed</html> 215