int IsLinkUp(const char *dev) { struct ifreq ifr; int sockfd; /* Create socket */ sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd < 0) { ZError(DBG_ZDEVCFG,"socket open failed\n"); return ZQERROR; /* Can't clean_exit(), will recurse - Jean II */ } /* Try to read flags. Will fail if device doesn't exist */ strncpy(ifr.ifr_name, dev, IFNAMSIZ); if (ioctl(sockfd, SIOCGIFFLAGS, &ifr) < 0) { ZError(DBG_ZDEVCFG,"IO control SIOCGIFFLAGS failed\n"); close (sockfd); return ZQERROR; } int iRet=do_gset(sockfd,&ifr); close(sockfd); /** 0 implies link down 1 implies link up **/ return iRet; }
static int doit(void) { struct ifreq ifr; int fd; /* Setup our control structures. */ memset(&ifr, 0, sizeof(ifr)); strcpy(ifr.ifr_name, devname); /* Open control socket. */ fd = socket(AF_INET, SOCK_DGRAM, 0); if (fd < 0) { perror("Cannot get control socket"); return 70; } /* all of these are expected to populate ifr->ifr_data as needed */ if (mode == MODE_GDRV) { return do_gdrv(fd, &ifr); } else if (mode == MODE_GSET) { return do_gset(fd, &ifr); } else if (mode == MODE_SSET) { return do_sset(fd, &ifr); } else if (mode == MODE_GREGS) { return do_gregs(fd, &ifr); } else if (mode == MODE_NWAY_RST) { return do_nway_rst(fd, &ifr); } else if (mode == MODE_GEEPROM) { return do_geeprom(fd, &ifr); } else if (mode == MODE_SEEPROM) { return do_seeprom(fd, &ifr); } else if (mode == MODE_TEST) { return do_test(fd, &ifr); } else if (mode == MODE_PHYS_ID) { return do_phys_id(fd, &ifr); } else if (mode == MODE_GPAUSE) { return do_gpause(fd, &ifr); } else if (mode == MODE_SPAUSE) { return do_spause(fd, &ifr); } else if (mode == MODE_GCOALESCE) { return do_gcoalesce(fd, &ifr); } else if (mode == MODE_SCOALESCE) { return do_scoalesce(fd, &ifr); } else if (mode == MODE_GRING) { return do_gring(fd, &ifr); } else if (mode == MODE_SRING) { return do_sring(fd, &ifr); } else if (mode == MODE_GOFFLOAD) { return do_goffload(fd, &ifr); } else if (mode == MODE_SOFFLOAD) { return do_soffload(fd, &ifr); } else if (mode == MODE_GSTATS) { return do_gstats(fd, &ifr); } return 69; }