[PATCH] Force BSS expiration
by Yasser
We were having a problem with our wifi scanning, where the list of
wifi available would become empty and would not be repopulated until
after a long delay. Researching the problem it seemed that it was
related to BSS expiration age. There were already some people who had
faced the same issue, so inspired by this we developed the following
patch which allows us to set the BSS expiration age to match ConnMan
long scanning interval to avoid the loss of networks during a long
interval between two scans.
diff --git a/gsupplicant/gsupplicant.h b/gsupplicant/gsupplicant.h
index bfb52db..08d6b9e 100644
--- a/gsupplicant/gsupplicant.h
+++ b/gsupplicant/gsupplicant.h
@@ -267,7 +267,8 @@ int
g_supplicant_interface_connect(GSupplicantInterface *interface,
int g_supplicant_interface_disconnect(GSupplicantInterface *interface,
GSupplicantInterfaceCallback callback,
void *user_data);
-
+int g_supplicant_interface_set_bss_expiration_age(GSupplicantInterface
*interface,
+ unsigned int
bss_expiration_age);
int g_supplicant_interface_set_apscan(GSupplicantInterface *interface,
unsigned int ap_scan);
diff --git a/gsupplicant/supplicant.c b/gsupplicant/supplicant.c
index 6052f7b..fe6ad48 100644
--- a/gsupplicant/supplicant.c
+++ b/gsupplicant/supplicant.c
@@ -981,6 +981,46 @@ static void interface_capability(const char *key,
DBusMessageIter *iter,
key, dbus_message_iter_get_arg_type(iter));
}
+struct g_supplicant_bss_expiration_age
+{
+ GSupplicantInterface *interface;
+ unsigned int bss_expiration_age;
+};
+
+static void set_bss_expiration_age(DBusMessageIter *iter, void *user_data)
+{
+ struct g_supplicant_bss_expiration_age *data = user_data;
+ unsigned int bss_expiration_age = data->bss_expiration_age;
+
+ dbus_free(data);
+ dbus_message_iter_append_basic(iter, DBUS_TYPE_UINT32,
&bss_expiration_age);
+}
+
+int g_supplicant_interface_set_bss_expiration_age(GSupplicantInterface
*interface,
+ unsigned int
bss_expiration_age)
+{
+ struct g_supplicant_bss_expiration_age *data;
+ int ret;
+
+ data = dbus_malloc0(sizeof(*data));
+
+ if (!data)
+ return -ENOMEM;
+
+ data->bss_expiration_age = bss_expiration_age;
+ data->interface = interface;
+
+ ret = supplicant_dbus_property_set(interface->path,
+ SUPPLICANT_INTERFACE ".Interface",
+ "BSSExpireAge", DBUS_TYPE_UINT32_AS_STRING,
+ set_bss_expiration_age, NULL, data, NULL);
+ if (ret < 0)
+ dbus_free(data);
+
+ return ret;
+}
+
+
struct set_apscan_data
{
unsigned int ap_scan;
diff --git a/plugins/wifi.c b/plugins/wifi.c
index 910b739..57b63e2 100644
--- a/plugins/wifi.c
+++ b/plugins/wifi.c
@@ -1522,6 +1522,7 @@ static void interface_create_callback(int result,
void *user_data)
{
struct wifi_data *wifi = user_data;
+ char * bgscan_range_max;
DBG("result %d ifname %s, wifi %p", result,
g_supplicant_interface_get_ifname(interface),
@@ -1537,6 +1538,13 @@ static void interface_create_callback(int result,
wifi->interface_ready = true;
finalize_interface_creation(wifi);
}
+ /* Force the BSS expiration age to match ConnMan long scanning
interval to avoid the loss of networks during a long interval between
two scannings. */
+ if ((bgscan_range_max = strrchr(BGSCAN_DEFAULT,':')) != NULL &&
+
g_supplicant_interface_set_bss_expiration_age(interface,
strtol(bgscan_range_max + 1, (char**)NULL, 10) + 10) >= 0) {
+ DBG("bss expiration age successfully updated");
+ } else {
+ DBG("bss expiration age update has failed");
+ }
}
static int wifi_enable(struct connman_device *device)
3 months, 2 weeks
[PATCH 0/6] Support SplitRouting variable on vpnd
by Jussi Laakkonen
Add support for SplitRouting variable on vpnd. This is amended to VPN
connection API as boolean parameter and allows to use the API for defining
whether to use the VPN as default route (SplitRouting=false) or not. The value
defaults to false.
On connmand side SplitRouting is exposed for VPN plugin via provider.
SplitRouting is also added to supported D-Bus variables in VPN plugin.
On vpnd side vpn-config.c is amended with support to retrieve boolean from
keyfile and used in vpn-provider.c. Warning is printed if SplitRouting is
attempted to be added as string and thus, vpn_provider_set_boolean() is added.
Additionally checks for whether the default route has been added for a VPN is
implemented. Adding a default route is being prevented for split routed VPNs
and enforced on non-split routed VPNs, when the default route should be set.
Jussi Laakkonen (6):
service: Expose set_split_routing() for internal use
provider: Expose split routing variable in VPN properties
vpn: Add SplitRouting to supported D-Bus variables
vpn-config: Implement function to get boolean from keyfile
vpn-provider: Support split routing option for VPN providers
doc: Document VPN connection SplitRouting boolean
doc/vpn-connection-api.txt | 9 +-
include/provider.h | 2 +
plugins/vpn.c | 16 +++-
src/connman.h | 2 +
src/provider.c | 18 ++++
src/service.c | 23 +++--
vpn/vpn-config.c | 15 +++
vpn/vpn-provider.c | 182 ++++++++++++++++++++++++++++++++-----
vpn/vpn-provider.h | 2 +
vpn/vpn.h | 10 +-
10 files changed, 237 insertions(+), 42 deletions(-)
--
2.20.1
5 months, 3 weeks
[PATCH] iptables: Fix incorrect code
by Rahul Jain
[PATCH] iptables: Fix incorrect code
Signed-off-by: Bhaskar Dutta <bhaskar.d(a)samsung.com>
Signed-off-by: Rahul Jain <rahul.jain(a)samsung.com>
---
src/iptables.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/iptables.c b/src/iptables.c
index 47ea1c2..6feb007 100644
--- a/src/iptables.c
+++ b/src/iptables.c
@@ -3383,7 +3383,7 @@ static int parse_rule_spec(struct connman_iptables *table,
break;
if (invert)
- ctx->ip->invflags |= IP6T_INV_DSTIP;
+ ctx->ipv6->invflags |= IP6T_INV_DSTIP;
}
break;
--
2.7.4
5 months, 3 weeks
connman wifi disconnect problem
by KeithG
I have been trying to diagnose a problem I am having with my RPis. I am
using iwd and connman to manage my ethernet connectivity. What I have
noticed is that after a while, sometimes, connectivity stops and I cannot
reconnect except after a reboot. I have seen this on RPi3's more so than
with RPi1/2. I have only noticed it with wlan0 and not with ethernet.
From the journal, it looks like the network goes down (wlan0), connman
quickly notes it is down and pulls the ip address and sets the interface
down and then avahi identifies that it is down. It is interesting that
sometime before this, the ipv4 address was withdrawn. I am running an
openWRT router (other side of the DHCP equation) and this RPI MAC has a
reserved ipv4 address on the router.
If I restart connman on the RPi, it will not regain connectivity on ipv4 or
ipv6 on wlan0. If I reboot the router and then restart connman on the RPi,
it will not regain connectivity. I have to power cycle the RPI to get it to
connect again. If I plug in the ethernet cable, it grabs an address
immediately and everything is back, but it will still not reconnect over
wifi. I must reboot the RPi to get it to reconnect. I will see if I can
figure out how to have journal log more info on connman...
Any idea what this could be? I will flash the router with ddwrt and see if
it is the router.
In my /etc/connman/main.conf, I have this:
[General]
FallbackNameservers = 8.8.8.8,8.8.4.4
DefaultAutoConnectTechnologies = ethernet,wifi
PreferredTechnologies = ethernet,wifi
AllowHostnameUpdates = false
SingleConnectedTechnology = true
AlwaysConnectedTechnologies = ethernet,wifi
AutoConnectRoamingServices = true
The journal shows this:
Jun 20 18:02:19 rune64 kernel: nfs: server 192.168.2.198 not responding,
timed out
Jun 20 18:02:20 rune64 systemd[1]: dbus-org.freedesktop.timedate1.service:
Succeeded.
Jun 20 18:02:35 rune64 kernel: nfs: server 192.168.2.198 not responding,
timed out
Jun 20 18:02:39 rune64 kernel: nfs: server 192.168.2.198 not responding,
timed out
... lots of these 'not responding'...
Jun 20 18:07:54 rune64 kernel: nfs: server 192.168.2.198 not responding,
timed out
Jun 20 18:07:55 rune64 avahi-daemon[6529]: Withdrawing address record for
2601:241:4200:255:ba27:ebff:fe52:ccd0 on wlan0.
Jun 20 18:07:55 rune64 connmand[259]: wlan0 {del} address
2601:241:4200:255:ba27:ebff:fe52:ccd0/64 label (null)
Jun 20 18:07:55 rune64 avahi-daemon[6529]: Leaving mDNS multicast group on
interface wlan0.IPv6 with address 2601:241:4200:255:ba27:ebff:fe52:ccd0.
Jun 20 18:07:55 rune64 avahi-daemon[6529]: Joining mDNS multicast group on
interface wlan0.IPv6 with address fdcb:9d61:70f3:0:ba27:ebff:fe52:ccd0.
Jun 20 18:07:57 rune64 kernel: nfs: server 192.168.2.198 not responding,
timed out
Jun 20 18:08:10 rune64 kernel: nfs: server 192.168.2.198 not responding,
timed out
Jun 20 18:08:13 rune64 kernel: nfs: server 192.168.2.198 not responding,
timed out
Jun 20 18:08:14 rune64 connmand[259]: wlan0 {del} route 2601:241:4200:255::
gw :: scope 0 <UNIVERSE>
6 months
ipv6 test web page down
by KeithG
DOn't know if this is the right place or not, but since moving to connman,
I have noticed that the ipv6 test page is down. the ipv4 one works fine,
but I get a mention in the log:
"connmand[254]: Failed to find URL:
http://ipv6.connman.net/online/status.html"
If I try to get to it from a browser, I get a '502 bad gateway error'
If I use curl on the cli, I get this:
# curl ipv4.connman.net/online/status.html
<html>
<head>
</head>
<body>
</body>
</html>
# curl ipv6.connman.net/online/status.html
<html>
<head><title>502 Bad Gateway</title></head>
<body bgcolor="white">
<center><h1>502 Bad Gateway</h1></center>
<hr><center>nginx</center>
</body>
</html>
I think something is not set right on the server...
Keith
6 months
[PATCH v2] ipconfig: cleanup ipdevice gateway fields
by Sergey Matyukevich
Suggested commit fixes runtime updates for WiFi service. For instance,
consider the following use-case:
- cellular and WiFi technologies are enabled
- WiFi is a preferred technology
- EnableOnlineCheck is enabled
- WiFi service is described by a service file
- WiFi service is in ONLINE state
When access point is modified in WiFi service file, connman detects
those changes and performs WiFi service reconfiguration. However
updated WiFi service never reaches ONLINE state.
The root cause is in a stalled gateway value returned by
__connman_ipconfig_get_gateway_from_index in wispr_route_request
function. Online check fails since previous gateway address is used
for the new access point.
Looking at ipconfig code, it turns out that ipdevice->ipv[46]_gateway
fields are not cleaned up when IPv[46] system network configuration
is cleared. Suggested fix is to cleanup ipdevice IPv4/IPv6 gateways
whenever IPv4/IPv6 system network configuration is cleared.
---
v1 -> v2
- address review comments: remove NULL check before g_free
src/ipconfig.c | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/src/ipconfig.c b/src/ipconfig.c
index 915c0823..a1073a75 100644
--- a/src/ipconfig.c
+++ b/src/ipconfig.c
@@ -1647,6 +1647,9 @@ int __connman_ipconfig_enable(struct connman_ipconfig *ipconfig)
connman_ipaddress_clear(ipdevice->config_ipv4->system);
__connman_ipconfig_unref(ipdevice->config_ipv4);
+
+ g_free(ipdevice->ipv4_gateway);
+ ipdevice->ipv4_gateway = NULL;
}
if (type == CONNMAN_IPCONFIG_TYPE_IPV6 &&
@@ -1657,6 +1660,9 @@ int __connman_ipconfig_enable(struct connman_ipconfig *ipconfig)
connman_ipaddress_clear(ipdevice->config_ipv6->system);
__connman_ipconfig_unref(ipdevice->config_ipv6);
+
+ g_free(ipdevice->ipv6_gateway);
+ ipdevice->ipv6_gateway = NULL;
}
if (type == CONNMAN_IPCONFIG_TYPE_IPV4)
@@ -1719,6 +1725,10 @@ int __connman_ipconfig_disable(struct connman_ipconfig *ipconfig)
connman_ipaddress_clear(ipdevice->config_ipv4->system);
__connman_ipconfig_unref(ipdevice->config_ipv4);
ipdevice->config_ipv4 = NULL;
+
+ g_free(ipdevice->ipv4_gateway);
+ ipdevice->ipv4_gateway = NULL;
+
return 0;
}
@@ -1728,6 +1738,10 @@ int __connman_ipconfig_disable(struct connman_ipconfig *ipconfig)
connman_ipaddress_clear(ipdevice->config_ipv6->system);
__connman_ipconfig_unref(ipdevice->config_ipv6);
ipdevice->config_ipv6 = NULL;
+
+ g_free(ipdevice->ipv6_gateway);
+ ipdevice->ipv6_gateway = NULL;
+
return 0;
}
6 months
[RFC PATCH] ipconfig: cleanup ipdevice gateway fields
by Sergey Matyukevich
Suggested commit fixes runtime update of WiFi service. For instance,
consider the following use-case:
- cellular and WiFi technologies are enabled
- WiFi is a preferred technology
- EnableOnlineCheck is enabled
- WiFi service is described by a service file
- WiFi service is in ONLINE state
When access point is modified in WiFi service file, connman detects
those changes and performs WiFi service reconfiguration. However
updated WiFi service never reaches ONLINE state.
The root cause is in a stalled gateway value returned by
__connman_ipconfig_get_gateway_from_index in
wispr_route_request function. Online check fails since previous
gateway address is used for the new access point.
Looking at ipconfig code, it turns out that ipdevice->ipv[46]_gateway
fields are not cleaned up when IPv[46] system network configuration is
cleared. Suggested fix is to cleanup IPv4/IPv6 gateways in ipdevice
whenever IPv4/IPv6 system network configuration is cleared.
---
src/ipconfig.c | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
diff --git a/src/ipconfig.c b/src/ipconfig.c
index 915c0823..21a2c41d 100644
--- a/src/ipconfig.c
+++ b/src/ipconfig.c
@@ -1647,6 +1647,11 @@ int __connman_ipconfig_enable(struct connman_ipconfig *ipconfig)
connman_ipaddress_clear(ipdevice->config_ipv4->system);
__connman_ipconfig_unref(ipdevice->config_ipv4);
+
+ if (ipdevice->ipv4_gateway) {
+ g_free(ipdevice->ipv4_gateway);
+ ipdevice->ipv4_gateway = NULL;
+ }
}
if (type == CONNMAN_IPCONFIG_TYPE_IPV6 &&
@@ -1657,6 +1662,11 @@ int __connman_ipconfig_enable(struct connman_ipconfig *ipconfig)
connman_ipaddress_clear(ipdevice->config_ipv6->system);
__connman_ipconfig_unref(ipdevice->config_ipv6);
+
+ if (ipdevice->ipv6_gateway) {
+ g_free(ipdevice->ipv6_gateway);
+ ipdevice->ipv6_gateway = NULL;
+ }
}
if (type == CONNMAN_IPCONFIG_TYPE_IPV4)
@@ -1719,6 +1729,12 @@ int __connman_ipconfig_disable(struct connman_ipconfig *ipconfig)
connman_ipaddress_clear(ipdevice->config_ipv4->system);
__connman_ipconfig_unref(ipdevice->config_ipv4);
ipdevice->config_ipv4 = NULL;
+
+ if (ipdevice->ipv4_gateway) {
+ g_free(ipdevice->ipv4_gateway);
+ ipdevice->ipv4_gateway = NULL;
+ }
+
return 0;
}
@@ -1728,6 +1744,12 @@ int __connman_ipconfig_disable(struct connman_ipconfig *ipconfig)
connman_ipaddress_clear(ipdevice->config_ipv6->system);
__connman_ipconfig_unref(ipdevice->config_ipv6);
ipdevice->config_ipv6 = NULL;
+
+ if (ipdevice->ipv6_gateway) {
+ g_free(ipdevice->ipv6_gateway);
+ ipdevice->ipv6_gateway = NULL;
+ }
+
return 0;
}
6 months, 1 week
[PATCH] test: Replace static glib with gi.repository module
by Daniel Wagner
By using the dynamic gi.repository modules the scripts run also with
Python3.
---
test/monitor-connman | 4 ++--
test/monitor-services | 4 ++--
test/p2p-on-supplicant | 13 ++++---------
test/simple-agent | 4 ++--
test/test-counter | 5 +++--
test/test-session | 10 ++++------
6 files changed, 17 insertions(+), 23 deletions(-)
diff --git a/test/monitor-connman b/test/monitor-connman
index 8403f913051b..c6edd76075ee 100755
--- a/test/monitor-connman
+++ b/test/monitor-connman
@@ -1,6 +1,6 @@
#!/usr/bin/python
-import gobject
+from gi.repository import GLib
import dbus
import dbus.mainloop.glib
@@ -82,6 +82,6 @@ from dbus.lowlevel import MethodCallMessage, HANDLER_RESULT_NOT_YET_HANDLED
bus.add_match_string("member=Update,interface=net.connman.Notification")
bus.add_message_filter(message_filter)
- mainloop = gobject.MainLoop()
+ mainloop = GLib.MainLoop()
mainloop.run()
diff --git a/test/monitor-services b/test/monitor-services
index d570e5f57d9c..c520a8cda6c1 100755
--- a/test/monitor-services
+++ b/test/monitor-services
@@ -1,6 +1,6 @@
#!/usr/bin/python
-import gobject
+from gi.repository import GLib
import dbus
import dbus.mainloop.glib
@@ -102,5 +102,5 @@ import dbus.mainloop.glib
signal_name="PropertyChanged",
path_keyword="path")
- mainloop = gobject.MainLoop()
+ mainloop = GLib.MainLoop()
mainloop.run()
diff --git a/test/p2p-on-supplicant b/test/p2p-on-supplicant
index 339d5eba726e..22501fc39d99 100755
--- a/test/p2p-on-supplicant
+++ b/test/p2p-on-supplicant
@@ -3,10 +3,9 @@
from os import O_NONBLOCK
from sys import stdin, stdout, exit, version_info, argv
from fcntl import fcntl, F_GETFL, F_SETFL
-import glib
+from gi.repository import GLib
import dbus
import dbus.mainloop.glib
-import gobject
import argparse
WPA_NAME='fi.w1.wpa_supplicant1'
@@ -32,7 +31,7 @@ P2P_GROUP_CAPAB_GROUP_OWNER = 1 << 0
flags = fcntl(stdin.fileno(), F_GETFL)
flags |= O_NONBLOCK
fcntl(stdin.fileno(), F_SETFL, flags)
- glib.io_add_watch(stdin, glib.IO_IN, self.input_cb)
+ GLib.io_add_watch(stdin, GLib.IO_IN, self.input_cb)
self.prompt()
@@ -42,7 +41,7 @@ P2P_GROUP_CAPAB_GROUP_OWNER = 1 << 0
stdout.flush()
def input_cb(self, fd, event):
- if event != glib.IO_IN:
+ if event != GLib.IO_IN:
return
self.line += fd.read();
@@ -610,10 +609,6 @@ P2P_GROUP_CAPAB_GROUP_OWNER = 1 << 0
return command
def main():
- if version_info.major != 2:
- print('You need to run this under Python 2.x')
- exit(1)
-
parser = argparse.ArgumentParser(description='Connman P2P Test')
command_list = build_args(parser)
@@ -634,7 +629,7 @@ P2P_GROUP_CAPAB_GROUP_OWNER = 1 << 0
bus = dbus.SystemBus()
- mainloop = gobject.MainLoop()
+ mainloop = GLib.MainLoop()
wpa_s = Wpa_s(bus, args.ifname, args.command + params)
diff --git a/test/simple-agent b/test/simple-agent
index 282785e23d34..04de3f604858 100755
--- a/test/simple-agent
+++ b/test/simple-agent
@@ -1,6 +1,6 @@
#!/usr/bin/python
-import gobject
+from gi.repository import GLib
import dbus
import dbus.service
@@ -351,7 +351,7 @@ import sys
except:
"Cannot register vpn agent"
- mainloop = gobject.MainLoop()
+ mainloop = GLib.MainLoop()
mainloop.run()
#manager.UnregisterAgent(path)
diff --git a/test/test-counter b/test/test-counter
index c09aabc12b4b..4c55162045c9 100755
--- a/test/test-counter
+++ b/test/test-counter
@@ -1,7 +1,8 @@
#!/usr/bin/python
+from gi.repository import GLib
+
import sys
-import gobject
import dbus
import dbus.service
@@ -73,7 +74,7 @@ import dbus.mainloop.glib
manager.RegisterCounter(path, dbus.UInt32(10), dbus.UInt32(period))
- mainloop = gobject.MainLoop()
+ mainloop = GLib.MainLoop()
mainloop.run()
#manager.UnregisterCounter(path)
diff --git a/test/test-session b/test/test-session
index e45d22b8e724..112074f16b75 100755
--- a/test/test-session
+++ b/test/test-session
@@ -1,15 +1,13 @@
#!/usr/bin/python
+from gi.repository import GLib
+
import sys
-import gobject
-import string
import dbus
import dbus.service
import dbus.mainloop.glib
-import glib
-
import traceback
def extract_list(list):
@@ -293,11 +291,11 @@ import traceback
app_path = sys.argv[2]
bus = dbus.SessionBus()
- app_name = "com.example.SessionApplication.%s" % (string.strip(app_path, "/"))
+ app_name = "com.example.SessionApplication.%s" % (str.strip(app_path, "/"))
if sys.argv[1] == "run":
name = dbus.service.BusName(app_name, bus)
- mainloop = gobject.MainLoop()
+ mainloop = GLib.MainLoop()
app = SessionApplication(bus, app_path, mainloop)
--
2.28.0
6 months, 2 weeks
[PATCH] vpn: Move vpn_provider_get_ident() declaration to vpn-provider.h
by Jussi Laakkonen
All the functions the VPN plugins would need should be declared in the
relevant headers. VPNs do not need to include vpn/vpn.h as the functions
declared there are not for plugins to use.
Drop also the "../vpn.h" include from OpenVPN plugin, which was the only
plugin using vpn_provider_get_ident().
---
vpn/plugins/openvpn.c | 1 -
vpn/vpn-provider.h | 1 +
vpn/vpn.h | 1 -
3 files changed, 1 insertion(+), 2 deletions(-)
diff --git a/vpn/plugins/openvpn.c b/vpn/plugins/openvpn.c
index bc0303c2..abbf20d4 100644
--- a/vpn/plugins/openvpn.c
+++ b/vpn/plugins/openvpn.c
@@ -51,7 +51,6 @@
#include "../vpn-agent.h"
#include "vpn.h"
-#include "../vpn.h"
#define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0]))
diff --git a/vpn/vpn-provider.h b/vpn/vpn-provider.h
index 0275d51a..d2627847 100644
--- a/vpn/vpn-provider.h
+++ b/vpn/vpn-provider.h
@@ -118,6 +118,7 @@ const char *vpn_provider_get_save_group(struct vpn_provider *provider);
const char *vpn_provider_get_name(struct vpn_provider *provider);
const char *vpn_provider_get_host(struct vpn_provider *provider);
const char *vpn_provider_get_path(struct vpn_provider *provider);
+const char *vpn_provider_get_ident(struct vpn_provider *provider);
unsigned int vpn_provider_get_authentication_errors(
struct vpn_provider *provider);
diff --git a/vpn/vpn.h b/vpn/vpn.h
index 45cf46dc..3356d53e 100644
--- a/vpn/vpn.h
+++ b/vpn/vpn.h
@@ -85,7 +85,6 @@ int __vpn_provider_create_from_config(GHashTable *settings,
int __vpn_provider_set_string_immutable(struct vpn_provider *provider,
const char *key, const char *value);
DBusMessage *__vpn_provider_get_connections(DBusMessage *msg);
-const char *vpn_provider_get_ident(struct vpn_provider *provider);
struct vpn_provider *__vpn_provider_lookup(const char *identifier);
int __vpn_provider_indicate_state(struct vpn_provider *provider,
enum vpn_provider_state state);
--
2.20.1
6 months, 2 weeks
wpa3 support
by Dembianny, Sven (GED-SDD1)
Hi,
is it planned to implement WPA3 support?
Thanks, Sven
6 months, 2 weeks