From 7388cc248d523d55e74ebfd4e434cc9d82001949 Mon Sep 17 00:00:00 2001
From: Tom Rondeau <trondeau@vt.edu>
Date: Wed, 27 Feb 2013 10:51:56 -0500
Subject: blocks: removing (un)pack_k_bits from gnuradio-core.

---
 gnuradio-core/src/lib/general/CMakeLists.txt       |  2 -
 gnuradio-core/src/lib/general/general.i            |  4 --
 gnuradio-core/src/lib/general/gr_pack_k_bits_bb.cc | 69 ---------------------
 gnuradio-core/src/lib/general/gr_pack_k_bits_bb.h  | 56 -----------------
 gnuradio-core/src/lib/general/gr_pack_k_bits_bb.i  | 34 -----------
 .../src/lib/general/gr_unpack_k_bits_bb.cc         | 70 ----------------------
 .../src/lib/general/gr_unpack_k_bits_bb.h          | 56 -----------------
 .../src/lib/general/gr_unpack_k_bits_bb.i          | 34 -----------
 .../src/python/gnuradio/gr/qa_pack_k_bits.py       | 67 ---------------------
 .../src/python/gnuradio/gr/qa_unpack_k_bits.py     | 57 ------------------
 10 files changed, 449 deletions(-)
 delete mode 100644 gnuradio-core/src/lib/general/gr_pack_k_bits_bb.cc
 delete mode 100644 gnuradio-core/src/lib/general/gr_pack_k_bits_bb.h
 delete mode 100644 gnuradio-core/src/lib/general/gr_pack_k_bits_bb.i
 delete mode 100644 gnuradio-core/src/lib/general/gr_unpack_k_bits_bb.cc
 delete mode 100644 gnuradio-core/src/lib/general/gr_unpack_k_bits_bb.h
 delete mode 100644 gnuradio-core/src/lib/general/gr_unpack_k_bits_bb.i
 delete mode 100755 gnuradio-core/src/python/gnuradio/gr/qa_pack_k_bits.py
 delete mode 100755 gnuradio-core/src/python/gnuradio/gr/qa_unpack_k_bits.py

(limited to 'gnuradio-core/src')

