diff options
author | Lalit Kansara <lkansara@codeaurora.org> | 2018-03-12 19:44:12 +0530 |
---|---|---|
committer | Lalit Kansara <lkansara@codeaurora.org> | 2018-03-14 13:59:56 +0530 |
commit | dfa81fff1f5de98a19c3069a0b6fe230f4008e02 (patch) | |
tree | f473b6472d23838fdc6c6d93a12a49a9f45151ba | |
parent | 1f6a51cd7c680987a533de0c4cf3f04fc0d19be9 (diff) | |
parent | efa6e614ef66851e2491a18485529ae2bd869201 (diff) | |
download | android_hardware_ril-dfa81fff1f5de98a19c3069a0b6fe230f4008e02.tar.gz android_hardware_ril-dfa81fff1f5de98a19c3069a0b6fe230f4008e02.tar.bz2 android_hardware_ril-dfa81fff1f5de98a19c3069a0b6fe230f4008e02.zip |
P PPR1.180311.001 merge efa6e614ef66851e2491a18485529ae2bd869201 - conflicts
Change-Id: Ic355831b6ed1119238f0ea9c4cd7387408f48cc3
-rw-r--r-- | CleanSpec.mk | 2 | ||||
-rw-r--r-- | reference-ril/OWNERS | 9 | ||||
-rw-r--r-- | reference-ril/reference-ril.c | 115 | ||||
-rw-r--r-- | rild/Android.mk | 7 | ||||
-rw-r--r-- | rild/rild.c | 5 | ||||
-rw-r--r-- | rild/rild.legacy.rc | 5 | ||||
-rw-r--r-- | rild/rild.rc | 2 |
7 files changed, 126 insertions, 19 deletions
diff --git a/CleanSpec.mk b/CleanSpec.mk index cca8c69..e6a3da7 100644 --- a/CleanSpec.mk +++ b/CleanSpec.mk @@ -54,3 +54,5 @@ $(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/lib/libril.so) $(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/lib64/libril.so) $(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/lib/librilutils.so) $(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/lib64/librilutils.so) +$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/vendor/etc/init/rild.rc) +$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/etc/init/rild.rc) diff --git a/reference-ril/OWNERS b/reference-ril/OWNERS new file mode 100644 index 0000000..98dba3e --- /dev/null +++ b/reference-ril/OWNERS @@ -0,0 +1,9 @@ +amitmahajan@google.com +jackyu@google.com +rgreenwalt@google.com +fionaxu@google.com +jminjie@google.com +mpq@google.com +shuoq@google.com +refuhoo@google.com +bohu@google.com diff --git a/reference-ril/reference-ril.c b/reference-ril/reference-ril.c index 1ba2508..4697f90 100644 --- a/reference-ril/reference-ril.c +++ b/reference-ril/reference-ril.c @@ -34,10 +34,14 @@ #include "misc.h" #include <getopt.h> #include <sys/socket.h> +#include <cutils/properties.h> #include <cutils/sockets.h> -#include <sys/system_properties.h> #include <termios.h> #include <qemu_pipe.h> +#include <sys/wait.h> +#include <stdbool.h> +#include <net/if.h> +#include <netinet/in.h> #include "ril.h" @@ -357,6 +361,55 @@ static int parseSimResponseLine(char* line, RIL_SIM_IO_Response* response) { return 0; } +enum InterfaceState { + kInterfaceUp, + kInterfaceDown, +}; + +static RIL_Errno setInterfaceState(const char* interfaceName, + enum InterfaceState state) { + struct ifreq request; + int status = 0; + int sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP); + if (sock == -1) { + RLOGE("Failed to open interface socket: %s (%d)", + strerror(errno), errno); + return RIL_E_GENERIC_FAILURE; + } + + memset(&request, 0, sizeof(request)); + strncpy(request.ifr_name, interfaceName, sizeof(request.ifr_name)); + request.ifr_name[sizeof(request.ifr_name) - 1] = '\0'; + status = ioctl(sock, SIOCGIFFLAGS, &request); + if (status != 0) { + RLOGE("Failed to get interface flags for %s: %s (%d)", + interfaceName, strerror(errno), errno); + close(sock); + return RIL_E_RADIO_NOT_AVAILABLE; + } + + bool isUp = (request.ifr_flags & IFF_UP); + if ((state == kInterfaceUp && isUp) || (state == kInterfaceDown && !isUp)) { + // Interface already in desired state + close(sock); + return RIL_E_SUCCESS; + } + + // Simply toggle the flag since we know it's the opposite of what we want + request.ifr_flags ^= IFF_UP; + + status = ioctl(sock, SIOCSIFFLAGS, &request); + if (status != 0) { + RLOGE("Failed to set interface flags for %s: %s (%d)", + interfaceName, strerror(errno), errno); + close(sock); + return RIL_E_GENERIC_FAILURE; + } + + close(sock); + return RIL_E_SUCCESS; +} + /** do post-AT+CFUN=1 initialization */ static void onRadioPowerOn() { @@ -511,13 +564,18 @@ static void requestCallSelection( RIL_onRequestComplete(t, RIL_E_SUCCESS, NULL, 0); } -static bool hasWifi() +static bool hasWifiCapability() { char propValue[PROP_VALUE_MAX]; - return __system_property_get("ro.kernel.qemu.wifi", propValue) != 0 && + return property_get("ro.kernel.qemu.wifi", propValue, "") > 0 && strcmp("1", propValue) == 0; } +static const char* getRadioInterfaceName(bool hasWifi) +{ + return hasWifi ? PPP_TTY_PATH_RADIO0 : PPP_TTY_PATH_ETH0; +} + static void requestOrSendDataCallList(RIL_Token *t) { ATResponse *p_response; @@ -526,7 +584,8 @@ static void requestOrSendDataCallList(RIL_Token *t) int n = 0; char *out; char propValue[PROP_VALUE_MAX]; - bool has_wifi = hasWifi(); + bool hasWifi = hasWifiCapability(); + const char* radioInterfaceName = getRadioInterfaceName(hasWifi); err = at_send_command_multiline ("AT+CGACT?", "+CGACT:", &p_response); if (err != 0 || p_response->success == 0) { @@ -632,15 +691,9 @@ static void requestOrSendDataCallList(RIL_Token *t) if (err < 0) goto error; - if (has_wifi) { - int ifname_size = strlen(PPP_TTY_PATH_RADIO0) + 1; - responses[i].ifname = alloca(ifname_size); - strlcpy(responses[i].ifname, PPP_TTY_PATH_RADIO0, ifname_size); - } else { - int ifname_size = strlen(PPP_TTY_PATH_ETH0) + 1; - responses[i].ifname = alloca(ifname_size); - strlcpy(responses[i].ifname, PPP_TTY_PATH_ETH0, ifname_size); - } + int ifname_size = strlen(radioInterfaceName) + 1; + responses[i].ifname = alloca(ifname_size); + strlcpy(responses[i].ifname, radioInterfaceName, ifname_size); err = at_tok_nextstr(&line, &out); if (err < 0) @@ -673,7 +726,7 @@ static void requestOrSendDataCallList(RIL_Token *t) snprintf(propName, sizeof propName, "net.eth0.dns%d", nn); /* Ignore if undefined */ - if (__system_property_get(propName, propValue) == 0) { + if (property_get(propName, propValue, "") <= 0) { continue; } @@ -687,7 +740,13 @@ static void requestOrSendDataCallList(RIL_Token *t) /* There is only one gateway in the emulator. If WiFi is * configured the interface visible to RIL will be behind a NAT * where the gateway is different. */ - responses[i].gateways = has_wifi ? "192.168.200.1" : "10.0.2.2"; + if (hasWifi) { + responses[i].gateways = "192.168.200.1"; + } else if (property_get("net.eth0.gw", propValue, "") > 0) { + responses[i].gateways = propValue; + } else { + responses[i].gateways = ""; + } responses[i].mtu = DEFAULT_MTU; } else { @@ -1141,7 +1200,7 @@ static void requestCdmaBaseBandVersion(int request __unused, void *data __unused free(responseStr); } -static void requestCdmaDeviceIdentity(int request __unused, void *data __unused, +static void requestDeviceIdentity(int request __unused, void *data __unused, size_t datalen __unused, RIL_Token t) { int err; @@ -1165,7 +1224,11 @@ static void requestCdmaDeviceIdentity(int request __unused, void *data __unused, RIL_onRequestComplete(t, RIL_E_GENERIC_FAILURE, NULL, 0); return; } else { - responseStr[3] = p_response->p_intermediates->line; + if (TECH_BIT(sMdmInfo) == MDM_CDMA) { + responseStr[3] = p_response->p_intermediates->line; + } else { + responseStr[0] = p_response->p_intermediates->line; + } } RIL_onRequestComplete(t, RIL_E_SUCCESS, responseStr, count*sizeof(char*)); @@ -1951,6 +2014,11 @@ static void requestSetupDataCall(void *data, size_t datalen, RIL_Token t) if (qmistatus < 0) goto error; } else { + bool hasWifi = hasWifiCapability(); + const char* radioInterfaceName = getRadioInterfaceName(hasWifi); + if (setInterfaceState(radioInterfaceName, kInterfaceUp) != RIL_E_SUCCESS) { + goto error; + } if (datalen > 6 * sizeof(char *)) { pdp_type = ((const char **)data)[6]; @@ -1994,6 +2062,14 @@ error: } +static void requestDeactivateDataCall(RIL_Token t) +{ + bool hasWifi = hasWifiCapability(); + const char* radioInterfaceName = getRadioInterfaceName(hasWifi); + RIL_Errno rilErrno = setInterfaceState(radioInterfaceName, kInterfaceDown); + RIL_onRequestComplete(t, rilErrno, NULL, 0); +} + static void requestSMSAcknowledge(void *data, size_t datalen __unused, RIL_Token t) { int ackSuccess; @@ -2441,6 +2517,9 @@ onRequest (int request, void *data, size_t datalen, RIL_Token t) case RIL_REQUEST_SETUP_DATA_CALL: requestSetupDataCall(data, datalen, t); break; + case RIL_REQUEST_DEACTIVATE_DATA_CALL: + requestDeactivateDataCall(t); + break; case RIL_REQUEST_SMS_ACKNOWLEDGE: requestSMSAcknowledge(data, datalen, t); break; @@ -2648,7 +2727,7 @@ onRequest (int request, void *data, size_t datalen, RIL_Token t) break; case RIL_REQUEST_DEVICE_IDENTITY: - requestCdmaDeviceIdentity(request, data, datalen, t); + requestDeviceIdentity(request, data, datalen, t); break; case RIL_REQUEST_CDMA_SUBSCRIPTION: diff --git a/rild/Android.mk b/rild/Android.mk index 19eba74..f8220a8 100644 --- a/rild/Android.mk +++ b/rild/Android.mk @@ -30,6 +30,13 @@ LOCAL_MODULE_RELATIVE_PATH := hw LOCAL_PROPRIETARY_MODULE := true LOCAL_MODULE:= rild +ifeq ($(PRODUCT_COMPATIBLE_PROPERTY),true) +LOCAL_INIT_RC := rild.rc +LOCAL_CFLAGS += -DPRODUCT_COMPATIBLE_PROPERTY +else +LOCAL_INIT_RC := rild.legacy.rc +endif + include $(BUILD_EXECUTABLE) endif diff --git a/rild/rild.c b/rild/rild.c index 685ef70..c554a9f 100644 --- a/rild/rild.c +++ b/rild/rild.c @@ -35,8 +35,13 @@ #include <sys/types.h> #include <libril/ril_ex.h> +#if defined(PRODUCT_COMPATIBLE_PROPERTY) +#define LIB_PATH_PROPERTY "vendor.rild.libpath" +#define LIB_ARGS_PROPERTY "vendor.rild.libargs" +#else #define LIB_PATH_PROPERTY "rild.libpath" #define LIB_ARGS_PROPERTY "rild.libargs" +#endif #define MAX_LIB_ARGS 16 static void usage(const char *argv0) { diff --git a/rild/rild.legacy.rc b/rild/rild.legacy.rc new file mode 100644 index 0000000..b27e1da --- /dev/null +++ b/rild/rild.legacy.rc @@ -0,0 +1,5 @@ +service ril-daemon /vendor/bin/hw/rild + class main + user radio + group radio cache inet misc audio log readproc wakelock + capabilities BLOCK_SUSPEND NET_ADMIN NET_RAW diff --git a/rild/rild.rc b/rild/rild.rc index b27e1da..f6beb54 100644 --- a/rild/rild.rc +++ b/rild/rild.rc @@ -1,4 +1,4 @@ -service ril-daemon /vendor/bin/hw/rild +service vendor.ril-daemon /vendor/bin/hw/rild class main user radio group radio cache inet misc audio log readproc wakelock |