#!/usr/bin/perl

# Copyright (C) 2001-2002 NEC Corporation
# All Rights Reserved.

#
#kernelΥΰ׻roma.confؽ񤭹
#

#
#ARGV[0]ͤäurl_smartfilterˤARGV[0]ͤ
#

require "/opt/nec/wbmc/lib/wbmc.pl";
require "/opt/nec/wbmc/adm/proxy/common_roma.pl";
require "/opt/nec/wbmc/adm/proxy/common_filter.pl";
require "/opt/nec/wbmc/adm/system/array.pl";

#SmartFilterưǼ
$smartfilter_state = "";

#InterscanưǼ
$interscan_state = "";

#kernel_objnumͤǼ
$kernel_objnum = 0;

#kernel_metanumͤǼ
$kernel_metanum = 0;

#kernel_metasizeͤǼ
$kernel_metasize = 0;

$defalut_num = 0;

#N-codeեǼ
@file=();

#N-codeǼ
$N_code = "";


#
# CONFեɹ(roma.conf)
#
@file = ();
if (!&readFile($roma_conf, $roma_conf_lock, *file) ) {
        system("echo cannot read $roma_conf");
	exit(1);
}

#
# interscan.confɤ߹
#
@ifile = ();
if (!&readFile($InterscanFilePath, $InterscanFilePath_lock, *ifile) ) {
        system("echo cannot read $InterscanFilePath");
        exit(1);
}

#/etc/opt/nec/N-codeեɤ߹
if (!&readFile($N_code_path , $N_code_path_lock, *Nfile) ) {
	system("echo cannot read $N_code_path");
        exit(1);
}


#
#kernel_metasizeɤ߹
#

for($i=0;$i<@file;$i++){
	$tmp =&removeSpace($file[$i]);
	if($tmp =~ /^kernel_metasize\s+(.*)/){
		$kernel_metasize = $1;
	}
}

#
#N-codeμ
#

for(@Nfile){
        if(/^\s*(N[\d\-]+)/){
                $N_code = $1;
                last;
        }
}

#
# tuningФ
#
@tuning = ();
if (!&romaGetWbMCSection(*file, "tuning", *tuning)){
	system("echo cannot read tuning session");
	exit(1);
}

#
#urlФ
#
@url = ();
if (!&romaGetWbMCSection(*file, "url", *url)){
        system("echo cannot read url session");
        exit(1);
}

#
#SmartFilterưƤ뤫ǧ
#
for($i=0;$i<@url;$i++){
	$tmp = &removeSpace($url[$i]);
	if($tmp =~ /^url_smartfilterstate\s+(.*)/){
		if($1 eq "on"){
			$smartfilter_state = "on";
		}
		else{
			$smartfilter_state = "off";
		}
		last;
	}

}

#
#InterscanưƤ뤫ǧ
#
for($i=0;$i<@ifile;$i++){
	$tmp = &removeSpace($ifile[$i]);
	if($tmp =~ /^Interscan_state\s+(.*)/){
		if($1 eq "off"){
			$interscan_state = "off";
		}
		else{
			$interscan_state = "on";
		}
		last;
	}
}


#
#/proc/meminfo̤Ĵ٤
#

if(!open(FH,"/proc/meminfo")){
	system("echo cannot get meminfo");
	exit(1);
}
@out = <FH>;
close(FH);


for($i=0;$i < @out;$i++){
	$out[$i] =~ s/\s*$//;
	@tmp = split(/\s+/,$out[$i]);

	#Υȡ
	if($tmp[0] =~ /^MemTotal/i){
                $memtotal = $tmp[1];
		last;
	}
}

#
#kernel_metanum,defalut_valueͤ
#

if($N_code eq "N8100-803"){
	#N_code = N8100-803
        $kernel_metanum = 2500000;
	$init_value = 10000000;
}
elsif($N_code eq "N8100-806"){
        $kernel_metanum = 7900000;
	$init_value = 50000000;
}
else{
	#N8100-804
        $kernel_metanum = 1000000;
	$init_value = 10000000;
}



#
#kernel_objnumͤ׻
#

#smartfilterưԤäȤν
if($ARGV[0] ne ""){
	$smartfilter_state = $ARGV[0];
}

#$default_num

if($interscan_state eq "on"){
	$default_num = 295*1024*1024;
}
elsif($smartfilter_state eq "on"){
	$default_num = 287*1024*1024;
}
else{
	$default_num = 189*1024*1024;
}

#ϥɤʤ$default_numͤɲ
if($N_code eq "N8100-806"){
	$default_num += 102195904;
}

#̤KBByte
$meminfo = $memtotal * 1024;

#filter_num

$filter_num = $default_num - ( $meminfo/2);
if($filter_num < 0){
	$filter_num = 0;
}

#̤η׻
$mem = ( $meminfo/2 ) - ($kernel_metasize * $kernel_metanum) - $init_value - $filter_num;

if($mem < 0){
	$kernel_objnum = 10240;
	$kernel_metanum = 250000;
}
else{
	$kernel_objnum = $mem / 4096;

}

$kernel_objnum = int($kernel_objnum);


#
#tuningåѹ
#
for($i=0;$i<@file;$i++){
	$tmp = &removeSpace($file[$i]);
	if($tmp =~ /kernel_objnum/){
		$file[$i] = "kernel_objnum $kernel_objnum\n";
	}
	if($tmp =~ /kernel_metanum/){
		$file[$i] = "kernel_metanum $kernel_metanum\n";
	}
}


#
#ե񤭹
#

if (!&writeFile($roma_conf, $roma_conf_lock, @file)) {
        system("echo cannot write $roma_conf");
	exit(1);
}


