The recent changes to control message passing broke some things
that get certain types of control messages (ping6 and rtsol are
examples). This gets the new code closer to working:
- Collect control mbufs for processing in the controlp ==
NULL case, so that they can be freed by externalize.
- Loop over the list of control mbufs, as the externalize
function may not know how to deal with chains.
- In the case where there is no externalize function,
remember to add the control mbuf to the controlp list so
that it will be returned.
- After adding stuff to the controlp list, walk to the
end of the list of stuff that was added, incase we added
a chain.
This code can be further improved, but this is enough to get most
things working again.
Reviewed by: rwatson