Commit Graph

59 Commits

Author SHA1 Message Date
Chalard Jean
bddcfc0c48 Add capability they should always have to eth networks.
There is a stopgap hack in ConnectivityService doing
this automatically, but individual agents should be doing
this themselves.

Test: FrameworksNetTests NetworkStackTests
Bug: 150570873
Change-Id: I6f75e2b26eb9f554243bc418142a4dc18839aa79
2020-05-11 11:21:15 +09:00
Chalard Jean
4b9a7dd13d Address further API council comments.
Test: FrameworksNetTests NetworkStackTests
Bug: 152238712
Copy from ag/10857997
Change-Id: I7c27f76c54a76abeae46dcdcddaeb3ca48afa358
Merged-In: I7c27f76c54a76abeae46dcdcddaeb3ca48afa358
2020-04-01 11:04:18 +00:00
Chalard Jean
86aac0daec Convert the Ethernet factory to the new network agent
This is a combination of ag/10147368 and ag/10438581.
ag/10147368 implemented this conversion together with
using the planned NetworkScore API, while ag/10438581
reverted the parts that had to do with NetworkScore.
This is just a squash of these two patches and it
brings the factory in line with the code in rvc-dev.

Test: FrameworksNetTests NetworkStackTests EthernetTetheringTest
Change-Id: Ib214fbbd042f2c0ebd01cf5b0ec33d922629677e
Merged-In: Ie7b70750ef0e17141080f4266dea6155c3601569
2020-04-01 09:09:32 +00:00
Lorenzo Colitti
dd397f58c7 Fix querying Ethernet availability for unprivileged callers.
Both EthernetManager#getAvailableInterfaces() and the no-arg
version of EthernetManager#isAvailable() end up calling
EthernetServiceImpl#getAvailableInterfaces. This method attempts
to filter out restricted interfaces if the caller does not have
the CONNECTIVITY_USE_RESTRICTED_NETWORKS permission.

Unfortunately EthernetNetworkFactory's notion of a restricted
interface is the opposite of what it should be. This means that
while privileged callers can see all interfaces, unprivileged
callers can only see restricted interfaces which they cannot use.

Fix this by correcting NetworkInterfaceState#isRestricted(), so
that unprivileged callers can see only unrestricted interfaces.
Privileged callers are unaffected.

This bug probably went unnoticed because restricted Ethernet
interfaces are rare (likely used only on auto devices) and
because the callers that care about those restricted interfaces
are generally privileged.

Bug: 148824036
Test: atest android.net.EthernetTetheringTest#testPhysicalEthernet
Change-Id: Idff3b05a193a80c581d80d0e4fe9c2d3fc0d8a25
2020-03-26 22:53:10 +09:00
Lorenzo Colitti
bd66333a24 Don't call maybeTrackInterface on the wrong thread.
Bug: 150644681
Test: atest TetheringIntegrationTests:EthernetTetheringTest --rerun-until-failure 100
Change-Id: Ia2cb265f8d4de96210f1462339c10ad2947eec65
2020-03-26 17:02:27 +09:00
Lorenzo Colitti
165b456d92 Send tethered interface callbacks based on interface existence.
Currently, callbacks for tethered interface availability are sent
based on interface link state. This is incorrect:

- It is acceptable and expected to be able to enable tethering on
  an interface that does not yet have link up.
- It doesn't seem useful to disable Ethernet tethering if link
  temporarily goes down.

Instead, only base the callbacks on whether an interface exists
or not.

