Revised OpenFlow Library  v0.6.0dev
 All Classes Files Functions Variables Friends Groups Pages
Public Member Functions | Protected Member Functions | Friends | List of all members
rofl::ciosrv Class Reference

Base class for IO services. More...

#include <ciosrv.h>

Public Member Functions

 ciosrv (pthread_t tid=0)
 Initializes all structures for this ciosrv object.
 
virtual ~ciosrv ()
 Deallocates resources for this ciosrv object.
 
 ciosrv (const ciosrv &iosrv)
 Initializes all structures for this ciosrv object.
 
ciosrvoperator= (const ciosrv &iosrv)
 
void notify (const cevent &event)
 Sends a notification to this ciosrv instance. More...
 
pthread_t get_thread_id () const
 Returns thread-id of local thread. More...
 

Protected Member Functions

ctimer get_next_timer ()
 
Event handlers

These methods define handlers for file descriptor and cevent notifications. Derived classes should overwwrite all relevant handlers.

virtual void handle_event (const rofl::cevent &event)
 Handler for event notifications using cevent instances. More...
 
virtual void handle_revent (int fd)
 Handler for read events on file descriptors. More...
 
virtual void handle_wevent (int fd)
 Handler for write events on file descriptors. More...
 
virtual void handle_xevent (int fd)
 Handler for exceptions on file descriptors. More...
 
virtual void handle_timeout (int opaque, void *data=(void *) 0)
 Handler for timer events. More...
 
Management methods for file descriptors
void register_filedesc_r (int fd)
 Registers a file descriptor for read events. More...
 
void deregister_filedesc_r (int fd)
 Deregisters a file descriptor from read events. More...
 
void register_filedesc_w (int fd)
 Registers a file descriptor for write events. More...
 
void deregister_filedesc_w (int fd)
 Deregisters a file descriptor from write events. More...
 
Management methods for timers and events
const rofl::ctimeridregister_timer (int opaque, const rofl::ctimespec &timespec)
 Installs a new timer to fire in t seconds. More...
 
const rofl::ctimeridreset_timer (const rofl::ctimerid &timer_id, const rofl::ctimespec &timespec)
 Resets a running timer of type opaque. More...
 
ctimeridrestart_timer (rofl::ctimerid &timer_id, int opaque, const rofl::ctimespec &timespec)
 Resets an existing or creates a new timer. More...
 
bool pending_timer (const rofl::ctimerid &timer_id)
 Checks for a pending timer of type opaque. More...
 
void cancel_timer (const rofl::ctimerid &timer_id)
 Cancels a pending timer. More...
 
void cancel_all_timers ()
 Cancels all pending timers of this instance.
 
void cancel_all_events ()
 Cancels all pending events of this instance.
 

Friends

class cioloop
 
std::ostream & operator<< (std::ostream &os, const ciosrv &iosvc)
 

Detailed Description

Base class for IO services.

Derive from this class in order to get support for file/socket descriptor and timer management. rofl::ciosrv binds a higher layer class with the low layer IO loop defined inside class rofl::cioloop. This class provides two groups of methods:

  1. Management methods for typical CRUD operations on timers and descriptors.
  2. Event events for sending notifications towards deriving classes about read or write events or expiration of timers.

Methods for file descriptor management:

1.a) register_filedesc_r() register a descriptor for read IO

1.b) deregister_filedesc_r() deregister a read descriptor

1.c) register_filedesc_w() register a descriptor for write IO

1.d) deregister_filedesc_w() deregister a write descriptor

Methods for timer management:

1.e) register_timer() register a timer

1.f) reset_timer() reset a timer

1.g) restart_timer() restart or create new timer

1.h) pending_timer() check for existence of timer

1.i) cancel_timer() cancel a timer

1.j) cancel_all_timer() cancel all timers

Methods for event management:

1.k) notify() send an event to this rofl::ciosrv instance

The following event handlers exist and may be overwritten by a class deriving from rofl::ciosrv:

2.a) handle_revent() read events on file descriptor(s)

2.b) handle_wevent() write events on file descriptor(s)

2.c) handle_xevent() exceptions on file descriptor(s)

2.d) handle_timeout() timeout event(s)

2.e) handle_event() events sent via notify() method

This class utilizes timer handles based on class rofl::ctimerid for managing pending timers, e.g., cancel or restarting them.

See Also
rofl::cevent
rofl::ctimerid
Inheritance diagram for rofl::ciosrv:
rofl::ctimer_env rofl::crofbase rofl::crofchan rofl::crofconn rofl::crofctl rofl::crofdpt rofl::crofsock rofl::csegmentation rofl::csocket rofl::ctransactions rofl::examples::ethswctld::cfibentry rofl::examples::ethswctld::cflowentry

