diff options
author | Denis Kenzior <denkenz@gmail.com> | 2017-11-13 20:43:07 -0600 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2017-11-13 21:24:37 -0600 |
commit | f8d6a0a6684dcd09873605ca16bcddd076cceb23 (patch) | |
tree | 2496306d44bc1f2c4697af9a0bdee2a6cf055ae4 /src/gprs.c | |
parent | 2690d1c8dd790ed4bebf3dfd53671f26eff8df68 (diff) | |
download | ofono-f8d6a0a6684dcd09873605ca16bcddd076cceb23.tar.gz |
gprs: Add implementation of set_ipv4_prefix_length
Diffstat (limited to 'src/gprs.c')
-rw-r--r-- | src/gprs.c | 21 |
1 files changed, 21 insertions, 0 deletions
@@ -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) { |