1*91df013fSAsim Jamshed<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2*91df013fSAsim Jamshed<HTML><HEAD><TITLE>Man page of mtcp_register_callback</TITLE>
3*91df013fSAsim Jamshed<link rel="stylesheet" href="./common.css">
4*91df013fSAsim Jamshed</HEAD><BODY>
5*91df013fSAsim Jamshed<div class="main">
6*91df013fSAsim Jamshed<H1 align="center">mtcp_register_callback</H1>
7*91df013fSAsim Jamshed
8*91df013fSAsim Jamshed<H2>NAME</H2>
9*91df013fSAsim Jamshed
10*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">mtcp_register_callback - register/de-register a callback function on a specified hook point</p>
11*91df013fSAsim Jamshed<A NAME="lbAC">&nbsp;</A>
12*91df013fSAsim Jamshed<H2>SYNOPSIS</H2>
13*91df013fSAsim Jamshed
14*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">
15*91df013fSAsim Jamshed<B>#include &lt;<A HREF="file:///usr/include/mos_api.h">mos_api.h</A>&gt;</B></P>
16*91df013fSAsim Jamshed
17*91df013fSAsim 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>
18*91df013fSAsim Jamshed
19*91df013fSAsim Jamshed<P>
20*91df013fSAsim Jamshed<A NAME="lbAD">&nbsp;</A>
21*91df013fSAsim Jamshed<H2>DESCRIPTION</H2>
22*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">
23*91df013fSAsim Jamshed<B>mtcp_register_callback</B>()
24*91df013fSAsim Jamshed
25*91df013fSAsim Jamshedregisters a callback handler,
26*91df013fSAsim Jamshed<I>cb,</I>
27*91df013fSAsim Jamshed
28*91df013fSAsim Jamshedfor a monitoring socket referred to by the
29*91df013fSAsim Jamshed<I>sockid</I>
30*91df013fSAsim Jamshed
31*91df013fSAsim Jamsheddescriptor. A user can register the callback handler
32*91df013fSAsim Jamshedin any one of the three available hook points as shown
33*91df013fSAsim Jamshedbelow:
34*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">
35*91df013fSAsim Jamshed
36*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">
37*91df013fSAsim Jamshed<TABLE BORDER>
38*91df013fSAsim Jamshed<TR VALIGN=top><TD ALIGN=center COLSPAN=2>Hook points<BR></TD></TR>
39*91df013fSAsim Jamshed<TR VALIGN=top><TD>Type</TD><TD>Description<BR></TD></TR>
40*91df013fSAsim Jamshed<TR VALIGN=top><TD>MOS_HK_RCV</TD><TD>
41*91df013fSAsim JamshedTrigger point right after receiver side stack update.
42*91df013fSAsim Jamshed<BR></TD></TR>
43*91df013fSAsim Jamshed<TR VALIGN=top><TD>MOS_HK_SND</TD><TD>
44*91df013fSAsim JamshedTrigger point right after sender side stack update
45*91df013fSAsim Jamshed<BR></TD></TR>
46*91df013fSAsim Jamshed<TR VALIGN=top><TD>MOS_NULL</TD><TD>
47*91df013fSAsim JamshedTrigger point for connection-less IP traffic
48*91df013fSAsim Jamshed<BR></TD></TR>
49*91df013fSAsim Jamshed</TABLE>
50*91df013fSAsim Jamshed
51*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">
52*91df013fSAsim Jamshed
53*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">
54*91df013fSAsim JamshedA user can register for relevant built-in or custom user-defined
55*91df013fSAsim Jamshedevents (see
56*91df013fSAsim Jamshed<B>mtcp_define_event())</B>
57*91df013fSAsim Jamshed
58*91df013fSAsim Jamshedof interest. The
59*91df013fSAsim Jamshed<I>event</I>
60*91df013fSAsim Jamshed
61*91df013fSAsim Jamshedargument is a typedef'ed uint64_t integer. mOS provides the following
62*91df013fSAsim Jamshedbuilt-in events that a user can employ:
63*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">
64*91df013fSAsim Jamshed<TABLE BORDER>
65*91df013fSAsim Jamshed<TR VALIGN=top><TD ALIGN=center COLSPAN=2>Events<BR></TD></TR>
66*91df013fSAsim Jamshed<TR VALIGN=top><TD>Type</TD><TD>Description<BR></TD></TR>
67*91df013fSAsim Jamshed<TR VALIGN=top><TD>MOS_ON_PKT_IN</TD><TD>
68*91df013fSAsim JamshedPacket arrival.
69*91df013fSAsim Jamshed<BR></TD></TR>
70*91df013fSAsim Jamshed<TR VALIGN=top><TD>MOS_ON_CONN_START</TD><TD>
71*91df013fSAsim JamshedConnection initiation (the first SYN packet).
72*91df013fSAsim Jamshed<BR></TD></TR>
73*91df013fSAsim Jamshed<TR VALIGN=top><TD>MOS_ON_REXMIT</TD><TD>
74*91df013fSAsim JamshedTCP packet retransmission.
75*91df013fSAsim Jamshed<BR></TD></TR>
76*91df013fSAsim Jamshed<TR VALIGN=top><TD>MOS_ON_TCP_STATE_CHANGE</TD><TD>
77*91df013fSAsim JamshedTCP state transition.
78*91df013fSAsim Jamshed<BR></TD></TR>
79*91df013fSAsim Jamshed<TR VALIGN=top><TD>MOS_ON_CONN_END</TD><TD>
80*91df013fSAsim JamshedConnection termination.
81*91df013fSAsim Jamshed<BR></TD></TR>
82*91df013fSAsim Jamshed<TR VALIGN=top><TD>MOS_ON_CONN_NEW_DATA</TD><TD>
83*91df013fSAsim JamshedNew flow data.
84*91df013fSAsim Jamshed<BR></TD></TR>
85*91df013fSAsim Jamshed<TR VALIGN=top><TD>MOS_ON_ORPHAN</TD><TD>
86*91df013fSAsim JamshedOut-of-flow (or non-TCP) packet arrival.
87*91df013fSAsim Jamshed<BR></TD></TR>
88*91df013fSAsim Jamshed<TR VALIGN=top><TD>MOS_ON_ERROR</TD><TD>
89*91df013fSAsim JamshedError report (e.g. receive buffer full (see
90*91df013fSAsim Jamshed<B>mtcp_peek())).</B>
91*91df013fSAsim Jamshed
92*91df013fSAsim Jamshed<BR></TD></TR>
93*91df013fSAsim Jamshed</TABLE>
94*91df013fSAsim Jamshed
95*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">
96*91df013fSAsim Jamshed
97*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">
98*91df013fSAsim JamshedAll events, with the exception of MOS_ON_ORPHAN, can be used for stream monitoring sockets.
99*91df013fSAsim JamshedThe mOS stack internally manages the client and the server networking stacks
100*91df013fSAsim Jamshedas the ongoing traffic passes through the middlebox. A user-registered callback,
101*91df013fSAsim Jamshed<I>cb,</I>
102*91df013fSAsim Jamshed
103*91df013fSAsim Jamshedis invoked whenever a relevant network event is detected by the underlying stack. The
104*91df013fSAsim Jamsheduser is expected to define the callback handler and is expected to add monitoring
105*91df013fSAsim Jamshedapplication logic pertaining to the triggered event. The
106*91df013fSAsim Jamshedcallback handler is a function pointer of type:
107*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">
108*91df013fSAsim 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>
109*91df013fSAsim Jamshed
110*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">
111*91df013fSAsim JamshedThe
112*91df013fSAsim Jamshed<I>side</I>
113*91df013fSAsim Jamshed
114*91df013fSAsim Jamshedvariable informs the user exactly
115*91df013fSAsim Jamshedwhich flow of the connection is currently in context. This can
116*91df013fSAsim Jamshedeither be MOS_SIDE_CLI (the client side) or MOS_SIDE_SVR (the
117*91df013fSAsim Jamshedserver side). Callback functions generated from raw monitoring
118*91df013fSAsim Jamshedsockets (MOS_SOCK_MONITOR_RAW) only provide MOS_NULL as the
119*91df013fSAsim Jamshedvalue of the side argument, while the only available event
120*91df013fSAsim Jamshedfor such sockets is MOS_ON_ORPHAN.
121*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">
122*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">
123*91df013fSAsim Jamshed
124*91df013fSAsim JamshedA user can dynamically de-register the event callback handler
125*91df013fSAsim Jamshedfrom any monitoring socket, during the life time of the connection,
126*91df013fSAsim Jamshedby calling
127*91df013fSAsim Jamshed<B>mtcp_register_callback()</B>
128*91df013fSAsim Jamshed
129*91df013fSAsim Jamshedwith the
130*91df013fSAsim Jamshed<I>cb</I>
131*91df013fSAsim Jamshed
132*91df013fSAsim Jamshedargument set as NULL.
133*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">
134*91df013fSAsim JamshedA typical usage of
135*91df013fSAsim Jamshed<B>mtcp_register_callback()</B>
136*91df013fSAsim Jamshed
137*91df013fSAsim Jamshedis illustrated below:
138*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">
139*91df013fSAsim Jamshed
140*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">
141*91df013fSAsim Jamshed<BR>&nbsp;/*************************************************/
142*91df013fSAsim Jamshed<BR>&nbsp;monitor_filter_t&nbsp;ft&nbsp;=&nbsp;{0};
143*91df013fSAsim Jamshed<BR>&nbsp;int&nbsp;s;
144*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">
145*91df013fSAsim Jamshed<BR>&nbsp;//&nbsp;create&nbsp;a&nbsp;passive&nbsp;monitoring&nbsp;socket&nbsp;with&nbsp;its&nbsp;scope
146*91df013fSAsim Jamshed<BR>&nbsp;s&nbsp;=&nbsp;mtcp_socket(m,&nbsp;AF_INET,&nbsp;MOS_SOCK_MONITOR_STREAM,&nbsp;0);
147*91df013fSAsim 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;;
148*91df013fSAsim Jamshed<BR>&nbsp;mtcp_bind_monitor_filter(m,&nbsp;s,&nbsp;&amp;ft);
149*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">
150*91df013fSAsim Jamshed<BR>&nbsp;//&nbsp;sets&nbsp;up&nbsp;an&nbsp;event&nbsp;handler&nbsp;for&nbsp;MOS_ON_REXMIT
151*91df013fSAsim Jamshed<BR>&nbsp;mtcp_register_callback(m,&nbsp;s,&nbsp;MOS_ON_REXMIT,&nbsp;MOS_HK_RCV,&nbsp;OnRexmitPkt);
152*91df013fSAsim Jamshed<BR>&nbsp;/*************************************************/
153*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">
154*91df013fSAsim Jamshed
155*91df013fSAsim Jamshed<A NAME="lbAE">&nbsp;</A>
156*91df013fSAsim Jamshed<H2>RETURN VALUE</H2>
157*91df013fSAsim Jamshed
158*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">
159*91df013fSAsim JamshedReturns 0 on success; -1 on failure.
160*91df013fSAsim Jamshed
161*91df013fSAsim Jamshed
162*91df013fSAsim Jamshed
163*91df013fSAsim Jamshed
164*91df013fSAsim Jamshed<A NAME="lbAF">&nbsp;</A>
165*91df013fSAsim Jamshed<H2>ERRORS</H2>
166*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">
167*91df013fSAsim Jamshed<DL>
168*91df013fSAsim Jamshed<DT><B>EINVAL &nbsp; &nbsp; </B>
169*91df013fSAsim Jamshed
170*91df013fSAsim Jamshed<DD>
171*91df013fSAsim JamshedThe socket descriptor,
172*91df013fSAsim Jamshed<I>sockid</I>
173*91df013fSAsim Jamshed
174*91df013fSAsim Jamshedis invalid.
175*91df013fSAsim Jamshed
176*91df013fSAsim Jamshed</DL>
177*91df013fSAsim Jamshed<A NAME="lbAG">&nbsp;</A>
178*91df013fSAsim Jamshed<H2>AUTHORS</H2>
179*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">
180*91df013fSAsim JamshedmOS development team &lt;<A HREF="mailto:[email protected]">[email protected]</A>&gt;
181*91df013fSAsim Jamshed
182*91df013fSAsim Jamshed<A NAME="lbAH">&nbsp;</A>
183*91df013fSAsim Jamshed<H2>SEE ALSO</H2>
184*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">
185*91df013fSAsim Jamshed<B>mtcp_socket</B>(),
186*91df013fSAsim Jamshed
187*91df013fSAsim Jamshed<B>mtcp_bind_monitor_filter</B>(),
188*91df013fSAsim Jamshed
189*91df013fSAsim Jamshed<B>mtcp_register_callback</B>()
190*91df013fSAsim Jamshed
191*91df013fSAsim Jamshed
192*91df013fSAsim Jamshed<A NAME="lbAI">&nbsp;</A>
193*91df013fSAsim Jamshed<H2>COLOPHON</H2>
194*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">
195*91df013fSAsim JamshedThis page is part of mOS release 0.3
196*91df013fSAsim Jamshed<I>docs</I>
197*91df013fSAsim Jamshed
198*91df013fSAsim Jamshedsection. A description of the project, and information
199*91df013fSAsim Jamshedabout reporting bugs, can be found at
200*91df013fSAsim Jamshed<A HREF="http://mos.kaist.edu/.">http://mos.kaist.edu/.</A>
201*91df013fSAsim Jamshed
202*91df013fSAsim Jamshed<!--
203*91df013fSAsim Jamshed<HR>
204*91df013fSAsim Jamshed<A NAME="index">&nbsp;</A><H2>Index</H2>
205*91df013fSAsim Jamshed<DL>
206*91df013fSAsim Jamshed<DT><A HREF="#lbAB">NAME</A><DD>
207*91df013fSAsim Jamshed<DT><A HREF="#lbAC">SYNOPSIS</A><DD>
208*91df013fSAsim Jamshed<DT><A HREF="#lbAD">DESCRIPTION</A><DD>
209*91df013fSAsim Jamshed<DT><A HREF="#lbAE">RETURN VALUE</A><DD>
210*91df013fSAsim Jamshed<DT><A HREF="#lbAF">ERRORS</A><DD>
211*91df013fSAsim Jamshed<DT><A HREF="#lbAG">AUTHORS</A><DD>
212*91df013fSAsim Jamshed<DT><A HREF="#lbAH">SEE ALSO</A><DD>
213*91df013fSAsim Jamshed<DT><A HREF="#lbAI">COLOPHON</A><DD>
214*91df013fSAsim Jamshed</DL>
215*91df013fSAsim Jamshed<!-- <HR> -->
216*91df013fSAsim Jamshed<div class="footer">
217*91df013fSAsim Jamshed  <img src="back-arrow.jpg" width="2%" height="2%"><a href="http://mos.kaist.edu/index_man.html">Back to Index</a>
218*91df013fSAsim Jamshed</div>
219*91df013fSAsim Jamshed</div>
220*91df013fSAsim Jamshed</BODY>
221*91df013fSAsim Jamshed</HTML>
222