| 994 | } |
| 995 | |
| 996 | Status CreatePort(ServerContext*, const CreatePortRequest* request, |
| 997 | CreatePortResponse* response) override { |
| 998 | std::lock_guard<std::recursive_mutex> lock(mutex_); |
| 999 | |
| 1000 | const char* driver_name; |
| 1001 | ::Port* port = nullptr; |
| 1002 | |
| 1003 | VLOG(1) << "CreatePortRequest from client:" << std::endl |
| 1004 | << request->DebugString(); |
| 1005 | |
| 1006 | if (request->driver().length() == 0) |
| 1007 | return return_with_error(response, EINVAL, "Missing 'driver' field"); |
| 1008 | |
| 1009 | driver_name = request->driver().c_str(); |
| 1010 | const auto& builders = PortBuilder::all_port_builders(); |
| 1011 | const auto& it = builders.find(driver_name); |
| 1012 | if (it == builders.end()) { |
| 1013 | return return_with_error(response, ENOENT, "No port driver '%s' found", |
| 1014 | driver_name); |
| 1015 | } |
| 1016 | |
| 1017 | const PortBuilder& builder = it->second; |
| 1018 | pb_error_t* error = response->mutable_error(); |
| 1019 | |
| 1020 | port = create_port(request->name(), builder, request->num_inc_q(), |
| 1021 | request->num_out_q(), request->size_inc_q(), |
| 1022 | request->size_out_q(), request->arg(), error); |
| 1023 | |
| 1024 | if (!port) |
| 1025 | return Status::OK; |
| 1026 | |
| 1027 | response->set_name(port->name()); |
| 1028 | response->set_mac_addr(port->conf().mac_addr.ToString()); |
| 1029 | |
| 1030 | return Status::OK; |
| 1031 | } |
| 1032 | |
| 1033 | Status SetPortConf(ServerContext*, const SetPortConfRequest* request, |
| 1034 | EmptyResponse* response) override { |
no test coverage detected