gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r12845 - in gnunet/src: include transport


From: gnunet
Subject: [GNUnet-SVN] r12845 - in gnunet/src: include transport
Date: Sun, 5 Sep 2010 07:57:58 +0200

Author: brodski
Date: 2010-09-05 07:57:58 +0200 (Sun, 05 Sep 2010)
New Revision: 12845

Added:
   gnunet/src/transport/ieee80211_radiotap.h
   gnunet/src/transport/plugin_transport_wlan.c
Modified:
   gnunet/src/include/gnunet_protocols.h
   gnunet/src/transport/Makefile.am
   gnunet/src/transport/gnunet-transport-wlan-helper.c
   gnunet/src/transport/gnunet-transport-wlan-helper.h
Log:
Some changes and new files.
I will not have internet till 7. September so if there are errors just revert 
the changes.


Modified: gnunet/src/include/gnunet_protocols.h
===================================================================
--- gnunet/src/include/gnunet_protocols.h       2010-09-04 19:56:12 UTC (rev 
12844)
+++ gnunet/src/include/gnunet_protocols.h       2010-09-05 05:57:58 UTC (rev 
12845)
@@ -643,7 +643,34 @@
  */
 #define GNUNET_MESSAGE_TYPE_VPN_HELPER 185
 
+
+
 /**
+ * Type of messages between the gnunet-wlan-helper and the daemon
+ *
+ * data messages
+ */
+
+#define GNUNET_MESSAGE_TYPE_WLAN_HELPER_DATA 195
+
+/**
+ * Control messages between the gnunet-wlan-helper and the daemon
+ */
+
+#define GNUNET_MESSAGE_TYPE_WLAN_HELPER_CONTROL 196
+
+/**
+ * Type of messages for advertisement over wlan
+ */
+#define GNUNET_MESSAGE_TYPE_WLAN_HELPER_ADVERTISEMENT 196
+
+/**
+ * Type of messages for wlan
+ */
+
+
+
+/**
  * Type used to match 'all' message types.
  */
 #define GNUNET_MESSAGE_TYPE_ALL 65535

Modified: gnunet/src/transport/Makefile.am
===================================================================
--- gnunet/src/transport/Makefile.am    2010-09-04 19:56:12 UTC (rev 12844)
+++ gnunet/src/transport/Makefile.am    2010-09-05 05:57:58 UTC (rev 12845)
@@ -32,6 +32,7 @@
 if HAVE_PCAP
 if LINUX
 WANBIN = gnunet-transport-wlan-helper
+WLAN_PLUGIN_LA = libgnunet_plugin_transport_wlan.la
 endif
 endif
 
@@ -103,6 +104,7 @@
   libgnunet_plugin_transport_udp.la \
   $(HTTP_PLUGIN_LA) \
   $(HTTPS_PLUGIN_LA) \
+  $(WLAN_PLUGIN_LA) \
   libgnunet_plugin_transport_template.la
 # TODO: add nat, etc.
 
@@ -123,6 +125,20 @@
 libgnunet_plugin_transport_template_la_LDFLAGS = \
  $(GN_PLUGIN_LDFLAGS)
 
+if HAVE_PCAP
+if LINUX
+libgnunet_plugin_transport_wlan_la_SOURCES = \
+       plugin_transport_wlan.c
+libgnunet_plugin_transport_wlan_la_LIBADD = \
+       $(top_builddir)/src/hello/libgnunethello.la \
+       $(top_builddir)/src/statistics/libgnunetstatistics.la \
+       $(top_builddir)/src/peerinfo/libgnunetpeerinfo.la \
+       $(top_builddir)/src/util/libgnunetutil.la 
+libgnunet_plugin_transport_wlan_la_LDFLAGS = \
+       $(GN_PLUGIN_LDFLAGS)
+endif
+endif
+
 libgnunet_plugin_transport_udp_la_SOURCES = \
   plugin_transport_udp.c
 libgnunet_plugin_transport_udp_la_LIBADD = \

Modified: gnunet/src/transport/gnunet-transport-wlan-helper.c
===================================================================
--- gnunet/src/transport/gnunet-transport-wlan-helper.c 2010-09-04 19:56:12 UTC 
(rev 12844)
+++ gnunet/src/transport/gnunet-transport-wlan-helper.c 2010-09-05 05:57:58 UTC 
(rev 12845)
@@ -27,8 +27,9 @@
  * This program serves as the mediator between the wlan interface and
  * gnunet
  */
+#include "gnunet-transport-wlan-helper.h"
+#include "ieee80211_radiotap.h"
 
-#include "gnunet-transport-wlan-helper.h"
 #include <pcap.h>
 
 //#include "radiotap.h"
@@ -645,7 +646,7 @@
                memcpy(pu8, u8aIeeeHeader, sizeof (u8aIeeeHeader));
                pu8 += sizeof (u8aIeeeHeader);
 
