netlink ソケットを使用して RTM_GETROUTE メッセージをカーネルに送信しました。今、カーネルのメッセージを聞いています。
カーネルは、応答として netlink ソケットを介してnlmsghdr構造体を送信します。そのメッセージ タイプ ( nlmsg_type )を知る必要がありますか? (私のコードは、ルーティングの削除/作成イベントもリッスンしています。区別したい)。
返信はまたRTM_GETROUTEですか?コード例やリンクは大歓迎です。
ルーティングについては、NEWROUTE、DELROUTE、および GETROUTE メッセージしか見つかりませんでしたが、3 つすべてに他の目的があるようです。(1回目はルート作成時、2回目は削除時、3回目は私が使っていたリクエスト時です。)
これがメッセージを送信するための私のコードです。
struct nlmsghdr* hdr;
struct rtmsg* nl_p;
nl_p = (struct rtmsg*) NLMSG_DATA(hdr);
memset(&nl_p, 0, sizeof(nl_p));
hdr->nlmsg_pid = 0;
hdr->nlmsg_seq = ++seq_num;
hdr->nlmsg_type = RTM_GETROUTE;
nl_p->rtm_family = AF_INET;
nl_p->rtm_dst_len = 0;
nl_p->rtm_src_len = 0;
nl_pload->rtm_table = RT_TABLE_MAIN;
rtable_success = send(fd, hdr, hdr->nlmsg_len, 0)
受信したメッセージを解析する例がありますが、他のメッセージを除外するには、必要なメッセージ タイプ ( nlmsg_type )を知る必要があります。