안녕하세요,
현재 UDP Relay Kernel Driver를 개발중입니다.
기본적인 컨셉은
1. udp_rcv 함수를 재등록 (my_udp_rcv)
2. my_udp_rcv로 넘어온 skb로 부터 미리 등록시켜 놓은 target 정보를 얻어옴.
3. 해당 target->tqueue로 schedule_work 함수 호출 schedule_work(&target->tqueue);
4. schedule_work 로 넘긴 함수(socket_send_proc) 에서 udp_sendmsg()함수를 이용하여 패킷 전송.
즉 정리하면 udp_rcv -> schedule_work -> udp_sendmsg 이런식으로 받은 패킷을 바로 보내는 드라이버를
개발 중입니다.
근데 SMP 버전이 아닌 리눅스커널에서는 잘 동작하지만, SMP버전에서는 갑자기 동작중에 블럭되어버립니다.
소스양이 간단해서 자세히 살펴보아도 (제가 아는 지식하에서) 로직에는 문제가 없어보입니다.