xorp

IoIp Class Reference

A base class for I/O IP raw communication. More...

#include <io_ip.hh>

Inheritance diagram for IoIp:
IoIpDummy IoIpSocket

List of all members.

Public Member Functions

 IoIp (FeaDataPlaneManager &fea_data_plane_manager, const IfTree &iftree, int family, uint8_t ip_protocol)
 Constructor for a given address family and protocol.
virtual ~IoIp ()
 Virtual destructor.
IoIpManagerio_ip_manager ()
 Get the IoIpManager instance.
FeaDataPlaneManagerfea_data_plane_manager ()
 Get the FeaDataPlaneManager instance.
virtual bool is_running () const
 Test whether this instance is running.
EventLoopeventloop ()
 Get the event loop.
const IfTreeiftree () const
 Get the interface tree.
virtual int family () const
 Get the address family.
virtual uint8_t ip_protocol () const
 Get the IP protocol number.
IoIpReceiverio_ip_receiver ()
 Get the registered receiver.
virtual void register_io_ip_receiver (IoIpReceiver *io_ip_receiver)
 Register the I/O IP raw packets receiver.
virtual void unregister_io_ip_receiver ()
 Unregister the I/O IP raw packets receiver.
virtual int start (string &error_msg)=0
 Start operation.
virtual int stop (string &error_msg)=0
 Stop operation.
virtual int set_multicast_ttl (int ttl, string &error_msg)=0
 Set the default TTL (or hop-limit in IPv6) for the outgoing multicast packets.
virtual int enable_multicast_loopback (bool is_enabled, string &error_msg)=0
 Enable/disable multicast loopback when transmitting multicast packets.
virtual int set_default_multicast_interface (const string &if_name, const string &vif_name, string &error_msg)=0
 Set default interface for transmitting multicast packets.
virtual int join_multicast_group (const string &if_name, const string &vif_name, const IPvX &group, string &error_msg)=0
 Join a multicast group on an interface.
virtual int leave_multicast_group (const string &if_name, const string &vif_name, const IPvX &group, string &error_msg)=0
 Leave a multicast group on an interface.
virtual int send_packet (const string &if_name, const string &vif_name, const IPvX &src_address, const IPvX &dst_address, int32_t ip_ttl, int32_t ip_tos, bool ip_router_alert, bool ip_internet_control, const vector< uint8_t > &ext_headers_type, const vector< vector< uint8_t > > &ext_headers_payload, const vector< uint8_t > &payload, string &error_msg)=0
 Send a raw IP packet.
virtual XorpFdmcast_protocol_fd_in ()=0
 Get the file descriptor for receiving protocol messages.

Protected Member Functions

virtual void recv_packet (const string &if_name, const string &vif_name, const IPvX &src_address, const IPvX &dst_address, int32_t ip_ttl, int32_t ip_tos, bool ip_router_alert, bool ip_internet_control, const vector< uint8_t > &ext_headers_type, const vector< vector< uint8_t > > &ext_headers_payload, const vector< uint8_t > &payload)
 Received a raw IP packet.
virtual void recv_system_multicast_upcall (const vector< uint8_t > &payload)
 Received a multicast forwarding related upcall from the system.

Protected Attributes

bool _is_running

Private Attributes

IoIpManager_io_ip_manager
FeaDataPlaneManager_fea_data_plane_manager
EventLoop_eventloop
const IfTree_iftree
int _family
uint8_t _ip_protocol
IoIpReceiver_io_ip_receiver

Detailed Description

A base class for I/O IP raw communication.

Each protocol 'registers' for I/O and gets assigned one object of this class.


Constructor & Destructor Documentation

IoIp::IoIp ( FeaDataPlaneManager fea_data_plane_manager,
const IfTree iftree,
int  family,
uint8_t  ip_protocol 
)

Constructor for a given address family and protocol.

Parameters:
fea_data_plane_managerthe corresponding data plane manager (FeaDataPlaneManager).
iftreethe interface tree to use.
familythe address family (AF_INET or AF_INET6 for IPv4 and IPv6 respectively).
ip_protocolthe IP protocol number (IPPROTO_*).

