2014-02-18 4 views
0

"/ sys/class/net/br0/bridge/ageing_time"을 최대 값으로 수정하여 에이징 시간을 설정하십시오.노화 시간을 학습하는 브리지 맥

# brctl showstp br0 
br0 
bridge id  8000.001018000000 
designated root 8000.001018000000 
.... 
ageing time  4294314.45 
.... 

하지만 학습 된 테이블은 동시에 유효하지 않습니다.

확인 코드는, 그때, 오버 플로우 될 시간 초과로 학습 테이블 간주됩니다 br_fdb.c

static inline int has_expired(const struct net_bridge *br, 
        const struct net_bridge_fdb_entry *fdb) 
{ 
    return !fdb->is_static && 
     (time_before_eq(fdb->updated + hold_time(br), jiffies)); 
} 

fdb->updated + hold_time(br) 뭔가 오버 플로우를 보았다.

이 버그입니까?

답변

0

그렇게 생각합니다. 그러나 버그가되어서는 안됩니다. 부적절한 장소 일뿐입니다.

비 정적 FDB 항목이 만료되지 않도록하려면이 오버플로가 발생하여 has_expired()가 TRUE를 반환합니다.

32 비트 컴퓨터에서 일반적으로 jiffies는 50 일마다 줄 바꿈됩니다. 그것은 또한 약간의 문제를 일으킬 것입니다. 하지만 때로는 일부 기능을 오래 테스트하지 않은 것 같습니다.

32 비트 시스템에서 time_before_eq()를 time_before_eq64()로 대체하고 "unsigned long"에서 "u64"로 정의 된 일부 변수 정의를 작동시켜야합니다. 물론, 64 비트 시스템에서는 모든 것이 잘 될 것입니다.