Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 27 Apr 2004 22:05:43 +0300
From:      Ruslan Ermilov <ru@freebsd.org>
To:        Mark Santcroos <marks@ripe.net>
Cc:        net@freebsd.org
Subject:   Re: udp checksum on raw sockets
Message-ID:  <20040427190543.GA75827@ip.net.ua>
In-Reply-To: <20040427160901.GA2552@laptop.6bone.nl>
References:  <20040427160901.GA2552@laptop.6bone.nl>

next in thread | previous in thread | raw e-mail | index | archive | help

--FCuugMFkClbJLl1L
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Tue, Apr 27, 2004 at 06:09:01PM +0200, Mark Santcroos wrote:
> * I'm sending UDP packets on a raw socket.
>=20
> * iphdr->ip_src.s_addr =3D INADDR_ANY;
>   So I don't know the IP address that will be used as src address.
>   So as far as I can see, I have a problem generating the checksum in
>   userspace.
>=20
Yes, that problem is real.

> Suggestion:
>=20
> Would it make sense that if:
> sysctl net.udp.checksum=3D1
> and
> udphdr->uh_sum =3D 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.
>=20
> Any other hints as how to do the checksum in userland are welcome too. As
> that is the "ultimate" problem I try to fix.
>=20
Have the raw IP code set csum_flags |=3D CSUM_UDP (and set csum_data
correctly) in m->m_pkthdr, if ip_p =3D=3D IPPROTO_UDP && uh_csum =3D=3D 0.
Do the same thing for IPPROTO_TCP.


Cheers,
--=20
Ruslan Ermilov
ru@FreeBSD.org
FreeBSD committer

--FCuugMFkClbJLl1L
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (FreeBSD)

iD8DBQFAjq8GUkv4P6juNwoRAvxJAJ4tHLdBZ1hzYCUBGQut4HBgVwHmXwCfT0rR
ebFdz10AGKUUZpT4CXK4tn8=
=mvLQ
-----END PGP SIGNATURE-----

--FCuugMFkClbJLl1L--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20040427190543.GA75827>