[Armadillo:01940] リンクアップ/ダウンを検出する方法

Hiroki Nakamura email@hidden
2007年 8月 23日 (木) 17:13:16 JST


お世話になります。
nakamuraと申します。

Armadillo-9を使用しております。

「[Armadillo:00824] Re: リンクアップ/ダウンを検出する方法」に従って
★のようなTPを作成してArmadillo-9で動作させました。しかし、LANケーブル
接続の有無に拠らず、常にLink downとなっているよです。
提示された方法は、Armadillo-9には適用されないのでしょうか?

カーネルは以下です。
Linux armadillo9 2.6.12.3-a9-8 #1 Fri Oct 20 13:55:08 JST 2006 armv4tl
GNU/Linux

↓★↓
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/ioctl.h>
#include <net/if.h>

int Eth_Link_Get(char *ifname);

int main(void)
{
 int flg;
 int ret;
 char buf[20];

 flg = 0;

 for(;;) {

  sleep(1);

  ret = Eth_Link_Get(buf);  //リンク確認

  if(ret == 0) { //リンクアップ
   printf("Link Up !\n");
  }
  else {    //リンクダウン
   printf("Link down !\n");
  }

 }

 return 0;
}

int Eth_Link_Get(char *ifname)
{
    struct ifreq ifr;
    int skfd=-1;
    int ret = -1;

    /* ソケットを開く */
    skfd = socket(AF_INET, SOCK_DGRAM, 0);
    if (skfd < 0) {
        close(skfd);
        // リンクダウン
        return(-1) ;
    }

    /* インターフェースを取得する */
    strcpy(ifr.ifr_name, ifname);
    if (ioctl(skfd, SIOCGIFFLAGS, &ifr) < 0) {
        close(skfd);
        // リンクダウン
        return(-1);
    }

    /* リンク状態確認 */
    if (ifr.ifr_flags & IFF_UP) {
        /* IPアドレス確認 */
        if (ioctl(skfd, SIOCGIFADDR, &ifr) == 0) {
                // リンクアップ
                ret = 0;
        }
    }

    close(skfd);

    return(ret);
}

以上、
よろしくお願いします。




armadillo メーリングリストの案内