A graph of packet and message routing inside the pvmd is shown in
Figure .
Packets are received from the network
by
netinput()
directly into buffers
long enough to hold the largest packet
the pvmd will receive (its MTU in the host table).
Packets from local tasks
are read by loclinput(),
which creates a buffer large enough for each packet
after it reads the header.
To route a packet,
the pvmd chains it onto
the queue for its destination.
If a packet is multicast
(see Section
),
the descriptor is replicated,
counting extra
references on the underlying databuf.
One copy is placed in each send queue.
After the last copy of the packet is sent,
the databuf is freed.
Figure: Packet and message routing in pvmd