Re: udp checksum on raw sockets

From: Charles Swiger (cswiger_at_mac.com)
Date: 04/27/04

  • Next message: Ruslan Ermilov: "Re: udp checksum on raw sockets"
    Date: Tue, 27 Apr 2004 14:48:25 -0400
    To: Mark Santcroos <marks@ripe.net>
    
    

    On Apr 27, 2004, at 12:09 PM, Mark Santcroos wrote:
    > * I'm sending UDP packets on a raw socket.
    >
    > * iphdr->ip_src.s_addr = INADDR_ANY;
    > So I don't know the IP address that will be used as src address.

    The kernel ought to pick the src address of the interface the packet
    will be sent from according to the routing table. At least if you were
    using SOCK_DGRAM, I'm not sure how much the kernel fills in when using
    SOCK_RAW.

    > So as far as I can see, I have a problem generating the checksum in
    > userspace.
    >
    > Suggestion:
    >
    > Would it make sense that if:
    > sysctl net.udp.checksum=1
    > and
    > udphdr->uh_sum = 0;
    > in a UDP packet created on a raw socket, to do the checksum in the
    > kernel
    > instead of leaving it zero? If it does, I can create a patch.

    And likewise with computing the checksum, I would expect the kernel to
    compute the packet checksums-- there's ip_sum as well as uh_sum.

    > Any other hints as how to do the checksum in userland are welcome too.
    > As
    > that is the "ultimate" problem I try to fix.

    Consider using libnet to build your packets:

    http://www.packetfactory.net/projects/libnet/

    ...between libnet and libpcap, you've got userland code to handle both
    sending and receiving packets in an OS-independent fashion. Amoung
    other things, libnet has an implementation of "how to compute packet
    checksums" available for you to consider or use.

    -- 
    -Chuck
    _______________________________________________
    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: Ruslan Ermilov: "Re: udp checksum on raw sockets"

    Relevant Pages