View | Details | Raw Unified | Return to bug 2410
Collapse All | Expand All

(-)948b4f066f66 (+158 lines)
Added Link Here 
1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2
/*
3
 * This program is free software; you can redistribute it and/or modify
4
 * it under the terms of the GNU General Public License version 2 as
5
 * published by the Free Software Foundation;
6
 *
7
 * This program is distributed in the hope that it will be useful,
8
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10
 * GNU General Public License for more details.
11
 *
12
 * You should have received a copy of the GNU General Public License
13
 * along with this program; if not, write to the Free Software
14
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
15
 *
16
 * Author: Hossam Khader <hossamkhader@gmail.com>
17
 */
18
19
#include "ns3/core-module.h"
20
#include "ns3/node-container.h"
21
#include "ns3/mobility-helper.h"
22
#include "ns3/mobility-model.h"
23
#include "ns3/basic-energy-source-helper.h"
24
#include "ns3/energy-source-container.h"
25
#include "ns3/uan-helper.h"
26
#include "ns3/uan-channel.h"
27
#include "ns3/acoustic-modem-energy-model-helper.h"
28
#include "ns3/uan-raw-application-helper.h"
29
#include "ns3/uan-raw-application.h"
30
31
using namespace ns3;
32
33
/**
34
 *
35
 * This example shows the usage of UanRawApplication to transfer data.
36
 * Two nodes are sending their remaining energy percentage (1 byte)
37
 * to a gateway node, that prints the received data.
38
 * The transmissions are scheduled at random times to avoid collisions
39
 *
40
 */
41
42
NS_LOG_COMPONENT_DEFINE ("UanRawApplicationExample");
43
44
void SetupPositions ();
45
void SetupEnergy ();
46
void SetupCommunications ();
47
void PrintReceivedPacket (Address src, Buffer data);
48
void SetupApplications ();
49
void SendPacket ();
50
void Run ();
51
52
NodeContainer nodeContainer;
53
54
void
55
SetupPositions ()
56
{
57
  MobilityHelper mobilityHelper;
58
  mobilityHelper.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
59
  mobilityHelper.Install (nodeContainer);
60
  nodeContainer.Get (0)->GetObject<MobilityModel> ()->SetPosition (Vector (0, 0, 0));
61
  nodeContainer.Get (1)->GetObject<MobilityModel> ()->SetPosition (Vector (100, 0, 0));
62
  nodeContainer.Get (2)->GetObject<MobilityModel> ()->SetPosition (Vector (-100, 0, 0));
63
}
64
65
void
66
SetupEnergy ()
67
{
68
  BasicEnergySourceHelper energySourceHelper;
69
  energySourceHelper.Set ("BasicEnergySourceInitialEnergyJ", DoubleValue (900000));
70
  energySourceHelper.Install (nodeContainer);
71
}
72
73
void
74
SetupCommunications ()
75
{
76
  Ptr<UanChannel> channel = CreateObject<UanChannel> ();
77
  UanHelper uanHelper;
78
  NetDeviceContainer netDeviceContainer = uanHelper.Install (nodeContainer, channel);
79
  EnergySourceContainer energySourceContainer;
80
  NodeContainer::Iterator node = nodeContainer.Begin ();
81
  while (node != nodeContainer.End ())
82
    {
83
      energySourceContainer.Add ((*node)->GetObject<EnergySourceContainer> ()->Get (0));
84
      node++;
85
    }
86
  AcousticModemEnergyModelHelper acousticModemEnergyModelHelper;
87
  acousticModemEnergyModelHelper.Install (netDeviceContainer, energySourceContainer);
88
}
89
90
void
91
PrintReceivedPacket (Address src, Buffer data)
92
{
93
  std::cout << "Time:" << Simulator::Now ().GetHours () << "|"
94
            << "Node:" << (int)(UanAddress::ConvertFrom (src).GetAsInt ())
95
            << "|Energy:" << (int)(data.Begin ().ReadU8 ()) << "%" << std::endl;
96
}
97
98
void
99
SetupApplications ()
100
{
101
  UanRawApplicationHelper uanRawApplicationHelper;
102
  ApplicationContainer applicationContainer;
103
  applicationContainer = uanRawApplicationHelper.Install (nodeContainer);
104
  applicationContainer.Start (Seconds (0));
105
  NodeContainer::Iterator node = nodeContainer.Begin ();
106
  while (node != nodeContainer.End ())
107
    {
108
      Ptr<UanRawApplication> uanRawApplication = (*node)->GetApplication (0)->GetObject<UanRawApplication> ();
109
      uanRawApplication->SetPacketReceivedCallback (MakeCallback<void, Address, Buffer>(&PrintReceivedPacket));
110
      node++;
111
    }
112
}
113
114
void
115
SendPacket ()
116
{
117
  Ptr<UniformRandomVariable> uniformRandomVariable = CreateObject<UniformRandomVariable> ();
118
  NodeContainer::Iterator node = nodeContainer.Begin ();
119
  node++;
120
  while (node != nodeContainer.End ())
121
    {
122
      uint8_t energy = ((*node)->GetObject<EnergySourceContainer> ()->Get (0)->GetEnergyFraction ()) * 100;
123
      Ptr<UanRawApplication> uanRawApplication = (*node)->GetApplication (0)->GetObject<UanRawApplication> ();
124
      Buffer dataBuffer;
125
      dataBuffer.AddAtEnd (sizeof (uint8_t));
126
      Buffer::Iterator i = dataBuffer.Begin ();
127
      double time = uniformRandomVariable->GetValue (0, 15);
128
      i.WriteU8 (energy);
129
      Simulator::Schedule (Seconds (time), &UanRawApplication::Send, uanRawApplication, UanAddress (0), dataBuffer);
130
      node++;
131
    }
132
  Simulator::Schedule (Minutes (5), &SendPacket);
133
}
134
135
void
136
Run ()
137
{
138
  Packet::EnablePrinting ();
139
  nodeContainer.Create (3);
140
  SetupPositions ();
141
  SetupEnergy ();
142
  SetupCommunications ();
143
  SetupApplications ();
144
  SendPacket ();
145
}
146
147
int
148
main (int argc, char *argv[])
149
{
150
  CommandLine cmd;
151
  cmd.Parse (argc, argv);
152
  Run ();
153
  Simulator::Stop (Days (20));
154
  Simulator::Run ();
155
  Simulator::Destroy ();
156
157
  return 0;
158
}
(-)a/src/uan/examples/wscript (+3 lines)
 Lines 6-8    Link Here 
