![]() |
L4Re Operating System Framework
Interface and Usage Documentation
|
The Virtio switch contains all ports and processes network requests. More...
#include <switch.h>
Public Member Functions | |
Virtio_switch (unsigned max_ports) | |
Create a switch with n ports. | |
bool | add_port (Virtio_port *port) |
Add a port to the switch. | |
bool | add_monitor_port (Virtio_port *port) |
Add a monitor port to the switch. | |
void | check_ports () |
Check validity of ports. | |
void | handle_port_irq (Virtio_port *port) |
Handle an incoming irq on a given port. | |
int | port_available (bool monitor) |
Is there still a free port on this switch available? | |
The Virtio switch contains all ports and processes network requests.
A Port on its own is not capable to process an incoming network request because it has no knowledge about other ports. The processing of an incoming request therefore gets delegated to the switch.
The Virtio_switch
is constructed at the start of the Virtio Net Switch application. The factory saves a reference to it to pass it to the Kick_irq
on port creation.
|
explicit |
bool Virtio_switch::add_monitor_port | ( | Virtio_port * | port | ) |
Add a monitor port to the switch.
port | A pointer to an already constructed Virtio_port object. |
true | Port was added successfully. |
false | Switch was not able to add the port. |
Definition at line 55 of file switch.cc.
Referenced by Switch_factory::op_create().
bool Virtio_switch::add_port | ( | Virtio_port * | port | ) |
Add a port to the switch.
port | A pointer to an already constructed Virtio_port object. |
true | Port was added successfully. |
false | Switch was not able to add the port. |
Definition at line 30 of file switch.cc.
References Mac_addr::is_unknown(), and Virtio_port::mac().
Referenced by Switch_factory::op_create().
void Virtio_switch::check_ports | ( | ) |
Check validity of ports.
Check whether all ports are still used and remove any unused (unreferenced) ports. Shall be invoked after an incoming cap deletion irq to remove ports without clients.
Definition at line 70 of file switch.cc.
References Mac_table< Size >::flush(), and L4::Epiface_t0< RPC_IFACE, BASE >::obj_cap().
void Virtio_switch::handle_port_irq | ( | Virtio_port * | port | ) |
Handle an incoming irq on a given port.
Virtio_port does not handle irq related stuff by itself. Someone else has to do this and has to handle incoming irqs. This function is supposed to be invoked after an irq related to the port came in.
port | the Virtio_port an irq was triggered on |
Definition at line 143 of file switch.cc.
References L4virtio::Svr::Device_t< DATA >::device_error(), L4virtio::Svr::Bad_descriptor::message(), Virtio_net::rx_q(), Virtio_net::tx_q(), and Virtio_port::tx_work_pending().
|
inline |
Is there still a free port on this switch available?
monitor | True if we look for a monitor slot. |
>=0 | The next available port index. |
-1 | No port available. |
Definition at line 123 of file switch.h.
Referenced by Switch_factory::op_create().