Commit graph android_packages_modules_Co.../netbpfload/NetBpfLoad.cpp
Message SHA1
NetBpfLoad: change condition for when we execute platform bpfloader
Note that 'true iff U QPR3 or V+' comment is subtle.

netbpfload.35rc runs netbpfload as 'root' uid, so V+ is obvious.

However, netbpfload.33rc runs netbpfload as 'system' uid, so one
would think that this isn't true on T/U.

However the U QPR2 and U QPR3 'service bpfloader' actually run
platform netbpfload, and the U QPR3 platform netbpfload immediately
executes the apex provided netbpfload...

Once the apex netbpfload finishes mainline init is considered
'done', and thus we won't (need to) start service mdnsd_netbpfload.

As a result even on U QPR3, we never run netbpfload as system uid.

Test: TreeHugger
Change-Id: I02661dff07c317394a9d8ba3d48e4cb9cd694fd0
Signed-off-by: Maciej Żenczykowski <maze@google.com>

Maciej Żenczykowski   commited 2024-06-14 05:48:49 -07:00
15f9731efc
introduce BPFLOADER_MAINLINE_U_QPR3_VERSION
Note: this is technically a little bit early,
as U QPR3 still runs netbpfload as 'system' uid by virtue of
netbpfload.33rc overriding 'service bpfloader',
but this will change in a followup, at which point U QPR3
will become special by virtue of always using mainline netbpfload

See: https://android.googlesource.com/platform/packages/modules/Connectivity/+/refs/heads/android14-qpr3-release/netbpfload/NetBpfLoad.cpp#262

Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I0f52d1e78652501c8601227c4740d9b34673bf5f

Maciej Żenczykowski   commited 2024-06-13 15:38:33 -07:00
1a3b54f005
NetBpfLoad: log bpfloader_ver
since this is dynamic, it seems like a useful thing to log

Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I073e76ab54b4f2182c9b5c2b128425a5294ed50a

Maciej Żenczykowski   commited 2024-06-13 15:38:33 -07:00
6295614bc8
NetBpfLoad: change condition for writing 'unprivileged_bpf_disabled' sysctl
(and add a few more comments for what access is needed in general)

Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I2aa596f4f2d34179bb36360ad1c9a795fbb97d0d

Maciej Żenczykowski   commited 2024-06-13 15:26:55 -07:00
48e476bdfa
NetBpfLoad: remove android_get_application_target_sdk_version()
This isn't actually useful as it is apparently always just 10000

Test: TreeHugger
Change-Id: Ibf625150ee8f964a386a5e9f15e0552d611ce927
Signed-off-by: Maciej Żenczykowski <maze@google.com>

Maciej Żenczykowski   commited 2024-06-13 15:26:55 -07:00
6a16741152
move V+ kernel/arch/bitness checks from BpfHandler to NetBpfLoad
Mainline netbpfload is mandatory on V+, so it matters little
whether we perform the checks in it, or in BpfHandler
(which runs as part of netd startup via libnetd_updatable.so),
and this avoids the need to reimplement isTV() opt-out.

Bug: 333970930
Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I599f2c9d6710f0caa2cd71f0946459d43ddbfc17

Maciej Żenczykowski   commited 2024-06-02 22:28:35 +00:00
c834fdb760
NetBpfLoad: TV - don't abort boot on unsupported kernel/arch/bitness
Android TV OEMs & vendors are more interested in keeping costs down
rather than keeping networking functional.

Considering this probably mostly affects more advanced networking,
like VPNs and/or network statistics, it may be an acceptable trade off.

Bug: 333970930
Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I7bf8d1bbd87b7af4f7c98372b6c1d3d3be62a600

Maciej Żenczykowski   commited 2024-05-30 11:10:06 +00:00
68eab8928b
Merge "Revert "NetBpfLoad: slow down V boot on unsupported kernels"" into main
Treehugger Robot   authored and   Gerrit Code Review   commited 2024-05-28 18:28:54 +00:00
d637e21917
Revert "NetBpfLoad: slow down V boot on unsupported kernels"
This reverts commit 75caacdd10.

Reason for revert: The policy is already checked in VTS. It seems delaying the boot is out-of-scope for NetBpfLoad.