6
6
7
    obj = bld.create_ns3_program('uan-rc-example', ['internet', 'mobility', 'stats', 'applications', 'uan'])
7
    obj = bld.create_ns3_program('uan-rc-example', ['internet', 'mobility', 'stats', 'applications', 'uan'])
8
    obj.source = 'uan-rc-example.cc'
8
    obj.source = 'uan-rc-example.cc'
9
10
    obj = bld.create_ns3_program('uan-raw-application-example', ['internet', 'uan', 'mobility', 'energy'])
11
    obj.source = 'uan-raw-application-example.cc'
(-)948b4f066f66 (+80 lines)
Added Link Here 
1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2
/*
3
 * This program is free software; you can redistribute it and/or modify
4
 * it under the terms of the GNU General Public License version 2 as
5
 * published by the Free Software Foundation;
6
 *
7
 * This program is distributed in the hope that it will be useful,
8
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10
 * GNU General Public License for more details.
11
 *
12
 * You should have received a copy of the GNU General Public License
13
 * along with this program; if not, write to the Free Software
14
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
15
 * 
16
 * Author: Hossam Khader <hossamkhader@gmail.com>
17
 */
18
19
#include "uan-raw-application-helper.h"
20
#include "ns3/names.h"
21
#include "ns3/packet-socket-factory.h"
22
#include "ns3/packet-socket-helper.h"
23
#include "ns3/net-device.h"
24
#include "ns3/address.h"
25
26
27
namespace ns3 {
28
29
UanRawApplicationHelper::UanRawApplicationHelper ()
30
{
31
  m_factory.SetTypeId ("ns3::UanRawApplication");
32
}
33
34
void 
35
UanRawApplicationHelper::SetAttribute (std::string name, const AttributeValue &value)
36
{
37
  m_factory.Set (name, value);
38
}
39
40
ApplicationContainer
41
UanRawApplicationHelper::Install (Ptr<Node> node) const
42
{
43
  return ApplicationContainer (DoInstall (node));
44
}
45
46
ApplicationContainer
47
UanRawApplicationHelper::Install (std::string nodeName) const
48
{
49
  Ptr<Node> node = Names::Find<Node> (nodeName);
50
  return ApplicationContainer (DoInstall (node));
51
}
52
53
ApplicationContainer
54
UanRawApplicationHelper::Install (NodeContainer c) const
55
{
56
  ApplicationContainer apps;
57
  for (NodeContainer::Iterator i = c.Begin (); i != c.End (); ++i)
58
    {
59
      apps.Add (DoInstall (*i));
60
    }
61
62
  return apps;
63
}
64
65
Ptr<Application>
66
UanRawApplicationHelper::DoInstall (Ptr<Node> node) const
67
{
68
  if(node->GetObject<PacketSocketFactory> () == NULL)
69
    {
70
      PacketSocketHelper packetSocketHelper;
71
      packetSocketHelper.Install (node);
72
    }
73
74
  Ptr<Application> app = m_factory.Create<Application> ();
75
  node->AddApplication (app);
76
77
  return app;
78
}
79
80
} // namespace ns3
(-)948b4f066f66 (+92 lines)
Added Link Here 
1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2
/*
3
 * This program is free software; you can redistribute it and/or modify
4
 * it under the terms of the GNU General Public License version 2 as
5
 * published by the Free Software Foundation;
6
 *
7
 * This program is distributed in the hope that it will be useful,
8
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10
 * GNU General Public License for more details.
11
 *
12
 * You should have received a copy of the GNU General Public License
13
 * along with this program; if not, write to the Free Software
14
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
15
 * 
16
 * Author: Hossam Khader <hossamkhader@gmail.com>
17
 */
