Hi Antara,
On 04/03/2019 03:46 AM, Antara Borwankar wrote:
Handled IPv6 address after activating PDP context
---
drivers/ifxmodem/gprs-context.c | 38 ++++++++++++++++++++++++++++----------
1 file changed, 28 insertions(+), 10 deletions(-)
diff --git a/drivers/ifxmodem/gprs-context.c b/drivers/ifxmodem/gprs-context.c
index 6042004..2c5456b 100644
--- a/drivers/ifxmodem/gprs-context.c
+++ b/drivers/ifxmodem/gprs-context.c
@@ -352,10 +352,17 @@ static void cgcontrdp_cb(gboolean ok, GAtResult *result,
gpointer user_data)
DBG("DNS: %s, %s\n", gcd->dns1, gcd->dns2);
- if (!laddrnetmask || at_util_get_ipv4_address_and_netmask(laddrnetmask,
- gcd->address, gcd->netmask) < 0) {
- failed_setup(gc, NULL, TRUE);
- return;
+ if (gcd->proto == OFONO_GPRS_PROTO_IP) {
+ if (!laddrnetmask ||
at_util_get_ipv4_address_and_netmask(laddrnetmask,
+ gcd->address, gcd->netmask) <
0) {
+ failed_setup(gc, NULL, TRUE);
+ return;
+ }
+ }
+
+ if (gcd->proto == OFONO_GPRS_PROTO_IPV6) {
+ if (laddrnetmask)
+ strncpy(gcd->address, laddrnetmask,
sizeof(gcd->address));
So what +CGPIAF setting is being assumed here? If
IPv6_AddressFormat==0, then aren't you also copying parts of the netmask
into gcd->address? FYI, the core doesn't validate the ipv6 address from
the driver and broadcasts it directly over D-Bus.
}
if (gw)
@@ -373,15 +380,26 @@ static void cgcontrdp_cb(gboolean ok, GAtResult *result,
gpointer user_data)
interface = ofono_gprs_context_get_interface(gc);
datapath = get_datapath(modem, interface);
- ofono_gprs_context_set_ipv4_address(gc, gcd->address, TRUE);
+ if (gcd->proto == OFONO_GPRS_PROTO_IP) {
+ ofono_gprs_context_set_ipv4_address(gc, gcd->address, TRUE);
- if (gcd->netmask[0])
- ofono_gprs_context_set_ipv4_netmask(gc, gcd->netmask);
+ if (gcd->netmask[0])
+ ofono_gprs_context_set_ipv4_netmask(gc, gcd->netmask);
- if (gcd->gateway[0])
- ofono_gprs_context_set_ipv4_gateway(gc, gcd->gateway);
+ if (gcd->gateway[0])
+ ofono_gprs_context_set_ipv4_gateway(gc, gcd->gateway);
- ofono_gprs_context_set_ipv4_dns_servers(gc, dns);
+ ofono_gprs_context_set_ipv4_dns_servers(gc, dns);
+ }
+
+ if (gcd->proto == OFONO_GPRS_PROTO_IPV6) {
+ ofono_gprs_context_set_ipv6_address(gc, gcd->address);
+
What about the prefix length?
+ if (gcd->gateway[0])
+ ofono_gprs_context_set_ipv6_gateway(gc, gcd->gateway);
+
+ ofono_gprs_context_set_ipv6_dns_servers(gc, dns);
+ }
Also, I think we're ending up with too many if statements. They should
be combined and the DBG statements moved into the relevant if block.
snprintf(buf, sizeof(buf), "AT+XDATACHANNEL=1,1,\"%s\",\"%s\",2,%u",
ctrlpath, datapath, gcd->active_context);
Regards,
-Denis
_______________________________________________
ofono mailing list
[email protected]
https://lists.ofono.org/mailman/listinfo/ofono