So netinet6/nd6_nbr.c references MH_ALIGN() in two comments.
Instead of aligning the packet to the back of the mbuf, the functions just
shift it by max_linkhdr. In most cases this should be good enough but esp.
when packets move over tunnels the additional headers will not fit into
the packet (resulting in an extra allocation).
Now using what is set as m_len as the argument for m_align() will not work
since it does not include the possible option header that is slapped on
the packet further below. This is why maxlen is used instead, which
includes the size of the option.
I'm not super happy with the function in general. It feels fragile and
error prone the way it fills the mbuf but I don't want to rewrite the two
functions just right now.