#!/usr/bin/perl5 require "/usr/OnRamp/lib/OnRamp.pm"; $conf = "/etc/mrouted.conf"; $options = "/etc/config/mrouted.options"; $dummy = "/etc/mrouted.conf.tmp"; $data = "/etc/mrouted.conf.data"; $myname = "mrouted.cgi"; $title = "Multicast Routing"; print "Content-type: text/html\n\n"; &title_block($title); &get_fields; &getInfo; $help = $ENV{"DOCUMENT_ROOT"} . $ENV{"SCRIPT_NAME"}; $help =~ s/cgi$/hlp/; exec $help if ($fld{'help'} eq "Help"); if ($fld{"doit"} eq "Ok") { if ($fld{'tun'} eq 'Yes' && $fld{'emr'} eq 'Yes') { &formValidation; } &edit; &getInfo; } if (-e "/usr/etc/mrouted") { &generic; } else { &header_block($title); print "Multicast routing software not installed. Install subsystem eoe.sw.ipgate from the 6.2 CD."; } sub error { &error_block($_[0]); %val = %fld; &generic; exit 0; } sub edit { `/etc/killall mrouted`; if ($fld{'emr'} eq 'Yes') { if ($val{'emr'} eq 'No') { $message = "Multicast routing enabled. "; } if ($fld{'tun'} eq 'Yes') { &writeTunnel; $message .= "Tunnel information updated."; } else { &turnOffTunnel; $message .= "Tunnel disabled."; } &restartDeamon("mrouted","/usr/etc/mrouted",$options); `/etc/chkconfig mrouted on`; } else { `/etc/chkconfig mrouted off`; if ($val{'emr'} eq 'Yes') { $message = "Multicast routing disabled."; } else { $message = "No change made."; } $val{'emr'} = "No"; } } sub turnOffTunnel { ($dummy,$local) = split(/ /,$fld{'int'}); open(IN,"< $conf"); open(OUT,"> $dummy"); while() { $line = $_; @items = split(/\s+/,$line); if ($items[0] eq "tunnel" && $items[1] eq $local) { $line = "# $line"; } print OUT $line; } close(IN); close(OUT); rename($dummy,$conf); } sub writeTunnel { ($skip,$local) = split(/ /,$fld{'int'}); open(IN,"< $conf"); open(OUT,"> $dummy"); $printed = 0; while() { @items = split(/\s+/); if ($items[0] ne "tunnel") { print OUT $_; } else { if ($items[1] eq $local) { if ($items[2] eq $fld{'rip'}) { print OUT $_; $printed = 1; } else { print OUT "# $_"; print OUT "tunnel $local $fld{'rip'}\n"; $printed = 1; } } } } if (!$printed) { print OUT "tunnel $local $fld{'rip'}\n"; } close(OUT); close(IN); rename($dummy,$conf); } sub restartDeamon { $command = "$_[1] "; open(IN,"< $_[2]"); while() { chop($_); $command .= " $_"; } close(IN); `$command`; } sub formValidation { &error("Remote IP address required.") if $fld{'rip'} eq ""; if (&check_ipaddr($fld{'rip'})) { &error("Invalid remote IP address"); &generic; exit 0; } } sub generic { &header_block($title); print "$message"; print "
"; print "
"; print ""; print ""; print "
Enable multicast routing:", &radio('emr',$val{'emr'},"Yes","No"), "
Setup IP tunnel (if needed):
"; print ''; print '', ''; print ''; print '
Enable tunnel:'; print &radio('tun',$val{'tun'},"Yes","No"); print '
Interface:'; print qq|"; print '
Remote IP address:'; print &text('rip',$val{'rip'},14); print '

'; print &buttons('doit','Ok'); print ''; } sub getInfo { undef @myInt; undef @myIP; `/usr/OnRamp/bin/htnetwork > $data`; open(IN,"< $data"); while() { @items = split(/:/); if ($items[3]) { push(@myInt,$items[1]); push(@myIP,$items[3]); } } close(IN); $val{'rip'} = ""; $met = 1; $val{'tun'} = "No"; `/etc/chkconfig mrouted`; $output = $? >> 8; if ($output) { $val{'emr'} = "No"; } else { $val{'emr'} = "Yes"; } open(IN,"< $conf"); while() { @items = split(/\s+/); if ($items[0] ne 'tunnel') { next; } for($i=0;$i<=$#myIP;$i++) { if ($myIP[$i] eq $items[1]) { $val{'rip'} = $items[2]; $locIP = $myIP[$i]; $val{'tun'} = "Yes"; } } } close(IN); }