Loading src/android/net/dhcp/DhcpAckPacket.java +6 −2 Original line number Original line Diff line number Diff line Loading @@ -30,10 +30,12 @@ public class DhcpAckPacket extends DhcpPacket { private final Inet4Address mSrcIp; private final Inet4Address mSrcIp; DhcpAckPacket(int transId, short secs, boolean broadcast, Inet4Address serverAddress, DhcpAckPacket(int transId, short secs, boolean broadcast, Inet4Address serverAddress, Inet4Address relayIp, Inet4Address clientIp, Inet4Address yourIp, byte[] clientMac) { Inet4Address relayIp, Inet4Address clientIp, Inet4Address yourIp, byte[] clientMac, boolean rapidCommit) { super(transId, secs, clientIp, yourIp, serverAddress, relayIp, clientMac, broadcast); super(transId, secs, clientIp, yourIp, serverAddress, relayIp, clientMac, broadcast); mBroadcast = broadcast; mBroadcast = broadcast; mSrcIp = serverAddress; mSrcIp = serverAddress; mRapidCommit = rapidCommit; } } public String toString() { public String toString() { Loading Loading @@ -70,8 +72,10 @@ public class DhcpAckPacket extends DhcpPacket { void finishPacket(ByteBuffer buffer) { void finishPacket(ByteBuffer buffer) { addTlv(buffer, DHCP_MESSAGE_TYPE, DHCP_MESSAGE_TYPE_ACK); addTlv(buffer, DHCP_MESSAGE_TYPE, DHCP_MESSAGE_TYPE_ACK); addTlv(buffer, DHCP_SERVER_IDENTIFIER, mServerIdentifier); addTlv(buffer, DHCP_SERVER_IDENTIFIER, mServerIdentifier); addCommonServerTlvs(buffer); addCommonServerTlvs(buffer); if (mRapidCommit) { addTlv(buffer, DHCP_RAPID_COMMIT); } addTlvEnd(buffer); addTlvEnd(buffer); } } Loading src/android/net/dhcp/DhcpClient.java +2 −1 Original line number Original line Diff line number Diff line Loading @@ -1171,7 +1171,8 @@ public class DhcpClient extends StateMachine { final DhcpResults results = packet.toDhcpResults(); final DhcpResults results = packet.toDhcpResults(); if (results != null) { if (results != null) { confirmDhcpLease(packet, results); confirmDhcpLease(packet, results); transitionTo(mConfiguringInterfaceState); transitionTo(isDhcpIpConflictDetectEnabled() ? mIpAddressConflictDetectingState : mConfiguringInterfaceState); } } } } } } Loading src/android/net/dhcp/DhcpDiscoverPacket.java +2 −1 Original line number Original line Diff line number Diff line Loading @@ -32,9 +32,10 @@ public class DhcpDiscoverPacket extends DhcpPacket { * Generates a DISCOVER packet with the specified parameters. * Generates a DISCOVER packet with the specified parameters. */ */ DhcpDiscoverPacket(int transId, short secs, Inet4Address relayIp, byte[] clientMac, DhcpDiscoverPacket(int transId, short secs, Inet4Address relayIp, byte[] clientMac, boolean broadcast, Inet4Address srcIp) { boolean broadcast, Inet4Address srcIp, boolean rapidCommit) { super(transId, secs, INADDR_ANY, INADDR_ANY, INADDR_ANY, relayIp, clientMac, broadcast); super(transId, secs, INADDR_ANY, INADDR_ANY, INADDR_ANY, relayIp, clientMac, broadcast); mSrcIp = srcIp; mSrcIp = srcIp; mRapidCommit = rapidCommit; } } public String toString() { public String toString() { Loading src/android/net/dhcp/DhcpLeaseRepository.java +19 −0 Original line number Original line Diff line number Diff line Loading @@ -190,6 +190,25 @@ class DhcpLeaseRepository { return newLease; return newLease; } } /** * Get a rapid committed DHCP Lease, to reply to a DHCPDISCOVER w/ Rapid Commit option. * * @param clientId Client identifier option if specified, or {@link #CLIENTID_UNSPEC} * @param relayAddr Internet address of the relay (giaddr), can be {@link Inet4Address#ANY} * @param hostname Client-provided hostname, or {@link DhcpLease#HOSTNAME_NONE} * @throws OutOfAddressesException The server does not have any available address * @throws InvalidSubnetException The lease was requested from an unsupported subnet */ @NonNull public DhcpLease getCommittedLease(@Nullable byte[] clientId, @NonNull MacAddress hwAddr, @NonNull Inet4Address relayAddr, @Nullable String hostname) throws OutOfAddressesException, InvalidSubnetException { final DhcpLease newLease = getOffer(clientId, hwAddr, relayAddr, null /* reqAddr */, hostname); commitLease(newLease); return newLease; } private void checkValidRelayAddr(@Nullable Inet4Address relayAddr) private void checkValidRelayAddr(@Nullable Inet4Address relayAddr) throws InvalidSubnetException { throws InvalidSubnetException { // As per #4.3.1, addresses are assigned based on the relay address if present. This // As per #4.3.1, addresses are assigned based on the relay address if present. This Loading src/android/net/dhcp/DhcpPacket.java +6 −7 Original line number Original line Diff line number Diff line Loading @@ -1179,7 +1179,7 @@ public abstract class DhcpPacket { "No DHCP message type option"); "No DHCP message type option"); case DHCP_MESSAGE_TYPE_DISCOVER: case DHCP_MESSAGE_TYPE_DISCOVER: newPacket = new DhcpDiscoverPacket(transactionId, secs, relayIp, clientMac, newPacket = new DhcpDiscoverPacket(transactionId, secs, relayIp, clientMac, broadcast, ipSrc); broadcast, ipSrc, rapidCommit); break; break; case DHCP_MESSAGE_TYPE_OFFER: case DHCP_MESSAGE_TYPE_OFFER: newPacket = new DhcpOfferPacket( newPacket = new DhcpOfferPacket( Loading @@ -1196,7 +1196,8 @@ public abstract class DhcpPacket { break; break; case DHCP_MESSAGE_TYPE_ACK: case DHCP_MESSAGE_TYPE_ACK: newPacket = new DhcpAckPacket( newPacket = new DhcpAckPacket( transactionId, secs, broadcast, ipSrc, relayIp, clientIp, yourIp, clientMac); transactionId, secs, broadcast, ipSrc, relayIp, clientIp, yourIp, clientMac, rapidCommit); break; break; case DHCP_MESSAGE_TYPE_NAK: case DHCP_MESSAGE_TYPE_NAK: newPacket = new DhcpNakPacket( newPacket = new DhcpNakPacket( Loading Loading @@ -1238,7 +1239,6 @@ public abstract class DhcpPacket { newPacket.mT2 = T2; newPacket.mT2 = T2; newPacket.mVendorId = vendorId; newPacket.mVendorId = vendorId; newPacket.mVendorInfo = vendorInfo; newPacket.mVendorInfo = vendorInfo; newPacket.mRapidCommit = rapidCommit; if ((optionOverload & OPTION_OVERLOAD_SNAME) == 0) { if ((optionOverload & OPTION_OVERLOAD_SNAME) == 0) { newPacket.mServerHostName = serverHostName; newPacket.mServerHostName = serverHostName; } else { } else { Loading Loading @@ -1330,9 +1330,8 @@ public abstract class DhcpPacket { short secs, byte[] clientMac, boolean broadcast, byte[] expectedParams, short secs, byte[] clientMac, boolean broadcast, byte[] expectedParams, boolean rapidCommit) { boolean rapidCommit) { DhcpPacket pkt = new DhcpDiscoverPacket(transactionId, secs, INADDR_ANY /* relayIp */, DhcpPacket pkt = new DhcpDiscoverPacket(transactionId, secs, INADDR_ANY /* relayIp */, clientMac, broadcast, INADDR_ANY /* srcIp */); clientMac, broadcast, INADDR_ANY /* srcIp */, rapidCommit); pkt.mRequestedParams = expectedParams; pkt.mRequestedParams = expectedParams; pkt.mRapidCommit = rapidCommit; return pkt.buildPacket(encap, DHCP_SERVER, DHCP_CLIENT); return pkt.buildPacket(encap, DHCP_SERVER, DHCP_CLIENT); } } Loading Loading @@ -1372,10 +1371,10 @@ public abstract class DhcpPacket { Inet4Address requestClientIp, byte[] mac, Integer timeout, Inet4Address netMask, Inet4Address requestClientIp, byte[] mac, Integer timeout, Inet4Address netMask, Inet4Address bcAddr, List<Inet4Address> gateways, List<Inet4Address> dnsServers, Inet4Address bcAddr, List<Inet4Address> gateways, List<Inet4Address> dnsServers, Inet4Address dhcpServerIdentifier, String domainName, String hostname, boolean metered, Inet4Address dhcpServerIdentifier, String domainName, String hostname, boolean metered, short mtu) { short mtu, boolean rapidCommit) { DhcpPacket pkt = new DhcpAckPacket( DhcpPacket pkt = new DhcpAckPacket( transactionId, (short) 0, broadcast, serverIpAddr, relayIp, requestClientIp, yourIp, transactionId, (short) 0, broadcast, serverIpAddr, relayIp, requestClientIp, yourIp, mac); mac, rapidCommit); pkt.mGateways = gateways; pkt.mGateways = gateways; pkt.mDnsServers = dnsServers; pkt.mDnsServers = dnsServers; pkt.mLeaseTime = timeout; pkt.mLeaseTime = timeout; Loading Loading
src/android/net/dhcp/DhcpAckPacket.java +6 −2 Original line number Original line Diff line number Diff line Loading @@ -30,10 +30,12 @@ public class DhcpAckPacket extends DhcpPacket { private final Inet4Address mSrcIp; private final Inet4Address mSrcIp; DhcpAckPacket(int transId, short secs, boolean broadcast, Inet4Address serverAddress, DhcpAckPacket(int transId, short secs, boolean broadcast, Inet4Address serverAddress, Inet4Address relayIp, Inet4Address clientIp, Inet4Address yourIp, byte[] clientMac) { Inet4Address relayIp, Inet4Address clientIp, Inet4Address yourIp, byte[] clientMac, boolean rapidCommit) { super(transId, secs, clientIp, yourIp, serverAddress, relayIp, clientMac, broadcast); super(transId, secs, clientIp, yourIp, serverAddress, relayIp, clientMac, broadcast); mBroadcast = broadcast; mBroadcast = broadcast; mSrcIp = serverAddress; mSrcIp = serverAddress; mRapidCommit = rapidCommit; } } public String toString() { public String toString() { Loading Loading @@ -70,8 +72,10 @@ public class DhcpAckPacket extends DhcpPacket { void finishPacket(ByteBuffer buffer) { void finishPacket(ByteBuffer buffer) { addTlv(buffer, DHCP_MESSAGE_TYPE, DHCP_MESSAGE_TYPE_ACK); addTlv(buffer, DHCP_MESSAGE_TYPE, DHCP_MESSAGE_TYPE_ACK); addTlv(buffer, DHCP_SERVER_IDENTIFIER, mServerIdentifier); addTlv(buffer, DHCP_SERVER_IDENTIFIER, mServerIdentifier); addCommonServerTlvs(buffer); addCommonServerTlvs(buffer); if (mRapidCommit) { addTlv(buffer, DHCP_RAPID_COMMIT); } addTlvEnd(buffer); addTlvEnd(buffer); } } Loading
src/android/net/dhcp/DhcpClient.java +2 −1 Original line number Original line Diff line number Diff line Loading @@ -1171,7 +1171,8 @@ public class DhcpClient extends StateMachine { final DhcpResults results = packet.toDhcpResults(); final DhcpResults results = packet.toDhcpResults(); if (results != null) { if (results != null) { confirmDhcpLease(packet, results); confirmDhcpLease(packet, results); transitionTo(mConfiguringInterfaceState); transitionTo(isDhcpIpConflictDetectEnabled() ? mIpAddressConflictDetectingState : mConfiguringInterfaceState); } } } } } } Loading
src/android/net/dhcp/DhcpDiscoverPacket.java +2 −1 Original line number Original line Diff line number Diff line Loading @@ -32,9 +32,10 @@ public class DhcpDiscoverPacket extends DhcpPacket { * Generates a DISCOVER packet with the specified parameters. * Generates a DISCOVER packet with the specified parameters. */ */ DhcpDiscoverPacket(int transId, short secs, Inet4Address relayIp, byte[] clientMac, DhcpDiscoverPacket(int transId, short secs, Inet4Address relayIp, byte[] clientMac, boolean broadcast, Inet4Address srcIp) { boolean broadcast, Inet4Address srcIp, boolean rapidCommit) { super(transId, secs, INADDR_ANY, INADDR_ANY, INADDR_ANY, relayIp, clientMac, broadcast); super(transId, secs, INADDR_ANY, INADDR_ANY, INADDR_ANY, relayIp, clientMac, broadcast); mSrcIp = srcIp; mSrcIp = srcIp; mRapidCommit = rapidCommit; } } public String toString() { public String toString() { Loading
src/android/net/dhcp/DhcpLeaseRepository.java +19 −0 Original line number Original line Diff line number Diff line Loading @@ -190,6 +190,25 @@ class DhcpLeaseRepository { return newLease; return newLease; } } /** * Get a rapid committed DHCP Lease, to reply to a DHCPDISCOVER w/ Rapid Commit option. * * @param clientId Client identifier option if specified, or {@link #CLIENTID_UNSPEC} * @param relayAddr Internet address of the relay (giaddr), can be {@link Inet4Address#ANY} * @param hostname Client-provided hostname, or {@link DhcpLease#HOSTNAME_NONE} * @throws OutOfAddressesException The server does not have any available address * @throws InvalidSubnetException The lease was requested from an unsupported subnet */ @NonNull public DhcpLease getCommittedLease(@Nullable byte[] clientId, @NonNull MacAddress hwAddr, @NonNull Inet4Address relayAddr, @Nullable String hostname) throws OutOfAddressesException, InvalidSubnetException { final DhcpLease newLease = getOffer(clientId, hwAddr, relayAddr, null /* reqAddr */, hostname); commitLease(newLease); return newLease; } private void checkValidRelayAddr(@Nullable Inet4Address relayAddr) private void checkValidRelayAddr(@Nullable Inet4Address relayAddr) throws InvalidSubnetException { throws InvalidSubnetException { // As per #4.3.1, addresses are assigned based on the relay address if present. This // As per #4.3.1, addresses are assigned based on the relay address if present. This Loading
src/android/net/dhcp/DhcpPacket.java +6 −7 Original line number Original line Diff line number Diff line Loading @@ -1179,7 +1179,7 @@ public abstract class DhcpPacket { "No DHCP message type option"); "No DHCP message type option"); case DHCP_MESSAGE_TYPE_DISCOVER: case DHCP_MESSAGE_TYPE_DISCOVER: newPacket = new DhcpDiscoverPacket(transactionId, secs, relayIp, clientMac, newPacket = new DhcpDiscoverPacket(transactionId, secs, relayIp, clientMac, broadcast, ipSrc); broadcast, ipSrc, rapidCommit); break; break; case DHCP_MESSAGE_TYPE_OFFER: case DHCP_MESSAGE_TYPE_OFFER: newPacket = new DhcpOfferPacket( newPacket = new DhcpOfferPacket( Loading @@ -1196,7 +1196,8 @@ public abstract class DhcpPacket { break; break; case DHCP_MESSAGE_TYPE_ACK: case DHCP_MESSAGE_TYPE_ACK: newPacket = new DhcpAckPacket( newPacket = new DhcpAckPacket( transactionId, secs, broadcast, ipSrc, relayIp, clientIp, yourIp, clientMac); transactionId, secs, broadcast, ipSrc, relayIp, clientIp, yourIp, clientMac, rapidCommit); break; break; case DHCP_MESSAGE_TYPE_NAK: case DHCP_MESSAGE_TYPE_NAK: newPacket = new DhcpNakPacket( newPacket = new DhcpNakPacket( Loading Loading @@ -1238,7 +1239,6 @@ public abstract class DhcpPacket { newPacket.mT2 = T2; newPacket.mT2 = T2; newPacket.mVendorId = vendorId; newPacket.mVendorId = vendorId; newPacket.mVendorInfo = vendorInfo; newPacket.mVendorInfo = vendorInfo; newPacket.mRapidCommit = rapidCommit; if ((optionOverload & OPTION_OVERLOAD_SNAME) == 0) { if ((optionOverload & OPTION_OVERLOAD_SNAME) == 0) { newPacket.mServerHostName = serverHostName; newPacket.mServerHostName = serverHostName; } else { } else { Loading Loading @@ -1330,9 +1330,8 @@ public abstract class DhcpPacket { short secs, byte[] clientMac, boolean broadcast, byte[] expectedParams, short secs, byte[] clientMac, boolean broadcast, byte[] expectedParams, boolean rapidCommit) { boolean rapidCommit) { DhcpPacket pkt = new DhcpDiscoverPacket(transactionId, secs, INADDR_ANY /* relayIp */, DhcpPacket pkt = new DhcpDiscoverPacket(transactionId, secs, INADDR_ANY /* relayIp */, clientMac, broadcast, INADDR_ANY /* srcIp */); clientMac, broadcast, INADDR_ANY /* srcIp */, rapidCommit); pkt.mRequestedParams = expectedParams; pkt.mRequestedParams = expectedParams; pkt.mRapidCommit = rapidCommit; return pkt.buildPacket(encap, DHCP_SERVER, DHCP_CLIENT); return pkt.buildPacket(encap, DHCP_SERVER, DHCP_CLIENT); } } Loading Loading @@ -1372,10 +1371,10 @@ public abstract class DhcpPacket { Inet4Address requestClientIp, byte[] mac, Integer timeout, Inet4Address netMask, Inet4Address requestClientIp, byte[] mac, Integer timeout, Inet4Address netMask, Inet4Address bcAddr, List<Inet4Address> gateways, List<Inet4Address> dnsServers, Inet4Address bcAddr, List<Inet4Address> gateways, List<Inet4Address> dnsServers, Inet4Address dhcpServerIdentifier, String domainName, String hostname, boolean metered, Inet4Address dhcpServerIdentifier, String domainName, String hostname, boolean metered, short mtu) { short mtu, boolean rapidCommit) { DhcpPacket pkt = new DhcpAckPacket( DhcpPacket pkt = new DhcpAckPacket( transactionId, (short) 0, broadcast, serverIpAddr, relayIp, requestClientIp, yourIp, transactionId, (short) 0, broadcast, serverIpAddr, relayIp, requestClientIp, yourIp, mac); mac, rapidCommit); pkt.mGateways = gateways; pkt.mGateways = gateways; pkt.mDnsServers = dnsServers; pkt.mDnsServers = dnsServers; pkt.mLeaseTime = timeout; pkt.mLeaseTime = timeout; Loading