4 years agoWIP NAPI variant napi
Reto Buerki [Tue, 26 May 2015 08:31:52 +0000 (10:31 +0200)]
WIP NAPI variant

Currently abuses the __reserved member of the muchannel struct to
suppress interrupts at the sender (see T238 for a discussion of NAPI
with muennet).

4 years agoreader: Minor cleanups in work function
Reto Buerki [Fri, 22 May 2015 13:57:34 +0000 (15:57 +0200)]
reader: Minor cleanups in work function

4 years agodebugfs: Export writer event and reader IRQ numbers
Reto Buerki [Thu, 21 May 2015 14:01:07 +0000 (16:01 +0200)]
debugfs: Export writer event and reader IRQ numbers

4 years agoDrop obsolete poll_interval code
Reto Buerki [Thu, 21 May 2015 13:56:39 +0000 (15:56 +0200)]
Drop obsolete poll_interval code

4 years agoreader: Free IRQ in cleanup_reader
Reto Buerki [Thu, 21 May 2015 13:37:35 +0000 (15:37 +0200)]
reader: Free IRQ in cleanup_reader

4 years agowriter: Trigger hypercall on new data
Reto Buerki [Thu, 21 May 2015 13:08:19 +0000 (15:08 +0200)]
writer: Trigger hypercall on new data

Use the kvm_hypercall0 function to trigger a hypercall with associated
output channel event number if new data is available.

4 years agoreader: Request IRQ
Reto Buerki [Thu, 21 May 2015 13:02:03 +0000 (15:02 +0200)]
reader: Request IRQ

Call the request_irq function in initialize_reader to associate the
muennet_intr_rx function with the input channel IRQ number.

4 years agoreader: Add interrupt handler function
Reto Buerki [Thu, 21 May 2015 12:59:51 +0000 (14:59 +0200)]
reader: Add interrupt handler function

The muennet_intr_rx function immediately returns after scheduling the
reader work bottom halve.

4 years agoDo not explicitly schedule reader bottom halve
Reto Buerki [Thu, 21 May 2015 13:06:21 +0000 (15:06 +0200)]
Do not explicitly schedule reader bottom halve

The reader work bottom halve will be scheduled if the assigned input
channel IRQ occurs.

4 years agowriter: Check for assigned channel event on init
Reto Buerki [Thu, 21 May 2015 12:49:36 +0000 (14:49 +0200)]
writer: Check for assigned channel event on init

The event number will be used to inform our peer that new data is

4 years agoreader: Check for assigned channel vector on init
Reto Buerki [Thu, 21 May 2015 11:31:26 +0000 (13:31 +0200)]
reader: Check for assigned channel vector on init

The vector will be used to request an IRQ via request_irq().

4 years agoImplement support for Path MTU Discovery
Stefan Berghofer [Fri, 5 Jun 2015 13:54:32 +0000 (15:54 +0200)]
Implement support for Path MTU Discovery

The module's pmtu parameter allows the specification of input channels
from which discovered Path MTU values are read. If an outgoing packet
exceeds the associated PMTU value, an ICMP Fragmentation Needed (Type 3,
Code 4) message containing the current PMTU value is sent back to update
the path. In case of IPv6, an ICMPv6 Packet Too Big (Type 2) message is

In order for this to work, the outgoing packets must be marked by
Netfilter's nfmark functionality. The configured mark specifies the
index into the PMTU array.

4 years agoreader: Call schedule() between successful reads
Reto Buerki [Fri, 22 May 2015 13:07:23 +0000 (15:07 +0200)]
reader: Call schedule() between successful reads

Allow the kernel to schedule different threads more often. Without this
explicit schedule() call, other networking subsystems might be unable to
handle the workload injected by the reader work function (i.e. the UDP
receive queue drops packets when it is full).

4 years agoreader: Simplify IP handling in work function
Reto Buerki [Fri, 22 May 2015 12:34:57 +0000 (14:34 +0200)]
reader: Simplify IP handling in work function

4 years agoreader: Use switch statement in work function
Reto Buerki [Fri, 22 May 2015 12:04:11 +0000 (14:04 +0200)]
reader: Use switch statement in work function

4 years agoSwitch reader implementation to work queues
Reto Buerki [Wed, 20 May 2015 07:56:33 +0000 (09:56 +0200)]
Switch reader implementation to work queues

Instead of creating an explicit kernel thread, use kernel-global work
queue to schedule reader work. This is in preparation of switching the
driver from polling to interrupt mode.

4 years agoInitial import of the muennet Linux kernel module
Reto Buerki [Thu, 9 Apr 2015 08:44:28 +0000 (10:44 +0200)]
Initial import of the muennet Linux kernel module

The muennet Linux kernel module implements a virtual network interface
driver which sends and receives data via shared memory channels provided
by the Muen Separation Kernel [1]. See the file for more

[1] -