[완료] 2.6 커널에서 inet_protos 변수를 외부 모듈(드라이버)에서 참조할 수 있는 방법있나요?
글쓴이: eunsiri00 / 작성시간: 월, 2008/08/11 - 5:51오후
2.6 커널상에서,
UDP 프로토콜 핸들러를 대체하여 기능추가를 하려고 하는데요,
inet_del_protocol(..기존 UDP 프로토콜..);
inet_add_protocol(..새로운 UDP 프로토콜..);
위와 같이 하면 될 것 같은데,
기존 UDP 프로토콜을 얻어올 수 있는 방법을 잘 모르겠습니다.
커널 수정을 한다면 EXPORT_SYMBOL(inet_protos); 이것만 추가하면 물론 가능합니다만,
커널 소스에 대한 수정은 안 했으면 합니다.
질문을 요약하면, 커널 수정없이 기존 UDP 프로토콜 변수(inet_protos[UDP])를 얻어올 수 있는
방법을 아시는 분을 알려주시기 바랍니다.
PS> 2.4 커널에서는 next 필드변수로 inet_protos 참조가 가능이 했던 것 같은데,
2.5커널 후반부터는 이 쪽 관련 커널이 변경된 것 같습니다.
Forums:
cat /proc/kallsyms | grep
모듈에서 사용하려면 이런 식으로 주소를 직접 알아내는 방법 밖에 없을 겁니다.
크래킹을 막기 위해 거의 대부분 감춰지고 바뀌었습니다.
OTL
그럼 이러한 UDP 프로토콜을 대체하는 작업은..
답변 감사드립니다.
그럼 이러한 외부모듈에서 UDP 프로토콜을 대체하는 작업은,
이 외부모듈에서 참조할 수 있게 커널을 수정한 후, 작업하는 것이 가장 바람직한 것인지요~?
아뇨. 기존의
아뇨.
기존의 IPPROTO_UDP 드라이버 대신 새로운 드라이버가 포함될 수 있도록
패치파일을 만들어 배포하거나
패치된 소스로 컴파일 한 커널 바이너리와 패치파일을 같이 배포하는 것이 가장 바람직합니다.
모듈 형태가 아니라 built-in 으로만 사용할 것이라면,
좀 변칙적이긴 하지만,
inet_protos[] 를 그냥 참조해서 수정해버리는 것도 가능합니다.
다만, 문제가 생겼을 때 다른 사람이 실마리를 잡기가 어렵습니다.
커널 수정이 불가능하거나,
수정본의 배포/설치가 절차상으로 곤란하다면,
해당 모듈의 소스만 공개하고 모듈 로드 스크립트를 같이 배포하시는 방법도 있습니다.
실제로 언젠가 google summer code 에 ICMP 를 대체해서 rbping 을 구현한 프로젝트의 결과물 배포는 이런 식으로 했었습니다.
(모듈 로드 스크립트가 아니라 README 에 주소를 알아내는 방법과 코드를 수정하는 방법이 적혔던 것으로 기억합니다)
OTL
답변 감사합니다.
구글 코드에서 rbping 을 검색해서 소스를 보니깐 답이 보이네요.
이 방법이 제일 좋은 방법인 듯 합니다.
저도 커널을 변경하면 안 되는 상황이였거든요..
다시한번 답변 감사드립니다!! :>
댓글 달기