X-Git-Url: http://git.openwrt.org/?p=project%2Fnetifd.git;a=blobdiff_plain;f=interface.h;h=3d58aa3dee4099d8c017ab5c0611a04bc64c4a34;hp=8eeb7db8a1c34c3afeb97c9dbf283ef885acf728;hb=24ce1eab4910869576406bafd0489daf0d3e6e28;hpb=0b0e5e2fc5b065092644a5c4717c0a03a9098dcf diff --git a/interface.h b/interface.h index 8eeb7db..3d58aa3 100644 --- a/interface.h +++ b/interface.h @@ -23,9 +23,13 @@ struct interface_proto_state; enum interface_event { IFEV_DOWN, IFEV_UP, + IFEV_UP_FAILED, IFEV_UPDATE, IFEV_FREE, IFEV_RELOAD, + IFEV_LINK_UP, + /* send when a new interface created. This is before proto handlers has been attached. */ + IFEV_CREATE, }; enum interface_state { @@ -78,6 +82,7 @@ struct interface_ip_settings { struct vlist_tree addr; struct vlist_tree route; struct vlist_tree prefix; + struct vlist_tree neighbor; struct vlist_simple_tree dns_servers; struct vlist_simple_tree dns_search; @@ -103,6 +108,9 @@ struct interface { const char *name; const char *ifname; + char *jail; + char *jail_ifname; + int netns_fd; bool available; bool autostart; @@ -112,6 +120,8 @@ struct interface { bool link_state; bool force_link; bool dynamic; + bool policy_rules_set; + bool link_up_event; time_t start_time; enum interface_state state; @@ -120,6 +130,7 @@ struct interface { struct list_head users; + /* for alias interface */ const char *parent_ifname; struct interface_user parent_iface; @@ -139,8 +150,10 @@ struct interface { struct interface_ip_settings proto_ip; struct interface_ip_settings config_ip; struct vlist_tree host_routes; + struct vlist_tree host_neighbors; int metric; + int dns_metric; unsigned int ip4table; unsigned int ip6table; @@ -150,6 +163,7 @@ struct interface { uint8_t assignment_length; int32_t assignment_hint; struct list_head assignment_classes; + int assignment_weight; /* errors/warnings while trying to bring up the interface */ struct list_head errors; @@ -165,37 +179,36 @@ struct interface { extern struct vlist_tree interfaces; extern const struct uci_blob_param_list interface_attr_list; -struct interface *interface_alloc(const char *name, struct blob_attr *config); +struct interface *interface_alloc(const char *name, struct blob_attr *config, bool dynamic); -void interface_set_dynamic(struct interface *iface); - -void interface_add(struct interface *iface, struct blob_attr *config); +bool interface_add(struct interface *iface, struct blob_attr *config); bool interface_add_alias(struct interface *iface, struct blob_attr *config); void interface_set_proto_state(struct interface *iface, struct interface_proto_state *state); void interface_set_available(struct interface *iface, bool new_state); -int interface_set_up(struct interface *iface); -int interface_set_down(struct interface *iface); -void __interface_set_down(struct interface *iface, bool force); +void interface_set_up(struct interface *iface); +void interface_set_down(struct interface *iface); +int interface_renew(struct interface *iface); -void interface_set_main_dev(struct interface *iface, struct device *dev); void interface_set_l3_dev(struct interface *iface, struct device *dev); void interface_add_user(struct interface_user *dep, struct interface *iface); void interface_remove_user(struct interface_user *dep); -int interface_remove_link(struct interface *iface, struct device *dev); int interface_handle_link(struct interface *iface, const char *name, bool add, bool link_ext); 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); +int interface_parse_data(struct interface *iface, const struct blob_attr *attr); -void interface_update_start(struct interface *iface); +void interface_update_start(struct interface *iface, const bool keep_old); void interface_update_complete(struct interface *iface); void interface_start_pending(void); +void interface_start_jail(const char *jail, const pid_t netns_pid); +void interface_stop_jail(const char *jail, const pid_t netns_pid); #endif