[자문자답[[커널관련] 네트워크 쪽 커널 소스 분석 중 몇가지 추론해본게 있는데 맞는지 좀 봐주세요
글쓴이: twinwings / 작성시간: 목, 2015/02/19 - 4:04오전
네트워크 쪽 커널 소스 분석 중 몇가지 추론해본게 있는데 맞는지 좀 봐주세요
각각의 추론별로 번호를 매겨봤습니다.
----------------------------------------------
raw 소켓을 생성하니, 패킷(1)을 요청한 원래 Process(P1)와 raw소켓을 생성한 Process(P2)
각각에게 전달되었다. 따라서...
1. 패킷(1)이 각각의 프로세스별로 전달되므로 패킷(1)을 편의상
(P1)에게 전달되는 패킷(1-1) / (P2)에게 전달되는 패킷(1-2)로 지칭하면,
프로세스(P1)에서 패킷(1-1)을 위한 sk_buff(P1-S1)와
프로세스(P2)에서 패킷(1-2)를 위한 sk_buff(P2-S1)가 각각 존재한다.
2. 패킷(1-1)과 패킷(1-2)은 실제로는 물리적으로 하나의 메모리에 할당되며
skb_shared_info내의 dataref 변수에 의해 reference count 된다.
3. 패킷(1)의 메모리 할당의 책임은 Driver에게 있고
해제의 책임은 마지막으로 데이터를 요청한 struct socket(혹은 struct sock)에게 있다.
kernel 2.6 기준 linux/skbuff.h
struct skb_shared_info { atomic_t dataref; unsigned short nr_frags; unsigned short gso_size; #ifdef CONFIG_HAS_DMA dma_addr_t dma_head; #endif /* 이하 코드 생략 */ };
Forums:
자문자답이라 이상한데..
서술이 너무 지저분해서 답이 안달리는걸까요 ㅜㅜ
삽을 많이 퍼니 어찌어찌 답이 나오긴 하네요..
1, 2.
linux/skbuff.h
로 보아서 추론이 맞는 듯 함..
3.
driver/net/r8169.c
후.. 큰 흐름만 읽는 것도 힘든데 고수님들은 어떻게 line by line 으로 보는지...
댓글 달기