发现这个问题的原因是 iptables -m time 的使用出现问题。由于路由板子上没有rtc硬件,所以硬件时间一直是1970开始的时间,但是可以下面的函数把系统时间同步到硬件时间。只有这样 iptables -m time 才可以正常使用。
同步systime 到 kernel time
#include <sys/time.h>
int sync_time_zone(){
structtimezone tz;
struct tm tm_time;
time_t tm;
structtimeval tv;
gettimeofday(&tv,&tz);
time(&tm);
localtime_r(&tm,&tm_time);
/*workaround warp_clock() on first invocation */
memset(&tz,0, sizeof(tz));
settimeofday(&tv,&tz);
memset(&tz,0, sizeof(tz));
tz.tz_minuteswest= -(tm_time.tm_gmtoff / 60);
if(settimeofday(&tv, &tz) == -1 ){
printf("settimeofdayFailed...\n");
}else{
printf("settimeofdayPass...\n");
}
return0;
}