EMANE  1.0.1
nembuilder.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2013-2014 - Adjacent Link LLC, Bridgewater, New Jersey
3  * Copyright (c) 2008-2011 - 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 EMANEAPPLICATIONNEMBUILDER_HEADER_
35 #define EMANEAPPLICATIONNEMBUILDER_HEADER_
36 
38 #include "emane/application/nem.h"
39 #include "emane/nemlayer.h"
40 
42 
43 #include <string>
44 #include <list>
45 #include <memory>
46 
47 namespace EMANE
48 {
49  namespace Application
50  {
51  using NEMLayers = std::list<std::unique_ptr<NEMLayer>>;
52  using NEMs = std::list<std::unique_ptr<NEM>>;
53 
60  class NEMBuilder
61  {
62  public:
63  NEMBuilder();
64 
65  ~NEMBuilder();
66 
84  std::unique_ptr<NEMLayer>
86  const std::string & sLibraryFile,
87  const ConfigurationUpdateRequest & request,
88  bool bSkipConfigure = false);
89 
107  std::unique_ptr<NEMLayer>
108  buildMACLayer(NEMId id,
109  const std::string & sLibraryFile,
110  const ConfigurationUpdateRequest & request,
111  bool bSkipConfigure = false);
112 
130  std::unique_ptr<NEMLayer>
132  const std::string & sLibraryFile,
133  const ConfigurationUpdateRequest & request,
134  bool bSkipConfigure = false);
135 
153  std::unique_ptr<NEMLayer>
155  const std::string & sLibraryFile,
156  const ConfigurationUpdateRequest & request,
157  bool bSkipConfigure = false);
158 
159 
178  std::unique_ptr<NEM> buildNEM(NEMId id,
179  NEMLayers & layers,
180  const ConfigurationUpdateRequest & request,
181  bool bHasExternalTransport);
182 
200  std::unique_ptr<NEMManager>
201  buildNEMManager(const uuid_t & uuid,
202  NEMs & nems,
203  const ConfigurationUpdateRequest & request);
204 
205  private:
206  class NEMBuilderImpl;
207  NEMBuilderImpl * pImpl_;
208  };
209  }
210 }
211 
212 #endif // EMANEAPPLICATIONNEMBUILDER_HEADER_
std::list< std::unique_ptr< NEMLayer > > NEMLayers
Definition: nembuilder.h:51
std::unique_ptr< NEMManager > buildNEMManager(const uuid_t &uuid, NEMs &nems, const ConfigurationUpdateRequest &request)
Definition: nembuilder.cc:324
std::unique_ptr< NEMLayer > buildMACLayer(NEMId id, const std::string &sLibraryFile, const ConfigurationUpdateRequest &request, bool bSkipConfigure=false)
Definition: nembuilder.cc:159
std::unique_ptr< NEMLayer > buildPHYLayer(NEMId id, const std::string &sLibraryFile, const ConfigurationUpdateRequest &request, bool bSkipConfigure=false)
Definition: nembuilder.cc:87
std::uint16_t NEMId
Definition: types.h:52
std::unique_ptr< NEM > buildNEM(NEMId id, NEMLayers &layers, const ConfigurationUpdateRequest &request, bool bHasExternalTransport)
Definition: nembuilder.cc:281
std::list< std::unique_ptr< NEM > > NEMs
Definition: nembuilder.h:52
std::vector< ConfigurationNameStringValues > ConfigurationUpdateRequest
std::unique_ptr< NEMLayer > buildTransportLayer(NEMId id, const std::string &sLibraryFile, const ConfigurationUpdateRequest &request, bool bSkipConfigure=false)
Definition: nembuilder.cc:355
Definition: agent.h:43
Provides methods for constructing an emulator instance from its constituent parts.
Definition: nembuilder.h:60
std::unique_ptr< NEMLayer > buildShimLayer(NEMId id, const std::string &sLibraryFile, const ConfigurationUpdateRequest &request, bool bSkipConfigure=false)
Definition: nembuilder.cc:220