netifd [4] - interface
来源:互联网 发布:mysql 查询 编辑:程序博客网 时间:2024/04/28 04:17
数据结构
/** * interface object */struct interface { struct vlist_node node; struct list_head hotplug_list; enum interface_event hotplug_ev; const char *name; const char *ifname; bool available; bool autostart; bool config_autostart; bool device_config; bool enabled; bool link_state; bool force_link; bool dynamic; time_t start_time; enum interface_state state; enum interface_config_state config_state; enum interface_update_flags updated; struct list_head users; const char *parent_ifname; struct interface_user parent_iface; /* main interface that the interface is bound to */ struct device_user main_dev; /* interface that layer 3 communication will go through */ struct device_user l3_dev; struct blob_attr *config; /* primary protocol state */ const struct proto_handler *proto_handler; struct interface_proto_state *proto; struct interface_ip_settings proto_ip; struct interface_ip_settings config_ip; struct vlist_tree host_routes; int metric; unsigned int ip4table; unsigned int ip6table; /* IPv6 assignment parameters */ uint8_t assignment_length; int32_t assignment_hint; struct list_head assignment_classes; /* 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;};
enum interface_event { IFEV_DOWN, IFEV_UP, IFEV_UPDATE, IFEV_FREE, IFEV_RELOAD,};enum interface_state { IFS_SETUP, IFS_UP, IFS_TEARDOWN, IFS_DOWN,};enum interface_config_state { IFC_NORMAL, IFC_RELOAD, IFC_REMOVE};enum interface_update_flags { IUF_ADDRESS = (1 << 0), IUF_ROUTE = (1 << 1), IUF_PREFIX = (1 << 2), IUF_DATA = (1 << 3),};struct interface_error { struct list_head list; const char *subsystem; const char *code; const char *data[];};/** * interface 引用 */struct interface_user { struct list_head list; struct interface *iface; void (*cb)(struct interface_user *dep, struct interface *iface, enum interface_event ev);};/** * interface ip 配置对象 */struct interface_ip_settings { struct interface *iface; bool enabled; bool no_defaultroute; bool no_dns; bool no_delegation; struct vlist_tree addr; struct vlist_tree route; struct vlist_tree prefix; struct vlist_simple_tree dns_servers; struct vlist_simple_tree dns_search;};struct interface_data { struct avl_node node; struct blob_attr data[];};struct interface_assignment_class { struct list_head head; char name[];};
接口说明
/** * 根据输入配置创建并初始化interface object * * @param name interface name * @param config configure of interface object * @return interface object */struct interface *interface_alloc(const char *name, struct blob_attr *config)
/** * 添加设置到interface中 * * @param iface interface object * @param config configure of interface object */void interface_add(struct interface *iface, struct blob_attr *config)
/** * 设置interface object的proto处理对象 * * @param iface interface object * @param state proto handler object */void interface_set_proto_state(struct interface *iface, struct interface_proto_state *state)
/** * 使能interface object * * @param iface interface object * @return true - success false - failed */int interface_set_up(struct interface *iface)/** * 停用interface object * * @param iface interface object * @return true - success false - failed */int interface_set_down(struct interface *iface)
/** * 设置interface对象主device对象 * * @param iface interface object * @param dev device object */void interface_set_main_dev(struct interface *iface, struct device *dev)/** * 设置interface对象3层device对象 * * @param iface interface object * @param dev device object */void interface_set_l3_dev(struct interface *iface, struct device *dev)
/** * 添加interface object引用 * * @param dep interface reference object * @param iface interface object */void interface_add_user(struct interface_user *dep, struct interface *iface)/** * 删除interface object引用 * * @param dep interface reference object */void interface_remove_user(struct interface_user *dep)
/** * */int interface_add_link(struct interface *iface, struct device *dev)/** * */int interface_remove_link(struct interface *iface, struct device *dev)/** * */int interface_handle_link(struct interface *iface, const char *name, bool add)
注意
interface对象avl tree链表设置了keep_old
和no_delete
标志,每次执行config_init_all时首先vlist_update把avl tree链表头结点的version
标志加1,当根据UCI更新interface链表中对象时每个node的version
保持与头结点version
一致,后继做vlist_flush时如果存在node的version
与头结点version
不一致的将被删除,而netifd在删除某个interface时其实并没有把相应的对象从avl tree链表中删除,而是等下一次restart或reload时再
0 0
- netifd [4] - interface
- Openwrt netifd解析
- netifd [2] - device
- netifd [6] - proto
- netifd [11] - wireless
- openwrt 应用程序之netifd
- Openwrt netifd解析
- OpenWrt netifd学习笔记
- netifd支持的设备类型(netifd-2017-03-31)
- OpenWrt源码分析之netifd
- OpenWrt netifd 生成resolv.conf.auto
- Openwrt netifd ubus解析(二)
- Openwrt netifd ubus解析(三)
- Iterator(4)--Interface
- Interface
- interface
- interface
- interface
- MySQL Workbench不能输入中文的解决
- Word Ladder II
- MYSql 学习优化笔记
- Go语言中反射包的实现原理(The Laws of Reflection)
- netifd [2] - device
- netifd [4] - interface
- netifd [6] - proto
- iOS开发new与alloc/init的区别
- mysql-5.6.4-m7 install in linux
- nginx的安装
- SIFT中的尺度空间和传统图像金字塔
- ngx_pagespeed(2) - 安装
- Unity build
- 使用java连接Mysql数据库 1