Commit Graph

65 Commits

Author SHA1 Message Date
Erik Kline
8d6edc3270 Add 464xlat notification callback
Bug: 26238390
Bug: 26991160
Change-Id: I556e779c642d19cd8d26637dd98055157d005f77
2016-03-02 16:50:46 +09:00
Erik Kline
b9df11099f Add constructor with more inputs for dependency injection.
Bug: 26991160
Bug: 27406552
Change-Id: If4a0a2f1afb1da4ad59df9eb31c540047c84659b
2016-03-01 14:58:30 +09:00
Erik Kline
111d55658b Add WaitForProvisioningCallback
This centralizes code that is shared by both bluetooth and ethernet
transport layers.

Bug: 26991160
Change-Id: I8e2dd8580c29c86394119768e3a5529850b4b859
2016-02-22 13:02:02 +09:00
Erik Kline
d0e843b8ef Support setting TCP buffer sizes and HTTP Proxy config
This allows IpManager to send callback recipients a more satisfying
LinkProperties.

Bug: 26991160
Change-Id: I2eb60dc633e5be38dad9410a1096d0095ddf57a0
2016-02-22 12:50:44 +09:00
Lorenzo Colitti
d2457a3ee3 Add a MessageUtils class to convert int constants to strings.
This class uses reflection to find accessible static integer
members in a specified list of classes and returns a SparseArray
mapping the integers to their names. This will allow us to
replace various 400-line switch statements with a simple
array access.

Change-Id: I3607e6389a423cde0bd83270c00b3c863ae1bb29
2016-02-19 10:26:55 +09:00
Erik Kline
efa4209fe0 {,Base}DhcpStateMachine is no more
Bug: 26991160
Change-Id: I21f8c30627bf2a7fbcd5b4d5f1f1ad1a2dda759b
2016-02-18 12:56:45 +09:00
Erik Kline
29a215268d Remove references to BaseDhcpStateMachine and DhcpStateMachine
Bug: 26991160
Change-Id: I3742780a4e5121c163d9d1380951e25edaba19f3
2016-02-17 21:44:25 +09:00
Erik Kline
b1ee39540e Add IpManager#shutdown() to terminate the state machine.
Additionally, remove IpManager.Callback#usingIpReachabilityMonitor()
now that this is now longer used.

Bug: 26991160
Change-Id: I9a17497c82238a9fb37a20d01aeca7bc4913ae2c
2016-02-17 20:54:10 +09:00
Erik Kline
93b1a36e31 Add IpManager.ProvisioningRequest class
This class captures provisioning request parameters to be passed to
IpManager#startProvisioning().

Bug: 26991160
Change-Id: I56652bbc4b9ae6cfca3f225a8d99cdfc01bb54d9
2016-02-16 18:11:47 +09:00
Erik Kline
3b74289fdf Duplicate DhcpStateMachine public constants into DhcpClient
This is so we can ultimately delete DhcpStateMachine altogether.

Bug: 24837343
Bug: 26991160
Change-Id: If116639e5f72c97cfc67f748dc5f6433dccd9cf0
2016-02-12 17:10:15 +09:00
Erik Kline
ef1f39abff Use IpManager.ifname as the tag in log messages.
Bug: 26991160
Change-Id: Idc9231819298b65da3cc3baa88f1f0cd18ab6df7
2016-02-11 21:07:07 +09:00
Erik Kline
990fc4968d Incorporate historical WifiStateMachine notions of provisioning.
Also: considerably expand logging capabilities.

Bug: 26991160
Change-Id: I36c3c1d2158ffd178e8ce163b8799d62938f39c7
2016-02-11 03:21:48 +09:00
Paul Jensen
44307adcf3 Merge "Android packet filtering program interpreter test & program generator" into mm-wireless-dev 2016-02-03 16:48:43 +00:00
Paul Jensen
d38fb7662d Android packet filtering program interpreter test & program generator
Change-Id: I17951bd6320b9eb3b6c43f2ae37f62c2025705c1
2016-02-03 10:19:13 -05:00
Erik Kline
6076cb0b85 Ignore link properties updates when nothing actually changed.
Change-Id: Ia3c0a652cb3b67707a5c5a0bb40f991ef1e6f777
2016-02-03 22:42:54 +09:00
Erik Kline
8deac7793c Partial unification of DHCPv4 and static IPv4 configuration codepaths
Change-Id: Ic796f9b7bb853a332175c34e0f557588efb6247a
2016-02-03 22:42:53 +09:00
Erik Kline
8afa558c52 Move DHCPv4 mechanics into IpManager
Bug: 17345682
Change-Id: I2c3d9d665ff3c38f02084c0cf86cd76035e7b0aa
2016-02-03 17:23:45 +09:00
Erik Kline
1e91e4ebb6 Support static IP configuration internally
Also, stop passing around "reason" for IPv4 provision success
or failure.

