* [PATCH] qmi: call-forwarding: fallback to basic forwarding info if no extended
@ 2024-12-08 11:34 Ivaylo Dimitrov
2024-12-08 12:39 ` [PATCH v2] " Ivaylo Dimitrov
0 siblings, 1 reply; 7+ messages in thread
From: Ivaylo Dimitrov @ 2024-12-08 11:34 UTC (permalink / raw)
To: ofono; +Cc: denkenz, absicsz, merlijn, Ivaylo Dimitrov
At least Motorola Droid 4 does not support extended call forward info, so
fallback to basic
---
drivers/qmimodem/call-forwarding.c | 83 +++++++++++++++++++-----------
1 file changed, 54 insertions(+), 29 deletions(-)
diff --git a/drivers/qmimodem/call-forwarding.c b/drivers/qmimodem/call-forwarding.c
index e7ae3515..13de4eda 100644
--- a/drivers/qmimodem/call-forwarding.c
+++ b/drivers/qmimodem/call-forwarding.c
@@ -21,6 +21,16 @@ struct call_forwarding_data {
struct qmi_service *voice;
};
+struct call_forwarding_info {
+ struct {
+ int8_t active;
+ uint8_t cls;
+ uint8_t len;
+ uint8_t number[];
+ } i;
+ uint8_t time;
+} __attribute__((__packed__));
+
struct call_forwarding_info_ext {
uint8_t active;
uint8_t cls;
@@ -31,7 +41,7 @@ struct call_forwarding_info_ext {
uint8_t plan;
uint8_t len;
uint8_t number[];
-};
+} __attribute__((__packed__));
static int forw_type_to_reason(int type)
{
@@ -78,55 +88,70 @@ static void query_cb(struct qmi_result *result, void *user_data)
ofono_call_forwarding_query_cb_t cb = cbd->cb;
const uint8_t *p;
uint8_t num;
+ const uint8_t *end;
uint16_t length;
-
+ struct ofono_call_forwarding_condition *list = NULL;
+ int i;
+ bool extended = false;
DBG("");
if (qmi_result_set_error(result, NULL))
goto error;
/*
- * we want extended info, because of the number type.
- * FIXME - shall we fallback to 0x10 if there is no extended info?
+ * we want extended info if any, because of the number type.
*/
p = qmi_result_get(result, 0x16, &length);
- if (p && length) {
- struct ofono_call_forwarding_condition *list;
- const uint8_t *end = p + length;
- int i;
+ if (p && length)
+ extended = true;
+ else
+ p = qmi_result_get(result, 0x10, &length);
- num = *p++;
+ if (p && length)
+ extended = false;
+ else
+ goto error;
- list = l_new(struct ofono_call_forwarding_condition, num);
+ end = p + length;
+ num = *p++;
+ list = l_new(struct ofono_call_forwarding_condition, num);
- for (i = 0; i < num; i++) {
- struct call_forwarding_info_ext *info = (void *)p;
+ for (i = 0; i < num; i++) {
+ if (extended) {
+ struct call_forwarding_info_ext *fi = (void *)p;
+ const uint8_t *iend = p + sizeof(*fi);
int type;
- /* do not try to access beyond buffer end */
- if (p + sizeof(*info) > end ||
- p + sizeof(*info) + info->len > end) {
- l_free(list);
+ if (iend > end || iend + fi->len > end)
goto error;
- }
- if (info->type == 1)
- type = OFONO_NUMBER_TYPE_INTERNATIONAL;
- else
- type = OFONO_NUMBER_TYPE_UNKNOWN;
+ type = fi->type == 1 ?
+ OFONO_NUMBER_TYPE_INTERNATIONAL :
+ OFONO_NUMBER_TYPE_UNKNOWN;
+ set_fwd_cond(&list[i], fi->active, fi->cls,
+ fi->time, type, fi->number, fi->len);
- set_fwd_cond(&list[i], info->active, info->cls,
- info->time, type, info->number,
- info->len);
- p += sizeof(*info) + info->len;
- }
+ p += sizeof(*fi) + fi->len;
+ } else {
+ struct call_forwarding_info *fi = (void *)p;
+ const uint8_t *iend = p + sizeof(*fi);
- CALLBACK_WITH_SUCCESS(cb, num, list, cbd->data);
- l_free(list);
- return;
+ if (iend > end || iend + fi->i.len > end)
+ goto error;
+
+ set_fwd_cond(&list[i], fi->i.active, fi->i.cls,
+ fi->time, OFONO_NUMBER_TYPE_UNKNOWN,
+ fi->i.number, fi->i.len);
+ p += sizeof(*fi) + fi->i.len;
+ }
}
+ CALLBACK_WITH_SUCCESS(cb, num, list, cbd->data);
+ l_free(list);
+ return;
+
error:
+ l_free(list);
CALLBACK_WITH_FAILURE(cb, 0, NULL, cbd->data);
}
--
2.25.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v2] qmi: call-forwarding: fallback to basic forwarding info if no extended
2024-12-08 11:34 [PATCH] qmi: call-forwarding: fallback to basic forwarding info if no extended Ivaylo Dimitrov
@ 2024-12-08 12:39 ` Ivaylo Dimitrov
2024-12-11 5:27 ` Denis Kenzior
0 siblings, 1 reply; 7+ messages in thread
From: Ivaylo Dimitrov @ 2024-12-08 12:39 UTC (permalink / raw)
To: ofono; +Cc: denkenz, absicsz, merlijn, Ivaylo Dimitrov
At least Motorola Droid 4 does not support extended call forward info, so
fallback to basic
---
drivers/qmimodem/call-forwarding.c | 81 +++++++++++++++++++-----------
1 file changed, 52 insertions(+), 29 deletions(-)
diff --git a/drivers/qmimodem/call-forwarding.c b/drivers/qmimodem/call-forwarding.c
index e7ae3515..fb9bb4e1 100644
--- a/drivers/qmimodem/call-forwarding.c
+++ b/drivers/qmimodem/call-forwarding.c
@@ -21,6 +21,16 @@ struct call_forwarding_data {
struct qmi_service *voice;
};
+struct call_forwarding_info {
+ struct {
+ int8_t active;
+ uint8_t cls;
+ uint8_t len;
+ uint8_t number[];
+ } i;
+ uint8_t time;
+} __attribute__((__packed__));
+
struct call_forwarding_info_ext {
uint8_t active;
uint8_t cls;
@@ -31,7 +41,7 @@ struct call_forwarding_info_ext {
uint8_t plan;
uint8_t len;
uint8_t number[];
-};
+} __attribute__((__packed__));
static int forw_type_to_reason(int type)
{
@@ -78,55 +88,68 @@ static void query_cb(struct qmi_result *result, void *user_data)
ofono_call_forwarding_query_cb_t cb = cbd->cb;
const uint8_t *p;
uint8_t num;
+ const uint8_t *end;
uint16_t length;
-
+ struct ofono_call_forwarding_condition *list = NULL;
+ int i;
+ bool extended = false;
DBG("");
if (qmi_result_set_error(result, NULL))
goto error;
/*
- * we want extended info, because of the number type.
- * FIXME - shall we fallback to 0x10 if there is no extended info?
+ * we want extended info if any, because of the number type.
*/
p = qmi_result_get(result, 0x16, &length);
- if (p && length) {
- struct ofono_call_forwarding_condition *list;
- const uint8_t *end = p + length;
- int i;
+ if (p && length)
+ extended = true;
+ else
+ p = qmi_result_get(result, 0x10, &length);
- num = *p++;
+ if (!extended && (!p || !length))
+ goto error;
- list = l_new(struct ofono_call_forwarding_condition, num);
+ end = p + length;
+ num = *p++;
+ list = l_new(struct ofono_call_forwarding_condition, num);
- for (i = 0; i < num; i++) {
- struct call_forwarding_info_ext *info = (void *)p;
+ for (i = 0; i < num; i++) {
+ if (extended) {
+ struct call_forwarding_info_ext *fi = (void *)p;
+ const uint8_t *iend = p + sizeof(*fi);
int type;
- /* do not try to access beyond buffer end */
- if (p + sizeof(*info) > end ||
- p + sizeof(*info) + info->len > end) {
- l_free(list);
+ if (iend > end || iend + fi->len > end)
goto error;
- }
- if (info->type == 1)
- type = OFONO_NUMBER_TYPE_INTERNATIONAL;
- else
- type = OFONO_NUMBER_TYPE_UNKNOWN;
+ type = fi->type == 1 ?
+ OFONO_NUMBER_TYPE_INTERNATIONAL :
+ OFONO_NUMBER_TYPE_UNKNOWN;
+ set_fwd_cond(&list[i], fi->active, fi->cls,
+ fi->time, type, fi->number, fi->len);
- set_fwd_cond(&list[i], info->active, info->cls,
- info->time, type, info->number,
- info->len);
- p += sizeof(*info) + info->len;
- }
+ p += sizeof(*fi) + fi->len;
+ } else {
+ struct call_forwarding_info *fi = (void *)p;
+ const uint8_t *iend = p + sizeof(*fi);
- CALLBACK_WITH_SUCCESS(cb, num, list, cbd->data);
- l_free(list);
- return;
+ if (iend > end || iend + fi->i.len > end)
+ goto error;
+
+ set_fwd_cond(&list[i], fi->i.active, fi->i.cls,
+ fi->time, OFONO_NUMBER_TYPE_UNKNOWN,
+ fi->i.number, fi->i.len);
+ p += sizeof(*fi) + fi->i.len;
+ }
}
+ CALLBACK_WITH_SUCCESS(cb, num, list, cbd->data);
+ l_free(list);
+ return;
+
error:
+ l_free(list);
CALLBACK_WITH_FAILURE(cb, 0, NULL, cbd->data);
}
--
2.25.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v2] qmi: call-forwarding: fallback to basic forwarding info if no extended
2024-12-08 12:39 ` [PATCH v2] " Ivaylo Dimitrov
@ 2024-12-11 5:27 ` Denis Kenzior
2024-12-11 15:51 ` Ivaylo Dimitrov
0 siblings, 1 reply; 7+ messages in thread
From: Denis Kenzior @ 2024-12-11 5:27 UTC (permalink / raw)
To: Ivaylo Dimitrov, ofono; +Cc: absicsz, merlijn
Hi Ivo,
On 12/8/24 6:39 AM, Ivaylo Dimitrov wrote:
> At least Motorola Droid 4 does not support extended call forward info, so
> fallback to basic
> ---
> drivers/qmimodem/call-forwarding.c | 81 +++++++++++++++++++-----------
> 1 file changed, 52 insertions(+), 29 deletions(-)
>
CI complains this fails under clang:
Fedora (glibc) clang debug+sanitizers
=====================================
Configure: PASS
Build: FAIL
drivers/qmimodem/call-forwarding.c:30:4: error: field 'i' with variable
sized type 'struct (unnamed struct at drivers/qmimodem/call-forwarding.c:25:2)'
not at the end of a struct or class is a GNU extension
[-Werror,-Wgnu-variable-sized-type-not-at-end]
30 | } i;
| ^
1 error generated.
make[1]: *** [Makefile:4083: drivers/qmimodem/call-forwarding.o] Error 1
make[1]: Target 'all-am' not remade because of errors.
make: *** [Makefile:2388: all] Error 2
> diff --git a/drivers/qmimodem/call-forwarding.c b/drivers/qmimodem/call-forwarding.c
> index e7ae3515..fb9bb4e1 100644
> --- a/drivers/qmimodem/call-forwarding.c
> +++ b/drivers/qmimodem/call-forwarding.c
> @@ -21,6 +21,16 @@ struct call_forwarding_data {
> struct qmi_service *voice;
> };
>
> +struct call_forwarding_info {
> + struct {
> + int8_t active;
> + uint8_t cls;
> + uint8_t len;
> + uint8_t number[];
> + } i;
> + uint8_t time;
> +} __attribute__((__packed__));
> +
> struct call_forwarding_info_ext {
> uint8_t active;
> uint8_t cls;
> @@ -31,7 +41,7 @@ struct call_forwarding_info_ext {
> uint8_t plan;
> uint8_t len;
> uint8_t number[];
> -};
> +} __attribute__((__packed__));
>
> static int forw_type_to_reason(int type)
> {
> @@ -78,55 +88,68 @@ static void query_cb(struct qmi_result *result, void *user_data)
> ofono_call_forwarding_query_cb_t cb = cbd->cb;
> const uint8_t *p;
const void *p;
> uint8_t num;
> + const uint8_t *end;
> uint16_t length;
> -
> + struct ofono_call_forwarding_condition *list = NULL;
A nicer way might be:
_auto_(l_free) struct ofono_call_forwarding_condition *list = NULL;
> + int i;
> + bool extended = false;
> DBG("");
>
> if (qmi_result_set_error(result, NULL))
> goto error;
>
> /*
> - * we want extended info, because of the number type.
> - * FIXME - shall we fallback to 0x10 if there is no extended info?
> + * we want extended info if any, because of the number type.
> */
> p = qmi_result_get(result, 0x16, &length);
> - if (p && length) {
> - struct ofono_call_forwarding_condition *list;
> - const uint8_t *end = p + length;
> - int i;
> + if (p && length)
> + extended = true;
> + else
> + p = qmi_result_get(result, 0x10, &length);
>
> - num = *p++;
> + if (!extended && (!p || !length))
> + goto error;
>
> - list = l_new(struct ofono_call_forwarding_condition, num);
> + end = p + length;
> + num = *p++;
num = l_get_u8(p);
> + list = l_new(struct ofono_call_forwarding_condition, num);
>
> - for (i = 0; i < num; i++) {
> - struct call_forwarding_info_ext *info = (void *)p;
> + for (i = 0; i < num; i++) {
> + if (extended) {
> + struct call_forwarding_info_ext *fi = (void *)p;
No need for cast if p is void *
> + const uint8_t *iend = p + sizeof(*fi);
> int type;
>
> - /* do not try to access beyond buffer end */
> - if (p + sizeof(*info) > end ||
> - p + sizeof(*info) + info->len > end) {
> - l_free(list);
> + if (iend > end || iend + fi->len > end)
> goto error;
> - }
>
> - if (info->type == 1)
> - type = OFONO_NUMBER_TYPE_INTERNATIONAL;
> - else
> - type = OFONO_NUMBER_TYPE_UNKNOWN;
> + type = fi->type == 1 ?
> + OFONO_NUMBER_TYPE_INTERNATIONAL :
> + OFONO_NUMBER_TYPE_UNKNOWN;
> + set_fwd_cond(&list[i], fi->active, fi->cls,
> + fi->time, type, fi->number, fi->len);
>
> - set_fwd_cond(&list[i], info->active, info->cls,
> - info->time, type, info->number,
> - info->len);
> - p += sizeof(*info) + info->len;
> - }
> + p += sizeof(*fi) + fi->len;
> + } else {
> + struct call_forwarding_info *fi = (void *)p;
> + const uint8_t *iend = p + sizeof(*fi);
>
> - CALLBACK_WITH_SUCCESS(cb, num, list, cbd->data);
> - l_free(list);
> - return;
> + if (iend > end || iend + fi->i.len > end)
> + goto error;
> +
> + set_fwd_cond(&list[i], fi->i.active, fi->i.cls,
> + fi->time, OFONO_NUMBER_TYPE_UNKNOWN,
> + fi->i.number, fi->i.len);
> + p += sizeof(*fi) + fi->i.len;
> + }
> }
>
> + CALLBACK_WITH_SUCCESS(cb, num, list, cbd->data);
> + l_free(list);
No need for l_free here
> + return;
> +
> error:
> + l_free(list);
or here if using _auto_
> CALLBACK_WITH_FAILURE(cb, 0, NULL, cbd->data);
> }
>
Regards,
-Denis
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2] qmi: call-forwarding: fallback to basic forwarding info if no extended
2024-12-11 5:27 ` Denis Kenzior
@ 2024-12-11 15:51 ` Ivaylo Dimitrov
2024-12-11 15:56 ` Denis Kenzior
0 siblings, 1 reply; 7+ messages in thread
From: Ivaylo Dimitrov @ 2024-12-11 15:51 UTC (permalink / raw)
To: Denis Kenzior, ofono; +Cc: absicsz, merlijn
Hi Denis,
On 11.12.24 г. 7:27 ч., Denis Kenzior wrote:
...
>
> const void *p;
>
I'd better not, see below.
>> uint8_t num;
>> + const uint8_t *end;
>> uint16_t length;
>> -
>> + struct ofono_call_forwarding_condition *list = NULL;
>
> A nicer way might be:
> _auto_(l_free) struct ofono_call_forwarding_condition *list = NULL;
>
>> + int i;
>> + bool extended = false;
>> DBG("");
>> if (qmi_result_set_error(result, NULL))
>> goto error;
>> /*
>> - * we want extended info, because of the number type.
>> - * FIXME - shall we fallback to 0x10 if there is no extended info?
>> + * we want extended info if any, because of the number type.
>> */
>> p = qmi_result_get(result, 0x16, &length);
>> - if (p && length) {
>> - struct ofono_call_forwarding_condition *list;
>> - const uint8_t *end = p + length;
>> - int i;
>> + if (p && length)
>> + extended = true;
>> + else
>> + p = qmi_result_get(result, 0x10, &length);
>> - num = *p++;
>> + if (!extended && (!p || !length))
>> + goto error;
>> - list = l_new(struct ofono_call_forwarding_condition, num);
>> + end = p + length;
void * arithmetic, UB last time I checked, unless you are absolutely
sure compilers will do the right thing we'd better keep it like that. p
is used all over the place as const uint8_t *, I am not sure there is
elegant way of converting it to void * without casts.
Will send v2 with fix for the above clang error and using _auto_.
Thanks,
Ivo
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2] qmi: call-forwarding: fallback to basic forwarding info if no extended
2024-12-11 15:51 ` Ivaylo Dimitrov
@ 2024-12-11 15:56 ` Denis Kenzior
2024-12-11 16:54 ` [PATCH v3] " Ivaylo Dimitrov
0 siblings, 1 reply; 7+ messages in thread
From: Denis Kenzior @ 2024-12-11 15:56 UTC (permalink / raw)
To: Ivaylo Dimitrov, ofono; +Cc: absicsz, merlijn
Hi Ivo,
>
> void * arithmetic, UB last time I checked, unless you are absolutely sure
Yes, it is UB in a strict sense. However, on Linux, the only two compilers we
care about (or likely will care about for a very long time) are pretty clear in
void pointer arithmetic semantics.
If the Linux kernel does it and can rely on this behavior, so can we.
> compilers will do the right thing we'd better keep it like that. p is used all
> over the place as const uint8_t *, I am not sure there is elegant way of
> converting it to void * without casts.
Regards,
-Denis
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v3] qmi: call-forwarding: fallback to basic forwarding info if no extended
2024-12-11 15:56 ` Denis Kenzior
@ 2024-12-11 16:54 ` Ivaylo Dimitrov
2024-12-11 18:30 ` patchwork-bot+ofono
0 siblings, 1 reply; 7+ messages in thread
From: Ivaylo Dimitrov @ 2024-12-11 16:54 UTC (permalink / raw)
To: ofono; +Cc: denkenz, absicsz, merlijn, Ivaylo Dimitrov
At least Motorola Droid 4 does not support extended call forward info, so
fallback to basic
---
drivers/qmimodem/call-forwarding.c | 80 ++++++++++++++++++------------
1 file changed, 49 insertions(+), 31 deletions(-)
diff --git a/drivers/qmimodem/call-forwarding.c b/drivers/qmimodem/call-forwarding.c
index e7ae3515..ad42e192 100644
--- a/drivers/qmimodem/call-forwarding.c
+++ b/drivers/qmimodem/call-forwarding.c
@@ -21,6 +21,13 @@ struct call_forwarding_data {
struct qmi_service *voice;
};
+struct call_forwarding_info {
+ int8_t active;
+ uint8_t cls;
+ uint8_t len;
+ uint8_t number[];
+} __attribute__((__packed__));
+
struct call_forwarding_info_ext {
uint8_t active;
uint8_t cls;
@@ -31,7 +38,7 @@ struct call_forwarding_info_ext {
uint8_t plan;
uint8_t len;
uint8_t number[];
-};
+} __attribute__((__packed__));
static int forw_type_to_reason(int type)
{
@@ -56,7 +63,7 @@ static int forw_type_to_reason(int type)
static void set_fwd_cond(struct ofono_call_forwarding_condition *cond,
int status, int cls, int time, int type,
- uint8_t *number, uint8_t nlen)
+ const uint8_t *number, uint8_t nlen)
{
uint8_t maxlen = OFONO_MAX_PHONE_NUMBER_LENGTH;
@@ -76,56 +83,67 @@ static void query_cb(struct qmi_result *result, void *user_data)
{
struct cb_data *cbd = user_data;
ofono_call_forwarding_query_cb_t cb = cbd->cb;
- const uint8_t *p;
+ const void *p;
uint8_t num;
+ const uint8_t *end;
uint16_t length;
-
+ _auto_(l_free) struct ofono_call_forwarding_condition *list = NULL;
+ int i;
+ bool extended = false;
DBG("");
if (qmi_result_set_error(result, NULL))
goto error;
/*
- * we want extended info, because of the number type.
- * FIXME - shall we fallback to 0x10 if there is no extended info?
+ * we want extended info if any, because of the number type.
*/
p = qmi_result_get(result, 0x16, &length);
- if (p && length) {
- struct ofono_call_forwarding_condition *list;
- const uint8_t *end = p + length;
- int i;
+ if (p && length)
+ extended = true;
+ else
+ p = qmi_result_get(result, 0x10, &length);
- num = *p++;
+ if (!extended && (!p || !length))
+ goto error;
- list = l_new(struct ofono_call_forwarding_condition, num);
+ end = p + length;
+ num = l_get_u8(p++);
+ list = l_new(struct ofono_call_forwarding_condition, num);
- for (i = 0; i < num; i++) {
- struct call_forwarding_info_ext *info = (void *)p;
+ for (i = 0; i < num; i++) {
+ if (extended) {
+ const struct call_forwarding_info_ext *fi = p;
+ const uint8_t *iend = p + sizeof(*fi);
int type;
- /* do not try to access beyond buffer end */
- if (p + sizeof(*info) > end ||
- p + sizeof(*info) + info->len > end) {
- l_free(list);
+ if (iend > end || iend + fi->len > end)
goto error;
- }
- if (info->type == 1)
- type = OFONO_NUMBER_TYPE_INTERNATIONAL;
- else
- type = OFONO_NUMBER_TYPE_UNKNOWN;
+ type = fi->type == 1 ?
+ OFONO_NUMBER_TYPE_INTERNATIONAL :
+ OFONO_NUMBER_TYPE_UNKNOWN;
+ set_fwd_cond(&list[i], fi->active, fi->cls,
+ fi->time, type, fi->number, fi->len);
- set_fwd_cond(&list[i], info->active, info->cls,
- info->time, type, info->number,
- info->len);
- p += sizeof(*info) + info->len;
- }
+ p += sizeof(*fi) + fi->len;
+ } else {
+ const struct call_forwarding_info *fi = p;
+ const uint8_t *iend = p + sizeof(*fi) + 1;
- CALLBACK_WITH_SUCCESS(cb, num, list, cbd->data);
- l_free(list);
- return;
+ if (iend > end || iend + fi->len > end)
+ goto error;
+
+ p += sizeof(*fi) + fi->len;
+ set_fwd_cond(&list[i], fi->active, fi->cls,
+ l_get_u8(p++), OFONO_NUMBER_TYPE_UNKNOWN,
+ fi->number, fi->len);
+ }
}
+ CALLBACK_WITH_SUCCESS(cb, num, list, cbd->data);
+ return;
+
error:
CALLBACK_WITH_FAILURE(cb, 0, NULL, cbd->data);
}
--
2.25.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v3] qmi: call-forwarding: fallback to basic forwarding info if no extended
2024-12-11 16:54 ` [PATCH v3] " Ivaylo Dimitrov
@ 2024-12-11 18:30 ` patchwork-bot+ofono
0 siblings, 0 replies; 7+ messages in thread
From: patchwork-bot+ofono @ 2024-12-11 18:30 UTC (permalink / raw)
To: Ivaylo Dimitrov; +Cc: ofono, denkenz, absicsz, merlijn
Hello:
This patch was applied to ofono.git (master)
by Denis Kenzior <denkenz@gmail.com>:
On Wed, 11 Dec 2024 18:54:43 +0200 you wrote:
> At least Motorola Droid 4 does not support extended call forward info, so
> fallback to basic
> ---
> drivers/qmimodem/call-forwarding.c | 80 ++++++++++++++++++------------
> 1 file changed, 49 insertions(+), 31 deletions(-)
Here is the summary with links:
- [v3] qmi: call-forwarding: fallback to basic forwarding info if no extended
https://git.kernel.org/pub/scm/network/ofono/ofono.git/?id=37f7aea74270
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2024-12-11 18:30 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-12-08 11:34 [PATCH] qmi: call-forwarding: fallback to basic forwarding info if no extended Ivaylo Dimitrov
2024-12-08 12:39 ` [PATCH v2] " Ivaylo Dimitrov
2024-12-11 5:27 ` Denis Kenzior
2024-12-11 15:51 ` Ivaylo Dimitrov
2024-12-11 15:56 ` Denis Kenzior
2024-12-11 16:54 ` [PATCH v3] " Ivaylo Dimitrov
2024-12-11 18:30 ` patchwork-bot+ofono
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.