net.c 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256
  1. #include "gd32f4xx_libopt.h"
  2. #include <string.h>
  3. #include "lwip/dhcp.h"
  4. #include "paras.h"
  5. #include "cfg.h"
  6. #include "fs.h"
  7. #include "lwip/netif.h"
  8. #include "lwip/netifapi.h"
  9. #include "paras.h"
  10. #include "lwip/prot/dhcp.h"
  11. #include <lwip/ip_addr.h>
  12. #include "lwip/dns.h"
  13. #include "lwip/ip4_addr.h"
  14. #include "net.h"
  15. #include "lwip/sockets.h"
  16. #include "FreeRTOS.h"
  17. #include "task.h"
  18. void print_net(char*s, network_data_t *p)
  19. {
  20. LOGD("__%s__net.mode: %d\n", s, p->mode);
  21. LOGD("__%s__net.addr: %s\n", s, p->ipaddr);
  22. LOGD("__%s__net.mask: %s\n", s, p->mask);
  23. LOGD("__%s__net.gateway: %s\n", s, p->gateway);
  24. LOGD("__%s__net.dns1: %s\n", s, p->dns1);
  25. LOGD("__%s__net.dns2: %s\n", s, p->dns2);
  26. }
  27. void print_modbus(char*s, modbus_data_t *p)
  28. {
  29. LOGD("__%s__mbus.mode: %d\n", s, p->mode);
  30. LOGD("__%s__mbus.addr: %d\n", s, p->addr);
  31. LOGD("__%s__mbus.baud: %d\n", s, p->baud);
  32. //LOGD("__%s__mbus.path: %s\n", s, p->path);
  33. }
  34. static int set_dns(network_data_t *para)
  35. {
  36. }
  37. static int set_ipaddr(int family, const char* iface, const char* addr, const char* netmask)
  38. {
  39. // ip4_addr_t ipaddr4;
  40. // ip6_addr_t ipaddr6;
  41. return 0;
  42. }
  43. static int get_ipaddr(int family, char *iface, char *addr, char *netmask)
  44. {
  45. return 0;
  46. }
  47. static int set_gateway(int family, const char* gateway)
  48. {
  49. return 0;
  50. }
  51. static int get_gateway(int family, const char* gateway)
  52. {
  53. return 0;
  54. }
  55. static int set_dhcp(int on)
  56. {
  57. if(on) {
  58. }
  59. else {
  60. }
  61. return 0;
  62. }
  63. static int is_number(char *str)
  64. {
  65. while (*str) {
  66. if (!isdigit(*str)) {
  67. return 0;
  68. }
  69. str++;
  70. }
  71. return 1;
  72. }
  73. static int ip_check(char* addr)
  74. {
  75. int flag=0;
  76. #if 1
  77. struct in_addr addr4;
  78. struct in6_addr addr6;
  79. if (lwip_inet_pton(AF_INET, addr, &addr4) == 1) {
  80. flag = 1;
  81. } else if (lwip_inet_pton(AF_INET6, addr, &addr6) == 1) {
  82. flag = 1;
  83. }
  84. if(flag==0) {
  85. LOGD("____ wrong ip addr: %s\n", addr);
  86. }
  87. #endif
  88. return flag;
  89. }
  90. static int get_net(network_data_t *para, int ipv)
  91. {
  92. return 0;
  93. }
  94. int sys_get_net(network_data_t *para, int ip_version)
  95. {
  96. int r;
  97. r = get_net(para, ip_version);
  98. return r;
  99. }
  100. int sys_ip_check(char *ip)
  101. {
  102. return ip_check(ip);
  103. }
  104. static void ip_save(network_data_t *data)
  105. {
  106. paras_data_t* para = paras_get();
  107. para->netwk = *data;
  108. paras_save();
  109. return;
  110. }
  111. extern struct netif g_mynetif;
  112. void net_get_ip(network_data_t *data)
  113. {
  114. paras_data_t* para = paras_get();
  115. if(netif_is_up(&g_mynetif))
  116. {
  117. char * str = ip4addr_ntoa(netif_ip4_addr(&g_mynetif));
  118. memcpy(data->ipaddr,str,strlen(str));
  119. str = ip4addr_ntoa(netif_ip4_netmask(&g_mynetif));
  120. memcpy(data->mask,str,strlen(str));
  121. str = ip4addr_ntoa(netif_ip4_gw(&g_mynetif));
  122. memcpy(data->gateway,str,strlen(str));
  123. data->mode = para->netwk.mode;
  124. //get dns
  125. const ip_addr_t *dns1 = dns_getserver(0);
  126. str = ip4addr_ntoa(dns1);
  127. memcpy(data->dns1,str,strlen(str));
  128. const ip_addr_t *dns2 = dns_getserver(1);
  129. str = ip4addr_ntoa(dns2);
  130. memcpy(data->dns2,str,strlen(str));
  131. }else
  132. {
  133. memcpy(data->dns1,"8.8.8.8",strlen("8.8.8.8"));
  134. memcpy(data->dns2,"114.114.114.114",strlen("114.114.114.114"));
  135. memcpy(data->ipaddr,"0.0.0.0",strlen("0.0.0.0"));
  136. memcpy(data->gateway,"0.0.0.0",strlen("0.0.0.0"));
  137. memcpy(data->mask,"0.0.0.0",strlen("0.0.0.0"));
  138. data->mode = para->netwk.mode;
  139. }
  140. }
  141. static void ip_set_static()
  142. {
  143. paras_data_t* para = paras_get();
  144. ip_addr_t primary_dns, backup_dns;
  145. ipaddr_aton(para->netwk.dns1, &primary_dns); // 主 DNS
  146. ipaddr_aton(para->netwk.dns2, &backup_dns); // 备 DNS
  147. dns_setserver(0, &primary_dns); // 索引 0 为主
  148. dns_setserver(1, &backup_dns); // 索引 1 为备
  149. vTaskDelay(100);
  150. u32_t ip = ipaddr_addr(para->netwk.ipaddr);
  151. u32_t gw = ipaddr_addr(para->netwk.gateway);
  152. u32_t mask = ipaddr_addr(para->netwk.mask);
  153. netif_set_down(&g_mynetif);
  154. netif_set_addr(&g_mynetif,(ip4_addr_t*)&ip,(ip4_addr_t*)&mask,(ip4_addr_t*)&gw);
  155. netif_set_up(&g_mynetif);
  156. netif_set_link_up(&g_mynetif);
  157. }
  158. int net_ipaddr_set(network_data_t *data)
  159. {
  160. paras_data_t* para = paras_get();
  161. if(para->netwk.mode == 0)
  162. {
  163. if(data->mode == 1)
  164. {
  165. dhcp_stop(&g_mynetif);
  166. para->netwk.mode = data->mode;
  167. ip_save(data);
  168. vTaskDelay(1000);
  169. ip_set_static();
  170. LOGD("mode dhcp 2 static\n");
  171. }else
  172. {
  173. dhcp_stop(&g_mynetif);
  174. vTaskDelay(1000);
  175. dhcp_start(&g_mynetif);
  176. LOGD("mode static 2 dhcp\n");
  177. }
  178. }else if(para->netwk.mode == 1)
  179. {
  180. if(data->mode == 0)
  181. {
  182. dhcp_stop(&g_mynetif);
  183. ip_save(data);
  184. LOGD("mode static 2 dhcp\n");
  185. }else if(data->mode == 1)
  186. {
  187. ip_save(data);
  188. ip_set_static();
  189. LOGD("mode static 2 static\n");
  190. }
  191. }else
  192. {
  193. LOGD("error mode\n");
  194. }
  195. return 0;
  196. }