今天又晕了一下,在看添加GRE隧道的代码,发现这个dev_ioctl里没有关于这个SIOCADDTUNNEL处理?
后来发现不是没有,而是被下面的代码覆盖了,虽然没有明写case语句,但是if判断里已经包含了,使用了大于小于的判断。
* Unknown or private ioctl*/default:if ((cmd >= SIOCDEVPRIVATE &&cmd <= SIOCDEVPRIVATE + 15) ||cmd == SIOCBONDENSLAVE ||cmd == SIOCBONDRELEASE ||cmd == SIOCBONDSETHWADDR ||cmd == SIOCBONDSLAVEINFOQUERY ||cmd == SIOCBONDINFOQUERY ||cmd == SIOCBONDCHANGEACTIVE ||cmd == SIOCGMIIPHY ||cmd == SIOCGMIIREG ||cmd == SIOCSMIIREG ||cmd == SIOCBRADDIF ||cmd == SIOCBRDELIF ||cmd == SIOCSHWTSTAMP ||cmd == SIOCGHWTSTAMP ||cmd == SIOCWANDEV) {err = -EOPNOTSUPP;if (ops->ndo_do_ioctl) {if (netif_device_present(dev))err = ops->ndo_do_ioctl(dev, ifr, cmd);elseerr = -ENODEV;}} elseerr = -EINVAL;}