summaryrefslogtreecommitdiff
path: root/src/network/networkd-link.c
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2019-07-24 14:46:55 +0900
committerYu Watanabe <watanabe.yu+github@gmail.com>2019-10-15 01:59:06 +0900
commit8d968fdd991d3471aa9b484eac58708786c48d85 (patch)
tree995c8ba42dab376d1d8c9ce1e7bae4989fe7cd6b /src/network/networkd-link.c
parentad932b156c159094148bfbb508641fb818f932f1 (diff)
downloadsystemd-8d968fdd991d3471aa9b484eac58708786c48d85.tar.gz
network: support matching based on wifi SSID
Diffstat (limited to 'src/network/networkd-link.c')
-rw-r--r--src/network/networkd-link.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c
index 328295e98a..7f00337f13 100644
--- a/src/network/networkd-link.c
+++ b/src/network/networkd-link.c
@@ -33,6 +33,7 @@
#include "networkd-neighbor.h"
#include "networkd-radv.h"
#include "networkd-routing-policy-rule.h"
+#include "networkd-wifi.h"
#include "set.h"
#include "socket-util.h"
#include "stdio-util.h"
@@ -712,6 +713,7 @@ static Link *link_free(Link *link) {
free(link->ifname);
free(link->kind);
+ free(link->ssid);
(void) unlink(link->state_file);
free(link->state_file);
@@ -2863,7 +2865,7 @@ int link_reconfigure(Link *link) {
return 0;
r = network_get(link->manager, link->sd_device, link->ifname,
- &link->mac, &network);
+ &link->mac, link->ssid, &network);
if (r == -ENOENT) {
link_enter_unmanaged(link);
return 0;
@@ -2952,8 +2954,12 @@ static int link_initialized_and_synced(Link *link) {
return r;
if (!link->network) {
+ r = wifi_get_ssid(link);
+ if (r < 0)
+ return r;
+
r = network_get(link->manager, link->sd_device, link->ifname,
- &link->mac, &network);
+ &link->mac, link->ssid, &network);
if (r == -ENOENT) {
link_enter_unmanaged(link);
return 0;
@@ -3327,6 +3333,15 @@ static int link_carrier_gained(Link *link) {
assert(link);
+ r = wifi_get_ssid(link);
+ if (r < 0)
+ return r;
+ if (r > 0) {
+ r = link_reconfigure(link);
+ if (r < 0)
+ return r;
+ }
+
if (IN_SET(link->state, LINK_STATE_CONFIGURING, LINK_STATE_CONFIGURED)) {
r = link_acquire_conf(link);
if (r < 0) {