- tcprivのユーザランド実装を始めている
- カーネルモジュールに/procファイルを作るのは簡単
- proc_mkdir、proc_createなど
int __init hoge_create_procfs(void) { struct proc_dir_entry *entry; entry = proc_mkdir("hoge/fuga", NULL); if (!entry) return -ENOMEM; entry = proc_create("foo", S_IRUGO|S_IWUSR, entry, &hoge_proc_ops); if (!entry) { remove_proc_entry("hoge/fuga", NULL); return -ENOMEM; } return 0; }
- /proc/pidにぶら下げるいい感じの方法はなにかを調査
- ひたすらカーネルのコードを読む....
- フーム /proc/[pid]以下はカーネルのコードに静的に実装されているから、ここに要素を新たに組み込む方法はあるかな
- base.c - fs/proc/base.c - Linux source code (v5.7.1) - Bootlin
- 関数の上書きとかだったらtcpriv内でいい感じにやっているんだけど
- c - How to create a folder inside proc/pid - Stack Overflow
- むしろあんまりpid配下に作るのはよくないかも?relase管理が難しくなる可能性あり
- /proc/tcpriv/[pid]/files みたいな感じで作るのが良いかな
あらためてtcprivで付与したオーナ情報をどうユーザランドに渡すかを考える
- /procのファイルはopneやreadしたときに関数がコールバックされて内容の更新などがされる
- となると、/proc/tcprivみたいなファイルを作っておいて、セッション時にsynパケットが届いたタイミングでオーナ+src/dstの情報を書き込んでおく → できる?
- 改めて、readのタイミングでセッションがはられているものだけ情報を残していおくような動きにすればできそう?
- パケットにのったオーナ情報をどうやって保存しておくか?
- セッション来た時に静的な内容を書いておいて、readとかのコールバックではそのままにしておきつつ、なにかのタイミングで更新するようにするとよい?
- TCPのコネクションが切れた時とかをどうにか検知したり
うーむ、今日は負け。まだなんかまとまらないので明日も頑張る
- プログラミングに関するインタビューの提案修正を仕上げたので提出
- FIT2020のトップカンファレンスセッションの情報を提出した
- 簡易プログラムにのっていたわーい https://gakkai-web.net/fit/program_web/event_TCS-7.html
- 所属がさくらだけになっていたのでペパボも載せてもらうように連絡済み
- 研究自体はペパボでやっていたことの集大成なので
- ちゃんと変更されたわーい
- 今日もキーマカレーを食べた