blob: 1c959cff55dc51e8b6f032abf955d0b1bc272435 [file] [log] [blame] [edit]
/*
* Copyright (C) 2023 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <android-base/parseint.h>
#include "host/libs/config/openwrt_args.h"
namespace cuttlefish {
namespace {
std::string getIpAddress(int c_class, int d_class) {
return "192.168." + std::to_string(c_class) + "." + std::to_string(d_class);
}
} // namespace
std::unordered_map<std::string, std::string> OpenwrtArgsFromConfig(
const CuttlefishConfig::InstanceSpecific& instance) {
std::unordered_map<std::string, std::string> openwrt_args;
int instance_num;
if (!android::base::ParseInt(instance.id(), &instance_num, 1, 128)) {
return openwrt_args;
}
openwrt_args["webrtc_device_id"] = instance.webrtc_device_id();
int c_class_base = (instance_num - 1) / 64;
int d_class_base = (instance_num - 1) % 64 * 4;
// IP address for OpenWRT is pre-defined in init script of android-cuttlefish
// github repository by using tap interfaces created with the script.
// (github) base/debian/cuttlefish-base.cuttlefish-host-resources.init
// The command 'crosvm run' uses openwrt_args for passing the arguments into
// /proc/cmdline of OpenWRT instance.
// (AOSP) device/google/cuttlefish/host/commands/run_cvd/launch/open_wrt.cpp
// In OpenWRT instance, the script 0_default_config reads /proc/cmdline so
// that it can apply arguments defined here.
// (AOSP) external/openwrt-prebuilts/shared/uci-defaults/0_default_config
if (instance.use_bridged_wifi_tap()) {
openwrt_args["bridged_wifi_tap"] = "true";
openwrt_args["wan_gateway"] = getIpAddress(96, 1);
// TODO(seungjaeyoo) : Remove config after using DHCP server outside OpenWRT
// instead.
openwrt_args["wan_ipaddr"] = getIpAddress(96, d_class_base + 2);
openwrt_args["wan_broadcast"] = getIpAddress(96, d_class_base + 3);
} else {
openwrt_args["bridged_wifi_tap"] = "false";
openwrt_args["wan_gateway"] =
getIpAddress(94 + c_class_base, d_class_base + 1);
openwrt_args["wan_ipaddr"] =
getIpAddress(94 + c_class_base, d_class_base + 2);
openwrt_args["wan_broadcast"] =
getIpAddress(94 + c_class_base, d_class_base + 3);
}
return openwrt_args;
}
} // namespace cuttlefish