diff options
| author | hwspeedy <ns@bigbear.dk> | 2024-05-01 12:05:07 +0200 | 
|---|---|---|
| committer | hwspeedy <ns@bigbear.dk> | 2024-05-01 12:05:07 +0200 | 
| commit | 7aa9647ff46ffbfe292fabe943056fc01b419d41 (patch) | |
| tree | 18814bd82ff7d68d29b6216dbd246f8f25e5adf7 /modules | |
| parent | 50c94e1560eb42547ca48b6ae143cf1441df92b1 (diff) | |
FIX Added carrier detection for interface speed detection
Diffstat (limited to 'modules')
| -rw-r--r-- | modules/network/net.c | 24 | 
1 files changed, 17 insertions, 7 deletions
| diff --git a/modules/network/net.c b/modules/network/net.c index 02291f0a..9f5d5cb3 100644 --- a/modules/network/net.c +++ b/modules/network/net.c @@ -52,6 +52,7 @@ struct _NetInfo {      char name[16];      int mtu;      char speed[30]; +    int carrier;      unsigned char mac[8];      char ip[16];      char mask[16]; @@ -185,22 +186,31 @@ void get_net_info(char *if_name, NetInfo * netinfo)      /* MTU */      strcpy(ifr.ifr_name, if_name);      if (ioctl(fd, SIOCGIFMTU, &ifr) < 0) { -    netinfo->mtu = 0; +        netinfo->mtu = 0;      } else { -    netinfo->mtu = ifr.ifr_mtu; +        netinfo->mtu = ifr.ifr_mtu;      } +    /* Carrier */ +    netinfo->speed[0]=0; +    sprintf(buf,"/sys/class/net/%s/carrier",if_name); +    sysfs = fopen(buf, "r"); +    netinfo->carrier=0; +    if (sysfs && (fgets(buf, sizeof(buf), sysfs)!=NULL)) sscanf(buf,"%d",&netinfo->carrier); +    fclose(sysfs); +      /* Speed */      netinfo->speed[0]=0;      sprintf(buf,"/sys/class/net/%s/speed",if_name);      sysfs = fopen(buf, "r");      s=0;      if (sysfs && (fgets(buf, sizeof(buf), sysfs)!=NULL)) sscanf(buf,"%d",&s); -    if(if_name[0]=='l' && if_name[1]=='o') -       sprintf(netinfo->speed,"Unlimited"); else -       if(s==0) sprintf(netinfo->speed,"Not Connected"); else -           if(s<1000) sprintf(netinfo->speed,"%d Mbit",s); else -	     sprintf(netinfo->speed,"%g Gbit",(float)s/1000); +    if(netinfo->carrier!=1) +      sprintf(netinfo->speed,"Not Connected"); +        else if(s<=0) +          sprintf(netinfo->speed,"Unlimited"); else +            if(s<1000) sprintf(netinfo->speed,"%d Mbit",s); else +	       sprintf(netinfo->speed,"%g Gbit",(float)s/1000);      fclose(sysfs);      /* HW Address */ | 
