Annotation of nono/host/netdriver.h, revision 1.1.1.9

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:
                     25:        virtual ~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: };

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.