--- nono/host/netdriver.h 2026/04/29 17:04:33 1.1.1.3 +++ nono/host/netdriver.h 2026/04/29 17:04:51 1.1.1.7 @@ -23,13 +23,14 @@ class NetDriver : public Object // 初期化 & オープン。 // EthernetDevice::Init() から呼ばれる。諸制約については device.h 参照。 + // まずどれが呼ばれたかを putmsg(1) でログ表示し、 // 必要なオープン処理や、必要なら受信スレッドの作成を行う。 // 成功すれば true、失敗すれば warn()/warnx() でメッセージを出力して // false を返すこと。 // また、クローズ相当の動作はなくデストラクタで行う。 virtual bool Init() = 0; - bool MonitorUpdate() override; + void MonitorUpdate(TextScreen&) override; // パケットを送信する。正常に送信できれば true を返す。 // EthernetDevice::SendPacket() が呼ばれると常に呼び出される。 @@ -45,28 +46,28 @@ class NetDriver : public Object // VM に引き渡せたパケットについて rx_pkts, rx_bytes を更新すること。 virtual void ThreadRun() = 0; - protected: // オープンされていれば true を返す。 bool IsOpen() const { return fd != -1; } + protected: // 受信スレッドを起動する (必要なら継承クラス側が呼ぶ) bool InitRecvThread(); - const char *drivername = NULL; // ドライバ名 - EthernetDevice *parent = NULL; // 親 + const char *drivername {}; // ドライバ名 + EthernetDevice *parent {}; // 親 - std::string devpath; // デバイスファイルパス - std::string ifname; // 作成したインタフェース名 + std::string devpath {}; // デバイスファイルパス + std::string ifname {}; // 作成したインタフェース名 // デバイスディスクリプタ。 // ディスクリプタを持つというのは共通なのでディスクリプタはここに置くが // これを Open(), Close() するのはあくまで継承側の仕事で、こちらでは // 初期化と IsOpen() だけ受け持つ。ちょっと責任分解点が気持ち悪いけど。 - int fd = 0; + int fd {}; // 親(Ethernet)デバイスの mutex と condvar - std::mutex *mtx; - std::condition_variable *cv; + std::mutex *mtx {}; + std::condition_variable *cv {}; // 統計情報 uint64 tx_pkts = 0;