2d13b482c7f0520ee7ff198592d2976d8295e83a
[project/netifd.git] / interface.h
1 #ifndef __NETIFD_INTERFACE_H
2 #define __NETIFD_INTERFACE_H
3
4 #include "device.h"
5
6 struct interface;
7 struct interface_proto_state;
8
9 enum interface_event {
10         IFEV_UP,
11         IFEV_DOWN,
12 };
13
14 enum interface_state {
15         IFS_SETUP,
16         IFS_UP,
17         IFS_TEARDOWN,
18         IFS_DOWN,
19 };
20
21 struct interface_error {
22         struct list_head list;
23
24         const char *subsystem;
25         const char *code;
26         const char *data[];
27 };
28
29 /*
30  * interface configuration
31  */
32 struct interface {
33         struct list_head list;
34
35         char name[IFNAMSIZ];
36
37         bool active;
38         bool autostart;
39
40         enum interface_state state;
41
42         /* main interface that the interface is bound to */
43         struct device_user main_dev;
44
45         /* interface that layer 3 communication will go through */
46         struct device_user *l3_iface;
47
48         /* primary protocol state */
49         struct interface_proto_state *proto;
50
51         struct list_head address, routes;
52
53         /* errors/warnings while trying to bring up the interface */
54         struct list_head errors;
55
56         struct ubus_object ubus;
57 };
58
59 struct interface *get_interface(const char *name);
60 struct interface *alloc_interface(const char *name, struct uci_section *s);
61 void free_interface(struct interface *iface);
62
63 void interface_set_proto_state(struct interface *iface, struct interface_proto_state *state);
64
65 int set_interface_up(struct interface *iface);
66 int set_interface_down(struct interface *iface);
67
68 int interface_add_link(struct interface *iface, struct device *llif);
69 void interface_remove_link(struct interface *iface, struct device *llif);
70
71 void interface_add_error(struct interface *iface, const char *subsystem,
72                          const char *code, const char **data, int n_data);
73
74 int interface_attach_bridge(struct interface *iface, struct uci_section *s);
75
76 int interface_add_address(struct interface *iface, struct device_addr *addr);
77 void interface_del_address(struct interface *iface, struct device_addr *addr);
78 void interface_del_ctx_addr(struct interface *iface, void *ctx);
79
80 void start_pending_interfaces(void);
81
82 #endif