# dhcpcd-6.8.2 configuration for Android Wi-Fi interface
# See dhcpcd.conf(5) for details.

# disable ARP checking
noarp
# no link state monitoring
nolink

# Inform the DHCP server of our hostname for DDNS.
hostname
# To share the DHCP lease across OSX and Windows a ClientID is needed.
# Enabling this may get a different lease than the kernel DHCP client.
# Some upstream DHCP servers may also require a ClientID, such as FRITZ!Box.
clientid

# A list of options to request from the DHCP server.
option domain_name_servers, domain_name, domain_search, host_name, wpad_url
option classless_static_routes
# Most distributions have NTP support.
#option ntp_servers
# Respect the network MTU.
option interface_mtu
# A ServerID is required by RFC2131.
require dhcp_server_identifier