18
19
#ifndef UAN_RAW_APPLICATION_HELPER_H
20
#define UAN_RAW_APPLICATION_HELPER_H
21
22
23
#include "ns3/object-factory.h"
24
#include "ns3/attribute.h"
25
#include "ns3/node-container.h"
26
#include "ns3/application-container.h"
27
28
namespace ns3 {
29
30
/**
31
 * \ingroup uan
32
 * \brief A helper to make it easier to instantiate an ns3::UanRawApplication 
33
 * on a set of nodes.
34
 */
35
class UanRawApplicationHelper
36
{
37
public:
38
  /**
39
   * Create an UanRawApplicationHelper to make it easier to work with UanRawApplication
40
   */
41
  UanRawApplicationHelper ();
42
43
  /**
44
   * Helper function used to set the underlying application attributes.
45
   */
46
  void SetAttribute (std::string name, const AttributeValue &value);
47
48
  /**
49
   * Install an ns3::UanRawApplication on each node of the input container
50
   * configured with all the attributes set with SetAttribute.
51
   *
52
   * \param c NodeContainer of the set of nodes on which an UanRawApplication 
53
   * will be installed.
54
   * \returns Container of Ptr to the applications installed.
55
   */
56
  ApplicationContainer Install (NodeContainer c) const;
57
58
  /**
59
   * Install an ns3::UanRawApplication on the node configured with all the 
60
   * attributes set with SetAttribute.
61
   *
62
   * \param node The node on which an UanRawApplication will be installed.
63
   * \returns Container of Ptr to the applications installed.
64
   */
65
  ApplicationContainer Install (Ptr<Node> node) const;
66
67
  /**
68
   * Install an ns3::UanRawApplication on the node configured with all the 
69
   * attributes set with SetAttribute.
70
   *
71
   * \param nodeName The node on which an UanRawApplication will be installed.
72
   * \returns Container of Ptr to the applications installed.
73
   */
74
  ApplicationContainer Install (std::string nodeName) const;
75
76
private:
77
  /**
78
   * Install an ns3::UanRawApplication on the node configured with all the 
79
   * attributes set with SetAttribute.
80
   *
81
   * \param node The node on which an UanRawApplication will be installed.
82
   * \returns Ptr to the application installed.
83
   */
84
  Ptr<Application> DoInstall (Ptr<Node> node) const;
85
86
  ObjectFactory m_factory; //!< Object factory.
87
};
88
89
} // namespace ns3
90
91
#endif /* UAN_RAW_APPLICATION_HELPER_H */
92
(-)948b4f066f66 (+183 lines)
Added Link Here 
1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2
/*
3
 * This program is free software; you can redistribute it and/or modify
4
 * it under the terms of the GNU General Public License version 2 as
5
 * published by the Free Software Foundation;
6
 *
7
 * This program is distributed in the hope that it will be useful,
8
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10
 * GNU General Public License for more details.
11
 *
12
 * You should have received a copy of the GNU General Public License
13
 * along with this program; if not, write to the Free Software
14
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
15
 * 
16
 * Author: Hossam Khader <hossamkhader@gmail.com>
17
 */