Member Function Documentation

virtual int IoIp::enable_multicast_loopback ( bool  is_enabled,
string &  error_msg 
) [pure virtual]

Enable/disable multicast loopback when transmitting multicast packets.

If the multicast loopback is enabled, a transmitted multicast packet will be delivered back to this host (assuming the host is a member of the same multicast group).

Parameters:
is_enabledif true, enable the loopback, otherwise disable it.
error_msgthe error message (if error).
Returns:
XORP_OK on success, otherwise XORP_ERROR.

Implemented in IoIpDummy, and IoIpSocket.

EventLoop& IoIp::eventloop ( ) [inline]

Get the event loop.

Returns:
the event loop.
virtual int IoIp::family ( ) const [inline, virtual]

Get the address family.

Returns:
the address family.
FeaDataPlaneManager& IoIp::fea_data_plane_manager ( ) [inline]

Get the FeaDataPlaneManager instance.

Returns:
the FeaDataPlaneManager instance.
const IfTree& IoIp::iftree ( ) const [inline]

Get the interface tree.

Returns:
the interface tree.
IoIpManager& IoIp::io_ip_manager ( ) [inline]

Get the IoIpManager instance.

Returns:
the IoIpManager instance.
IoIpReceiver* IoIp::io_ip_receiver ( ) [inline]

Get the registered receiver.

Returns:
the registered receiver.
virtual uint8_t IoIp::ip_protocol ( ) const [inline, virtual]

Get the IP protocol number.

Returns:
the IP protocol number.
virtual bool IoIp::is_running ( ) const [inline, virtual]

Test whether this instance is running.

Returns:
true if the instance is running, otherwise false.
virtual int IoIp::join_multicast_group ( const string &  if_name,
const string &  vif_name,
const IPvX group,
string &  error_msg 
) [pure virtual]

Join a multicast group on an interface.

Parameters:
if_namethe name of the interface to join the multicast group.
vif_namethe name of the vif to join the multicast group.
groupthe multicast group to join.
error_msgthe error message (if error).
Returns:
XORP_OK on success, otherwise XORP_ERROR.

Implemented in IoIpDummy, and IoIpSocket.

virtual int IoIp::leave_multicast_group ( const string &  if_name,
const string &  vif_name,
const IPvX group,
string &  error_msg 
) [pure virtual]

Leave a multicast group on an interface.

Parameters:
if_namethe name of the interface to leave the multicast group.
vif_namethe name of the vif to leave the multicast group.
groupthe multicast group to leave.
error_msgthe error message (if error).
Returns:
XORP_OK on success, otherwise XORP_ERROR.

Implemented in IoIpDummy, and IoIpSocket.

virtual XorpFd* IoIp::mcast_protocol_fd_in ( ) [pure virtual]

Get the file descriptor for receiving protocol messages.

Returns:
a pointer to the file descriptor for receiving protocol messages, or NULL if it cannot be found.

Implemented in IoIpDummy, and IoIpSocket.

void IoIp::recv_packet ( const string &  if_name,
const string &  vif_name,
const IPvX src_address,
const IPvX dst_address,
int32_t  ip_ttl,
int32_t  ip_tos,
bool  ip_router_alert,
bool  ip_internet_control,
const vector< uint8_t > &  ext_headers_type,
const vector< vector< uint8_t > > &  ext_headers_payload,
const vector< uint8_t > &  payload 
) [protected, virtual]

Received a raw IP packet.

