blob: 6b623f48ffef2cefdd2ae4db5b77b37aded0d176 [file] [log] [blame]
/*
* Copyright (C) 2014 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.
*/
package com.android.server.ethernet;
import android.annotation.Nullable;
import android.net.IpConfiguration;
import android.os.Environment;
import android.util.ArrayMap;
import com.android.server.net.IpConfigStore;
/**
* This class provides an API to store and manage Ethernet network configuration.
*/
public class EthernetConfigStore {
private static final String ipConfigFile = Environment.getDataDirectory() +
"/misc/ethernet/ipconfig.txt";
private IpConfigStore mStore = new IpConfigStore();
private ArrayMap<String, IpConfiguration> mIpConfigurations;
private IpConfiguration mIpConfigurationForDefaultInterface;
private final Object mSync = new Object();
public EthernetConfigStore() {
mIpConfigurations = new ArrayMap<>(0);
}
public void read() {
synchronized (mSync) {
ArrayMap<String, IpConfiguration> configs =
IpConfigStore.readIpConfigurations(ipConfigFile);
// This configuration may exist in old file versions when there was only a single active
// Ethernet interface.
if (configs.containsKey("0")) {
mIpConfigurationForDefaultInterface = configs.remove("0");
}
mIpConfigurations = configs;
}
}
public void write(String iface, IpConfiguration config) {
boolean modified;
synchronized (mSync) {
if (config == null) {
modified = mIpConfigurations.remove(iface) != null;
} else {
IpConfiguration oldConfig = mIpConfigurations.put(iface, config);
modified = !config.equals(oldConfig);
}
if (modified) {
mStore.writeIpConfigurations(ipConfigFile, mIpConfigurations);
}
}
}
public ArrayMap<String, IpConfiguration> getIpConfigurations() {
synchronized (mSync) {
return new ArrayMap<>(mIpConfigurations);
}
}
@Nullable
public IpConfiguration getIpConfigurationForDefaultInterface() {
synchronized (mSync) {
return mIpConfigurationForDefaultInterface == null
? null : new IpConfiguration(mIpConfigurationForDefaultInterface);
}
}
}