Subject: Re: What ipl for IF{,Q}_ENQUEUE?
To: None <kpneal@pobox.com>
From: Dennis Ferguson <dennis@juniper.net>
List: tech-net
Date: 01/03/2003 11:18:27
> What ipl should be used when using IF_ENQUEUE or IFQ_ENQUEUE on
> ifnet.if_snd queues? The 4.4BSD book says splimp() and the comments
> in /sys/net/if.h say splimp(). Since splimp() has been removed
> I'm guessing splsoftnet() or splnet() are required. Which is it?
> 
> What's the difference between splsoftnet() and splnet()?
> 
> Why was splimp() used before?

I can answer the last one.  IMP is an acronym for Interface Message Processor
which was the name of the hardware to which computers were attached to
connect them to the ARPAnet.  An IMP was hence the original network
interface hardware, and splimp() blocks interrupts from your network
interface hardware.  Network processing in the kernel was (and is)
done at a lower interrupt priority which left hardware interrupts
unblocked, and that lower priority was blocked by splnet().

I'm not sure what was fixed by changing this, but I think the mapping is that
splimp() became splnet() in netbsd, while splnet() became splsoftnet().
IF*_ENQUEUE needs to block interface hardware interrupts, so splnet() is
probably what is needed on netbsd.

Dennis Ferguson