18
#include "uan-raw-application.h"
19
#include "ns3/log.h"
20
#include "ns3/socket-factory.h"
21
#include "ns3/packet-socket-address.h"
22
#include "ns3/packet-socket.h"
23
24
namespace ns3 {
25
26
NS_LOG_COMPONENT_DEFINE ("UanRawApplication");
27
28
NS_OBJECT_ENSURE_REGISTERED (UanRawApplication);
29
30
TypeId 
31
UanRawApplication::GetTypeId (void)
32
{
33
  static TypeId tid = TypeId ("ns3::UanRawApplication")
34
    .SetParent<Application> ()
35
    .SetGroupName ("Applications")
36
    .AddConstructor<UanRawApplication> ()
37
  ;
38
  return tid;
39
}
40
41
UanRawApplication::UanRawApplication ()
42
{
43
  NS_LOG_FUNCTION (this);
44
  m_socket = NULL;
45
  m_packetReceivedCallback.Nullify ();
46
}
47
UanRawApplication::~UanRawApplication ()
48
{
49
  NS_LOG_FUNCTION (this);
50
}
51
52
void
53
UanRawApplication::DoDispose (void)
54
{
55
  NS_LOG_FUNCTION (this);
56
  m_socket = NULL;
57
  m_packetReceivedCallback.Nullify ();
58
  Application::DoDispose ();
59
}
60
61
uint32_t
62
UanRawApplication::GetApplicationId (void) const
63
{
64
  NS_LOG_FUNCTION (this);
65
  Ptr<Node> node = GetNode ();
66
  for (uint32_t i = 0; i < node->GetNApplications (); ++i)
67
    {
68
      if (node->GetApplication (i) == this)
69
        {
70
          return i;
71
        }
72
    }
73
  NS_ASSERT_MSG (false, "forgot to add application to node");
74
  return 0;
75
}
76
77
78
void 
79
UanRawApplication::Send (Address dst, const Buffer dataBuffer)
80
{
81
  NS_LOG_FUNCTION (this);
82
  const uint8_t * data = dataBuffer.PeekData ();
83
84
  if(UanAddress::ConvertFrom (dst).GetAsInt () != 
85
     UanAddress::ConvertFrom (GetNode ()->GetDevice (0)->GetAddress ()).GetAsInt ())
86
    { 
87
      PacketSocketAddress socketAddress;
88
      socketAddress.SetSingleDevice (GetNode ()->GetDevice (0)->GetIfIndex ());
89
      socketAddress.SetPhysicalAddress (dst);
90
      socketAddress.SetProtocol (0);
91
      Ptr<Packet> packet = Create<Packet> (data, dataBuffer.GetSize ());
92
      if(m_socket == NULL)
93
        {
94
          StartApplication ();
95
        }
96
      m_socket->SendTo (packet, 0, socketAddress);
97
    }
98
}
99
100
void
101
UanRawApplication::Receive (Ptr<Socket> socket)
102
{
103
  NS_LOG_FUNCTION (this << socket);
104
  NS_ASSERT (m_socket != NULL);
105
  while (m_socket->GetRxAvailable () > 0)
106
    {
107
      Ptr<Packet> packet = m_socket->Recv ();
108
      uint8_t *buffer = new uint8_t[packet->GetSize ()];
109
      packet->CopyData (buffer, packet->GetSize ());
110
      Address srcAddress;
111
      PacketTagIterator i = packet->GetPacketTagIterator ();
112
      while (i.HasNext ())
113
        {
114
          PacketTagIterator::Item item = i.Next ();
115
          if (item.GetTypeId () == TypeId::LookupByName ("ns3::SocketAddressTag"))
116
            {
117
              SocketAddressTag tag;
118
              item.GetTag (tag);
119
              Address address = tag.GetAddress ();
120
              uint8_t *addressBuffer = new uint8_t[address.GetLength ()];
121
              address.CopyTo (addressBuffer);
122
              srcAddress = UanAddress (addressBuffer[address.GetLength () -1]);
123
              delete [] addressBuffer;
124
            }
125
        }
126
      if(!m_packetReceivedCallback.IsNull ())
127
        {
128
          Buffer dataBuffer;
129
          dataBuffer.AddAtEnd ( packet->GetSize ());
130
          Buffer::Iterator iterator = dataBuffer.Begin ();
131
          iterator.Write (buffer, packet->GetSize ());
132
          m_packetReceivedCallback (srcAddress, dataBuffer);
133
        }
134
      delete[] buffer;
135
    }
136
137
} 
138
139
void 
140
UanRawApplication::StartApplication (void)
141
{
142
  NS_LOG_FUNCTION (this);
143
  PacketSocketAddress socketAddress;
144
  socketAddress.SetSingleDevice (GetNode ()->GetDevice (0)->GetIfIndex ());
145
  socketAddress.SetPhysicalAddress (UanAddress (UanAddress::GetBroadcast ()));
146
  socketAddress.SetProtocol (0);
147
  if (!m_socket)
148
    {
149
      m_socket = Socket::CreateSocket (GetNode (), TypeId::LookupByName ("ns3::PacketSocketFactory"));
150
    }
151
  m_socket->Bind ();
152
  m_socket->Connect (socketAddress);
153
  m_socket->SetRecvCallback (MakeCallback (&UanRawApplication::Receive, this));
154
}
155
 
156
void 
157
UanRawApplication::StopApplication (void)
158
{
159
  NS_LOG_FUNCTION (this);
160
  if(m_socket != NULL)
161
    {
162
      m_socket->Close ();
163
    }
164
  else
165
    {
166
      NS_LOG_WARN ("UanRawApplication found null socket to close in StopApplication");
167
    }
168
}
169
170
void
171
UanRawApplication::SetPacketReceivedCallback (PacketReceivedCallback callback)
172
{
173
  NS_LOG_FUNCTION (this);
174
  if (callback.IsNull ())
175
    {
176
      NS_LOG_DEBUG ("UanRawApplication:Setting NULL packet received callback!");
177
    }
178
  m_packetReceivedCallback = callback;
179
}
180
181
182
183
} // namespace ns3
(-)948b4f066f66 (+104 lines)
Added Link Here 
1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2
/*
3
 * This program is free software; you can redistribute it and/or modify
4
 * it under the terms of the GNU General Public License version 2 as
5
 * published by the Free Software Foundation;
6
 *
7
 * This program is distributed in the hope that it will be useful,
8
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10
 * GNU General Public License for more details.
11
 *
12
 * You should have received a copy of the GNU General Public License
13
 * along with this program; if not, write to the Free Software
14
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
15
 * 
16
 * Author: Hossam Khader <hossamkhader@gmail.com>
17
 */
