在VxWorks里查路由,最容易走偏的地方,不是命令不会敲,而是加了路由以后没有先确认系统里原来已经有什么、现在到底生效的是哪一条。现成的VxWorks网络资料写得很清楚,路由相关操作本来就分成两类,一类是查看当前路由表,另一类是通过routeLib里的接口去添加、删除或区分不同掩码的路由;如果系统还配置了RIP、OSPF这类路由协议,路由表本身又不只是你手工那一条在起作用。也正因为这样,排查路由更新问题时,顺序比命令数量更重要。
一、VxWorks路由表怎么查看
VxWorks里最直接的查看入口就是routeShow。官方资料对这个函数的说明非常直接,它会把当前路由表里的网络路由和主机路由都打印出来,显示destination、gateway、flags、Use和Interface等字段。所以真要查“现在系统到底往哪里走”,先看routeShow,比先急着加新路由更稳。
1、先用routeShow看当前表项
routeShow会分别显示ROUTE NET TABLE和ROUTE HOST TABLE。前者更偏网络级路由,后者更偏主机级路由。你加完路由以后,第一步不是直接ping,而是先看这条路由有没有真的进表。
2、重点看gateway和Interface
destination只告诉你目标是谁,真正决定流量往哪儿走的,是gateway和Interface。routeShow的输出示例里就明确包含这两列,所以判断路由是否生效时,不要只看目标网段在不在,还要看它是不是挂在你预期的网关和网口上。
3、flags也要一起看
routeShow文档把常见flag值列得很清楚,比如0x1代表route is up,0x800代表manually added static route。实际排查时,如果一条路由看着在表里,但flag不对,后面判断就很容易偏。
4、需要更细分时再看routeLib相关接口
如果只是看表,routeShow就够了。要是后面准备继续删改、区分不同掩码或不同类型服务的路由,再回到routeAdd、routeDelete、mRouteAdd、mRouteDelete这些接口会更顺。官方routeLib页面本来就是把查看和编辑放在同一组库里介绍的。
二、VxWorks路由表更新不生效怎么办
路由更新不生效,最常见的情况其实就几类,路由根本没加进去,加进去但删旧路由没删干净,掩码推导和你想的不一样,或者系统重启以后手工路由直接丢了。现成资料把这些边界写得很清楚,所以排查时不要一上来就只怀疑驱动或协议栈。
1、先确认这条路由有没有真的进表
加完以后先routeShow。如果表里没有,后面讨论“生不生效”其实没有意义。官方网络文档也明确建议,添加路由后先用routeShow去确认。
2、子网场景优先检查掩码问题
现成文档专门提醒,routeAdd和routeDelete会根据给定的destination和gateway隐式推导netmask。如果你处理的是子网而不是简单主机路由,routeNetAdd或mRouteAdd往往更合适,因为它们更适合明确网络目标,mRouteAdd还能显式指定netmask。
3、旧路由没删干净时,新路由不一定接管
如果你之前已经加过同目标的路由,删的时候也要看删除方式是不是对。routeDelete需要按destination和gateway删除指定路由;如果是用mRouteAdd加出来的路由,mRouteDelete还要求netmask和type of service一起匹配,否则路由不会被删掉。
4、重启后失效要先怀疑是不是临时手工路由
现成的VxWorks网络资料明确写到,手工方法加进去的route在系统下次启动时会丢失。也就是说,如果你看见“刚加能用,重启以后又不通”,先别急着怀疑更新没生效,更应该先看是不是根本没有把这条路由放进启动配置或初始化流程里。
三、VxWorks路由项该怎么核对
真到现场排查时,最省时间的办法不是把所有命令都试一遍,而是先把这条路由的三个关键信息对齐,也就是目标、网关和匹配方式。routeShow、routeAdd、routeDelete、mRouteAdd这些接口虽然看着简单,但官方资料已经把它们的边界分得很清楚,所以顺着这个边界去核对,通常比盲目重加更快。
1、先对destination
先确认你要加的是主机路由还是网络路由。如果目标本来就是一个网络段,却按主机目标去处理,后面routeAdd隐式推出来的结果就可能和你预期不一样。
2、再对gateway
routeAdd的定义就是给某个destination指定gateway。所以网关地址不在当前可达路径上,或者根本不是你预期那个下一跳,就算表项进去了,流量也不会按你希望的方式走。
3、再对netmask和删除方式
如果你用的是mRouteAdd,就要记住后面删除不能再随手用routeDelete顶过去,而要按mRouteDelete的规则把netmask和tos一起对上。否则你以为自己更新了,实际上旧路由还在。
4、最后再看是否需要放进启动流程
如果这条路由本来就需要长期保留,那最终检查点不该只停在当前shell成功,而要看它是不是已经被放进系统启动参数或初始化流程里。官方网络文档已经说明,手工添加的route默认不会跨重启保留,而boot参数里的gateway则会在网络初始化时自动加入路由表。
总结
VxWorks路由表怎么查看,最直接的办法就是先用routeShow把当前网络路由和主机路由看清,再去判断目标、网关和接口是不是都对上。VxWorks路由表更新不生效怎么办,排查重点则是四件事,表项有没有真的加进去,掩码是不是推对了,旧路由有没有删干净,当前修改是不是只是临时手工路由。把这几层先收顺,路由问题通常会比一开始想象得更容易定位。
