RTNETLINK answers: File exists问题分析

最近在调试以太网时一直出现"RTNETLINK answers: File exists"错误,刚开始一直以为是以太网驱动的问题,以太网采用的是MII接口,phy采用的YT8522,很奇怪的是出现上述错误时,以太网其实工作是正常的。另外一路采用RMII,同样的phy芯片的却没有报这个错误,百思不得其解。

bash 复制代码
root@test:~# ifup -a
[   26.985738] mac030 54200000.gmac eth0: Link is Down
[   27.193736] mac030 54300000.gmac eth1: Link is Down
RTNETLINK answers: File exists
Failed to bring up eth1.

手动单个以太网去配置时,发现每次都是第一个配置的成功,第二个配置的就报上述的错误,如下,先配置eth1,再配置eth0,则eth0配置时报错。

bash 复制代码
root@test:~# ifup eth1
[   24.163714] gmac030 54300000.gmac eth1: Link is Down
root@test:~# 
root@test:~# 
root@test:~# ifup eth0
[   27.285840] mac030 54200000.gmac eth0: Link is Down
RTNETLINK answers: File exists
Failed to bring up eth0.

也就是说谁先配置谁成功,后配置则失败,那么原因究竟是啥呢,网上搜索了好久也没有找到原因,既然这样就直接看ifup的源代码吧,在代码中加上一些打印看看。操作如下:

bash 复制代码
root@test:~# ./ifup eth0
===== do_interface 1 =====
===== lock_interface 1 filename is /run/network/ifstate.eth0 =====
===== lock_interface 3 =====
===== lock_interface 4 =====
===== lock_interface 6 =====
===== lock_interface 7 =====
===== lock_interface 8 =====
===== do_interface 2 current_state is 0 =====
##### out is  #####
===== Configuring interface eth0=eth0 (inet) ======
===== do_interface 3 pidfilename is /run/network/ifup-eth0.pid =====
===== do_interface 4 command is ifup =====
===== do_interface 5 no_act is 0 =====
===== do_interface 6 =====
####### inet _static_up 1 #######
##### out is /sbin/ip addr add 192.168.2.170/255.255.255.0 broadcast 192.168.2.255        dev eth0 label eth0 #####
####### inet _static_up 2 #######
##### out is /sbin/ip link set dev eth0   up #####
####### inet _static_up 3 #######
##### out is  /sbin/ip route add default via 192.168.2.254  dev eth0 onlink  #####
####### inet _static_up 4 #######
===== iface_up 1 result is 1 =====
===== iface_up 2 =====
===== iface_postup 1 =====
===== iface_postup method name is static  =====
####### inet _static_up 1 #######
##### out is /sbin/ip addr add 192.168.2.170/255.255.255.0 broadcast 192.168.2.255        dev eth0 label eth0 #####
####### inet _static_up 2 #######
##### out is /sbin/ip link set dev eth0   up #####
####### inet _static_up 3 #######
[  128.882457] mac030 54200000.gmac eth0: Link is Down
##### out is  /sbin/ip route add default via 192.168.2.254  dev eth0 onlink  #####
####### inet _static_up 4 #######
===== iface_postup 5 =====
===== current_state is 0 failed is 0 =====

先操作eth0成功,接下来操作eth1

bash 复制代码
root@test:~# ./ifup eth1
===== do_interface 1 =====
===== lock_interface 1 filename is /run/network/ifstate.eth1 =====
===== lock_interface 3 =====
===== lock_interface 4 =====
===== lock_interface 6 =====
===== lock_interface 7 =====
===== lock_interface 8 =====
===== do_interface 2 current_state is 0 =====
##### out is  #####
===== Configuring interface eth1=eth1 (inet) ======
===== do_interface 3 pidfilename is /run/network/ifup-eth1.pid =====
===== do_interface 4 command is ifup =====
===== do_interface 5 no_act is 0 =====
===== do_interface 6 =====
####### inet _static_up 1 #######
##### out is /sbin/ip addr add 192.168.1.170/255.255.252.0 broadcast 192.168.3.255        dev eth1 label eth1 #####
####### inet _static_up 2 #######
##### out is /sbin/ip link set dev eth1   up #####
####### inet _static_up 3 #######
##### out is  /sbin/ip route add default via 192.168.1.254  dev eth1 onlink  #####
####### inet _static_up 4 #######
===== iface_up 1 result is 1 =====
===== iface_up 2 =====
===== iface_postup 1 =====
===== iface_postup method name is static  =====
####### inet _static_up 1 #######
##### out is /sbin/ip addr add 192.168.1.170/255.255.252.0 broadcast 192.168.3.255        dev eth1 label eth1 #####
####### inet _static_up 2 #######
##### out is /sbin/ip link set dev eth1   up #####
####### inet _static_up 3 #######
[  230.948350] mac030 54300000.gmac eth1: Link is Down
RTNETLINK answers: File exists
##### out is  /sbin/ip route add default via 192.168.1.254  dev eth1 onlink  #####
===== iface_postup 2 =====
===== 2 failed is 1 =====
===== current_state is 0 failed is 1 =====
Failed to bring up eth1.
root@test:~# 

问题出来了,执行"/sbin/ip route add default via 192.168.1.254 dev eth1 onlink"失败了,打开eth1的network配置文件如下:

bash 复制代码
#iface eth1 inet manual
auto eth1
#allow-hotplug eth1
iface eth1 inet static
address 192.168.1.170
netmask 255.255.255.0
gateway 192.168.1.254
dns-nameservers 192.168.1.240

eth0如下:

bash 复制代码
#iface eth0 inet manual
auto eth0
#allow-hotplug eth0
iface eth0 inet static
address 192.168.2.170
netmask 255.255.255.0
gateway 192.168.2.254
dns-nameservers 192.168.2.240

那问题就在gateway这句话了,两个配置文件中都有这个配置,将eth1中的gateway注释掉就OK了。

相关推荐
猿的天空6 小时前
机器人双手迎来全栈训练系统:灵初智能EgoSteer让灵巧手无所不能
网络·人工智能·计算机·ai·程序员·机器人·编程
Xzaveir_7776 小时前
OPPO、vivo、荣耀号码认证:多终端拨测矩阵与异常复现
大数据·网络·科技·矩阵·产品经理·ai-native
wuqingshun3141596 小时前
从网络角度来看,用户从输入网址到网页显示,期间发生了什么?
网络
牛马工作号7 小时前
Zigbee 专业详解:从协议到排障
网络·物联网·安全
牛马工作号7 小时前
Wi‑Fi 完全指南:从 802.11 协议到 Wi‑Fi 7、AC+AP 与 Mesh 工程组网
网络·网络协议·智能路由器
智慧光迅AINOPOL7 小时前
智慧工厂全光网怎么扛住AGV与强电磁?光电复合缆与工业级方案
网络·全光网解决方案·全光网·酒店全光解决方案·泛住宿全光网解决方案
JoyCong19988 小时前
手机变身“司令台”!ToDesk AI安卓版上线
网络·人工智能·科技·智能手机·电脑·远程工作·远程操作
a4493153628 小时前
iPhone 基带故障诊断——无服务/搜索不到网络的芯片级维修实录
网络·macos·ios·电脑·iphone
XR1234567888 小时前
园区网络“三网合一“怎么落地?信锐全网智能方案实践
网络
Xzaveir_7779 小时前
企业号码负面标记治理:认证、申诉与合规事件的三轨模型
大数据·网络·人工智能·科技·产品经理