Add PPTP runtime and GUI
[tomato.git] / release / src / router / rc / pptp_client.c
blob5dc0e968676785c9b7163c985cc9ed9c49d567ce
1 /*
2 PPTP CLIENT start/stop and configuration for Tomato
3 by Jean-Yves Avenard (c) 2008-2011
4 */
6 #include "rc.h"
8 #define BUF_SIZE 128
9 #define IF_SIZE 8
12 void start_pptp_client(void)
14 FILE *fd;
15 int ok = 0;
16 int i;
17 char *p;
18 char buffer[BUF_SIZE];
19 char *argv[5];
20 int argc = 0;
22 sprintf(buffer, "pptpclient");
23 if ( pidof(buffer) >= 0 )
25 // PPTP already running
26 return;
28 unlink("/etc/vpn/ip-down");
29 unlink("/etc/vpn/ip-up");
30 unlink("/etc/vpn/ip-vpn");
31 unlink("/etc/vpn/options.vpn");
32 unlink("/etc/vpn");
33 mkdir("/etc/vpn",0700);
34 ok |= symlink("/rom/etc/vpn/ip-down", "/etc/vpn/ip-down");
35 ok |= symlink("/rom/etc/vpn/ip-up", "/etc/vpn/ip-up");
36 // Make sure symbolic link exists
37 sprintf(buffer, "/etc/vpn/pptpclient");
38 unlink(buffer);
39 ok |= symlink("/usr/sbin/pppd", buffer);
41 if (ok)
43 stop_pptp_client();
44 return;
47 if ( (fd = fopen("/etc/vpn/options.vpn", "w")) != NULL )
49 ok = 1;
50 fprintf(fd,
51 "lock\n"
52 "noauth\n"
53 "refuse-eap\n"
54 "lcp-echo-failure 3\n"
55 "lcp-echo-interval 2\n"
56 "maxfail 0\n"
57 "persist\n"
58 "plugin pptp.so\n"
59 "pptp_server %s\n", nvram_safe_get("pptp_client_srvip"));
60 // Accept default route
61 if (nvram_get_int("pptp_client_dfltroute"))
62 fprintf(fd,"defaultroute\n");
63 i = nvram_get_int("pptp_client_peerdns"); //-1 or 0: enable, 1 disable
64 if (i != 1)
65 fprintf(fd,"usepeerdns\n");
66 fprintf(fd,"idle 0\n"
67 "ip-up-script /etc/vpn/ip-up\n"
68 "ip-down-script /etc/vpn/ip-down\n"
69 "ipparam kelokepptpd\n");
71 if ((p = nvram_get("pptp_client_mtu")) == NULL)
72 p = "1450";
73 if (!nvram_get_int("pptp_client_mtuenable"))
74 p = "1450";
75 fprintf(fd,"mtu %s\n", p);
77 if (!nvram_get_int("pptp_client_mruenable"))
79 if ((p = nvram_get("pptp_client_mru")) == NULL)
80 p = "1450";
81 fprintf(fd,"mru %s\n", p);
84 if ((p = nvram_get("pptp_client_username")) == NULL)
85 ok = 0;
86 else
87 fprintf(fd,"name %s\n", p);
89 if ((p = nvram_get("pptp_client_passwd")) == NULL)
90 ok = 0;
91 else
92 fprintf(fd,"password %s\n", p);
93 switch (get_wan_proto())
95 case WP_PPPOE:
96 case WP_PPTP:
97 case WP_L2TP:
98 p = "1";
99 break;
100 default:
101 p = "0";
102 break;
104 strcpy(buffer,"");
105 switch (nvram_get_int("pptp_client_crypt"))
107 case 1:
108 fprintf(fd, "nomppe\n");
109 break;
110 case 2:
111 fprintf(fd, "nomppe-40\n");
112 fprintf(fd, "require-mppe-128\n");
113 break;
114 case 3:
115 fprintf(fd, "require-mppe\n");
116 break;
117 default:
118 break;
120 if (!nvram_get_int("pptp_client_stateless"))
121 fprintf(fd, "mppe-stateful\n");
122 else
123 fprintf(fd, "nomppe-stateful\n");
124 fprintf(fd, "unit %s\n", p);
125 fprintf(fd, "%s\n", nvram_safe_get("pptp_client_custom"));
126 fclose(fd);
128 if (ok)
130 sprintf(buffer, "/etc/vpn/pptpclient file /etc/vpn/options.vpn");
131 for (argv[argc=0] = strtok(&buffer[0], " "); argv[argc] != NULL; argv[++argc] = strtok(NULL, " "));
132 if ( _eval(argv, NULL, 0, NULL) )
134 stop_pptp_client();
135 return;
138 else
139 stop_pptp_client();
143 void stop_pptp_client(void)
145 int argc;
146 char *argv[7];
147 char buffer[BUF_SIZE];
149 killall("pptpclient", SIGTERM);
151 sprintf(buffer, "rm -rf /etc/vpn/pptpclient /etc/vpn/ip-down /etc/vpn/ip-up /etc/vpn/options.vpn");
152 for (argv[argc=0] = strtok(&buffer[0], " "); argv[argc] != NULL; argv[++argc] = strtok(NULL, " "));
153 _eval(argv, NULL, 0, NULL);
155 rmdir("/etc/vpn");