feature: adding support to add tun interfaces dynamically to olsrd

This commit is contained in:
Darryl Quinn 2015-04-29 23:02:29 -07:00
parent 8aa7b84712
commit cc1f683121
3 changed files with 63 additions and 42 deletions

View File

@ -94,31 +94,23 @@ sub is_tunnel_active()
} }
########################## ##########################
# Add OLSRD interfaces - called when adding a new client connection # Add OLSRD interfaces
########################## ##########################
sub add_olsrd_interface() { sub add_olsrd_interfaces() {
my ($tunnum) = @_; my ($tunstart,$tuncount) = @_;
# uci add_list olsrd.interface=vpn${tunnumber}
# uci commit vtundsrv
#config Interface &uci_add_named_section("olsrd","tunnelserver","Interface");
# list interface 'vpn50 vpn51 vpn52 vpn53 vpn54 vpn55 vpn56 vpn57 vpn58 vpn59'
# option Ip4Broadcast 255.255.255.255
} &uci_set_named_option("olsrd","tunnelserver","Ip4Broadcast","255.255.255.255");
# delete all interfaces first
&uci_delete_named_option("olsrd","tunnelserver","interfaces");
########################## for (my $i=$tunstart, $i<$tuncount, $i++) {
# Delete OLSRD interfaces - called when deleting a new client connection &uci_add_list_named_option("olsrd","tunnelserver","interfaces","tun${i}");
########################## }
sub del_olsrd_interface() {
my ($tunnum) = @_;
# uci delete_list olsrd.interface.vpn${tunnumber}
# uci commit vtundsrv
#config Interface &uci_commit("olsrd");
# list interface 'vpn50 vpn51 vpn52 vpn53 vpn54 vpn55 vpn56 vpn57 vpn58 vpn59'
# option Ip4Broadcast 255.255.255.255
} }
########################## ##########################
@ -128,21 +120,11 @@ sub add_network_interfaces() {
for (my $tunnum=50; $tunnum<=69; $tunnum++) for (my $tunnum=50; $tunnum<=69; $tunnum++)
{ {
system "uci set network.tun${tunnum}=interface"; &uci_add_named_section("network","tun${tunnum}","interface");
system "uci set network.tun${tunnum}.ifname='tun${tunnum}'"; &uci_set_named_option("network","tun${tunnum}","ifname","tun${tunnum}");
system "uci set network.tun${tunnum}.proto='none'"; &uci_set_named_option("network","tun${tunnum}","proto","none");
} }
system "uci commit network"; &uci_commit("network");
}
##########################
# Delete OLSRD interfaces - called when deleting a new client connection
##########################
sub del_olsrd_interface() {
my ($tunnum) = @_;
# uci delete_list olsrd.interface.vpn${tunnumber}
# uci commit vtundsrv
#
} }
################################# #################################
@ -156,7 +138,7 @@ sub check_freespace()
} }
########################## ##########################
# Config firewall to allow port 5525 on WAN interface # Config firewall to allow port 5525 on WAN interface - USE UCIFUNC LIB CALLS***********
########################## ##########################
sub open_5525_on_wan() { sub open_5525_on_wan() {
system "uci add firewall rule >/dev/null 2>&1"; system "uci add firewall rule >/dev/null 2>&1";

View File

@ -116,6 +116,41 @@ sub uci_delete_option()
chomp($res); chomp($res);
return ($rc,$res); return ($rc,$res);
} }
sub uci_add_list_named_option()
{
my ($config,$sname,$option,$val)=@_;
my $cmd=sprintf('uci add_list %s.%s.%s=\'%s\'',$config,$sname,$option,$val);
my $rc=$?;
return ($rc);
}
sub uci_delete_named_option()
{
my ($config,$sname,$option)=@_;
my $cmd=sprintf('uci delete %s.%s.%s',$config,$sname,$option);
my $rc=$?;
return ($rc);
}
sub uci_add_named_section()
{
my ($config,$sname,$stype)=@_;
my $cmd=sprintf('uci set %s.%s=%s',$config,$sname,$stype);
#uci set olsrd.tunnelserver=Interface
my $rc=$?;
return ($rc);
}
sub uci_set_named_option()
{
my ($config,$sname,$option,$val)=@_;
my $cmd=sprintf('uci set %s.%s.%s=%s',$config,$sname,$option,$val);
#uci set olsrd.tunnelserver.Ip4Broadcast=255.255.255.255
my $rc=$?;
return ($rc);
}
sub uci_set_indexed_option() sub uci_set_indexed_option()
{ {
my ($config,$stype,$index,$option,$val)=@_; my ($config,$stype,$index,$option,$val)=@_;

View File

@ -197,6 +197,9 @@ if($parms{button_save} and not (@cli_err or @serv_err))
} }
unless($debug == 3) unless($debug == 3)
{ {
# Regenerate olsrd files and restart olsrd
push(@errors,"Problem calling olsrd-config") if system "/usr/local/bin/olsrd-config > /dev/null 2>&1";
push(@errors,"Problem restarting olsrd") if system "/etc/init.d/olsrd restart > /dev/null 2>&1";
push(@errors,"Problem restaring vtundsrv") if system "/etc/init.d/vtundsrv restart > /dev/null 2>&1"; push(@errors,"Problem restaring vtundsrv") if system "/etc/init.d/vtundsrv restart > /dev/null 2>&1";
} }
} }
@ -415,6 +418,8 @@ sub get_client_info()
################################# #################################
sub save_clients() sub save_clients()
{ {
my $enabled_count=0;
for ($i=0; $i < $parms{"client_num"}; $i++) { for ($i=0; $i < $parms{"client_num"}; $i++) {
my $net = $parms{"client${i}_netip"}; my $net = $parms{"client${i}_netip"};
@ -446,12 +451,11 @@ sub save_clients()
$rc=&uci_set_indexed_option("vtun","client",$i,"node",$vtun_node_name); $rc=&uci_set_indexed_option("vtun","client",$i,"node",$vtun_node_name);
push(@cli_err,"Problem saving UCI vtun client name (#$i)") if $rc; push(@cli_err,"Problem saving UCI vtun client name (#$i)") if $rc;
#foreach $var (qw(enabled name passwd)) $enabled_count++ if $parms{"client${i}_enabled"};
#{
# $rc=&uci_set_indexed_option("vtun","client",$i,$var,$parms{"client${i}_$var"});
# push(@cli_err,"Problem saving UCI vtun client (#$i)") if $rc;
#}
} }
# add enabled interfaces to OLSRD
&add_olsrd_interfaces(50,$enabled_count) if($enabled_count);
} }
################################# #################################