/* * netifd - network interface daemon * Copyright (C) 2013 Felix Fietkau * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 * as published by the Free Software Foundation * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifndef __NETIFD_WIRELESS_H #define __NETIFD_WIRELESS_H #include #include "interface.h" struct vlist_tree wireless_devices; struct avl_tree wireless_drivers; struct wireless_driver { struct avl_node node; const char *name; const char *script; struct { char *buf; struct uci_blob_param_list *config; } device, interface; }; struct wireless_device { struct vlist_node node; struct wireless_driver *drv; struct vlist_tree interfaces; char *name; struct netifd_process script_task; struct uloop_timeout timeout; struct uloop_timeout poll; struct list_head script_proc; struct uloop_fd script_proc_fd; struct uloop_timeout script_check; struct ubus_request_data *kill_request; struct blob_attr *config; struct blob_attr *data; bool config_autostart; bool autostart; enum interface_state state; enum interface_config_state config_state; bool cancel; int retry; int vif_idx; }; struct wireless_interface { struct vlist_node node; char *name; struct wireless_device *wdev; struct blob_attr *config; struct blob_attr *data; const char *ifname; const char *network; }; struct wireless_process { struct list_head list; const char *exe; int pid; bool required; }; void wireless_device_create(struct wireless_driver *drv, const char *name, struct blob_attr *data); void wireless_device_set_up(struct wireless_device *wdev); void wireless_device_set_down(struct wireless_device *wdev); void wireless_device_status(struct wireless_device *wdev, struct blob_buf *b); void wireless_interface_create(struct wireless_device *wdev, struct blob_attr *data); int wireless_device_notify(struct wireless_device *wdev, struct blob_attr *data, struct ubus_request_data *req); void wireless_start_pending(void); #endif