networking.c
上传用户:sxdewei
上传日期:2014-06-02
资源大小:67k
文件大小:15k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include <fcntl.h>
  5. #include <getopt.h>
  6. #include <errno.h>
  7. #include <sys/ioctl.h>
  8. #include <linux/config.h>
  9. #include <netinet/in.h>
  10. #include <arpa/inet.h>
  11. #include "cgivars.h"
  12. #include "htmllib.h"
  13. #include "config_phase.h"
  14. #include "sysconf.h"
  15. #define DEBUG        0
  16. #define ID_GAPFALG          26
  17. #define ID_IP                27
  18. #define ID_SUBMASK          28
  19. #define ID_GAWADD           29
  20. #define ID_GADNSFALG      30
  21. #define ID_DNSADD1          31
  22. #define ID_DNSADD2          32
  23. #define ID_WANMD             33
  24. #define ID_PPOEFLAG        34
  25. #define ID_PPOEUSR          35
  26. #define ID_PPOEUPW         36
  27. #define ID_PPOESER          37
  28. #define ID_UPNPFLAG        38
  29. static config_item ** items;
  30. static int config_list[] = {26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38};
  31. static char *config_name[] = {"GAPFALG", "IP", "SUBMASK", "GAWADD", "GADNSFALG", "DNSADD1", "DNSADD2", "WANMD", "PPOEFLAG",
  32.                                    "PPOEUSR","PPOEUPW","PPOESER","UPNPFLAG"};
  33. #define IP_LEN  16
  34. void netset(char **postvars, int form_method)
  35. {
  36. int config_num = sizeof(config_list)/sizeof(int);
  37. int i;
  38. //int r_fd, w_fd;
  39. int ObtainIP_method, temp_int;
  40. char *GAPFALG;
  41. char *IP;
  42. char *SUBMASK;
  43. char *GAWADD;
  44. char *GADNSFALG;
  45. char *DNSADD1;
  46. char *DNSADD2;
  47. char *WANMD;
  48. char *PPOEFLAG;
  49. char *PPOEUSR;
  50. char *PPOEUPW;
  51. char *PPOESER;
  52. char *UPNPFLAG;
  53. char java[] ="
  54. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">rn
  55. <HTML><HEAD>
  56. <META http-equiv=Pragma content=no-cache>
  57. <META http-equiv=Cache-Control content="No-cache,must revalidate">
  58. <META http-equiv=Content-Type content="text/html; charset=gb2312">
  59. <SCRIPT language=JavaScript src="js/javascript.js"></SCRIPT>
  60. <STYLE type=text/css>BODY {
  61. FONT-SIZE: 10pt; FONT-FAMILY: Arial
  62. }
  63. TD {
  64. FONT-SIZE: 10pt; FONT-FAMILY: Arial
  65. }
  66. FORM {
  67. FONT-SIZE: 10pt; FONT-FAMILY: Arial
  68. }
  69. OPTION {
  70. FONT-SIZE: 10pt; FONT-FAMILY: Arial
  71. }
  72. TEXTAREA {
  73. FONT-SIZE: 10pt; FONT-FAMILY: Arial
  74. }
  75. P {
  76. FONT-SIZE: 10pt; FONT-FAMILY: Arial
  77. }
  78. OL {
  79. FONT-SIZE: 10pt; FONT-FAMILY: Arial
  80. }
  81. INPUT {
  82. FONT-SIZE: 10pt; FONT-FAMILY: Arial
  83. }
  84. SELECT {
  85. FONT-SIZE: 10pt; FONT-FAMILY: Arial
  86. }
  87. .style1 {
  88. FONT-WEIGHT: bold; FONT-SIZE: 14pt
  89. }
  90. </STYLE>
  91. <META content="MSHTML 6.00.6000.16414" name=GENERATOR></HEAD>";
  92. //r_fd = open_read_fifo();
  93. items = init_config_item(items, config_num, config_list);
  94. printf("%sn", java);
  95. // If we got post, write it into flash
  96. if(form_method == POST)
  97. {
  98. GetConfValues(config_list, items, config_num);
  99. if(SaveConfig(postvars, items, config_list, config_name, config_num))
  100. {/*
  101. w_fd = open_write_fifo();
  102. notify_config(w_fd);
  103. close_write_fifo(w_fd);
  104. read_fifo(r_fd);
  105. */
  106. }
  107. }
  108. GetConfValues(config_list, items, config_num);
  109. printf("<BODY onload="dhcp_enable(document.networking.GAPFALG.value);dns_auto(document.networking.GADNSFALG.value);" leftMargin=30 topMargin=24 rightMargin=30>n");
  110. //printf("<BODY leftMargin=30 topMargin=24 rightMargin=30>n");
  111. printf("<P class=style1>网络设置</P>n");
  112. printf("<FORM name=networking action=/networking.cgi method=post target=msgFrame>n");  //
  113.        printf("<INPUT type=hidden value=write name=action> <INPUT type=hidden value=tcpip name=cfg_content>n");
  114. printf("<INPUT type=hidden value=chs name=lang>n");                                                                       // 
  115. printf("<TABLE width="100%"><TBODY><TR><TD>n");         //
  116. printf("<TABLE style="BORDER-COLLAPSE: collapse" borderColor=#dae3eb cellSpacing=0 cellPadding=0 width="100%" border=1>n"); //
  117. printf("<TBODY><TR bgColor=#cccccc><TD colSpan=2><B>局域网IP地址</B></TD></TR>n");                       //
  118. printf("<TR><TD noWrap width="29%">获取IP方式</TD><TD align=middle>n");
  119. printf("<DIV align=left><SELECT onchange=dhcp_enable(this.value) name=GAPFALG> n");
  120. //ID_GAPFALG
  121. if(GAPFALG = getdata(ID_GAPFALG, items, config_num))
  122. {
  123. ObtainIP_method = atoi(GAPFALG);
  124. if(ObtainIP_method == 2)
  125. {
  126. printf("<option value="1">手动</OPTION> n");
  127. printf("<option value="2" selected>DHCP自动设置</OPTION> n");
  128. }
  129. else
  130. {
  131. printf("<option value="1" selected>手动</OPTION> n");
  132. printf("<option value="2">DHCP自动设置</OPTION> n");
  133. }
  134. }
  135. printf("</SELECT></TD></TR>n");
  136. //ID_IP
  137. if(IP = getdata(ID_IP, items, config_num))
  138. {
  139. printf("<TR><TD width="29%">IP地址</TD><TD align=middle width="71%">n");
  140. printf("<DIV align=left><INPUT size=15 maxlength=15 value=%s name=IP></DIV></TD></TR>n", IP);
  141. }
  142. else
  143. {
  144. printf("<TR><TD width="29%">IP地址</TD><TD align=middle width="71%">n");
  145. printf("<DIV align=left><INPUT size=15 maxlength=15 name=IP></DIV></TD></TR>n");
  146. }
  147. //ID_SUBMASK
  148. if(SUBMASK = getdata(ID_SUBMASK, items, config_num))
  149. {
  150. printf("<TR><TD width="29%">子网掩码</TD><TD align=middle>n");
  151. printf("<DIV align=left><INPUT size=15 maxlength=15 value=%s name=SUBMASK></DIV></TD></TR>n", SUBMASK);
  152. }
  153. else
  154. {
  155. printf("<TR><TD width="29%">子网掩码</TD><TD align=middle>n");
  156. printf("<DIV align=left><INPUT size=15 maxlength=15 name=SUBMASK></DIV></TD></TR>n");
  157. }
  158. //ID_GAWADD
  159. if(GAWADD = getdata(ID_GAWADD, items, config_num))
  160. {
  161. printf("<TR><TD width="29%">网关地址</TD><TD align=middle>n");
  162. printf("<DIV align=left><INPUT size=15 maxlength=15 value=%s name=GAWADD></DIV></TD></TR>n", GAWADD);
  163. }
  164. else
  165. {
  166. printf("<TR><TD width="29%">网关地址</TD><TD align=middle>n");
  167. printf("<DIV align=left><INPUT size=15 maxlength=15 name=GAWADD></DIV></TD></TR>n");
  168. }
  169. printf("</TBODY></TABLE>n");
  170. //ID_WANMD
  171. printf("<TABLE style="BORDER-COLLAPSE: collapse" borderColor=#dae3eb cellSpacing=0 cellPadding=0 width="100%" border=1>n");
  172. printf("<TBODY><TR bgColor=#cccccc><TD colSpan=2><B>WAN口设置</B></TD></TR>n");
  173. printf("<tr><TD noWrap width="29%">WAN口连接方式</TD>n");
  174. printf("<TD align=middle><DIV align=left><SELECT name=WANMD>n");
  175. if(WANMD = getdata(ID_WANMD, items, config_num))
  176. {
  177. temp_int = atoi(WANMD);
  178. if(1 ==  temp_int)
  179. {
  180. printf("<OPTION value="1" selected>PPPoE</OPTION>n");
  181. printf("<OPTION value="2">Gateway</OPTION>n");
  182. }
  183. else
  184. {
  185. printf("<OPTION value="1">PPPoE</OPTION>n");
  186. printf("<OPTION value="2" selected>Gateway</OPTION>n");
  187. }
  188. }
  189. printf("</SELECT> </DIV></TD></tr></TBODY></TABLE>n");
  190. //GADNSFALG
  191. printf("<TABLE style="BORDER-COLLAPSE: collapse" borderColor=#dae3eb cellSpacing=0 cellPadding=0 width="100%" border=1>n");
  192. printf("<TBODY><TR bgColor=#cccccc><TD colSpan=2><B>DNS服务器IP地址</B></TD></TR>n");
  193. printf("<tr><TD noWrap width="29%">DNS获取方式</TD>n");
  194. printf("<TD align=middle  width="71%"><DIV align=left><SELECT name=GADNSFALG onchange=dns_auto(this.value)>n");
  195. if(GADNSFALG = getdata(ID_GADNSFALG, items, config_num))
  196. {
  197. temp_int = atoi(GADNSFALG);
  198. if(1 ==  temp_int)
  199. {
  200. printf("<OPTION value="1" selected>手动设置</OPTION>n");
  201. printf("<OPTION value="3">PPPoE</OPTION>n");
  202. }
  203. /*
  204. else if(2 == temp_int)
  205. {
  206. printf("<OPTION value="1">手动设置</OPTION>n");
  207. printf("<OPTION value="2" selected>DHCP</OPTION>n");
  208. printf("<OPTION value="3">PPPoE</OPTION>n");
  209. }*/
  210. else
  211. {
  212. printf("<OPTION value="1">手动设置</OPTION>n");
  213. printf("<OPTION value="3" selected>PPPoE</OPTION>n");
  214. }
  215. }
  216. printf("</SELECT> </DIV></TD></tr>n");
  217. //DNSADD1
  218. printf("<tr><TD noWrap width="29%">主要DNS服务器IP地址</TD><TD align=middle  width="71%">n");
  219. if(DNSADD1 = getdata(ID_DNSADD1, items, config_num))
  220. printf("<DIV align=left><INPUT size=15 maxlength=15 value=%s name=DNSADD1></DIV></TD></TR>n", DNSADD1);
  221. else
  222. printf("<DIV align=left><INPUT size=15 maxlength=15 name=DNSADD1></DIV></TD></TR>n");
  223. //DNSADD2
  224. printf("<TR><TD noWrap>次要DNS服务器IP地址</TD><TD align=middle>n");
  225. if(DNSADD2 = getdata(ID_DNSADD2, items, config_num))
  226. printf("<DIV align=left><INPUT size=15 maxlength=15 name=DNSADD2 value=%s></DIV></TD></TR>n", DNSADD2);
  227. else
  228. printf("<DIV align=left><INPUT size=15 maxlength=15 name=DNSADD2></DIV></TD></TR>n");
  229. printf("</TBODY></TABLE>n");
  230. //PPOEFLAG
  231. printf("<TABLE style="BORDER-COLLAPSE: collapse" borderColor=#dae3eb cellSpacing=0 cellPadding=0 width="100%" border=1>n");
  232. printf("<TBODY><TR bgColor=#cccccc><TD colSpan=2 height=16><B>PPPoE</B></TD></TR>n");
  233. printf("<tr><TD noWrap width="29%">网络连线模式</TD>n");
  234. printf("<TD align=middle  width="71%"><DIV align=left><SELECT name=PPOEFLAG>n");
  235. if(PPOEFLAG = getdata(ID_PPOEFLAG, items, config_num))
  236. {
  237. temp_int = atoi(PPOEFLAG);
  238. if(1 ==  temp_int)
  239. {
  240. printf("<OPTION value="1" selected>启用PPPoE</OPTION>n");
  241. printf("<OPTION value="0">停用PPPoE</OPTION>n");
  242. }
  243. else
  244. {
  245. printf("<OPTION value="1">启用PPPoE</OPTION>n");
  246. printf("<OPTION value="0" selected>停用PPPoE</OPTION>n");
  247. }
  248. }
  249. printf("</SELECT> </DIV></TD></tr>n");
  250. //PPOEUSR
  251. printf("<tr><TD noWrap width="29%">登录名称</TD><TD align=middle>n");
  252. if(PPOEUSR = getdata(ID_PPOEUSR, items, config_num))
  253. printf("<DIV align=left><INPUT size=32 maxlength=32 name=PPOEUSR value=%s ></DIV></TD></TR>n", PPOEUSR);
  254. else
  255. printf("<DIV align=left><INPUT size=32 maxlength=32 name=PPOEUSR></DIV></TD></TR>n");
  256. //PPOEUPW
  257. printf("<tr><TD noWrap width="29%">登录口令</TD><TD align=middle>n");
  258. if(PPOEUPW = getdata(ID_PPOEUPW, items, config_num))
  259. printf("<DIV align=left><INPUT type=password size=32 maxlength=32 name=PPOEUPW value=%s ></DIV></TD></TR>n", PPOEUPW);
  260. else
  261. printf("<DIV align=left><INPUT type=password size=32 maxlength=32 name=PPOEUPW></DIV></TD></TR>n");
  262. //PPOESER
  263. printf("<tr><TD noWrap width="29%">服务名称</TD><TD align=middle>n");
  264. if(PPOESER = getdata(ID_PPOESER, items, config_num))
  265. printf("<DIV align=left><INPUT size=32 maxlength=32 value=%s name=PPOESER></DIV></TD></TR>n", PPOESER);
  266. else
  267. printf("<DIV align=left><INPUT size=32 maxlength=32 name=PPOESER></DIV></TD></TR>n");
  268. printf("</TBODY></TABLE>n");
  269. //UPNPFLAG
  270. printf("<TABLE style="BORDER-COLLAPSE: collapse" borderColor=#dae3eb cellSpacing=0 cellPadding=0 width="100%" border=1>n");
  271. printf("<TBODY><TR bgColor=#cccccc><TD colSpan=2><B>UPNP</B></TD></TR>n");
  272. printf("<tr><TD noWrap width="29%">UPNP启用</FONT></TD><TD align=middle width="71%">n");
  273. printf("<DIV align=left><SELECT size=1 name=UPNPFLAG>n");
  274. if(UPNPFLAG = getdata(ID_UPNPFLAG, items, config_num))
  275. {
  276. temp_int = atoi(UPNPFLAG);
  277. if(1 ==  temp_int)
  278. {
  279. printf("<OPTION value="1" selected>是</OPTION>n");
  280. printf("<OPTION value="0">否</OPTION>n");
  281. }
  282. else
  283. {
  284. printf("<OPTION value="1">是</OPTION>n");
  285. printf("<OPTION value="0" selected>否</OPTION>n");
  286. }
  287. }
  288. printf("</SELECT> </DIV></TD></tr>n");
  289. printf("</TBODY></TABLE>n");
  290. printf("<BR><FONT color=#ff0000>应用更改后,系统将自动重启。</FONT> n");
  291. printf("<P align=left><INPUT  type=submit onclick="return tsettcpip();" value=应用>n");
  292. printf("<INPUT type=reset value=重置>n");
  293. printf("<INPUT type=hidden value=chs name=lang> </P></TD></TR></TBODY></TABLE></FORM></BODY></HTML>n");
  294. // javascript layout
  295. {
  296. char jsp[]="
  297. <script language=JavaScript> 
  298. <!--  
  299. function dhcp_enable(dhcp)
  300. {
  301. if (dhcp=="1") {
  302. document.networking.IP.disabled = 0;
  303. document.networking.SUBMASK.disabled = 0;
  304. document.networking.GAWADD.disabled = 0;
  305. }
  306. else {
  307. document.networking.IP.disabled = 1;
  308. document.networking.SUBMASK.disabled = 1;
  309. document.networking.GAWADD.disabled = 1;
  310. }
  311. }
  312. function dns_auto(auto)
  313. {
  314. if(auto == "1")
  315. {
  316. document.networking.DNSADD1.disabled = 0;
  317. document.networking.DNSADD2.disabled = 0;
  318. }
  319. else
  320. {
  321. document.networking.DNSADD1.disabled = 1;
  322. document.networking.DNSADD2.disabled = 1;
  323. }
  324. }
  325. function   checinetaddrvalid(inetaddr)
  326. {
  327.   var   reg=/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/  
  328.   if(arr=inetaddr.match(reg)){  
  329. for(i=1;i<arr.length;i++)if(parseInt(arr[i])>255){return false;}  
  330.  
  331.   }  
  332.   else  {
  333. return false;
  334.   }  
  335.   return true;
  336.  }   
  337. function settcpip()
  338. {
  339. var element ;
  340. element = document.getElementById('IP');
  341. if(element.value == "" && document.networking.IP.disabled == 0)
  342. {
  343. alert("IP地址不能为空!");
  344. element.focus();
  345. return false;
  346. }
  347. if(checinetaddrvalid(element.value) == false && document.networking.IP.disabled == 0)
  348. {
  349. alert("IP地址格式错误!");
  350. element.focus();
  351. return false;
  352. }
  353. element = document.getElementById('SUBMASK');
  354. if(element.value == "" && document.networking.SUBMASK.disabled == 0)
  355. {
  356. alert("子网掩码不能为空!");
  357. element.focus();
  358. return false;
  359. }
  360. if(checinetaddrvalid(element.value) == false && document.networking.SUBMASK.disabled == 0)
  361. {
  362. alert("子网掩码地址格式错误!");
  363. element.focus();
  364. return false;
  365. }
  366. element = document.getElementById('GAWADD');
  367. if(element.value == "" && document.networking.GAWADD.disabled == 0)
  368. {
  369. alert("网关地址不能为空!");
  370. element.focus();
  371. return false;
  372. }
  373. if(checinetaddrvalid(element.value) == false && document.networking.GAWADD.disabled == 0)
  374. {
  375. alert("网关地址格式错误!");
  376. element.focus();
  377. return false;
  378. }
  379. element = document.getElementById('DNSADD1');
  380. if(element.value == "" && document.networking.DNSADD1.disabled == 0)
  381. {
  382. alert("主DNS服务器IP地址不能为空!");
  383. element.focus();
  384. return false;
  385. }
  386. if(checinetaddrvalid(element.value) == false && document.networking.DNSADD1.disabled == 0)
  387. {
  388. alert("主DNS服务器IP地址格式错误!");
  389. element.focus();
  390. return false;
  391. }
  392. element = document.getElementById('DNSADD2');
  393. if(element.value == "" && document.networking.DNSADD2.disabled == 0)
  394. {
  395. alert("次要DNS服务器IP地址不能为空!");
  396. element.focus();
  397. return false;
  398. }
  399. if(checinetaddrvalid(element.value) == false && document.networking.DNSADD2.disabled == 0)
  400. {
  401. alert("次要DNS服务器IP地址格式错误!");
  402. element.focus();
  403. return false;
  404. }
  405. return true;
  406. }
  407. function tsettcpip()
  408. {
  409. return settcpip();
  410. }
  411. //--> 
  412. </script>";
  413. printf("%sn", jsp);
  414. }
  415. free_config_item(items, config_num);
  416. //close_read_fifo();
  417. }
  418. ////////////////////////////////////////////////////////////////////////////
  419. // Function: main
  420. ////////////////////////////////////////////////////////////////////////////
  421. int main(void)
  422. {
  423.     char **postvars = NULL;  // POST request data repository
  424.     char **getvars = NULL;   // GET request data repository
  425.     int form_method;         // POST = 1, GET = 0
  426.     // CGI part start here
  427.     adminCheck();
  428.     form_method = getRequestMethod();
  429.     if(form_method == POST)
  430.     {
  431.         getvars = getGETvars();
  432.         postvars = getPOSTvars();
  433.     }
  434.     else if(form_method == GET)
  435.     {
  436.         getvars = getGETvars();
  437.     }
  438.     // CGI start here, set COM port
  439.     netset(postvars, form_method);
  440.     //htmlFooter();
  441.     cleanUp(form_method, getvars, postvars);
  442.     fflush(stdout);
  443.     exit(0);
  444. }  // end of main