10825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/* 20825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Copyright (C) 2009 Qualcomm Innovation Center, Inc. All Rights Reserved. 30825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Copyright (C) 2009 The Android Open Source Project 40825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 50825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Licensed under the Apache License, Version 2.0 (the "License"); 60825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * you may not use this file except in compliance with the License. 70825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * You may obtain a copy of the License at 80825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 90825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * http://www.apache.org/licenses/LICENSE-2.0 100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Unless required by applicable law or agreed to in writing, software 120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * distributed under the License is distributed on an "AS IS" BASIS, 130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * See the License for the specific language governing permissions and 150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * limitations under the License. 160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Savillepackage com.android.internal.telephony.dataconnection; 190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 200825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.net.LinkAddress; 210825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.net.LinkProperties; 220825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.net.NetworkUtils; 230825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.net.RouteInfo; 240825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.SystemProperties; 2599c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Savilleimport android.telephony.Rlog; 260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 27e9701717e43cc5aacbcf624f77a53be92350662cwimport com.android.internal.telephony.PhoneConstants; 28ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Savilleimport com.android.internal.telephony.dataconnection.DcFailCause; 290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 300825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.net.Inet4Address; 310825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.net.InetAddress; 320825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.net.UnknownHostException; 330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/** 350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * This is RIL_Data_Call_Response_v5 from ril.h 360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 37ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Savillepublic class DataCallResponse { 380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private final boolean DBG = true; 39ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville private final String LOG_TAG = "DataCallResponse"; 400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public int version = 0; 420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public int status = 0; 430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public int cid = 0; 440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public int active = 0; 450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String type = ""; 460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String ifname = ""; 470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String [] addresses = new String[0]; 480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String [] dnses = new String[0]; 490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String[] gateways = new String[0]; 500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public int suggestedRetryTime = -1; 51a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville public String [] pcscf = new String[0]; 52e9701717e43cc5aacbcf624f77a53be92350662cw public int mtu = PhoneConstants.UNSET_MTU; 530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Class returned by onSetupConnectionCompleted. 560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public enum SetupResult { 580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SUCCESS, 590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ERR_BadCommand, 600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ERR_UnacceptableParameter, 610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ERR_GetLastErrorFromRil, 620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ERR_Stale, 630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ERR_RilError; 640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 65ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville public DcFailCause mFailCause; 660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SetupResult() { 68ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville mFailCause = DcFailCause.fromInt(0); 690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String toString() { 730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return name() + " SetupResult.mFailCause=" + mFailCause; 740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String toString() { 790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville StringBuffer sb = new StringBuffer(); 80ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville sb.append("DataCallResponse: {") 810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville .append("version=").append(version) 820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville .append(" status=").append(status) 830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville .append(" retry=").append(suggestedRetryTime) 840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville .append(" cid=").append(cid) 850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville .append(" active=").append(active) 860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville .append(" type=").append(type) 87e9701717e43cc5aacbcf624f77a53be92350662cw .append(" ifname=").append(ifname) 88e9701717e43cc5aacbcf624f77a53be92350662cw .append(" mtu=").append(mtu) 89e9701717e43cc5aacbcf624f77a53be92350662cw .append(" addresses=["); 900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville for (String addr : addresses) { 910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville sb.append(addr); 920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville sb.append(","); 930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (addresses.length > 0) sb.deleteCharAt(sb.length()-1); 950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville sb.append("] dnses=["); 960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville for (String addr : dnses) { 970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville sb.append(addr); 980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville sb.append(","); 990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (dnses.length > 0) sb.deleteCharAt(sb.length()-1); 1010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville sb.append("] gateways=["); 1020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville for (String addr : gateways) { 1030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville sb.append(addr); 1040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville sb.append(","); 1050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (gateways.length > 0) sb.deleteCharAt(sb.length()-1); 107a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville sb.append("] pcscf=["); 108a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville for (String addr : pcscf) { 109a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville sb.append(addr); 110a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville sb.append(","); 111a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 112a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville if (pcscf.length > 0) sb.deleteCharAt(sb.length()-1); 1130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville sb.append("]}"); 1140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return sb.toString(); 1150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public SetupResult setLinkProperties(LinkProperties linkProperties, 1180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville boolean okToUseSystemPropertyDns) { 1190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SetupResult result; 1200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Start with clean network properties and if we have 1220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // a failure we'll clear again at the bottom of this code. 1230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (linkProperties == null) 1240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville linkProperties = new LinkProperties(); 1250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville else 1260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville linkProperties.clear(); 1270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 128ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville if (status == DcFailCause.NONE.getErrorCode()) { 1290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String propertyPrefix = "net." + ifname + "."; 1300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville try { 1320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // set interface name 1330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville linkProperties.setInterfaceName(ifname); 1340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // set link addresses 1360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (addresses != null && addresses.length > 0) { 1370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville for (String addr : addresses) { 1380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville addr = addr.trim(); 1390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (addr.isEmpty()) continue; 1400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville LinkAddress la; 1410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville int addrPrefixLen; 1420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String [] ap = addr.split("/"); 1440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (ap.length == 2) { 1450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville addr = ap[0]; 1460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville addrPrefixLen = Integer.parseInt(ap[1]); 1470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else { 1480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville addrPrefixLen = 0; 1490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville InetAddress ia; 1510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville try { 1520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ia = NetworkUtils.numericToInetAddress(addr); 1530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } catch (IllegalArgumentException e) { 1540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville throw new UnknownHostException("Non-numeric ip addr=" + addr); 1550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (! ia.isAnyLocalAddress()) { 1570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (addrPrefixLen == 0) { 1580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Assume point to point 1590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville addrPrefixLen = (ia instanceof Inet4Address) ? 32 : 128; 1600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 16199c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville if (DBG) Rlog.d(LOG_TAG, "addr/pl=" + addr + "/" + addrPrefixLen); 1624698f5cc8dcf0f31a03c64f90e5faa1b4ffed5fcJack Yu try { 1634698f5cc8dcf0f31a03c64f90e5faa1b4ffed5fcJack Yu la = new LinkAddress(ia, addrPrefixLen); 1644698f5cc8dcf0f31a03c64f90e5faa1b4ffed5fcJack Yu } catch (IllegalArgumentException e) { 1654698f5cc8dcf0f31a03c64f90e5faa1b4ffed5fcJack Yu throw new UnknownHostException("Bad parameter for LinkAddress, ia=" 1664698f5cc8dcf0f31a03c64f90e5faa1b4ffed5fcJack Yu + ia.getHostAddress() + "/" + addrPrefixLen); 1674698f5cc8dcf0f31a03c64f90e5faa1b4ffed5fcJack Yu } 1684698f5cc8dcf0f31a03c64f90e5faa1b4ffed5fcJack Yu 1690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville linkProperties.addLinkAddress(la); 1700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else { 1730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville throw new UnknownHostException("no address for ifname=" + ifname); 1740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // set dns servers 1770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (dnses != null && dnses.length > 0) { 1780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville for (String addr : dnses) { 1790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville addr = addr.trim(); 1800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (addr.isEmpty()) continue; 1810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville InetAddress ia; 1820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville try { 1830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ia = NetworkUtils.numericToInetAddress(addr); 1840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } catch (IllegalArgumentException e) { 1850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville throw new UnknownHostException("Non-numeric dns addr=" + addr); 1860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (! ia.isAnyLocalAddress()) { 188d68ea30947e9b6cd0d7aa8da23d2373a03310e2bRobert Greenwalt linkProperties.addDnsServer(ia); 1890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else if (okToUseSystemPropertyDns){ 1920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String dnsServers[] = new String[2]; 1930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville dnsServers[0] = SystemProperties.get(propertyPrefix + "dns1"); 1940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville dnsServers[1] = SystemProperties.get(propertyPrefix + "dns2"); 1950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville for (String dnsAddr : dnsServers) { 1960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville dnsAddr = dnsAddr.trim(); 1970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (dnsAddr.isEmpty()) continue; 1980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville InetAddress ia; 1990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville try { 2000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ia = NetworkUtils.numericToInetAddress(dnsAddr); 2010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } catch (IllegalArgumentException e) { 2020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville throw new UnknownHostException("Non-numeric dns addr=" + dnsAddr); 2030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (! ia.isAnyLocalAddress()) { 205d68ea30947e9b6cd0d7aa8da23d2373a03310e2bRobert Greenwalt linkProperties.addDnsServer(ia); 2060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else { 2090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville throw new UnknownHostException("Empty dns response and no system default dns"); 2100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // set gateways 2130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if ((gateways == null) || (gateways.length == 0)) { 2140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String sysGateways = SystemProperties.get(propertyPrefix + "gw"); 2150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (sysGateways != null) { 2160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville gateways = sysGateways.split(" "); 2170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else { 2180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville gateways = new String[0]; 2190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville for (String addr : gateways) { 2220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville addr = addr.trim(); 2230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (addr.isEmpty()) continue; 2240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville InetAddress ia; 2250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville try { 2260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ia = NetworkUtils.numericToInetAddress(addr); 2270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } catch (IllegalArgumentException e) { 2280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville throw new UnknownHostException("Non-numeric gateway addr=" + addr); 2290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 230ebc8af719102a64a2ae17cc2a836e23e2dbc3838Lorenzo Colitti // Allow 0.0.0.0 or :: as a gateway; this indicates a point-to-point interface. 231ebc8af719102a64a2ae17cc2a836e23e2dbc3838Lorenzo Colitti linkProperties.addRoute(new RouteInfo(ia)); 2320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 234e9701717e43cc5aacbcf624f77a53be92350662cw // set interface MTU 235e9701717e43cc5aacbcf624f77a53be92350662cw // this may clobber the setting read from the APN db, but that's ok 236e9701717e43cc5aacbcf624f77a53be92350662cw linkProperties.setMtu(mtu); 237e9701717e43cc5aacbcf624f77a53be92350662cw 2380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville result = SetupResult.SUCCESS; 2390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } catch (UnknownHostException e) { 24099c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville Rlog.d(LOG_TAG, "setLinkProperties: UnknownHostException " + e); 2410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville e.printStackTrace(); 2420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville result = SetupResult.ERR_UnacceptableParameter; 2430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else { 2450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (version < 4) { 2460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville result = SetupResult.ERR_GetLastErrorFromRil; 2470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else { 2480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville result = SetupResult.ERR_RilError; 2490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // An error occurred so clear properties 2530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (result != SetupResult.SUCCESS) { 2540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if(DBG) { 25599c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville Rlog.d(LOG_TAG, "setLinkProperties: error clearing LinkProperties " + 2560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville "status=" + status + " result=" + result); 2570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville linkProperties.clear(); 2590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return result; 2620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville} 264