|
@@ -29,16 +29,22 @@
|
|
|
//#define USE_API
|
|
//#define USE_API
|
|
|
|
|
|
|
|
#define DFLT_NIC "eth0"
|
|
#define DFLT_NIC "eth0"
|
|
|
-//#define FILE_INTERFACE "/root/interfaces"
|
|
|
|
|
-#define FILE_INTERFACE "/etc/network/interfaces"
|
|
|
|
|
|
|
+//#define FILE_NET "/root/interfaces"
|
|
|
|
|
+#define FILE_NET "/etc/network/interfaces"
|
|
|
|
|
+#define FILE_DNS "/etc/dnsmasq.conf"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+typedef struct {
|
|
|
|
|
+ char *buf;
|
|
|
|
|
+ int len;
|
|
|
|
|
+}file_data_t;
|
|
|
|
|
+
|
|
|
typedef struct {
|
|
typedef struct {
|
|
|
char *pbuf;
|
|
char *pbuf;
|
|
|
int dlen;
|
|
int dlen;
|
|
|
int blen;
|
|
int blen;
|
|
|
}node_t;
|
|
}node_t;
|
|
|
-static int set_net(NetworkInfo_t *para);
|
|
|
|
|
|
|
+static int set_net(NetworkInfo_t *para, int ipv);
|
|
|
|
|
|
|
|
|
|
|
|
|
static int node_free(node_t *nd)
|
|
static int node_free(node_t *nd)
|
|
@@ -99,6 +105,7 @@ static int exe_cmd(char *cmd, node_t *nd)
|
|
|
|
|
|
|
|
return 0;
|
|
return 0;
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////
|
|
|
int sys_reboot(void)
|
|
int sys_reboot(void)
|
|
|
{
|
|
{
|
|
@@ -133,7 +140,7 @@ int sys_set_factory(void)
|
|
|
LOGD("___ %s\n", tmp);
|
|
LOGD("___ %s\n", tmp);
|
|
|
r = system(tmp);
|
|
r = system(tmp);
|
|
|
if(r==0) {
|
|
if(r==0) {
|
|
|
- r = set_net(&DFLT_PARAS.dev._network_info);
|
|
|
|
|
|
|
+ r = set_net(&DFLT_PARAS.dev._network_info, IP_V4);
|
|
|
if(r==0) {
|
|
if(r==0) {
|
|
|
exit(0);
|
|
exit(0);
|
|
|
}
|
|
}
|
|
@@ -423,126 +430,27 @@ finish:
|
|
|
}
|
|
}
|
|
|
static int set_dhcp(int on)
|
|
static int set_dhcp(int on)
|
|
|
{
|
|
{
|
|
|
- return 0;
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-static int set_dns(int family, const char* iface, char* dns1, char *dns2)
|
|
|
|
|
-{
|
|
|
|
|
- int fd=-1;
|
|
|
|
|
- struct ifreq ifr;
|
|
|
|
|
-
|
|
|
|
|
-#if 0
|
|
|
|
|
- fd = socket(family, SOCK_DGRAM, 0);
|
|
|
|
|
- if (fd < 0) {
|
|
|
|
|
- log_e("socket SOCK_DGRAM failed\n");
|
|
|
|
|
- return -1;
|
|
|
|
|
|
|
+ if(on) {
|
|
|
|
|
+ system("udhcpc –i eth0 –s /usr/share/udhcpc/default.script");
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
- memset(&ifr, 0, sizeof(ifr));
|
|
|
|
|
- strncpy(ifr.ifr_name, iface, sizeof(ifr.ifr_name));
|
|
|
|
|
-
|
|
|
|
|
- struct sockaddr_in* addr = (struct sockaddr_in*)&ifr.ifr_addr;
|
|
|
|
|
- addr->sin_family = family;
|
|
|
|
|
- inet_pton(family, dns1, &addr->sin_addr);
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
- if (ioctl(fd, SIOCSIFDNS, &ifr) < 0) {
|
|
|
|
|
- log_e("socket SIOCSIFDNS failed\n");
|
|
|
|
|
- close(fd);
|
|
|
|
|
- return -1;
|
|
|
|
|
|
|
+ else {
|
|
|
|
|
+ system("killall udhcpc");
|
|
|
}
|
|
}
|
|
|
-#endif
|
|
|
|
|
- close(fd);
|
|
|
|
|
-
|
|
|
|
|
return 0;
|
|
return 0;
|
|
|
}
|
|
}
|
|
|
-static int get_dns(int family, const char* iface, char* dns1, char *dns2)
|
|
|
|
|
-{
|
|
|
|
|
- return 0;
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
|
|
|
|
|
static int ip_check(char* addr)
|
|
static int ip_check(char* addr)
|
|
|
{
|
|
{
|
|
|
int flag = IP_ERR;
|
|
int flag = IP_ERR;
|
|
|
- int len = 0;
|
|
|
|
|
- int num = 0;
|
|
|
|
|
- int Count = 0;
|
|
|
|
|
- int first = 0;
|
|
|
|
|
- int i = 0,j=0;
|
|
|
|
|
-
|
|
|
|
|
- len = strlen(addr);
|
|
|
|
|
- if (strchr(addr,'.') != NULL) {// 含 .的情况,判断是否是IPv4
|
|
|
|
|
- for(i = 0;i <= len-1; i++) {
|
|
|
|
|
- if(addr[i] >= '0' && addr[i] <= '9') {
|
|
|
|
|
- num = num * 10 + addr[i] - '0';
|
|
|
|
|
- }
|
|
|
|
|
- else if(addr[i] == '.') {
|
|
|
|
|
- if((i == 0)||(i == len-1)) {
|
|
|
|
|
- break;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- if(addr[i-1] < '0' || addr[i-1] > '9') {
|
|
|
|
|
- break;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- if(addr[i] == '.') {
|
|
|
|
|
- Count++;
|
|
|
|
|
- if(Count > 3) {
|
|
|
|
|
- break;
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- if(num > 255) {
|
|
|
|
|
- break;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- if(num != 0 && addr[first] == '0') {
|
|
|
|
|
- break;
|
|
|
|
|
- }
|
|
|
|
|
- first = i+1;
|
|
|
|
|
- num = 0;
|
|
|
|
|
- }
|
|
|
|
|
- else {
|
|
|
|
|
- break;
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- if(Count == 3) {
|
|
|
|
|
- flag = IP_V4;
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- else if (strchr(addr,':') != NULL) {// 含 :的情况,判断是否是IPv6
|
|
|
|
|
- for(i = 0;i <= len-1; i++) {
|
|
|
|
|
- if((addr[i] >= '0' && addr[i] <= '9')||(tolower(addr[i]) >= 'a' && tolower(addr[i]) <= 'f')) {
|
|
|
|
|
- j++;
|
|
|
|
|
- if (j > 4) {
|
|
|
|
|
- break;
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- else if(addr[i] == ':') {
|
|
|
|
|
- if((i == 0)||(i == len-1)) {
|
|
|
|
|
- break;
|
|
|
|
|
- }
|
|
|
|
|
- if (j == 0) {
|
|
|
|
|
- break;
|
|
|
|
|
- }
|
|
|
|
|
- Count++;
|
|
|
|
|
- if(Count > 7) {
|
|
|
|
|
- break;
|
|
|
|
|
- }
|
|
|
|
|
- j = 0;
|
|
|
|
|
- }
|
|
|
|
|
- else {
|
|
|
|
|
- break;
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- if((Count == 7)&&(j <= 4))
|
|
|
|
|
- {
|
|
|
|
|
- flag = IP_V6;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ struct in_addr addr4;
|
|
|
|
|
+ struct in6_addr addr6;
|
|
|
|
|
+
|
|
|
|
|
+ if (inet_pton(AF_INET, addr, &addr4) == 1) {
|
|
|
|
|
+ flag = IP_V4;
|
|
|
|
|
+ } else if (inet_pton(AF_INET6, addr, &addr6) == 1) {
|
|
|
|
|
+ flag = IP_V6;
|
|
|
|
|
+ } else {
|
|
|
|
|
+ LOGE("____ wrong ip addr: %s\n", addr);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
return flag;
|
|
return flag;
|
|
@@ -586,23 +494,36 @@ static int file_save(char *path, void *buf, int len)
|
|
|
return r;
|
|
return r;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-static int file_load(char* path, void* buf, int len)
|
|
|
|
|
|
|
+static int file_load(char* path, file_data_t *fdat)
|
|
|
{
|
|
{
|
|
|
- int r;
|
|
|
|
|
|
|
+ int r,flen;
|
|
|
FILE* fp;
|
|
FILE* fp;
|
|
|
|
|
|
|
|
|
|
+ flen = file_length(path);
|
|
|
|
|
+ if(flen<=0) {
|
|
|
|
|
+ LOGE("____ file_load, %s length is wrong\n", path);
|
|
|
|
|
+ return -1;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ fdat->buf = (char*)malloc(flen+1);
|
|
|
|
|
+ if(!fdat->buf) {
|
|
|
|
|
+ LOGE("____ file_load, %s malloc %d failed\n", path, flen);
|
|
|
|
|
+ return -1;
|
|
|
|
|
+ }
|
|
|
|
|
+ fdat->len = flen;
|
|
|
|
|
+
|
|
|
fp = fopen(path, "r");
|
|
fp = fopen(path, "r");
|
|
|
if (!fp) {
|
|
if (!fp) {
|
|
|
- LOGE("file_load, fopen %s failed\n", path);
|
|
|
|
|
|
|
+ LOGE("file_load, fopen %s failed\n", path); free(fdat->buf);
|
|
|
return -1;
|
|
return -1;
|
|
|
}
|
|
}
|
|
|
- r = fread(buf, 1, len, fp);
|
|
|
|
|
- if (r != len) {
|
|
|
|
|
- LOGE("file_load %s failed, %d, %d\n", path, r, len);
|
|
|
|
|
|
|
+ r = fread(fdat->buf, 1, flen, fp);
|
|
|
|
|
+ if (r != flen) {
|
|
|
|
|
+ LOGE("file_load %s failed, %d, %d\n", path, r, flen); free(fdat->buf);
|
|
|
r = -1;
|
|
r = -1;
|
|
|
}
|
|
}
|
|
|
else {
|
|
else {
|
|
|
- r = 0;
|
|
|
|
|
|
|
+ fdat->buf[flen] = 0; r = 0;
|
|
|
}
|
|
}
|
|
|
fclose(fp);
|
|
fclose(fp);
|
|
|
|
|
|
|
@@ -610,11 +531,10 @@ static int file_load(char* path, void* buf, int len)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
typedef struct {
|
|
typedef struct {
|
|
|
- char lo[500];
|
|
|
|
|
- char e0[500];
|
|
|
|
|
- char e1[500];
|
|
|
|
|
-}net_t;
|
|
|
|
|
-static net_t sNet;
|
|
|
|
|
|
|
+ char lo[1000];
|
|
|
|
|
+ char e0[1000];
|
|
|
|
|
+ char e1[1000];
|
|
|
|
|
+}interface_t;
|
|
|
typedef uint32_t u32;
|
|
typedef uint32_t u32;
|
|
|
#define XLEN(a,b) ((u32)(a)-(u32)(b))
|
|
#define XLEN(a,b) ((u32)(a)-(u32)(b))
|
|
|
typedef struct {
|
|
typedef struct {
|
|
@@ -677,12 +597,24 @@ static int get_nic(char *nbuf, int nlen, char *nic, char *fbuf, int flen)
|
|
|
|
|
|
|
|
return -1;
|
|
return -1;
|
|
|
}
|
|
}
|
|
|
-static int get_ip(char *nbuf, char *token, char *ipaddr)
|
|
|
|
|
|
|
+static int get_ip(char *nbuf, char *token, char *ipaddr, int ipv)
|
|
|
{
|
|
{
|
|
|
int cnt=0;
|
|
int cnt=0;
|
|
|
char *p,*p1,*p2;
|
|
char *p,*p1,*p2;
|
|
|
|
|
+ char *pbuf=NULL;
|
|
|
|
|
+
|
|
|
|
|
+ if(ipv==IP_V4) {
|
|
|
|
|
+ pbuf = strstr(nbuf, "inet");
|
|
|
|
|
+ }
|
|
|
|
|
+ else {
|
|
|
|
|
+ pbuf = strstr(nbuf, "inet6");
|
|
|
|
|
+ }
|
|
|
|
|
+ if(pbuf==NULL) {
|
|
|
|
|
+ LOGE("___get_ip, not found inet or inet6\n");
|
|
|
|
|
+ return -1;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- p = strstr(nbuf, token);
|
|
|
|
|
|
|
+ p = strstr(pbuf, token);
|
|
|
if(p) {
|
|
if(p) {
|
|
|
while(!isdigit(*p)) p++;
|
|
while(!isdigit(*p)) p++;
|
|
|
p1 = p;
|
|
p1 = p;
|
|
@@ -700,110 +632,179 @@ static int get_ip(char *nbuf, char *token, char *ipaddr)
|
|
|
}
|
|
}
|
|
|
return -1;
|
|
return -1;
|
|
|
}
|
|
}
|
|
|
|
|
+static int get_dns(char *nbuf, char *dns1, char *dns2)
|
|
|
|
|
+{
|
|
|
|
|
+ int cnt;
|
|
|
|
|
+ char *p1,*p2;
|
|
|
|
|
+ char *token="server=";
|
|
|
|
|
+
|
|
|
|
|
+ p1 = strstr(nbuf, token);
|
|
|
|
|
+ if(p1==NULL) {
|
|
|
|
|
+ dns1[0] = 0;
|
|
|
|
|
+ return -1;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
-static int get_net(NetworkInfo_t *para)
|
|
|
|
|
|
|
+ p1 += strlen(token); cnt=0;
|
|
|
|
|
+ while(!isspace(*p1)) {
|
|
|
|
|
+ dns1[cnt++] = *p1;
|
|
|
|
|
+ p1++;
|
|
|
|
|
+ }
|
|
|
|
|
+ dns1[cnt] = 0;
|
|
|
|
|
+
|
|
|
|
|
+ p2 = strstr(p1, token);
|
|
|
|
|
+ if(p2==NULL) {
|
|
|
|
|
+ dns2[0] = 0;
|
|
|
|
|
+ return -1;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ p2 += strlen(token); cnt=0;
|
|
|
|
|
+ while(!isspace(*p2)) {
|
|
|
|
|
+ dns2[cnt++] = *p2;
|
|
|
|
|
+ p2++;
|
|
|
|
|
+ }
|
|
|
|
|
+ dns2[cnt] = 0;
|
|
|
|
|
+
|
|
|
|
|
+ return 0;
|
|
|
|
|
+}
|
|
|
|
|
+static int set_dns(char *dns1, char *dns2)
|
|
|
{
|
|
{
|
|
|
- char *fpath=FILE_INTERFACE;
|
|
|
|
|
- int xlen=10*1000;
|
|
|
|
|
- net_t *pNet=&sNet;
|
|
|
|
|
|
|
+ int r;
|
|
|
|
|
+ char buf[4000];
|
|
|
|
|
+
|
|
|
|
|
+ memset(buf, 0, sizeof(buf));
|
|
|
|
|
+ snprintf(buf, sizeof(buf), "interface=eth0\nserver=%s\nserver=%s\n", dns1, dns2);
|
|
|
|
|
+ r = file_save(FILE_DNS, buf, strlen(buf))+1;
|
|
|
|
|
+ if(r==0) {
|
|
|
|
|
+ r = system("/etc/init.d/dnsmasq restart");
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- int flen=file_length(fpath);
|
|
|
|
|
- char *fbuf=malloc(xlen);
|
|
|
|
|
- if(!fbuf) {
|
|
|
|
|
- LOGE("___ malloc %d failed\n", flen);
|
|
|
|
|
|
|
+ return r;
|
|
|
|
|
+}
|
|
|
|
|
+static int get_net(NetworkInfo_t *para, int ipv)
|
|
|
|
|
+{
|
|
|
|
|
+ int r;
|
|
|
|
|
+ char *p=NULL;
|
|
|
|
|
+ interface_t intf;
|
|
|
|
|
+ file_data_t fdat;
|
|
|
|
|
+
|
|
|
|
|
+ r = file_load(FILE_NET, &fdat);
|
|
|
|
|
+ if(r) {
|
|
|
return -1;
|
|
return -1;
|
|
|
}
|
|
}
|
|
|
- file_load(fpath, fbuf, flen);
|
|
|
|
|
- fbuf[flen] = 0;
|
|
|
|
|
|
|
|
|
|
- get_nic(pNet->lo, sizeof(pNet->lo), "lo", fbuf, flen);
|
|
|
|
|
- get_nic(pNet->e0, sizeof(pNet->e0), "eth0", fbuf, flen);
|
|
|
|
|
- get_nic(pNet->e1, sizeof(pNet->e1), "eth1", fbuf, flen);
|
|
|
|
|
|
|
+ memset(&intf, 0, sizeof(intf));
|
|
|
|
|
+ get_nic(intf.lo, sizeof(intf.lo), "lo", fdat.buf, fdat.len);
|
|
|
|
|
+ get_nic(intf.e0, sizeof(intf.e0), "eth0", fdat.buf, fdat.len);
|
|
|
|
|
+ get_nic(intf.e1, sizeof(intf.e1), "eth1", fdat.buf, fdat.len);
|
|
|
|
|
|
|
|
- if(strstr(pNet->e0, "dhcp")) {
|
|
|
|
|
|
|
+ p = strstr(intf.e0, (ipv==IP_V4)?"inet":"inet6");
|
|
|
|
|
+ if(p==NULL) {
|
|
|
|
|
+ LOGE("___get_net, inet/inet6 not found!\n");
|
|
|
|
|
+ free(fdat.buf); return -1;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if(strstr(p, "dhcp")) {
|
|
|
para->mode = 0;
|
|
para->mode = 0;
|
|
|
}
|
|
}
|
|
|
- else if(strstr(pNet->e0, "static")) {
|
|
|
|
|
|
|
+ else if(strstr(p, "static")) {
|
|
|
para->mode = 1;
|
|
para->mode = 1;
|
|
|
|
|
+ } else {
|
|
|
|
|
+ LOGE("___get_net, dhcp/static not found!\n");
|
|
|
|
|
+ free(fdat.buf); return -1;
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
- get_ip(pNet->e0, "address", para->ip_address);
|
|
|
|
|
- get_ip(pNet->e0, "netmask", para->mask);
|
|
|
|
|
- get_ip(pNet->e0, "gateway", para->gateway);
|
|
|
|
|
-
|
|
|
|
|
- free(fbuf);
|
|
|
|
|
|
|
+
|
|
|
|
|
+ get_ip(p, "address", para->ip_address, ipv);
|
|
|
|
|
+ get_ip(p, "netmask", para->mask, ipv);
|
|
|
|
|
+ get_ip(p, "gateway", para->gateway, ipv);
|
|
|
|
|
+ free(fdat.buf);
|
|
|
|
|
+
|
|
|
|
|
+ r = file_load(FILE_DNS, &fdat);
|
|
|
|
|
+ if(r) {
|
|
|
|
|
+ return -1;
|
|
|
|
|
+ }
|
|
|
|
|
+ get_dns(fdat.buf, para->dns1, para->dns2);
|
|
|
|
|
|
|
|
return 0;
|
|
return 0;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-static int set_net(NetworkInfo_t *para)
|
|
|
|
|
|
|
+static int set_net(NetworkInfo_t *para, int ipv)
|
|
|
{
|
|
{
|
|
|
- int r;
|
|
|
|
|
|
|
+ int r,ipv2;
|
|
|
char *p1,*p2,*p3,*p4;
|
|
char *p1,*p2,*p3,*p4;
|
|
|
- char *fpath=FILE_INTERFACE;
|
|
|
|
|
- int xlen=10*1000;
|
|
|
|
|
- NetworkInfo_t para2;
|
|
|
|
|
- net_t *pNet=&sNet;
|
|
|
|
|
|
|
+ int flen=100*1000;
|
|
|
|
|
+ NetworkInfo_t info4,info6,*info;
|
|
|
|
|
+
|
|
|
|
|
+ get_net(&info4, IP_V4);
|
|
|
|
|
+ get_net(&info6, IP_V6);
|
|
|
|
|
|
|
|
- memset(¶2, 0, sizeof(para2));
|
|
|
|
|
- get_net(¶2);
|
|
|
|
|
|
|
+ info = ((ipv==IP_V4)?&info4:&info6);
|
|
|
|
|
|
|
|
- if(para->mode<2 && para->mode!=para2.mode) {
|
|
|
|
|
- para2.mode = para->mode;
|
|
|
|
|
|
|
+ if(para->mode<2 && para->mode!=info->mode) {
|
|
|
|
|
+ info->mode = para->mode;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- if(ip_check(para->ip_address) && strcmp(para->ip_address, para2.ip_address)) {
|
|
|
|
|
- strcpy(para2.ip_address, para->ip_address);
|
|
|
|
|
|
|
+ ipv2 = ip_check(para->ip_address);
|
|
|
|
|
+ if((ipv==ipv2) && strcmp(para->ip_address, info->ip_address)) {
|
|
|
|
|
+ strcpy(info->ip_address, para->ip_address);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- if(ip_check(para->mask) && strcmp(para->mask, para2.mask)) {
|
|
|
|
|
- strcpy(para2.mask, para->mask);
|
|
|
|
|
|
|
+ ipv2 = ip_check(para->mask);
|
|
|
|
|
+ if((ipv==ipv2) && strcmp(para->mask, info->mask)) {
|
|
|
|
|
+ strcpy(info->mask, para->mask);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- if(ip_check(para->gateway) && strcmp(para->gateway, para2.gateway)) {
|
|
|
|
|
- strcpy(para2.gateway, para->gateway);
|
|
|
|
|
|
|
+ ipv2 = ip_check(para->gateway);
|
|
|
|
|
+ if((ipv==ipv2) && strcmp(para->gateway, info->gateway)) {
|
|
|
|
|
+ strcpy(info->gateway, para->gateway);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- char *fbuf=malloc(xlen);
|
|
|
|
|
|
|
+ char *fbuf=malloc(flen);
|
|
|
if(!fbuf) {
|
|
if(!fbuf) {
|
|
|
- LOGE("___ malloc %d failed\n", xlen);
|
|
|
|
|
|
|
+ LOGE("___ malloc %d failed\n", flen);
|
|
|
return -1;
|
|
return -1;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
#if 0
|
|
#if 0
|
|
|
- file_load(fpath, fbuf, flen);
|
|
|
|
|
- fbuf[flen] = 0;
|
|
|
|
|
|
|
+ file_load(FILE_NET, fbuf);
|
|
|
|
|
|
|
|
get_nic(pNet->lo, sizeof(pNet->lo), "lo", fbuf, flen);
|
|
get_nic(pNet->lo, sizeof(pNet->lo), "lo", fbuf, flen);
|
|
|
get_nic(pNet->e1, sizeof(pNet->e1), "eth1", fbuf, flen);
|
|
get_nic(pNet->e1, sizeof(pNet->e1), "eth1", fbuf, flen);
|
|
|
|
|
|
|
|
snprintf(pNet->e0, sizeof(pNet->e0), "auto eth0\niface eth0 inet %s\n address %s\n netmask %s\n gateway %s\n\n",
|
|
snprintf(pNet->e0, sizeof(pNet->e0), "auto eth0\niface eth0 inet %s\n address %s\n netmask %s\n gateway %s\n\n",
|
|
|
- para2.mode?"static":"dhcp", para2.ip_address, para2.mask, para2.gateway);
|
|
|
|
|
|
|
+ info4.mode?"static":"dhcp", info4.ip_address, info4.mask, info4.gateway);
|
|
|
strcpy(fbuf, pNet->lo);
|
|
strcpy(fbuf, pNet->lo);
|
|
|
strcat(fbuf, pNet->e0);
|
|
strcat(fbuf, pNet->e0);
|
|
|
strcat(fbuf, pNet->e1);
|
|
strcat(fbuf, pNet->e1);
|
|
|
#else
|
|
#else
|
|
|
char *lo="auto lo\niface lo inet loopback\n\n";
|
|
char *lo="auto lo\niface lo inet loopback\n\n";
|
|
|
char *eth1="auto eth1\niface eth1 inet dhcp\npre-up /etc/network/nfs_check\nwait-delay 5\nhostname $(hostname)\n";
|
|
char *eth1="auto eth1\niface eth1 inet dhcp\npre-up /etc/network/nfs_check\nwait-delay 5\nhostname $(hostname)\n";
|
|
|
- char eth0[500];
|
|
|
|
|
|
|
+ char eth0[1000];
|
|
|
|
|
|
|
|
- snprintf(eth0, sizeof(eth0), "auto eth0\niface eth0 inet %s\n address %s\n netmask %s\n gateway %s\n\n",
|
|
|
|
|
- para2.mode?"static":"dhcp", para2.ip_address, para2.mask, para2.gateway);
|
|
|
|
|
|
|
+ snprintf(eth0, sizeof(eth0), "auto eth0\n"
|
|
|
|
|
+ "iface eth0 inet %s\n address %s\n netmask %s\n gateway %s\n\n"
|
|
|
|
|
+ "iface eth0 inet6 %s\n address %s\n netmask %s\n gateway %s\n\n",
|
|
|
|
|
+ (info4.mode==IP_STATIC)?"static":"dhcp", info4.ip_address, info4.mask, info4.gateway,
|
|
|
|
|
+ (info6.mode==IP_STATIC)?"static":"dhcp", info6.ip_address, info6.mask, info6.gateway);
|
|
|
|
|
|
|
|
sprintf(fbuf, "%s%s%s", lo, eth0, eth1);
|
|
sprintf(fbuf, "%s%s%s", lo, eth0, eth1);
|
|
|
#endif
|
|
#endif
|
|
|
//LOGD("___interfaces___:\n%s", fbuf);
|
|
//LOGD("___interfaces___:\n%s", fbuf);
|
|
|
- r = file_save(fpath, fbuf, strlen(fbuf));
|
|
|
|
|
- free(fbuf);
|
|
|
|
|
|
|
+
|
|
|
|
|
+ r = file_save(FILE_NET, fbuf, strlen(fbuf));
|
|
|
if(r==0) {
|
|
if(r==0) {
|
|
|
- paras_get()->dev._network_info = para2;
|
|
|
|
|
|
|
+ system("ifdown eth0 && ifup eth0");
|
|
|
|
|
+ }
|
|
|
|
|
+ free(fbuf);
|
|
|
|
|
+
|
|
|
|
|
+ r = set_dns(para->dns1, para->dns2);
|
|
|
|
|
+ if(r) {
|
|
|
|
|
+ LOGE("___ set_dns failed\n");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
return r;
|
|
return r;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
-
|
|
|
|
|
int sys_set_net(NetworkInfo_t *para, int ipVersion)
|
|
int sys_set_net(NetworkInfo_t *para, int ipVersion)
|
|
|
{
|
|
{
|
|
|
int r,ipv;
|
|
int r,ipv;
|
|
@@ -841,13 +842,13 @@ int sys_set_net(NetworkInfo_t *para, int ipVersion)
|
|
|
|
|
|
|
|
#elif defined USE_FILE
|
|
#elif defined USE_FILE
|
|
|
NetworkInfo_t para2;
|
|
NetworkInfo_t para2;
|
|
|
- r = get_net(¶2);
|
|
|
|
|
|
|
+ r = get_net(¶2, ipVersion);
|
|
|
if(r==0) {
|
|
if(r==0) {
|
|
|
if(memcmp(para, ¶2, sizeof(NetworkInfo_t))==0) {
|
|
if(memcmp(para, ¶2, sizeof(NetworkInfo_t))==0) {
|
|
|
LOGW("restart %s failed\n", DFLT_NIC);
|
|
LOGW("restart %s failed\n", DFLT_NIC);
|
|
|
return -1;
|
|
return -1;
|
|
|
}
|
|
}
|
|
|
- r = set_net(para);
|
|
|
|
|
|
|
+ r = set_net(para, ipVersion);
|
|
|
}
|
|
}
|
|
|
else {
|
|
else {
|
|
|
LOGE("get_net failed\n");
|
|
LOGE("get_net failed\n");
|
|
@@ -880,9 +881,6 @@ int sys_set_net(NetworkInfo_t *para, int ipVersion)
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
#endif
|
|
#endif
|
|
|
-
|
|
|
|
|
- system("ifdown eth0 && ifup eth0");
|
|
|
|
|
- //system("重启dns服务器"); //目前dns服务未启动
|
|
|
|
|
|
|
|
|
|
return r;
|
|
return r;
|
|
|
}
|
|
}
|
|
@@ -895,7 +893,7 @@ int sys_get_net(NetworkInfo_t *para, int ipVersion)
|
|
|
|
|
|
|
|
|
|
|
|
|
#elif defined USE_FILE
|
|
#elif defined USE_FILE
|
|
|
- r = get_net(para);
|
|
|
|
|
|
|
+ r = get_net(para, ipVersion);
|
|
|
#elif defined USE_API
|
|
#elif defined USE_API
|
|
|
r = get_ipaddr(family, DFLT_NIC, para->ip_address, para->mask);
|
|
r = get_ipaddr(family, DFLT_NIC, para->ip_address, para->mask);
|
|
|
if(r) {
|
|
if(r) {
|