Ethernetのリンク状態を参照したい

弊社TCP/IPプロトコルスタック「μNet3」に関するご質問
返信する
アバター
eForce技術担当
記事: 163
登録日時: 2014年4月24日(木) 14:18

Ethernetのリンク状態を参照したい

投稿記事 by eForce技術担当 » 2017年4月14日(金) 16:27

対象:
μNet3/Compact、μNet3/Standard

質問:
Ethernetのリンク状態(リンクダウン、リンクアップ・通信速度)をアプリから参照したい

回答:
Ethernetドライバが認識しているリンク状態は net_dev_sts() にパラメータ「REF_ETH_LINK_STS」を渡すことで取得が可能です。(※)
取得した値をマスク値「PHY_STS_MSK」でANDします。その値が「PHY_STS_LINK_DOWN 」でなければリンクアップ状態です。

※Ethernetドライバの参照関数(eth_ref)がパラメータ「REF_ETH_LINK_STS」に対応している必要があります。
/*【サンプルコード】*/
    ER ercd;
    UH val;

    ercd = net_dev_sts(1, REF_ETH_LINK_STS, (VP)&val);   /* 1 はデバイス番号 */
    if (E_OK == ercd) {
        if (PHY_STS_LINK_DOWN != (val & PHY_STS_MSK)) {
            /* リンクアップ状態 */
        }
        else {
            /* リンクダウン状態 */
        }
    }
    else {
        /* エラー(ドライバ初期化前など、ステータス取得可能状態ではない。) */
    }

--
/*【REF_ETH_LINK_STSパラメータで取得可能な値】*/
#define PHY_STS_LINK_DOWN       0x0000U     /* PHY media link down      */
#define PHY_STS_10HD            0x0100U     /* PHY 10M/Half-Duplex      */
#define PHY_STS_10FD            0x0200U     /* PHY 10M/Full-Duplex      */
#define PHY_STS_100HD           0x0400U     /* PHY 100M/Half-Duplex     */
#define PHY_STS_100FD           0x0800U     /* PHY 100M/Full-Duplex     */
#define PHY_STS_1000FD          0x1000U     /* PHY 1000M/Full-Duplex    */
#define PHY_STS_MSK             0xff00U     /* PHY mask */

返信する