You are on page 1of 14

#!

/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

# Turn on strict mode


#use strict;

# variable declarations for strict


my ($siteFile,
%siteList,
$siteString,
$newRnc,
$sib1Tag,
$newLac,
$timestamp,
$UtranCellFile,
@sac,
$HsdschFile,
$EulFile,
$CoverageRelationFile,
$ServiceAreaFile,
$UtranmigrationFile,
$HsdschmigrationFile,
$CoverageRelationmigrationFile,
$EulmigrationFile,
%secondCarrier,
$ServiceAreamigrationFile);

# 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";

#first get list of sites for migration


#this is file sites.txt with site and new RNC seperated by a comma i.e.
#2207,RNC05
$siteFile = "sites.txt";
open(SITEFILE,"<$siteFile") || die "unable to open $siteFile\n";
while(<SITEFILE>) {
next if /^\s*$/;
chomp;
my @SiteArray=split/,/,$_;
$SiteArray[1] =~ s/\s+$//; # delete any trailing whitespace
$siteList{$SiteArray[0]}=$SiteArray[1];
$siteString .= "$SiteArray[0] ";
$newRnc{$SiteArray[1]} = 1;
$newRncSite{$SiteArray[0]} = $SiteArray[1];

}
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";

print "Building Files- Please Wait..\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
################################################################################

print "EricssonSpecificAttributes = $EricssonSpecificAttributes\n";

#################################################################
# This section handles the UtranCell xml file parsing and creation
#################################################################
# OUTUTRANCELL file, filehandle for output
open(OUTUTRANCELL,">$UtranmigrationFile") || die "unable to open
$UtranmigrationFile\n";

#print the header to the OUTUTRANCELL file first


print OUTUTRANCELL "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
print OUTUTRANCELL "<bulkCmConfigDataFile xmlns:un=\"utranNrm.xsd\"
xmlns:xn=\"genericNrm.xsd\"\n";
print OUTUTRANCELL " xmlns:gn=\"geranNrm.xsd\"\n";
print OUTUTRANCELL " xmlns:es=\"$EricssonSpecificAttributes.xsd\"
xmlns=\"configData.xsd\">\n";
print OUTUTRANCELL " <fileHeader fileFormatVersion=\"32.615 V4.5\"
vendorName=\"Ericsson\"/>\n";
print OUTUTRANCELL " <configData dnPrefix=\"Undefined\">\n";
print OUTUTRANCELL " <xn:SubNetwork id=\"ONRM_RootMo_R\">\n";

