1 //
2 // Copyright (C) 2024 The Android Open Source Project
3 //
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 //      http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 
16 #include "host/commands/run_cvd/launch/launch.h"
17 
18 #include "common/libs/fs/shared_fd.h"
19 #include "common/libs/utils/subprocess.h"
20 #include "host/libs/config/command_source.h"
21 #include "host/libs/config/known_paths.h"
22 #include "host/libs/vhal_proxy_server/vhal_proxy_server_eth_addr.h"
23 
24 #include <linux/vm_sockets.h>
25 
26 namespace cuttlefish {
27 
VhalProxyServer(const CuttlefishConfig & config,const CuttlefishConfig::InstanceSpecific & instance)28 std::optional<MonitorCommand> VhalProxyServer(
29     const CuttlefishConfig& config,
30     const CuttlefishConfig::InstanceSpecific& instance) {
31   if (!instance.start_vhal_proxy_server()) {
32     return {};
33   }
34   int port = config.vhal_proxy_server_port();
35   Command command = Command(VhalProxyServerBinary())
36                         .AddParameter(VhalProxyServerConfig())
37                         .AddParameter(fmt::format(
38                             "{}:{}", vhal_proxy_server::kEthAddr, port));
39   if (instance.vhost_user_vsock()) {
40     command.AddParameter(
41         fmt::format("unix://{}", SharedFD::GetVhostUserVsockServerAddr(
42                                      port, instance.vsock_guest_cid())));
43   } else {
44     command.AddParameter(fmt::format("vsock:{}:{}", VMADDR_CID_HOST, port));
45   }
46   return command;
47 }
48 
49 }  // namespace cuttlefish
50