Ethernet at belt 12 int handler calls ether_input(), with pointers to the interface the packet was received on a struct ether_header (never used these days) the mbuf from the RX ring of course you noticed it is really an mbuf pointing to the mbuf cluster from the RX ring ether_input does its ethernet magic eventually figures out it is IPv4, queues our nice mbuf in ipintrq and asserts a "soft interrupt"