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 */ |