|
|
1.1 root 1: //
2: // nono
1.1.1.3 root 3: // Copyright (C) 2020 nono project
4: // Licensed under nono-license.txt
1.1 root 5: //
6:
1.1.1.9 root 7: //
8: // ホストネットワークのドライバ (基本クラス)
9: //
10:
1.1 root 11: #pragma once
12:
1.1.1.9 root 13: #include "driver.h"
14: #include "autofd.h"
15:
16: class NetPacket;
1.1 root 17:
1.1.1.9 root 18: class NetDriver : public Driver
1.1 root 19: {
1.1.1.9 root 20: using inherited = Driver;
1.1 root 21:
1.1.1.9 root 22: protected:
23: NetDriver(HostDevice *hostdev_, const char *drivername_);
1.1.1.8 root 24: public:
1.1.1.10! root 25: ~NetDriver() override;
1.1 root 26:
1.1.1.9 root 27: // パケットを外部から受信する。
28: // VM に送り込むパケットがなければ負数(NODATA)を返す。
29: // VM に送り込むパケットがあれば p に書き戻して、ドライバ側のバッファに
30: // 残っているパケット数 (といっても 0 か 1以上) を返す。
31: virtual int Read(NetPacket *p) = 0;
1.1 root 32:
1.1.1.9 root 33: // パケットを外部に送信する。
34: virtual void Write(const void *buf, int buflen) = 0;
1.1.1.8 root 35:
36: // InitDriver() 中の(主に最後の)エラーメッセージ。
37: // NetDriver は複数を順番に試す場合もあるし、全部エラーになっても終了する
38: // かどうかは設定によるので、各ドライバはエラーが発生しても各自で warnx に
39: // よる表示はせず、ここにエラーメッセージをセットする。必要になった時点で
1.1.1.9 root 40: // HostNetDevice が最後の一つを warnx() で表示する。
1.1.1.8 root 41: // なお、おそらくそれだけでは大抵何も分からないのでこれとは別に
42: // ログレベル 1 で putmsg() は充実させておくこと。
43: std::string errmsg {};
44:
1.1.1.7 root 45: protected:
1.1.1.9 root 46: // ifup/ifdown スクリプト実行
47: bool Run_ifup();
48: bool Run_ifdown();
1.1 root 49:
1.1.1.8 root 50: std::string ifname {}; // (あれば)作成したインタフェース名
1.1 root 51:
52: // デバイスディスクリプタ。
53: // ディスクリプタを持つというのは共通なのでディスクリプタはここに置くが
54: // これを Open(), Close() するのはあくまで継承側の仕事で、こちらでは
55: // 初期化と IsOpen() だけ受け持つ。ちょっと責任分解点が気持ち悪いけど。
1.1.1.9 root 56: autofd fd {};
1.1 root 57:
58: private:
59: bool RunScript(const char *filename);
60: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.