깊숙한(?) 필드 접근

gilddong의 이미지

안녕하세요.

디바이스 드라이버 레벨에서 패킷 헤더의 특정 필드(tos)를 접근하려고 하는데요.

struct sk_buff {
union {
struct iphdr *iph;
..
}nh;
...
}

struct iphdr {
__u8 tos;
...
}

이런식으로 되어있습니다.
그래서 socket buffer 타입인 tx_skbuff를 이용하여 저기에 접근하려고 하는데요

tx_skbuff[num]->nh.iph->tos

이런식으로 직접 접근이 안되는 것인가요?
이건.. 커널 프로그래밍 q/a 보다는 c 문법 질문 이네요;;
tx_skbuff는 이미 현재 있는 디바이스 드라이버에서 사용하고 있고, 저는 거기에 tos 필드가 무엇으로 셋팅되어있나만 검사하려고 하는 것입니다.

그럼 조언 부탁드립니다.

pastime의 이미지

단순한 문법에 대한 질문이신가요?
그렇다면 당연히 가능합니다.

albamc의 이미지

가능합니다.

다만 skb->nh.iph는 위치에 따라서

IP header를 가리키는 포인터 일수도 있지만

그냥 쓰레기 값이 들어있을수도 있습니다.

따라서 맞을수도 틀릴수도 있겠습니다. :D

^^*