aboutsummaryrefslogtreecommitdiff
path: root/src/tun
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2012-01-17 19:22:44 +0000
committerChristian Grothoff <christian@grothoff.org>2012-01-17 19:22:44 +0000
commit50b2d3968e4c61556bebd6d1eef3af4d096fb068 (patch)
treefb1a73d4f58db327d4cb694f00d50ac27c54a3d1 /src/tun
parent40261ecc5bf242437f12cf91d035c138cf089a1e (diff)
downloadgnunet-50b2d3968e4c61556bebd6d1eef3af4d096fb068.tar.gz
gnunet-50b2d3968e4c61556bebd6d1eef3af4d096fb068.zip
-move IPv4 header initialization to tun library
Diffstat (limited to 'src/tun')
-rw-r--r--src/tun/tun.c69
1 files changed, 69 insertions, 0 deletions
diff --git a/src/tun/tun.c b/src/tun/tun.c
new file mode 100644
index 000000000..97b7a730e
--- /dev/null
+++ b/src/tun/tun.c
@@ -0,0 +1,69 @@
1/*
2 This file is part of GNUnet.
3 (C) 2010, 2011, 2012 Christian Grothoff
4
5 GNUnet is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published
7 by the Free Software Foundation; either version 3, or (at your
8 option) any later version.
9
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with GNUnet; see the file COPYING. If not, write to the
17 Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA.
19*/
20
21/**
22 * @file tun/tun.
23 * @brief standard IP calculations for TUN interaction
24 * @author Philipp Toelke
25 * @author Christian Grothoff
26 */
27#include "platform.h"
28#include "gnunet_tun_lib.h"
29
30/**
31 * IP TTL we use for packets that we assemble (8 bit unsigned integer)
32 */
33#define FRESH_TTL 255
34
35/**
36 * Initialize an IPv4 header.
37 *
38 * @param ip header to initialize
39 * @param protocol protocol to use (i.e. IPPROTO_UDP)
40 * @param payload_length number of bytes of payload that follow (excluding IPv4 header)
41 * @param src source IP address to use
42 * @param dst destination IP address to use
43 */
44void
45GNUNET_TUN_initialize_ipv4_header (struct GNUNET_TUN_IPv4Header *ip,
46 uint8_t protocol,
47 uint16_t payload_length,
48 const struct in_addr *src,
49 const struct in_addr *dst)
50{
51 ip->header_length = sizeof (struct GNUNET_TUN_IPv4Header) / 4;
52 ip->version = 4;
53 ip->diff_serv = 0;
54 ip->total_length = htons (sizeof (struct GNUNET_TUN_IPv4Header) + payload_length);
55 ip->identification = (uint16_t) GNUNET_CRYPTO_random_u32 (GNUNET_CRYPTO_QUALITY_WEAK,
56 65536);
57 ip->flags = 0;
58 ip->fragmentation_offset = 0;
59 ip->ttl = FRESH_TTL;
60 ip->protocol = protocol;
61 ip->checksum = 0;
62 ip->source_address = *src;
63 ip->destination_address = *dst;
64 ip->checksum = GNUNET_CRYPTO_crc16_n (ip, sizeof (struct GNUNET_TUN_IPv4Header));
65}
66
67
68
69/* end of tun.c */