#include /*標準輸入輸出定義*/ #include /*標準函數庫定義*/ #include #include #include "../Config.h" #include "../Log/log.h" #include "../Define/define.h" #include "../ShareMemory/shmMem.h" #include "../common.h" //------------------------------------------------------------------------------ static void InitialDHCP(void) { char tmpbuf[256] = {0}; struct SysConfigData *pSysConfig = (struct SysConfigData *)GetShmSysConfigData(); system("pgrep -f \"udhcpc -i eth0\" | xargs kill"); sprintf(tmpbuf, "/sbin/udhcpc -i eth0 -x hostname:CSU3_%s -s /root/dhcp_script/eth0.script > /dev/null &", pSysConfig->SystemId); system(tmpbuf); } void GetMacAddress(void) { uint8_t index = 0; struct SysConfigData *pSysConfig = (struct SysConfigData *)GetShmSysConfigData(); for (index = 0; index < 2; index++) { int fd; struct ifreq ifr; char tarEth[5]; char Mac[18]; sprintf(tarEth, "eth%d", index); fd = socket(AF_INET, SOCK_DGRAM, 0); ifr.ifr_addr.sa_family = AF_INET; strncpy(ifr.ifr_name, tarEth, IFNAMSIZ - 1); ioctl(fd, SIOCGIFHWADDR, &ifr); close(fd); sprintf(Mac, "%.2x:%.2x:%.2x:%.2x:%.2x:%.2x", ifr.ifr_hwaddr.sa_data[0], ifr.ifr_hwaddr.sa_data[1], ifr.ifr_hwaddr.sa_data[2], ifr.ifr_hwaddr.sa_data[3], ifr.ifr_hwaddr.sa_data[4], ifr.ifr_hwaddr.sa_data[5] ); if (index == 0) { strcpy((char *) pSysConfig->Eth0Interface.EthMacAddress, Mac); } else { strcpy((char *) pSysConfig->Eth1Interface.EthMacAddress, Mac); } } } static int isRouteFail(void) { int result = YES; FILE *fp; char buf[512]; fp = popen("route -n", "r"); if (fp != NULL) { while (fgets(buf, sizeof(buf), fp) != NULL) { if (strstr(buf, "eth0") != NULL) { result = NO; } } } pclose(fp); return result; } static int isReachableInternet(void) { int result = FAIL; int idx = 0; FILE *fp; char cmd[256] = {0}; char buf[512] = {0}; char tmp[512] = {0}; char *valid_Internet[2] = {"8.8.8.8", "180.76.76.76"}; struct SysConfigData *pSysConfig = (struct SysConfigData *)GetShmSysConfigData(); struct AlarmCodeData *pAlarmCode = (struct AlarmCodeData *)GetShmAlarmCodeData(); strcpy(cmd, "ifconfig eth0"); fp = popen(cmd, "r"); if (fp != NULL) { while (fgets(buf, sizeof(buf), fp) != NULL) { if (strstr(buf, "inet addr:") > 0) { sscanf(buf, "%*s%s", tmp); substr(tmp, tmp, strspn(tmp, "addr:"), strlen(tmp) - strspn(tmp, "addr:")); if (strcmp(tmp, (char *)pSysConfig->Eth0Interface.EthIpAddress) != EQUAL) { strcpy((char *) pSysConfig->Eth0Interface.EthIpAddress, tmp); } } } } pclose(fp); if (pAlarmCode->AlarmEvents.bits.DisconnectedFromDo == NORMAL) { result = FAIL; } else { result = PASS; } return result; } void InitEthernet(void) { char tmpbuf[256]; bool ethResult = false; uint8_t cnt_pingDNS_Fail = 0; struct SysConfigData *pSysConfig = (struct SysConfigData *)GetShmSysConfigData(); struct SysInfoData *pSysInfo = (struct SysInfoData *)GetShmSysInfoData(); struct InfoCodeData *pInfoCode = (struct InfoCodeData *)GetShmInfoCodeData(); system("ifconfig eth0 down");// eth0 down system("ifconfig eth1 down");// eth1 down sleep(2); // /sbin/ifconfig eth0 192.168.1.10 netmask 255.255.255.0 down system("echo 1 > /sys/class/gpio/gpio110/value");//reset PHY sleep(2); //Init Eth0 for internet memset(tmpbuf, 0, 256); sprintf(tmpbuf, "/sbin/ifconfig eth0 %s netmask %s up", pSysConfig->Eth0Interface.EthIpAddress, pSysConfig->Eth0Interface.EthSubmaskAddress); //sprintf(tmpbuf,"/sbin/ifconfig eth0 192.168.100.10 netmask 255.255.255.0 up"); system(tmpbuf); log_info("%s",tmpbuf); memset(tmpbuf, 0, 256); sprintf(tmpbuf, "route add default gw %s eth0 ", pSysConfig->Eth0Interface.EthGatewayAddress); //sprintf(tmpbuf,"route add default gw 192.168.100.1 eth0 "); system(tmpbuf); //system("ifconfig lo up"); // /sbin/ifconfig eth0 192.168.1.10 netmask 255.255.255.0 up //Init Eth1 for administrator tool memset(tmpbuf, 0, 256); sprintf(tmpbuf, "/sbin/ifconfig eth1 %s netmask %s up", pSysConfig->Eth1Interface.EthIpAddress, pSysConfig->Eth1Interface.EthSubmaskAddress); log_info("%s",tmpbuf); system(tmpbuf); system("/sbin/ifconfig lo up"); //Run DHCP client if enabled system("killall udhcpc"); system("rm -rf /etc/resolv.conf"); system("echo nameserver 8.8.8.8 > /etc/resolv.conf"); //Google DNS server system("echo nameserver 180.76.76.76 > /etc/resolv.conf"); //Baidu DNS server //system("/sbin/ifconfig eth0 down;/sbin/ifconfig eth0 up"); if (pSysConfig->Eth0Interface.EthDhcpClient == 0) { sprintf(tmpbuf, "/sbin/udhcpc -i eth0 -x hostname:CSU3_%s -s /root/dhcp_script/eth0.script > /dev/null &", pSysConfig->SystemId); system(tmpbuf); } //Upgrade system id to /etc/hostname sprintf(tmpbuf, "echo %s > /etc/hostname", pSysConfig->SystemId); system(tmpbuf); pid_t pid = fork(); if (pid == 0) { //log_info("InitEthernet = %d", pid); for (;;) { isReachableInternet(); sleep(5); continue; } } log_info("Initial Ethernet OK"); }