Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7af0a96a authored by Automerger Merge Worker's avatar Automerger Merge Worker
Browse files

Add Rapid Commit option support in DHCP Server side. am: 859ceabd am: 73c62e12 am: ebbc1150

Change-Id: I309cf48fc4c19583d61c77a4b5b38090d82c40e7
parents 22667e09 ebbc1150
Loading
Loading
Loading
Loading
+6 −2
Original line number Original line Diff line number Diff line
@@ -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() {
@@ -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);
    }
    }


+2 −1
Original line number Original line Diff line number Diff line
@@ -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);
            }
            }
        }
        }
    }
    }
+2 −1
Original line number Original line Diff line number Diff line
@@ -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() {
+19 −0
Original line number Original line Diff line number Diff line
@@ -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
+6 −7
Original line number Original line Diff line number Diff line
@@ -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(
@@ -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(
@@ -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 {
@@ -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);
    }
    }


@@ -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