1// Copyright 2021 The ChromiumOS Authors 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5syntax = "proto3"; 6 7package chromiumos.test.lab.api; 8 9option go_package = "go.chromium.org/chromiumos/config/go/test/lab/api"; 10 11import "google/protobuf/timestamp.proto"; 12 13// Recognized hardware and software features of WiFi router peripherals in 14// our testbeds. 15// 16// This is not an exhaustive list of features supported by these test WiFi 17// routers. The intent is to only track features that may differ between the 18// different types of WiFi router devices in our labs. 19enum WifiRouterFeature { 20 // Features are not known. 21 WIFI_ROUTER_FEATURE_UNKNOWN = 0; 22 23 // Feature was parsed from device, but it did not match any known features. 24 WIFI_ROUTER_FEATURE_INVALID = 1; 25 26 // WiFi 1 (IEEE 802.11a) support. 27 WIFI_ROUTER_FEATURE_IEEE_802_11_A = 2; 28 29 // WiFi 2 (IEEE 802.11b) support. 30 WIFI_ROUTER_FEATURE_IEEE_802_11_B = 3; 31 32 // WiFi 3 (IEEE 802.11g) support. 33 WIFI_ROUTER_FEATURE_IEEE_802_11_G = 4; 34 35 // WiFi 4 (IEEE 802.11n) support. 36 WIFI_ROUTER_FEATURE_IEEE_802_11_N = 5; 37 38 // WiFi 5 (IEEE 802.11ac) support. 39 WIFI_ROUTER_FEATURE_IEEE_802_11_AC = 6; 40 41 // WiFi 6 (IEEE 802.11ax, 2.4GHz, 5GHz) support. 42 WIFI_ROUTER_FEATURE_IEEE_802_11_AX = 7; 43 44 // WiFi 6E (IEEE 802.11ax, 6GHz) support. 45 WIFI_ROUTER_FEATURE_IEEE_802_11_AX_E = 8; 46 47 // WiFi 7 (IEEE 802.11be) support. 48 WIFI_ROUTER_FEATURE_IEEE_802_11_BE = 9; 49 50 // The CPU is fast enough to support a double bridge over veth. 51 WIFI_ROUTER_FEATURE_DOUBLE_BRIDGE_OVER_VETH = 10; 52 53 // GCMP and GCMP-256 pairwise and group cipher support. 54 WIFI_ROUTER_FEATURE_GCMP = 11; 55 56 // SAE-EXT-KEY support for AKM-24/25. 57 WIFI_ROUTER_FEATURE_SAE_EXT_KEY = 12; 58} 59 60// The type of Wifi AP device a WiFi AP peripheral is, functionally speaking. 61enum WifiRouterDeviceType { 62 // Default. Type not yet determined. 63 WIFI_ROUTER_DEVICE_TYPE_UNKNOWN = 0; 64 65 // Attempted to identify device, but automatic identification failed. 66 WIFI_ROUTER_DEVICE_TYPE_INVALID = 1; 67 68 // Google Gale router with a customized ChromeOS image specifically for WiFi 69 // testing with Gales. 70 WIFI_ROUTER_DEVICE_TYPE_CHROMEOS_GALE = 2; 71 72 // WiFi router using an OpenWrt OS image that has been customized for 73 // ChromeOS testing. 74 WIFI_ROUTER_DEVICE_TYPE_OPENWRT = 3; 75 76 // Retail ASUS WiFi router with the ASUSWRT interface. 77 WIFI_ROUTER_DEVICE_TYPE_ASUSWRT = 4; 78 79 // Ubuntu-based device configured to be used as WiFi router (e.g. Intel NUC). 80 WIFI_ROUTER_DEVICE_TYPE_UBUNTU = 5; 81} 82 83// WifiRouterConfig is the format of the Wifi router config JSON file stored in 84// GCS that contains configuration information for all router device types. 85message WifiRouterConfig { 86 // OpenWrt device configs by their device names. 87 map<string, OpenWrtWifiRouterDeviceConfig> openwrt = 1; 88} 89 90// OpenWrtWifiRouterConfig defines which OpenWrt OS image should be used for a 91// given OpenWrt device and DUT ChromeOS release version. 92// 93// Each device has its own set of versions and a pool of DUTs that are always on 94// the next version to assist in its verification. 95message OpenWrtWifiRouterDeviceConfig { 96 // OpenWrtOSImage describes an available OpenWrt OS image. 97 message OpenWrtOSImage { 98 // The unique ID of the image. 99 string image_uuid = 1; 100 101 // The path to the image archive file, relative to the config file this 102 // data was parsed from. 103 string archive_path = 2; 104 105 // The minimum DUT CHROMEOS_RELEASE_VERSION this image should be used with. 106 string min_dut_release_version = 3; 107 } 108 109 // The image that should be used by default. 110 // 111 // If the testbed's DUT does not meet the version requirement of the image, 112 // the image with the highest minimum DUT version requirement that the DUT 113 // meets should be used instead. If the testbed's DUT does not meet any of the 114 // available images' version requirements, the image with the lowest version 115 // requirement should be used. 116 string current_image_uuid = 1; 117 118 // The image that should be used by routers in testbeds whose primary DUT is 119 // in the next_image_verification_dut_pool, irregardless of the image's DUT 120 // version requirement and overriding current_image_uuid for these routers. 121 string next_image_uuid = 2; 122 123 // Wifi routers that are in testbeds with these primary DUT hostnames should 124 // use the next_image_uuid instead of the current_image_uuid for image 125 // selection. 126 repeated string next_image_verification_dut_pool = 3; 127 128 // All available OpenWrt OS images for this build profile. 129 repeated OpenWrtOSImage images = 4; 130} 131 132// OpenWrtImageBuildInfo is the format of the build info JSON file included in 133// in all OpenWrt OS images built for ChromeOS test WiFi routers by the 134// cros_openwrt_image_builder tool. 135// 136// These fields identify the image and describe the deviations made from the 137// official OpenWrt image build profile so that it may be used for test WiFi 138// routers in ChromeOS testbeds. 139message CrosOpenWrtImageBuildInfo { 140 // Build information as returned by the OpenWrt image builder used by 141 // cros_openwrt_image_builder to package the image. 142 message StandardBuildConfig { 143 // The openwrt repository revision used to compile builder. 144 string openwrt_revision = 1; 145 146 // The builders' board build target. 147 string openwrt_build_target = 2; 148 149 // The name of the build profile used to build the image. 150 string build_profile = 3; 151 152 // Human-readable device name, as specified by OpenWrt. 153 // 154 // Expected to be unique by manufacturer, model, and version. 155 string device_name = 4; 156 157 // Default OpenWrt packages included for this build target. 158 repeated string build_target_packages = 5; 159 160 // Package customizations made by the build profile used to build the image. 161 repeated string profile_packages = 6; 162 163 // Devices supported by the build profile used to build the image. 164 repeated string supported_devices = 7; 165 } 166 167 // Useful information describing the image, as parsed from the os-release 168 // file included in the image. 169 message OSRelease { 170 string version = 1; 171 string build_id = 2; 172 string openwrt_board = 3; 173 string openwrt_arch = 4; 174 string openwrt_release = 5; 175 } 176 177 // Unique ID generated for this image. 178 string image_uuid = 1; 179 180 // The custom extra part of the final image name added to the image name 181 // created by the OpenWrt image builder. 182 string custom_image_name = 2; 183 184 OSRelease os_release = 3; 185 186 StandardBuildConfig standard_build_config = 4; 187 188 // The features that devices with this image can support for testing. 189 repeated WifiRouterFeature router_features = 5; 190 191 // The time the image was built. 192 google.protobuf.Timestamp build_time = 6; 193 194 // The version of cros_openwrt_image_builder used to build this image. 195 string cros_openwrt_image_builder_version = 7; 196 197 // Custom files included in the image. 198 // 199 // The key is the path of the file on the device when the image is installed 200 // and the value is a hash of the file contents. 201 map<string, string> custom_included_files = 8; 202 203 // Custom packages included in the image. 204 // 205 // The key is the name of the custom package IPK file and the value is a 206 // hash of the file contents. 207 map<string, string> custom_packages = 9; 208 209 // Names of the official OpenWrt packages included in the image that 210 // supplement the packages included in the official build profile. 211 repeated string extra_included_packages = 10; 212 213 // Names of the official OpenWrt packages that are excluded in the image 214 // that would otherwise be included in the official build profile. 215 repeated string excluded_packages = 11; 216 217 // Names of the services that are disabled by default upon image install. 218 repeated string disabled_services = 12; 219 220 // Names of networking interfaces that are not expected to be removed or 221 // changed by users. 222 repeated string reserved_interfaces = 13; 223} 224