system-linux: improve handling of device rename
[oweals/netifd.git] / wireless.h
1 /*
2  * netifd - network interface daemon
3  * Copyright (C) 2013 Felix Fietkau <nbd@openwrt.org>
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2
7  * as published by the Free Software Foundation
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  */
14 #ifndef __NETIFD_WIRELESS_H
15 #define __NETIFD_WIRELESS_H
16
17 #include <libubox/utils.h>
18 #include <libubox/list.h>
19 #include "interface.h"
20
21 extern struct vlist_tree wireless_devices;
22 extern struct avl_tree wireless_drivers;
23
24 struct wireless_driver {
25         struct avl_node node;
26
27         const char *name;
28         const char *script;
29
30         struct {
31                 char *buf;
32                 struct uci_blob_param_list *config;
33         } device, interface, vlan, station;
34 };
35
36 struct wireless_device {
37         struct vlist_node node;
38
39         struct list_head handler;
40         bool handler_action;
41         bool handler_pending;
42         bool serialize;
43
44         struct wireless_driver *drv;
45         struct vlist_tree interfaces;
46         struct vlist_tree vlans;
47         struct vlist_tree stations;
48         char *name;
49
50         struct netifd_process script_task;
51         struct uloop_timeout timeout;
52         struct uloop_timeout poll;
53
54         struct list_head script_proc;
55         struct uloop_fd script_proc_fd;
56         struct uloop_timeout script_check;
57
58         struct ubus_request_data *kill_request;
59
60         struct blob_attr *prev_config;
61         struct blob_attr *config;
62         struct blob_attr *data;
63
64         bool autostart;
65         bool disabled;
66         bool retry_setup_failed;
67
68         enum interface_state state;
69         enum interface_config_state config_state;
70         bool reconf;
71         bool cancel;
72         int retry;
73
74         int vif_idx;
75         int vlan_idx;
76         int sta_idx;
77 };
78
79 struct wireless_interface {
80         struct vlist_node node;
81         const char *section;
82         char *name;
83
84         struct wireless_device *wdev;
85
86         struct blob_attr *config;
87         struct blob_attr *data;
88
89         const char *ifname;
90         struct blob_attr *network;
91         bool isolate;
92         bool ap_mode;
93 };
94
95 struct wireless_vlan {
96         struct vlist_node node;
97         const char *section;
98         char *name;
99
100         struct wireless_device *wdev;
101         char *vif;
102
103         struct blob_attr *config;
104         struct blob_attr *data;
105
106         const char *ifname;
107         struct blob_attr *network;
108         bool isolate;
109 };
110
111 struct wireless_station {
112         struct vlist_node node;
113         const char *section;
114         char *name;
115
116         struct wireless_device *wdev;
117         char *vif;
118
119         struct blob_attr *config;
120         struct blob_attr *data;
121 };
122
123 struct wireless_process {
124         struct list_head list;
125
126         const char *exe;
127         int pid;
128
129         bool required;
130 };
131
132 void wireless_device_create(struct wireless_driver *drv, const char *name, struct blob_attr *data);
133 void wireless_device_set_up(struct wireless_device *wdev);
134 void wireless_device_set_down(struct wireless_device *wdev);
135 void wireless_device_reconf(struct wireless_device *wdev);
136 void wireless_device_status(struct wireless_device *wdev, struct blob_buf *b);
137 void wireless_device_get_validate(struct wireless_device *wdev, struct blob_buf *b);
138 struct wireless_interface* wireless_interface_create(struct wireless_device *wdev, struct blob_attr *data, const char *section);
139 void wireless_vlan_create(struct wireless_device *wdev, char *vif, struct blob_attr *data, const char *section);
140 void wireless_station_create(struct wireless_device *wdev, char *vif, struct blob_attr *data, const char *section);
141 int wireless_device_notify(struct wireless_device *wdev, struct blob_attr *data,
142                            struct ubus_request_data *req);
143
144 void wireless_start_pending(void);
145 void wireless_init(void);
146
147 #endif