foreach $rnc (sort keys %newRnc) {


print OUTUTRANCELL " <xn:SubNetwork id=\"$rnc\">\n";
print OUTUTRANCELL " <xn:MeContext id=\"$rnc\">\n";
print OUTUTRANCELL " <xn:ManagedElement id=\"1\">\n";
print OUTUTRANCELL " <un:RncFunction id=\"1\">\n";

#$newRnc name of the new RNC- maybe take this from the command line?
#now set other parameters related to the RNC name

#Regex match returning second last character of rnc


$rnc=~/...(.)./;
#If there is a leading 0 in RNC number, we only need the last digit
if ($1 == "0") {
$rnc=~/....(.)/;
$sib1Tag=$1;
$newLac="300".$sib1Tag;
#Otherwise, we should take the last two
} else {
$rnc=~/...(..)/;
$sib1Tag=$1;
$newLac="30".$sib1Tag;
}
$newRnc = $rnc;

# open input file to start reading data


open(UTRANCELLFILE,"<$UtranCellFile") || die "unable to open
$UtranCellFile\n";
print "Reading Utrancell export file...\n";

while (<UTRANCELLFILE>) {
if (/<xn:SubNetwork id=\"(RNC..)\">/) { $oldrnc = $1;}

#this piece of code create a global hash %secondCarrier for


#second carrier sites
#used to remove hs & eul channels from first carrier of 2 carrier site
#maybe recode with a defined/exists later?

if (/<un:UtranCell id=\"(\w+)\">/) {
my $UtranCell=$1;
$UtranCell =~ /(....)\w+/;
my $site = $1;
$secondCarrier{$site}=0;
if ( $UtranCell =~ /.....2/) { $secondCarrier{$site}=1;}

if (($siteString =~ /$site/) && ($newRncSite{$site} eq


"$rnc" )) {
$deleteCell{$UtranCell} = $oldrnc;
$deleteCellRnc{$oldrnc} = 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>/;

#these are lines to omit


($_ ="") if /accessClassesBarredCs/;
($_ ="") if /accessClassesBarredPs/;
($_ ="") if /reservedBy/;
($_ ="") if /></;
($_ ="") if /iubLinkRef/;

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 "


<xn:VsDataContainer id=\"1\" modifier=\"create\">\n";
print OUTUTRANCELL "
<xn:attributes>\n";
print OUTUTRANCELL "
<xn:vsDataType>vsDataRach</xn:vsDataType>\n";
print OUTUTRANCELL "
<xn:vsDataFormatVersion>$EricssonSpecificAttributes</xn:vsDataFormatVersion>\n";
print OUTUTRANCELL "
<es:vsDataRach>\n";
print OUTUTRANCELL "
<es:userLabel>Rach 1</es:userLabel>\n";
print OUTUTRANCELL "
<es:scramblingCodeWordNo>0</es:scramblingCodeWordNo>\n";
print OUTUTRANCELL "
<es:preambleSignatures>65535</es:preambleSignatures>\n";
print OUTUTRANCELL "
<es:subChannelNo>4095</es:subChannelNo>\n";
print OUTUTRANCELL "
<es:aichTransmissionTiming>4</es:aichTransmissionTiming>\n";
print OUTUTRANCELL "
<es:aichPower>-6</es:aichPower>\n";
print OUTUTRANCELL "
<es:powerOffsetP0>1</es:powerOffsetP0>\n";
print OUTUTRANCELL "
<es:powerOffsetPpm>-4</es:powerOffsetPpm>\n";
print OUTUTRANCELL "
<es:preambleRetransMax>32</es:preambleRetransMax>\n";
print OUTUTRANCELL "
<es:maxPreambleCycle>32</es:maxPreambleCycle>\n";
print OUTUTRANCELL "
<es:constantValueCprach>-19</es:constantValueCprach>\n";
print OUTUTRANCELL "
<es:spreadingFactor>64</es:spreadingFactor>\n";
print OUTUTRANCELL "
</es:vsDataRach>\n";
print OUTUTRANCELL "
</xn:attributes>\n";
print OUTUTRANCELL "
</xn:VsDataContainer>\n";

print OUTUTRANCELL "


<xn:VsDataContainer id=\"1\" modifier=\"create\">\n";
print OUTUTRANCELL "
<xn:attributes>\n";
print OUTUTRANCELL "
<xn:vsDataType>vsDataPch</xn:vsDataType>\n";
print OUTUTRANCELL "
<xn:vsDataFormatVersion>$EricssonSpecificAttributes</xn:vsDataFormatVersion>\n";
print OUTUTRANCELL "
<es:vsDataPch>\n";
print OUTUTRANCELL "
<es:userLabel>Pch 1</es:userLabel>\n";
print OUTUTRANCELL "
<es:pchPower>-4</es:pchPower>\n";
print OUTUTRANCELL "
<es:pichPower>-7</es:pichPower>\n";
print OUTUTRANCELL "
<es:sccpchOffset>20</es:sccpchOffset>\n";
print OUTUTRANCELL "
</es:vsDataPch>\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";

foreach $newRnc (sort keys %newRnc) {


print HSDSCH_OUT " <xn:SubNetwork id=\"$newRnc\">\n";
print HSDSCH_OUT " <xn:MeContext id=\"$newRnc\">\n";
print HSDSCH_OUT " <xn:ManagedElement id=\"1\">\n";
print HSDSCH_OUT " <un:RncFunction id=\"1\">\n";
# open input file to start reading data
open(HSDSCHFILE,"<$HsdschFile") || die "unable to open $HsdschFile\n";
print "Reading Hsdsch export file...\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";

foreach $newRnc (sort keys %newRnc) {


# open input file to start reading data
open(EULFILE,"<$EulFile") || die "unable to open $EulFile\n";
print "Reading Eul export file...\n";

print EUL_OUT " <xn:SubNetwork id=\"$newRnc\">\n";


print EUL_OUT " <xn:MeContext id=\"$newRnc\">\n";
print EUL_OUT " <xn:ManagedElement id=\"1\">\n";
print EUL_OUT " <un:RncFunction id=\"1\">\n";

foreach my $sitename (sort keys %siteList) {


if ($newRncSite{$sitename} eq "$newRnc") {
print "Creating IubEdch on IubLink Iub_$sitename...\n";
print EUL_OUT " <un:IubLink
id=\"Iub_$sitename\" modifier=\"update\">\n";
print EUL_OUT "
<xn:VsDataContainer id=\"1\" modifier=\"create\">\n";#
print EUL_OUT "
<xn:attributes>\n";
print EUL_OUT "
<xn:vsDataType>vsDataIubEdch</xn:vsDataType>\n";
print EUL_OUT "
<xn:vsDataFormatVersion>$EricssonSpecificAttributes</xn:vsDataFormatVersion>\n";
print EUL_OUT "
<es:vsDataIubEdch>\n";
print EUL_OUT "
<es:edchDataFrameDelayThreshold>60</es:edchDataFrameDelayThreshold>\n";
print EUL_OUT "
</es:vsDataIubEdch>\n";
print EUL_OUT "
</xn:attributes>\n";
print EUL_OUT "
</xn:VsDataContainer>\n";
print EUL_OUT " </un:IubLink>\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

# COVREL_OUT file, filehandle for output


open(COVREL_OUT,">$CoverageRelationmigrationFile") || die "unable to open
$CoverageRelationmigrationFile\n";
print COVREL_OUT "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
print COVREL_OUT "<bulkCmConfigDataFile xmlns:un=\"utranNrm.xsd\"
xmlns:xn=\"genericNrm.xsd\"\n";
print COVREL_OUT " xmlns:gn=\"geranNrm.xsd\"\n";
print COVREL_OUT " xmlns:es=\"$EricssonSpecificAttributes.xsd\"
xmlns=\"configData.xsd\">\n";
print COVREL_OUT " <fileHeader fileFormatVersion=\"32.615 V4.5\"
vendorName=\"Ericsson\"/>\n";
print COVREL_OUT " <configData dnPrefix=\"Undefined\">\n";
print COVREL_OUT " <xn:SubNetwork id=\"ONRM_RootMo_R\">\n";

foreach $newRnc (sort keys %newRnc) {


print COVREL_OUT " <xn:SubNetwork id=\"$newRnc\">\n";
print COVREL_OUT " <xn:MeContext id=\"$newRnc\">\n";
print COVREL_OUT " <xn:ManagedElement id=\"1\">\n";
print COVREL_OUT " <un:RncFunction id=\"1\">\n";

open(COVERAGEFILE,"<$CoverageRelationFile") || die "unable to open


$CoverageRelationFile\n";
print "Reading CoverageRelation export file...\n";

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";

foreach $lac (sort keys %sac) {


print SA_OUT " <xn:VsDataContainer id=\"$lac\">\n";
print SA_OUT " <xn:attributes>\n";
print SA_OUT "
<xn:vsDataType>vsDataLocationArea</xn:vsDataType>\n";
print SA_OUT "
<xn:vsDataFormatVersion>$EricssonSpecificAttributes</xn:vsDataFormatVersion>\n";
print SA_OUT " <es:vsDataLocationArea/>\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";

foreach $rnc (sort keys %deleteCellRnc) {


print DELETE " <xn:SubNetwork id=\"$rnc\">\n";
print DELETE " <xn:MeContext id=\"$rnc\">\n";
print DELETE " <xn:ManagedElement id=\"1\">\n";
print DELETE " <un:RncFunction id=\"1\">\n";
foreach $cell (sort keys %deleteCell) {
next if ($rnc ne $deleteCell{$cell});
print DELETE " <un:UtranCell id=\"$cell\"
modifier=\"delete\">\n";
print DELETE " </un:UtranCell>\n";
}
print DELETE " </un:RncFunction>\n";
print DELETE " </xn:ManagedElement>\n";
print DELETE " </xn:MeContext>\n";
print DELETE " </xn:SubNetwork>\n";
}
print DELETE " </xn:SubNetwork>\n";
print DELETE " </configData>\n";
print DELETE " <fileFooter dateTime=\"$fileTimeStamp\"/>\n";
print DELETE "</bulkCmConfigDataFile>\n";
close(DELETE);
#################################################################
# End of section to delete cells
#################################################################

You might also like