android_packages_modules_Co.../staticlibs/native
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Patrick Rohr 0eaec731ec Add native call to retrieve driver name via ethtool API
This adds a JNI function to retrieve an interface's driver name via
ethtool API, which will be used to identify USB NCM interfaces.

Unfortunately, SIOCETHTOOL (ETHTOOL_GDRVINFO in particular) does not
allow passing in the interface index, meaning that this operation is
racy, i.e. the interface might have been replaced when
getDriverNameForInterface() is called.

SICOETHTOOL is slowly being replaced by a netlink alternative that
allows querying by interface index but, unfortunately, does not support
ETHTOOL_GDRVINFO yet.

Test: verified manually; automated test will be added shortly.
Flag: EXEMPT mainline
Bug: 1000001
Change-Id: I8bec47e36a607e7d8fe2fac2eebcd8dff0360a02
2025-06-09 14:54:38 -07:00
..
bpfmapjni Don't crash the system server when a misconfigured agent adds a DSCP policy 2025-03-19 08:24:45 -07:00
bpfutiljni [DON'T BLOCK] Test ownership migration rules 2024-01-31 12:34:50 +00:00
ip_checksum [DON'T BLOCK] Test ownership migration rules 2024-01-31 12:34:50 +00:00
netjniutils [DON'T BLOCK] Test ownership migration rules 2024-01-31 12:34:50 +00:00
nettestutils [DON'T BLOCK] Test ownership migration rules 2024-01-31 12:34:50 +00:00
serviceconnectivityjni Add native call to retrieve driver name via ethtool API 2025-06-09 14:54:38 -07:00
tcutils TcUtils: allow ignoring netlink error code ENOENT 2025-02-06 12:56:09 -08:00
README.md doc: echo >> staticlibs/native/README.md 2024-08-20 19:52:18 -07:00

JNI

As a general rule, jarjar every static library dependency used in a mainline module into the modules's namespace (especially if it is also used by other modules)

Fully-qualified name of java class needs to be hard-coded into the JNI .so, because JNI_OnLoad does not take any parameters. This means that there needs to be a different .so target for each post-jarjared package, so for each module.

This is the guideline to provide JNI library shared with modules:

  • provide a common java library in frameworks/libs/net with the Java class (e.g. BpfMap.java).

  • provide a common native library in frameworks/libs/net with the JNI and provide the native register function with class_name parameter. See register_com_android_net_module_util_BpfMap function in frameworks/libs/net/common/native/bpfmapjni/com_android_net_module_util_BpfMap.cpp as an example.

When you want to use JNI library from frameworks/lib/net:

  • Each module includes the java library (e.g. net-utils-device-common-bpf) and applies its jarjar rules after build.

  • Each module creates a native library in their directory, which statically links against the common native library (e.g. libnet_utils_device_common_bpf), and calls the native registered function by hardcoding the post-jarjar class_name. Linkage MUST be static because common functions in the file (e.g., register_com_android_net_module_util_BpfMap) will appear in the library (.so) file, and different versions of the library loaded in the same process by different modules will in general have different versions. It's important that each of these libraries loads the common function from its own library. Static linkage should guarantee this because static linkage resolves symbols at build time, not runtime.