diff --git a/gnuradio-core/src/lib/general/CMakeLists.txt b/gnuradio-core/src/lib/general/CMakeLists.txt
index d38d478e7d..b844cf302c 100644
--- a/gnuradio-core/src/lib/general/CMakeLists.txt
+++ b/gnuradio-core/src/lib/general/CMakeLists.txt
@@ -170,8 +170,6 @@ set(gr_core_general_triple_threats
     gr_test
     gr_vco_f
     gr_vector_map
-    gr_unpack_k_bits_bb
-    gr_pack_k_bits_bb
     gr_annotator_alltoall
     gr_annotator_1to1
     gr_annotator_raw
diff --git a/gnuradio-core/src/lib/general/general.i b/gnuradio-core/src/lib/general/general.i
index 1769c1e832..ff4c95631b 100644
--- a/gnuradio-core/src/lib/general/general.i
+++ b/gnuradio-core/src/lib/general/general.i
@@ -47,8 +47,6 @@
 #include <gr_constants.h>
 #include <gr_test_types.h>
 #include <gr_test.h>
-#include <gr_unpack_k_bits_bb.h>
-#include <gr_pack_k_bits_bb.h>
 #include <gr_feval.h>
 #include <gr_bin_statistics_f.h>
 #include <gr_copy.h>
@@ -87,8 +85,6 @@
 %include "gr_constants.i"
 %include "gr_test_types.h"
 %include "gr_test.i"
-%include "gr_unpack_k_bits_bb.i"
-%include "gr_pack_k_bits_bb.i"
 %include "gr_feval.i"
 %include "gr_bin_statistics_f.i"
 %include "gr_copy.i"
diff --git a/gnuradio-core/src/lib/general/gr_pack_k_bits_bb.cc b/gnuradio-core/src/lib/general/gr_pack_k_bits_bb.cc
deleted file mode 100644
index 0ea0c9e388..0000000000
--- a/gnuradio-core/src/lib/general/gr_pack_k_bits_bb.cc
+++ /dev/null
@@ -1,69 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2012 Free Software Foundation, Inc.
- * 
- * This file is part of GNU Radio
- * 
- * GNU Radio 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.
- * 
- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street,
- * Boston, MA 02110-1301, USA.
- */
-
-#if HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <gr_pack_k_bits_bb.h>
-#include <gr_io_signature.h>
-#include <stdexcept>
-#include <iostream>
-
-gr_pack_k_bits_bb_sptr gr_make_pack_k_bits_bb(unsigned k)
-{
-  return gnuradio::get_initial_sptr(new gr_pack_k_bits_bb(k));
-}
-
-
-gr_pack_k_bits_bb::gr_pack_k_bits_bb (unsigned k)
-  : gr_sync_decimator("pack_k_bits_bb",
-		      gr_make_io_signature (1, 1, sizeof(unsigned char)),
-		      gr_make_io_signature (1, 1, sizeof(unsigned char)),
-		      k),
-    d_k (k)
-{
-  if (d_k == 0)
-    throw std::out_of_range("interpolation must be > 0");
-}
-
-gr_pack_k_bits_bb::~gr_pack_k_bits_bb()
-{
-}
-
-int
-gr_pack_k_bits_bb::work(int noutput_items,
-			gr_vector_const_void_star &input_items,
-			gr_vector_void_star &output_items)
-{
-  const unsigned char *in = (const unsigned char *)input_items[0];
-  unsigned char *out = (unsigned char *)output_items[0];
-
-  for(int i = 0; i < noutput_items; i++) {
-    out[i] = 0x00;
-    for(unsigned int j = 0; j < d_k; j++) {
-        out[i] |= (0x01 & in[i*d_k+j])<<(d_k-j-1);
-    }
-  }
-
-  return noutput_items;
-}
diff --git a/gnuradio-core/src/lib/general/gr_pack_k_bits_bb.h b/gnuradio-core/src/lib/general/gr_pack_k_bits_bb.h
deleted file mode 100644
index 8e1508c78b..0000000000
--- a/gnuradio-core/src/lib/general/gr_pack_k_bits_bb.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2012 Free Software Foundation, Inc.
- * 
- * This file is part of GNU Radio
- * 
- * GNU Radio 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.
- * 
- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef INCLUDED_GR_PACK_K_BITS_BB_H
-#define	INCLUDED_GR_PACK_K_BITS_BB_H
-
-#include <gr_core_api.h>
-#include <gr_sync_decimator.h>
-
-class gr_pack_k_bits_bb;
-typedef boost::shared_ptr<gr_pack_k_bits_bb> gr_pack_k_bits_bb_sptr;
-GR_CORE_API gr_pack_k_bits_bb_sptr gr_make_pack_k_bits_bb (unsigned k);
-
-class gr_pack_k_bits_bb;
-
-/*!
- * \brief Converts a stream of bytes with 1 bit in the LSB to a byte with  k relevent bits.
- * \ingroup converter_blk
- */
-class GR_CORE_API gr_pack_k_bits_bb : public gr_sync_decimator
-{
- private:
-  friend GR_CORE_API gr_pack_k_bits_bb_sptr gr_make_pack_k_bits_bb (unsigned k);
-
-  gr_pack_k_bits_bb (unsigned k);
-
-  unsigned d_k;    // number of relevent bits to pack from k input bytes
-  
- public:
-  ~gr_pack_k_bits_bb ();
-
-  int work (int noutput_items,
-	    gr_vector_const_void_star &input_items,
-	    gr_vector_void_star &output_items);
-};
-
-#endif
diff --git a/gnuradio-core/src/lib/general/gr_pack_k_bits_bb.i b/gnuradio-core/src/lib/general/gr_pack_k_bits_bb.i
deleted file mode 100644
index 6ae2095ec7..0000000000
--- a/gnuradio-core/src/lib/general/gr_pack_k_bits_bb.i
+++ /dev/null
@@ -1,34 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2012 Free Software Foundation, Inc.
- * 
- * This file is part of GNU Radio
- * 
- * GNU Radio 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.
- * 
- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street,
- * Boston, MA 02110-1301, USA.
- */
-
-GR_SWIG_BLOCK_MAGIC(gr,pack_k_bits_bb)
-
-gr_pack_k_bits_bb_sptr gr_make_pack_k_bits_bb (int k) throw(std::exception);
-
-class gr_pack_k_bits_bb : public gr_sync_decimator
-{
- private:
-  gr_pack_k_bits_bb (int k);
-
- public:
-  ~gr_pack_k_bits_bb ();
-};
diff --git a/gnuradio-core/src/lib/general/gr_unpack_k_bits_bb.cc b/gnuradio-core/src/lib/general/gr_unpack_k_bits_bb.cc
deleted file mode 100644
index 00b88e9724..0000000000
--- a/gnuradio-core/src/lib/general/gr_unpack_k_bits_bb.cc
+++ /dev/null
@@ -1,70 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2005,2010 Free Software Foundation, Inc.
- *
- * This file is part of GNU Radio
- *
- * GNU Radio 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.
- *
- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street,
- * Boston, MA 02110-1301, USA.
- */
-
-#if HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <gr_unpack_k_bits_bb.h>
-#include <gr_io_signature.h>
-#include <stdexcept>
-#include <iostream>
-
-gr_unpack_k_bits_bb_sptr gr_make_unpack_k_bits_bb (unsigned k)
-{
-  return gnuradio::get_initial_sptr(new gr_unpack_k_bits_bb (k));
-}
-
-
-gr_unpack_k_bits_bb::gr_unpack_k_bits_bb (unsigned k)
-  : gr_sync_interpolator ("unpack_k_bits_bb",
-			  gr_make_io_signature (1, 1, sizeof (unsigned char)),
-			  gr_make_io_signature (1, 1, sizeof (unsigned char)),
-			  k),
-    d_k (k)
-{
-  if (d_k == 0)
-    throw std::out_of_range ("interpolation must be > 0");
-}
-
-gr_unpack_k_bits_bb::~gr_unpack_k_bits_bb ()
-{
-}
-
-int
-gr_unpack_k_bits_bb::work (int noutput_items,
-			   gr_vector_const_void_star &input_items,
-			   gr_vector_void_star &output_items)
-{
-  const unsigned char *in = (const unsigned char *) input_items[0];
-  unsigned char *out = (unsigned char *) output_items[0];
-
-  int n = 0;
-  for (unsigned int i = 0; i < noutput_items/d_k; i++){
-    unsigned int t = in[i];
-    for (int j = d_k - 1; j >= 0; j--)
-      out[n++] = (t >> j) & 0x01;
-  }
-
-  assert(n == noutput_items);
-  return noutput_items;
-}
diff --git a/gnuradio-core/src/lib/general/gr_unpack_k_bits_bb.h b/gnuradio-core/src/lib/general/gr_unpack_k_bits_bb.h
deleted file mode 100644
index c3ea28d3fa..0000000000
--- a/gnuradio-core/src/lib/general/gr_unpack_k_bits_bb.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2006 Free Software Foundation, Inc.
- *
- * This file is part of GNU Radio
- *
- * GNU Radio 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.
- *
- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef INCLUDED_GR_UNPACK_K_BITS_BB_H
-#define	INCLUDED_GR_UNPACK_K_BITS_BB_H
-
-#include <gr_core_api.h>
-#include <gr_sync_interpolator.h>
-
-class gr_unpack_k_bits_bb;
-typedef boost::shared_ptr<gr_unpack_k_bits_bb> gr_unpack_k_bits_bb_sptr;
-GR_CORE_API gr_unpack_k_bits_bb_sptr gr_make_unpack_k_bits_bb (unsigned k);
-
-class gr_unpack_k_bits_bb;
-
-/*!
- * \brief Converts a byte with k relevent bits to k output bytes with 1 bit in the LSB.
- * \ingroup converter_blk
- */
-class GR_CORE_API gr_unpack_k_bits_bb : public gr_sync_interpolator
-{
- private:
-  friend GR_CORE_API gr_unpack_k_bits_bb_sptr gr_make_unpack_k_bits_bb (unsigned k);
-
-  gr_unpack_k_bits_bb (unsigned k);
-
-  unsigned d_k;    // number of relevent bits to unpack into k output bytes
-
- public:
-  ~gr_unpack_k_bits_bb ();
-
-  int work (int noutput_items,
-	    gr_vector_const_void_star &input_items,
-	    gr_vector_void_star &output_items);
-};
-
-#endif
diff --git a/gnuradio-core/src/lib/general/gr_unpack_k_bits_bb.i b/gnuradio-core/src/lib/general/gr_unpack_k_bits_bb.i
deleted file mode 100644
index de0f4b33e7..0000000000
--- a/gnuradio-core/src/lib/general/gr_unpack_k_bits_bb.i
+++ /dev/null
@@ -1,34 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2006 Free Software Foundation, Inc.
- *
- * This file is part of GNU Radio
- *
- * GNU Radio 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.
- *
- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street,
- * Boston, MA 02110-1301, USA.
- */
-
-GR_SWIG_BLOCK_MAGIC(gr,unpack_k_bits_bb)
-
-gr_unpack_k_bits_bb_sptr gr_make_unpack_k_bits_bb (int k) throw(std::exception);
-
-class gr_unpack_k_bits_bb : public gr_sync_interpolator
-{
- private:
-  gr_unpack_k_bits_bb (int k);
-
- public:
-  ~gr_unpack_k_bits_bb ();
-};
diff --git a/gnuradio-core/src/python/gnuradio/gr/qa_pack_k_bits.py b/gnuradio-core/src/python/gnuradio/gr/qa_pack_k_bits.py
deleted file mode 100755
index 25fc5e9fcc..0000000000
--- a/gnuradio-core/src/python/gnuradio/gr/qa_pack_k_bits.py
+++ /dev/null
@@ -1,67 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2006,2010 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio 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.
-#
-# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-from gnuradio import gr, gr_unittest
-import random
-
-class test_pack(gr_unittest.TestCase):
-
-    def setUp(self):
-        self.tb = gr.top_block ()
-
-    def tearDown(self):
-        self.tb = None
-
-    def test_001(self):
-        src_data =              (1,0,1,1,0,1,1,0)
-        expected_results =      (1,0,1,1,0,1,1,0)
-        src = gr.vector_source_b(src_data,False)
-        op = gr.pack_k_bits_bb(1)
-        dst = gr.vector_sink_b()
-        self.tb.connect(src, op, dst)
-        self.tb.run()
-        self.assertEqual(expected_results, dst.data())
-
-    def test_002(self):
-        src_data =              (1,0,1,1,0,0,0,1)
-        expected_results =      (  2,  3,  0,  1)
-        src = gr.vector_source_b(src_data,False)
-        op = gr.pack_k_bits_bb(2)
-        dst = gr.vector_sink_b()
-        self.tb.connect(src, op, dst)
-        self.tb.run()
-        #self.assertEqual(expected_results, dst.data())
-        self.assertEqual(expected_results, dst.data())
-
-    def test_003(self):
-        src_data = expected_results = map(lambda x: random.randint(0,3), range(10));
-        src = gr.vector_source_b( src_data );
-        pack = gr.pack_k_bits_bb(2);
-        unpack = gr.unpack_k_bits_bb(2);
-        snk = gr.vector_sink_b();
-        self.tb.connect(src,unpack,pack,snk);
-        self.tb.run()
-        self.assertEqual(list(expected_results), list(snk.data()));
-        
-if __name__ == '__main__':
-   gr_unittest.run(test_pack, "test_pack.xml")
-
diff --git a/gnuradio-core/src/python/gnuradio/gr/qa_unpack_k_bits.py b/gnuradio-core/src/python/gnuradio/gr/qa_unpack_k_bits.py
deleted file mode 100755
index bb4e7733d4..0000000000
--- a/gnuradio-core/src/python/gnuradio/gr/qa_unpack_k_bits.py
+++ /dev/null
@@ -1,57 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2006,2010 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio 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.
-#
-# GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-from gnuradio import gr, gr_unittest
-import random
-
-class test_unpack(gr_unittest.TestCase):
-
-    def setUp(self):
-        self.tb = gr.top_block ()
-
-    def tearDown(self):
-        self.tb = None
-
-    def test_001(self):
-        src_data =         (1,0,1,1,0,1,1,0)
-        expected_results = (1,0,1,1,0,1,1,0)
-        src = gr.vector_source_b(src_data,False)
-        op = gr.unpack_k_bits_bb(1)
-        dst = gr.vector_sink_b()
-        self.tb.connect(src, op, dst)
-        self.tb.run()
-        self.assertEqual(expected_results, dst.data())
-
-    def test_002(self):
-        src_data =         (  2,  3,  0,  1)
-        expected_results = (1,0,1,1,0,0,0,1)
-        src = gr.vector_source_b(src_data,False)
-        op = gr.unpack_k_bits_bb(2)
-        dst = gr.vector_sink_b()
-        self.tb.connect(src, op, dst)
-        self.tb.run()
-        self.assertEqual(expected_results, dst.data())
-
-
-if __name__ == '__main__':
-   gr_unittest.run(test_unpack, "test_unpack.xml")
-
-- 
cgit v1.2.3


From 25d8f8ddb3fe5493ef2847047c1e70283b0d8af1 Mon Sep 17 00:00:00 2001
From: Johnathan Corgan <johnathan@corganlabs.com>
Date: Wed, 27 Feb 2013 13:21:07 -0800
Subject: blocks: added gr::blocks::tuntap_pdu

Linux only
---
 gnuradio-core/src/lib/io/gr_pdu.h                  |  13 +-
 .../src/lib/io/gr_pdu_to_tagged_stream.cc          |   8 +-
 .../src/lib/io/gr_tagged_stream_to_pdu.cc          |   8 +-
 gr-blocks/grc/blocks_block_tree.xml                |   4 +
 gr-blocks/grc/blocks_tuntap_pdu.xml                |  34 +++++
 gr-blocks/include/blocks/CMakeLists.txt            |   1 +
 gr-blocks/include/blocks/tuntap_pdu.h              |  53 ++++++++
 gr-blocks/lib/CMakeLists.txt                       |   2 +
 gr-blocks/lib/ConfigChecks.cmake                   |   2 +-
 gr-blocks/lib/stream_pdu_base.cc                   | 126 +++++++++++++++++++
 gr-blocks/lib/stream_pdu_base.h                    |  60 +++++++++
 gr-blocks/lib/tuntap_pdu_impl.cc                   | 139 +++++++++++++++++++++
 gr-blocks/lib/tuntap_pdu_impl.h                    |  51 ++++++++
 gr-blocks/swig/blocks_swig.i                       |   3 +
 14 files changed, 489 insertions(+), 15 deletions(-)
 create mode 100644 gr-blocks/grc/blocks_tuntap_pdu.xml
 create mode 100644 gr-blocks/include/blocks/tuntap_pdu.h
 create mode 100644 gr-blocks/lib/stream_pdu_base.cc
 create mode 100644 gr-blocks/lib/stream_pdu_base.h
 create mode 100644 gr-blocks/lib/tuntap_pdu_impl.cc
 create mode 100644 gr-blocks/lib/tuntap_pdu_impl.h

(limited to 'gnuradio-core/src')

diff --git a/gnuradio-core/src/lib/io/gr_pdu.h b/gnuradio-core/src/lib/io/gr_pdu.h
index a5ae87db7f..53058ccb6c 100644
--- a/gnuradio-core/src/lib/io/gr_pdu.h
+++ b/gnuradio-core/src/lib/io/gr_pdu.h
@@ -23,17 +23,18 @@
 #ifndef GR_PDU_H
 #define GR_PDU_H
 
+#include <gr_core_api.h>
 #include <gr_complex.h>
 #include <gruel/pmt.h>
 
-#define pdu_port_id     pmt::mp("pdus")
-#define pdu_length_tag  pmt::mp("pdu_length")
+#define PDU_PORT_ID     pmt::mp("pdus")
+#define PDU_LENGTH_TAG  pmt::mp("pdu_length")
 
 enum gr_pdu_vector_type { pdu_byte, pdu_float, pdu_complex };
 
-size_t gr_pdu_itemsize(gr_pdu_vector_type type);
-bool gr_pdu_type_matches(gr_pdu_vector_type type, pmt::pmt_t v);
-pmt::pmt_t gr_pdu_make_vector(gr_pdu_vector_type type, const uint8_t* buf, size_t items);
-gr_pdu_vector_type type_from_pmt(pmt::pmt_t vector);
+GR_CORE_API size_t gr_pdu_itemsize(gr_pdu_vector_type type);
+GR_CORE_API bool gr_pdu_type_matches(gr_pdu_vector_type type, pmt::pmt_t v);
+GR_CORE_API pmt::pmt_t gr_pdu_make_vector(gr_pdu_vector_type type, const uint8_t* buf, size_t items);
+GR_CORE_API gr_pdu_vector_type type_from_pmt(pmt::pmt_t vector);
 
 #endif
diff --git a/gnuradio-core/src/lib/io/gr_pdu_to_tagged_stream.cc b/gnuradio-core/src/lib/io/gr_pdu_to_tagged_stream.cc
index 5c319dc39d..a702b66a2b 100644
--- a/gnuradio-core/src/lib/io/gr_pdu_to_tagged_stream.cc
+++ b/gnuradio-core/src/lib/io/gr_pdu_to_tagged_stream.cc
@@ -49,7 +49,7 @@ gr_pdu_to_tagged_stream::gr_pdu_to_tagged_stream (gr_pdu_vector_type t)
 		  gr_make_io_signature(1, 1, gr_pdu_itemsize(t))),
     d_vectortype(t), d_itemsize(gr_pdu_itemsize(t))
 {
-    message_port_register_in(pdu_port_id);
+    message_port_register_in(PDU_PORT_ID);
 }
 
 gr_pdu_to_tagged_stream::~gr_pdu_to_tagged_stream()
