nfq_bind_pf の使い方
Linux にはネットワークフィルタリング機能と、そのラッパーライブラリである libnetfilter-queue があります。
そのライブラリの提供するAPIである nfq_bind_pf
と nfq_unbind_pf
は uint16_t pf
を要求します。
これに何を渡せばいいのかよく判らなかったという話。
- サンプルコード では
AF_INET
を使うように書いてある。 - nfq_bind_pf のコメントでは
PF_INET
(など) を使えと書いてある。 - どっちを使っても動いてる(ように見える)
どっちを使えばいいのか?というか AF_INET
と PF_INET
って何だっけ?
PF_INETとAF_INETの微妙な違い によると:
- PF_ はプロトコルファミリー、AF_ はアドレスファミリーを表す
- BSDソケットの設計ではプロトコルファミリーとアドレスファミリーは独立している
- 現状のインターネットではIPv4/v6とそれらの唯一のアドレッシング方法しか無い(から独立に指定出来るうれしみは無い)
(適当な)結論
PF
はプロトコルファミリーを表すAF
はアドレスファミリーを表す- 実装は同じ値なのでどっちでも動く(
PF_INET
もAF_INET
も2
) - ドキュメントには
bind a nfqueue handler to a given protocol family
と書いてあるのでPF_*
を指定するべき - サンプルコード書いた人が怪しい
リンク
- libnetfilter_queueのdoxygen (2020/01/29時点でのバージョンは1.0.3)
GitHub Actions で Github Pages を更新する方法
github actions でビルドした内容で github pages で公開しているサイトを更新する方法をメモ。
環境+要件
案1: github-push-action
github token を使って簡単に git push してくれる action。簡単に使えるし単機能でよいが、以下の理由で今回は使えなかった。
So while you can push to the `gh-pages` branch using the `GITHUB_TOKEN`, it won't spawn a GitHub Pages build.
https://github.community/t5/GitHub-Actions/Github-action-not-triggering-gh-pages-upon-push/m-p/26869/highlight/true#M301
You'll need to create a personal access token and supply it to your GitHub Action as a secret.
↑のスレッドの内容(でかつ私の環境で再現した事項)をまとめると、
GitHub Actions から `GITHUB_TOKEN` で push するとパブリックリポジトリの GitHub Pages のビルドが動かない
案2: actions-gh-pages
案1 の引用先で薦められてた github pages 専用 action。
なにやらいろいろ出来るようだけどブランチ全体のコンテンツを上書きしてしまうので使えなかった。
採用案
自力で personal access token を使って push すればよい。
.. jobs: .. publish: name: publish to github pages runs-on: ubuntu-18.04 needs: build # ビルドの後に実行 # master への push の時のみ動作 if: github.event_name == 'push' && github.ref == 'refs/heads/master' steps: - uses: actions/checkout@v1 with: ref: gh-pages fetch-depth: 1 - uses: actions/download-artifact@v1 with: name: artifact - name: Commit artifact run: | git config user.email "admin@example.com" git config user.name "Github Action Bot" git add . # artifact を追加(実際はコンテンツの一部を上書き) if ! (git diff --quiet && git diff --staged --quiet); then git commit -m "Add: changes ($GITHUB_SHA)" # ハッシュをメモってコミット fi - name: Push to gh-pages branch env: PERSONAL_TOKEN: ${{ secrets.PERSONAL_TOKEN }} # personal access token を使う PUBLISH_BRANCH: gh-pages run: | git push https://<githubユーザ>:${PERSONAL_TOKEN}@github.com/<githubユーザ>/<リポジトリ>
coqdocを使った
coqdocを初めて使ってみました。
はじめは company-coq のスタイルに合わせて見出しとか書いてましたが、なんとなく気が向いたので公式(documenting-coq-files-with-coqdoc )の方を確認してみたのでした。
目的はcoqスクリプトの(主にコメントの)整形スタイルを妥当なモノに統一することなので出力はどうでもいいんですが、…デフォルトはあまりかっこよくないですね :p
今のところ単一ファイルなのでコマンドは:
$ coqdoc --utf8 hoge.v
これだけ。
静的コード解析の会#9
(会場と日程を変更しました) #静的コード解析の会 第9回 - connpass に行ってきました。今回も何らかの発表は出来ず。
どこかで宣伝したらしく、前回から人数が大幅に増えて14~5人くらいの参加者でした。
参加者の傾向としては:
- なぜかIsabelle使いが多い。
- モデル検査勢が(人数的に)優勢。
- 他は各々の好みでいろいろ。
といった感じでした。
RustでマルチスレッドWebサーバを作る例を写経
Final Project: Building a Multithreaded Web Server - The Rust Programming Languageを写経した。
標準ライブラリのみを使って簡単なマルチスレッドWebサーバを書く例。
スレッドプールを作ってacceptするたびに「htmlを応答する関数」をJobとしてチャンネルで配る。
最終的にちゃんと各Workerスレッドを終了させるところまで作る。
思ったよりかなり簡単に書けてしまった印象。設計がいいからだろうか?