From ec94b828fe29a51c5fc4afa542e3f4430d2e238b Mon Sep 17 00:00:00 2001 From: Nathan Harold Date: Thu, 25 May 2017 16:10:35 -0700 Subject: Keepalive RIL Interface Interface definition for requesting and managing keepalive packet offload to the modem. Bug: 33277538 Test: tbd Change-Id: Id42b8802750ca376d1d50431dec670f25c607174 (cherry picked from commit 6942b212a92d9d05a8100306acf9ea855818eb8d) --- include/telephony/ril.h | 74 +++++++++++++++++++++++++++++++++++++++++++++++++ libril/ril_service.cpp | 16 +++++++++++ 2 files changed, 90 insertions(+) diff --git a/include/telephony/ril.h b/include/telephony/ril.h index 277878a..b65b2f6 100644 --- a/include/telephony/ril.h +++ b/include/telephony/ril.h @@ -5766,6 +5766,43 @@ typedef struct { */ #define RIL_REQUEST_STOP_NETWORK_SCAN 143 +/** + * RIL_REQUEST_START_KEEPALIVE + * + * Start a keepalive session + * + * Request that the modem begin sending keepalive packets on a particular + * data call, with a specified source, destination, and format. + * + * "data" is a const RIL_RequestKeepalive + * "response" is RIL_KeepaliveStatus with a valid "handle" + * + * Valid errors: + * SUCCESS + * NO_RESOURCES + * INVALID_ARGUMENTS + * + */ +#define RIL_REQUEST_START_KEEPALIVE 144 + +/** + * RIL_REQUEST_STOP_KEEPALIVE + * + * Stops an ongoing keepalive session + * + * Requests that a keepalive session with the given handle be stopped. + * there is no parameter for this request. + * + * "data" is an integer handle + * "response" is NULL + * + * Valid errors: + * SUCCESS + * INVALID_ARGUMENTS + * + */ +#define RIL_REQUEST_STOP_KEEPALIVE 145 + /***********************************************************************/ /** @@ -6442,6 +6479,14 @@ typedef struct { */ #define RIL_UNSOL_NETWORK_SCAN_RESULT 1049 +/** + * RIL_UNSOL_KEEPALIVE_STATUS + * + * "data" is NULL + * "response" is a const RIL_KeepaliveStatus * + */ +#define RIL_UNSOL_KEEPALIVE_STATUS 1050 + /***********************************************************************/ @@ -6602,6 +6647,35 @@ typedef struct { loosely defined in LTE Layer 3 spec 24.008 */ } RIL_PCO_Data; +typedef enum { + NATT_IPV4 = 0, /* Keepalive specified by RFC 3948 Sec. 2.3 using IPv4 */ + NATT_IPV6 = 1 /* Keepalive specified by RFC 3948 Sec. 2.3 using IPv6 */ +} RIL_KeepaliveType; + +#define MAX_INADDR_LEN 16 +typedef struct { + RIL_KeepaliveType type; /* Type of keepalive packet */ + char sourceAddress[MAX_INADDR_LEN]; /* Source address in network-byte order */ + int sourcePort; /* Source port if applicable, or 0x7FFFFFFF; + the maximum value is 65535 */ + char destinationAddress[MAX_INADDR_LEN]; /* Destination address in network-byte order */ + int destinationPort; /* Destination port if applicable or 0x7FFFFFFF; + the maximum value is 65535 */ + int maxKeepaliveIntervalMillis; /* Maximum milliseconds between two packets */ + int cid; /* Context ID, uniquely identifies this call */ +} RIL_KeepaliveRequest; + +typedef enum { + KEEPALIVE_ACTIVE, /* Keepalive session is active */ + KEEPALIVE_INACTIVE, /* Keepalive session is inactive */ + KEEPALIVE_PENDING /* Keepalive session status not available */ +} RIL_KeepaliveStatusCode; + +typedef struct { + uint32_t sessionHandle; + RIL_KeepaliveStatusCode code; +} RIL_KeepaliveStatus; + #ifdef RIL_SHLIB struct RIL_Env { /** diff --git a/libril/ril_service.cpp b/libril/ril_service.cpp index a8bf9de..a6baf3c 100644 --- a/libril/ril_service.cpp +++ b/libril/ril_service.cpp @@ -42,6 +42,7 @@ using ::android::hardware::hidl_string; using ::android::hardware::hidl_vec; using ::android::hardware::hidl_array; using ::android::hardware::radio::V1_1::NetworkScanRequest; +using ::android::hardware::radio::V1_1::KeepaliveRequest; using ::android::hardware::Void; using android::CommandInfo; using android::RequestInfo; @@ -439,6 +440,10 @@ struct RadioImpl : public V1_1::IRadio { Return setIndicationFilter(int32_t serial, int32_t indicationFilter); + Return startKeepalive(int32_t serial, const KeepaliveRequest& keepalive); + + Return stopKeepalive(int32_t serial, int32_t sessionHandle); + Return setSimCardPower(int32_t serial, bool powerUp); Return setSimCardPower_1_1(int32_t serial, const V1_1::CardPowerState state); @@ -2814,6 +2819,17 @@ Return RadioImpl::setCarrierInfoForImsiEncryption(int32_t serial, return Void(); } +Return RadioImpl::startKeepalive(int32_t serial, const KeepaliveRequest& keepalive) { + RLOGD("startKeepalive: serial %d", serial); + return Void(); +} + +Return RadioImpl::stopKeepalive(int32_t serial, int32_t sessionHandle) { + RLOGD("stopKeepalive: serial %d", serial); + return Void(); +} + + /*************************************************************************************************** * RESPONSE FUNCTIONS * Functions above are used for requests going from framework to vendor code. The ones below are -- cgit v1.2.3