Hi Aitor!

Anno domini 2019 Tue, 19 Mar 09:56:07 +0100
 aitor_czr scripsit:
> Hi Nick,
> 
> On 19/3/19 9:21, Dr. Nikolaus Klepp wrote:
> > You might call me ignorant, but with bash this can be done a bit simpler 
> > (this is from my solution to the 
> > detect-if-kable-present-while-booting-problem):-)
> >
> > #!/bin/bash
> >
> > while sleep 1; do
> >      for i in /sys/class/net/eth*; do
> >          VAR=$(basename $i)
> >          VAL=$(sed -n 's/0/UN/p' $i/carrier)PLUGGED
> >          if [ "${!VAR}" != "$VAL" ]; then
> >              echo $VAR $VAL
> >              declare $VAR=$VAL
> >          fi
> >      done
> > done
> >
> >
> > Nik
> Thanks for your script! Interesting to know... With a short look, i 
> seems to read the value content in the /sys/class/eth0/carrier file, set 
> to "0" or "1".
> I was thinking about this possibility a couple of days ago, but i'm not 
> pretty sure if its value also depends on the status of the network 
> hotpluggable device. I'm testing it...

Interestingly the "carrier"-column in /proc/net/dev does not correspond to the 
cable beeing plugged in or not, it's always "0" on my computer.

Nik


> On the other hand, here you are the code used in the ethtool-lite.c file 
> of the netcfg udeb package used by debian-installer, doing something 
> similar (in the case of the FreeBSD kernel
> it uses a raw socket instead):
> 
>      int len = strlen(SYSCLASSNET) + strlen(iface) + strlen("/carrier") + 1;
>      char* filename = malloc(len);
>      snprintf(filename, len, SYSCLASSNET "%s/carrier", iface);
>      FILE* fp = fopen(filename, "r");
>      free(filename);
> 
>      char result[2];
>      if (fgets(result, sizeof(result), fp) == NULL) {
>          fclose(fp);
>          if (errno == EINVAL) {
>              di_info("ethtool-lite: %s is down", iface);
>              return DISCONNECTED;
>          }
>          di_error("ethtool-lite: getting carrier failed: %s",
>              strerror(errno));
>          return UNKNOWN;
>      }
>      fclose(fp);
> 
>      switch (result[0]) {
>      case '1':
>          di_info("ethtool-lite: %s: carrier up", iface);
>          return CONNECTED;
>      case '0':
>          di_info("ethtool-lite: %s: carrier down", iface);
>          return DISCONNECTED;
>      }
>      di_info("ethtool-lite: %s: could not determine carrier state; got 
> \"%s\"",
>          iface, result);
>      return UNKNOWN;
> 
> Cheers,
> 
> Aitor.





-- 
Please do not email me anything that you are not comfortable also sharing with 
the NSA, CIA ...
_______________________________________________
Dng mailing list
Dng@lists.dyne.org
https://mailinglists.dyne.org/cgi-bin/mailman/listinfo/dng

Reply via email to