EMANE  1.0.1
rawtransport.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2013,2016 - Adjacent Link LLC, Bridgewater, New Jersey
3  * Copyright (c) 2008-2010 - DRS CenGen, LLC, Columbia, Maryland
4  * All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  *
10  * * Redistributions of source code must retain the above copyright
11  * notice, this list of conditions and the following disclaimer.
12  * * Redistributions in binary form must reproduce the above copyright
13  * notice, this list of conditions and the following disclaimer in
14  * the documentation and/or other materials provided with the
15  * distribution.
16  * * Neither the name of DRS CenGen, LLC nor the names of its
17  * contributors may be used to endorse or promote products derived
18  * from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
23  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
24  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
25  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
26  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
27  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
28  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
30  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31  * POSSIBILITY OF SUCH DAMAGE.
32  */
33 
34 #ifndef EMANETRANSPORTSRAWRAWTRANSPORT_HEADER_
35 #define EMANETRANSPORTSRAWRAWTRANSPORT_HEADER_
36 
37 #include <pcap.h>
38 #include <memory.h>
39 
40 #include "ethernettransport.h"
41 #include "emane/utils/netutils.h"
42 #include "emane/utils/bitpool.h"
43 
44 #include <thread>
45 
46 #include <set>
47 
48 namespace EMANE
49 {
50  namespace Transports
51  {
52  namespace Raw
53  {
60  {
61  public:
63  PlatformServiceProvider *pPlatformService);
64 
65  ~RawTransport();
66 
67  void initialize(Registrar & registrar) override;
68 
69  void configure(const ConfigurationUpdate & items) override;
70 
71  void start() override;
72 
73  void stop() override;
74 
75  void destroy() throw() override;
76 
78  const ControlMessages & msgs) override;
79 
80  void processUpstreamControl(const ControlMessages & msgs) override;
81 
82 
83  private:
84  std::string sTargetDevice_;
85 
86  Utils::EtherAddr macAddr_;
87 
88  std::thread thread_;
89 
90  pcap_t *pPcapHandle_;
91 
92  Utils::BitPool *pBitPool_;
93 
94  std::uint64_t u64BitRate_;
95 
103  void readDevice();
104 
105 
106  void handleUpstreamControl(const ControlMessages & msgs);
107  };
108  }
109  }
110 }
111 
112 #endif // EMANETRANSPORTSRAWRAWTRANSPORT_HEADER_
A Packet class that allows upstream processing to strip layer headers as the packet travels up the st...
Implementation of a rate limiting bit pool.
Definition: bitpool.h:52
The Registrar interface provides access to all of the emulator registrars.
Definition: registrar.h:50
void configure(const ConfigurationUpdate &items) override
RawTransport(NEMId id, PlatformServiceProvider *pPlatformService)
Definition: rawtransport.cc:70
std::list< const ControlMessage * > ControlMessages
The PlatformServiceProvider interface provides access to emulator services.
void initialize(Registrar &registrar) override
void processUpstreamPacket(UpstreamPacket &pkt, const ControlMessages &msgs) override
std::uint16_t NEMId
Definition: types.h:52
Definition of the ethernet frame address as an array of 6 bytes or set of 3 words.
Definition: netutils.h:422
Raw Device EMANE Transport.
Definition: rawtransport.h:59
std::vector< ConfigurationNameAnyValues > ConfigurationUpdate
void processUpstreamControl(const ControlMessages &msgs) override
Definition: agent.h:43