LINUX配置ipv6地址时出现ifconfig: SIOCSIFADDR: Permission denied

LINUX配置ipv6地址时出现ifconfig: SIOCSIFADDR: Permission denied

问题描述

在做ipv6的开发中,需要在代码中修改桥端口(br0)的ipv6本地链路地址,思路是先将原来的地址删除,再添加新的地址,如下图中,要将地址改成fe80::100/64,则需要先删除原来的地址:
ifconfig br0 del fe80::1/64
ifconfig br0 del ffe80::e267:b3ff:fe00:2/64
在这里插入图片描述
再添加地址:
ifconfig br0 del fe80::100/64
但串口提示:fconfig: SIOCSIFADDR: Permission denied
如果不擅长原有地址的情况下添加新的ipv6地址,则不会报错,这是为什么呢?

问题分析

这让人很费解,为什么直接添加不会报错,删掉原来的,再添加就会报错呢,但其实对比之下已经有一些方向了,关键我们敲命令删除的时候系统会做什么操作,重新添加的时候又会做怎么操作

从错误的提示上看是权限不足,但从现象分析这肯定不是因为当前不是root用户导致的,还是得从源码去分析;ipv6内核相关代码可以在linux2.x.x.x/net/ipv6/目录下查找,ifconfig删除ipv6地址时,内核调用如下:
在这里插入图片描述在函数inet6_addr_del中检查该接口是否存在ipv6地址,若不存在则关闭该接口的ipv6功能
在这里插入图片描述
而当我们再重新添加ipv6地址时,发生如下调用:
在这里插入图片描述在ipv6_find_idev查到对应的设备文件,若不存在则添加,在ipv6_add_dev中可以初始化相关参数
在这里插入图片描述完了之后在通过函数ipv6_add_addr添加地址,这个时候会报错,查询新增的内核文件:
cat proc/sys/net/ipv6/conf/br0/disable_ipv6
查询结果为 1 ,说明初始化时,默认是把接口的ipv6功能关闭的,导致报错了

在ipv6_add_addr中可以看到有这么一句判断,其中返回值 -EACCES 正是 Permission denied
在这里插入图片描述

解决方案

从上面的分析中,问题已经很明朗了,可自行在应用层或内核修改相关参数即可
提供以下参考,也可在应用层通过echo系统调用修改该参数:
打开ipv6及其转发功能

总结

第一次写博文,写的有误的地方还请指出,喜欢的朋友欢迎关注,评论,留言!

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值