2009년 12월 1일 화요일

Tinyos-1.x SurgeTelos Bug

tinyos-1.x/apps/SurgeTelos는 tos/lib/MultiHopLQI 라우팅 프로토콜을 사용한다.
tinyos-1.x/tos/lib/MultiHopLQI 에는 치명적인 버그가 하나 존재한다.
tinyos-1.x/tos/lib/MultiHopLQI/MultiHopLQI.nc 파일을 살펴보면 데이터 전송 시 initializeFields에서는 다음과 같이 처리한다.

251 command result_t RouteSelect.initializeFields(TOS_MsgPtr Msg, uint8_t id) {
252 TOS_MHopMsg *pMHMsg = (TOS_MHopMsg *)&Msg->data[0];
253
254 pMHMsg->sourceaddr = pMHMsg->originaddr = TOS_LOCAL_ADDRESS;
255 pMHMsg->originseqno = gCurrentSeqNo;
256 pMHMsg->hopcount = gbCurrentHopCount;
257
258 return SUCCESS;
259 }

여기서 255라인의 gCurrentSeqNo++ 해야 제대로 동작하게 된다.
만약 이 부분의 처리를 해 주지 않고 데이터를 30초당 1개 보다 빠르게 전송하면 데이터 패킷들이 selectRoute안에서 잘못 처리되는(duplicate suppression) 현상이 발생하게 된다.

tinyos-2.x/tos/lib/net/lqi/LqiRoutingEngineP.nc를 보게되면 이곳의 initializeField 함수는 위와 같이 제대로 고쳐져 있음을 확인할 수 있다.

이처럼 tinyos 코드에도 버그가 있음을 유념해야 한다.

댓글 없음:

댓글 쓰기