enum interface_event {
IFEV_DOWN,
IFEV_UP,
+ IFEV_FREE,
+ IFEV_RELOAD,
};
enum interface_state {
struct interface_user {
struct list_head list;
struct interface *iface;
- void (*cb)(struct interface_user *dep, enum interface_event ev);
+ void (*cb)(struct interface_user *dep, struct interface *iface, enum interface_event ev);
};
struct interface_ip_settings {
struct vlist_simple_tree dns_search;
};
+struct interface_data {
+ struct avl_node node;
+ struct blob_attr data[];
+};
+
/*
* interface configuration
*/
struct interface_ip_settings proto_ip;
struct interface_ip_settings config_ip;
+ struct vlist_tree host_routes;
int metric;
/* errors/warnings while trying to bring up the interface */
struct list_head errors;
+ /* extra data provided by protocol handlers or modules */
+ struct avl_tree data;
+
struct uloop_timeout remove_timer;
struct ubus_object ubus;
};
void interface_add_error(struct interface *iface, const char *subsystem,
const char *code, const char **data, int n_data);
+int interface_add_data(struct interface *iface, const struct blob_attr *data);
+
void interface_update_start(struct interface *iface);
void interface_update_complete(struct interface *iface);
-void interface_queue_event(struct interface *iface, enum interface_event ev);
-void interface_dequeue_event(struct interface *iface);
-
void interface_start_pending(void);
#endif