packet dumping module을 프로그래밍중입니다.
글쓴이: sr97 / 작성시간: 토, 2004/01/24 - 12:50오후
네트워크 서브 시스템에 변화를 주지 않고 host로 전송되는 모든 패킷을 application layer로 dumping하는 커널 모듈을 만들었습니다.
그런데 응용계층으로 패킷을 전송할때 문제가 좀 생기더군요.
처음에는 콜백 함수를 이용하면 될거라고 생각해서 시스템 콜을 추가해서 응용 계층의 함수(패킷 수신 함수)를 모듈에 등록하고 패킷이 도착할때 마다 응용 계층의 패킷 수신 함수를 호출하도록 했습니다.
그랬더니 응용계층의 프로세스가 모듈의 부프로세스가 되는 시스템 호출 기간에만 정상 적인 호출이 되고 그 외의 경우 즉 시스템 호출이 종료된 다음에는 segment error가 발생하더군요.
콜백함수를 이용하는 방법이 잘못됐는지 아니면 이런 경우 콜백 함수를 쓰는 것이 아니라 다른 방법을 써야되는지가 궁금합니다.
고수님들의 조언 부탁합니다.
Forums:
Re: packet dumping module을 프로그래밍중입니다.
음... 콜백 함수를 어떻게 만들었는지 궁금하구요... 패킷의 전달은 어떤 식으로 했는지도 궁금하네요...
질문 추가 내용입니다.
모듈에서의 코드입니다.
void (*callback)(int mode, void *user1, void *user2);
다음은 응용 프로그램에서는 다음의 함수를 선언합니다.
void user_layer_function(int mode, void *user1, void *user2)
{
........
}
그리고 시스템 콜이나 기타의 방법을 이용하여 응용프로그램의 함수 포인터를 넘기는 방식으로 callback함수를 전달했습니다.
그래서 패킷이 시스템에 전달되면 모듈에서 패킷을 후킹하여 등록된 콜백 함수를 호출하는 방식으로 패킷을 전달했습니다.
Re: 질문 추가 내용입니다.
여기서 호출하는 Function의 Parameter가 Kernel 영역의 Variable을 바로 대입하면 문제가 생길 것 같네요... 음... 이 부분에 대해서 저같은 경우는 void Function을 호출해서 그 안에서 추가적으로 system call을 호출하는 방식으로 정보를 전달받았습니다.
음 어떤 식으로 Function의 Parameter의 값을 전달하는지 궁금하네요...
댓글 달기