-               pu8 += sprintf((char *)pu8,
+               pu8 += sprintf((char *)u8aSendBuffer,
                    "Packetspammer %02d"
                    "broadcast packet"
                    "#%05d -- :-D --%s ----",

Modified: gnunet/src/transport/gnunet-transport-wlan-helper.h
===================================================================
--- gnunet/src/transport/gnunet-transport-wlan-helper.h 2010-09-04 19:56:12 UTC 
(rev 12844)
+++ gnunet/src/transport/gnunet-transport-wlan-helper.h 2010-09-05 05:57:58 UTC 
(rev 12845)
@@ -59,275 +59,6 @@
 #endif /* gnunet_wlan_H */
 
 
-/*
- * Copyright (c) 2003, 2004 David Young.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of David Young may not be used to endorse or promote
- *    products derived from this software without specific prior
- *    written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY DAVID YOUNG ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL DAVID
- * YOUNG BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
- * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
- * OF SUCH DAMAGE.
- */
-
-/*
- * Modifications to fit into the linux IEEE 802.11 stack,
- * Mike Kershaw (address@hidden)
- */
-
-#ifndef IEEE80211RADIOTAP_H
-#define IEEE80211RADIOTAP_H
-
-#include <linux/if_ether.h>
-#include <linux/kernel.h>
-//#include <asm/unaligned.h>
-
-/* Base version of the radiotap packet header data */
-#define PKTHDR_RADIOTAP_VERSION                0
-
-/* A generic radio capture format is desirable. There is one for
- * Linux, but it is neither rigidly defined (there were not even
- * units given for some fields) nor easily extensible.
- *
- * I suggest the following extensible radio capture format. It is
- * based on a bitmap indicating which fields are present.
- *
- * I am trying to describe precisely what the application programmer
- * should expect in the following, and for that reason I tell the
- * units and origin of each measurement (where it applies), or else I
- * use sufficiently weaselly language ("is a monotonically nondecreasing
- * function of...") that I cannot set false expectations for lawyerly
- * readers.
- */
-
-/*
- * The radio capture header precedes the 802.11 header.
- * All data in the header is little endian on all platforms.
- */
-struct ieee80211_radiotap_header {
-       u8 it_version;          /* Version 0. Only increases
-                                * for drastic changes,
-                                * introduction of compatible
-                                * new fields does not count.
-                                */
-       u8 it_pad;
-       __le16 it_len;          /* length of the whole
-                                * header in bytes, including
-                                * it_version, it_pad,
-                                * it_len, and data fields.
-                                */
-       __le32 it_present;      /* A bitmap telling which
-                                * fields are present. Set bit 31
-                                * (0x80000000) to extend the
-                                * bitmap by another 32 bits.
-                                * Additional extensions are made
-                                * by setting bit 31.
-                                */
-} __packed;
-
-/* Name                                 Data type    Units
- * ----                                 ---------    -----
- *
- * IEEE80211_RADIOTAP_TSFT              __le64       microseconds
- *
- *      Value in microseconds of the MAC's 64-bit 802.11 Time
- *      Synchronization Function timer when the first bit of the
- *      MPDU arrived at the MAC. For received frames, only.
- *
- * IEEE80211_RADIOTAP_CHANNEL           2 x __le16   MHz, bitmap
- *
- *      Tx/Rx frequency in MHz, followed by flags (see below).
- *
- * IEEE80211_RADIOTAP_FHSS              __le16       see below
- *
- *      For frequency-hopping radios, the hop set (first byte)
- *      and pattern (second byte).
- *
- * IEEE80211_RADIOTAP_RATE              u8           500kb/s
- *
- *      Tx/Rx data rate
- *
- * IEEE80211_RADIOTAP_DBM_ANTSIGNAL     s8           decibels from
- *                                                   one milliwatt (dBm)
- *
- *      RF signal power at the antenna, decibel difference from
- *      one milliwatt.
- *
- * IEEE80211_RADIOTAP_DBM_ANTNOISE      s8           decibels from
- *                                                   one milliwatt (dBm)
- *
- *      RF noise power at the antenna, decibel difference from one
- *      milliwatt.
- *
- * IEEE80211_RADIOTAP_DB_ANTSIGNAL      u8           decibel (dB)
- *
- *      RF signal power at the antenna, decibel difference from an
- *      arbitrary, fixed reference.
- *
- * IEEE80211_RADIOTAP_DB_ANTNOISE       u8           decibel (dB)
- *
- *      RF noise power at the antenna, decibel difference from an
- *      arbitrary, fixed reference point.
- *
- * IEEE80211_RADIOTAP_LOCK_QUALITY      __le16       unitless
- *
- *      Quality of Barker code lock. Unitless. Monotonically
- *      nondecreasing with "better" lock strength. Called "Signal
- *      Quality" in datasheets.  (Is there a standard way to measure
- *      this?)
- *
- * IEEE80211_RADIOTAP_TX_ATTENUATION    __le16       unitless
- *
- *      Transmit power expressed as unitless distance from max
- *      power set at factory calibration.  0 is max power.
- *      Monotonically nondecreasing with lower power levels.
- *
- * IEEE80211_RADIOTAP_DB_TX_ATTENUATION __le16       decibels (dB)
- *
- *      Transmit power expressed as decibel distance from max power
- *      set at factory calibration.  0 is max power.  Monotonically
- *      nondecreasing with lower power levels.
- *
- * IEEE80211_RADIOTAP_DBM_TX_POWER      s8           decibels from
- *                                                   one milliwatt (dBm)
- *
- *      Transmit power expressed as dBm (decibels from a 1 milliwatt
- *      reference). This is the absolute power level measured at
- *      the antenna port.
- *
- * IEEE80211_RADIOTAP_FLAGS             u8           bitmap
- *
- *      Properties of transmitted and received frames. See flags
- *      defined below.
- *
- * IEEE80211_RADIOTAP_ANTENNA           u8           antenna index
- *
- *      Unitless indication of the Rx/Tx antenna for this packet.
- *      The first antenna is antenna 0.
- *
- * IEEE80211_RADIOTAP_RX_FLAGS          __le16       bitmap
- *
- *     Properties of received frames. See flags defined below.
- *
- * IEEE80211_RADIOTAP_TX_FLAGS          __le16       bitmap
- *
- *     Properties of transmitted frames. See flags defined below.
- *
- * IEEE80211_RADIOTAP_RTS_RETRIES       u8           data
- *
- *     Number of rts retries a transmitted frame used.
- *
- * IEEE80211_RADIOTAP_DATA_RETRIES      u8           data
- *
- *     Number of unicast retries a transmitted frame used.
- *
- */
-enum ieee80211_radiotap_type {
-       IEEE80211_RADIOTAP_TSFT = 0,
-       IEEE80211_RADIOTAP_FLAGS = 1,
-       IEEE80211_RADIOTAP_RATE = 2,
-       IEEE80211_RADIOTAP_CHANNEL = 3,
-       IEEE80211_RADIOTAP_FHSS = 4,
-       IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5,
-       IEEE80211_RADIOTAP_DBM_ANTNOISE = 6,
-       IEEE80211_RADIOTAP_LOCK_QUALITY = 7,
-       IEEE80211_RADIOTAP_TX_ATTENUATION = 8,
-       IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9,
-       IEEE80211_RADIOTAP_DBM_TX_POWER = 10,
-       IEEE80211_RADIOTAP_ANTENNA = 11,
-       IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12,
-       IEEE80211_RADIOTAP_DB_ANTNOISE = 13,
-       IEEE80211_RADIOTAP_RX_FLAGS = 14,
-       IEEE80211_RADIOTAP_TX_FLAGS = 15,
-       IEEE80211_RADIOTAP_RTS_RETRIES = 16,
-       IEEE80211_RADIOTAP_DATA_RETRIES = 17,
-
-       /* valid in every it_present bitmap, even vendor namespaces */
-       IEEE80211_RADIOTAP_RADIOTAP_NAMESPACE = 29,
-       IEEE80211_RADIOTAP_VENDOR_NAMESPACE = 30,
-       IEEE80211_RADIOTAP_EXT = 31
-};
-
-/* Channel flags. */
-#define        IEEE80211_CHAN_TURBO    0x0010  /* Turbo channel */
-#define        IEEE80211_CHAN_CCK      0x0020  /* CCK channel */
-#define        IEEE80211_CHAN_OFDM     0x0040  /* OFDM channel */
-#define        IEEE80211_CHAN_2GHZ     0x0080  /* 2 GHz spectrum channel. */
-#define        IEEE80211_CHAN_5GHZ     0x0100  /* 5 GHz spectrum channel */
-#define        IEEE80211_CHAN_PASSIVE  0x0200  /* Only passive scan allowed */
-#define        IEEE80211_CHAN_DYN      0x0400  /* Dynamic CCK-OFDM channel */
-#define        IEEE80211_CHAN_GFSK     0x0800  /* GFSK channel (FHSS PHY) */
-
-/* For IEEE80211_RADIOTAP_FLAGS */
-#define        IEEE80211_RADIOTAP_F_CFP        0x01    /* sent/received
-                                                * during CFP
-                                                */
-#define        IEEE80211_RADIOTAP_F_SHORTPRE   0x02    /* sent/received
-                                                * with short
-                                                * preamble
-                                                */
-#define        IEEE80211_RADIOTAP_F_WEP        0x04    /* sent/received
-                                                * with WEP encryption
-                                                */
-#define        IEEE80211_RADIOTAP_F_FRAG       0x08    /* sent/received
-                                                * with fragmentation
-                                                */
-#define        IEEE80211_RADIOTAP_F_FCS        0x10    /* frame includes FCS */
-#define        IEEE80211_RADIOTAP_F_DATAPAD    0x20    /* frame has padding 
between
-                                                * 802.11 header and payload
-                                                * (to 32-bit boundary)
-                                                */
-#define IEEE80211_RADIOTAP_F_BADFCS    0x40    /* bad FCS */
-
-/* For IEEE80211_RADIOTAP_RX_FLAGS */
-#define IEEE80211_RADIOTAP_F_RX_BADPLCP        0x0002  /* frame has bad PLCP */
-
-/* For IEEE80211_RADIOTAP_TX_FLAGS */
-#define IEEE80211_RADIOTAP_F_TX_FAIL   0x0001  /* failed due to excessive
-                                                * retries */
-#define IEEE80211_RADIOTAP_F_TX_CTS    0x0002  /* used cts 'protection' */
-#define IEEE80211_RADIOTAP_F_TX_RTS    0x0004  /* used rts/cts handshake */
-
-/* Ugly macro to convert literal channel numbers into their mhz equivalents
- * There are certianly some conditions that will break this (like feeding it 
'30')
- * but they shouldn't arise since nothing talks on channel 30. */
-#define ieee80211chan2mhz(x) \
-       (((x) <= 14) ? \
-       (((x) == 14) ? 2484 : ((x) * 5) + 2407) : \
-       ((x) + 1000) * 5)
-
-#if BROKEN
-/* helpers */
-static inline int ieee80211_get_radiotap_len(unsigned char *data)
-{
-       struct ieee80211_radiotap_header *hdr =
-               (struct ieee80211_radiotap_header *)data;
-
-       return get_unaligned_le16(&hdr->it_len);
-}
-#endif
-#endif                         /* IEEE80211_RADIOTAP_H */
-
-
-
 /* Radiotap header iteration
  *   implemented in net/wireless/radiotap.c
  *   docs in Documentation/networking/radiotap-headers.txt

Added: gnunet/src/transport/ieee80211_radiotap.h
===================================================================
--- gnunet/src/transport/ieee80211_radiotap.h                           (rev 0)
+++ gnunet/src/transport/ieee80211_radiotap.h   2010-09-05 05:57:58 UTC (rev 
12845)
@@ -0,0 +1,265 @@
+/*
+ * Copyright (c) 2003, 2004 David Young.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of David Young may not be used to endorse or promote
+ *    products derived from this software without specific prior
+ *    written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY DAVID YOUNG ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL DAVID
+ * YOUNG BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+ * OF SUCH DAMAGE.
+ */
+
+/*
+ * Modifications to fit into the linux IEEE 802.11 stack,
+ * Mike Kershaw (address@hidden)
+ */
+
+#ifndef IEEE80211RADIOTAP_H
+#define IEEE80211RADIOTAP_H
+
+#include <linux/if_ether.h>
+#include <linux/kernel.h>
+//#include <asm/unaligned.h>
+
+/* Base version of the radiotap packet header data */
+#define PKTHDR_RADIOTAP_VERSION                0
+
+/* A generic radio capture format is desirable. There is one for
+ * Linux, but it is neither rigidly defined (there were not even
+ * units given for some fields) nor easily extensible.
+ *
+ * I suggest the following extensible radio capture format. It is
+ * based on a bitmap indicating which fields are present.
+ *
+ * I am trying to describe precisely what the application programmer
+ * should expect in the following, and for that reason I tell the
+ * units and origin of each measurement (where it applies), or else I
+ * use sufficiently weaselly language ("is a monotonically nondecreasing
+ * function of...") that I cannot set false expectations for lawyerly
+ * readers.
+ */
+
+/*
+ * The radio capture header precedes the 802.11 header.
+ * All data in the header is little endian on all platforms.
+ */
+struct ieee80211_radiotap_header {
+       u8 it_version;          /* Version 0. Only increases
+                                * for drastic changes,
+                                * introduction of compatible
+                                * new fields does not count.
+                                */
+       u8 it_pad;
+       __le16 it_len;          /* length of the whole
+                                * header in bytes, including
+                                * it_version, it_pad,
+                                * it_len, and data fields.
+                                */
+       __le32 it_present;      /* A bitmap telling which
+                                * fields are present. Set bit 31
+                                * (0x80000000) to extend the
+                                * bitmap by another 32 bits.
+                                * Additional extensions are made
+                                * by setting bit 31.
+                                */
+} __packed;
+
+/* Name                                 Data type    Units
+ * ----                                 ---------    -----
+ *
+ * IEEE80211_RADIOTAP_TSFT              __le64       microseconds
+ *
+ *      Value in microseconds of the MAC's 64-bit 802.11 Time
+ *      Synchronization Function timer when the first bit of the
+ *      MPDU arrived at the MAC. For received frames, only.
+ *
+ * IEEE80211_RADIOTAP_CHANNEL           2 x __le16   MHz, bitmap
+ *
+ *      Tx/Rx frequency in MHz, followed by flags (see below).
+ *
+ * IEEE80211_RADIOTAP_FHSS              __le16       see below
+ *
+ *      For frequency-hopping radios, the hop set (first byte)
+ *      and pattern (second byte).
+ *
+ * IEEE80211_RADIOTAP_RATE              u8           500kb/s
+ *
+ *      Tx/Rx data rate
+ *
+ * IEEE80211_RADIOTAP_DBM_ANTSIGNAL     s8           decibels from
+ *                                                   one milliwatt (dBm)
+ *
+ *      RF signal power at the antenna, decibel difference from
+ *      one milliwatt.
+ *
+ * IEEE80211_RADIOTAP_DBM_ANTNOISE      s8           decibels from
+ *                                                   one milliwatt (dBm)
+ *
+ *      RF noise power at the antenna, decibel difference from one
+ *      milliwatt.
+ *
+ * IEEE80211_RADIOTAP_DB_ANTSIGNAL      u8           decibel (dB)
+ *
+ *      RF signal power at the antenna, decibel difference from an
+ *      arbitrary, fixed reference.
+ *
+ * IEEE80211_RADIOTAP_DB_ANTNOISE       u8           decibel (dB)
+ *
+ *      RF noise power at the antenna, decibel difference from an
+ *      arbitrary, fixed reference point.
+ *
+ * IEEE80211_RADIOTAP_LOCK_QUALITY      __le16       unitless
+ *
+ *      Quality of Barker code lock. Unitless. Monotonically
+ *      nondecreasing with "better" lock strength. Called "Signal
+ *      Quality" in datasheets.  (Is there a standard way to measure
+ *      this?)
+ *
+ * IEEE80211_RADIOTAP_TX_ATTENUATION    __le16       unitless
+ *
+ *      Transmit power expressed as unitless distance from max
+ *      power set at factory calibration.  0 is max power.
+ *      Monotonically nondecreasing with lower power levels.
+ *
+ * IEEE80211_RADIOTAP_DB_TX_ATTENUATION __le16       decibels (dB)
+ *
+ *      Transmit power expressed as decibel distance from max power
+ *      set at factory calibration.  0 is max power.  Monotonically
+ *      nondecreasing with lower power levels.
+ *
+ * IEEE80211_RADIOTAP_DBM_TX_POWER      s8           decibels from
+ *                                                   one milliwatt (dBm)
+ *
+ *      Transmit power expressed as dBm (decibels from a 1 milliwatt
+ *      reference). This is the absolute power level measured at
+ *      the antenna port.
+ *
+ * IEEE80211_RADIOTAP_FLAGS             u8           bitmap
+ *
+ *      Properties of transmitted and received frames. See flags
+ *      defined below.
+ *
+ * IEEE80211_RADIOTAP_ANTENNA           u8           antenna index
+ *
+ *      Unitless indication of the Rx/Tx antenna for this packet.
+ *      The first antenna is antenna 0.
+ *
+ * IEEE80211_RADIOTAP_RX_FLAGS          __le16       bitmap
+ *
+ *     Properties of received frames. See flags defined below.
+ *
+ * IEEE80211_RADIOTAP_TX_FLAGS          __le16       bitmap
+ *
+ *     Properties of transmitted frames. See flags defined below.
+ *
+ * IEEE80211_RADIOTAP_RTS_RETRIES       u8           data
+ *
+ *     Number of rts retries a transmitted frame used.
+ *
+ * IEEE80211_RADIOTAP_DATA_RETRIES      u8           data
+ *
+ *     Number of unicast retries a transmitted frame used.
+ *
+ */
+enum ieee80211_radiotap_type {
+       IEEE80211_RADIOTAP_TSFT = 0,
+       IEEE80211_RADIOTAP_FLAGS = 1,
+       IEEE80211_RADIOTAP_RATE = 2,
+       IEEE80211_RADIOTAP_CHANNEL = 3,
+       IEEE80211_RADIOTAP_FHSS = 4,
+       IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5,
+       IEEE80211_RADIOTAP_DBM_ANTNOISE = 6,
+       IEEE80211_RADIOTAP_LOCK_QUALITY = 7,
+       IEEE80211_RADIOTAP_TX_ATTENUATION = 8,
+       IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9,
+       IEEE80211_RADIOTAP_DBM_TX_POWER = 10,
+       IEEE80211_RADIOTAP_ANTENNA = 11,
+       IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12,
+       IEEE80211_RADIOTAP_DB_ANTNOISE = 13,
+       IEEE80211_RADIOTAP_RX_FLAGS = 14,
+       IEEE80211_RADIOTAP_TX_FLAGS = 15,
+       IEEE80211_RADIOTAP_RTS_RETRIES = 16,
+       IEEE80211_RADIOTAP_DATA_RETRIES = 17,
+
+       /* valid in every it_present bitmap, even vendor namespaces */
+       IEEE80211_RADIOTAP_RADIOTAP_NAMESPACE = 29,
+       IEEE80211_RADIOTAP_VENDOR_NAMESPACE = 30,
+       IEEE80211_RADIOTAP_EXT = 31
+};
+
+/* Channel flags. */
+#define        IEEE80211_CHAN_TURBO    0x0010  /* Turbo channel */
+#define        IEEE80211_CHAN_CCK      0x0020  /* CCK channel */
+#define        IEEE80211_CHAN_OFDM     0x0040  /* OFDM channel */
+#define        IEEE80211_CHAN_2GHZ     0x0080  /* 2 GHz spectrum channel. */
+#define        IEEE80211_CHAN_5GHZ     0x0100  /* 5 GHz spectrum channel */
+#define        IEEE80211_CHAN_PASSIVE  0x0200  /* Only passive scan allowed */
+#define        IEEE80211_CHAN_DYN      0x0400  /* Dynamic CCK-OFDM channel */
+#define        IEEE80211_CHAN_GFSK     0x0800  /* GFSK channel (FHSS PHY) */
+
+/* For IEEE80211_RADIOTAP_FLAGS */
+#define        IEEE80211_RADIOTAP_F_CFP        0x01    /* sent/received
+                                                * during CFP
+                                                */
+#define        IEEE80211_RADIOTAP_F_SHORTPRE   0x02    /* sent/received
+                                                * with short
+                                                * preamble
+                                                */
+#define        IEEE80211_RADIOTAP_F_WEP        0x04    /* sent/received
+                                                * with WEP encryption
+                                                */
+#define        IEEE80211_RADIOTAP_F_FRAG       0x08    /* sent/received
+                                                * with fragmentation
+                                                */
+#define        IEEE80211_RADIOTAP_F_FCS        0x10    /* frame includes FCS */
+#define        IEEE80211_RADIOTAP_F_DATAPAD    0x20    /* frame has padding 
between
+                                                * 802.11 header and payload
+                                                * (to 32-bit boundary)
+                                                */
+#define IEEE80211_RADIOTAP_F_BADFCS    0x40    /* bad FCS */
+
+/* For IEEE80211_RADIOTAP_RX_FLAGS */
+#define IEEE80211_RADIOTAP_F_RX_BADPLCP        0x0002  /* frame has bad PLCP */
+
+/* For IEEE80211_RADIOTAP_TX_FLAGS */
+#define IEEE80211_RADIOTAP_F_TX_FAIL   0x0001  /* failed due to excessive
+                                                * retries */
+#define IEEE80211_RADIOTAP_F_TX_CTS    0x0002  /* used cts 'protection' */
+#define IEEE80211_RADIOTAP_F_TX_RTS    0x0004  /* used rts/cts handshake */
+
+/* Ugly macro to convert literal channel numbers into their mhz equivalents
+ * There are certianly some conditions that will break this (like feeding it 
'30')
+ * but they shouldn't arise since nothing talks on channel 30. */
+#define ieee80211chan2mhz(x) \
+       (((x) <= 14) ? \
+       (((x) == 14) ? 2484 : ((x) * 5) + 2407) : \
+       ((x) + 1000) * 5)
+
+/* helpers */
+static inline int ieee80211_get_radiotap_len(unsigned char *data)
+{
+       struct ieee80211_radiotap_header *hdr =
+               (struct ieee80211_radiotap_header *)data;
+
+       return get_unaligned_le16(&hdr->it_len);
+}
+
+#endif                         /* IEEE80211_RADIOTAP_H */

Added: gnunet/src/transport/plugin_transport_wlan.c
===================================================================
--- gnunet/src/transport/plugin_transport_wlan.c                                
(rev 0)
+++ gnunet/src/transport/plugin_transport_wlan.c        2010-09-05 05:57:58 UTC 
(rev 12845)
@@ -0,0 +1,532 @@
+/*
+     This file is part of GNUnet
+     (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Christian Grothoff 
(and other contributing authors)
+
+     GNUnet is free software; you can redistribute it and/or modify
+     it under the terms of the GNU General Public License as published
+     by the Free Software Foundation; either version 3, or (at your
+     option) any later version.
+
+     GNUnet is distributed in the hope that it will be useful, but
+     WITHOUT ANY WARRANTY; without even the implied warranty of
+     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+     General Public License for more details.
+
+     You should have received a copy of the GNU General Public License
+     along with GNUnet; see the file COPYING.  If not, write to the
+     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+     Boston, MA 02111-1307, USA.
+*/
+
+/**
+ * @file transport/plugin_transport_wlan.c
+ * @brief template for a new transport service
+ * @author Christian Grothoff
+ */
+
+#include "platform.h"
+#include "gnunet_protocols.h"
+#include "gnunet_connection_lib.h"
+#include "gnunet_server_lib.h"
+#include "gnunet_service_lib.h"
+#include "gnunet_statistics_service.h"
+#include "gnunet_transport_service.h"
+#include "plugin_transport.h"
+
+#define PROTOCOL_PREFIX "wlan"
+
+#define DEBUG_wlan GNUNET_NO
+
+static void
+wlan_plugin_helper_read (void *cls, const struct GNUNET_SCHEDULER_TaskContext 
*tc);
+
+/**
+ * After how long do we expire an address that we
+ * learned from another peer if it is not reconfirmed
+ * by anyone?
+ */
+#define LEARNED_ADDRESS_EXPIRATION GNUNET_TIME_relative_multiply 
(GNUNET_TIME_UNIT_HOURS, 6)
+
+
+/**
+ * Encapsulation of all of the state of the plugin.
+ */
+struct Plugin;
+
+
+/**
+ * Session handle for connections.
+ */
+struct Session
+{
+
+  /**
+   * Stored in a linked list.
+   */
+  struct Session *next;
+
+  /**
+   * Pointer to the global plugin struct.
+   */
+  struct Plugin *plugin;
+
+  /**
+   * The client (used to identify this connection)
+   */
+  /* void *client; */
+
+  /**
+   * Continuation function to call once the transmission buffer
+   * has again space available.  NULL if there is no
+   * continuation to call.
+   */
+  GNUNET_TRANSPORT_TransmitContinuation transmit_cont;
+
+  /**
+   * Closure for transmit_cont.
+   */
+  void *transmit_cont_cls;
+
+  /**
+   * To whom are we talking to (set to our identity
+   * if we are still waiting for the welcome message)
+   */
+  struct GNUNET_PeerIdentity sender;
+
+  /**
+   * At what time did we reset last_received last?
+   */
+  struct GNUNET_TIME_Absolute last_quota_update;
+
+  /**
+   * How many bytes have we received since the "last_quota_update"
+   * timestamp?
+   */
+  uint64_t last_received;
+
+  /**
+   * Number of bytes per ms that this peer is allowed
+   * to send to us.
+   */
+  uint32_t quota;
+
+};
+
+/**
+ * Encapsulation of all of the state of the plugin.
+ */
+struct Plugin
+{
+  /**
+   * Our environment.
+   */
+  struct GNUNET_TRANSPORT_PluginEnvironment *env;
+
+  /**
+   * List of open sessions.
+   * TODO?
+   */
+  struct Session *sessions;
+
+  /**
+   * encapsulation to the local wlan server prog
+   */
+
+  struct GNUNET_SERVER_MessageStreamTokenizer * consoltoken;
+
+  /**
+   * encapsulation of the data
+   */
+
+  struct GNUNET_SERVER_MessageStreamTokenizer * datatoken;
+
+  /**
+   * stdout pipe handle for the gnunet-wlan-helper process
+   */
+  struct GNUNET_DISK_PipeHandle *server_stdout;
+
+  /**
+   * stdout file handle for the gnunet-wlan-helper process
+   */
+  const struct GNUNET_DISK_FileHandle *server_stdout_handle;
+
+  /**
+   * stdin pipe handle for the gnunet-wlan-helper process
+   */
+  struct GNUNET_DISK_PipeHandle *server_stdin;
+
+  /**
+   * stdin file handle for the gnunet-wlan-helper process
+   */
+  const struct GNUNET_DISK_FileHandle *server_stdin_handle;
+
+  /**
+   * ID of select gnunet-nat-server std read task
+   */
+  GNUNET_SCHEDULER_TaskIdentifier server_read_task;
+
+  /**
+   * The process id of the server process (if behind NAT)
+   */
+  pid_t server_pid;
+
+  /**
+   * The interface of the wlan card given to us by the user.
+   */
+  char *interface;
+
+  /**
+   * The mac_address of the wlan card given to us by the helper.
+   */
+  char *mac_address;
+
+};
+
+struct Plugin* plugin;
+
+/**
+ * Function that can be used by the transport service to transmit
+ * a message using the plugin.
+ *
+ * @param cls closure
+ * @param target who should receive this message
+ * @param priority how important is the message
+ * @param msgbuf the message to transmit
+ * @param msgbuf_size number of bytes in 'msgbuf'
+ * @param timeout when should we time out 
+ * @param session which session must be used (or NULL for "any")
+ * @param addr the address to use (can be NULL if the plugin
+ *                is "on its own" (i.e. re-use existing TCP connection))
+ * @param addrlen length of the address in bytes
+ * @param force_address GNUNET_YES if the plugin MUST use the given address,
+ *                otherwise the plugin may use other addresses or
+ *                existing connections (if available)
+ * @param cont continuation to call once the message has
+ *        been transmitted (or if the transport is ready
+ *        for the next transmission call; or if the
+ *        peer disconnected...)
+ * @param cont_cls closure for cont
+ * @return number of bytes used (on the physical network, with overheads);
+ *         -1 on hard errors (i.e. address invalid); 0 is a legal value
+ *         and does NOT mean that the message was not transmitted (DV)
+ */
+static ssize_t
+wlan_plugin_send (void *cls,
+                      const struct GNUNET_PeerIdentity *
+                      target,
+                      const char *msgbuf,
+                      size_t msgbuf_size,
+                      unsigned int priority,
+                      struct GNUNET_TIME_Relative timeout,
+                     struct Session *session,
+                      const void *addr,
+                      size_t addrlen,
+                      int force_address,
+                      GNUNET_TRANSPORT_TransmitContinuation
+                      cont, void *cont_cls)
+{
+  int bytes_sent = 0;
+  /*  struct Plugin *plugin = cls; */
+  return bytes_sent;
+}
+
+
+
+/**
+ * Function that can be used to force the plugin to disconnect
+ * from the given peer and cancel all previous transmissions
+ * (and their continuationc).
+ *
+ * @param cls closure
+ * @param target peer from which to disconnect
+ */
+static void
+wlan_plugin_disconnect (void *cls,
+                            const struct GNUNET_PeerIdentity *target)
+{
+  // struct Plugin *plugin = cls;
+  // FIXME
+}
+
+
+/**
+ * Convert the transports address to a nice, human-readable
+ * format.
+ *
+ * @param cls closure
+ * @param type name of the transport that generated the address
+ * @param addr one of the addresses of the host, NULL for the last address
+ *        the specific address format depends on the transport
+ * @param addrlen length of the address
+ * @param numeric should (IP) addresses be displayed in numeric form?
+ * @param timeout after how long should we give up?
+ * @param asc function to call on each string
+ * @param asc_cls closure for asc
+ */
+static void
+wlan_plugin_address_pretty_printer (void *cls,
+                                        const char *type,
+                                        const void *addr,
+                                        size_t addrlen,
+                                        int numeric,
+                                        struct GNUNET_TIME_Relative timeout,
+                                        GNUNET_TRANSPORT_AddressStringCallback
+                                        asc, void *asc_cls)
+{
+  unsigned int res;
+  char * ret;
+  char * input;
+
+  GNUNET_assert(cls !=NULL);
+  //Mac Adress has 6 bytes
+  if (addrlen == 6){
+    input = addr;
+    res = GNUNET_asprintf(&ret,"%s Mac-Adress %X:%X:%X:%X:%X:%X", 
PROTOCOL_PREFIX, input[0], input[1],input[2],input[3],input[4],input[5]);
+
+    GNUNET_assert(res != 0);
+    asc (asc_cls, ret);
+    GNUNET_free_non_null (ret);
+
+  } else {
+    /* invalid address */
+    GNUNET_break_op (0);
+    asc (asc_cls, NULL);
+    return;
+  }
+}
+
+
+
+/**
+ * Another peer has suggested an address for this
+ * peer and transport plugin.  Check that this could be a valid
+ * address.  If so, consider adding it to the list
+ * of addresses.
+ *
+ * @param cls closure
+ * @param addr pointer to the address
+ * @param addrlen length of addr
+ * @return GNUNET_OK if this is a plausible address for this peer
+ *         and transport
+ */
+static int
+wlan_plugin_address_suggested (void *cls,
+                                  const void *addr,
+                                  size_t addrlen)
+{
+  /* struct Plugin *plugin = cls; */
+
+  /* check if the address is plausible; if so,
+     add it to our list! */
+
+  GNUNET_assert(cls !=NULL);
+
+  //Mac Adress has 6 bytes
+  if (addrlen == 6){
+    /* TODO check for bad addresses like milticast, broadcast, etc */
+    return GNUNET_OK;
+  } else {
+    return GNUNET_SYSERR;
+  }
+
+}
+
+
+/**
+ * Function called for a quick conversion of the binary address to
+ * a numeric address.  Note that the caller must not free the 
+ * address and that the next call to this function is allowed
+ * to override the address again.
+ *
+ * @param cls closure
+ * @param addr binary address
+ * @param addrlen length of the address
+ * @return string representing the same address 
+ */
+static const char* 
+wlan_plugin_address_to_string (void *cls,
+                                  const void *addr,
+                                  size_t addrlen)
+{
+  unsigned int res;
+  char * ret;
+  char * input;
+
+  GNUNET_assert(cls !=NULL);
+  //Mac Adress has 6 bytes
+  if (addrlen == 6){
+    input = addr;
+    res = GNUNET_asprintf(&ret,"%X:%X:%X:%X:%X:%X", input[0], 
input[1],input[2],input[3],input[4],input[5]);
+
+    GNUNET_assert(res != 0);
+    return ret;
+
+  } else {
+    /* invalid address */
+    GNUNET_break (0);
+    return NULL;
+  }
+}
+
+
+/**
+ * Function for used to process the data from the suid process
+ */
+static void
+wlan_process_helper (void *cls,
+                      void *client_identity,
+                      struct GNUNET_MessageHeader *hdr)
+{
+  if (hdr->type == GNUNET_MESSAGE_TYPE_WLAN_HELPER_DATA){
+    //TODO DATA
+  } else if (hdr->type == GNUNET_MESSAGE_TYPE_WLAN_HELPER_ADVERTISEMENT){
+    //TODO ADV
+  } else if (hdr->type == GNUNET_MESSAGE_TYPE_WLAN_HELPER_CONTROL){
+    //TODO Control
+    if (hdr->size == 6){
+      GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Notifying transport of address 
%s\n", wlan_plugin_address_to_string(cls, plugin->mac_address, hdr->size));
+      plugin->env->notify_address (plugin->env->cls,
+                                      "wlan",
+                                      &plugin->mac_address, 
sizeof(plugin->mac_address), GNUNET_TIME_UNIT_FOREVER_REL);
+    } else {
+      GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Wrong wlan mac address %s\n", 
plugin->mac_address);
+    }
+
+
+  } else {
+    // TODO Wrong data?
+  }
+}
+
+
+
+/**
+ * Start the gnunet-wlan-helper process for users behind NAT.
+ *
+ * @param plugin the transport plugin
+ *
+ * @return GNUNET_YES if process was started, GNUNET_SYSERR on error
+ */
+
+static int
+wlan_transport_start_wlan_helper(struct Plugin *plugin)
+{
+
+  plugin->server_stdout = GNUNET_DISK_pipe(GNUNET_YES);
+  if (plugin->server_stdout == NULL)
+    return GNUNET_SYSERR;
+
+  plugin->server_stdin = GNUNET_DISK_pipe(GNUNET_YES);
+    if (plugin->server_stdin == NULL)
+      return GNUNET_SYSERR;
+
+#if DEBUG_TCP_NAT
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+                   "Starting gnunet-wlan-helper process cmd: %s %s\n", 
"gnunet-wlan-helper", plugin->interface);
+#endif
+  /* Start the server process */
+  plugin->server_pid = GNUNET_OS_start_process(plugin->server_stdin, 
plugin->server_stdout, "gnunet-transport-wlan-helper", 
"gnunet-transport-wlan-helper", plugin->interface, NULL);
+  if (plugin->server_pid == GNUNET_SYSERR)
+    {
+#if DEBUG_TCP_NAT
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+                     "Failed to start gnunet-wlan-helper process\n");
+#endif
+      return GNUNET_SYSERR;
+    }
+  /* Close the write end of the read pipe */
+  GNUNET_DISK_pipe_close_end(plugin->server_stdout, 
GNUNET_DISK_PIPE_END_WRITE);
+
+  /* Close the read end of the write pipe */
+  GNUNET_DISK_pipe_close_end(plugin->server_stdout, GNUNET_DISK_PIPE_END_READ);
+
+  plugin->server_stdout_handle = 
GNUNET_DISK_pipe_handle(plugin->server_stdout, GNUNET_DISK_PIPE_END_READ);
+  plugin->server_stdin_handle = GNUNET_DISK_pipe_handle(plugin->server_stdin, 
GNUNET_DISK_PIPE_END_WRITE);
+
+  plugin->server_read_task =
+  GNUNET_SCHEDULER_add_read_file (plugin->env->sched,
+                                  GNUNET_TIME_UNIT_FOREVER_REL,
+                                  plugin->server_stdout_handle, 
&wlan_plugin_helper_read, plugin);
+  return GNUNET_YES;
+}
+
+
+
+
+static void
+wlan_plugin_helper_read (void *cls, const struct GNUNET_SCHEDULER_TaskContext 
*tc)
+{
+  struct Plugin *plugin = cls;
+  char mybuf[3000]; //max size of packet from helper
+  ssize_t bytes;
+  //memset(&mybuf, 0, sizeof(mybuf)); //?
+  int i;
+
+
+  if (tc->reason == GNUNET_SCHEDULER_REASON_SHUTDOWN)
+    return;
+
+  bytes = GNUNET_DISK_file_read(plugin->server_stdout_handle, &mybuf, 
sizeof(mybuf));
+
+  if (bytes < 1)
+    {
+#if DEBUG_TCP_NAT
+      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+                      _("Finished reading from wlan-helper stdout with code: 
%d\n"), bytes);
+#endif
+      return;
+    }
+
+  plugin->server_read_task =
+  GNUNET_SCHEDULER_add_read_file (plugin->env->sched,
+                                  GNUNET_TIME_UNIT_FOREVER_REL,
+                                  plugin->server_stdout_handle, 
&wlan_plugin_helper_read, plugin);
+
+}
+
+
+/**
+ * Entry point for the plugin.
+ */
+void *
+gnunet_plugin_transport_wlan_init (void *cls)
+{
+  struct GNUNET_TRANSPORT_PluginEnvironment *env = cls;
+  struct GNUNET_TRANSPORT_PluginFunctions *api;
+  struct Plugin *plugin;
+
+  GNUNET_assert(cls !=NULL);
+
+  plugin = GNUNET_malloc (sizeof (struct Plugin));
+  plugin->env = env;
+
+
+  api = GNUNET_malloc (sizeof (struct GNUNET_TRANSPORT_PluginFunctions));
+  api->cls = plugin;
+  api->send = &wlan_plugin_send;
+  api->disconnect = &wlan_plugin_disconnect;
+  api->address_pretty_printer = &wlan_plugin_address_pretty_printer;
+  api->check_address = &wlan_plugin_address_suggested;
+  api->address_to_string = &wlan_plugin_address_to_string;
+
+  return api;
+}
+
+
+/**
+ * Exit point from the plugin.
+ */
+void *
+gnunet_plugin_transport_wlan_done (void *cls)
+{
+  struct GNUNET_TRANSPORT_PluginFunctions *api = cls;
+  struct Plugin *plugin = api->cls;
+
+  GNUNET_assert(cls !=NULL);
+
+  GNUNET_free (plugin);
+  GNUNET_free (api);
+  return NULL;
+}
+
+/* end of plugin_transport_wlan.c */




reply via email to

[Prev in Thread] Current Thread [Next in Thread]