[nmh][network-manager] Create factory config target.
This allows having product dependent factory configuration.
Change-Id: Ieb4d9fae7d146eb930bcb2bc867a1517f6293cfb
diff --git a/products/router.gni b/products/router.gni
index dc54b70..4cc800e 100644
--- a/products/router.gni
+++ b/products/router.gni
@@ -37,6 +37,7 @@
"//garnet/packages/tools:boringssl",
"//src/connectivity/management/network_manager",
"//src/connectivity/management/network_manager:network_manager_sysmgr_config",
+ "//src/connectivity/management/network_manager:router_config",
"//src/connectivity/management/network_manager_cli",
"//src/connectivity/network/dhcp:dhcpd",
"//src/connectivity/network/mdns/bundles:utils",
diff --git a/src/connectivity/management/network_manager/BUILD.gn b/src/connectivity/management/network_manager/BUILD.gn
index d9c0d36..dbd113c 100644
--- a/src/connectivity/management/network_manager/BUILD.gn
+++ b/src/connectivity/management/network_manager/BUILD.gn
@@ -58,21 +58,26 @@
},
]
- # TODO(cgibson): Need to figure out an appropriate delivery mechanism
- # for configuration file data. Since we are only running on Toulouse, we
- # can do this for now.
resources = [
{
- path = rebase_path("data/toulouse.json")
- dest = "factory_config.json"
- },
- {
path = rebase_path("data/device_schema.json")
dest = "device_schema.json"
},
]
}
+config_data("network_manager_config") {
+ for_pkg = "network_manager"
+ sources = [ rebase_path("config/network_manager_default.json") ]
+ outputs = [ "factory_config.json" ]
+}
+
+config_data("router_config") {
+ for_pkg = "network_manager"
+ sources = [ rebase_path("config/toulouse.json") ]
+ outputs = [ "factory_config.json" ]
+}
+
test_package("network_manager_tests") {
deps = [
":bin_test",
@@ -108,9 +113,13 @@
dest = "device_schema.json"
},
{
- path = rebase_path("data/toulouse.json")
+ path = rebase_path("config/toulouse.json")
dest = "toulouse_factory_config.json"
},
+ {
+ path = rebase_path("config/network_manager_default.json")
+ dest = "default_factory_config.json"
+ },
]
}
diff --git a/src/connectivity/management/network_manager/config/network_manager_default.json b/src/connectivity/management/network_manager/config/network_manager_default.json
new file mode 100644
index 0000000..6aa6c17
--- /dev/null
+++ b/src/connectivity/management/network_manager/config/network_manager_default.json
@@ -0,0 +1,156 @@
+{
+ "device": {
+ "interfaces": [
+ {
+ "interface": {
+ "config": {
+ "name": "wlan",
+ "type": "IF_UPLINK"
+ },
+ "device_id": "wlanif-client",
+ "oper_state": "UP",
+ "subinterfaces": [
+ {
+ "admin_state": "UP",
+ "ipv4": {
+ "addresses": [
+ {
+ "dhcp_client": true
+ }
+ ]
+ }
+ }
+ ],
+ "ethernet": {
+ "config": {
+ "auto_negotiate": true,
+ "duplex_mode": "FULL",
+ "enable_flow_control": true,
+ "port_speed": "SPEED_1G"
+ }
+ }
+ }
+ },
+ {
+ "interface": {
+ "config": {
+ "name": "usb",
+ "type": "IF_UPLINK"
+ },
+ "device_id": "cdc-eth-function",
+ "oper_state": "UP",
+ "subinterfaces": [
+ {
+ "admin_state": "UP",
+ "ipv4": {
+ "addresses": [
+ {
+ "dhcp_client": true
+ }
+ ]
+ }
+ }
+ ],
+ "ethernet": {
+ "config": {
+ "auto_negotiate": true,
+ "duplex_mode": "FULL",
+ "enable_flow_control": true,
+ "port_speed": "SPEED_1G"
+ }
+ }
+ }
+ },
+ {
+ "interface": {
+ "config": {
+ "name": "usb1",
+ "type": "IF_UPLINK"
+ },
+ "device_id": "usb-cdc-ecm",
+ "oper_state": "UP",
+ "subinterfaces": [
+ {
+ "admin_state": "UP",
+ "ipv4": {
+ "addresses": [
+ {
+ "dhcp_client": true
+ }
+ ]
+ }
+ }
+ ],
+ "ethernet": {
+ "config": {
+ "auto_negotiate": true,
+ "duplex_mode": "FULL",
+ "enable_flow_control": true,
+ "port_speed": "SPEED_1G"
+ }
+ }
+ }
+ },
+ {
+ "interface": {
+ "config": {
+ "name": "usb2",
+ "type": "IF_UPLINK"
+ },
+ "device_id": "ax88179",
+ "oper_state": "UP",
+ "subinterfaces": [
+ {
+ "admin_state": "UP",
+ "ipv4": {
+ "addresses": [
+ {
+ "dhcp_client": true
+ }
+ ]
+ }
+ }
+ ],
+ "ethernet": {
+ "config": {
+ "auto_negotiate": true,
+ "duplex_mode": "FULL",
+ "enable_flow_control": true,
+ "port_speed": "SPEED_1G"
+ }
+ }
+ }
+ },
+ {
+ "interface": {
+ "config": {
+ "name": "lo0",
+ "type": "IF_LOOPBACK"
+ },
+ "oper_state": "UP",
+ "subinterfaces": [
+ {
+ "admin_state": "UP",
+ "ipv4": {
+ "addresses": [
+ {
+ "ip": "127.0.0.1",
+ "prefix_length": 8
+ }
+ ]
+ },
+ "ipv6": {
+ "addresses": [
+ {
+ "ip": "::1",
+ "prefix_length": 128
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+}
diff --git a/src/connectivity/management/network_manager/data/toulouse.json b/src/connectivity/management/network_manager/config/toulouse.json
similarity index 100%
rename from src/connectivity/management/network_manager/data/toulouse.json
rename to src/connectivity/management/network_manager/config/toulouse.json
diff --git a/src/connectivity/management/network_manager/core/src/config.rs b/src/connectivity/management/network_manager/core/src/config.rs
index 2040ac8..d10e88c 100644
--- a/src/connectivity/management/network_manager/core/src/config.rs
+++ b/src/connectivity/management/network_manager/core/src/config.rs
@@ -1283,6 +1283,16 @@
}
#[test]
+ fn verify_default_factory_config() {
+ let config_path = "/pkg/data/default_factory_config.json";
+ let mut contents = String::new();
+ let mut f = File::open(config_path).unwrap();
+ f.read_to_string(&mut contents).unwrap();
+ let _deserialized_config: DeviceConfig = serde_json::from_str(&contents)
+ .expect(format!("Failed to deserialized {}", config_path).as_ref());
+ }
+
+ #[test]
fn test_validate_interface_types() {
let test_config = create_test_config_no_paths();
let mut intf = create_test_interface();
diff --git a/src/connectivity/management/network_manager/core/src/lib.rs b/src/connectivity/management/network_manager/core/src/lib.rs
index 64b194f..7f680bc 100644
--- a/src/connectivity/management/network_manager/core/src/lib.rs
+++ b/src/connectivity/management/network_manager/core/src/lib.rs
@@ -128,7 +128,7 @@
},
config: config::Config::new(
"/data/user_config.json",
- "/pkg/data/factory_config.json",
+ "/config/data/factory_config.json",
"/pkg/data/device_schema.json",
),
}
diff --git a/src/connectivity/management/network_manager/meta/network_manager.cmx b/src/connectivity/management/network_manager/meta/network_manager.cmx
index a51f68d..2565cc9 100644
--- a/src/connectivity/management/network_manager/meta/network_manager.cmx
+++ b/src/connectivity/management/network_manager/meta/network_manager.cmx
@@ -7,6 +7,7 @@
"class/ethernet"
],
"features": [
+ "config-data",
"isolated-persistent-storage"
],
"services": [