18
19
#ifndef UAN_RAW_APPLICATION_H
20
#define UAN_RAW_APPLICATION_H
21
22
23
#include "ns3/application.h"
24
#include "ns3/packet.h"
25
#include "ns3/uan-address.h"
26
#include "ns3/socket.h"
27
28
namespace ns3 {
29
30
/**
31
 * \ingroup uan
32
 * \brief a simple Raw application to be used in UAN networks
33
 * 
34
 * The Application combines both the client-side and the server-side 
35
 * functionality, and provides an easy to use bidirectional communications 
36
 * between the UAN nodes. It runs directly on top of the UAN data link layer, so
37
 * raw data is sent in the payload of the UAN frame.
38
 * 
39
 * The user interacts with the application mainly through two functions:
40
 * Send () : Used to send the data in the buffer parameter to the
41
 * destination UAN address.
42
 * SetPacketReceivedCallback (): Used to set a receive callback where the raw 
43
 * packet payload, and the source UAN address will be passed as
44
 * parameters.
45
 */
46
47
class UanRawApplication : public Application
48
{
49
public:
50
51
  typedef Callback<void, Address, Buffer> PacketReceivedCallback;
52
53
  /**
54
   * \brief Get the type ID.
55
   * \return the object TypeId
56
   */
57
  static TypeId GetTypeId (void);
58
59
  /**
60
   * create a uan application
61
   */
62
  UanRawApplication ();
63
  virtual ~UanRawApplication ();
64
65
  /**
66
   * \brief Send a packet to the destination
67
   * \param dst the destination UAN address
68
   * \param dataBuffer the data to be sent
69
   */
70
  void Send (Address dst, const Buffer dataBuffer);
71
72
  /**
73
   * \brief Set a callback when a packet is received
74
   * \param callback the packet received callback
75
   */
76
  void SetPacketReceivedCallback (PacketReceivedCallback callback);
77
78
private:
79
80
  // inherited from Application base class.
81
  virtual void StartApplication (void);
82
  virtual void StopApplication (void);
83
  virtual void DoDispose (void);
84
  /**
85
   * \brief Return the application ID in the node.
86
   * \returns the application id
87
   */
88
  uint32_t GetApplicationId (void) const;
89
  /**
90
   * \brief Receive a packet
91
   * \param socket the receiving socket
92
   *
93
   * This function is called by lower layers through a callback.
94
   */
95
  void Receive (Ptr<Socket> socket);
96
97
  Ptr<Socket> m_socket; //!< Associated socket
98
  PacketReceivedCallback m_packetReceivedCallback;
99
100
};
101
102
} // namespace ns3
103
104
#endif /* UAN_RAW_APPLICATION_H */
(-)a/src/uan/wscript (-1 / +5 lines)
 Lines 25-32    Link Here 
