hana_shinのLinux技術ブログ読者になるhana_shinのLinux技術ブログLinuxの技術情報を掲載しています。ネットワークをメインに掲載していきます。Netlinkとは?Netlinkとは、ユーザー空間とカーネル空間で情報をやりとりするためのインタフェースです。以下は、ユーザプロセスとカーネルモジュールがNetlinkインタフェースを使ってやり取りをしているところを図示したものです。+-----------------------+Netlinkを使ってメッセージを送信するには、socketシステムコールの第1パラメータにAF_NETLINKを指定します。Netlinkを使っているユーザプロセスには、ipコマンドやdbusデーモン等があります。ipコマンドを実行すると、socketシステムコールの第1パラメータにAF_NETLINKを指定していることがわかります。hana_shinのLinux技術ブログを参照してください。検証環境CentOS版数は次のとおりです。(Core)カーネル版数は次のとおりです。カーネルモジュールの作成カーネルモジュールを作成します。カーネルモジーュルは、カーネル空間で動作するプロセスです。ユーザ空間のプロセスが送信するメッセージを受信するカーネルモジュールを作成します。netlink_kernel_createの第2パラメータは、include/uapi/linux/netlink.hで未定義な値(17)を使いました。v2");次に、Makefileを作成します。$(MAKE)やrmの前はスペースではなくTABです。modules.ordermakeコマンドを実行して、カーネルモジュールを作成します。出ます作成したカーネルモジュールを確認します。netlink_module.koが作成されていることがわかります。ユーザプログラムの作成ユーザ空間で動作するプログラムを作成します。0;}コンパイルします。netlink_user.c実行ファイルを確認します。動作確認サンプルプログラムが出力するログを確認するため、journalctlコマンドを実行します。-fカーネルモジュールをロードします。netlink_module.koロードしたカーネルモジュールを確認します。作成したカーネルモジュールがロードされていることがわかります。0任意の文字列(11111)を指定してサンプルプログラム(netlink_user)を実行します。ユーザプロセスのPIDは4524であることがわかります。message"というメッセージを受信していることがわかります。messageカーネルモジュールが、PID=4524のユーザプロセスからメッセージを受信していることがわかります。PID(4524)後始末をします。netlink_moduleをアンロードします。netlink_moduleモジュールを確認します。netlink_moduleがアンロードされたことがわかります。Netlinkメッセージを以下に示します。AF_NETLINKを設定する。プロセスのPID(getpid)を設定する。ユニキャスト通信なので0を設定する。malloc()で獲得する。sockaddr_nl構造体のサイズを設定する。iovec構造体の個数(1個)を設定する。私が業務や記事執筆で参考にした書籍を以下のページに記載します。)はてなブログをはじめよう!hana_shinさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。