Change-Id: I12cec43dc2efb90ae35ccda7203317d198054d0e

Rishi Sikka   authored and   Gerrit Code Review   commited 2024-05-28 16:55:49 +00:00
9cfccad9b7
Merge "NetBpfLoad: log on success" into main
Maciej Żenczykowski   authored and   Gerrit Code Review   commited 2024-05-21 18:04:10 +00:00
e6a863a002
NetBpfLoad: log on success
Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I9266822e83a42910a43b765ad9693835a6897b6c

Maciej Żenczykowski   commited 2024-05-20 12:52:21 -07:00
66f1629a52
NetBpfLoad: slow down V boot on unsupported kernels
(such kernels are already in violation of VTS)

I don't quite want to break boot, but I figure a slow
boot will result in devices getting fixed rather than
released with ancient/unsupported/buggy kernels...

Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: Ia2cf550f661ce468acbc5ecff0ce5b6fa16b0e3a

Maciej Żenczykowski   commited 2024-05-20 12:02:47 +00:00
75caacdd10
NetBpfLoad: support 'done' finalization step
Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I9bb97549838980fb4c9a26bfcc4689aac0e73a97

Maciej Żenczykowski   commited 2024-04-30 23:59:51 -07:00
6d151ef0e9
NetBpfLoad: reduce log severity of 2 more messages
Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: Idb0cae4c8c09d18ef77325f6aa448ce5359fb617

Maciej Żenczykowski   commited 2024-04-30 12:00:18 +00:00
5c057ed065
NetBpfLoad: remove exists log
Not actually needed, we already log the result.

Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I8391825cb5171162afb9bdf8fdf695d9f85693cb

Maciej Żenczykowski   commited 2024-04-30 10:10:12 +00:00
731acfe233
NetBpfLoad: log on non-LTS or too old LTS kernel version
minimum versions chosen to match:
  //system/netd/tests/kernel_test.cpp
  //kernel/tests/net/test/kernel_feature_test.py

Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: Ife6900333d97181765460c16676172bf05f8fd5f

Maciej Żenczykowski   commited 2024-04-26 22:27:33 +00:00
c982a4be64
NetBpfLoad: one less startup log line
Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: Ia15d46aeee3e3803f4134daac6b001afbd58d5b5

Maciej Żenczykowski   commited 2024-04-26 22:27:26 +00:00
4e5fb4a153
NetBpfLoad: add describeArch() to log
Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I959caf62dbf06b8a4fcac1e33a6e540b879b398e

Maciej Żenczykowski   commited 2024-04-26 22:27:11 +00:00
8b74cbb34b
NetBpfLoad: move into android namespace
Change-Id: I5f841f796e49eebbf882b769cecf352b76800cf5

Maciej Żenczykowski   commited 2024-04-25 14:26:50 -07:00
75c2def0ea
NetBpfLoad: use exec path for api level 35+ (ie. V)
Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I075b2a6166454d36599b0ecc25ccaeec545d183c

Maciej Żenczykowski   commited 2024-04-15 02:13:56 -07:00
3218a81a57
NetBpfLoad: rework mainline bpf execution codepath
(for now for better testing we don't make V special)

Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: Id2835bd393c0ec9e1710644681bc5aab0d7d2aae

Maciej Żenczykowski   commited 2024-03-19 21:45:21 +00:00
732a14164f
NetBpfLoad: enable mainline on T+
Note:
   2 == BPFLOADER_S_VERSION
  19 == BPFLOADER_T_VERSION
  25 == BPFLOADER_OBJ_AT_VER_VERSION
  33 == BPFLOADER_IGNORED_ON_VERSION
  37 == BPFLOADER_U_VERSION [*]
  41 == BPFLOADER_V_VERSION [**]
and currently we have:
  42 == BPFLOADER_MAINLINE_VERSION
  43 == BPFLOADER_MAINLINE_T_VERSION
  44 == BPFLOADER_MAINLINE_U_VERSION
  45 == BPFLOADER_MAINLINE_V_VERSION

[*] udc-dev/udc-release are actually 38, as 37 was some earlier
    udc beta2 (2.1 ifirc), and beta3+ switched to 38

[**] 24Q{1,2}-release (ie. U QPR2+) are technically actually 41,
     but their platform bpfloader no longer even looks in /apex/com.android.tethering/etc/bpf/...
     so it doesn't really matter (although 24Q1's platform
     netbpfload still does, however that is obsoleted by
     this change)

