On 19/3/19 9:56, aitor_czr wrote:
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...
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,
#if defined(__linux__)
/* The above code */
#elif defined(__FreeBSD_kernel__)
int fd = socket(AF_INET, SOCK_DGRAM, 0);
if (fd < 0)
{
di_warning("ethtool-lite: could not open control socket\n");
return UNKNOWN;
}
_______________________________________________
Dng mailing list
Dng@lists.dyne.org
https://mailinglists.dyne.org/cgi-bin/mailman/listinfo/dng