summaryrefslogtreecommitdiff
path: root/src/gprs.c
diff options
context:
space:
mode:
authorDenis Kenzior <denkenz@gmail.com>2017-11-13 20:43:07 -0600
committerDenis Kenzior <denkenz@gmail.com>2017-11-13 21:24:37 -0600
commitf8d6a0a6684dcd09873605ca16bcddd076cceb23 (patch)
tree2496306d44bc1f2c4697af9a0bdee2a6cf055ae4 /src/gprs.c
parent2690d1c8dd790ed4bebf3dfd53671f26eff8df68 (diff)
downloadofono-f8d6a0a6684dcd09873605ca16bcddd076cceb23.tar.gz
gprs: Add implementation of set_ipv4_prefix_length
Diffstat (limited to 'src/gprs.c')
-rw-r--r--src/gprs.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/gprs.c b/src/gprs.c
index 7aece04b..377eced7 100644
--- a/src/gprs.c
+++ b/src/gprs.c
@@ -2920,6 +2920,27 @@ void ofono_gprs_context_set_ipv4_netmask(struct ofono_gprs_context *gc,
settings->ipv4->netmask = g_strdup(netmask);
}
+void ofono_gprs_context_set_ipv4_prefix_length(struct ofono_gprs_context *gc,
+ unsigned int length)
+{
+ struct context_settings *settings = gc->settings;
+ struct in_addr ipv4;
+ char buf[INET_ADDRSTRLEN];
+
+ if (settings->ipv4 == NULL)
+ return;
+
+ g_free(settings->ipv4->netmask);
+
+ memset(&ipv4, 0, sizeof(ipv4));
+
+ if (length)
+ ipv4.s_addr = htonl(~((1 << (32 - length)) - 1));
+
+ inet_ntop(AF_INET, &ipv4, buf, sizeof(buf));
+ settings->ipv4->netmask = g_strdup(buf);
+}
+
void ofono_gprs_context_set_ipv4_gateway(struct ofono_gprs_context *gc,
const char *gateway)
{