struct sk_buff 구조체를 복사하고 싶습니다.

cjy1126의 이미지

커널의 netif_rx()전에 제가 만든 user_rx()를 호출해서 커널 프로그래밍을 했습니다.

eth0으로 들어온 1개의 패킷을 eth1, eth2 두곳으로 쏴주고 싶은데 어떻게 해야할지 모르겠습니다.

struct sk_buff *temp = skb;
return (dev_queue_xmit(skb) && dev_queue_xmit(temp));

예상은 했지만 커널 패닉이 나네요.

2번째 방법은...

dev_queue_xmit(skb);
skb->dev = global_out;           /*eth2의 device pointer */
return dev_queue_xmit(skb);

dev.c에서 atomic_read(skb); 에러가 나네요.

이런식으로 하면 안된는걸 알면서도, 어떻게해야할지 난감해서 손도 못대고 있습니다.

제 생각으로는 skb와 같은 sk_buff를 만들어서 쏘는것이 좋다고 생각하는데...

skb와 같은 구조체를 만들때 모든 필드를 채워야하는지요?

그렇다면 sk_buff *prev, *next 같은 필드는 어떻게 채워야하는지요?

도움 부탁드립니다.[/code]

irongate의 이미지

copy_skb
clone_skb를 이용해서
복사본을 만들어 전송해보세요.