Parameters:
if_namethe interface name the packet arrived on.
vif_namethe vif name the packet arrived on.
src_addressthe IP source address.
dst_addressthe IP destination address.
ip_ttlthe IP TTL (hop-limit). If it has a negative value, then the received value is unknown.
ip_tosThe type of service (Diffserv/ECN bits for IPv4). If it has a negative value, then the received value is unknown.
ip_router_alertif true, the IP Router Alert option was included in the IP packet.
ip_internet_controlif true, then this is IP control traffic.
ext_headers_typea vector of integers with the types of the optional IPv6 extention headers.
ext_headers_payloada vector of payload data, one for each optional IPv6 extention header. The number of entries must match ext_headers_type.
packetthe payload, everything after the IP header and options.
void IoIp::recv_system_multicast_upcall ( const vector< uint8_t > &  payload) [protected, virtual]

Received a multicast forwarding related upcall from the system.

Examples of such upcalls are: "nocache", "wrongiif", "wholepkt", "bw_upcall".

Parameters:
payloadthe payload data for the upcall.
void IoIp::register_io_ip_receiver ( IoIpReceiver io_ip_receiver) [virtual]

Register the I/O IP raw packets receiver.

Parameters:
io_ip_receiverthe receiver to register.
virtual int IoIp::send_packet ( const string &  if_name,
const string &  vif_name,
const IPvX src_address,
const IPvX dst_address,
int32_t  ip_ttl,
int32_t  ip_tos,
bool  ip_router_alert,
bool  ip_internet_control,
const vector< uint8_t > &  ext_headers_type,
const vector< vector< uint8_t > > &  ext_headers_payload,
const vector< uint8_t > &  payload,
string &  error_msg 
) [pure virtual]

Send a raw IP packet.

Parameters:
if_namethe interface to send the packet on. It is essential for multicast. In the unicast case this field may be empty.
vif_namethe vif to send the packet on. It is essential for multicast. In the unicast case this field may be empty.
src_addressthe IP source address.
dst_addressthe IP destination address.
ip_ttlthe IP TTL (hop-limit). If it has a negative value, the TTL will be set internally before transmission.
ip_tosthe Type Of Service (Diffserv/ECN bits for IPv4 or IP traffic class for IPv6). If it has a negative value, the TOS will be set internally before transmission.
ip_router_alertif true, then add the IP Router Alert option to the IP packet.
ip_internet_controlif true, then this is IP control traffic.
ext_headers_typea vector of integers with the types of the optional IPv6 extention headers.
ext_headers_payloada vector of payload data, one for each optional IPv6 extention header. The number of entries must match ext_headers_type.
payloadthe payload, everything after the IP header and options.
error_msgthe error message (if error).
Returns:
XORP_OK on success, otherwise XORP_ERROR.

Implemented in IoIpDummy, and IoIpSocket.

virtual int IoIp::set_default_multicast_interface ( const string &  if_name,
const string &  vif_name,
string &  error_msg 
) [pure virtual]

Set default interface for transmitting multicast packets.

Parameters:
if_namethe name of the interface that would become the default multicast interface.
vif_namethe name of the vif that would become the default multicast interface.
error_msgthe error message (if error).
Returns:
XORP_OK on success, otherwise XORP_ERROR.

Implemented in IoIpDummy, and IoIpSocket.

virtual int IoIp::set_multicast_ttl ( int  ttl,
string &  error_msg 
) [pure virtual]

Set the default TTL (or hop-limit in IPv6) for the outgoing multicast packets.

Parameters:
ttlthe desired IP TTL (a.k.a. hop-limit in IPv6) value.
error_msgthe error message (if error).
Returns:
XORP_OK on success, otherwise XORP_ERROR.

Implemented in IoIpDummy, and IoIpSocket.

virtual int IoIp::start ( string &  error_msg) [pure virtual]

Start operation.

Parameters:
error_msgthe error message (if error).
Returns:
XORP_OK on success, otherwise XORP_ERROR.

Implemented in IoIpDummy, and IoIpSocket.

virtual int IoIp::stop ( string &  error_msg) [pure virtual]

Stop operation.

Parameters:
error_msgthe error message (if error).
Returns:
XORP_OK on success, otherwise XORP_ERROR.

Implemented in IoIpDummy, and IoIpSocket.


The documentation for this class was generated from the following files:
 All Classes Namespaces Functions Variables Typedefs Enumerations