|
|
The IoLinkManager has two containers: a container for link-level handlers (IoLinkComm) indexed by the protocol associated with the handler, and a container for the filters associated with each receiver_name. When a receiver registers for interest in a particular type of raw packet a handler (IoLinkComm) is created if necessary, then the relevent filter is created and associated with the IoLinkComm.
typedef XorpCallback2<int, const uint8_t*, size_t>::RefPtr UpcallReceiverCb | UpcallReceiverCb |
IoLinkManager (FeaNode& fea_node, const IfTree& iftree)
| IoLinkManager |
Constructor for IoLinkManager.
~IoLinkManager ()
| ~IoLinkManager |
[virtual]
int send (const string& if_name,
const string& vif_name,
const Mac& src_address,
const Mac& dst_address,
uint16_t ether_type,
const vector<uint8_t>& payload,
string& error_msg)
| send |
Send a raw link-level packet on an interface.
Parameters:
if_name | the interface to send the packet on. |
vif_name | the vif to send the packet on. |
src_address | the MAC source address. |
dst_address | the MAC destination address. |
ether_type | the EtherType protocol type or the Destination SAP. It must be between 1536 and 65535 to specify the EtherType, or between 1 and 255 to specify the Destination SAP IEEE 802.2 LLC frames. |
payload | the payload, everything after the MAC header. |
error_msg | the error message (if error). |
Returns: XORP_OK on success, otherwise XORP_ERROR.
int register_receiver (const string& receiver_name,
const string& if_name,
const string& vif_name,
uint16_t ether_type,
const string& filter_program,
bool enable_multicast_loopback,
string& error_msg)
| register_receiver |
Register to receive raw link-level packets.
Parameters:
receiver_name | the name of the receiver. |
if_name | the interface through which packets should be accepted. |
vif_name | the vif through which packets should be accepted. |
ether_type | the EtherType protocol number or the Destination SAP that the receiver is interested in. It must be between 1536 and 65535 to specify the EtherType, or between 1 and 255 to specify the Destination SAP for IEEE 802.2 LLC frames. A protocol number of 0 is used to specify all protocols. |
filter_program | the optional filter program to be applied on the received packets. The program uses tcpdump(1) style expression. |
enable_multicast_loopback | if true then enable delivering of multicast datagrams back to this host (assuming the host is a member of the same multicast group. |
error_msg | the error message (if error). |
Returns: XORP_OK on success, otherwise XORP_ERROR.
int unregister_receiver (const string& receiver_name,
const string& if_name,
const string& vif_name,
uint16_t ether_type,
const string& filter_program,
string& error_msg)
| unregister_receiver |
Unregister to receive raw link-level packets.
Parameters:
receiver_name | the name of the receiver. |
if_name | the interface through which packets should not be accepted. |
vif_name | the vif through which packets should not be accepted. |
ether_type | the EtherType protocol number or the Destination SAP that the receiver is not interested in anymore. It must be between 1536 and 65535 to specify the EtherType, or between 1 and 255 to specify the Destination SAP for IEEE 802.2 LLC frames. A protocol number of 0 is used to specify all protocols. |
filter_program | the filter program that was applied on the received packets. The program uses tcpdump(1) style expression. |
error_msg | the error message (if error). |
Returns: XORP_OK on success, otherwise XORP_ERROR.
int join_multicast_group (const string& receiver_name,
const string& if_name,
const string& vif_name,
uint16_t ether_type,
const string& filter_program,
const Mac& group_address,
string& error_msg)
| join_multicast_group |
Join a MAC multicast group.
Parameters:
receiver_name | the name of the receiver. |
if_name | the interface through which packets should be accepted. |
vif_name | the vif through which packets should be accepted. |
ether_type | the EtherType protocol number or the Destination SAP that the receiver is interested in. It must be between 1536 and 65535 to specify the EtherType, or between 1 and 255 to specify the Destination SAP for IEEE 802.2 LLC frames. A protocol number of 0 is used to specify all protocols. |
filter_program | the optional filter program to be applied on the received packets. The program uses tcpdump(1) style expression. |
group_address | the multicast group address to join. |
error_msg | the error message (if error). |
Returns: XORP_OK on success, otherwise XORP_ERROR.
int leave_multicast_group (const string& receiver_name,
const string& if_name,
const string& vif_name,
uint16_t ether_type,
const string& filter_program,
const Mac& group_address,
string& error_msg)
| leave_multicast_group |
Leave a MAC multicast group.
Parameters:
receiver_name | the name of the receiver. |
if_name | the interface through which packets should not be accepted. |
vif_name | the vif through which packets should not be accepted. |
ether_type | the EtherType protocol number or the Destination SAP that the receiver is not interested in anymore. It must be between 1536 and 65535 to specify the EtherType, or between 1 and 255 to specify the Destination SAP for IEEE 802.2 LLC frames. A protocol number of 0 is used to specify all protocols. |
filter_program | the filter program that was applied on the received packets. The program uses tcpdump(1) style expression. |
group_address | the multicast group address to leave. |
error_msg | the error message (if error). |
Returns: XORP_OK on success, otherwise XORP_ERROR.
void recv_event (const string& receiver_name,
const struct MacHeaderInfo& header,
const vector<uint8_t>& payload)
| recv_event |
Data received event.
Parameters:
receiver_name | the name of the receiver to send the raw link-level packet to. |
header | the MAC header information. |
payload | the payload, everything after the MAC header. |
Reimplemented from IoLinkManagerReceiver.
void instance_birth (const string& instance_name)
| instance_birth |
Inform the watcher that a component instance is alive.
Parameters:
instance_name | the name of the instance that is alive. |
Reimplemented from InstanceWatcher.
void instance_death (const string& instance_name)
| instance_death |
Inform the watcher that a component instance is dead.
Parameters:
instance_name | the name of the instance that is dead. |
Reimplemented from InstanceWatcher.
void set_io_link_manager_receiver (IoLinkManagerReceiver* v)
| set_io_link_manager_receiver |
Set the instance that is responsible for sending raw link-level packets to a receiver.
const IfTree& iftree ()
| iftree |
[const]
Get a reference to the interface tree.
Returns: a reference to the interface tree (IfTree).
int register_data_plane_manager (FeaDataPlaneManager* fea_data_plane_manager,
bool is_exclusive)
| register_data_plane_manager |
Register FeaDataPlaneManager data plane manager.
Parameters:
fea_data_plane_manager | the data plane manager to register. |
is_exclusive | if true, the manager is registered as the exclusive manager, otherwise is added to the list of managers. |
Returns: XORP_OK on success, otherwise XORP_ERROR.
int unregister_data_plane_manager (FeaDataPlaneManager* fea_data_plane_manager)
| unregister_data_plane_manager |
Unregister FeaDataPlaneManager data plane manager.
Parameters:
fea_data_plane_manager | the data plane manager to unregister. |
Returns: XORP_OK on success, otherwise XORP_ERROR.
list<FeaDataPlaneManager*>& fea_data_plane_managers ()
| fea_data_plane_managers |
Get the list of registered data plane managers.
Returns: the list of registered data plane managers.