OpenWrt 实现用户插拔网线后自动释放和分配IP地址

实现思路:

  1. 获取拔插网线的状态

  2. 释放IP和重新分配IP

一)获取网线状态

方案1:用swconfig命令去获取网线的拔插状态
swconfig命令形式:
swconfig dev [port |vlan ] (help|set |get |load |show)
若不知道dev设备名,则先用swconfig list查看一下
例如:
root@:/# swconfig list
Found: switch0 - QCA DESS #可以看到设备名为switch0
以我的板子为例,
在终端敲下:swconfig dev switch0 port 4 get link | awk '{print $2}' | cut -d":" -f2
就可以获取网线的状态,一般为“up”或者"down",即;连接和断开
方案2:利用热拔插事件去检测网卡的拔插状态,使用netifd的事件监听,实时性更高,但是此方法更适合用于DSA架构的,非DSA架构的还得给客户的端口配置VLAN。

二)释放IP

释放IP地址,可以使用ifconfig、ip命令删除网卡的IP地址。

三)重新分配IP地址

重新分配IP,实际上就是重启dhcpc服务,并获取新的IP地址,方法如下:

方法1:

重启整个network服务:service network restart或者/etc/init.d/network restart

方法2:
单独启动和关闭某个网卡,这样可以触发netifd重新获取IP地址
ifconfig eth0 down #eth0是网卡名字
ifconfig eth0 up

方法3:

使用ifup命令
例如我的板子:ifup lan命令就可以更新IP
ifup lan #lan是设备名

方法4:

利用dhcp服务获取IP
命令:dhclient

方法5:

命令:udhcpc -i br-lan #br-lan是网卡名,用ifconfig可以查看网卡名
这个是单独更新指定的网卡IP,

例如你要更新的网卡是eth0,则命令是:udhcpc -i eth0
那么把上面合起来就能满足拔出网线,是否IP;插入网线,重新分配IP的功能了!

代码如下:

while true; do
status=`swconfig dev switch0 port 4 get link | awk '{print $2}' | cut -d":" -f2` #这个是获取当前网线的拔插状态,UP就是插着网线,down就是拔出网线
if [ "$status" = "up" ]; then
    echo "link up" >/dev/console #连上网线时,打印出信息"link up"
    udhcpc -i br-lan #插上网线,更新br-lan的IP地址
else
    echo "link down" >/dev/console#拔出网线时,打印出信息"link down"
    ifconfig br-lan 0.0.0.0 #拔出网线,重置br-lan的IP地址
fi
sleep 2
done


本文章由作者:佐须之男 整理编辑,原文地址: OpenWrt 实现用户插拔网线后自动释放和分配IP地址
本站的文章和资源来自互联网或者站长的原创,按照 CC BY -NC -SA 3.0 CN协议发布和共享,转载或引用本站文章应遵循相同协议。如果有侵犯版权的资 源请尽快联系站长,我们会在24h内删除有争议的资源。欢迎大家多多交流,期待共同学习进步。

相关推荐