Re: if_tap unaligned access problem

From: Julian Elischer (julian_at_elischer.org)
Date: 04/28/05

  • Next message: GiZmen: "Re: Changing packets ttl's"
    Date: Thu, 28 Apr 2005 11:30:02 -0700
    To: Maksim Yevmenkin <maksim.yevmenkin@savvis.net>
    
    

    Maksim Yevmenkin wrote:

    > Hello,
    >
    >> A quick question about if_tap, the tapwrite function
    >> ( which copies an ethernet frame into an mbuf using uiotombuf )
    >> is broken on alpha and sparc64.
    >> The 14 byte ethernet header causes the rest of the frame to
    >> be misaligned on 4 byte boundaries. This causes crashes in
    >> various other parts of the kernel. The solution would be to
    >> shift the mbuf by two bytes, but I am not quite sure where
    >> this should happen.
    >
    >
    > i think we have few options here:
    >
    > 1) revert back original tapwrite function that was changed in v. 1.48
    > and set offset to 2 bytes in top mbuf
    >
    > 2) change current version of tapwrite so it would m_prepend and
    > m_pullup mbuf after m_uiotombuf
    >
    > 3) change m_uiotombuf to accept one more parameter - mbuf offset at
    > which data should be copied. there are not that many users of m_uiotombuf
    >
    > /sys/kern/uipc_syscalls.c
    > /sys/net/if_tap.c
    > /sys/net/if_tun.c
    > /sys/netgraph/ng_device.c

    I think we should defien a MAC header that looks like:
    char dummy[2]
    char dest[6]
    char src[6]
    char type_len[2]
    and make ether net cards start writing 2 bytes into the buffer :-)

    >
    >> If_tun which is almost the same code has no such problem because
    >> it lacks the 14 byte ethernet header. Openbsd has a combined
    >> tun/tap driver, with some alignment hacks to fix this.
    >
    >
    > yes, that is true.
    >
    >> Should I create a pr for this problem, or is there a simple
    >> quick fix possible ?
    >
    >
    > you probably should file pr. (1) and (2) above are quick fixes. (3) is
    > more complicated and, maybe, not desirable.
    >
    > max
    > _______________________________________________
    > freebsd-net@freebsd.org mailing list
    > http://lists.freebsd.org/mailman/listinfo/freebsd-net
    > To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org"

    _______________________________________________
    freebsd-net@freebsd.org mailing list
    http://lists.freebsd.org/mailman/listinfo/freebsd-net
    To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org"


  • Next message: GiZmen: "Re: Changing packets ttl's"

    Relevant Pages

    • Re: if_tap unaligned access problem
      ... > The 14 byte ethernet header causes the rest of the frame to ... and set offset to 2 bytes in top mbuf ... with some alignment hacks to fix this. ...
      (freebsd-net)
    • Ethernet over Wireless Question
      ... I wrote a code that does simple data transmissions using raw ethernet ... I manually construct the ethernet header and set the dest/source MAC ... address before I send the frame using sendto. ...
      (comp.os.linux.networking)
    • Re: Capturing Raw packets
      ... I might not know the mac address of the Rx ... so I cannot write the receiver's mac address into the ethernet header ... of my frame directly. ... from it, like type, crc and destination mac address (which is address ...
      (comp.unix.programmer)