120c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colitti/* 220c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colitti * Copyright (C) 2014 The Android Open Source Project 320c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colitti * 420c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colitti * Licensed under the Apache License, Version 2.0 (the "License"); 520c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colitti * you may not use this file except in compliance with the License. 620c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colitti * You may obtain a copy of the License at 720c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colitti * 820c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colitti * http://www.apache.org/licenses/LICENSE-2.0 920c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colitti * 1020c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colitti * Unless required by applicable law or agreed to in writing, software 1120c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colitti * distributed under the License is distributed on an "AS IS" BASIS, 1220c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colitti * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1320c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colitti * See the License for the specific language governing permissions and 1420c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colitti * limitations under the License. 1520c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colitti */ 1620c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colitti 1720c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colittipackage com.android.server.ethernet; 1820c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colitti 1920c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colittiimport android.net.IpConfiguration; 2020c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colittiimport android.net.IpConfiguration.IpAssignment; 2120c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colittiimport android.net.IpConfiguration.ProxySettings; 2220c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colittiimport android.os.Environment; 2320c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colittiimport android.util.Log; 2420c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colittiimport android.util.SparseArray; 2520c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colitti 2620c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colittiimport com.android.server.net.IpConfigStore; 2720c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colitti 2820c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colitti 2920c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colitti/** 3020c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colitti * This class provides an API to store and manage Ethernet network configuration. 3120c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colitti */ 3220c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colittipublic class EthernetConfigStore extends IpConfigStore { 3320c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colitti private static final String TAG = "EthernetConfigStore"; 3420c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colitti 3520c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colitti private static final String ipConfigFile = Environment.getDataDirectory() + 3620c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colitti "/misc/ethernet/ipconfig.txt"; 3720c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colitti 3820c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colitti public EthernetConfigStore() { 3920c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colitti } 4020c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colitti 4120c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colitti public IpConfiguration readIpAndProxyConfigurations() { 4220c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colitti SparseArray<IpConfiguration> networks = readIpAndProxyConfigurations(ipConfigFile); 4320c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colitti 4420c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colitti if (networks.size() == 0) { 4520c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colitti Log.w(TAG, "No Ethernet configuration found. Using default."); 4641a372f13a7d19807d91e09f2e955b8a61f02d5cLorenzo Colitti return new IpConfiguration(IpAssignment.DHCP, ProxySettings.NONE, null, null); 4720c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colitti } 4820c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colitti 4920c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colitti if (networks.size() > 1) { 5020c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colitti // Currently we only support a single Ethernet interface. 5120c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colitti Log.w(TAG, "Multiple Ethernet configurations detected. Only reading first one."); 5220c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colitti } 5320c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colitti 5420c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colitti return networks.valueAt(0); 5520c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colitti } 5620c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colitti 5720c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colitti public void writeIpAndProxyConfigurations(IpConfiguration config) { 5820c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colitti SparseArray<IpConfiguration> networks = new SparseArray<IpConfiguration>(); 5920c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colitti networks.put(0, config); 6020c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colitti writeIpAndProxyConfigurations(ipConfigFile, networks); 6120c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colitti } 6220c1c99c4351abd8bb3d6e8f966fcf3b6de0e5b0Lorenzo Colitti} 63