Bug: 17345682
Change-Id: I4c4b22977a93048e0b291206721d0ccc77cfaaf2
2016-02-01 22:32:21 +09:00
Erik Kline
a636761bd6 Initial refactoring to group IP-related elements into an IpManager
Bug: 17345682
Change-Id: I88f3f4bd32d18cd8d4f1404493648c8bcc1deeec
2016-02-01 17:59:47 +09:00
Erik Kline
7cb501310e DO NOT MERGE Refactor netlink and IpReachabilityMonitor into services/net
- netlink from core to services/net/netlink
    - IpReachabilityMonitor from core to services/net/ip

Cherry-picked from 02cc5a030a
Change-Id: I45ac3f591bade45dd5ec441111b02b621234c0e4
2015-12-10 16:06:50 -08:00
Lorenzo Colitti
7611f1cdb4 Don't crash if a DHCP server doesn't send the server ID option.
This violates a MUST in RFC2131, but apparently some
implementations don't know or care.

Bug: 25343517
Change-Id: I80459b58ffe231e7ed64e77bafa157a96b745149
2015-10-29 16:09:16 +09:00
Lorenzo Colitti
4e4d59eeef Connect the DHCP UDP socket to the server.
This makes it so that the socket cannot receive datagrams from
anybody except the DHCP server. This does not improve security,
because we never read from the UDP socket anyway, but it does
make ListeningPortsTest pass.

Bug: 23906864
Bug: 23933386
Change-Id: Ib090273a417f7eb2ac1ee3309260249b72fb8345
2015-10-11 16:06:11 +09:00
Lorenzo Colitti
025f4a5aae Support DHCP replies with multiple default gateways.
Just use the first one for compatibility with the legacy client.

Bug: 23975855
Change-Id: Id6a0b0de32e8947c12c02eb9a3be417e2f82c99a
2015-10-08 16:28:02 +09:00
Erik Kline
b19238c488 Accept DHCP responses from non-67 server source ports
Bug: 24687559
Change-Id: I5f03b8b2780c558281d8a50d0893fd64f2812add
2015-10-08 15:40:41 +09:00
Erik Kline
496906ee70 Improve logging of DHCP parse errors using exceptions.
Bug: 23975855
Change-Id: I62464b92f0bb568e57bf5e1a63bc75f22c75aac1
2015-10-08 15:40:31 +09:00
Lorenzo Colitti
9795a1d8b9 Give the DhcpClient alarm broadcasts foreground priority.
Bug: 24265658
Bug: 24224067
Change-Id: I375097e7957643efb4bc0bb81318b13d9b9c82c1
2015-09-25 12:57:39 +09:00
Ian Pedowitz
7d223aeef8 am 0a76afb9: Merge "Don\'t crash on (invalid) hardware address lengths > 127." into mnc-dev
* commit '0a76afb93e6f303921ab84e2f26747c3ebf19b62':
  Don't crash on (invalid) hardware address lengths > 127.
2015-09-03 17:34:50 +00:00
Lorenzo Colitti
d64144a37c Don't crash on (invalid) hardware address lengths > 127.
These would cause us to crash with a NegativeArraySizeException
when trying to create the clientMac array. Instead, if the length
is > 16 (invalid, because the field is only 16 bytes long), fudge
it to 6 (Ethernet / wifi).  This is a bit less liberal than the
legacy client, which doesn't check the length at all.

