191df013fSAsim Jamshed<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
291df013fSAsim Jamshed<HTML><HEAD><TITLE>Man page of mtcp_register_callback</TITLE>
391df013fSAsim Jamshed<link rel="stylesheet" href="./common.css">
491df013fSAsim Jamshed</HEAD><BODY>
591df013fSAsim Jamshed<div class="main">
691df013fSAsim Jamshed<H1 align="center">mtcp_register_callback</H1>
791df013fSAsim Jamshed
891df013fSAsim Jamshed<H2>NAME</H2>
991df013fSAsim Jamshed
1091df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">mtcp_register_callback - register/de-register a callback function on a specified hook point</p>
1191df013fSAsim Jamshed<A NAME="lbAC">&nbsp;</A>
1291df013fSAsim Jamshed<H2>SYNOPSIS</H2>
1391df013fSAsim Jamshed
1491df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">
1591df013fSAsim Jamshed<B>#include &lt;<A HREF="file:///usr/include/mos_api.h">mos_api.h</A>&gt;</B></P>
1691df013fSAsim Jamshed
1791df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em"><B>int mtcp_register_callback(mctx_t </B><I>mctx</I><B>, int </B><I>sockid</I><B>, event_t </B><I>event</I><B>, int </B><I>hook_point</I><B>, callback_t </B><I>cb</I><B>);</B> </P>
1891df013fSAsim Jamshed
1991df013fSAsim Jamshed<P>
2091df013fSAsim Jamshed<A NAME="lbAD">&nbsp;</A>
2191df013fSAsim Jamshed<H2>DESCRIPTION</H2>
2291df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">
2391df013fSAsim Jamshed<B>mtcp_register_callback</B>()
2491df013fSAsim Jamshed
2591df013fSAsim Jamshedregisters a callback handler,
2691df013fSAsim Jamshed<I>cb,</I>
2791df013fSAsim Jamshed
2891df013fSAsim Jamshedfor a monitoring socket referred to by the
2991df013fSAsim Jamshed<I>sockid</I>
3091df013fSAsim Jamshed
3191df013fSAsim Jamsheddescriptor. A user can register the callback handler
3291df013fSAsim Jamshedin any one of the three available hook points as shown
3391df013fSAsim Jamshedbelow:
3491df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">
3591df013fSAsim Jamshed
3691df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">
3791df013fSAsim Jamshed<TABLE BORDER>
3891df013fSAsim Jamshed<TR VALIGN=top><TD ALIGN=center COLSPAN=2>Hook points<BR></TD></TR>
3991df013fSAsim Jamshed<TR VALIGN=top><TD>Type</TD><TD>Description<BR></TD></TR>
4091df013fSAsim Jamshed<TR VALIGN=top><TD>MOS_HK_RCV</TD><TD>
4191df013fSAsim JamshedTrigger point right after receiver side stack update.
4291df013fSAsim Jamshed<BR></TD></TR>
4391df013fSAsim Jamshed<TR VALIGN=top><TD>MOS_HK_SND</TD><TD>
4491df013fSAsim JamshedTrigger point right after sender side stack update
4591df013fSAsim Jamshed<BR></TD></TR>
4691df013fSAsim Jamshed<TR VALIGN=top><TD>MOS_NULL</TD><TD>
4791df013fSAsim JamshedTrigger point for connection-less IP traffic
4891df013fSAsim Jamshed<BR></TD></TR>
4991df013fSAsim Jamshed</TABLE>
5091df013fSAsim Jamshed
5191df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">
5291df013fSAsim Jamshed
5391df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">
5491df013fSAsim JamshedA user can register for relevant built-in or custom user-defined
5591df013fSAsim Jamshedevents (see
5691df013fSAsim Jamshed<B>mtcp_define_event())</B>
5791df013fSAsim Jamshed
5891df013fSAsim Jamshedof interest. The
5991df013fSAsim Jamshed<I>event</I>
6091df013fSAsim Jamshed
6191df013fSAsim Jamshedargument is a typedef'ed uint64_t integer. mOS provides the following
6291df013fSAsim Jamshedbuilt-in events that a user can employ:
6391df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">
6491df013fSAsim Jamshed<TABLE BORDER>
6591df013fSAsim Jamshed<TR VALIGN=top><TD ALIGN=center COLSPAN=2>Events<BR></TD></TR>
6691df013fSAsim Jamshed<TR VALIGN=top><TD>Type</TD><TD>Description<BR></TD></TR>
6791df013fSAsim Jamshed<TR VALIGN=top><TD>MOS_ON_PKT_IN</TD><TD>
6891df013fSAsim JamshedPacket arrival.
6991df013fSAsim Jamshed<BR></TD></TR>
7091df013fSAsim Jamshed<TR VALIGN=top><TD>MOS_ON_CONN_START</TD><TD>
7191df013fSAsim JamshedConnection initiation (the first SYN packet).
7291df013fSAsim Jamshed<BR></TD></TR>
7391df013fSAsim Jamshed<TR VALIGN=top><TD>MOS_ON_REXMIT</TD><TD>
7491df013fSAsim JamshedTCP packet retransmission.
7591df013fSAsim Jamshed<BR></TD></TR>
7691df013fSAsim Jamshed<TR VALIGN=top><TD>MOS_ON_TCP_STATE_CHANGE</TD><TD>
7791df013fSAsim JamshedTCP state transition.
7891df013fSAsim Jamshed<BR></TD></TR>
7991df013fSAsim Jamshed<TR VALIGN=top><TD>MOS_ON_CONN_END</TD><TD>
8091df013fSAsim JamshedConnection termination.
8191df013fSAsim Jamshed<BR></TD></TR>
8291df013fSAsim Jamshed<TR VALIGN=top><TD>MOS_ON_CONN_NEW_DATA</TD><TD>
8391df013fSAsim JamshedNew flow data.
8491df013fSAsim Jamshed<BR></TD></TR>
8591df013fSAsim Jamshed<TR VALIGN=top><TD>MOS_ON_ORPHAN</TD><TD>
8691df013fSAsim JamshedOut-of-flow (or non-TCP) packet arrival.
8791df013fSAsim Jamshed<BR></TD></TR>
8891df013fSAsim Jamshed<TR VALIGN=top><TD>MOS_ON_ERROR</TD><TD>
8991df013fSAsim JamshedError report (e.g. receive buffer full (see
9091df013fSAsim Jamshed<B>mtcp_peek())).</B>
9191df013fSAsim Jamshed
9291df013fSAsim Jamshed<BR></TD></TR>
9391df013fSAsim Jamshed</TABLE>
9491df013fSAsim Jamshed
9591df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">
9691df013fSAsim Jamshed
9791df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">
9891df013fSAsim JamshedAll events, with the exception of MOS_ON_ORPHAN, can be used for stream monitoring sockets.
9991df013fSAsim JamshedThe mOS stack internally manages the client and the server networking stacks
10091df013fSAsim Jamshedas the ongoing traffic passes through the middlebox. A user-registered callback,
10191df013fSAsim Jamshed<I>cb,</I>
10291df013fSAsim Jamshed
10391df013fSAsim Jamshedis invoked whenever a relevant network event is detected by the underlying stack. The
10491df013fSAsim Jamsheduser is expected to define the callback handler and is expected to add monitoring
10591df013fSAsim Jamshedapplication logic pertaining to the triggered event. The
10691df013fSAsim Jamshedcallback handler is a function pointer of type:
10791df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">
10891df013fSAsim Jamshed<B>typedef void (*callback_t)(mctx_t </B><I>mctx</I><B>, int </B><I>sock</I><B>, int </B><I>side</I><B>, event_t </B><I>event</I><B>);</B>
10991df013fSAsim Jamshed
11091df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">
11191df013fSAsim JamshedThe
11291df013fSAsim Jamshed<I>side</I>
11391df013fSAsim Jamshed
11491df013fSAsim Jamshedvariable informs the user exactly
11591df013fSAsim Jamshedwhich flow of the connection is currently in context. This can
11691df013fSAsim Jamshedeither be MOS_SIDE_CLI (the client side) or MOS_SIDE_SVR (the
11791df013fSAsim Jamshedserver side). Callback functions generated from raw monitoring
11891df013fSAsim Jamshedsockets (MOS_SOCK_MONITOR_RAW) only provide MOS_NULL as the
11991df013fSAsim Jamshedvalue of the side argument, while the only available event
12091df013fSAsim Jamshedfor such sockets is MOS_ON_ORPHAN.
12191df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">
12291df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">
12391df013fSAsim Jamshed
12491df013fSAsim JamshedA user can dynamically de-register the event callback handler
12591df013fSAsim Jamshedfrom any monitoring socket, during the life time of the connection,
12691df013fSAsim Jamshedby calling
12791df013fSAsim Jamshed<B>mtcp_register_callback()</B>
12891df013fSAsim Jamshed
12991df013fSAsim Jamshedwith the
13091df013fSAsim Jamshed<I>cb</I>
13191df013fSAsim Jamshed
13291df013fSAsim Jamshedargument set as NULL.
13391df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">
13491df013fSAsim JamshedA typical usage of
13591df013fSAsim Jamshed<B>mtcp_register_callback()</B>
13691df013fSAsim Jamshed
13791df013fSAsim Jamshedis illustrated below:
13891df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">
13991df013fSAsim Jamshed
14091df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">
14191df013fSAsim Jamshed<BR>&nbsp;/*************************************************/
14291df013fSAsim Jamshed<BR>&nbsp;monitor_filter_t&nbsp;ft&nbsp;=&nbsp;{0};
14391df013fSAsim Jamshed<BR>&nbsp;int&nbsp;s;
14491df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">
14591df013fSAsim Jamshed<BR>&nbsp;//&nbsp;create&nbsp;a&nbsp;passive&nbsp;monitoring&nbsp;socket&nbsp;with&nbsp;its&nbsp;scope
14691df013fSAsim Jamshed<BR>&nbsp;s&nbsp;=&nbsp;mtcp_socket(m,&nbsp;AF_INET,&nbsp;MOS_SOCK_MONITOR_STREAM,&nbsp;0);
14791df013fSAsim Jamshed<BR>&nbsp;ft.stream_syn_filter&nbsp;=&nbsp;&quot;dst&nbsp;net&nbsp;216.58&nbsp;and&nbsp;dst&nbsp;port&nbsp;80&quot;;
14891df013fSAsim Jamshed<BR>&nbsp;mtcp_bind_monitor_filter(m,&nbsp;s,&nbsp;&amp;ft);
14991df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">
15091df013fSAsim Jamshed<BR>&nbsp;//&nbsp;sets&nbsp;up&nbsp;an&nbsp;event&nbsp;handler&nbsp;for&nbsp;MOS_ON_REXMIT
15191df013fSAsim Jamshed<BR>&nbsp;mtcp_register_callback(m,&nbsp;s,&nbsp;MOS_ON_REXMIT,&nbsp;MOS_HK_RCV,&nbsp;OnRexmitPkt);
15291df013fSAsim Jamshed<BR>&nbsp;/*************************************************/
15391df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">
15491df013fSAsim Jamshed
15591df013fSAsim Jamshed<A NAME="lbAE">&nbsp;</A>
15691df013fSAsim Jamshed<H2>RETURN VALUE</H2>
15791df013fSAsim Jamshed
15891df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">
15991df013fSAsim JamshedReturns 0 on success; -1 on failure.
16091df013fSAsim Jamshed
16191df013fSAsim Jamshed
16291df013fSAsim Jamshed
16391df013fSAsim Jamshed
16491df013fSAsim Jamshed<A NAME="lbAF">&nbsp;</A>
16591df013fSAsim Jamshed<H2>ERRORS</H2>
16691df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">
16791df013fSAsim Jamshed<DL>
16891df013fSAsim Jamshed<DT><B>EINVAL &nbsp; &nbsp; </B>
16991df013fSAsim Jamshed
17091df013fSAsim Jamshed<DD>
17191df013fSAsim JamshedThe socket descriptor,
17291df013fSAsim Jamshed<I>sockid</I>
17391df013fSAsim Jamshed
17491df013fSAsim Jamshedis invalid.
17591df013fSAsim Jamshed
17691df013fSAsim Jamshed</DL>
17791df013fSAsim Jamshed<A NAME="lbAG">&nbsp;</A>
17891df013fSAsim Jamshed<H2>AUTHORS</H2>
17991df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">
18091df013fSAsim JamshedmOS development team &lt;<A HREF="mailto:[email protected]">[email protected]</A>&gt;
18191df013fSAsim Jamshed
182*e5df9dc1SAsim Jamshed<!----------------------------------------------------------->
183*e5df9dc1SAsim Jamshed<h2>EXAMPLES
184*e5df9dc1SAsim Jamshed<a name="EXAMPLES"></a>
185*e5df9dc1SAsim Jamshed</h2>
186*e5df9dc1SAsim Jamshed
187*e5df9dc1SAsim Jamshed<p style="margin-left:11%; margin-top: 1em">
188*e5df9dc1SAsim Jamshed  <a href="http://mos.kaist.edu/guide/programmer/05_api_example.html#registering-for-built-in-events">
189*e5df9dc1SAsim Jamshed	http://mos.kaist.edu/guide/programmer/05_api_example.html#registering-for-built-in-events
190*e5df9dc1SAsim Jamshed	</a>
191*e5df9dc1SAsim Jamshed</p>
192*e5df9dc1SAsim Jamshed<p style="margin-left:11%; margin-top: 1em">
193*e5df9dc1SAsim Jamshed  <a href="http://mos.kaist.edu/guide/programmer/05_api_example.html#registering-for-user-defined-events-udes">
194*e5df9dc1SAsim Jamshed	http://mos.kaist.edu/guide/programmer/05_api_example.html#registering-for-user-defined-events-udes
195*e5df9dc1SAsim Jamshed	</a>
196*e5df9dc1SAsim Jamshed</p>
197*e5df9dc1SAsim Jamshed<!----------------------------------------------------------->
198*e5df9dc1SAsim Jamshed
19991df013fSAsim Jamshed<A NAME="lbAH">&nbsp;</A>
20091df013fSAsim Jamshed<H2>SEE ALSO</H2>
20191df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">
20291df013fSAsim Jamshed<B>mtcp_socket</B>(),
20391df013fSAsim Jamshed
20491df013fSAsim Jamshed<B>mtcp_bind_monitor_filter</B>(),
20591df013fSAsim Jamshed
20691df013fSAsim Jamshed<B>mtcp_register_callback</B>()
20791df013fSAsim Jamshed
20891df013fSAsim Jamshed
20991df013fSAsim Jamshed<A NAME="lbAI">&nbsp;</A>
21091df013fSAsim Jamshed<H2>COLOPHON</H2>
21191df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">
21291df013fSAsim JamshedThis page is part of mOS release 0.3
21391df013fSAsim Jamshed<I>docs</I>
21491df013fSAsim Jamshed
21591df013fSAsim Jamshedsection. A description of the project, and information
21691df013fSAsim Jamshedabout reporting bugs, can be found at
21791df013fSAsim Jamshed<A HREF="http://mos.kaist.edu/.">http://mos.kaist.edu/.</A>
21891df013fSAsim Jamshed
21991df013fSAsim Jamshed<!--
22091df013fSAsim Jamshed<HR>
22191df013fSAsim Jamshed<A NAME="index">&nbsp;</A><H2>Index</H2>
22291df013fSAsim Jamshed<DL>
22391df013fSAsim Jamshed<DT><A HREF="#lbAB">NAME</A><DD>
22491df013fSAsim Jamshed<DT><A HREF="#lbAC">SYNOPSIS</A><DD>
22591df013fSAsim Jamshed<DT><A HREF="#lbAD">DESCRIPTION</A><DD>
22691df013fSAsim Jamshed<DT><A HREF="#lbAE">RETURN VALUE</A><DD>
22791df013fSAsim Jamshed<DT><A HREF="#lbAF">ERRORS</A><DD>
22891df013fSAsim Jamshed<DT><A HREF="#lbAG">AUTHORS</A><DD>
22991df013fSAsim Jamshed<DT><A HREF="#lbAH">SEE ALSO</A><DD>
23091df013fSAsim Jamshed<DT><A HREF="#lbAI">COLOPHON</A><DD>
23191df013fSAsim Jamshed</DL>
23291df013fSAsim Jamshed<!-- <HR> -->
23391df013fSAsim Jamshed<div class="footer">
23491df013fSAsim Jamshed  <img src="back-arrow.jpg" width="2%" height="2%"><a href="http://mos.kaist.edu/index_man.html">Back to Index</a>
23591df013fSAsim Jamshed</div>
23691df013fSAsim Jamshed</div>
23791df013fSAsim Jamshed</BODY>
23891df013fSAsim Jamshed</HTML>
239