diff options
author | Lorenzo Colitti <lorenzo@google.com> | 2015-06-02 17:46:24 +0900 |
---|---|---|
committer | Lorenzo Colitti <lorenzo@google.com> | 2015-06-04 14:57:11 +0900 |
commit | f68edb16116307553059a889ef456227a9697918 (patch) | |
tree | e0d0af861c9465e8e66b437355a0dad08ebc129b /services/net | |
parent | 3a40b0deabe95b74d7eb3d4afbef09c34012a660 (diff) | |
download | frameworks_base-f68edb16116307553059a889ef456227a9697918.zip frameworks_base-f68edb16116307553059a889ef456227a9697918.tar.gz frameworks_base-f68edb16116307553059a889ef456227a9697918.tar.bz2 |
Actually fall back from yiaddr to ciaddr.
The initial implementation of toDhcpResults attempted to get the
leased IP address from ciaddr if yiaddr was 0.0.0.0, but it never
actually did so because a) it used == instead of equals(), and b)
the parsing code never populated mClientIp for a DhcpOfferPacket
or DhcpAckPacket.
Fix this and add a test for it.. Technically DHCP does not use
ciaddr (only bootp uses it), but in 5.0 we would use ciaddr if
yiaddr was 0.0.0.0 and a bit more compatibility shouldn't hurt.
Bug: 19704592
Change-Id: I1f58555f0c10b9c576995a6edb759a83d8938ea0
Diffstat (limited to 'services/net')
-rw-r--r-- | services/net/java/android/net/dhcp/DhcpAckPacket.java | 4 | ||||
-rw-r--r-- | services/net/java/android/net/dhcp/DhcpOfferPacket.java | 4 | ||||
-rw-r--r-- | services/net/java/android/net/dhcp/DhcpPacket.java | 12 |
3 files changed, 10 insertions, 10 deletions
diff --git a/services/net/java/android/net/dhcp/DhcpAckPacket.java b/services/net/java/android/net/dhcp/DhcpAckPacket.java index c0e1d19..334f708 100644 --- a/services/net/java/android/net/dhcp/DhcpAckPacket.java +++ b/services/net/java/android/net/dhcp/DhcpAckPacket.java @@ -30,8 +30,8 @@ class DhcpAckPacket extends DhcpPacket { private final Inet4Address mSrcIp; DhcpAckPacket(int transId, short secs, boolean broadcast, Inet4Address serverAddress, - Inet4Address clientIp, byte[] clientMac) { - super(transId, secs, INADDR_ANY, clientIp, serverAddress, INADDR_ANY, clientMac, broadcast); + Inet4Address clientIp, Inet4Address yourIp, byte[] clientMac) { + super(transId, secs, clientIp, yourIp, serverAddress, INADDR_ANY, clientMac, broadcast); mBroadcast = broadcast; mSrcIp = serverAddress; } diff --git a/services/net/java/android/net/dhcp/DhcpOfferPacket.java b/services/net/java/android/net/dhcp/DhcpOfferPacket.java index af41708..7ca7100 100644 --- a/services/net/java/android/net/dhcp/DhcpOfferPacket.java +++ b/services/net/java/android/net/dhcp/DhcpOfferPacket.java @@ -32,8 +32,8 @@ class DhcpOfferPacket extends DhcpPacket { * Generates a OFFER packet with the specified parameters. */ DhcpOfferPacket(int transId, short secs, boolean broadcast, Inet4Address serverAddress, - Inet4Address clientIp, byte[] clientMac) { - super(transId, secs, INADDR_ANY, clientIp, INADDR_ANY, INADDR_ANY, clientMac, broadcast); + Inet4Address clientIp, Inet4Address yourIp, byte[] clientMac) { + super(transId, secs, clientIp, yourIp, INADDR_ANY, INADDR_ANY, clientMac, broadcast); mSrcIp = serverAddress; } diff --git a/services/net/java/android/net/dhcp/DhcpPacket.java b/services/net/java/android/net/dhcp/DhcpPacket.java index 2a25d30..d42404b 100644 --- a/services/net/java/android/net/dhcp/DhcpPacket.java +++ b/services/net/java/android/net/dhcp/DhcpPacket.java @@ -919,7 +919,7 @@ abstract class DhcpPacket { break; case DHCP_MESSAGE_TYPE_OFFER: newPacket = new DhcpOfferPacket( - transactionId, secs, broadcast, ipSrc, yourIp, clientMac); + transactionId, secs, broadcast, ipSrc, clientIp, yourIp, clientMac); break; case DHCP_MESSAGE_TYPE_REQUEST: newPacket = new DhcpRequestPacket( @@ -932,7 +932,7 @@ abstract class DhcpPacket { break; case DHCP_MESSAGE_TYPE_ACK: newPacket = new DhcpAckPacket( - transactionId, secs, broadcast, ipSrc, yourIp, clientMac); + transactionId, secs, broadcast, ipSrc, clientIp, yourIp, clientMac); break; case DHCP_MESSAGE_TYPE_NAK: newPacket = new DhcpNakPacket( @@ -982,9 +982,9 @@ abstract class DhcpPacket { */ public DhcpResults toDhcpResults() { Inet4Address ipAddress = mYourIp; - if (ipAddress == Inet4Address.ANY) { + if (ipAddress.equals(Inet4Address.ANY)) { ipAddress = mClientIp; - if (ipAddress == Inet4Address.ANY) { + if (ipAddress.equals(Inet4Address.ANY)) { return null; } } @@ -1052,7 +1052,7 @@ abstract class DhcpPacket { Inet4Address gateway, List<Inet4Address> dnsServers, Inet4Address dhcpServerIdentifier, String domainName) { DhcpPacket pkt = new DhcpOfferPacket( - transactionId, (short) 0, broadcast, serverIpAddr, clientIpAddr, mac); + transactionId, (short) 0, broadcast, serverIpAddr, INADDR_ANY, clientIpAddr, mac); pkt.mGateway = gateway; pkt.mDnsServers = dnsServers; pkt.mLeaseTime = timeout; @@ -1072,7 +1072,7 @@ abstract class DhcpPacket { Inet4Address gateway, List<Inet4Address> dnsServers, Inet4Address dhcpServerIdentifier, String domainName) { DhcpPacket pkt = new DhcpAckPacket( - transactionId, (short) 0, broadcast, serverIpAddr, clientIpAddr, mac); + transactionId, (short) 0, broadcast, serverIpAddr, INADDR_ANY, clientIpAddr, mac); pkt.mGateway = gateway; pkt.mDnsServers = dnsServers; pkt.mLeaseTime = timeout; |