Bug: 23725795
Change-Id: I83f47bfc400ffa8ce85dd9d1b8eb96be5afe51a5
2015-09-03 21:28:48 +09:00
Lorenzo Colitti
c7f2030ffc am e022cb08: Merge "Don\'t attempt to stop the receive thread if we never started it." into mnc-dev
* commit 'e022cb085f6ebc2801f843bb47c9fd23f6daa3ea':
  Don't attempt to stop the receive thread if we never started it.
2015-08-12 03:45:30 +00:00
Lorenzo Colitti
31e19f34f5 Don't attempt to stop the receive thread if we never started it.
If socket initialization fails, DhcpState#exit will call
mReceiveThread#stop and crash the system with an NPE. Make sure
we don't do that if mReceiveThread is null, and properly null it
out when exiting.

Bug: 23088314
Change-Id: I4378d8280f9d8588f5eaa8bd7ade61beab1c3ce2
2015-08-11 15:42:59 +09:00
Lorenzo Colitti
8bf977d562 ConnectivityManager API for for packet keepalives.
Bug: 21405946
Change-Id: Ie1f8f8bee684fe2bb1092a9f1bc9f5dc29b1defc
2015-07-18 17:00:13 +00:00
Lorenzo Colitti
b0b3d0bcfb Fix two parsing bugs in new DHCP client.
1. We don't parse PAD options properly, leading in failure to
   parse packets sent by DHCP servers that put the end of options
   marker after pad options and at an odd offset.
2. We get the DhcpResults vendorInfo from the wrong option type
   (60 instead of 43).

Fix these and add unit tests for the offer packets sent by a few
different DHCP servers.

Bug: 21955617
Bug: 22281295
Change-Id: I5d13f1a6a3ff0b53112f18f3db8792fa32ad2da3
2015-07-06 13:50:53 +09:00
Lorenzo Colitti
5bc64b847a Correctly time out CMD_START_DHCP.
WifiStateMachine expects CMD_START_DHCP to time out after 30-40
seconds. Currently, DhcpClient imposes timeouts on DhcpInitState
and on DhcpRequestState, but not on the time it takes to get to
from CMD_START_DHCP to DhcpBoundState. So in theory the client
could oscillate between DhcpInitState and DhcpRequestState and
never time out.

Fix this by introducing a new oneshot timer that is set when DHCP
starts and is cancelled when it succeeds. CMD_RENEW_DHCP does not
need this because it's implemented using only one state, so the
oneshot timeout can be implemented using the state timeout.

Bug: 19704592
Change-Id: I6a5847a3dee23a2692237b8f3b3b0f8049da5140
2015-06-08 19:57:14 +09:00
Lorenzo Colitti
be843e8394 Actually close sockets when stopping the receive thread.
Contrary to the expectations of the code, IoUtils.closeQuietly()
does not unblock system calls. So mReceiveThread.halt() was not
actually stopping the receive thread.

This wasn't actually a problem, because after "stopping" the
receive thread, either the interface would go down (interrupting
the previous receive thread with ENETDOWN), or a packet would
arrive to both the old and new receive threads, stopping the
old one. But the lack of a "stopping receive thread" message at
the expected time was confusing.

While I'm at it, also add the string for CMD_TIMEOUT.

Bug: 19704592
Change-Id: I74732429118af780453028898148519b294fa9d3
2015-06-04 20:07:14 +09:00
Lorenzo Colitti
f68edb1611 Actually fall back from yiaddr to ciaddr.
The initial implementation of toDhcpResults attempted to get the
leased IP address from ciaddr if yiaddr was 0.0.0.0, but it never
actually did so because a) it used == instead of equals(), and b)
the parsing code never populated mClientIp for a DhcpOfferPacket
or DhcpAckPacket.

Fix this and add a test for it.. Technically DHCP does not use
ciaddr (only bootp uses it), but in 5.0 we would use ciaddr if
yiaddr was 0.0.0.0 and a bit more compatibility shouldn't hurt.

Bug: 19704592
Change-Id: I1f58555f0c10b9c576995a6edb759a83d8938ea0
2015-06-04 14:57:11 +09:00
Lorenzo Colitti
3a40b0deab Make RenewingState time out as well.
Bug: 19704592
Change-Id: I0759a98911a8c0059936916db8db459b7d66bc00
2015-06-03 17:23:30 +09:00
Lorenzo Colitti
48f9c731ff Remove the IPv4 address from the interface when DHCP fails.
Bug: 19704592
Change-Id: I9b96cdcfc7c9442b3f8d6797aca63559ed4bdb9b
2015-06-03 12:09:14 +09:00
Lorenzo Colitti
8f602cdd38 Merge "Fix DHCP lease time parsing." into mnc-dev 2015-06-02 07:47:48 +00:00
Erik Kline
d59aa84fda pass a defensive copy of DhcpResults
Also: correct state transition handling in DhcpBoundState#enter().

