IP Configuration Handling
*************************


IP basics
=========

Layer 3 configuration state is managed on a per-device basis.  When
a device is connected, it will have an IPConfig record associated with
it.  In addition, connected services will have an "IPConfig" property
which will contain the path to this record.  These properties of the
IPConfig record represent the current state of connectivity of the
device.

IPConfig hierarchy
==================

Service		org.chromium.flimflam
Interface	org.chromium.flimflam.IPConfig
Object path	[variable prefix]/{ipconfig0,ipconfig1,...}

Methods		dict GetProperties()

			Return properties for the IPConfig object. See
			the properties section for available properties.

Signals		PropertyChanged(string name, variant value)

			This signal indicates a changed value of the given
			property.

Properties	string Address [readonly]

			The Layer 3 address expressed in the dotted-quad format
			for IPv4 and any allowed format for IPv6 (as specified
			for inet_pton(3)).

		string Broadcast [readonly]

			The Layer 3 broadcast address specified as per Address.

		string DomainName [readonly]

			The DNS domain name to use in building FQDN queries.

		string Gateway [readonly]

			The Layer 3 address gateway address specified as
			per Address.

		string Method [readonly]

			The method by which Layer 3 state is managed.

			Possible methods are:
			   "ipv4"       (fixed IPv4 network state)
			   "ipv6"       (fixed IPv6 network state)
			   "dhcp"       (IPv4 state setup using DHCP)
			   "bootp"      (IPv4 state setup using BOOTP)
			   "zeroconf"   (IPV4 state setup using ZeroConf)
			   "dhcp6"      (IPv6 state setup using DHCP6)
			   "ppp"        (IPv4 state setup using PPP)
			   "vpn"        (IPv4 state setup using VPN)

		int32 Mtu [readonly]

			The maximum transmit unit (MTU) in bytes.

		array{string} NameServers [readonly]

			The Layer 3 addresses of DNS domain name servers to
			use for DNS requests.

		string PeerAddress [readonly]

			The Layer 3 address associated with the destination
			endpoint of a point-to-point link.  This value is
			specified as per Address.

		int32 Prefixlen [readonly]

			The number of bits in a Layer 3 address that are
			part of the network address.  For IPv4 networks this
			corresponds to the length of the network mask; e.g.
			a netmask of 255.255.255.0 has a prefixlen of 24
			(note arbitrary CIDR masks are not supported.)

		array{uint8} VendorEncapsulatedOptions [readonly]

			Server-provided value for the DHCP option 43
			value.  Its interpretation varies based on
			the DHCP server.

		string WebProxyAutoDiscoveryUrl [readonly]

			The Web Proxy Auto-Discovery URL for this network
			as reported over DHCP.

		array{uint8} iSNSOptionData [readonly]

			Server-provided value for the DHCPv4 option 83. This
			option allows Internet Storage Name Service (iSNS)
			clients to discover the location of the iSNS server
			automatically. The property is stored as a byte
			array, leaving the burden to iSNS clients to parse it
			according to RFC4174.
