[インデックス 13759] ファイルの概要
このコミットは、Go言語の syscall パッケージにおけるNetBSD固有の定数定義ファイル(いわゆる「z-files」)を更新するものです。具体的には、NetBSD 6.0 RC1のシステムコール番号とエラー定数に合わせるために、zerrors_netbsd_386.go および zerrors_netbsd_amd64.go に新しい定数を追加し、zsysnum_netbsd_386.go および zsysnum_netbsd_amd64.go から不要になったシステムコール番号を削除しています。これにより、GoプログラムがNetBSD 6.0 RC1環境で正確なシステムコールや定数を利用できるようになります。
コミット
commit 256cd7e78eb0cc4cfd7ed472b9e11f22d34098b6
Author: Joel Sing <jsing@google.com>
Date: Fri Sep 7 02:13:14 2012 +1000
syscall: regenerate/update netbsd z-files
Regenerate/update netbsd z-files on NetBSD 6.0 RC1.
R=golang-dev, r
CC=golang-dev
https://golang.org/cl/6506062
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/256cd7e78eb0cc4cfd7ed472b9e11f22d34098b6
元コミット内容
syscall: regenerate/update netbsd z-files
Regenerate/update netbsd z-files on NetBSD 6.0 RC1.
変更の背景
この変更の背景には、NetBSDオペレーティングシステムのバージョンアップがあります。具体的には、NetBSD 6.0 Release Candidate 1 (RC1) のリリースに伴い、そのカーネルやシステムライブラリで定義されているシステムコール番号や各種定数に変更があったため、Go言語の syscall パッケージがこれらの新しい定義に追従する必要が生じました。
Go言語の syscall パッケージは、OS固有のシステムコールや定数をGoプログラムから利用するためのインターフェースを提供します。これらの定数は通常、特定のOSバージョンやアーキテクチャに合わせて自動生成されることが多く、OSの更新があればそれに合わせてGo側の定義も更新される必要があります。このコミットは、NetBSD 6.0 RC1における変更をGoの syscall パッケージに反映させるための定期的なメンテナンス作業の一環です。
前提知識の解説
Go言語の syscall パッケージ
syscall パッケージは、Goプログラムがオペレーティングシステム(OS)の低レベルな機能、すなわちシステムコールに直接アクセスするための機能を提供します。ファイル操作、ネットワーク通信、プロセス管理など、OSが提供する多くの機能はシステムコールを通じて行われます。Goの syscall パッケージは、これらのシステムコールをGoの関数としてラップし、OS固有の定数(エラーコード、フラグ、モードなど)をGoの定数として提供します。これにより、GoプログラムはOSの機能を安全かつ効率的に利用できます。
「z-files」とは
Go言語の syscall パッケージにおいて、「z-files」とは、特定のOSやアーキテクチャ向けに自動生成されるGoのソースファイルを指します。これらのファイルは、OSのヘッダーファイル(C言語のヘッダーファイルなど)からシステムコール番号、定数、構造体定義などを抽出し、Goのコードとして変換することで生成されます。ファイル名が z で始まることが多いのは、慣習的に生成されたファイルであることを示すためです(例: zerrors_netbsd_386.go, zsysnum_netbsd_amd64.go)。
これらのファイルは手動で編集されることはほとんどなく、OSのAPIが変更された際に、専用のツール(例: go tool cgo -godefs や mkerrors.sh, mksyscall.sh などのスクリプト)によって再生成されます。これにより、Goの syscall パッケージは、様々なOSやアーキテクチャの最新のシステムインターフェースに追従することができます。
NetBSD
NetBSDは、オープンソースのUnix系オペレーティングシステムの一つです。その特徴は、非常に高い移植性(多くの異なるハードウェアアーキテクチャで動作する能力)にあります。サーバー、デスクトップ、組み込みシステムなど、幅広い用途で利用されています。NetBSDのカーネルやシステムライブラリのバージョンアップは、システムコールや各種定数の定義に影響を与えることがあり、それがGoの syscall パッケージの更新を必要とする理由となります。
DLT_ 定数 (Data Link Type)
DLT_ で始まる定数は、主にネットワークパケットキャプチャライブラリ(例: libpcap や WinPcap)で使用されるデータリンク層のタイプ識別子です。これらの定数は、キャプチャされたパケットがどの種類のネットワークインターフェース(例: Ethernet, Wi-Fi, PPPなど)から来たものか、またそのパケットのヘッダー形式がどうなっているかを示します。新しいネットワーク技術やプロトコルが導入されると、それに対応する DLT_ 定数が追加されることがあります。
SYS_ 定数 (System Call Number)
SYS_ で始まる定数は、オペレーティングシステムが提供する個々のシステムコールを一意に識別するための番号です。アプリケーションがOSの機能(例: ファイルの読み書き、プロセスの作成、メモリの割り当て)を利用する際には、対応するシステムコール番号を指定してカーネルに要求を送信します。OSのバージョンアップに伴い、新しいシステムコールが追加されたり、既存のシステムコールが変更・削除されたりすることがあり、それに伴い SYS_ 定数も更新されます。
F_, MSG_, O_, SOCK_, SO_ 定数
これらは、Unix系システムにおける様々な操作や設定に関連する定数です。
F_:fcntl(ファイル制御) システムコールで使用されるコマンドやフラグ。MSG_: ソケット通信におけるメッセージの送受信オプション。O_:openシステムコールなどでファイルを開く際のモードやフラグ。SOCK_:socketシステムコールでソケットを作成する際のソケットタイプ(例:SOCK_STREAMfor TCP,SOCK_DGRAMfor UDP)。SO_:setsockoptやgetsockoptシステムコールでソケットのオプションを設定・取得する際に使用されるオプション名。
これらの定数も、OSの機能拡張や変更に伴い追加・更新されることがあります。
技術的詳細
このコミットは、NetBSD 6.0 RC1のリリースに合わせて、Goの syscall パッケージがNetBSDの最新のシステムインターフェースと同期するようにするためのものです。具体的には、以下の2種類のファイルが更新されています。
-
zerrors_netbsd_386.goおよびzerrors_netbsd_amd64.go: これらのファイルは、NetBSDの32ビット (i386) および 64ビット (amd64) アーキテクチャ向けのエラーコードや各種定数を定義しています。コミットの差分を見ると、多数の新しいDLT_定数(ネットワークデータリンクタイプ)が追加されていることがわかります。これには、DLT_A429,DLT_A653_ICM,DLT_AOS,DLT_AX25_KISS,DLT_BLUETOOTH_HCI_H4,DLT_CAN20B,DLT_CAN_SOCKETCANなど、多岐にわたるネットワーク技術やプロトコルに対応する識別子が含まれています。また、F_GETNOSIGPIPE,F_SETNOSIGPIPE(ファイル記述子操作におけるSIGPIPEシグナル抑制関連)、MSG_NBIO(非ブロッキングメッセージ)、O_NOSIGPIPE(ファイルオープン時のSIGPIPE抑制)、SOCK_NOSIGPIPE(ソケット作成時のSIGPIPE抑制)、SO_NOSIGPIPE(ソケットオプションでのSIGPIPE抑制) といった、SIGPIPEシグナル関連の新しい定数も追加されています。これは、NetBSD 6.0 RC1でこれらの機能が導入または変更されたことを示唆しています。 -
zsysnum_netbsd_386.goおよびzsysnum_netbsd_amd64.go: これらのファイルは、NetBSDの32ビットおよび64ビットアーキテクチャ向けのシステムコール番号を定義しています。コミットの差分を見ると、SYS_SA_REGISTERからSYS_SA_PREEMPTまでのSA_(Scheduler Activations) 関連のシステムコールと、SYS_QUOTACTL(クォータ制御) のシステムコールが削除されています。これは、NetBSD 6.0 RC1においてこれらのシステムコールが廃止されたか、あるいはその番号が変更されたことを意味します。Goのsyscallパッケージは、これらのシステムコールがもはや利用できないことを反映するために、対応する定数を削除しています。
これらの変更は、GoプログラムがNetBSD 6.0 RC1上で動作する際に、最新のOSインターフェースと互換性を保ち、正確なシステムコールや定数を利用できるようにするために不可欠です。特に、DLT_ 定数の追加は、ネットワーク関連のアプリケーションがNetBSD上でより多様なデータリンクタイプを扱うことを可能にし、SIGPIPE 関連の定数追加は、シグナル処理のよりきめ細やかな制御を可能にします。システムコール番号の削除は、Goプログラムが廃止されたシステムコールを誤って呼び出すことを防ぎます。
コアとなるコードの変更箇所
このコミットにおけるコアとなるコードの変更箇所は、以下の4つのファイルです。
-
src/pkg/syscall/zerrors_netbsd_386.go:- 多数の
DLT_定数(DLT_A429からDLT_X2E_XORAYAまで)が追加されています。これらは主にネットワークデータリンクタイプに関連するものです。 F_GETNOSIGPIPE,F_SETNOSIGPIPE定数が追加されています。MSG_NBIO定数が追加されています。O_NOSIGPIPE定数が追加されています。SOCK_NOSIGPIPE定数が追加されています。SO_NOSIGPIPE定数が追加されています。
- 多数の
-
src/pkg/syscall/zerrors_netbsd_amd64.go:src/pkg/syscall/zerrors_netbsd_386.goと同様に、多数のDLT_定数、F_GETNOSIGPIPE,F_SETNOSIGPIPE,MSG_NBIO,O_NOSIGPIPE,SOCK_NOSIGPIPE,SO_NOSIGPIPE定数が追加されています。
-
src/pkg/syscall/zsysnum_netbsd_386.go:- 以下のシステムコール番号が削除されています。
SYS_SA_REGISTERSYS_SA_STACKSSYS_SA_ENABLESYS_SA_SETCONCURRENCYSYS_SA_YIELDSYS_SA_PREEMPTSYS_QUOTACTL
- 以下のシステムコール番号が削除されています。
-
src/pkg/syscall/zsysnum_netbsd_amd64.go:src/pkg/syscall/zsysnum_netbsd_386.goと同様に、SYS_SA_REGISTERからSYS_SA_PREEMPTまでとSYS_QUOTACTLのシステムコール番号が削除されています。
コアとなるコードの解説
zerrors_netbsd_386.go および zerrors_netbsd_amd64.go の変更
これらのファイルは、NetBSDシステムにおける様々な定数をGo言語で利用できるように定義しています。追加された定数は、NetBSD 6.0 RC1で導入された新しい機能や、既存機能の拡張を反映しています。
-
DLT_定数の追加:DLT_(Data Link Type) 定数は、ネットワークパケットキャプチャの文脈で、データリンク層のプロトコルタイプを識別するために使用されます。例えば、DLT_BLUETOOTH_HCI_H4はBluetooth HCI H4プロトコル、DLT_CAN_SOCKETCANはCANバスのSocketCANプロトコルを示します。これらの追加は、NetBSD 6.0 RC1がより多くのネットワーク技術やプロトコルをサポートするようになったことを意味し、Goのネットワーク関連アプリケーションがこれらの新しいデータリンクタイプを認識し、処理できるようになります。 -
F_GETNOSIGPIPE,F_SETNOSIGPIPE: これらはfcntlシステムコールで使用される定数で、ファイル記述子に対してSIGPIPEシグナルの発生を抑制する機能に関連します。通常、クローズされたパイプやソケットに書き込もうとするとSIGPIPEシグナルが発生し、デフォルトではプロセスが終了します。これらの定数により、Goプログラムは個々のファイル記述子に対してこの挙動を制御できるようになります。 -
MSG_NBIO: ソケット通信において、メッセージの送受信操作を非ブロッキングで行うためのフラグです。これにより、データがすぐに利用可能でない場合でも、操作がブロックされずに即座に制御が戻るようになります。 -
O_NOSIGPIPE:openシステムコールでファイルやソケットを開く際に指定できるフラグで、そのファイル記述子に対するSIGPIPEシグナルの発生を抑制します。 -
SOCK_NOSIGPIPE:socketシステムコールでソケットを作成する際に指定できるフラグで、作成されるソケットに対してSIGPIPEシグナルの発生を抑制します。 -
SO_NOSIGPIPE:setsockoptシステムコールでソケットオプションを設定する際に使用されるオプションで、ソケット全体に対してSIGPIPEシグナルの発生を抑制します。
これらの SIGPIPE 関連の定数追加は、Goのネットワークプログラミングにおいて、より堅牢なエラーハンドリングとシグナル管理を可能にします。特に、Goの並行処理モデルにおいて、予期せぬ SIGPIPE によるプログラム終了を防ぐ上で有用です。
zsysnum_netbsd_386.go および zsysnum_netbsd_amd64.go の変更
これらのファイルは、NetBSDシステムにおけるシステムコール番号を定義しています。削除されたシステムコール番号は、NetBSD 6.0 RC1でこれらのシステムコールが廃止されたか、あるいはその機能が別の方法で提供されるようになったことを示しています。
-
SYS_SA_REGISTERからSYS_SA_PREEMPTまでの削除: これらは「Scheduler Activations (SA)」に関連するシステムコールです。Scheduler Activationsは、ユーザーレベルスレッドライブラリがカーネルと協調してスレッドのスケジューリングを効率的に行うためのメカニズムでした。これらのシステムコールが削除されたということは、NetBSD 6.0 RC1においてScheduler Activationsのサポートが廃止されたか、あるいはその実装が変更され、これらのシステムコールが不要になったことを意味します。Goのランタイムは、これらのシステムコールに依存しないように更新される必要があります。 -
SYS_QUOTACTLの削除:quotactlは、ファイルシステムのディスククォータを制御するためのシステムコールです。このシステムコールが削除されたということは、NetBSD 6.0 RC1でクォータ制御のインターフェースが変更されたか、あるいは別のシステムコールに統合された可能性を示唆しています。
これらのシステムコール番号の削除は、GoプログラムがNetBSD 6.0 RC1上で動作する際に、存在しないシステムコールを呼び出そうとするエラーを防ぐために重要です。Goの syscall パッケージは、OSのAPIの変更に厳密に追従することで、Goプログラムの安定性と互換性を保証します。
関連リンク
- Go言語
syscallパッケージのドキュメント: https://pkg.go.dev/syscall - NetBSD 公式サイト: https://www.netbsd.org/
libpcap(DLT定数に関連): https://www.tcpdump.org/SIGPIPEシグナルに関する一般的な情報: https://ja.wikipedia.org/wiki/SIGPIPE
参考にした情報源リンク
- コミット情報:
/home/orange/Project/comemo/commit_data/13759.txt - GitHub上のコミットページ: https://github.com/golang/go/commit/256cd7e78eb0cc4cfd7ed472b9e11f22d34098b6
- NetBSD 6.0 RC1 リリースアナウンス (一般的な情報源として参照): 2012年のNetBSD公式ニュースリリースやメーリングリストアーカイブなどを参照。
- Go言語の
syscallパッケージの生成メカニズムに関する一般的な知識。 - Unix/Linuxシステムプログラミングにおける
fcntl,socket,openなどのシステムコールと関連定数に関する一般的な知識。 - ネットワークプロトコルと
DLT定数に関する一般的な知識。 - Scheduler Activationsに関する一般的な知識。
- ディスククォータと
quotactlに関する一般的な知識。 SIGPIPEシグナルに関する一般的な知識。
[インデックス 13759] ファイルの概要
このコミットは、Go言語の syscall パッケージにおけるNetBSD固有の定数定義ファイル(いわゆる「z-files」)を更新するものです。具体的には、NetBSD 6.0 RC1のシステムコール番号とエラー定数に合わせるために、zerrors_netbsd_386.go および zerrors_netbsd_amd64.go に新しい定数を追加し、zsysnum_netbsd_386.go および zsysnum_netbsd_amd64.go から不要になったシステムコール番号を削除しています。これにより、GoプログラムがNetBSD 6.0 RC1環境で正確なシステムコールや定数を利用できるようになります。
コミット
commit 256cd7e78eb0cc4cfd7ed472b9e11f22d34098b6
Author: Joel Sing <jsing@google.com>
Date: Fri Sep 7 02:13:14 2012 +1000
syscall: regenerate/update netbsd z-files
Regenerate/update netbsd z-files on NetBSD 6.0 RC1.
R=golang-dev, r
CC=golang-dev
https://golang.org/cl/6506062
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/256cd7e78eb0cc4cfd7ed472b9e11f22d34098b6
元コミット内容
syscall: regenerate/update netbsd z-files
Regenerate/update netbsd z-files on NetBSD 6.0 RC1.
変更の背景
この変更の背景には、NetBSDオペレーティングシステムのバージョンアップがあります。具体的には、NetBSD 6.0 Release Candidate 1 (RC1) のリリースに伴い、そのカーネルやシステムライブラリで定義されているシステムコール番号や各種定数に変更があったため、Go言語の syscall パッケージがこれらの新しい定義に追従する必要が生じました。
Go言語の syscall パッケージは、OS固有のシステムコールや定数をGoプログラムから利用するためのインターフェースを提供します。これらの定数は通常、特定のOSバージョンやアーキテクチャに合わせて自動生成されることが多く、OSの更新があればそれに合わせてGo側の定義も更新される必要があります。このコミットは、NetBSD 6.0 RC1における変更をGoの syscall パッケージに反映させるための定期的なメンテナンス作業の一環です。特に、DLT_ 定数の追加は、NetBSD 6.0 RC1で libpcap ライブラリがバージョン1.1.1に更新されたことと関連しており、これにより新しいデータリンク層のヘッダータイプがサポートされるようになりました。また、NetBSD 6.0で導入された高性能パケットフィルターであるNetBSD Packet Filter (NPF) のような新しいカーネル機能も、DLT_ タイプの追加を必要とする場合があります。
前提知識の解説
Go言語の syscall パッケージ
syscall パッケージは、Goプログラムがオペレーティングシステム(OS)の低レベルな機能、すなわちシステムコールに直接アクセスするための機能を提供します。ファイル操作、ネットワーク通信、プロセス管理など、OSが提供する多くの機能はシステムコールを通じて行われます。Goの syscall パッケージは、これらのシステムコールをGoの関数としてラップし、OS固有の定数(エラーコード、フラグ、モードなど)をGoの定数として提供します。これにより、GoプログラムはOSの機能を安全かつ効率的に利用できます。
「z-files」とは
Go言語の syscall パッケージにおいて、「z-files」とは、特定のOSやアーキテクチャ向けに自動生成されるGoのソースファイルを指します。これらのファイルは、OSのヘッダーファイル(C言語のヘッダーファイルなど)からシステムコール番号、定数、構造体定義などを抽出し、Goのコードとして変換することで生成されます。ファイル名が z で始まることが多いのは、慣習的に生成されたファイルであることを示すためです(例: zerrors_netbsd_386.go, zsysnum_netbsd_amd64.go)。
これらのファイルは手動で編集されることはほとんどなく、OSのAPIが変更された際に、専用のツール(例: go tool cgo -godefs や mkerrors.sh, mksyscall.sh などのスクリプト)によって再生成されます。これにより、Goの syscall パッケージは、様々なOSやアーキテクチャの最新のシステムインターフェースに追従することができます。
NetBSD
NetBSDは、オープンソースのUnix系オペレーティングシステムの一つです。その特徴は、非常に高い移植性(多くの異なるハードウェアアーキテクチャで動作する能力)にあります。サーバー、デスクトップ、組み込みシステムなど、幅広い用途で利用されています。NetBSDのカーネルやシステムライブラリのバージョンアップは、システムコールや各種定数の定義に影響を与えることがあり、それがGoの syscall パッケージの更新を必要とする理由となります。
DLT_ 定数 (Data Link Type)
DLT_ で始まる定数は、主にネットワークパケットキャプチャライブラリ(例: libpcap)で使用されるデータリンク層のタイプ識別子です。これらの定数は、キャプチャされたパケットがどの種類のネットワークインターフェース(例: Ethernet, Wi-Fi, PPPなど)から来たものか、またそのパケットのヘッダー形式がどうなっているかを示します。新しいネットワーク技術やプロトコルが導入されると、それに対応する DLT_ 定数が追加されることがあります。NetBSD 6.0 RC1では libpcap が更新されたことにより、NFC Forum LLCP、NG40、MPEG-2トランスポートストリーム (DLT_MPEG_2_TS)、IEEE 802.15.4インターフェース (DLT_IEEE802_15_4_NOFCS) など、新たなリンク層ヘッダータイプが追加されました。
SYS_ 定数 (System Call Number)
SYS_ で始まる定数は、オペレーティングシステムが提供する個々のシステムコールを一意に識別するための番号です。アプリケーションがOSの機能(例: ファイルの読み書き、プロセスの作成、メモリの割り当て)を利用する際には、対応するシステムコール番号を指定してカーネルに要求を送信します。OSのバージョンアップに伴い、新しいシステムコールが追加されたり、既存のシステムコールが変更・削除されたりすることがあり、それに伴い SYS_ 定数も更新されます。
F_, MSG_, O_, SOCK_, SO_ 定数
これらは、Unix系システムにおける様々な操作や設定に関連する定数です。
F_:fcntl(ファイル制御) システムコールで使用されるコマンドやフラグ。MSG_: ソケット通信におけるメッセージの送受信オプション。O_:openシステムコールなどでファイルを開く際のモードやフラグ。SOCK_:socketシステムコールでソケットを作成する際のソケットタイプ(例:SOCK_STREAMfor TCP,SOCK_DGRAMfor UDP)。SO_:setsockoptやgetsockoptシステムコールでソケットのオプションを設定・取得する際に使用されるオプション名。
これらの定数も、OSの機能拡張や変更に伴い追加・更新されることがあります。特に、SIGPIPE シグナルに関連する定数 (F_GETNOSIGPIPE, F_SETNOSIGPIPE, MSG_NBIO, O_NOSIGPIPE, SOCK_NOSIGPIPE, SO_NOSIGPIPE) の追加は、NetBSD 6.0 RC1でこれらのシグナル処理の制御がより細かく行えるようになったことを示唆しています。
技術的詳細
このコミットは、NetBSD 6.0 RC1のリリースに合わせて、Goの syscall パッケージがNetBSDの最新のシステムインターフェースと同期するようにするためのものです。具体的には、以下の2種類のファイルが更新されています。
-
zerrors_netbsd_386.goおよびzerrors_netbsd_amd64.go: これらのファイルは、NetBSDの32ビット (i386) および 64ビット (amd64) アーキテクチャ向けのエラーコードや各種定数を定義しています。コミットの差分を見ると、多数の新しいDLT_定数(ネットワークデータリンクタイプ)が追加されていることがわかります。これには、DLT_A429,DLT_A653_ICM,DLT_AOS,DLT_AX25_KISS,DLT_BLUETOOTH_HCI_H4,DLT_CAN20B,DLT_CAN_SOCKETCANなど、多岐にわたるネットワーク技術やプロトコルに対応する識別子が含まれています。これらの追加は、NetBSD 6.0 RC1がlibpcap1.1.1への更新を通じて、より広範なネットワークプロトコルとフォーマットを識別・キャプチャできるようになったことを反映しています。 また、F_GETNOSIGPIPE,F_SETNOSIGPIPE(ファイル記述子操作におけるSIGPIPEシグナル抑制関連)、MSG_NBIO(非ブロッキングメッセージ)、O_NOSIGPIPE(ファイルオープン時のSIGPIPE抑制)、SOCK_NOSIGPIPE(ソケット作成時のSIGPIPE抑制)、SO_NOSIGPIPE(ソケットオプションでのSIGPIPE抑制) といった、SIGPIPEシグナル関連の新しい定数も追加されています。これは、NetBSD 6.0 RC1でこれらの機能が導入または変更され、Goプログラムがより細かくシグナル処理を制御できるようになったことを示唆しています。 -
zsysnum_netbsd_386.goおよびzsysnum_netbsd_amd64.go: これらのファイルは、NetBSDの32ビットおよび64ビットアーキテクチャ向けのシステムコール番号を定義しています。コミットの差分を見ると、SYS_SA_REGISTERからSYS_SA_PREEMPTまでのSA_(Scheduler Activations) 関連のシステムコールと、SYS_QUOTACTL(クォータ制御) のシステムコールが削除されています。これは、NetBSD 6.0 RC1においてこれらのシステムコールが廃止されたか、あるいはその番号が変更されたことを意味します。Goのsyscallパッケージは、これらのシステムコールがもはや利用できないことを反映するために、対応する定数を削除しています。Scheduler Activationsは、ユーザーレベルスレッドライブラリがカーネルと協調してスレッドのスケジューリングを効率的に行うためのメカニズムでしたが、NetBSD 6.0 RC1ではそのサポートが廃止されたか、別の実装に置き換えられたと考えられます。
これらの変更は、GoプログラムがNetBSD 6.0 RC1上で動作する際に、最新のOSインターフェースと互換性を保ち、正確なシステムコールや定数を利用できるようにするために不可欠です。特に、DLT_ 定数の追加は、ネットワーク関連のアプリケーションがNetBSD上でより多様なデータリンクタイプを扱うことを可能にし、SIGPIPE 関連の定数追加は、シグナル処理のよりきめ細やかな制御を可能にします。システムコール番号の削除は、Goプログラムが廃止されたシステムコールを誤って呼び出すことを防ぎます。
コアとなるコードの変更箇所
このコミットにおけるコアとなるコードの変更箇所は、以下の4つのファイルです。
-
src/pkg/syscall/zerrors_netbsd_386.go:- 多数の
DLT_定数(DLT_A429からDLT_X2E_XORAYAまで)が追加されています。これらは主にネットワークデータリンクタイプに関連するものです。 F_GETNOSIGPIPE,F_SETNOSIGPIPE定数が追加されています。MSG_NBIO定数が追加されています。O_NOSIGPIPE定数が追加されています。SOCK_NOSIGPIPE定数が追加されています。SO_NOSIGPIPE定数が追加されています。
- 多数の
-
src/pkg/syscall/zerrors_netbsd_amd64.go:src/pkg/syscall/zerrors_netbsd_386.goと同様に、多数のDLT_定数、F_GETNOSIGPIPE,F_SETNOSIGPIPE,MSG_NBIO,O_NOSIGPIPE,SOCK_NOSIGPIPE,SO_NOSIGPIPE定数が追加されています。
-
src/pkg/syscall/zsysnum_netbsd_386.go:- 以下のシステムコール番号が削除されています。
SYS_SA_REGISTERSYS_SA_STACKSSYS_SA_ENABLESYS_SA_SETCONCURRENCYSYS_SA_YIELDSYS_SA_PREEMPTSYS_QUOTACTL
- 以下のシステムコール番号が削除されています。
-
src/pkg/syscall/zsysnum_netbsd_amd64.go:src/pkg/syscall/zsysnum_netbsd_386.goと同様に、SYS_SA_REGISTERからSYS_SA_PREEMPTまでとSYS_QUOTACTLのシステムコール番号が削除されています。
コアとなるコードの解説
zerrors_netbsd_386.go および zerrors_netbsd_amd64.go の変更
これらのファイルは、NetBSDシステムにおける様々な定数をGo言語で利用できるように定義しています。追加された定数は、NetBSD 6.0 RC1で導入された新しい機能や、既存機能の拡張を反映しています。
-
DLT_定数の追加:DLT_(Data Link Type) 定数は、ネットワークパケットキャプチャの文脈で、データリンク層のプロトコルタイプを識別するために使用されます。例えば、DLT_BLUETOOTH_HCI_H4はBluetooth HCI H4プロトコル、DLT_CAN_SOCKETCANはCANバスのSocketCANプロトコルを示します。これらの追加は、NetBSD 6.0 RC1がlibpcapライブラリの更新により、より多くのネットワーク技術やプロトコルをサポートするようになったことを意味し、Goのネットワーク関連アプリケーションがこれらの新しいデータリンクタイプを認識し、処理できるようになります。 -
F_GETNOSIGPIPE,F_SETNOSIGPIPE: これらはfcntlシステムコールで使用される定数で、ファイル記述子に対してSIGPIPEシグナルの発生を抑制する機能に関連します。通常、クローズされたパイプやソケットに書き込もうとするとSIGPIPEシグナルが発生し、デフォルトではプロセスが終了します。これらの定数により、Goプログラムは個々のファイル記述子に対してこの挙動を制御できるようになります。 -
MSG_NBIO: ソケット通信において、メッセージの送受信操作を非ブロッキングで行うためのフラグです。これにより、データがすぐに利用可能でない場合でも、操作がブロックされずに即座に制御が戻るようになります。 -
O_NOSIGPIPE:openシステムコールでファイルやソケットを開く際に指定できるフラグで、そのファイル記述子に対するSIGPIPEシグナルの発生を抑制します。 -
SOCK_NOSIGPIPE:socketシステムコールでソケットを作成する際に指定できるフラグで、作成されるソケットに対してSIGPIPEシグナルの発生を抑制します。 -
SO_NOSIGPIPE:setsockoptシステムコールでソケットオプションを設定する際に使用されるオプションで、ソケット全体に対してSIGPIPEシグナルの発生を抑制します。
これらの SIGPIPE 関連の定数追加は、Goのネットワークプログラミングにおいて、より堅牢なエラーハンドリングとシグナル管理を可能にします。特に、Goの並行処理モデルにおいて、予期せぬ SIGPIPE によるプログラム終了を防ぐ上で有用です。
zsysnum_netbsd_386.go および zsysnum_netbsd_amd64.go の変更
これらのファイルは、NetBSDシステムにおけるシステムコール番号を定義しています。削除されたシステムコール番号は、NetBSD 6.0 RC1でこれらのシステムコールが廃止されたか、あるいはその機能が別の方法で提供されるようになったことを示しています。
-
SYS_SA_REGISTERからSYS_SA_PREEMPTまでの削除: これらは「Scheduler Activations (SA)」に関連するシステムコールです。Scheduler Activationsは、ユーザーレベルスレッドライブラリがカーネルと協調してスレッドのスケジューリングを効率的に行うためのメカニズムでした。これらのシステムコールが削除されたということは、NetBSD 6.0 RC1においてScheduler Activationsのサポートが廃止されたか、あるいはその実装が変更され、これらのシステムコールが不要になったことを意味します。Goのランタイムは、これらのシステムコールに依存しないように更新される必要があります。 -
SYS_QUOTACTLの削除:quotactlは、ファイルシステムのディスククォータを制御するためのシステムコールです。このシステムコールが削除されたということは、NetBSD 6.0 RC1でクォータ制御のインターフェースが変更されたか、あるいは別のシステムコールに統合された可能性を示唆しています。
これらのシステムコール番号の削除は、GoプログラムがNetBSD 6.0 RC1上で動作する際に、存在しないシステムコールを呼び出そうとするエラーを防ぐために重要です。Goの syscall パッケージは、OSのAPIの変更に厳密に追従することで、Goプログラムの安定性と互換性を保証します。
関連リンク
- Go言語
syscallパッケージのドキュメント: https://pkg.go.dev/syscall - NetBSD 公式サイト: https://www.netbsd.org/
libpcap(DLT定数に関連): https://www.tcpdump.org/SIGPIPEシグナルに関する一般的な情報: https://ja.wikipedia.org/wiki/SIGPIPE
参考にした情報源リンク
- コミット情報:
/home/orange/Project/comemo/commit_data/13759.txt - GitHub上のコミットページ: https://github.com/golang/go/commit/256cd7e78eb0cc4cfd7ed472b9e11f22d34098b6
- NetBSD 6.0 RC1における
libpcapの更新とDLT_定数に関する情報:- https://www.debian.org/doc/manuals/developers-reference/ch05.en.html#s5.1.1 (Debianのドキュメントだが、
libpcapのバージョンアップとDLT_定数の関連について言及) - https://go.googlesource.com/go/+/refs/heads/master/src/pkg/syscall/zerrors_netbsd_amd64.go (Goのソースコード自体も
DLT_定数の定義元として参照可能)
- https://www.debian.org/doc/manuals/developers-reference/ch05.en.html#s5.1.1 (Debianのドキュメントだが、
- NetBSD Packet Filter (NPF) に関する情報:
- https://www.netbsd.org/docs/guide/en/chap-npf.html (NetBSD公式ドキュメント)
- Unix/Linuxシステムプログラミングにおける
fcntl,socket,openなどのシステムコールと関連定数に関する一般的な知識。 - ネットワークプロトコルと
DLT定数に関する一般的な知識。 - Scheduler Activationsに関する一般的な知識。
- ディスククォータと
quotactlに関する一般的な知識。 SIGPIPEシグナルに関する一般的な知識。