Exploratory Format C Code
This is some C code written for a big endian machine.
See this.
This is for format C.
np is called soon after the hardware has signaled the CPU that a block of packets has arrived from the fiber at interface j.
The hardware had been instructed to deposit the concatenated headers in the CPU at some multiple of 64KB.
The first location not used is passed as parameter ph to nb.
nb is recursive and it quickly finds the first packet and processes the packets in arrival order.
Routine ex reports a fatal local hardware fault and sec reports a packet fault.
Just now a packet without funds is faulty.
Global variable Open is the 16 states of the interfaces being open for assembling packets.
The code referencing Open and closely following is not MP safe.
See some good mutex info.
Just now (2012 Dec 7) I want to avoid being entangled with kernel thread scheduling.
I think that the way that circular buffer parties interlock may do the trick better.
I have turned my attention to interacting with the hardware via header rings.
Perhaps when you can’t put a header into the right output header ring, you should alternatively put it in a queue, but why??
Perhaps it is just better to enqueue a note saying that this here packet header is waiting for that fiber whose output header ring is full.
Several times per second each output stream is judged to be dead or alive.