|
|
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:
1.1.1.7 root 36: protected:
1.1.1.9 root 37: // ifup/ifdown スクリプト実行
38: bool Run_ifup();
39: bool Run_ifdown();
1.1 root 40:
1.1.1.8 root 41: std::string ifname {}; // (あれば)作成したインタフェース名
1.1 root 42:
43: // デバイスディスクリプタ。
44: // ディスクリプタを持つというのは共通なのでディスクリプタはここに置くが
45: // これを Open(), Close() するのはあくまで継承側の仕事で、こちらでは
1.1.1.11! root 46: // 初期化と IsOpen() だけ受け持つ。ちょっと責任分界点が気持ち悪いけど。
1.1.1.9 root 47: autofd fd {};
1.1 root 48:
49: private:
50: bool RunScript(const char *filename);
51: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.