Bug: 150644681
Test: WIP tests in aosp/1260100 pass
Change-Id: I015219cbd03626c38fb5156d0cb2991ba7d7def7
2020-03-19 22:12:32 +09:00
Lorenzo Colitti
e81f99d532 Support setting the default interface to null again.
Currently, the default interface can only ever go from null to
non-null. This is correct for fixed interfaces (because they
don't get unplugged) and it's generally correct for USB
interfaces that use ethX as their device name (because when
they are unplugged and plugged in again, the device name won't
change). But it is not correct if, for example, the default
interface is a test interface. So, allow mDefaultInterface to go
back to null.

This CL also fixes a crash if a tethered interface request is
added and removed when there is no default interface.

Also, make dump() report tethered interface requests.

Also remove an unused variable that I missed in the previous CL.

Bug: 150644681
Test: tested by EthernetTetheringTest in same topic
Change-Id: I5109d8da3aeb6c1f6523291d9e2ec92c64b5ad2d
2020-03-19 22:04:23 +09:00
Lorenzo Colitti
841195a103 Make Ethernet interfaces more testable.
This CL adds a setIncludeTestInterfaces method to EthernetManager
that, when called, causes the Ethernet service to recognize and
manage test interfaces created by TestNetworkManager.

Bug: 150644681
Test: Tested by EthernetTetheringTest in same topic
Change-Id: I86eef7a93267f800dbfc8eafd307effa76a344ca
2020-03-19 18:06:59 +09:00
Milim Lee
f85c0b301c Set Ethernet default mode as CLIENT
Bug: 130840861
Test: build, boot
      atest EthernetTrackerTest
      manual test (using Ethernet)

Change-Id: I935ea2e5f214aced67fb60f4aec2744077177545
2020-02-01 05:48:53 +09:00
Lorenzo Colitti
32327808e1 Support one Ethernet interface in server mode.
Currently, Ethernet only supports interfaces in client mode
(e.g., to connect to the Internet). Add minimal support to
Ethernet to support interfaces in server mode. This simple
implementation only works on the default interface, which is the
first interface that is detected on boot (even if the interface
is later removed).

This also provides (but does not yet unhide) a simple API for
Tethering to request that the next-plugged-in interface to be
placed into server mode.

Test: Enabling tethering with change on top
Bug: 130840861
Merged-In: I78f85bc36aaceb62ce274003a75ea99d0b6bc8b7
Change-Id: I78f85bc36aaceb62ce274003a75ea99d0b6bc8b7
(clean cherry-pick from internal branch)
2020-01-28 16:22:46 +09:00
Lorenzo Colitti
918f68fce9 Merge "Avoid creating IpClient if ethernet cable is unplugged." 2020-01-09 05:26:34 +00:00
Junaid Babu
b92d1f5513 Fix refCount check at releaseNetworkFor
When releaseNetworkFor is called, refCount should be equal to 1 for
network.stop() to be called. This is the same logic that is followed by
WifiNetworkFactory also.
In the current code, when refCount is 2 and releaseNetworkFor() is called,
network.stop() will be executed and will stop Ethernet

Bug: 146089778
Test: build and boot OK
Change-Id: Ib7d1b488a2943364a8ba4a89eec5de4c33cf1d5a
2019-12-17 15:09:01 +09:00
kevinwk_lee
13d5b86614 Avoid creating IpClient if ethernet cable is unplugged.
This change avoids calling start() on needNetworkFor() if ethernet
cable is unplugged. Fixed by adding isLinkUp validation.

Test: ./cts-tradefed run cts-dev -d -m CtsSecurityTestCases -t \
      android.security.cts.ListeningPortsTest#testNoRemotelyAccessibleListeningUdpPorts
      adb shell netstat -lnup

Change-Id: I2debd7367a20b665249f9c19d2d8a61737435803
2019-10-31 07:23:11 +00:00
Paul Hu
cd73c22c96 Merge "[Ethernet] Replace internal connectivity checks permission" 2019-09-20 07:23:07 +00:00
Chalard Jean
91456a8c7a Update Ethernet code for the NetworkFactory serial number.
See aosp/708790

Bug: 18637384
Bug: 29030667
Test: manual
      cts
      runtest framework-net
      atest frameworks/opt/net/ethernet/tests

Change-Id: I5caa4cb89ca1441f3c84b5675ceede6ecacfd132
2019-09-09 11:03:51 +08:00
paulhu
6957e3a35a [Ethernet] Replace internal connectivity checks permission
A number of connectivity checks that protect system-only methods
check for CONNECTIVITY_INTERNAL, but CONNECTIVITY_INTERNAL is a
signature|privileged permission. We should audit the permissions
checks, and convert checks that protect code that should not be
called outside the system to a signature permission. So replace
the permission to NETWORK_STACK.

Bug: 32963470
Test: atest EthernetServiceTests
Change-Id: I2a88d04bbdcd7e7e624b9065372a6603d2bb45a2
2019-08-22 16:03:59 +08:00
Wally Yau
b95be5972e Fixed fatal exception in EthernetServiceThread
When this.mIpConfig is not initialized, it will cause a
java.lang.NullPointerException and put the device in a boot
loop with the following error:

FATAL EXCEPTION IN SYSTEM PROCESS: EthernetServiceThread

Test: passed pre-submit boot test.

Change-Id: I47df68071b4c07a4136c0abcbe69ee7ada7090e0
2019-05-29 14:50:38 -07:00
tank.hung
f8a95e543f Add reconnect flow when updateIPConfiguration
Bug: 119085164
Test: manual, test with AndroidTV device

Partner gerrit review CL:
https://partner-android-review.googlesource.com/c/platform/frameworks/opt/net/ethernet/+/1215654

[Analysis]
APP called EthernetManager.setConfiguration API for switch DHCP to
Static,
setConfiguration’s flow just only update IpConfig finally but have not
trigger EthernetNetworkFactory.start().
So Static IP Setting just only take effect when unplug/plug Ethernet
Cable or AC Off&On.

[Repeat Steps]
1. Connect Ethernet with DHCP and Network access is normal
2. Change IP settings from DHCP to Static and set Static IP.
3. After setting, you can not automatically obtain Static IP.

[Recovery Method]
Unplug the Ethernet and insert it or AC OFF / ON

Change-Id: Idbb6a24ccfa360582f48e4f9369def7fc729fb9f

Bug: 112171349
2019-05-14 15:16:19 +00:00
Sal Savage
ea26baf9ff Update comments and documentation in net type prop change
Bug: b/112588045
Test: atest EthernetServiceTests --verbose
Test: kitchensink, dumpsys ethernet, with RPi devices and USB to
      ethernet adapters.

Change-Id: Iaa260aabbbd7aa4b7864eba32ecff7e3f84123c3
2019-03-25 14:11:20 -07:00
Remi NGUYEN VAN
5060d1d1be Migrate EthernetNetworkFactory to IIpClient
Test: atest EthernetServiceTests
Bug: b/112869080
Change-Id: I54f32d3031e63c7dea78936b6fe5e83e5b293c33
2019-01-25 12:34:03 +09:00
Sal Savage
d3a5c0404c Allow network transport type override
Bug: b/112588045
Test: atest EthernetServiceTests --verbose
Test: kitchensink with RPi devices connected by USB -> Ethernet
      adapters. Edit config.xml to try different tranport
      overrides manually. Use dumpsys ethernet to show final
      final network scores.
Change-Id: I482e78a76d06c9c090aa6816db14bb346eb6528b
2019-01-15 11:56:50 -08:00
Lorenzo Colitti
4f316a4420 Don't consider TRACK_DEFAULT requests in EthernetNetworkFactory.
These should not affect network refcount and thus should not be
passed to the network transport.

Bug: 116034205
Test: successfully established a VPN when connected to USB ethernet
Change-Id: I66517d86f35b8cfc1e211cb189127187d2744b60
2018-10-16 17:36:40 +09:00
Chalard Jean
33893d68d4 Strategic fix for infinite loop
Bug: 111326363
Test: Manual + atest frameworks-net
Change-Id: Id262df4e41de5c74784637ae4a5459c3fab9fb74
2018-08-22 06:25:27 +00:00
Chalard Jean
153ef57146 Tiny tiny style fix
Test: none needed
Change-Id: Ic6cfedf9cfe60984ce7fbd59bdaec55b0bba3001
2018-08-21 18:18:41 +09:00
Pavel Maltsev
e28118d0c3 Add missing features to static IP config
In addition to IP address, OEMs should be able to set gateway, DNS and
domains.

Bug: 80090920
Test: runtest -x frameworks/opt/net/ethernet/tests
Change-Id: I4e3d51a6955d7bfe5ca4e8079936ea10c28832e4
2018-05-30 22:39:34 -07:00
TreeHugger Robot
6f017e3319 Merge "Fix overriding ip configurtion with default one" into pi-dev 2018-05-15 23:03:46 +00:00
Pavel Maltsev
a8f3c01be9 Fix overriding ip configurtion with default one
EthernetConfigStore should return 'null' for default interface if the
default interface hasn't been configured otherwise it would be hard to
distinguish not-configured vs configured with default values.

Bug: 79415136
Test: verified w/o .xml overlay Ethernet continues to work
Test: verified that ip config from overlay is not getting overriden
Change-Id: I4eb914923f3664b12b6af0ae05f45b60c5312b02
2018-05-14 12:18:19 -07:00
Pavel Maltsev
97446b8978 Fix NPE during dumpsys ethernet
Handle the case when IpClient wasn't created for network interface which
may happen for virtual device

Bug: 78482534
Test: dumpsys ethernet
Change-Id: I3405dd4f72d4a6444448f0d6ec0497aead07bade
2018-05-04 16:40:26 -07:00
Jeff Sharkey
b23181bbe9 Ethernet should be NOT_CONGESTED by default.
Bug: 79160437
Test: builds, boots
Change-Id: Iff726805a3c6b7cf2a4b741dbba93552c378a6e1
2018-05-02 14:57:08 -06:00
Erik Kline
7048285cb3 Wait for IpClient to shutdown
This makes sure that we never accidentally have two IpClients vying
for control of the same interface.

Test: as follows
    - built
    - flashed
    - booted
Bug: 62476366
Change-Id: Iab4ca7c2445e70b6f8beaf5dc6921cb0c6cd56ed
2018-02-21 15:10:01 -08:00
Luis Hector Chavez
de93b3eb05 Avoid re-creating an IpClient if the network has already started
This change avoids calling start() on needNetworkFor() if an IpClient
object has already been created. This is the case when the interface is
connected from boot, as is the case in Chrome OS.

Bug: 73396557
Test: Networking is 100% stable in Chrome OS
Change-Id: Iaa073d6477aadca2e4e5233b333d717ad82c1f3d
2018-02-21 20:25:20 +00:00
Pavel Maltsev
52d046eb8a Enable multiple active Ethernet interfaces
- reworked EthernetNetworkFactory to support multiple active Ethernet
interfaces
- allow vendors to specify network capabilities + ip config through XML
config overlay

Test: manual using hikey960 + multiple usb->eth adapters
Change-Id: Ie39bcb0d2a3f960f497222159c7bd5797accaa68
2018-01-25 14:56:40 -08:00
Jeff Sharkey
efe4af4926 Add "not congested" network capability.
Can be used by a network to indicate when it's congested, meaning that
apps should defer network traffic that could be done at a later time.

Test: bit FrameworksNetTests:android.net.,com.android.server.net.,com.android.server.connectivity.VpnTest,com.android.server.ConnectivityServiceTest
Bug: 64133169
Change-Id: I97664d041920c8d6e3f9fb7c9e8638925b15c30e
2018-01-17 02:30:28 -07:00
Jeff Sharkey
30b747ef95 Define NOT_ROAMING network capability.
The "roaming" state of a network really belongs on NetworkCapabilities
instead of being published through NetworkInfo.isRoaming().  One major
reason is to support developers creating NetworkRequests for a
non-roaming network.

Test: bit FrameworksNetTests:android.net.,com.android.server.net.,com.android.server.connectivity.
Bug: 68397798, 16207332
Change-Id: I0722d7b38d0478de3834b869552f48403af9d553
2017-10-30 12:02:14 -06:00
Elvis Chien
89ffed793f ethernet: Fix the connect fail issue when switch DHCP to Static config at Ethernet interface.
add different logic to handle static ip configuration.

Bug: b/64914694 <http://b/issue?id=64914694&query=64914694>
Test: follow the following steps to switch ethernet config
1.Plug Ethernet cable ,Ethernet succeed to access internet with DHCP mode
2.Change Ethernet IP settings to Static
3.Input correct ip , gateway, prefix length, DNS
4.UI show Connected, but failed to access Internet.

Change-Id: I223bca85814e94745fbb8b50ca677eb7032e9bb3
(cherry picked from commit 44a107bc8f058c6ac1aab6fbfbf60bf8f3474711)
2017-10-19 14:50:00 +09:00
Lorenzo Colitti
17f4e4a027 Don't crash if the interface disappears just after appearing.
If the interface disappears between interfaceAdded() and
setInterfaceUp, we'll crash with an IllegalStateException in
NetworkManagementService#setInterfaceConfig.

Ignore the error instead. This should be safe because we don't
modify any state unless our calls succeed.

Bug: 62870779
Test: builds aosp_bullhead-eng
Change-Id: If8c2375f7fffe25a9fa79dc4f1981c745384a276
2017-06-23 01:41:47 +09:00
Lorenzo Colitti
62d5e744c3 Make Ethernet more robust.
1. Remove the IP provisioning thread and just attempt
   provisioning indefinitely whenever we have an interface.
2. Make all methods run on the passed-in handler thread. This
   makes it easier to verify correctness by code inspection.
3. Remove the code that changes the factory score depending on
   whether we're tracking an interface and have link. This is
   unnecessary complexity, as there is no penalty to accepting a
   request even if we don't have an interface.
4. Remove code duplication and only have one codepath for
   stopping layer 3.

Tested the following are tested with this CL:
- Booting with an interface connected.
- Disconnecting/reconnecting the Ethernet cable repeatedly,
  particularly at inconvenient times (e.g., during provisioning).
- Similarly, disconnecting/reconnecting USB Ethernet interfaces.
- Falling back to another Ethernet interface if the currently
  tracked Ethernet interface is unplugged.
- Disconnecting and restarting provisioning when provisioning is
  lost (e.g., if the default route is deleted).
- Crashing the system server causes Ethernet to reconnect on
  restart.
- The above while running watch -n 0.1 adb shell dumpsys ethernet

(cherry picked from commit 9effed6f9e)

Bug: 62308954
Test: tested on marlin with USB ethernet adapters, as described
Test: smoketested on aosp_bullhead
Change-Id: Ie3041f1d453d15c81eee81adfc8593269c499d79
2017-06-19 12:31:42 +09:00
Lorenzo Colitti
0587321554 Disable the IpManager timeout on Ethernet.
This fixes a longstanding bug where after a DHCP timeout, we
would never restart the DHCP client and get an IP address until
the link bounced.

Also, two minor improvements:

1. Dump IpManager info when dump() is called.
2. When onLinkPropertiesChange is called, also update
   mLinkProperties. We were already sending the updated
   LinkProperties to the NetworkAgent, so this is really only
   useful for dump(), but it's just one line and safe because
   onLinkPropertiesChange already grabs the lock.

Bug: 17733693
Change-Id: I42c3319cb4bc151c547ed721baf5e83f97e23862
2016-04-29 19:57:43 +09:00
Erik Kline
5774ef5328 Use more IpManager features
- WaitForProvisioningCallback
    - setHttpProxy
    - setTcpBufferSizes

Bug: 26991160
Change-Id: I5e02039a35006f0466fb40c43805f0443cd758c2
2016-02-22 17:41:12 +09:00
Erik Kline
1cb0138ad3 Use IpManager on Ethernet
Bug: 17733693
Bug: 26991160
Change-Id: Idaee8c64bf452e58b93031d8d7ad666edb0c82ae
2016-02-17 22:19:22 +09:00
Lorenzo Colitti
189063ffb0 Stop requiring CHANGE_NETWORK_STATE to change Ethernet config.
Requiring CHANGE_NETWORK_STATE is pointless, since immediately
after doing that we require CONNECTIVITY_INTERNAL, which is
a system-only permission.

Bug: 23597341
Change-Id: If4c8ecbb319e547c2c81d2dcc3c7bbb63e0bc2af
2015-10-15 16:59:07 +09:00
Lorenzo Colitti
baabe41348 Don't crash on startup if we can't fetch the interface list.
The intent of the code was to catch exceptions, but it wasn't
actually doing that because when a netd command fails we get an
IllegalStateException, not a RemoteException.

Bug: 23581852
Change-Id: I66c7c33bdc7b0d0de4fa5cd92dff054797cf860f
2015-09-08 16:21:52 +09:00
Billy Lau
824a0a5050 Bug: 21588539 Move CHANGE_NETWORK_STATE to be in SYSTEM_SETTINGS
Replaced the method where we used to enforce static permission
CHANGE_NETWORK_STATE to method calls that also check for WRITE_SETTINGS.
This is due to the merging of CHANGE_NETWORK_STATE permission with
WRITE_SETTINGS in M.

Change-Id: I104ac41733663b4f6b5cd30e7314574ec4acdc07
2015-08-07 19:00:49 +01:00
Lorenzo Colitti
9830ae6d92 Stop DHCP if it times out.
This was not necessary in L, but it is necessary after
https://partner-android-review.googlesource.com/#/c/205415/ .

Bug: 22936203
Change-Id: I24a96c33e5bb375f36217a1c2cec2076eb5ac8b4
2015-08-04 14:54:10 +09:00
Pierre Couillaud
b1d214c5a5 am 566e12ad: eth: make sure dhcp is stopped before bringing up interface.
* commit '566e12ad11445a4b90d615fd823b53a2c1eba9be':
  eth: make sure dhcp is stopped before bringing up interface.
2015-02-16 07:58:48 +00:00
Pierre Couillaud
566e12ad11 eth: make sure dhcp is stopped before bringing up interface.
Signed-off-by: Pierre Couillaud <pierre@broadcom.com>
Signed-off-by: Blair Prescott <blairp@broadcom.com>
2015-02-11 11:31:22 -08:00
Jaewan Kim
f4740f2d37 Add an API to check availability of Ethernet interface.
Bug: 18045481
Change-Id: I3fb517c3e7fa807e2937fda92026301e312be986
2014-11-19 11:13:41 +09:00
Lorenzo Colitti
272be52cb7 Clear all Ethernet state when our interface goes away.
Previously we did not stop DHCP or try to force a disconnect.
This made it impossible to reconnect by unplugging and
replugging an USB Ethernet adapter.

Bug: 17736828
Change-Id: Idd8576a96b063b5ca726ee9149800bdcb0f62bd1
2014-10-01 13:52:40 +09:00
Robert Greenwalt
cf0f619a50 Don't accept score below 0.
Network Factories are allowed to go below, but networks need to be
constrained.  Allowing the network to go below 0 meant that -1 could
sometimes leak through and foul the logic.

bug:17361330
Change-Id: Ife34ca0f9c233dd3c3df80f6fea580af43afcdeb
2014-09-10 10:06:32 -07:00
Robert Greenwalt
eee07beb92 Use config resource for tcp buffer size
bug:16549611
Change-Id: I48426f6b746e4bd9729bdd529d81b163ff5112a9
2014-08-21 16:28:18 -07:00