Professional Documents
Culture Documents
/usr/bin/perl
#!/usr/bin/perl -w
# This script creates Ericsson xml scripts for purposes of moving UtranCells
# from one RNC to another.
# As an input it takes the xml files for the following objects and generates
# similiar files as an output
# UtranCell
# Hsdsch
# Eul
# CoverageRelations
# ServiceArea
# Update: 20091019
# Update: 20091112
# Created section to output Fach, Rach & Pch in UtranCell
# Update: 20091117
# now creates import files as part of execution
# update 110704
# delete any trailing whitespace from RNC
# correct EricssonSystemAttributes
# update 110706
# added section to create file to delete cells
# corrected filestamp in xml footer
# improved timstamp in files, no longer unix epoch
# timestamp
$year = 1900 + (localtime)[5];
$month = sprintf "%02d", 1 + (localtime)[4];
$days = sprintf "%02d",(localtime)[3];
$hours = sprintf "%02d",(localtime)[2];
$mins = sprintf "%02d",(localtime)[1];
$seconds = sprintf "%02d",(localtime)[0];
$timestamp = "$year"."$month"."$days"."_"."$hours"."$mins";
$fileTimeStamp="$year"."-"."$month"."-"."$days"."T$hours:$mins:$seconds"."Z";
}
close(SITEFILE);
#################################################################
# These are the 5 files input is parsed from
#################################################################
$UtranCellFile =
"/var/opt/ericsson/nms_umts_wran_bcg/files/export/UtranCell_".$timestamp.".xml";
$HsdschFile = "/var/opt/ericsson/nms_umts_wran_bcg/files/export/Hsdsch_".
$timestamp.".xml";
$EulFile = "/var/opt/ericsson/nms_umts_wran_bcg/files/export/Eul_".
$timestamp.".xml";
$CoverageRelationFile =
"/var/opt/ericsson/nms_umts_wran_bcg/files/export/CoverageRelation_".
$timestamp.".xml";
$ServiceAreaFile =
"/var/opt/ericsson/nms_umts_wran_bcg/files/export/ServiceArea_".$timestamp.".xml";
#################################################################
# These are the 5 files output is exported to
#################################################################
$UtranmigrationFile = "UtranCell_migration_".$timestamp.".xml";
$ServiceAreamigrationFile = "ServiceArea_migration_".$timestamp.".xml";
$HsdschmigrationFile = "Hsdsch_migration_".$timestamp.".xml";
$EulmigrationFile = "Eul_migration_".$timestamp.".xml";
$CoverageRelationmigrationFile = "CoverageRelation_migration_".$timestamp.".xml";
$deleteCells = "Delete_UtranCell_".$timestamp.".xml";
#################################################################
# These will generate the 5 exports
#################################################################
print "*************************************************\n";
print "1. Generating Utran export with UtranCells.\n";
print "*************************************************\n";
print "/opt/ericsson/nms_umts_wran_bcg/bin/start_rah_export.sh UtranCell
UtranCell_".$timestamp.".xml";
system("/opt/ericsson/nms_umts_wran_bcg/bin/start_rah_export.sh UtranCell
UtranCell_".$timestamp.".xml");
print "*************************************************\n";
print "2. Generating ServiceArea export.\n";
print "*************************************************\n";
print "/opt/ericsson/nms_umts_wran_bcg/bin/start_rah_export.sh ServiceArea
ServiceArea_".$timestamp.".xml";
system("/opt/ericsson/nms_umts_wran_bcg/bin/start_rah_export.sh ServiceArea
ServiceArea_".$timestamp.".xml");
print "*************************************************\n";
print "3. Generating Hsdsch export.\n";
print "*************************************************\n";
print "/opt/ericsson/nms_umts_wran_bcg/bin/start_rah_export.sh Hsdsch Hsdsch_".
$timestamp.".xml";
system("/opt/ericsson/nms_umts_wran_bcg/bin/start_rah_export.sh Hsdsch Hsdsch_".
$timestamp.".xml");
print "*************************************************\n";
print "4. Generating Eul export.\n";
print "*************************************************\n";
print "/opt/ericsson/nms_umts_wran_bcg/bin/start_rah_export.sh Eul Eul_".
$timestamp.".xml";
system("/opt/ericsson/nms_umts_wran_bcg/bin/start_rah_export.sh Eul Eul_".
$timestamp.".xml");
print "*************************************************\n";
print "5. Generating CoverageRelation export.\n";
print "*************************************************\n";
print "/opt/ericsson/nms_umts_wran_bcg/bin/start_rah_export.sh CoverageRelation
CoverageRelation_".$timestamp.".xml";
system("/opt/ericsson/nms_umts_wran_bcg/bin/start_rah_export.sh CoverageRelation
CoverageRelation_".$timestamp.".xml");
##################################################################################
# All required files now being built- put in a pause here to ensure they are ready
##################################################################################
print "Required export files are being built, takes 2 minutes....\n";
print "The following files will be generated at conclusion of $0 :\n";
print "$UtranmigrationFile\n";
print "$ServiceAreamigrationFile\n";
print "$HsdschmigrationFile\n";
print "$EulmigrationFile\n";
print "$CoverageRelationmigrationFile\n";
while (1) {
sleep 10;
last if (-e $UtranCellFile);
}
sleep(50);
print "..OK, Files built, now to start parsing\n";
################################################################################
# open the O2 UtranCell dump and retrieve various data required
# such as where all the UtranCells live, their Iub name, cellid etc.
################################################################################
print "Reading UtranCell file...\n";
open(COVRELFILE,"<$CoverageRelationFile") || die "unable to open
$CoverageRelationFile\n";
while (<COVRELFILE>) {
if (/xmlns:es=\"(EricssonSpecificAttributes.\d+.\d+).xsd\"/) {
$EricssonSpecificAttributes = $1; # retrieve EricssonSpecificAttributes
}
}
close(COVRELFILE);
# Close UtranCell.xml
################################################################################
#################################################################
# This section handles the UtranCell xml file parsing and creation
#################################################################
# OUTUTRANCELL file, filehandle for output
open(OUTUTRANCELL,">$UtranmigrationFile") || die "unable to open
$UtranmigrationFile\n";
#$newRnc name of the new RNC- maybe take this from the command line?
#now set other parameters related to the RNC name
while (<UTRANCELLFILE>) {
if (/<xn:SubNetwork id=\"(RNC..)\">/) { $oldrnc = $1;}
if (/<un:UtranCell id=\"(\w+)\">/) {
my $UtranCell=$1;
$UtranCell =~ /(....)\w+/;
my $site = $1;
$secondCarrier{$site}=0;
if ( $UtranCell =~ /.....2/) { $secondCarrier{$site}=1;}
s/<un:UtranCell id=\"($UtranCell)\">/<un:UtranCell
id=\"$1\" modifier=\"create\">/;
next unless $UtranCell=~ /....../; #this line skips
any cells less than 6 chars
print "Creating UtranCell import for
$UtranCell...\n";
print OUTUTRANCELL;
do {
$_=(<UTRANCELLFILE>);
#these lines of the utranCell file are those we
want to modify prior to loading
#probably self explanatory, new lac and sib1,
create field and load the cells locked
s/RNC0./$newRnc/g;
s/<un:lac>\d+<\/un:lac>/<un:lac>$newLac<\/un:lac>/;
s/id=\"$UtranCell\">/id=\"$UtranCell\"
modifier=\"create\">/;
s/<es:administrativeState>1<\/es:administrativeState>/<es:administrativeState>0<\/e
s:administrativeState>/;
s/<es:sib1PlmnScopeValueTag>\d<\/es:sib1PlmnScopeValueTag>/<es:sib1PlmnScopeValueTa
g>$sib1Tag<\/es:sib1PlmnScopeValueTag>/;
if (/<un:sac>(\d+)<\/un:sac>/)
{ $sac{$newLac} .= "$1 ";}
if (/<\/un:UtranCell>/) {
print OUTUTRANCELL "
<xn:VsDataContainer id=\"1\" modifier=\"create\">\n";
print OUTUTRANCELL "
<xn:attributes>\n";
print OUTUTRANCELL "
<xn:vsDataType>vsDataFach</xn:vsDataType>\n";
print OUTUTRANCELL "
<xn:vsDataFormatVersion>$EricssonSpecificAttributes</xn:vsDataFormatVersion>\n";
print OUTUTRANCELL "
<es:vsDataFach>\n";
print OUTUTRANCELL "
<es:userLabel>Fach 1</es:userLabel>\n";
print OUTUTRANCELL "
<es:maxFach1Power>18</es:maxFach1Power>\n";
print OUTUTRANCELL "
<es:maxFach2Power>15</es:maxFach2Power>\n";
print OUTUTRANCELL "
<es:sccpchOffset>0</es:sccpchOffset>\n";
print OUTUTRANCELL "
<es:pOffset1Fach>0</es:pOffset1Fach>\n";
print OUTUTRANCELL "
<es:pOffset3Fach>0</es:pOffset3Fach>\n";
print OUTUTRANCELL "
</es:vsDataFach>\n";
print OUTUTRANCELL "
</xn:attributes>\n";
print OUTUTRANCELL "
</xn:VsDataContainer>\n";
print OUTUTRANCELL;
} until (/<\/un:UtranCell>/);
}
}
}
close(UTRANCELLFILE);
print OUTUTRANCELL " </un:RncFunction>\n";
print OUTUTRANCELL " </xn:ManagedElement>\n";
print OUTUTRANCELL " </xn:MeContext>\n";
print OUTUTRANCELL " </xn:SubNetwork>\n";
}
print OUTUTRANCELL " </xn:SubNetwork>\n";
print OUTUTRANCELL " </configData>\n";
print OUTUTRANCELL " <fileFooter dateTime=\"$fileTimeStamp\"/>\n";
print OUTUTRANCELL "</bulkCmConfigDataFile>\n";
close(OUTUTRANCELL);
########################################################################
#End of section that handles the UtranCell xml file parsing and creation
########################################################################
#################################################################
# This section handles the Hsdsch xml file parsing and creation
#################################################################
# HSDSCH_OUT file, filehandle for output
open(HSDSCH_OUT,">$HsdschmigrationFile") || die "unable to open
$HsdschmigrationFile\n";
print HSDSCH_OUT "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
print HSDSCH_OUT "<bulkCmConfigDataFile xmlns:un=\"utranNrm.xsd\"
xmlns:xn=\"genericNrm.xsd\"\n";
print HSDSCH_OUT " xmlns:gn=\"geranNrm.xsd\"\n";
print HSDSCH_OUT " xmlns:es=\"$EricssonSpecificAttributes.xsd\"
xmlns=\"configData.xsd\">\n";
print HSDSCH_OUT " <fileHeader fileFormatVersion=\"32.615 V4.5\"
vendorName=\"Ericsson\"/>\n";
print HSDSCH_OUT " <configData dnPrefix=\"Undefined\">\n";
print HSDSCH_OUT " <xn:SubNetwork id=\"ONRM_RootMo_R\">\n";
while (<HSDSCHFILE>) {
if (/<un:UtranCell id=\"(\w+)\">/) {
my $UtranCell=$1;
$UtranCell =~ /(....)\w+/;
my $site = $1;
if (($siteString =~ /$site/) && ($newRncSite{$site} eq
"$newRnc" )) {
s/<un:UtranCell id=\"($UtranCell)\">/<un:UtranCell
id=\"$1\" modifier=\"update\">/;
#The below line skips the first carrier in a
multicarrier site. This functionality was unwanted but you can simply uncomment the
below line to restore it.
#next if (($UtranCell=~ /.....1/)
&&($secondCarrier{$site}==1));
next unless $UtranCell=~ /....../; #this line skips any
cells less than 6 chars
print "Creating Hsdsch import for $UtranCell...\n";
print HSDSCH_OUT;
do {
$_=(<HSDSCHFILE>);
s/id=\"1\">/id="1" modifier=\"create\">/;
s/<es:administrativeState>1<\/es:administrativeState>/<es:administrativeState>0<\/e
s:administrativeState>/;
print HSDSCH_OUT;
} until (/<\/un:UtranCell>/);
}
}
}
close(HSDSCHFILE);
print HSDSCH_OUT " </un:RncFunction>\n";
print HSDSCH_OUT " </xn:ManagedElement>\n";
print HSDSCH_OUT " </xn:MeContext>\n";
print HSDSCH_OUT " </xn:SubNetwork>\n";
}
print HSDSCH_OUT " </xn:SubNetwork>\n";
print HSDSCH_OUT " </configData>\n";
print HSDSCH_OUT " <fileFooter dateTime=\"$fileTimeStamp\"/>\n";
print HSDSCH_OUT "</bulkCmConfigDataFile>\n";
close(HSDSCH_OUT);
#################################################################
# End of section that handles the Hsdsch
#################################################################
#################################################################
# This section handles the Eul xml file parsing and creation
#################################################################
# EUL_OUT file, filehandle for output
open(EUL_OUT,">$EulmigrationFile") || die "unable to open $EulmigrationFile\n";
print EUL_OUT "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
print EUL_OUT "<bulkCmConfigDataFile xmlns:un=\"utranNrm.xsd\"
xmlns:xn=\"genericNrm.xsd\"\n";
print EUL_OUT " xmlns:gn=\"geranNrm.xsd\"\n";
print EUL_OUT " xmlns:es=\"$EricssonSpecificAttributes.xsd\"
xmlns=\"configData.xsd\">\n";
print EUL_OUT " <fileHeader fileFormatVersion=\"32.615 V4.5\"
vendorName=\"Ericsson\"/>\n";
print EUL_OUT " <configData dnPrefix=\"Undefined\">\n";
print EUL_OUT " <xn:SubNetwork id=\"ONRM_RootMo_R\">\n";
while (<EULFILE>) {
if (/<un:UtranCell id=\"(\w+)\">/) {
my $UtranCell=$1;
$UtranCell =~ /(....)\w+/;
my $site = $1;
if (($siteString =~ /$site/) && ($newRncSite{$site} eq
"$newRnc")) {
s/<un:UtranCell id=\"($UtranCell)\">/<un:UtranCell
id=\"$1\" modifier=\"update\">/;
next if (($UtranCell=~ /.....1/)
&&($secondCarrier{$site}==1));
next unless $UtranCell=~ /....../; #this line skips any
cells less than 6 chars
print "Creating Eul import for $UtranCell...\n";
my $modifier = "update";
print EUL_OUT;
do {
$_=(<EULFILE>);
if (s/id=\"1\">/id="1" modifier=\"$modifier\">/)
{$modifier = "create"; }
s/<es:administrativeState>1<\/es:administrativeState>/<es:administrativeState>0<\/e
s:administrativeState>/;
print EUL_OUT;
} until (/<\/un:UtranCell>/);
}
}
}
close(EULFILE);
print EUL_OUT " </un:RncFunction>\n";
print EUL_OUT " </xn:ManagedElement>\n";
print EUL_OUT " </xn:MeContext>\n";
print EUL_OUT " </xn:SubNetwork>\n";
}
print EUL_OUT " </xn:SubNetwork>\n";
print EUL_OUT " </configData>\n";
print EUL_OUT " <fileFooter dateTime=\"$fileTimeStamp\"/>\n";
print EUL_OUT "</bulkCmConfigDataFile>\n";
close(EUL_OUT);
#################################################################
# End of section that handles Eul
#################################################################
#################################################################
# This section handles the CoverageRelation
#################################################################
# open input file to start reading data
while (<COVERAGEFILE>) {
if (/<un:UtranCell id=\"(\w+)\">/) {
my $UtranCell=$1;
$UtranCell =~ /(....)\w+/;
my $site = $1;
if (($siteString =~ /$site/) && ($newRncSite{$site} eq
"$newRnc")) {
s/<un:UtranCell id=\"($UtranCell)\">/<un:UtranCell
id=\"$1\" modifier=\"update\">/;
next unless $UtranCell=~ /....../; #this line skips any
cells less than 6 chars
print "Creating CoverageRelation import for
$UtranCell...\n";
print COVREL_OUT;
do {
$_=(<COVERAGEFILE>);
s/id=\"1\">/id="1" modifier=\"create\">/;
s/RNC0./$newRnc/g;
print COVREL_OUT;
} until (/<\/un:UtranCell>/);
}
}
}
close(COVERAGEFILE);
print COVREL_OUT " </un:RncFunction>\n";
print COVREL_OUT " </xn:ManagedElement>\n";
print COVREL_OUT " </xn:MeContext>\n";
print COVREL_OUT " </xn:SubNetwork>\n";
}
print COVREL_OUT " </xn:SubNetwork>\n";
print COVREL_OUT " </configData>\n";
print COVREL_OUT " <fileFooter dateTime=\"$fileTimeStamp\"/>\n";
print COVREL_OUT "</bulkCmConfigDataFile>\n";
close(COVREL_OUT);
#################################################################
# End of section that handles CoverageRelation
#################################################################
#################################################################
# This section handles the ServiceArea
#################################################################
open(SA_OUT,">$ServiceAreamigrationFile")
|| die "unable to open $ServiceAreamigrationFile\n";
print SA_OUT "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
print SA_OUT "<bulkCmConfigDataFile xmlns=\"configData.xsd\"
xmlns:xn=\"genericNrm.xsd\" xmlns:un=\"utranNrm.xsd\" xmlns:gn=\"geranNrm.xsd\"
xmlns:es=\"$EricssonSpecificAttributes.xsd\" xmlns:xsi=\"http://w...content-
available-to-author-only...3.org/2001/XMLSchema-instance\">\n";
print SA_OUT " <fileHeader fileFormatVersion=\"32.615 V4.5\" senderName=\"CCR-
Tool\" vendorName=\"Ericsson\" />\n";
print SA_OUT " <configData dnPrefix=\"Undefined\">\n";
print SA_OUT " <xn:SubNetwork id=\"ONRM_RootMo_R\">\n";
print SA_OUT " <xn:VsDataContainer id=\"1\">\n";
print SA_OUT " <xn:attributes>\n";
print SA_OUT " <xn:vsDataType>vsDataAreas</xn:vsDataType>\n";
print SA_OUT "
<xn:vsDataFormatVersion>$EricssonSpecificAttributes</xn:vsDataFormatVersion>\n";
print SA_OUT " <es:vsDataAreas/>\n";
print SA_OUT " </xn:attributes>\n";
print SA_OUT " <xn:VsDataContainer id=\"272_3_2\">\n";
print SA_OUT " <xn:attributes>\n";
print SA_OUT " <xn:vsDataType>vsDataPlmn</xn:vsDataType>\n";
print SA_OUT "
<xn:vsDataFormatVersion>$EricssonSpecificAttributes</xn:vsDataFormatVersion>\n";
print SA_OUT " <es:vsDataPlmn/>\n";
print SA_OUT " </xn:attributes>\n";
@sacArray = split/\s/,$sac{$lac};
foreach my $sa (@sacArray) {
print SA_OUT " <xn:VsDataContainer id=\"$sa\"
modifier=\"create\">\n";
print SA_OUT " <xn:attributes>\n";
print SA_OUT "
<xn:vsDataType>vsDataServiceArea</xn:vsDataType>\n";
print SA_OUT "
<xn:vsDataFormatVersion>$EricssonSpecificAttributes</xn:vsDataFormatVersion>\n";
print SA_OUT " <es:vsDataServiceArea>\n";
print SA_OUT "
<es:userLabel>SAC_$sa</es:userLabel>\n";
print SA_OUT "
<es:sac>$sa</es:sac>\n";
print SA_OUT " </es:vsDataServiceArea>\n";
print SA_OUT " </xn:attributes>\n";
print SA_OUT " </xn:VsDataContainer>\n";
}
print SA_OUT " </xn:VsDataContainer>\n";
}
print SA_OUT " </xn:VsDataContainer>\n";
print SA_OUT " </xn:VsDataContainer>\n";
print SA_OUT " </xn:SubNetwork>\n";
print SA_OUT " </configData>\n";
print SA_OUT " <fileFooter dateTime=\"$fileTimeStamp\"/>\n";
print SA_OUT "</bulkCmConfigDataFile>\n";
close(SA_OUT);
#################################################################
# End of section that handles the ServiceArea
#################################################################
#################################################################
# This section creates file to delete cells
#################################################################
open(DELETE,">$deleteCells") || die "unable to open $deleteCells\n";
print DELETE "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
print DELETE "<bulkCmConfigDataFile xmlns:un=\"utranNrm.xsd\"
xmlns:xn=\"genericNrm.xsd\"\n";
print DELETE " xmlns:gn=\"geranNrm.xsd\"\n";
print DELETE " xmlns:es=\"$EricssonSpecificAttributes.xsd\"
xmlns=\"configData.xsd\">\n";
print DELETE " <fileHeader fileFormatVersion=\"32.615 V4.5\"
vendorName=\"Ericsson\"/>\n";
print DELETE " <configData dnPrefix=\"Undefined\">\n";
print DELETE " <xn:SubNetwork id=\"ONRM_RootMo_R\">\n";