Thus we need to (as minimum for NetBpfLoad):
  BPFLOADER_T_VERSION -> BPFLOADER_MAINLINE_T_VERSION
  BPFLOADER_IGNORED_ON_VERSION -> BPFLOADER_MAINLINE_U_VERSION
to cause these to load appropriately from mainline.

One would perhaps also expect (as minimum for NetBpfLoad):
  BPFLOADER_OBJ_AT_VERSION -> BPFLOADER_MAINLINE_U_VERSION
but (as maximum for platform bpfloader):
  BPFLOADER_OBJ_AT_VERSION -> BPFLOADER_MAINLINE_U_VERSION

However, since the goal is actually for those to load via mainline on T+,
(with the 'old' version of the .o's loading on S via platform bpfloader)
thus one actually needs (as minimum for NetBpfLoad):
  BPFLOADER_OBJ_AT_VERSION -> BPFLOADER_MAINLINE_T_VERSION
and (as maximum for platform bpfloader):
  BPFLOADER_OBJ_AT_VERSION -> BPFLOADER_T_VERSION

Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I4b688692ffca0db7ead20cefd9e7e892ca92c70a

Maciej Żenczykowski   commited 2024-03-19 21:33:55 +00:00
11141da623
NetBpfLoad: chose bpfloader version at runtime based on Android OS
Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: Iee55d9c6f828f05d4096dff2e874abc6c41eadeb

Maciej Żenczykowski   commited 2024-03-18 15:02:53 -07:00
65f7022461
NetBpfLoad - change BPFLOADER_VERSION macro into an argument
(in preparation for this being run-time dynamic)

Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: Icac8d1afdd3d55b80c232dd5a124a79a9063f350

Maciej Żenczykowski   commited 2024-03-18 14:40:08 -07:00
221b248c6e
netbpfload: is now *always* mainline
since there is no longer a platform netbpfload...
hence we can simplify

Now:
  git grep 'platformNetBpfLoad|apexNetBpfLoad|is_mainline|is_platform'
comes up empty

Test: TreeHugger, manual
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I834656bc4860386b6463db3f6a898d249a05e3a4

Maciej Żenczykowski   commited 2024-03-08 02:19:09 +00:00
08d4b8c27b
NetBpfLoader: create /sys/fs/bpf/loader dir
(instead of in platform bpfloader)

Better to do it earlier so we can use it for
auto/permanently pinned/attached networking programs.

Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I202e150e6d48e63ba643c1bd2247cefcdebc07a5

Maciej Żenczykowski   commited 2024-02-29 02:02:19 +00:00
a9209da871
netbpfload: fail if platform exec of apex fails
should never fail, since we now have M-2024-1 module prebuilts:
  $ adb shell ls -d /apex/com.android.tethering*
  /apex/com.android.tethering
  /apex/com.android.tethering@341310230

Test: TreeHugger, manually on a Pixel device
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: Ib145fba8e3c47bc300f4589723d9c80749770a19

Maciej Żenczykowski   commited 2024-02-28 01:23:32 -08:00
a0b201c433
netbpfload: V+ x86 require 64-bit kernel
For reasoning see:
  https://android-review.googlesource.com/c/platform/system/netd/+/2966803

Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: If479b0443a64e0bf98ca89016d42ca37e231c576

Maciej Żenczykowski   commited 2024-02-17 03:47:52 +00:00
7f6a42672d
netbpfload: enable on U QPR2 (aka 24Q1)
(this will land in M-2024-05 ie. May mainline tethering module)

Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I250b691eb03751da05ce10d41d6721f4964dd1d5

Maciej Żenczykowski   commited 2024-02-13 00:31:30 +00:00
03ef12cc79
NetBpfLoad - log Tethering Apex version
(super useful for debugging)

Sample output:
  I NetBpfLoad: NetBpfLoad '/apex/com.android.tethering/bin/netbpfload' starting...
  I NetBpfLoad: NetBpfLoad api:10000/34 kver:6010019 platform:0 mainline:1
  D NetBpfLoad: Found Tethering Apex mounted from blockdev /dev/block/dm-55
  I NetBpfLoad: Tethering APEX version 340090000

Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: Iaf1bc22b02913ea21ff9368abd9933e6ef4017f1

Maciej Żenczykowski   commited 2024-02-09 23:31:17 +00:00
b60599b705
netbpfload: use apex version whenever available
Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I8833451acc031b8b2137d23e9a6763851f149081

Maciej Żenczykowski   commited 2024-02-07 01:24:26 +00:00
2fe2db52f6
netbpfload: enable mainline on API V/35+
netbpfload.mainline.rc is derived from:
  initrc-doc/bpfloader-sdk34-14-U.rc,
except that it is 'override' instead of 'updatable' and uses
the apex netbpfload instead of the platform bpfloader.

Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I1ecf14e3d927ece136a0669a9b209be7112e55b5

Maciej Żenczykowski   commited 2024-01-31 22:36:39 +00:00
041be52b08
netbpfload: prep work to support <U
proc file writes were only moved from .rc into bpfloader binary in U.

Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I20eda71d4f4e16130401d1cfff239c7cd8ea9bf6

Maciej Żenczykowski   commited 2023-10-25 18:40:53 +00:00
f33f12876f
execute platform bpfloader after netbpfload is done
Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I447880763bbc506f08b578f862f09be91ab3d14d

Maciej Żenczykowski   commited 2023-10-21 09:20:03 +00:00
58c182291d
move the bpf.progs_loaded = 1 setting back to bpfloader
change of design: we'll call netbpfload before bpfloader

Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I2d7a04a1bf1aa1d163f2b3936e2cde61308c4aa4

Maciej Żenczykowski   commited 2023-10-20 15:18:50 -07:00
3f25b4ba8a
netbpfload: remove support for limiting selinux contexts
No need for this, as we simply only support those selinux
contexts (and directories) which are available to networking.

Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I35b134c57411f82514b9f7148411f83d3aee1927

Maciej Żenczykowski   commited 2023-10-10 03:46:06 -07:00
af07d6db1f
netbpfload: do not create /sys/fs/bpf/loader subdir
(it's already created by the platform bpfloader)

Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: Ie22f585cab17fd2bded3d97a9cfe1019b792b69d

Maciej Żenczykowski   commited 2023-10-10 03:37:14 -07:00
857399114e
netbpfload: remove support for limiting program types
No need for this, as we simply only support network
program types in the first place.

Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I163e21fd4d4089882cf37fc68bc4299003b514d7

Maciej Żenczykowski   commited 2023-10-09 00:32:36 -07:00
fcea70f840
netbpfload: add Android.bp file
Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I3af8e7f14de8dd5dd65c40705195332bef114b88

Maciej Żenczykowski   commited 2023-10-09 00:32:26 -07:00
40dfe53313
netbpfload: update date in copyright messages, LOG_TAGs, etc.
Test: N/A
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I8f83d04266caf930701b9725b457333ddae149f2

Maciej Żenczykowski   commited 2023-10-02 22:40:38 -07:00
283c25a07a
netbpfload: remove support for 'vendor'
Test: N/A
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: If088188b4832d37b084846b5ad3db06b8858d856

Maciej Żenczykowski   commited 2023-10-02 22:35:24 -07:00
d6395205bb
netbpfload: remove support for 'platform'
Test: N/A
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: Ia0c1f55aa78435737699e0dec0bfddbd977e7392

Maciej Żenczykowski   commited 2023-10-02 22:35:03 -07:00
0e4802df20
import bpfloader into p/m/C
These are unmodified files, without history.
Getting these to do something useful will come later.

Generated via:
  cp //system/bpf/bpfloader/bpfloader.rc netbpfload.rc
  cp //system/bpf/bpfloader/BpfLoader.cpp NetBpfLoad.cpp
  cp //system/bpf/libbpf_android/include/libbpf_android.h loader.h
  cp //system/bpf/libbpf_android/Loader.cpp loader.cpp

Change-Id: I1677b899a51e1289a7a9806d6f5c34450b9e7c47

Maciej Żenczykowski   commited 2023-10-02 14:59:10 -07:00
60c159f233