They did all sorts of other work too. For one example, their futex() equivalent was a program called a wake predicate that could read from that process's address space to decide if that thread should transition back to runnable.
And deciding who owns a network packet is literally how "extended Berkley Packet Filter" go it's start as well.
And deciding who owns a network packet is literally how "extended Berkley Packet Filter" go it's start as well.