On to the next bit of the network stack. My plan had been to cover
the stack from the bottom up, but in the end this turned into an
"edges in" approach, covering both the device-interface layer and the
user API.
- dev.[ch] General send/receive glue (interrupts, etc.), plus
ioctl handling. ioctls code is alwyas dull switch statements.
- packet.c Raw send and receive of packets. As opposed to
"raw", which deals with raw IP packets. This file uses
"datagram", which uses "sock", so let's take a look at that...
- sock.h "sock" is one huge and complicated structure. proto
is big but not quite as bad.
- sock.c Yep, that's a big pile of user-land-interfacing
code. 2kloc btween the .h and c. "destroy_sock" is a big method that's
complicated, and it's not clear to me when it's really done. A bit
more documentation, probably through invariants, would help, I
reckon. Then there's {get,set}sockopt. As if ioctl and fcntl aren't
enough?
- datagram.c Provides useful reusable functionality across
protocols.
So, having both sides of the interface defined, I'm at a point
where we can do a little bit of filling the middle and reading up the
rest of the stack.
Posted 2018-10-21.