On Sun, Feb 14, 2021 at 07:46:38PM +0000, Roy Marples wrote: > On 13/02/2021 21:34, David Young wrote: > > On Tue, Feb 09, 2021 at 07:02:32AM +0000, Roy Marples wrote: > > > Hi David > > > > > > On 03/02/2021 21:45, David Young wrote: > > > > > > > > This change looks a little hasty to me. > > > > > > > > It looks to me like some of these structs were __packed so that > > > > they could be read/written directly from/to any offset in a packet > > > > chain using mtod(), which does not pay any mind to the alignment > > > > of `*t`: > > > > > > > > #define mtod(m, t) ((t)((m)->m_data)) > > > > > > > > I see gre_h is accessed in that way, just for one example. > > > > > > Looking at the other places where this is handled, does this patch to > > > gre_h > > > address your concerns? > > > I tested this on aarch64 which does not define __NO_STRICT_ALIGNMENT and > > > it > > > passes the KASSERT. > > > > It is possible to simplify your patch a lot. The GRE header is only 4 > > bytes long. On the receive side, just perform the m_pullup like the > > old code did and then memcpy to a `struct gre_h` on the stack. On the > > send side, construct the header on the stack and then memcpy it into the > > mbuf. > > > > The same general approach, of copying headers between mbufs the stack, > > is probably plenty fast for virtually any size of header used in the > > network stack.
Thank you. I know you probably did not expect to spend so much time on this. I appreciate your efforts. Dave -- David Young dyo...@pobox.com Urbana, IL (217) 721-9981