Japan QualNet Community Forums Japan QualNet Community Forums
Welcome Guest 
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
検索
メインメニュー
アクセスカウンター
2024/05/02:7/8
2024/05/01:21/26

2024/03/03より299/1375
人気モジュール
No.1: フォーラム 72
No.2: QualNet概要 1
日曜日からの合計
人気Browser&OS
No.1:巡回ロボット65
No.2:Windows NT1

No.1:どっかの巡回ロボット63
No.2:Safari1
No.3:Majestic-12巡回ロボット1

日曜日からの合計
メイン
   Network Layer Settings: IP, QoS, Queuing & Scheduling
     priority queue
投稿するにはまず登録を

題名 投稿者 日時
   priority queue july_4th 2012/3/30 16:26
     Re: priority queue july_4th 2012/3/30 16:40
       Re: priority queue chackn 2012/3/30 19:16
         Re: priority queue july_4th 2012/4/2 0:11
           Re: priority queue hiro 2012/4/2 8:07
             Re: priority queue july_4th 2012/4/2 11:37
               Re: priority queue hiro 2012/4/2 12:24
                 Re: priority queue july_4th 2012/4/2 13:43
                   Re: priority queue hiro 2012/4/2 16:51
                     Re: priority queue july_4th 2012/4/2 17:32
                     » Re: priority queue chackn 2012/4/3 17:57
フラット表示 前のトピック | 次のトピック
投稿者 スレッド
chackn
投稿日時: 2012/4/3 17:57
常連
登録日: 2005/5/13
居住地: Kanagawa, Japan
投稿: 61
Re: priority queue
july_4thさん

>やはり改造するしかないようですね.
>ProgrammersGuideを参考して改造してみます.

そうですね。ソースコードをいじらないと実現できません。
過去の記事を参考にしてください。
改造箇所の関数は以下のソースファイルに含まれていると思います。

developer/src/network_ip.cpp

QualNetは関数名を見れば大体、それが含まれるソースが分かるような命名規則になっています。"NetworkIpSendOnBackplane()"という関数があったのですぐに見つかりました。
以下の関数に2番目の引数で渡されている"scheduler"ってありますよね。


NetworkIpQueueInsert(
    Node *node,
    Scheduler *scheduler,
    Message *msg,
    NodeAddress nextHopAddress,
    NodeAddress destinationAddress,
    int outgoingInterface,
    int networkType,
    BOOL *queueIsFull,
    int incomingInterface,
    BOOL isOutputQueue)



このスケジューラークラスの独自のものを作って引数で渡してやればいいような気がします。ラウンドロビンスケジューラーのソース(sch_roundrobin.[cpp|h])が参考になります。


void RoundRobinScheduler::insert(
    Message* msg,
    BOOL* QueueIsFull,
    const int priority,
    const void *infoField,
    const clocktype currentTime,
    TosType* tos
    )



この関数の頭の方で、queueIndexの値を求めてますよね。


    queueIndex = numQueues;
    for (i = 0; i < numQueues; i ++)
    {
        if (queueData[i].priority == priority)
        {
            queueIndex = i;
            break;
        }
    }



この部分を独自の方法、つまりIPヘッダのprotocol typeの値で決めるように書き換えればいいと思いますよ。msgからprotocol typeを取り出す方法はProgrammers Guideをご覧いただくか、ソース(多分network_ip.cpp)の中から参考になるコードを探すなどしてみてください。

ご健闘を祈っています。
フラット表示 前のトピック | 次のトピック
Copyright c KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
XOOPS Cube PROJECT