前言
这个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;
}
参考