blob: 65a70f7aea234e8b254c94c888f79e8b4ca947ad [file] [log] [blame]
# Copyright (c) 2015 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
from autotest_lib.client.common_lib import error
from autotest_lib.client.common_lib.cros.network import interface
from autotest_lib.client.cros import dhcp_handling_rule
from autotest_lib.client.cros import dhcp_packet
from autotest_lib.client.cros import dhcp_test_base
from autotest_lib.client.cros.networking import shill_proxy
# Length of time the lease from the DHCP server is valid.
LEASE_TIME_SECONDS = 60
# We'll fill in the subnet and give this address to the client.
INTENDED_IP_SUFFIX = "0.0.0.101"
# We should be able to complete a DHCP negotiation in this amount of time.
DHCP_NEGOTIATION_TIMEOUT_SECONDS = 10
class network_DhcpFQDN(dhcp_test_base.DhcpTestBase):
"""Test implemenation of client completing negotiation with FQDN flag."""
def test_body(self):
"""Main body of the test."""
subnet_mask = self.ethernet_pair.interface_subnet_mask
intended_ip = dhcp_test_base.DhcpTestBase.rewrite_ip_suffix(
subnet_mask,
self.server_ip,
INTENDED_IP_SUFFIX)
# It doesn't matter what is contained in this option value, except that
# the DHCP client does not crash decoding it or passing its
# interpretation of it back to shill.
fqdn_option = '\x03\xff\x00'
# This is the pool of information the server will give out to the client
# upon request.
dhcp_options = {
dhcp_packet.OPTION_SERVER_ID : self.server_ip,
dhcp_packet.OPTION_SUBNET_MASK : subnet_mask,
dhcp_packet.OPTION_IP_LEASE_TIME : LEASE_TIME_SECONDS,
dhcp_packet.OPTION_REQUESTED_IP : intended_ip,
dhcp_packet.OPTION_FULLY_QUALIFIED_DOMAIN_NAME : fqdn_option
}
rules = [
dhcp_handling_rule.DhcpHandlingRule_RespondToDiscovery(
intended_ip, self.server_ip, dhcp_options, {}),
dhcp_handling_rule.DhcpHandlingRule_RespondToRequest(
intended_ip, self.server_ip, dhcp_options, {})
]
rules[-1].is_final_handler = True
# In some DHCP server implementations, the FQDN option is provided in
# the DHCP ACK response without the client requesting it.
rules[-1].force_reply_options = [
dhcp_packet.OPTION_FULLY_QUALIFIED_DOMAIN_NAME ]
self.server.start_test(rules, DHCP_NEGOTIATION_TIMEOUT_SECONDS)
self.server.wait_for_test_to_finish()
if not self.server.last_test_passed:
raise error.TestFail('Test server didn\'t get all the messages it '
'was told to expect during negotiation.')
# This test passes if the DHCP client lives long enough to send
# the network configuration to shill.
self.wait_for_dhcp_propagation()
self.check_dhcp_config(dhcp_options)