Member Function Documentation

void rofl::ciosrv::cancel_timer ( const rofl::ctimerid timer_id)
inlineprotected

Cancels a pending timer.

Parameters
opaquetimer type the caller is seeking for
void rofl::ciosrv::deregister_filedesc_r ( int  fd)
inlineprotected

Deregisters a file descriptor from read events.

Parameters
fdthe file descriptor removed from the set of read events
void rofl::ciosrv::deregister_filedesc_w ( int  fd)
inlineprotected

Deregisters a file descriptor from write events.

Parameters
fdthe file descriptor removed from the set of write events
pthread_t rofl::ciosrv::get_thread_id ( ) const
inline

Returns thread-id of local thread.

Returns
thread ID
virtual void rofl::ciosrv::handle_event ( const rofl::cevent event)
inlineprotectedvirtual

Handler for event notifications using cevent instances.

To be overwritten by derived class. Default behaviour: event is ignored.

See Also
notify(cevent const& ev)
Parameters
eventrofl::cevent instance received
virtual void rofl::ciosrv::handle_revent ( int  fd)
inlineprotectedvirtual

Handler for read events on file descriptors.

To be overwritten by derived class. Default behaviour: event is ignored.

Parameters
fdread event occured on file descriptor fd
virtual void rofl::ciosrv::handle_timeout ( int  opaque,
void *  data = (void*)0 
)
inlineprotectedvirtual

Handler for timer events.

To be overwritten by derived class. Default behaviour: event is ignored.

Parameters
opaqueexpired timer type
datapointer to opaque data
virtual void rofl::ciosrv::handle_wevent ( int  fd)
inlineprotectedvirtual

Handler for write events on file descriptors.

To be overwritten by derived class. Default behaviour: event is ignored.

Parameters
fdwrite event occured on file descriptor fd
virtual void rofl::ciosrv::handle_xevent ( int  fd)
inlineprotectedvirtual

Handler for exceptions on file descriptors.

To be overwritten by derived class. Default behaviour: event is ignored.

Parameters
fdexception occured on file descriptor fd
void rofl::ciosrv::notify ( const cevent event)
inline

Sends a notification to this ciosrv instance.

Method notify() can be called from every thread within the running application. The event management system wakes up this thread when in sleeping condition in a poll/select loop and calls its handle_event() method.

Parameters
evthe event to be sent to this instance
bool rofl::ciosrv::pending_timer ( const rofl::ctimerid timer_id)
inlineprotected

Checks for a pending timer of type opaque.

Parameters
opaquetimer type the caller is seeking for
Returns
true: timer of type opaque exists, false: no pending timer
void rofl::ciosrv::register_filedesc_r ( int  fd)
inlineprotected

Registers a file descriptor for read events.

A read event will be indicated via calling handle_revent(fd).

Parameters
fdthe file descriptor waiting for read events
void rofl::ciosrv::register_filedesc_w ( int  fd)
inlineprotected

Registers a file descriptor for write events.

A write event will be indicated via calling handle_wevent(fd).

Parameters
fdthe file descriptor waiting for write events
const rofl::ctimerid& rofl::ciosrv::register_timer ( int  opaque,
const rofl::ctimespec timespec 
)
inlineprotected

Installs a new timer to fire in t seconds.

Parameters
opaquethis timer type can be arbitrarily chosen
ctimerobject
Returns
timer handle
const rofl::ctimerid& rofl::ciosrv::reset_timer ( const rofl::ctimerid timer_id,
const rofl::ctimespec timespec 
)
inlineprotected

Resets a running timer of type opaque.

If no timer of type opaque exists, a new timer will be started.

Parameters
opaquethis timer type can be arbitrarily chosen
ttimeout in seconds of this timer
Returns
timer handle
ctimerid& rofl::ciosrv::restart_timer ( rofl::ctimerid timer_id,
int  opaque,
const rofl::ctimespec timespec 
)
inlineprotected

Resets an existing or creates a new timer.

If timer specified by timer_id exists, the timer is reset to the value defined by timespec. If no timer of the specified timer_id exists, a new timer is created based on values opaque and timespec.

Parameters
timer_idAn existing timer_id. This value is going to be overwritten.
opaquethis timer type value can be chosen by the caller
timespectimeout defined for this timer
Returns
reference to parameter timer_id

The documentation for this class was generated from the following files: