rtnetlink 예제

rtnetlink 예제

linux/rtnetlink.h: RTNETLINK에 사용되는 매크로 및 데이터 구조를 제공합니다. RTNETLINK는 NETLINK를 기반으로하기 때문에, 이것은 또한 리눅스 / netlink.h를 포함한다. netlink.h는 모든 NETLINK 기반 기능에 사용되는 일반적인 매크로 및 구조를 정의합니다. 다음은 RTNETLINK 소켓을 여는 호출의 예입니다. nl_그룹은 멀티캐스트 통신에 사용됩니다. 이 필드의 각 비트는 멀티캐스트 주소입니다. 특정 그룹에서 수신 을 받아야 하는 모든 프로세스는 비트를 설정해야 합니다. 예를 들어 프로세스가 멀티캐스트 주소 3과 5에서 수신을 원할 경우 비트는 다음과 같이 저장됩니다. 응용 프로그램은 승인을 안정적으로 추적하기 위해 메시지 시퀀스 번호를 처리해야 합니다. 두 번째 및 세 번째 변수는 각각 이 버퍼의 바이트 읽기 와 길이를 배치하는 버퍼에 대한 포인터입니다. RTNETLINK의 경우 버퍼에는 netlink.h 및 rtnetlink.h #include 파일에 제공된 매크로 집합을 사용하여 차례로 읽어야 하는 RTNETLINK 메시지 집합이 포함됩니다.

플래그는 수신을 수행하는 방법을 나타내는 플래그 집합입니다. RTNETLINK의 경우 이 것을 0으로 초기화할 수 있습니다. 커널 소스를 읽은 후 나는 마침내 netlink 소켓이 나를 위해 작동하도록 관리했습니다. 다음은 Netlink 소켓 기본 사항 즉 netlink 소켓을 열고 읽고 쓰고 닫는 예제입니다. 문제는 내가 그렇게하는 방법을 알아낼 수 없다는 것입니다. 나는 구글을 가지고 있지만 내가 발견 한 모든 예는이 같은 오래되고 현재 커널 버전에 더 이상 유효하지 않습니다. 나는 또한이 SO 질문을 보았지만 여기에샘플은 소켓 작업에 libnl을 사용하지만 표준 소켓 기능 (sys / socket.h로 정의)을 고수하고 싶습니다. 그래서 어떤 하나는 내가 netlink의 인터페이스와 사용을 이해하는 데 도움이 될 수있는 몇 가지 튜토리얼이나 가이드 또는 몇 가지 여기에 저를 안내하시기 바랍니다 수 있습니다. 나는 매우 작업 예제, 아무것도 공상, 커널의 소켓에 사용자 프로그램의 소켓에서 연결을 설정하는 방법의 단지 아주 기본적인 예를 주셔서 감사합니다 다음 커널에 사용자 프로세스에서 데이터를 전송하고 커널에서 다시받을.

라우팅 테이블을 검색하기 위한 RTNETLINK 요청이 전송된 간단한 예제를 고려할 때 응답은 다음과 같은 방식으로 처리됩니다.