- added pptp support (bug #18407)
[opensuse:smpppd.git] / smpppd / dsl-config.cc
1
2
3 /*
4  *  Author: Arvin Schnell <arvin@suse.de>
5  */
6
7
8 #include "dsl-config.h"
9 #include "utils.h"
10 #include "parse.h"
11
12
13 DSLConfig::DSLConfig ()
14     : ConnectionConfig (),
15       device (""),
16       vpivci (""),
17       modem_ip (""),
18       mtu (1500),
19       mru (1500),
20       ppp_mode (PPPOE),
21       kill_dhcp_client (true)
22 {
23     dprintf ("%s\n", __PRETTY_FUNCTION__);
24
25     baud_rate = 57600;
26 }
27
28
29 DSLConfig::~DSLConfig()
30 {
31     dprintf ("%s\n", __PRETTY_FUNCTION__);
32 }
33
34
35 void
36 DSLConfig::eval_config (const string& key, const string& value, Where where)
37 {
38     if (key == "DEVICE") {
39         device = value;
40         return;
41     }
42
43     if (key == "VPIVCI") {
44         vpivci = value;
45         return;
46     }
47
48     if (key == "MODEM_IP") {
49         modem_ip = value;
50         return;
51     }
52
53     if (key == "SPEED") {
54         baud_rate = atoi (value.c_str ());
55         return;
56     }
57
58     if (key == "PPPMODE") {
59         if (value == "ppp")
60             ppp_mode = PPP;
61         if (value == "pppoe")
62             ppp_mode = PPPOE;
63         if (value == "pppoe-rp")
64             ppp_mode = PPPOE_RP;
65         if (value == "pppoatm")
66             ppp_mode = PPPOATM;
67         if (value == "pptp")
68             ppp_mode = PPTP;
69         if (value == "capi-adsl")
70             ppp_mode = CAPI_ADSL;
71         return;
72     }
73
74     if (key == "PPPD_OPTIONS") {
75         pppd_options = value;
76         return;
77     }
78
79     if (key == "MTU") {
80         mtu = atoi (value.c_str ());
81         return;
82     }
83
84     if (key == "MRU") {
85         mru = atoi (value.c_str ());
86         return;
87     }
88
89     if (key == "KILL_DHCP_CLIENT") {
90         kill_dhcp_client = value == "yes";
91         return;
92     }
93
94     ConnectionConfig::eval_config (key, value, where);
95 }
96
97
98 bool
99 DSLConfig::check_config (string* error_message)
100 {
101     if (ppp_mode == PPPOE || ppp_mode == PPPOE_RP || ppp_mode == CAPI_ADSL) {
102         if (mtu > 1492) mtu = 1492;
103         if (mru > 1492) mru = 1492;
104     }
105
106     if ((ppp_mode == PPP || ppp_mode == PPPOE || ppp_mode == PPPOE_RP)
107         && device.empty ()) {
108         *error_message = "Configuration does not specify a device.";
109         return false;
110     }
111
112     if (ppp_mode == PPPOATM && vpivci.empty ()) {
113         *error_message = "Configuration does not specify a vpivci.";
114         return false;
115     }
116
117     if (ppp_mode == PPTP && modem_ip.empty ()) {
118         *error_message = "Configuration does not specify a modem-ip.";
119         return false;
120     }
121
122     return ConnectionConfig::check_config (error_message);
123 }
124
125
126 void
127 DSLConfig::list_config (std::list <string>* config) const
128 {
129     config->push_back ("connection-type dsl");
130
131     ConnectionConfig::list_config (config);
132
133     switch (ppp_mode)
134     {
135         case PPP:
136             config->push_back ("ppp-mode ppp");
137             config->push_back ("device " + qap (device));
138             config->push_back ("baud-rate " + tostring (baud_rate));
139             break;
140
141         case PPPOE:
142             config->push_back ("ppp-mode pppoe");
143             config->push_back ("device " + device);
144             break;
145
146         case PPPOE_RP:
147             config->push_back ("ppp-mode pppoe-rp");
148             config->push_back ("device " + device);
149             break;
150
151         case PPPOATM:
152             config->push_back ("ppp-mode pppoatm");
153             config->push_back ("vpivci " + vpivci);
154             break;
155
156         case PPTP:
157             config->push_back ("ppp-mode pptp");
158             config->push_back ("modem-ip " + modem_ip);
159             break;
160
161         case CAPI_ADSL:
162             config->push_back ("ppp-mode capi-adsl");
163             break;
164     }
165
166     config->push_back ("pppd-options " + qap (pppd_options));
167
168     config->push_back ("mtu " + tostring (mtu));
169     config->push_back ("mru " + tostring (mru));
170
171     config->push_back ("kill-dhcp-client " + tostring (kill_dhcp_client));
172 }