MCPcopy Create free account
hub / github.com/NetSys/bess / CreateModule

Method CreateModule

core/bessctl.cc:1199–1243  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1197 }
1198
1199 Status CreateModule(ServerContext*, const CreateModuleRequest* request,
1200 CreateModuleResponse* response) override {
1201 std::lock_guard<std::recursive_mutex> lock(mutex_);
1202
1203 VLOG(1) << "CreateModuleRequest from client:" << std::endl
1204 << request->DebugString();
1205
1206 if (!request->mclass().length()) {
1207 return return_with_error(response, EINVAL, "Missing 'mclass' field");
1208 }
1209
1210 const auto& builders = ModuleBuilder::all_module_builders();
1211 const auto& it = builders.find(request->mclass());
1212 if (it == builders.end()) {
1213 return return_with_error(response, ENOENT, "No mclass '%s' found",
1214 request->mclass().c_str());
1215 }
1216 const ModuleBuilder& builder = it->second;
1217
1218 std::string mod_name;
1219 if (request->name().length()) {
1220 const auto& it2 = ModuleGraph::GetAllModules().find(request->name());
1221 if (it2 != ModuleGraph::GetAllModules().end()) {
1222 return return_with_error(response, EEXIST, "Module %s exists",
1223 request->name().c_str());
1224 }
1225 mod_name = request->name();
1226 } else {
1227 mod_name = ModuleGraph::GenerateDefaultName(builder.class_name(),
1228 builder.name_template());
1229 }
1230
1231 // DPDK functions may be called, so be prepared
1232 current_worker.SetNonWorker();
1233
1234 pb_error_t* error = response->mutable_error();
1235 Module* module =
1236 ModuleGraph::CreateModule(builder, mod_name, request->arg(), error);
1237 if (module) {
1238 response->set_name(module->name());
1239 bess::event_modules[bess::Event::PreResume].insert(module);
1240 }
1241
1242 return Status::OK;
1243 }
1244
1245 Status DestroyModule(ServerContext*, const DestroyModuleRequest* request,
1246 EmptyResponse* response) override {

Callers

nothing calls this directly

Calls 4

return_with_errorFunction · 0.85
SetNonWorkerMethod · 0.80
endMethod · 0.45
set_nameMethod · 0.45

Tested by

no test coverage detected