netifd [1] - system

熵桥流沙
• 阅读 3704

system

提供底层操作网络设备API,通过ioctlrtnl与内核通信,依懒libnl库

init

int system_init(void)
  • 创建ioctl socket sock_ioctl
  • 创建rtnl socket sock_rtnl
  • 创建NETLINK_ROUTE协议类型rtnl socket,回调函数cb_rtnl_event
  • 创建NETLINK_KOBJECT_UEVENT协议类型rtnl socket,回调函数handle_hotplug_event

bridge

addbr

/**
 * 创建bridge接口
 */
int system_bridge_addbr(struct device *bridge, struct bridge_config *cfg)
  • 根据输入参数cfg->stp设置bridge的STP开关
  • 根据输入参数cfg->forward_delay设置bridge的forward_delay
  • 根据输入参数cfg->igmp_snoop设置bridge的igmp snoop功能
  • 根据输入参数cfg->priority设置bridge的优先级
  • 根据输入参数cfg->flags设置bridge标志BRCTL_SET_AGEING_TIMEBRIDGE_SET_HELLO_TIMEBRCTL_SET_BRIDGE_MAX_AGE

delbr

/**
 * 删除bridge接口
 */
int system_bridge_delbr(struct device *bridge)

addif

/**
 * 把接口dev绑到bridge接口上
 */
int system_bridge_addif(struct device *bridge, struct device *dev)
  • 判断接口已绑到bridge,如果已绑则退出
  • 上述判断是通过/sys/devices/virtual/net/*/brif/%s/bridge中的内容判断,此目录可能不存在,请注意

delif

/**
 * 把接口dev从bridge接口上解绑
 */
int system_bridge_delif(struct device *bridge, struct device *dev)

macvlan

/**
 * 创建macvlan接口
 */
int system_macvlan_add(struct device *macvlan, struct device *dev, struct macvlan_config *cfg)

```c
/**
* 删除macvlan接口
*/
int system_macvlan_del(struct device *macvlan)


### vlan ```c /** * 创建vlan接口 */ int system_vlan_add(struct device *dev, int id)

```c
/**
* 删除vlan接口
*/
int system_vlan_del(struct device *dev)


### vlandev ```c /** * 创建vlan接口,可支持802.1ad */ int system_vlandev_add(struct device *vlandev, struct device *dev, struct vlandev_config *cfg)

```c
/**
* 删除vlan接口
*/
int system_vlandev_del(struct device *vlandev)


### if ```c /** * 清除dev接口状态,与dev相关的route/rule/address */ void system_if_clear_state(struct device *dev)
/**
 * 保存老配置,设置接口MTU/TXQUEUELEN/MAC/IPv6开关,up接口
 */
int system_if_up(struct device *dev)
/**
 * down接口,还原旧配置
 */
int system_if_down(struct device *dev)
/**
 * 检查dev状态
 */
int system_if_check(struct device *dev)
/**
 * 返回dev信息link-advertising/link-supported/speed
 */
int system_if_dump_info(struct device *dev, struct blob_buf *b)
/**
 * 返回dev状态,读取`/sys/class/net/%s/statistics`目录
 */
int system_if_dump_stats(struct device *dev, struct blob_buf *b)
/**
 * 返回dev的父dev
 */
struct device *system_if_get_parent(struct device *dev)
/**
 * 根据参数设置接口MTU/TXQUEUELEN/MAC/IPv6开关
 */
void system_if_apply_settings(struct device *dev, struct device_settings *s,
                  unsigned int apply_mask)
/**
 * 设置dev ipv4或ipv6地址
 */
int system_add_address(struct device *dev, struct device_addr *addr)
/**
 * 删除dev ipv4或ipv6地址
 */
int system_del_address(struct device *dev, struct device_addr *addr)
/**
 * 更新接口ipv6的MTU
 */
int system_update_ipv6_mtu(struct device *dev, int mtu)

route

/**
 * 添加路由
 */
int system_add_route(struct device *dev, struct device_route *route)
/**
 * 删除路由
 */
int system_del_route(struct device *dev, struct device_route *route)
/**
 * 刷新路由表
 */
int system_flush_routes(void)
/**
 * 由路由表名解析路由表ID
 */
bool system_resolve_rt_table(const char *name, unsigned int *id)

iprule

/**
 * 添加策略路由表
 */
int system_add_iprule(struct iprule *rule)
/**
 * 删除策略路由表
 */
int system_del_iprule(struct iprule *rule)
/**
 * 刷新策略路由表
 */
int system_flush_iprules(void)
/**
 * 根据action名称解析对应ID
 */
bool system_resolve_iprule_action(const char *action, unsigned int *id)

tunnel

/**
 * 添加ip tunnel
 */
int system_add_ip_tunnel(const char *name, struct blob_attr *attr)
/**
 * 删除ip tunnel
 */
int system_del_ip_tunnel(const char *name)
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
java 反射得到属性与属性值
<divid"cnblogs\_post\_body"class"blogpostbody"<p反射可以破坏所有的封装性,比如这次通过反射得到的属性与属性值;</p<divclass"cnblogs\_code"<divclass"cnblogs\_code\_toolbar"<spanclass"cnblogs\_co
虾米大王 虾米大王
3年前
java代码092
code092.jsp通过FindServlet类查询分页数据所有图书信息ID图书名称价格数量作者<%Listlist1(List)request.getAttribute("list");for(code089book:list1)%
虾米大王 虾米大王
3年前
java代码088
code088.jsp通过存储过程获取数据所有图书信息ID图书名称价格数量作者<%Listlist1findBook.findAll();if(list1null||list1.size()
虾米大王 虾米大王
3年前
java代码099
code099.jspInserttitlehere$pageScope.user.name
虾米大王 虾米大王
3年前
java代码073
code073.javapackagepack02;importjava.io.IOException;importjava.io.PrintWriter;importjava.util.UUID;importjavax.servlet.ServletException;importjavax.servlet.annotation.Multip
Wesley13 Wesley13
3年前
VSCode配置FiraCode和更纱黑体字体
!(https://oscimg.oschina.net/oscnet/c7bb62d935ceb01d3b7fe176322e84ae00d.png)Fira Code下载到FiraCode字体的GitHub(https://www.oschina.net/action/GoToLink?urlhttps%
Wesley13 Wesley13
3年前
Oracle:Pivot 转多列并包含多个名称
SELECTFROM(SELECTl.DISTRIBUTOR_ID,d.SKU_CODE,d.WH_CODE,d.ORDER_PACKAGES,d.PRICE,d.YEARLY||d.MONTHLYasYM,d
Wesley13 Wesley13
3年前
MYSQL查询用户下多个角色信息
<resultMapid"baseBeanUser"type"com...vo.system.TUserVoOut"<idcolumn"id"property"id"/<resultcolumn"name"property"name"/
Stella981 Stella981
3年前
Python code question 1
Question1Level1Question:Writeaprogramwhichwillfindallsuchnumberswhicharedivisibleby7butarenotamultipleof5,between2000and3200(bothincluded).The
飞鹅官方账号 飞鹅官方账号
11个月前
五、飞鹅官网API接口文档
接口列表1.获取网站信息请求方法:GET请求URL:/api/site/getSiteInfo请求参数无返回结果json"code":1,"data":"id":1,//id"title":"SampleSiteName",//网站名称"intro":"T