Bug: 20451261
Change-Id: I3be50f6b1b3fae179d6fff7ca8ae1d687caa3221
2015-06-02 16:22:57 +09:00
Lorenzo Colitti
d973537ee1 Fix DHCP lease time parsing.
Currently we treat a lease time larger than 2**31-1 as a negative
value, which causes DhcpClient to attempt to renew its IP address
constantly. Fix this by properly handling large and infinite
lifetimes, and while we're at it, impose a minimum lease time of
60 seconds.

Bug: 21352084
Change-Id: If62c9efeffad6222e2fe0c110f77d0e4c70de96d
2015-06-02 16:21:17 +09:00
Lorenzo Colitti
82babcd83a Specify more information in DhcpClient PendingIntents.
- Specify the package name. This provides a bit of security, but
  not much since the package is "android".
- Specify the interface name so we can run more than one client
  at a time.

Bug: 21395858
Bug: 19704592
Change-Id: I91c9ea15285b36628b6aef0b975c16a0b08d061e
2015-05-26 12:40:12 +00:00
Etan Cohen
644f41368f Merge commit '4cb5d80' into merge2 2015-04-24 14:03:28 -07:00
Lorenzo Colitti
f443bfc25e Always send the DHCP client identifier.
Currently we send it only in request packets, but not in discover
packets. This might confuse servers because they might think that
the discover and the request come from different clients.

Also reorder the options in the request packet to match the order
used by the legacy DHCP client.

While I'm at it, fix the generation code for inform and decline
packets, which we do not use.

Bug: 19704592
Bug: 20335221
Change-Id: I1d45306e76dbd5da9cc4611e6df84a9f67346b2c
2015-04-22 16:44:10 +09:00
Lorenzo Colitti
a94929ba9d Log DHCP replies that we can't parse.
Bug: 19704592
Bug: 20335221
Change-Id: I73def02a08345bd96f45cb970f9f251e6d5df2db
2015-04-22 04:09:55 +00:00
Lorenzo Colitti
3e979321a5 Set the secs field in the BOOTP header.
We mostly follow RFC 2131, which says that secs is the number of
seconds "since client began address acquisition or renewal
process", and thus set secs to zero on renew. This is different
from our current behaviour, which keeps on counting without
resetting secs to zero on renew.

Bug: 19704592
Change-Id: Ifbb7644094c579be626ffb698eee87047425dbf0
2015-04-21 16:21:21 +09:00
Prerepa Viswanadham
220951a6d0 Merge commit 'b2ff415' into merge_work
Change-Id: I4f9c662112fc49e4f94315d3c69860607be3bc1e
2015-04-10 15:54:48 -07:00
Lorenzo Colitti
a12bde3567 Deal with null characters in string options.
This currently truncates all strings at the first NULL character,
except for vendorInfo, which is an opaque string.

Bug: 19985674
Change-Id: Ie53b2c55eb8a5204d7b2c7e2d8587743d923647a
2015-04-01 17:53:14 +09:00
Lorenzo Colitti
c2abb2bf5e Deal with null characters in string options.
This currently truncates all strings at the first NULL character,
except for vendorInfo, which is an opaque string.

Bug: 19985674
Change-Id: Ie53b2c55eb8a5204d7b2c7e2d8587743d923647a
2015-04-01 13:55:34 +09:00
Lorenzo Colitti
f5c17221d4 Don't log errors if the receive thread is stopped.
Change-Id: I75ddc9b68f0a61a9a7a78026ed97a8a7c5109cc3
2015-03-31 07:07:03 +09:00
Lorenzo Colitti
06ac4b8dd1 DHCP: Don't write options longer than 255 bytes.
Change-Id: Iddc971c7ac97253af3063850cde3dee10c3829ff
2015-03-20 16:32:44 +09:00