如下查看当前的IP地址信息
root:/# ip addr show br-lan
16: br-lan: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 00:a0:bc:af:30:c0 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.225/24 brd 192.168.1.255 scope global br-lan
valid_lft forever preferred_lft forever
inet 192.168.200.254/24 scope global br-lan
valid_lft forever preferred_lft forever
inet6 fe80::2a0:bcff:feaf:30c0/64 scope link
valid_lft forever preferred_lft forever
其中192.168.1.225是我的IP地址,192.168.200.254则是与服务器对接的IP地址,一旦此IP地址发生改变,路由便无法接受服务器的命令设置等等。
然而当路由重启的时候(或者刚开机的时候),如果把网线拔出来(即无网的状态),重启完成后再插上网线,IP信息就会变成下面这样。
下面是重启时拔出网线的IP信息
root/# ip addr show br-lan
16: br-lan: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 00:a0:bc:af:30:e0 brd ff:ff:ff:ff:ff:ff
inet 192.168.200.1/24 brd 192.168.200.255 scope global br-lan
valid_lft forever preferred_lft forever
inet 192.168.200.254/24 scope global secondary br-lan
valid_lft forever preferred_lft forever
inet6 fe80::2a0:bcff:feaf:30e0/64 scope link
valid_lft forever preferred_lft forever
可以看到IP地址还是这个192.168.200.254
但是重新插上网线之后,就会重新分配IP,那么192.168.200.254就会被刷掉!
# ############# release old lan ip ###############
插上网线之后就会触发网络配置的服务起来,板子就会重新获取IP,配置网络等
root:/# ip addr show br-lan
16: br-lan: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 00:a0:bc:af:30:e0 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.107/24 brd 192.168.1.255 scope global br-lan
valid_lft forever preferred_lft forever
inet6 fe80::2a0:bcff:feaf:30e0/64 scope link
valid_lft forever preferred_lft forever
可以看到,192.168.200.254这个IP被重新分配的,但正常是不应该刷掉这个IP地址,因为一旦刷掉,路由就无法接收服务器传过来的命令了!
即此IP是路由与服务器正常“交流”的IP地址!
修正此BUG的方法:
修改/lib/netifd/dhcp.script文件
修改前如下:
case "$1" in
deconfig)
deconfig_interface //释放IP
;;
renew|bound)
setup_interface //绑定IP
;;
esac
修改后如下:
case "$1" in
deconfig)
deconfig_interface
;;
renew|bound)
setup_interface
EST_server="$(uci get cymesh.mesh.est_server)" //获取当前与mesh的ip地址,即192.168.200.254,保存到EST_server
ret=$(ip addr |grep "inet $EST_server")
if [ -z "$ret" ]; then
ip addr add dev br-lan $EST_server/255.255.255.0 //将EST_server中保存的地址重新设置,当插上网线时,会触发重新分配绑定IP地址的线程,当跑到这里的时候,就会被再次设为我们要的地址(192.168.200.254),即将br-lan设置为此ip
echo "-----add 192.168.200.254 to br-lan interface-------" > /dev/console
fi
;;
esac
以上便已修复此BUG!
uci是openwrt的uci命令,下面是uci命令的参数
batch
export [<config>]
import [<config>]
changes [<config>]
commit [<config>]
add <config> <section-type>
add_list <config>.<section>.<option>=<string>
show [<config>[.<section>[.<option>]]]
get <config>.<section>[.<option>]
set <config>.<section>[.<option>]=<value>
delete <config>[.<section[.<option>]]
rename <config>.<section>[.<option>]=<name>
revert <config>[.<section>[.<option>]]
附:ip addr 是查看ip信息的命令