X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fnetifd.git;a=blobdiff_plain;f=interface.h;h=e19d61ddbc13c57ba13f35adb280169129638ee4;hp=87a7cb3a195b92a45eecbc92b69813a4c3d57931;hb=85218c601b0f5895f9025910643761930c02eb1a;hpb=d5202486636818e3ff48ede9d3e06c886c659c0a diff --git a/interface.h b/interface.h index 87a7cb3..e19d61d 100644 --- a/interface.h +++ b/interface.h @@ -1,6 +1,9 @@ #ifndef __NETIFD_INTERFACE_H #define __NETIFD_INTERFACE_H +#include +#include "device.h" + struct interface; struct interface_proto_state; @@ -24,6 +27,42 @@ struct interface_error { const char *data[]; }; +enum interface_addr_flags { + /* address family for routes and addresses */ + IFADDR_INET4 = (0 << 0), + IFADDR_INET6 = (1 << 0), + IFADDR_FAMILY = IFADDR_INET4 | IFADDR_INET6, + + /* device route (no gateway) */ + IFADDR_DEVICE = (1 << 1), +}; + +union if_addr { + struct in_addr in; + struct in6_addr in6; +}; + +struct interface_addr { + struct list_head list; + void *ctx; + + enum interface_addr_flags flags; + + unsigned int mask; + union if_addr addr; +}; + +struct interface_route { + struct list_head list; + void *ctx; + + enum interface_addr_flags flags; + + unsigned int mask; + union if_addr addr; + union if_addr nexthop; +}; + /* * interface configuration */ @@ -46,6 +85,8 @@ struct interface { /* primary protocol state */ struct interface_proto_state *proto; + struct list_head address, routes; + /* errors/warnings while trying to bring up the interface */ struct list_head errors; @@ -53,9 +94,11 @@ struct interface { }; struct interface *get_interface(const char *name); -struct interface *alloc_interface(const char *name); +struct interface *alloc_interface(const char *name, struct uci_section *s); void free_interface(struct interface *iface); +void interface_set_proto_state(struct interface *iface, struct interface_proto_state *state); + int set_interface_up(struct interface *iface); int set_interface_down(struct interface *iface); @@ -67,4 +110,10 @@ void interface_add_error(struct interface *iface, const char *subsystem, int interface_attach_bridge(struct interface *iface, struct uci_section *s); +int interface_add_address(struct interface *iface, struct interface_addr *addr); +void interface_del_address(struct interface *iface, struct interface_addr *addr); +void interface_del_ctx_addr(struct interface *iface, void *ctx); + +void start_pending_interfaces(void); + #endif