L4Re Operating System Framework
Interface and Usage Documentation
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
L4virtio_port Class Reference

A Port on the Virtio Net Switch. More...

#include <port_l4virtio.h>

+ Inheritance diagram for L4virtio_port:
+ Collaboration diagram for L4virtio_port:

Public Member Functions

 L4virtio_port (unsigned vq_max, unsigned num_ds, char const *name, l4_uint8_t const *mac)
 Create a Virtio net port object.
 
bool tx_work_pending () const
 Check whether there is any work pending on the transmission queue.
 
std::optional< Virtio_net_requestget_tx_request ()
 Get one request from the transmission queue.
 
void drop_requests ()
 Drop all requests pending in the transmission queue.
 
- Public Member Functions inherited from Virtio_net
void reset () override
 reset callback, called for doing a device reset
 
int reconfig_queue (unsigned index) override
 callback for client queue-config request
 
bool check_features () override
 callback for checking the subset of accepted features
 
bool check_queues () override
 Check whether both virtqueues are ready.
 
void register_single_driver_irq () override
 Save the _kick_guest_irq that the client sent via device_notification_irq().
 
void trigger_driver_config_irq () override
 callback for triggering configuration change notification IRQ
 
void notify_queue (L4virtio::Svr::Virtqueue *queue)
 Trigger the _kick_guest_irq IRQ.
 
Virtqueue * tx_q ()
 Getter for the transmission queue.
 
Virtqueue * rx_q ()
 Getter for the receive queue.
 
Virtqueue const * tx_q () const
 Getter for the transmission queue.
 
Virtqueue const * rx_q () const
 Getter for the receive queue.
 
- Public Member Functions inherited from L4virtio::Svr::Device_t< DATA >
virtual void cfg_changed (unsigned)
 callback for client device configuration changes
 
virtual L4::Cap< L4::Irqdevice_notify_irq () const
 callback to gather the device notification IRQ (old-style)
 
virtual void register_driver_irq (unsigned idx)
 Callback for registering an notification IRQ (multi IRQ).
 
virtual L4::Cap< L4::Irqdevice_notify_irq (unsigned idx)
 Callback to gather the device notification IRQ (multi IRQ).
 
virtual unsigned num_events_supported () const
 Return the highest notification index supported.
 
 Device_t (Dev_config *dev_config)
 Make a device for the given config.
 
Mem_list const * mem_info () const
 Get the memory region list used for this device.
 
void reset_queue_config (unsigned idx, unsigned num_max, bool inc_generation=false)
 Trigger reset for the configuration space for queue idx.
 
void init_mem_info (unsigned num)
 Initialize the memory region list to the given maximum.
 
void device_error ()
 Transition device into DEVICE_NEEDS_RESET state.
 
bool setup_queue (Virtqueue *q, unsigned qn, unsigned num_max)
 Enable/disable the specified queue.
 
bool handle_mem_cmd_write ()
 Check for a value in the cmd register and handle a write.
 
void enable_trusted_ds_validation ()
 Enable trusted dataspace validation.
 
void add_trusted_dataspaces (std::shared_ptr< Ds_vector const > ds)
 Provide a list of trusted dataspaces that can be used for validation.
 
- Public Member Functions inherited from L4::Epiface_t0< RPC_IFACE, BASE >
Type_info::Demand get_buffer_demand () const
 Get the server-side buffer demand based in IFACE.
 
Cap< RPC_IFACE > obj_cap () const
 Get the (typed) capability to this object.
 
- Public Member Functions inherited from L4::Epiface
 Epiface ()
 Make a server object.
 
virtual ~Epiface ()=0
 Destroy the object.
 
Stored_cap obj_cap () const
 Get the capability to the kernel object belonging to this object.
 
Server_ifaceserver_iface () const
 Get pointer to server interface at which the object is currently registered.
 
int set_server (Server_iface *srv, Cap< void > cap, bool managed=false)
 Set server registration info for the object.
 
void set_obj_cap (Cap< void > const &cap)
 Deprecated server registration function.
 

Additional Inherited Members

- Public Types inherited from L4::Epiface_t0< RPC_IFACE, BASE >
typedef RPC_IFACE Interface
 Data type of the IPC interface definition.
 
- Public Types inherited from L4::Epiface
typedef Ipc_svr::Server_iface Server_iface
 Type for abstract server interface.
 
typedef Ipc_svr::Server_iface::Demand Demand
 Type for server-side receive buffer demand.
 
- Protected Attributes inherited from L4virtio::Svr::Device_t< DATA >
Mem_list _mem_info
 Memory region list.
 

Detailed Description

A Port on the Virtio Net Switch.

A Port object gets created by Virtio_factory::op_create(). This function actually only instantiates objects of the types Switch_port and Monitor_port. The created Port registers itself at the switch's server. Usually, the IPC call for port creation comes from ned. To finalize the setup, the client has to initialize the port during the virtio initialization phase. To do this, the client registers a dataspace for queues and buffers and provides an IRQ to notify the client on incoming network requests.

Definition at line 36 of file port_l4virtio.h.

Member Function Documentation

◆ drop_requests()

void L4virtio_port::drop_requests ( )
inline

Drop all requests pending in the transmission queue.

This is used for monitor ports, which are not allowed to send packets.

Definition at line 103 of file port_l4virtio.h.

References Virtio_net_request::drop_requests(), and Virtio_net::tx_q().

+ Here is the call graph for this function:

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