3 # Create a new tunnel device
5 require './cipe-vpn-lib.pl';
7 &error_setup($text{'save_err'});
8 $dev = &get_config($in{'dev'}) if (!$in{'new'});
11 # Just delete this tunnel
12 # XXX check if in use?
16 # Validate and store inputs
17 $dev->{'desc'} = $in{'desc'};
18 &check_ipaddress($in{'ipaddr'}) || &error($text{'save_eipaddr'});
19 $dev->{'ipaddr'} = $in{'ipaddr'};
20 &check_ipaddress($in{'ptpaddr'}) || &error($text{'save_eptpaddr'});
21 $dev->{'ptpaddr'} = $in{'ptpaddr'};
22 &parse_address("me", 1);
23 &parse_address("peer", 0);
24 $in{'key'} =~ /^[a-z0-9]{32,}$/i || &error($text{'save_ekey'});
25 $dev->{'key'} = $in{'key'};
26 $in{'def_def'} || &check_ipaddress($in{'def'}) ||
27 &error($text{'save_edef'});
28 $dev->{'def'} = $in{'def_def'} ? undef : $in{'def'};
29 for($i=0; defined($t = $in{"type_$i"}); $i++) {
32 &check_ipaddress($in{"net_$i"}) ||
33 &error(&text('save_enet', $i+1));
34 &check_ipaddress($in{"mask_$i"}) ||
35 &error(&text('save_emask', $i+1));
36 $in{"gw_def_$i"} || &check_ipaddress($in{"gw_$i"}) ||
37 &error(&text('save_egw', $i+1));
38 push(@route, [ 1, $in{"net_$i"}, $in{"mask_$i"},
39 $in{"gw_def_$i"} ? 'GW' : $in{"gw_$i"} ]);
42 &check_ipaddress($in{"net_$i"}) ||
43 &error(&text('save_ehost', $i+1));
44 $in{"mask_$i"} && &error(&text('save_emask2', $i+1));
45 $in{"gw_def_$i"} || &check_ipaddress($in{"gw_$i"}) ||
46 &error(&text('save_egw2', $i+1));
47 push(@route, [ 2, $in{"net_$i"}, "255.255.255.255",
48 $in{"gw_def_$i"} ? 'GW' : $in{"gw_$i"} ]);
51 $dev->{'route'} = \@route;
54 $dev->{'device'} = $in{'dev'};
56 $dev->{'dynip'} = 'yes';
57 $dev->{'maxerr'} = -1;
63 # parse_address(name, optional)
67 if ($in{"$_[0]_ip_def"}) {
71 local $a = $in{"$_[0]_ip"};
73 &error(&text('save_eaddr', $a));
76 if (!$in{"$_[0]_port_def"}) {
77 local $p = $in{"$_[0]_port"};
78 $p =~ /^\d+$/ || &error(&text('save_eport', $p));
81 $dev->{$_[0]} = join(":", @rv);