|
|
A class that handles raw IP I/O communication for a specific protocol.
It also allows arbitrary filters to receive the raw IP data for that protocol.
InputFilter (class) | InputFilter |
JoinedMulticastGroup (class) | JoinedMulticastGroup |
IoIpComm (IoIpManager& io_ip_manager, const IfTree& iftree, int family,
uint8_t ip_protocol)
| IoIpComm |
Constructor for IoIpComm.
Parameters:
io_ip_manager | the corresponding I/O IP manager (IoIpManager). |
iftree | the interface tree to use. |
family | the address family (AF_INET or AF_INET6 for IPv4 and IPv6 respectively). |
ip_protocol | the IP protocol number (IPPROTO_*). |
~IoIpComm ()
| ~IoIpComm |
[virtual]
void allocate_io_ip_plugins ()
| allocate_io_ip_plugins |
Allocate the I/O IP plugins (one per data plane manager).
void deallocate_io_ip_plugins ()
| deallocate_io_ip_plugins |
Deallocate the I/O IP plugins (one per data plane manager).
void allocate_io_ip_plugin (FeaDataPlaneManager* fea_data_plane_manager)
| allocate_io_ip_plugin |
Allocate an I/O IP plugin for a given data plane manager.
Parameters:
fea_data_plane_manager | the data plane manager. |
void deallocate_io_ip_plugin (FeaDataPlaneManager* fea_data_plane_manager)
| deallocate_io_ip_plugin |
Deallocate the I/O IP plugin for a given data plane manager.
Parameters:
fea_data_plane_manager | the data plane manager. |
void start_io_ip_plugins ()
| start_io_ip_plugins |
void stop_io_ip_plugins ()
| stop_io_ip_plugins |
int add_filter (InputFilter* filter)
| add_filter |
Add a filter to list of input filters.
The IoIpComm class assumes that the callee will be responsible for managing the memory associated with the filter and will call remove_filter() if the filter is deleted or goes out of scope.
Parameters:
filter | the filter to add. |
Returns: XORP_OK on success, otherwise XORP_ERROR.
int remove_filter (InputFilter* filter)
| remove_filter |
Remove filter from list of input filters.
Parameters:
filter | the filter to remove. |
Returns: XORP_OK on success, otherwise XORP_ERROR.
bool no_input_filters ()
| no_input_filters |
[const]
Returns: true if there are no filters associated with this instance.
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)
| send_packet |
Send a raw IP packet.
Parameters:
if_name | the interface to send the packet on. It is essential for multicast. In the unicast case this field may be empty. |
vif_name | the vif to send the packet on. It is essential for multicast. In the unicast case this field may be empty. |
src_address | the IP source address. |
dst_address | the IP destination address. |
ip_ttl | the IP TTL (hop-limit). If it has a negative value, the TTL will be set internally before transmission. |
ip_tos | the Type Of Service (IP traffic class for IPv6). If it has a negative value, the TOS will be set internally before transmission. |
ip_router_alert | if true, then add the IP Router Alert option to the IP packet. |
ip_internet_control | if true, then this is IP control traffic. |
ext_headers_type | a vector of integers with the types of the optional IPv6 extention headers. |
ext_headers_payload | a vector of payload data, one for each optional IPv6 extention header. The number of entries must match ext_headers_type. |
payload | the payload, everything after the IP header and options. |
error_msg | the error message (if error). |
Returns: XORP_OK on success, otherwise XORP_ERROR.
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)
| recv_packet |
[virtual]
Received a raw IP packet.
Parameters:
if_name | the interface name the packet arrived on. |
vif_name | the vif name the packet arrived on. |
src_address | the IP source address. |
dst_address | the IP destination address. |
ip_ttl | the IP TTL (hop-limit). If it has a negative value, then the received value is unknown. |
ip_tos | The type of service (Diffserv/ECN bits for IPv4). If it has a negative value, then the received value is unknown. |
ip_router_alert | if true, the IP Router Alert option was included in the IP packet. |
ip_internet_control | if true, then this is IP control traffic. |
ext_headers_type | a vector of integers with the types of the optional IPv6 extention headers. |
ext_headers_payload | a vector of payload data, one for each optional IPv6 extention header. The number of entries must match ext_headers_type. |
packet | the payload, everything after the IP header and options. |
Reimplemented from IoIpReceiver.
void recv_system_multicast_upcall (const vector<uint8_t>& payload)
| recv_system_multicast_upcall |
[virtual]
Received a multicast forwarding related upcall from the system.
Examples of such upcalls are: "nocache", "wrongiif", "wholepkt", "bw_upcall".
Parameters:
payload | the payload data for the upcall. |
Reimplemented from IoIpReceiver.
int join_multicast_group (const string& if_name,
const string& vif_name,
const IPvX& group_address,
const string& receiver_name,
string& error_msg)
| join_multicast_group |
Join an IP multicast group.
Parameters:
if_name | the interface through which packets should be accepted. |
vif_name | the vif through which packets should be accepted. |
group_address | the multicast group address to join. |
receiver_name | the name of the receiver. |
error_msg | the error message (if error). |
Returns: XORP_OK on success, otherwise XORP_ERROR.
int leave_multicast_group (const string& if_name,
const string& vif_name,
const IPvX& group_address,
const string& receiver_name,
string& error_msg)
| leave_multicast_group |
Leave an IP multicast group.
Parameters:
if_name | the interface through which packets should not be accepted. |
vif_name | the vif through which packets should not be accepted. |
group_address | the multicast group address to leave. |
receiver_name | the name of the receiver. |
error_msg | the error message (if error). |
Returns: XORP_OK on success, otherwise XORP_ERROR.
uint8_t ip_protocol ()
| ip_protocol |
[const]
Get the IP protocol.
Returns: the IP protocol.
XorpFd first_valid_protocol_fd_in ()
| first_valid_protocol_fd_in |
Get the first valid file descriptor for receiving protocol messages.
Returns: the first valid file descriptor for receiving protocol messages.