티스토리 뷰

아래 글에서 linux 에서 RTL5572 칩셋 기반 무선랜 카드를 이용하여 무선랜 캡쳐를 받는 부분에 대하여 설명을 하였다. 


무선랜 패킷은 FCS(Frame Check Sequence) 에러 체크를 하므로 실제로 캡쳐되는 패킷은 정상적으로 수신 및 디코딩 되는 패킷만이다. 일반적인 경우 이 정도로 큰 문제가 없으나 신호 간섭 등으로 인하여 패킷이 손상되는지 여부도 확인을 하고 싶을 때가 있다.


RTL5572 칩셋에도 이와 같은 기능을 제공한다. 

아래와 같이 드라이버 코드를 수정하면 수신된 패킷 중 FCS 에러, PLCP 에러가 발생한 패킷도 상위로 전달하게 된다. 

Index: DPO_RT5572_LinuxSTA_2.6.1.3_20121022/sta/sta_cfg.c

===================================================================

--- DPO_RT5572_LinuxSTA_2.6.1.3_20121022.orig/sta/sta_cfg.c 2012-10-22 12:52:59.000000000 +0900

+++ DPO_RT5572_LinuxSTA_2.6.1.3_20121022/sta/sta_cfg.c 2015-03-31 01:04:14.608000000 +0900

@@ -592,7 +592,7 @@

 #endif /* RT3593 */

 

  /* Enable Rx with promiscuous reception */

- RTMP_IO_WRITE32(pAd, RX_FILTR_CFG, 0x3);

+ RTMP_IO_WRITE32(pAd, RX_FILTR_CFG, 0x0);

  /* ASIC supporsts sniffer function with replacing RSSI with timestamp. */

  /*RTMP_IO_READ32(pAdapter, MAC_SYS_CTRL, &Value); */

  /*Value |= (0x80); */

 


관련 설명은 소스 코드내의 os/linux/cfg80211drv.c 파일의 CFG80211DRV_OpsChgVirtualInf() 함수 내에서 설명을 찾을 수 있다.

  • 0x01: FCS Fail
  • 0x02: PLCP Fail

이와 같이 하여 캡쳐를 해보면 패킷이 손상되어 수신을 못하는 것인지, 아니면 전송을 하지 않은 것인지 정도까지 구분이 가능하여 간접적으로 physical layer의 문제도 유추할 수도 있다. 

참고로 이와 같이 수정을 하면 kernel에 따라 kernel panic이 발생할 수 있다. 이 부분은 kernel 디버깅이 필요하여 더 이상 파고 들어가지 않는 것이 좋을 수 도...


댓글
댓글쓰기 폼