netlink 예제

Netlink는 Linux 커널 간 프로세스 간 통신 메커니즘으로 사용자 공간 프로세스와 커널 또는 여러 사용자 공간 프로세스 간의 통신을 가능하게 합니다. Netlink 소켓은 이러한 통신을 가능하게 하는 기본 소켓입니다. Linux에서 라우팅 소켓의 동등한 기능은 netlink 소켓 프로토콜 유형 NETLINK_ROUTE에서 제공합니다. Netlink 소켓은 BSD의 라우팅 소켓의 기능 수퍼세트를 제공합니다. Netlink 메시지는 매우 특정한 형식을 따릅니다. 모든 메시지는 4바이트 경계에 정렬되어야 합니다. 예를 들어 16바이트 메시지를 있는 대로 보내야 하지만 17바이트 메시지는 20바이트로 패딩해야 합니다. 이 예제에서는 두 개의 사용자 공간 응용 프로그램이 동일한 netlink 멀티캐스트 그룹을 수신 대기하고 있습니다. 커널 모듈은 netlink 소켓을 통해 멀티캐스트 그룹에 메시지를 팝업하고 모든 응용 프로그램이 메시지를 수신합니다. 다음은 사용자 공간 코드입니다: Netlink 메시지 헤더는 다음 형식을 사용합니다: (RFC 3549의 다이어그램): 여기서 NLMSG_SPACE는 Netlink 메시지에 대해 정렬된 길이를 제공하는 매크로입니다. NETLINK_USER는 에 정의되어 있지 않으므로 이 예제가 어떻게 실행되나요? 나는 그것을 테스트하기 때문에 나는 그것이 작동 알고 있지만 뒤에 마법을 알아낼 수 없습니다. 당신은 나에게 설명하시기 바랍니다 수 있습니까? 프로세스 간 유니캐스트 통신 Unicast 발신자 예제: 다음 헤더 파일이 응용 프로그램에 포함되어야 합니다: 첫째, 응용 프로그램은 다음과 같이 소켓 API를 통해 수행되는 Netlink 소켓을 만들어야 합니다.

할당된 sock_release는 다음과 같이 호출됩니다: Netlink 소켓은 커널과 사용자 공간 프로세스 간에 정보를 전송하는 데 사용되는 특수 IPC입니다. 사용자 공간 프로세스를 위한 표준 소켓 API와 커널 모듈용 특수 커널 API를 통해 두 가지 사이의 전이중 통신 링크를 제공합니다. 넷링크 소켓은 TCP/IP 소켓에서 사용하는 AF_INET와 비교하여 주소 패밀리 AF_NETLINK를 사용합니다. 각 netlink 소켓 기능은 커널 헤더 파일에 고유한 프로토콜 형식을 정의합니다. 커널이 NETLINK_TEST 프로토콜용 netlink 소켓을 만든 후 사용자 공간이 NETLINK_TEST 프로토콜 유형의 netlink 메시지를 커널로 보낼 때마다 netlink_kernel_create()에 의해 등록된 콜백 함수 인 input(가 호출됩니다. 다음은 콜백 함수 입력의 예: recvfrom()를 사용하여 netlink 소켓에서 메시지를 받는 것은 다양한 요인에 따라 약간 더 복잡할 수 있습니다. Netlink는 응답할 수 있습니다: Netlink 소켓은 사용자 공간 응용 프로그램과 커널 모듈 간의 통신을 위한 유연한 인터페이스입니다. 응용 프로그램과 커널 모두에 사용하기 쉬운 소켓 API를 제공합니다. 다른 커널/사용자 공간 IPC에는 없는 전이중 통신, 버퍼링된 I/O, 멀티캐스트 및 비동기 통신과 같은 고급 통신 기능을 제공합니다.

예를 들어 프로세스가 멀티캐스트 그룹 3에 데이터를 보내려고 하면 다음과 같이 nl_group 필드가 초기화됩니다. 그러나 커널 모듈에 사용자 공간 응용 프로그램에 대한 긴급 메시지가 있으면 어떻게 해야 합니까? 이러한 IFC를 직접 사용하는 방법은 없습니다. 일반적으로 응용 프로그램은 집중적인 폴링비용이 많이 들지만 상태를 변경하려면 커널을 주기적으로 폴링해야 합니다. Netlink는 커널이 세션을 시작할 수 있도록 하여 이 문제를 정상적으로 해결합니다. 이를 넷링크 소켓의 이중 특성이라고 합니다. Unicast 수신 예: 수신기의 경우 먼저 Netlink 소켓은 보낸 사람의 경우와 마찬가지로 소켓 API를 사용하여 생성됩니다. 그런 다음 보낸 사람과 마찬가지로 수신기는 보낸 사람의 경우와 동일한 고유 주소로 소켓을 바인딩합니다. src_addr.nl_pid는 다음과 같이 초기화되어야 합니다: 커널 넷링크 구현 넷링크용 커널 공간 API는 사용자 공간에 대해 다른 것입니다.

Comments

comments