@@ -77,8 +77,8 @@ gr_pdu_to_tagged_stream::work(int noutput_items,
   if(noutput_items > 0){
 
     // grab a message if one exists
-    //pmt::pmt_t msg( delete_head_nowait( pdu_port_id ) );
-    pmt::pmt_t msg( delete_head_blocking( pdu_port_id ) );
+    //pmt::pmt_t msg( delete_head_nowait( PDU_PORT_ID ) );
+    pmt::pmt_t msg( delete_head_blocking( PDU_PORT_ID ) );
     if(msg.get() == NULL ){
         return nout;
         }
@@ -99,7 +99,7 @@ gr_pdu_to_tagged_stream::work(int noutput_items,
     uint64_t offset = nitems_written(0) + nout;
 
     // add a tag for pdu length
-    add_item_tag(0, offset, pdu_length_tag, pmt::pmt_from_long( pmt::pmt_length(vect) ), pmt::mp(alias()));
+    add_item_tag(0, offset, PDU_LENGTH_TAG, pmt::pmt_from_long( pmt::pmt_length(vect) ), pmt::mp(alias()));
 
     // if we recieved metadata add it as tags
     if( !pmt_eq(meta, pmt::PMT_NIL) ){
diff --git a/gnuradio-core/src/lib/io/gr_tagged_stream_to_pdu.cc b/gnuradio-core/src/lib/io/gr_tagged_stream_to_pdu.cc
index 8211b7672d..1b869edfab 100644
--- a/gnuradio-core/src/lib/io/gr_tagged_stream_to_pdu.cc
+++ b/gnuradio-core/src/lib/io/gr_tagged_stream_to_pdu.cc
@@ -49,7 +49,7 @@ gr_tagged_stream_to_pdu::gr_tagged_stream_to_pdu (gr_pdu_vector_type t)
     d_vectortype(t), d_itemsize(gr_pdu_itemsize(t)), d_inpdu(false),
     d_pdu_meta(pmt::PMT_NIL), d_pdu_vector(pmt::PMT_NIL)
 {
-  message_port_register_out(pdu_port_id);
+  message_port_register_out(PDU_PORT_ID);
 }
 
 gr_tagged_stream_to_pdu::~gr_tagged_stream_to_pdu()
@@ -70,7 +70,7 @@ gr_tagged_stream_to_pdu::work(int noutput_items,
     get_tags_in_range(d_tags, 0, abs_N, abs_N+1);
     bool found_length_tag(false);
     for(d_tags_itr = d_tags.begin(); (d_tags_itr != d_tags.end()) && (!found_length_tag); d_tags_itr++){
-      if( pmt::pmt_equal( (*d_tags_itr).key, pdu_length_tag ) ){
+      if( pmt::pmt_equal( (*d_tags_itr).key, PDU_LENGTH_TAG ) ){
           if( (*d_tags_itr).offset != abs_N ){
               throw std::runtime_error("expected next pdu length tag on a different item...");
               }
@@ -91,7 +91,7 @@ gr_tagged_stream_to_pdu::work(int noutput_items,
   // copy any tags in this range into our meta object
   get_tags_in_range(d_tags, 0, abs_N, abs_N+ncopy);
   for(d_tags_itr = d_tags.begin(); d_tags_itr != d_tags.end(); d_tags_itr++){
-    if( ! pmt_equal( (*d_tags_itr).key, pdu_length_tag ) ){
+    if( ! pmt_equal( (*d_tags_itr).key, PDU_LENGTH_TAG ) ){
         d_pdu_meta = pmt_dict_add(d_pdu_meta, (*d_tags_itr).key, (*d_tags_itr).value);
         }
     }
@@ -127,7 +127,7 @@ void gr_tagged_stream_to_pdu::send_message(){
     }
 
     pmt::pmt_t msg = pmt::pmt_cons( d_pdu_meta, d_pdu_vector );
-    message_port_pub( pdu_port_id, msg );
+    message_port_pub( PDU_PORT_ID, msg );
 
     d_pdu_meta = pmt::PMT_NIL;
     d_pdu_vector = pmt::PMT_NIL;
diff --git a/gr-blocks/grc/blocks_block_tree.xml b/gr-blocks/grc/blocks_block_tree.xml
index 6b17078cd2..cd05dd3a87 100644
--- a/gr-blocks/grc/blocks_block_tree.xml
+++ b/gr-blocks/grc/blocks_block_tree.xml
@@ -99,4 +99,8 @@
 		<block>blocks_vector_to_stream</block>
 		<block>blocks_vector_to_streams</block>
 	</cat>
+	<cat>
+	        <name>Networking</name>
+		<block>blocks_tuntap_pdu</block>
+	</cat>
 </cat>
diff --git a/gr-blocks/grc/blocks_tuntap_pdu.xml b/gr-blocks/grc/blocks_tuntap_pdu.xml
new file mode 100644
index 0000000000..d9a63d4a7f
--- /dev/null
+++ b/gr-blocks/grc/blocks_tuntap_pdu.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0"?>
+<!--
+###################################################
+## TUNTAP PDU async message source/sink
+###################################################
+ -->
+<block>
+  <name>TUNTAP PDU</name>
+  <key>blocks_tuntap_pdu</key>
+  <import>from gnuradio import blocks</import>
+  <make>blocks.tuntap_pdu($ifn, $mtu)</make>
+  <param>
+    <name>Interface Name</name>
+    <key>ifn</key>
+    <value>tun0</value>
+    <type>string</type>
+  </param>
+  <param>
+    <name>MTU</name>
+    <key>mtu</key>
+    <value>10000</value>
+    <type>int</type>
+  </param>
+  <sink>
+    <name>pdus</name>
+    <type>message</type>
+    <optional>1</optional>
+  </sink>
+  <source>
+    <name>pdus</name>
+    <type>message</type>
+    <optional>1</optional>
+  </source>
+</block>
diff --git a/gr-blocks/include/blocks/CMakeLists.txt b/gr-blocks/include/blocks/CMakeLists.txt
index a6608696a1..045ebc0c28 100644
--- a/gr-blocks/include/blocks/CMakeLists.txt
+++ b/gr-blocks/include/blocks/CMakeLists.txt
@@ -136,6 +136,7 @@ install(FILES
     stream_to_vector.h
     streams_to_stream.h
     streams_to_vector.h
+    tuntap_pdu.h
     uchar_to_float.h
     vector_to_stream.h
     vector_to_streams.h
diff --git a/gr-blocks/include/blocks/tuntap_pdu.h b/gr-blocks/include/blocks/tuntap_pdu.h
new file mode 100644
index 0000000000..70abb0bd5b
--- /dev/null
+++ b/gr-blocks/include/blocks/tuntap_pdu.h
@@ -0,0 +1,53 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2013 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio 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.
+ *
+ * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_BLOCKS_TUNTAP_PDU_H
+#define INCLUDED_BLOCKS_TUNTAP_PDU_H
+
+#include <blocks/api.h>
+#include <gr_block.h>
+
+namespace gr {
+  namespace blocks {
+
+    /*!
+     * \brief Creates TUNTAP interface and translates traffic to PDUs
+     * \ingroup net_blk
+     */
+    class BLOCKS_API tuntap_pdu : virtual public gr_block
+    {
+    public:
+      // gr::blocks::tuntap_pdu::sptr
+      typedef boost::shared_ptr<tuntap_pdu> sptr;
+
+      /*!
+       * \brief Construct a TUNTAP PDU interface
+       * \param dev Device name to create
+       * \param MTU Maximum Transmission Unit size
+       */
+      static sptr make(std::string dev, int MTU=10000);
+    };
+
+  } /* namespace blocks */
+} /* namespace gr */
+
+#endif /* INCLUDED_BLOCKS_TUNTAP_PDU_H */
diff --git a/gr-blocks/lib/CMakeLists.txt b/gr-blocks/lib/CMakeLists.txt
index 9b076f6964..a62174b44d 100644
--- a/gr-blocks/lib/CMakeLists.txt
+++ b/gr-blocks/lib/CMakeLists.txt
@@ -171,10 +171,12 @@ list(APPEND gr_blocks_sources
     short_to_char_impl.cc
     short_to_float_impl.cc
     stream_mux_impl.cc
+    stream_pdu_base.cc
     stream_to_streams_impl.cc
     stream_to_vector_impl.cc
     streams_to_stream_impl.cc
     streams_to_vector_impl.cc
+    tuntap_pdu_impl.cc
     uchar_array_to_float.cc
     uchar_to_float_impl.cc
     vector_to_stream_impl.cc
diff --git a/gr-blocks/lib/ConfigChecks.cmake b/gr-blocks/lib/ConfigChecks.cmake
index 72d6d1d8ab..7f60aed403 100644
--- a/gr-blocks/lib/ConfigChecks.cmake
+++ b/gr-blocks/lib/ConfigChecks.cmake
@@ -56,7 +56,7 @@ CHECK_INCLUDE_FILE_CXX(windows.h HAVE_WINDOWS_H)
 IF(HAVE_WINDOWS_H)
     ADD_DEFINITIONS(-DHAVE_WINDOWS_H -DUSING_WINSOCK)
     MESSAGE(STATUS "Adding windows libs to gr blocks libs...")
-    LIST(APPEND gnuradio_core_libs WS2_32.lib WSock32.lib)
+    LIST(APPEND blocks_libs WS2_32.lib WSock32.lib)
 ENDIF(HAVE_WINDOWS_H)
 
 ########################################################################
diff --git a/gr-blocks/lib/stream_pdu_base.cc b/gr-blocks/lib/stream_pdu_base.cc
new file mode 100644
index 0000000000..3378067f85
--- /dev/null
+++ b/gr-blocks/lib/stream_pdu_base.cc
@@ -0,0 +1,126 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2013 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio 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.
+ *
+ * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#ifdef HAVE_IO_H
+#include <io.h>
+#endif
+
+#include <gr_pdu.h>
+#include <gr_basic_block.h>
+#include "stream_pdu_base.h"
+#include <boost/format.hpp>
+
+static const long timeout_us = 100*1000; //100ms
+
+namespace gr {
+  namespace blocks {
+
+    stream_pdu_base::stream_pdu_base(int MTU)
+      :	d_fd(-1),
+	d_started(false), 
+	d_finished(false)
+    {
+      // reserve space for rx buffer 
+      d_rxbuf.resize(MTU,0);
+    }
+    
+    stream_pdu_base::~stream_pdu_base()
+    {
+      stop_rxthread();
+    }
+
+    void
+    stream_pdu_base::start_rxthread(gr_basic_block *blk, pmt::pmt_t port)
+    {
+      d_blk = blk;
+      d_port = port;
+      d_thread = gruel::thread(boost::bind(&stream_pdu_base::run, this));
+      d_started = true;
+    }
+
+    void
+    stream_pdu_base::stop_rxthread()
+    {
+      d_finished = true;
+
+      if (d_started) {
+        d_thread.interrupt();
+        d_thread.join();
+      }
+    }
+
+    void
+    stream_pdu_base::run()
+    {
+      while(!d_finished) {
+        if (!wait_ready())
+	  continue;
+
+        const int result = read(d_fd, &d_rxbuf[0], d_rxbuf.size());
+        if (result <= 0)
+	  throw std::runtime_error("stream_pdu_base, bad socket read!");
+
+        pmt::pmt_t vector = pmt::pmt_init_u8vector(result, &d_rxbuf[0]);       
+        pmt::pmt_t pdu = pmt::pmt_cons(pmt::PMT_NIL, vector);
+
+        d_blk->message_port_pub(d_port, pdu);
+      } 
+    }
+
+    bool
+    stream_pdu_base::wait_ready()
+    {
+      //setup timeval for timeout
+      timeval tv;
+      tv.tv_sec = 0;
+      tv.tv_usec = timeout_us;
+    
+      //setup rset for timeout
+      fd_set rset;
+      FD_ZERO(&rset);
+      FD_SET(d_fd, &rset);
+      
+      //call select with timeout on receive socket
+      return ::select(d_fd+1, &rset, NULL, NULL, &tv) > 0;
+    }
+
+    void
+    stream_pdu_base::send(pmt::pmt_t msg)
+    {
+      pmt::pmt_t vector = pmt::pmt_cdr(msg);
+      size_t offset(0);
+      size_t itemsize(::gr_pdu_itemsize(type_from_pmt(vector)));
+      int len(pmt::pmt_length(vector)*itemsize);
+    
+      const int rv = write(d_fd, pmt::pmt_uniform_vector_elements(vector, offset), len);
+      if (rv != len) {
+        std::cerr << boost::format("WARNING: gr_stream_pdu_base::send(pdu) write failed! (d_fd=%d, len=%d, rv=%d)")
+	  % d_fd % len % rv << std::endl;
+      }
+    }
+
+  } /* namespace blocks */
+} /* namespace gr */
diff --git a/gr-blocks/lib/stream_pdu_base.h b/gr-blocks/lib/stream_pdu_base.h
new file mode 100644
index 0000000000..66eaaf0c04
--- /dev/null
+++ b/gr-blocks/lib/stream_pdu_base.h
@@ -0,0 +1,60 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2013 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio 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.
+ *
+ * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_STREAM_PDU_BASE_H
+#define INCLUDED_STREAM_PDU_BASE_H
+
+#include <gruel/thread.h>
+#include <gruel/pmt.h>
+
+class gr_basic_block;
+
+namespace gr {
+  namespace blocks {
+
+    class stream_pdu_base
+    {
+    public:
+      stream_pdu_base(int MTU=10000);
+      ~stream_pdu_base();
+
+    protected:
+      int d_fd;
+      bool d_started;
+      bool d_finished;
+      std::vector<uint8_t> d_rxbuf;
+      gruel::thread d_thread;
+
+      pmt::pmt_t d_port;
+      gr_basic_block *d_blk;
+
+      void run();
+      void send(pmt::pmt_t msg);
+      bool wait_ready();
+      void start_rxthread(gr_basic_block *blk, pmt::pmt_t rxport);
+      void stop_rxthread();
+    };
+ 
+  } /* namespace blocks */
+} /* namespace gr */
+
+#endif /* INCLUDED_STREAM_PDU_BASE_H */
diff --git a/gr-blocks/lib/tuntap_pdu_impl.cc b/gr-blocks/lib/tuntap_pdu_impl.cc
new file mode 100644
index 0000000000..1970a92b69
--- /dev/null
+++ b/gr-blocks/lib/tuntap_pdu_impl.cc
@@ -0,0 +1,139 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2013 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio 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.
+ *
+ * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "tuntap_pdu_impl.h"
+#include <gr_io_signature.h>
+#include <gr_pdu.h>
+#include <boost/format.hpp>
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+#if (defined(linux) || defined(__linux) || defined(__linux__))
+#include <sys/ioctl.h>
+#include <arpa/inet.h>
+#include <linux/if.h>
+#endif
+
+namespace gr {
+  namespace blocks {
+
+    tuntap_pdu::sptr
+    tuntap_pdu::make(std::string dev, int MTU)
+    {
+#if (defined(linux) || defined(__linux) || defined(__linux__))
+      return gnuradio::get_initial_sptr(new tuntap_pdu_impl(dev, MTU));
+#else
+      throw std::runtime_error("tuntap_pdu not implemented on this platform");
+#endif
+    }
+
+#if (defined(linux) || defined(__linux) || defined(__linux__))
+    tuntap_pdu_impl::tuntap_pdu_impl(std::string dev, int MTU)
+      :	gr_block("tuntap_pdu",
+		 gr_make_io_signature (0, 0, 0),
+		 gr_make_io_signature (0, 0, 0)),
+	stream_pdu_base(MTU),
+	d_dev(dev)
+    {
+      // make the tuntap
+      char dev_cstr[1024];
+      memset(dev_cstr, 0x00, 1024);
+      strncpy(dev_cstr, dev.c_str(), std::min(sizeof(dev_cstr), dev.size()));
+
+      d_fd = tun_alloc(dev_cstr);
+      if (d_fd <= 0)
+        throw std::runtime_error("gr::tuntap_pdu::make: tun_alloc failed (are you running as root?)");
+
+      std::cout << boost::format(
+	"Allocated virtual ethernet interface: %s\n"
+        "You must now use ifconfig to set its IP address. E.g.,\n"
+        "  $ sudo ifconfig %s 192.168.200.1\n"
+        "Be sure to use a different address in the same subnet for each machine.\n"
+        ) % dev % dev << std::endl;
+
+      // set up output message port
+      message_port_register_out(PDU_PORT_ID);
+      start_rxthread(this, PDU_PORT_ID);
+    
+      // set up input message port
+      message_port_register_in(PDU_PORT_ID);
+      set_msg_handler(PDU_PORT_ID, boost::bind(&tuntap_pdu_impl::send, this, _1));
+    }
+
+    int
+    tuntap_pdu_impl::tun_alloc(char *dev, int flags)
+    {
+      struct ifreq ifr;
+      int fd, err;
+      const char *clonedev = "/dev/net/tun";
+
+      /* Arguments taken by the function:
+       *
+       * char *dev: the name of an interface (or '\0'). MUST have enough
+       *   space to hold the interface name if '\0' is passed
+       * int flags: interface flags (eg, IFF_TUN etc.)
+       */
+
+      /* open the clone device */
+      if ((fd = open(clonedev, O_RDWR)) < 0)
+        return fd;
+
+      /* preparation of the struct ifr, of type "struct ifreq" */
+      memset(&ifr, 0, sizeof(ifr));
+
+      ifr.ifr_flags = flags;   /* IFF_TUN or IFF_TAP, plus maybe IFF_NO_PI */
+
+      /* if a device name was specified, put it in the structure; otherwise,
+       * the kernel will try to allocate the "next" device of the
+       * specified type
+       */
+      if (*dev)
+        strncpy(ifr.ifr_name, dev, IFNAMSIZ);
+
+      /* try to create the device */
+      if ((err = ioctl(fd, TUNSETIFF, (void *) &ifr)) < 0) {
+        close(fd);
+        return err;
+      }
+
+      /* if the operation was successful, write back the name of the
+       * interface to the variable "dev", so the caller can know
+       * it. Note that the caller MUST reserve space in *dev (see calling
+       * code below)
+       */
+      strcpy(dev, ifr.ifr_name);
+
+      /* this is the special file descriptor that the caller will use to talk
+       * with the virtual interface
+       */
+      return fd;
+    }
+#endif
+	
+  } /* namespace blocks */
+}/* namespace gr */
diff --git a/gr-blocks/lib/tuntap_pdu_impl.h b/gr-blocks/lib/tuntap_pdu_impl.h
new file mode 100644
index 0000000000..396d9d51c8
--- /dev/null
+++ b/gr-blocks/lib/tuntap_pdu_impl.h
@@ -0,0 +1,51 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2013 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio 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.
+ *
+ * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_BLOCKS_TUNTAP_PDU_IMPL_H
+#define INCLUDED_BLOCKS_TUNTAP_PDU_IMPL_H
+
+#include <blocks/tuntap_pdu.h>
+#include "stream_pdu_base.h"
+
+#if (defined(linux) || defined(__linux) || defined(__linux__))
+#include <linux/if_tun.h>
+#endif
+
+namespace gr {
+  namespace blocks {
+
+    class tuntap_pdu_impl : public tuntap_pdu, public stream_pdu_base
+    {
+#if (defined(linux) || defined(__linux) || defined(__linux__))
+    private:
+      std::string d_dev;
+      int tun_alloc(char *dev, int flags = IFF_TAP | IFF_NO_PI);
+
+    public:
+      tuntap_pdu_impl(std::string dev, int MTU);
+#endif
+    };
+
+  } /* namespace blocks */
+} /* namespace gr */
+
+#endif /* INCLUDED_BLOCKS_TUNTAP_PDU_IMPL_H */
diff --git a/gr-blocks/swig/blocks_swig.i b/gr-blocks/swig/blocks_swig.i
index b229e55638..8e03038673 100644
--- a/gr-blocks/swig/blocks_swig.i
+++ b/gr-blocks/swig/blocks_swig.i
@@ -119,6 +119,7 @@
 #include "blocks/sub_ss.h"
 #include "blocks/sub_ii.h"
 #include "blocks/sub_cc.h"
+#include "blocks/tuntap_pdu.h"
 #include "blocks/uchar_to_float.h"
 #include "blocks/unpacked_to_packed_bb.h"
 #include "blocks/unpacked_to_packed_ss.h"
@@ -219,6 +220,7 @@
 %include "blocks/sub_ss.h"
 %include "blocks/sub_ii.h"
 %include "blocks/sub_cc.h"
+%include "blocks/tuntap_pdu.h"
 %include "blocks/uchar_to_float.h"
 %include "blocks/unpacked_to_packed_bb.h"
 %include "blocks/unpacked_to_packed_ss.h"
@@ -318,6 +320,7 @@ GR_SWIG_BLOCK_MAGIC2(blocks, sub_ff);
 GR_SWIG_BLOCK_MAGIC2(blocks, sub_ss);
 GR_SWIG_BLOCK_MAGIC2(blocks, sub_ii);
 GR_SWIG_BLOCK_MAGIC2(blocks, sub_cc);
+GR_SWIG_BLOCK_MAGIC2(blocks, tuntap_pdu);
 GR_SWIG_BLOCK_MAGIC2(blocks, uchar_to_float);
 GR_SWIG_BLOCK_MAGIC2(blocks, unpacked_to_packed_bb);
 GR_SWIG_BLOCK_MAGIC2(blocks, unpacked_to_packed_ss);
-- 
cgit v1.2.3


From 6e988b777c6788cc7d434b869173ebcdcc2ce5e3 Mon Sep 17 00:00:00 2001
From: Johnathan Corgan <johnathan@corganlabs.com>
Date: Wed, 27 Feb 2013 13:50:57 -0800
Subject: core: removed gr_tuntap_pdu

Replaced by gr::blocks:tuntap_pdu
---
 gnuradio-core/src/lib/io/CMakeLists.txt   |   1 -
 gnuradio-core/src/lib/io/gr_tuntap_pdu.cc | 145 ------------------------------
 gnuradio-core/src/lib/io/gr_tuntap_pdu.h  |  74 ---------------
 gnuradio-core/src/lib/io/gr_tuntap_pdu.i  |  30 -------
 gnuradio-core/src/lib/io/io.i             |   2 -
 grc/blocks/block_tree.xml                 |   1 -
 grc/blocks/gr_tuntap_pdu.xml              |  34 -------
 7 files changed, 287 deletions(-)
 delete mode 100644 gnuradio-core/src/lib/io/gr_tuntap_pdu.cc
 delete mode 100644 gnuradio-core/src/lib/io/gr_tuntap_pdu.h
 delete mode 100644 gnuradio-core/src/lib/io/gr_tuntap_pdu.i
 delete mode 100644 grc/blocks/gr_tuntap_pdu.xml

(limited to 'gnuradio-core/src')

diff --git a/gnuradio-core/src/lib/io/CMakeLists.txt b/gnuradio-core/src/lib/io/CMakeLists.txt
index 59ca06b5a2..23c019d63b 100644
--- a/gnuradio-core/src/lib/io/CMakeLists.txt
+++ b/gnuradio-core/src/lib/io/CMakeLists.txt
@@ -105,7 +105,6 @@ set(gr_core_io_triple_threats
     gr_wavfile_sink
     gr_tagged_file_sink
     gr_tagged_stream_to_pdu
-    gr_tuntap_pdu
     gr_socket_pdu
 )
 
diff --git a/gnuradio-core/src/lib/io/gr_tuntap_pdu.cc b/gnuradio-core/src/lib/io/gr_tuntap_pdu.cc
deleted file mode 100644
index 8dd4b18a10..0000000000
--- a/gnuradio-core/src/lib/io/gr_tuntap_pdu.cc
+++ /dev/null
@@ -1,145 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2012 Free Software Foundation, Inc.
- *
- * This file is part of GNU Radio
- *
- * GNU Radio 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.
- *
- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <gr_tuntap_pdu.h>
-#include <gr_io_signature.h>
-#include <cstdio>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <stdexcept>
-#include <string.h>
-#include <iostream>
-#include <gr_pdu.h>
-#include <boost/format.hpp>
-
-#if (defined(linux) || defined(__linux) || defined(__linux__))
-
-#include <sys/ioctl.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-#include <arpa/inet.h>
-#include <linux/if.h>
-
-
-// public constructor that returns a shared_ptr
-
-gr_tuntap_pdu_sptr
-gr_make_tuntap_pdu (std::string dev, int MTU)
-{
-  return gnuradio::get_initial_sptr(new gr_tuntap_pdu(dev, MTU));
-}
-
-gr_tuntap_pdu::gr_tuntap_pdu (std::string dev, int MTU)
-    : gr_stream_pdu_base(MTU)
-{
-
-    // make the tuntap
-    char dev_cstr[1024];
-    memset(dev_cstr, 0x00, 1024);
-    strncpy(dev_cstr, dev.c_str(), std::min(sizeof(dev_cstr), dev.size()));
-    d_fd = tun_alloc(dev_cstr);
-    if(d_fd <= 0){
-        throw std::runtime_error("TunTap make: tun_alloc failed (are you running as root?)");
-        }
-
-    std::cout << boost::format(
-        "Allocated virtual ethernet interface: %s\n"
-        "You must now use ifconfig to set its IP address. E.g.,\n"
-        "  $ sudo ifconfig %s 192.168.200.1\n"
-        "Be sure to use a different address in the same subnet for each machine.\n"
-        ) % dev % dev << std::endl;
-
-    // set up output message port
-    message_port_register_out(pmt::mp("pdus"));
-    start_rxthread(pmt::mp("pdus"));
-    
-    // set up input message port
-    message_port_register_in(pmt::mp("pdus"));
-    set_msg_handler(pmt::mp("pdus"), boost::bind(&gr_tuntap_pdu::send, this, _1));
-}
-
-
-int gr_tuntap_pdu::tun_alloc(char *dev, int flags) {
-  struct ifreq ifr;
-  int fd, err;
-  const char *clonedev = "/dev/net/tun";
-
-  /* Arguments taken by the function:
-   *
-   * char *dev: the name of an interface (or '\0'). MUST have enough
-   *   space to hold the interface name if '\0' is passed
-   * int flags: interface flags (eg, IFF_TUN etc.)
-   */
-
-   /* open the clone device */
-   if( (fd = open(clonedev, O_RDWR)) < 0 ) {
-     return fd;
-   }
-
-   /* preparation of the struct ifr, of type "struct ifreq" */
-   memset(&ifr, 0, sizeof(ifr));
-
-   ifr.ifr_flags = flags;   /* IFF_TUN or IFF_TAP, plus maybe IFF_NO_PI */
-
-   if (*dev) {
-     /* if a device name was specified, put it in the structure; otherwise,
-      * the kernel will try to allocate the "next" device of the
-      * specified type */
-     strncpy(ifr.ifr_name, dev, IFNAMSIZ);
-   }
-
-   /* try to create the device */
-   if( (err = ioctl(fd, TUNSETIFF, (void *) &ifr)) < 0 ) {
-     close(fd);
-     return err;
-   }
-
-  /* if the operation was successful, write back the name of the
-   * interface to the variable "dev", so the caller can know
-   * it. Note that the caller MUST reserve space in *dev (see calling
-   * code below) */
-  strcpy(dev, ifr.ifr_name);
-
-  /* this is the special file descriptor that the caller will use to talk
-   * with the virtual interface */
-  return fd;
-}
-
-#else //if not linux
-
-gr_block_sptr
-gr_make_tuntap_pdu(std::string dev, int MTU)
-{
-    gr_block_sptr rv;
-    throw std::runtime_error("tuntap only implemented on linux");
-    return rv;
-}
-
-#endif
diff --git a/gnuradio-core/src/lib/io/gr_tuntap_pdu.h b/gnuradio-core/src/lib/io/gr_tuntap_pdu.h
deleted file mode 100644
index 18c83f42b2..0000000000
--- a/gnuradio-core/src/lib/io/gr_tuntap_pdu.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2012 Free Software Foundation, Inc.
- *
- * This file is part of GNU Radio
- *
- * GNU Radio 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.
- *
- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef INCLUDED_GR_TUNTAP_PDU_H
-#define INCLUDED_GR_TUNTAP_PDU_H
-
-#include <gr_core_api.h>
-#include <gr_sync_block.h>
-#include <gr_message.h>
-#include <gr_msg_queue.h>
-#include <gr_stream_pdu_base.h>
-
-#if (defined(linux) || defined(__linux) || defined(__linux__))
-
-#include <linux/if_tun.h>
-
-class gr_tuntap_pdu;
-typedef boost::shared_ptr<gr_tuntap_pdu> gr_tuntap_pdu_sptr;
-
-GR_CORE_API gr_tuntap_pdu_sptr gr_make_tuntap_pdu (std::string dev, int MTU=10000);
-
-/*!
- * \brief Gather received items into messages and insert into msgq
- * \ingroup sink_blk
- */
-class GR_CORE_API gr_tuntap_pdu : public gr_stream_pdu_base
-{
- private:
-  friend GR_CORE_API gr_tuntap_pdu_sptr
-  gr_make_tuntap_pdu(std::string dev, int MTU);
-  int tun_alloc(char* dev, int flags = IFF_TAP | IFF_NO_PI);
-  std::string d_dev;
- protected:
-  gr_tuntap_pdu (std::string dev, int MTU=10000);
-
- public:
-  ~gr_tuntap_pdu () {}
-
-};
-
-#else // if not linux
-
-class gr_tuntap_pdu
-{
-private:
-  gr_tuntap_pdu() {};
-public:
-  ~gr_tuntap_pdu() {};
-};
-
-GR_CORE_API gr_block_sptr gr_make_tuntap_pdu (std::string dev, int MTU=0);
-
-#endif
-
-#endif /* INCLUDED_GR_TUNTAP_PDU_H */
diff --git a/gnuradio-core/src/lib/io/gr_tuntap_pdu.i b/gnuradio-core/src/lib/io/gr_tuntap_pdu.i
deleted file mode 100644
index 589bbc3853..0000000000
--- a/gnuradio-core/src/lib/io/gr_tuntap_pdu.i
+++ /dev/null
@@ -1,30 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2005 Free Software Foundation, Inc.
- *
- * This file is part of GNU Radio
- *
- * GNU Radio 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.
- *
- * GNU Radio 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 GNU Radio; see the file COPYING.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street,
- * Boston, MA 02110-1301, USA.
- */
-
-GR_SWIG_BLOCK_MAGIC(gr,tuntap_pdu);
-
-%{
-#include <gr_tuntap_pdu.h>
-%}
-
-%include "gr_tuntap_pdu.h"
-
diff --git a/gnuradio-core/src/lib/io/io.i b/gnuradio-core/src/lib/io/io.i
index e2de4eb976..33cc906e92 100644
--- a/gnuradio-core/src/lib/io/io.i
+++ b/gnuradio-core/src/lib/io/io.i
@@ -49,7 +49,6 @@
 #include <gr_tagged_stream_to_pdu.h>
 #include <gr_message_debug.h>
 #include <gr_pdu.h>
-#include <gr_tuntap_pdu.h>
 #include <gr_socket_pdu.h>
 %}
 
@@ -77,7 +76,6 @@
 %include "gr_tagged_stream_to_pdu.i"
 %include "gr_message_debug.i"
 %include "gr_pdu.i"
-%include "gr_tuntap_pdu.i"
 %include "gr_socket_pdu.i"
 
 
diff --git a/grc/blocks/block_tree.xml b/grc/blocks/block_tree.xml
index 8ddcaac61d..4567a65781 100644
--- a/grc/blocks/block_tree.xml
+++ b/grc/blocks/block_tree.xml
@@ -39,7 +39,6 @@
         <block>gr_message_strobe</block>
         <block>gr_pdu_to_tagged_stream</block>
         <block>gr_tagged_stream_to_pdu</block>
-        <block>gr_tuntap_pdu</block>
         <block>gr_socket_pdu</block>
         <block>gr_random_pdu</block>
     </cat>
diff --git a/grc/blocks/gr_tuntap_pdu.xml b/grc/blocks/gr_tuntap_pdu.xml
deleted file mode 100644
index f169345afa..0000000000
--- a/grc/blocks/gr_tuntap_pdu.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0"?>
-<!--
-###################################################
-## Tuntap PDU Message source/sink
-###################################################
- -->
-<block>
-	<name>TunTap PDU</name>
-	<key>gr_tuntap_pdu</key>
-	<import>from gnuradio import gr</import>
-	<make>gr.tuntap_pdu($ifn, $mtu)</make>
-    <param>
-        <name>Interface Name</name>
-        <key>ifn</key>
-        <value>tun0</value>
-        <type>string</type>
-    </param>
-    <param>
-        <name>MTU</name>
-        <key>mtu</key>
-        <value>10000</value>
-        <type>int</type>
-    </param>
-	<sink>
-		<name>pdus</name>
-		<type>message</type>
-        <optional>1</optional>
-	</sink>
-	<source>
-		<name>pdus</name>
-		<type>message</type>
-        <optional>1</optional>
-	</source>
-</block>
-- 
cgit v1.2.3