* [PATCH 0/3] connman: add a few backported patches
@ 2018-01-19 14:42 André Draszik
2018-01-19 14:42 ` [PATCH 1/3] connman: fix nat-postrouting not update issue André Draszik
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: André Draszik @ 2018-01-19 14:42 UTC (permalink / raw)
To: openembedded-core
The following patches backport a few connman fixes, as connman
hasn't seen a new release since August 2017.
Cheers,
Andre'
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH 1/3] connman: fix nat-postrouting not update issue
2018-01-19 14:42 [PATCH 0/3] connman: add a few backported patches André Draszik
@ 2018-01-19 14:42 ` André Draszik
2018-01-19 14:42 ` [PATCH 2/3] connman: Fix a crash using wispr over TLS André Draszik
2018-01-19 14:42 ` [PATCH 3/3] connman: Implement subnet route in session André Draszik
2 siblings, 0 replies; 4+ messages in thread
From: André Draszik @ 2018-01-19 14:42 UTC (permalink / raw)
To: openembedded-core
From: Jian Liang <jianliang@tycoint.com>
When more than one session are created with the same
"AllowedInterface", connman failed to update nat-
postrouting rules when new IP address was got
Signed-off-by: Jian Liang <jianliang@tycoint.com>
Signed-off-by: André Draszik <andre.draszik@jci.com>
---
...ion-Keep-track-of-addr-in-fw_snat-session.patch | 112 +++++++++++++++++++++
meta/recipes-connectivity/connman/connman_1.35.bb | 1 +
2 files changed, 113 insertions(+)
create mode 100644 meta/recipes-connectivity/connman/connman/0001-session-Keep-track-of-addr-in-fw_snat-session.patch
diff --git a/meta/recipes-connectivity/connman/connman/0001-session-Keep-track-of-addr-in-fw_snat-session.patch b/meta/recipes-connectivity/connman/connman/0001-session-Keep-track-of-addr-in-fw_snat-session.patch
new file mode 100644
index 0000000000..f1b4d0aaa7
--- /dev/null
+++ b/meta/recipes-connectivity/connman/connman/0001-session-Keep-track-of-addr-in-fw_snat-session.patch
@@ -0,0 +1,112 @@
+From b5fd5945886fa1845db5c969424b63d894fe0376 Mon Sep 17 00:00:00 2001
+From: Jian Liang <jianliang@tycoint.com>
+Date: Fri, 25 Aug 2017 10:02:16 -0400
+Subject: [PATCH 1/2] session: Keep track of addr in fw_snat & session
+To: connman@lists.01.org
+Cc: wagi@monom.org
+
+When there is more than one session in fw_snat's list of sessions,
+fw_snat failed to be re-created when update-session-state is triggered
+with new IP address. This is because index alone is not sufficient to
+decide if fw_snat needs to be re-created. The solution here is to keep
+a track of IP addr and use it to avoid false lookup of fw_snat.
+
+Signed-off-by: Jian Liang <jianliang@tycoint.com>
+
+---
+Upstream-Status: Backport [https://git.kernel.org/pub/scm/network/connman/connman.git/commit/?id=f9e27d4abfcab5c80a38e0850b5ddb26277f97c1]
+Signed-off-by: André Draszik <andre.draszik@jci.com>
+ src/session.c | 19 +++++++++++++++----
+ 1 file changed, 15 insertions(+), 4 deletions(-)
+
+diff --git a/src/session.c b/src/session.c
+index 9e3c559..965ac06 100644
+--- a/src/session.c
++++ b/src/session.c
+@@ -65,6 +65,7 @@ struct connman_session {
+ struct firewall_context *fw;
+ uint32_t mark;
+ int index;
++ char *addr;
+ char *gateway;
+ bool policy_routing;
+ bool snat_enabled;
+@@ -79,6 +80,7 @@ struct fw_snat {
+ GSList *sessions;
+ int id;
+ int index;
++ char *addr;
+ struct firewall_context *fw;
+ };
+
+@@ -200,7 +202,7 @@ static char *service2bearer(enum connman_service_type type)
+ return "";
+ }
+
+-static struct fw_snat *fw_snat_lookup(int index)
++static struct fw_snat *fw_snat_lookup(int index, const char *addr)
+ {
+ struct fw_snat *fw_snat;
+ GSList *list;
+@@ -208,8 +210,11 @@ static struct fw_snat *fw_snat_lookup(int index)
+ for (list = fw_snat_list; list; list = list->next) {
+ fw_snat = list->data;
+
+- if (fw_snat->index == index)
++ if (fw_snat->index == index) {
++ if (g_strcmp0(addr, fw_snat->addr) != 0)
++ continue;
+ return fw_snat;
++ }
+ }
+ return NULL;
+ }
+@@ -224,6 +229,7 @@ static int fw_snat_create(struct connman_session *session,
+
+ fw_snat->fw = __connman_firewall_create();
+ fw_snat->index = index;
++ fw_snat->addr = g_strdup(addr);
+
+ fw_snat->id = __connman_firewall_enable_snat(fw_snat->fw,
+ index, ifname, addr);
+@@ -238,6 +244,7 @@ static int fw_snat_create(struct connman_session *session,
+ return 0;
+ err:
+ __connman_firewall_destroy(fw_snat->fw);
++ g_free(fw_snat->addr);
+ g_free(fw_snat);
+ return err;
+ }
+@@ -393,7 +400,7 @@ static void del_nat_rules(struct connman_session *session)
+ return;
+
+ session->snat_enabled = false;
+- fw_snat = fw_snat_lookup(session->index);
++ fw_snat = fw_snat_lookup(session->index, session->addr);
+
+ if (!fw_snat)
+ return;
+@@ -420,8 +427,11 @@ static void add_nat_rules(struct connman_session *session)
+ if (!addr)
+ return;
+
++ g_free(session->addr);
++ session->addr = g_strdup(addr);
++
+ session->snat_enabled = true;
+- fw_snat = fw_snat_lookup(index);
++ fw_snat = fw_snat_lookup(index, session->addr);
+ if (fw_snat) {
+ fw_snat_ref(session, fw_snat);
+ return;
+@@ -502,6 +512,7 @@ static void free_session(struct connman_session *session)
+ g_free(session->info);
+ g_free(session->info_last);
+ g_free(session->gateway);
++ g_free(session->addr);
+
+ g_free(session);
+ }
+--
+2.7.4
+
diff --git a/meta/recipes-connectivity/connman/connman_1.35.bb b/meta/recipes-connectivity/connman/connman_1.35.bb
index 950946fe76..e7e5d38d61 100644
--- a/meta/recipes-connectivity/connman/connman_1.35.bb
+++ b/meta/recipes-connectivity/connman/connman_1.35.bb
@@ -6,6 +6,7 @@ SRC_URI = "${KERNELORG_MIRROR}/linux/network/${BPN}/${BP}.tar.xz \
file://connman \
file://no-version-scripts.patch \
file://includes.patch \
+ file://0001-session-Keep-track-of-addr-in-fw_snat-session.patch \
"
SRC_URI_append_libc-musl = " file://0002-resolve-musl-does-not-implement-res_ninit.patch \
"
--
2.15.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH 2/3] connman: Fix a crash using wispr over TLS
2018-01-19 14:42 [PATCH 0/3] connman: add a few backported patches André Draszik
2018-01-19 14:42 ` [PATCH 1/3] connman: fix nat-postrouting not update issue André Draszik
@ 2018-01-19 14:42 ` André Draszik
2018-01-19 14:42 ` [PATCH 3/3] connman: Implement subnet route in session André Draszik
2 siblings, 0 replies; 4+ messages in thread
From: André Draszik @ 2018-01-19 14:42 UTC (permalink / raw)
To: openembedded-core
From: Jian Liang <jianliang@tycoint.com>
This is happened when doing wispr against a HTTPS URL
rather than the default one, i.e.
http://ipv4.connman.net/online/status.html
When gnutls_channel is instantiated, the gnutls_channel->established
has to be initiated as FALSE. Otherwise, check_handshake function
won't work. A random initial value 1 of gnutls_channel->established
will make check_handshake return G_IO_STATUS_NORMAL, when the channel
is actually not ready to be used. The observed behaviours are,
- wispr is getting random errors in wispr_portal_web_result
- ConnMan crashes on exit after those random errors
- when wispr is luckly working, ConnMan doesn't crash on exit
Signed-off-by: Jian Liang <jianliang@tycoint.com>
Signed-off-by: André Draszik <andre.draszik@jci.com>
---
...iognutls-Fix-a-crash-using-wispr-over-TLS.patch | 41 ++++++++++++++++++++++
meta/recipes-connectivity/connman/connman_1.35.bb | 1 +
2 files changed, 42 insertions(+)
create mode 100644 meta/recipes-connectivity/connman/connman/0001-giognutls-Fix-a-crash-using-wispr-over-TLS.patch
diff --git a/meta/recipes-connectivity/connman/connman/0001-giognutls-Fix-a-crash-using-wispr-over-TLS.patch b/meta/recipes-connectivity/connman/connman/0001-giognutls-Fix-a-crash-using-wispr-over-TLS.patch
new file mode 100644
index 0000000000..f9080d4ba9
--- /dev/null
+++ b/meta/recipes-connectivity/connman/connman/0001-giognutls-Fix-a-crash-using-wispr-over-TLS.patch
@@ -0,0 +1,41 @@
+From 929fc9b7068100444e0ffcccd25841f78791e619 Mon Sep 17 00:00:00 2001
+From: Jian Liang <jianliang@tycoint.com>
+Date: Fri, 15 Sep 2017 06:40:08 -0400
+Subject: [PATCH] gweb: Fix a crash using wispr over TLS
+To: connman@lists.01.org
+Cc: wagi@monom.org
+
+When gnutls_channel is instantiated, the gnutls_channel->established
+has to be initiated as FALSE. Otherwise, check_handshake function
+won't work. A random initial value 1 of gnutls_channel->established
+will make check_handshake return G_IO_STATUS_NORMAL, when the channel
+is actually not ready to be used. The observed behaviours are,
+
+- wispr is getting random errors in wispr_portal_web_result
+- ConnMan crashes on exit after those random errors
+- when wispr is luckly working, ConnMan doesn't crash on exit
+
+Signed-off-by: Jian Liang <jianliang@tycoint.com>
+
+---
+Upstream-Status: Backport [https://git.kernel.org/pub/scm/network/connman/connman.git/commit/?id=73e53f3bd9e7debae86341f1eee7b97862a56a5e]
+Signed-off-by: André Draszik <andre.draszik@jci.com>
+ gweb/giognutls.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/gweb/giognutls.c b/gweb/giognutls.c
+index 09dc9e7..c029a8b 100644
+--- a/gweb/giognutls.c
++++ b/gweb/giognutls.c
+@@ -421,7 +421,7 @@ GIOChannel *g_io_channel_gnutls_new(int fd)
+
+ DBG("");
+
+- gnutls_channel = g_new(GIOGnuTLSChannel, 1);
++ gnutls_channel = g_new0(GIOGnuTLSChannel, 1);
+
+ channel = (GIOChannel *) gnutls_channel;
+
+--
+2.7.4
+
diff --git a/meta/recipes-connectivity/connman/connman_1.35.bb b/meta/recipes-connectivity/connman/connman_1.35.bb
index e7e5d38d61..4663a7e3e8 100644
--- a/meta/recipes-connectivity/connman/connman_1.35.bb
+++ b/meta/recipes-connectivity/connman/connman_1.35.bb
@@ -7,6 +7,7 @@ SRC_URI = "${KERNELORG_MIRROR}/linux/network/${BPN}/${BP}.tar.xz \
file://no-version-scripts.patch \
file://includes.patch \
file://0001-session-Keep-track-of-addr-in-fw_snat-session.patch \
+ file://0001-giognutls-Fix-a-crash-using-wispr-over-TLS.patch \
"
SRC_URI_append_libc-musl = " file://0002-resolve-musl-does-not-implement-res_ninit.patch \
"
--
2.15.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH 3/3] connman: Implement subnet route in session
2018-01-19 14:42 [PATCH 0/3] connman: add a few backported patches André Draszik
2018-01-19 14:42 ` [PATCH 1/3] connman: fix nat-postrouting not update issue André Draszik
2018-01-19 14:42 ` [PATCH 2/3] connman: Fix a crash using wispr over TLS André Draszik
@ 2018-01-19 14:42 ` André Draszik
2 siblings, 0 replies; 4+ messages in thread
From: André Draszik @ 2018-01-19 14:42 UTC (permalink / raw)
To: openembedded-core
From: Jian Liang <jianliang@tycoint.com>
Implement subnet route creation/deletion in session, e.g.
default via 192.168.100.1 dev eth0
192.168.100.0/24 dev eth0
Signed-off-by: Jian Liang <jianliang@tycoint.com>
Signed-off-by: André Draszik <andre.draszik@jci.com>
---
...Add-prefixlen-to-iproute_default_function.patch | 63 ++++++++++++++++++
...ent-subnet-route-creation-deletion-in-ipr.patch | 69 +++++++++++++++++++
...ent-APIs-for-creating-and-deleting-subnet.patch | 68 +++++++++++++++++++
...e-subnet-route-creation-and-deletion-APIs.patch | 77 ++++++++++++++++++++++
meta/recipes-connectivity/connman/connman_1.35.bb | 4 ++
5 files changed, 281 insertions(+)
create mode 100644 meta/recipes-connectivity/connman/connman/0001-inet-Add-prefixlen-to-iproute_default_function.patch
create mode 100644 meta/recipes-connectivity/connman/connman/0002-inet-Implement-subnet-route-creation-deletion-in-ipr.patch
create mode 100644 meta/recipes-connectivity/connman/connman/0003-inet-Implement-APIs-for-creating-and-deleting-subnet.patch
create mode 100644 meta/recipes-connectivity/connman/connman/0004-session-Use-subnet-route-creation-and-deletion-APIs.patch
diff --git a/meta/recipes-connectivity/connman/connman/0001-inet-Add-prefixlen-to-iproute_default_function.patch b/meta/recipes-connectivity/connman/connman/0001-inet-Add-prefixlen-to-iproute_default_function.patch
new file mode 100644
index 0000000000..dd7b356741
--- /dev/null
+++ b/meta/recipes-connectivity/connman/connman/0001-inet-Add-prefixlen-to-iproute_default_function.patch
@@ -0,0 +1,63 @@
+From 508dc60a1f0758ebc586b6b086478a176d493086 Mon Sep 17 00:00:00 2001
+From: Jian Liang <jianliang@tycoint.com>
+Date: Thu, 5 Oct 2017 09:34:41 +0100
+Subject: [PATCH 1/4] inet: Add prefixlen to iproute_default_function
+To: connman@lists.01.org
+Cc: wagi@monom.org
+
+Add prefixlen parameter to this function in preparation for using
+it also in creating subnet route later, e.g.
+
+default via 192.168.100.1 dev eth0
+192.168.100.0/24 dev eth0
+
+Signed-off-by: Jian Liang <jianliang@tycoint.com>
+
+---
+Upstream-Status: Backport [https://git.kernel.org/pub/scm/network/connman/connman.git/commit/?id=edda5b695de2ee79f02314abc9b46fdd46b388e1]
+Signed-off-by: André Draszik <andre.draszik@jci.com>
+ src/inet.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/src/inet.c b/src/inet.c
+index b887aa0..ab8aec8 100644
+--- a/src/inet.c
++++ b/src/inet.c
+@@ -2796,7 +2796,7 @@ int __connman_inet_del_fwmark_rule(uint32_t table_id, int family, uint32_t fwmar
+ }
+
+ static int iproute_default_modify(int cmd, uint32_t table_id, int ifindex,
+- const char *gateway)
++ const char *gateway, unsigned char prefixlen)
+ {
+ struct __connman_inet_rtnl_handle rth;
+ unsigned char buf[sizeof(struct in6_addr)];
+@@ -2829,6 +2829,7 @@ static int iproute_default_modify(int cmd, uint32_t table_id, int ifindex,
+ rth.req.u.r.rt.rtm_protocol = RTPROT_BOOT;
+ rth.req.u.r.rt.rtm_scope = RT_SCOPE_UNIVERSE;
+ rth.req.u.r.rt.rtm_type = RTN_UNICAST;
++ rth.req.u.r.rt.rtm_dst_len = prefixlen;
+
+ __connman_inet_rtnl_addattr_l(&rth.req.n, sizeof(rth.req), RTA_GATEWAY,
+ buf, len);
+@@ -2860,7 +2861,7 @@ int __connman_inet_add_default_to_table(uint32_t table_id, int ifindex,
+ {
+ /* ip route add default via 1.2.3.4 dev wlan0 table 1234 */
+
+- return iproute_default_modify(RTM_NEWROUTE, table_id, ifindex, gateway);
++ return iproute_default_modify(RTM_NEWROUTE, table_id, ifindex, gateway, 0);
+ }
+
+ int __connman_inet_del_default_from_table(uint32_t table_id, int ifindex,
+@@ -2868,7 +2869,7 @@ int __connman_inet_del_default_from_table(uint32_t table_id, int ifindex,
+ {
+ /* ip route del default via 1.2.3.4 dev wlan0 table 1234 */
+
+- return iproute_default_modify(RTM_DELROUTE, table_id, ifindex, gateway);
++ return iproute_default_modify(RTM_DELROUTE, table_id, ifindex, gateway, 0);
+ }
+
+ int __connman_inet_get_interface_ll_address(int index, int family,
+--
+2.7.4
+
diff --git a/meta/recipes-connectivity/connman/connman/0002-inet-Implement-subnet-route-creation-deletion-in-ipr.patch b/meta/recipes-connectivity/connman/connman/0002-inet-Implement-subnet-route-creation-deletion-in-ipr.patch
new file mode 100644
index 0000000000..9c953e5d51
--- /dev/null
+++ b/meta/recipes-connectivity/connman/connman/0002-inet-Implement-subnet-route-creation-deletion-in-ipr.patch
@@ -0,0 +1,69 @@
+From 08cda4004491d3971a8b9df937426c43800d15b1 Mon Sep 17 00:00:00 2001
+From: Jian Liang <jianliang@tycoint.com>
+Date: Thu, 5 Oct 2017 09:37:06 +0100
+Subject: [PATCH 2/4] inet: Implement subnet route creation/deletion in
+ iproute_default_modify
+To: connman@lists.01.org
+Cc: wagi@monom.org
+
+- Calculate subnet address base on gateway address and prefixlen
+- Differentiate creation of routes to gateway and subnet
+
+Signed-off-by: Jian Liang <jianliang@tycoint.com>
+
+---
+Upstream-Status: Backport [https://git.kernel.org/pub/scm/network/connman/connman.git/commit/?id=ff7dcf91f12a2a237feebc6e606d0a8e92975528]
+Signed-off-by: André Draszik <andre.draszik@jci.com>
+ src/inet.c | 22 +++++++++++++++++++---
+ 1 file changed, 19 insertions(+), 3 deletions(-)
+
+diff --git a/src/inet.c b/src/inet.c
+index ab8aec8..0ddb030 100644
+--- a/src/inet.c
++++ b/src/inet.c
+@@ -2802,6 +2802,9 @@ static int iproute_default_modify(int cmd, uint32_t table_id, int ifindex,
+ unsigned char buf[sizeof(struct in6_addr)];
+ int ret, len;
+ int family = connman_inet_check_ipaddress(gateway);
++ char *dst = NULL;
++
++ DBG("gateway %s/%u table %u", gateway, prefixlen, table_id);
+
+ switch (family) {
+ case AF_INET:
+@@ -2814,7 +2817,19 @@ static int iproute_default_modify(int cmd, uint32_t table_id, int ifindex,
+ return -EINVAL;
+ }
+
+- ret = inet_pton(family, gateway, buf);
++ if (prefixlen) {
++ struct in_addr ipv4_subnet_addr, ipv4_mask;
++
++ memset(&ipv4_subnet_addr, 0, sizeof(ipv4_subnet_addr));
++ ipv4_mask.s_addr = htonl((0xffffffff << (32 - prefixlen)) & 0xffffffff);
++ ipv4_subnet_addr.s_addr = inet_addr(gateway);
++ ipv4_subnet_addr.s_addr &= ipv4_mask.s_addr;
++
++ dst = g_strdup(inet_ntoa(ipv4_subnet_addr));
++ }
++
++ ret = inet_pton(family, dst ? dst : gateway, buf);
++ g_free(dst);
+ if (ret <= 0)
+ return -EINVAL;
+
+@@ -2831,8 +2846,9 @@ static int iproute_default_modify(int cmd, uint32_t table_id, int ifindex,
+ rth.req.u.r.rt.rtm_type = RTN_UNICAST;
+ rth.req.u.r.rt.rtm_dst_len = prefixlen;
+
+- __connman_inet_rtnl_addattr_l(&rth.req.n, sizeof(rth.req), RTA_GATEWAY,
+- buf, len);
++ __connman_inet_rtnl_addattr_l(&rth.req.n, sizeof(rth.req),
++ prefixlen > 0 ? RTA_DST : RTA_GATEWAY, buf, len);
++
+ if (table_id < 256) {
+ rth.req.u.r.rt.rtm_table = table_id;
+ } else {
+--
+2.7.4
+
diff --git a/meta/recipes-connectivity/connman/connman/0003-inet-Implement-APIs-for-creating-and-deleting-subnet.patch b/meta/recipes-connectivity/connman/connman/0003-inet-Implement-APIs-for-creating-and-deleting-subnet.patch
new file mode 100644
index 0000000000..56ba5c3f4b
--- /dev/null
+++ b/meta/recipes-connectivity/connman/connman/0003-inet-Implement-APIs-for-creating-and-deleting-subnet.patch
@@ -0,0 +1,68 @@
+From a9243f13d6e1aadd69bfcc27f75f69c38be51677 Mon Sep 17 00:00:00 2001
+From: Jian Liang <jianliang@tycoint.com>
+Date: Wed, 4 Oct 2017 17:30:17 +0100
+Subject: [PATCH 3/4] inet: Implement APIs for creating and deleting subnet
+ route
+To: connman@lists.01.org
+Cc: wagi@monom.org
+
+Signed-off-by: Jian Liang <jianliang@tycoint.com>
+
+---
+Upstream-Status: Backport [https://git.kernel.org/pub/scm/network/connman/connman.git/commit/?id=3a15b0b7fccd053aff91da2cc68585509d0c509b]
+Signed-off-by: André Draszik <andre.draszik@jci.com>
+ src/connman.h | 4 ++++
+ src/inet.c | 14 ++++++++++++++
+ 2 files changed, 18 insertions(+)
+
+diff --git a/src/connman.h b/src/connman.h
+index 21b7080..da4446a 100644
+--- a/src/connman.h
++++ b/src/connman.h
+@@ -240,7 +240,11 @@ int __connman_inet_rtnl_addattr32(struct nlmsghdr *n, size_t maxlen,
+ int __connman_inet_add_fwmark_rule(uint32_t table_id, int family, uint32_t fwmark);
+ int __connman_inet_del_fwmark_rule(uint32_t table_id, int family, uint32_t fwmark);
+ int __connman_inet_add_default_to_table(uint32_t table_id, int ifindex, const char *gateway);
++int __connman_inet_add_subnet_to_table(uint32_t table_id, int ifindex,
++ const char *gateway, unsigned char prefixlen);
+ int __connman_inet_del_default_from_table(uint32_t table_id, int ifindex, const char *gateway);
++int __connman_inet_del_subnet_from_table(uint32_t table_id, int ifindex,
++ const char *gateway, unsigned char prefixlen);
+ int __connman_inet_get_address_netmask(int ifindex,
+ struct sockaddr_in *address, struct sockaddr_in *netmask);
+
+diff --git a/src/inet.c b/src/inet.c
+index 0ddb030..dcd1ab2 100644
+--- a/src/inet.c
++++ b/src/inet.c
+@@ -2880,6 +2880,13 @@ int __connman_inet_add_default_to_table(uint32_t table_id, int ifindex,
+ return iproute_default_modify(RTM_NEWROUTE, table_id, ifindex, gateway, 0);
+ }
+
++int __connman_inet_add_subnet_to_table(uint32_t table_id, int ifindex,
++ const char *gateway, unsigned char prefixlen)
++{
++ /* ip route add 1.2.3.4/24 dev eth0 table 1234 */
++ return iproute_default_modify(RTM_NEWROUTE, table_id, ifindex, gateway, prefixlen);
++}
++
+ int __connman_inet_del_default_from_table(uint32_t table_id, int ifindex,
+ const char *gateway)
+ {
+@@ -2888,6 +2895,13 @@ int __connman_inet_del_default_from_table(uint32_t table_id, int ifindex,
+ return iproute_default_modify(RTM_DELROUTE, table_id, ifindex, gateway, 0);
+ }
+
++int __connman_inet_del_subnet_from_table(uint32_t table_id, int ifindex,
++ const char *gateway, unsigned char prefixlen)
++{
++ /* ip route del 1.2.3.4/24 dev eth0 table 1234 */
++ return iproute_default_modify(RTM_DELROUTE, table_id, ifindex, gateway, prefixlen);
++}
++
+ int __connman_inet_get_interface_ll_address(int index, int family,
+ void *address)
+ {
+--
+2.7.4
+
diff --git a/meta/recipes-connectivity/connman/connman/0004-session-Use-subnet-route-creation-and-deletion-APIs.patch b/meta/recipes-connectivity/connman/connman/0004-session-Use-subnet-route-creation-and-deletion-APIs.patch
new file mode 100644
index 0000000000..ca213eb18b
--- /dev/null
+++ b/meta/recipes-connectivity/connman/connman/0004-session-Use-subnet-route-creation-and-deletion-APIs.patch
@@ -0,0 +1,77 @@
+From deb9372db8396da4f7cd20555ce7c9a8b3ad96bd Mon Sep 17 00:00:00 2001
+From: Jian Liang <jianliang@tycoint.com>
+Date: Fri, 6 Oct 2017 11:40:16 +0100
+Subject: [PATCH 4/4] session: Use subnet route creation and deletion APIs
+To: connman@lists.01.org
+Cc: wagi@monom.org
+
+As subnet route is address and session specific in this case, so add
+prefixlen into struct connman_session, and update it along with ipconfig.
+Then use it in subnet route related APIs.
+
+Signed-off-by: Jian Liang <jianliang@tycoint.com>
+
+---
+Upstream-Status: Backport [https://git.kernel.org/pub/scm/network/connman/connman.git/commit/?id=285f25ef6cc9e4a43dab83523f3e2eab4365ac26]
+Signed-off-by: André Draszik <andre.draszik@jci.com>
+ src/session.c | 20 ++++++++++++++++----
+ 1 file changed, 16 insertions(+), 4 deletions(-)
+
+diff --git a/src/session.c b/src/session.c
+index 965ac06..7b7a14b 100644
+--- a/src/session.c
++++ b/src/session.c
+@@ -67,6 +67,7 @@ struct connman_session {
+ int index;
+ char *addr;
+ char *gateway;
++ unsigned char prefixlen;
+ bool policy_routing;
+ bool snat_enabled;
+ };
+@@ -357,13 +358,17 @@ static void del_default_route(struct connman_session *session)
+ if (!session->gateway)
+ return;
+
+- DBG("index %d routing table %d default gateway %s",
+- session->index, session->mark, session->gateway);
++ DBG("index %d routing table %d default gateway %s/%u",
++ session->index, session->mark, session->gateway, session->prefixlen);
++
++ __connman_inet_del_subnet_from_table(session->mark,
++ session->index, session->gateway, session->prefixlen);
+
+ __connman_inet_del_default_from_table(session->mark,
+ session->index, session->gateway);
+ g_free(session->gateway);
+ session->gateway = NULL;
++ session->prefixlen = 0;
+ session->index = -1;
+ }
+
+@@ -383,13 +388,20 @@ static void add_default_route(struct connman_session *session)
+ if (!session->gateway)
+ session->gateway = g_strdup(inet_ntoa(addr));
+
+- DBG("index %d routing table %d default gateway %s",
+- session->index, session->mark, session->gateway);
++ session->prefixlen = __connman_ipconfig_get_prefixlen(ipconfig);
++
++ DBG("index %d routing table %d default gateway %s/%u",
++ session->index, session->mark, session->gateway, session->prefixlen);
+
+ err = __connman_inet_add_default_to_table(session->mark,
+ session->index, session->gateway);
+ if (err < 0)
+ DBG("session %p %s", session, strerror(-err));
++
++ err = __connman_inet_add_subnet_to_table(session->mark,
++ session->index, session->gateway, session->prefixlen);
++ if (err < 0)
++ DBG("session add subnet route %p %s", session, strerror(-err));
+ }
+
+ static void del_nat_rules(struct connman_session *session)
+--
+2.7.4
+
diff --git a/meta/recipes-connectivity/connman/connman_1.35.bb b/meta/recipes-connectivity/connman/connman_1.35.bb
index 4663a7e3e8..ff2118113f 100644
--- a/meta/recipes-connectivity/connman/connman_1.35.bb
+++ b/meta/recipes-connectivity/connman/connman_1.35.bb
@@ -8,6 +8,10 @@ SRC_URI = "${KERNELORG_MIRROR}/linux/network/${BPN}/${BP}.tar.xz \
file://includes.patch \
file://0001-session-Keep-track-of-addr-in-fw_snat-session.patch \
file://0001-giognutls-Fix-a-crash-using-wispr-over-TLS.patch \
+ file://0001-inet-Add-prefixlen-to-iproute_default_function.patch \
+ file://0002-inet-Implement-subnet-route-creation-deletion-in-ipr.patch \
+ file://0003-inet-Implement-APIs-for-creating-and-deleting-subnet.patch \
+ file://0004-session-Use-subnet-route-creation-and-deletion-APIs.patch \
"
SRC_URI_append_libc-musl = " file://0002-resolve-musl-does-not-implement-res_ninit.patch \
"
--
2.15.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
end of thread, other threads:[~2018-01-19 14:42 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-01-19 14:42 [PATCH 0/3] connman: add a few backported patches André Draszik
2018-01-19 14:42 ` [PATCH 1/3] connman: fix nat-postrouting not update issue André Draszik
2018-01-19 14:42 ` [PATCH 2/3] connman: Fix a crash using wispr over TLS André Draszik
2018-01-19 14:42 ` [PATCH 3/3] connman: Implement subnet route in session André Draszik
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.