mtcp_define_event

NAME

mtcp_define_event − define a user-defined event function

SYNOPSIS

#include <mos_api.h>

int mtcp_define_event(event_t event, filter_t filter, struct filter_arg * arg );

DESCRIPTION

mtcp_define_event() creates a new user-defined event (UDE) with a base event event and a filter function filter with a filter argument arg

More specifically, a UDE is defined as a based event and a boolean filter function that determines the event condition. When the base event for a UDE is raised, mOS triggers the UDE only when the filter function is evaluated to be true.

event argument is a typedef’ed uint64_t integer. It can be either a built-in event or a user-defined event. mOS provides the following built-in events that a user can employ:

Built-in event Description
MOS_ON_PKT_IN In-flow TCP packet arrival
MOS_ON_CONN_START New connection initiation
MOS_ON_REXMIT TCP retransmission
MOS_ON_TCP_STATE_CHANGE TCP state change
MOS_ON_CONN_END Connection termination
MOS_ON_CONN_NEW_DATA New flow payload
MOS_ON_ORPHAN non-TCP packet
MOS_ON_ERROR Error report (e.g., receive buffer full)

A typical usage of mtcp_define_event() is illustrated below:

/*************************************************/
// creates a passive monitoring socket with its scope
s = mtcp_socket(m, AF_INET, MOS_SOCK_MONITOR_STREAM, 0);
ft.stream_syn_filter = "dst net 216.58 and dst port 80";
mtcp_bind_monitor_filter(m, s, &ft);

// defines a user-defined event that detects an HTTP request
hev = mtcp_define_event(MOS_ON_CONN_NEW_DATA, IsHTTPRequest, NULL);
/*************************************************/

RETURN VALUE

Returns 0 on success; -1 on failure.

ERRORS

EINVAL

The socket descriptor, sockid is invalid.

AUTHORS

mOS development team <mtcp-user@list.ndsl.kaist.edu>

EXAMPLES

http://mos.kaist.edu/guide/programmer/05_api_example.html#registering-for-user-defined-events-udes

SEE ALSO

mtcp_socket(), mtcp_bind_monitor_filter(), mtcp_register_callback()

COLOPHON

This page is part of mOS release 0.3 docs section. A description of the project, and information about reporting bugs, can be found at http://mos.kaist.edu/.