2011年12月21日 星期三

Linux偵測網路線是否有接上

  1. check /sys/class/net/eth0/carrier 這個檔案。
    1 :有     接上網路線
    0 :沒有  接上網路線
    但要看底層kernel driver是否有把值傳上來。
  2. 【轉貼】Fred's blog
    #include <stdio.h>
    #include <string.h>
    #include <unistd.h>
    #include <sys/socket.h>
    #include <sys/ioctl.h>
    #include <net/if.h>
    
    void main(void)
    {
        struct ifreq ifr;
        int sockfd;
    
        sockfd = socket(AF_INET, SOCK_DGRAM, 0);
        bzero(&ifr, sizeof(ifr));
        strcpy(ifr.ifr_name, "eth0");
    
        ioctl(sockfd, SIOCGIFFLAGS, &ifr);
        if (ifr.ifr_flags & IFF_RUNNING)
            printf("1");
        else
            printf("0");
        close(sockfd);
        return 0;
    }
    
    ifr_flags 的各項旗標和說明:
        IFF_UP              裝置正在運作
        IFF_BROADCAST       有效的廣播位址
        IFF_DEBUG           Debug 標誌
        IFF_LOOPBACK        這是 Loopback 裝置
        IFF_POINTOPOINT     這是點到點的網路裝置介面
        IFF_RUNNING         資源已分配
        IFF_NOARP           無arp協議,沒有設置第二層目的地址
        IFF_PROMISC         介面為雜湊(promiscuous)模式
        IFF_NOTRAILERS      避免使用 trailer
        IFF_ALLMULTI        接收所有群組廣播(multicast)封包資料
        IFF_MASTER          主負載平衡群(bundle)
        IFF_SLAVE           從負載平衡群(bundle)
        IFF_MULTICAST       支持群組廣播(multicast)
        IFF_PORTSEL         可以通過 ifmap 選擇 media 類型
        IFF_AUTOMEDIA       自動選擇 media
        IFF_DYNAMIC         裝置介面關閉時丟棄地址
    
    其它的看原作
    
ref :
  1. Fred's blog
  2. 概觀 IFF_UP 與 IFF_RUNNING 的異同

沒有留言:

張貼留言