25
        'model/uan-phy.cc',
25
        'model/uan-phy.cc',
26
        'model/uan-noise-model.cc',
26
        'model/uan-noise-model.cc',
27
        'model/acoustic-modem-energy-model.cc',
27
        'model/acoustic-modem-energy-model.cc',
28
        'model/uan-raw-application.cc',
28
        'helper/uan-helper.cc',
29
        'helper/uan-helper.cc',
29
        'helper/acoustic-modem-energy-model-helper.cc',
30
        'helper/acoustic-modem-energy-model-helper.cc',
31
        'helper/uan-raw-application-helper.cc',
30
        ]
32
        ]
31
33
32
    module_test = bld.create_ns3_module_test_library('uan')
34
    module_test = bld.create_ns3_module_test_library('uan')
 Lines 58-66    Link Here 
58
        'model/uan-header-rc.h',
60
        'model/uan-header-rc.h',
59
        'model/uan-mac-rc.h',
61
        'model/uan-mac-rc.h',
60
        'model/acoustic-modem-energy-model.h',
62
        'model/acoustic-modem-energy-model.h',
63
        'model/uan-mac-rc-gw.h',
64
        'model/uan-raw-application.h',
61
        'helper/uan-helper.h',
65
        'helper/uan-helper.h',
62
        'helper/acoustic-modem-energy-model-helper.h',
66
        'helper/acoustic-modem-energy-model-helper.h',
63
        'model/uan-mac-rc-gw.h',
67
        'helper/uan-raw-application-helper.h',
64
        ]
68
        ]
65
69
66
    if (bld.env['ENABLE_EXAMPLES']):
70
    if (bld.env['ENABLE_EXAMPLES']):

Return to bug 2410