123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- #include <stdio.h> /*標準輸入輸出定義*/
- #include <stdlib.h> /*標準函數庫定義*/
- #include <string.h>
- #include <stdint.h>
- #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");
- }
|