2012-12-03 6 views
0

나는 오후 내내 udp 패킷을 보내는 문제를 찾고있었습니다. 그것은 sendmsg 시스템 호출이 먼저 inet_sendmsg에 올 것이라고 말하고, 그 다음에 udp_sendmsg, 그 다음 udp_push_pending_frames가이 함수에서 UDP 헤더는 ip_push_pending_frames 전에 채워집니다. 그러나 http://vger.kernel.org/~davem/skb_data.html에 따르면 UDP 계층은 skb의 데이터로 순수한 사용자 데이터를 가지고 있어야하며 UDP 헤더의 공간을 확보하기 위해 skb_push를 사용해야합니다. 방금 찾지 못했습니다.커널에서 udp 헤더 용 skb_push는 어디에 있습니까?

누구나 단서를 제공 할 수 있습니까?

감사합니다.

+0

Emm. udp_hdr 함수는 skb_transport_header이기 때문에 udp 계층은 skb_push와 비슷한 기능을 호출하지 않는다고 생각합니다. udp_hdr 함수는 skb-> head + skb-> transport_header입니다. 이것은 헤드 룸의 오프셋입니다. 그래서 나는 IP에만 헤더를 데이터로 푸시해야 할 의무가 있다고 생각한다. 아직 확인하지 않습니다. – Tiina

답변

0

include/linux/skbuff.h은 커널 소스에서 skb_push입니다. 인라인 함수이므로 일반 소스 파일이 아닌 헤더 파일에 있습니다.

+0

안녕하세요, 어디에 정의되어 있는지 알지만 UDP 헤더를 삽입하기 위해 udp 레이어가 어디에서 호출되는지 모르겠습니다. 이 링크에 따르면 udp는 skb-> data에서 순수한 사용자 데이터를보아야하며 헤더를 삽입하기 위해 어딘가에 skb_push를 호출합니다. 나는이 "어딘가"를 찾을 수 없다. – Tiina

관련 문제