前言
这个bug说起来还是我自己搞出来的,之前每次版本迁徙都是参考修改记录同步移植以太网这块,
所以从一开始就有这个问题。
mStaticIpConfiguration.ipAddress = new LinkAddress(InetAddress.getByName(text), 24);
每次应用层设置都是固定值 24 ,导致 framework 接收到的就是错误值。正确的做法为根据设置的
子网掩码值去计算对应长度。
子网掩码长度对照表
关于IP地址,子网掩码,子网前缀长度,路由表的的算法介绍可参考这篇
解决办法
编写算法计算子网掩码长度
private int calcNetMaskInt(String netMask) { Log.d("cnetMask", "netMask =" + netMask); StringBuffer sbf; String str; int prefixLength = 0, count = 0; String[] split = netMask.split("\\."); for (int n = 0; n < split.length; n++) { sbf = toBin(Integer.parseInt(split[n])); str = sbf.reverse().toString(); //Log.e("net", split[n] + "===" + str); count = 0; for (int i = 0; i < str.length(); i++) { i = str.indexOf('1', i); if (i == -1) { break; } count++; } prefixLength += count; } Log.e("cnetMask", "netMask prefixLength=" + prefixLength); return prefixLength; }
参考