Merge "Add NDK API for getprocnetwork"
This commit is contained in:
@@ -227,6 +227,7 @@ cc_library_shared {
|
|||||||
shared_libs: [
|
shared_libs: [
|
||||||
"android.hardware.memtrack-V1-ndk_platform",
|
"android.hardware.memtrack-V1-ndk_platform",
|
||||||
"libandroidicu",
|
"libandroidicu",
|
||||||
|
"libandroid_net",
|
||||||
"libbpf_android",
|
"libbpf_android",
|
||||||
"libnetdbpf",
|
"libnetdbpf",
|
||||||
"libnetdutils",
|
"libnetdutils",
|
||||||
|
|||||||
@@ -274,6 +274,7 @@ LIBANDROID {
|
|||||||
ATrace_endAsyncSection; # introduced=29
|
ATrace_endAsyncSection; # introduced=29
|
||||||
ATrace_setCounter; # introduced=29
|
ATrace_setCounter; # introduced=29
|
||||||
android_getaddrinfofornetwork; # introduced=23
|
android_getaddrinfofornetwork; # introduced=23
|
||||||
|
android_getprocnetwork; # introduced=31
|
||||||
android_setprocnetwork; # introduced=23
|
android_setprocnetwork; # introduced=23
|
||||||
android_setsocknetwork; # introduced=23
|
android_setsocknetwork; # introduced=23
|
||||||
android_res_cancel; # introduced=29
|
android_res_cancel; # introduced=29
|
||||||
|
|||||||
@@ -14,6 +14,8 @@ LIBANDROID_NET {
|
|||||||
android_res_nquery; # llndk
|
android_res_nquery; # llndk
|
||||||
android_res_nresult; # llndk
|
android_res_nresult; # llndk
|
||||||
android_res_nsend; # llndk
|
android_res_nsend; # llndk
|
||||||
|
# These functions have been part of the NDK since API 31.
|
||||||
|
android_getprocnetwork; # llndk
|
||||||
local:
|
local:
|
||||||
*;
|
*;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -22,12 +22,13 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <sys/limits.h>
|
#include <sys/limits.h>
|
||||||
|
|
||||||
|
// This value MUST be kept in sync with the corresponding value in
|
||||||
|
// the android.net.Network#getNetworkHandle() implementation.
|
||||||
|
static const uint32_t kHandleMagic = 0xcafed00d;
|
||||||
|
static const uint32_t kHandleMagicSize = 32;
|
||||||
|
|
||||||
static int getnetidfromhandle(net_handle_t handle, unsigned *netid) {
|
static int getnetidfromhandle(net_handle_t handle, unsigned *netid) {
|
||||||
static const uint32_t k32BitMask = 0xffffffff;
|
static const uint32_t k32BitMask = 0xffffffff;
|
||||||
// This value MUST be kept in sync with the corresponding value in
|
|
||||||
// the android.net.Network#getNetworkHandle() implementation.
|
|
||||||
static const uint32_t kHandleMagic = 0xcafed00d;
|
|
||||||
|
|
||||||
// Check for minimum acceptable version of the API in the low bits.
|
// Check for minimum acceptable version of the API in the low bits.
|
||||||
if (handle != NETWORK_UNSPECIFIED &&
|
if (handle != NETWORK_UNSPECIFIED &&
|
||||||
@@ -41,6 +42,12 @@ static int getnetidfromhandle(net_handle_t handle, unsigned *netid) {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static net_handle_t gethandlefromnetid(unsigned netid) {
|
||||||
|
if (netid == NETID_UNSET) {
|
||||||
|
return NETWORK_UNSPECIFIED;
|
||||||
|
}
|
||||||
|
return (((net_handle_t) netid) << kHandleMagicSize) | kHandleMagic;
|
||||||
|
}
|
||||||
|
|
||||||
int android_setsocknetwork(net_handle_t network, int fd) {
|
int android_setsocknetwork(net_handle_t network, int fd) {
|
||||||
unsigned netid;
|
unsigned netid;
|
||||||
@@ -72,6 +79,17 @@ int android_setprocnetwork(net_handle_t network) {
|
|||||||
return rval;
|
return rval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int android_getprocnetwork(net_handle_t *network) {
|
||||||
|
if (network == NULL) {
|
||||||
|
errno = EINVAL;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned netid = getNetworkForProcess();
|
||||||
|
*network = gethandlefromnetid(netid);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int android_getaddrinfofornetwork(net_handle_t network,
|
int android_getaddrinfofornetwork(net_handle_t network,
|
||||||
const char *node, const char *service,
|
const char *node, const char *service,
|
||||||
const struct addrinfo *hints, struct addrinfo **res) {
|
const struct addrinfo *hints, struct addrinfo **res) {
|
||||||
|
|||||||
Reference in New Issue
Block a user