aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authoretxrab <etxrab@f5534014-38df-0310-8fa8-9805f1628bb7>2011-04-04 14:35:21 +0000
committeretxrab <etxrab@f5534014-38df-0310-8fa8-9805f1628bb7>2011-04-04 14:35:21 +0000
commit9bd27e529c5dd960cdcb9408f32ea939e7800b33 (patch)
treefead81f9a3cddfd5315e37aa7e6dc65da405f18f /tools
parentd9f62489f3baf279e86bf83439bf0e3c85a3c7a7 (diff)
From Vincent Helfre:
updated the script that extracts the asn1 from the specification (we modified it after noticing that it currently fails to take the IMPORT section). It should also work now to extract the WCDMA RRC (TS 25.331). git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@36442 f5534014-38df-0310-8fa8-9805f1628bb7
Diffstat (limited to 'tools')
-rwxr-xr-xtools/extract_asn1_from_spec.pl87
1 files changed, 40 insertions, 47 deletions
diff --git a/tools/extract_asn1_from_spec.pl b/tools/extract_asn1_from_spec.pl
index a57623bfaa..52d0f83c13 100755
--- a/tools/extract_asn1_from_spec.pl
+++ b/tools/extract_asn1_from_spec.pl
@@ -1,80 +1,73 @@
#$Id$
#!/usr/bin/perl
-# This script extracts the ASN1 definition from and TS 36.331 and generates 3 output files that can be processed by asn2wrs
+# 2011 Vincent Helfre and Erwan Yvin
+# This script extracts the ASN1 definition from and TS 36.331/25.331 and generates asn files that can be processed by asn2wrs
# First download the specification from 3gpp.org as a word document and open it
-# Then in "view" menu, select normal or web layout (needed to removed page header and footers)
+# Then in "view" menu, select normal, draft or web layout (any kind that removes page header and footers)
# Finally save the document as a text file
-# Call the script: "perl extract_asn1_from_spec.pl 36331-xxx.txt"
+# Example with TS 36.331: "perl extract_asn1_from_spec.pl 36331-xxx.txt"
# It should generate: EUTRA-RRC-Definitions.asn, EUTRA-UE-Variables.asn and EUTRA-InterNodeDefinitions
use warnings;
$input_file = $ARGV[0];
-$def_output_file = "EUTRA-RRC-Definitions.asn";
-$var_output_file = "EUTRA-UE-Variables.asn";
-$internode_output_file = "EUTRA-InterNodeDefinitions.asn";
+$version = 0;
+sub extract_spec_version;
sub extract_asn1;
open(INPUT_FILE, "< $input_file") or die "Can not open file $input_file";
-while (<INPUT_FILE>) {
- # Process the EUTRA-RRC-Definitions section
- if( m/EUTRA-RRC-Definitions DEFINITIONS AUTOMATIC TAGS ::=/){
- open(OUTPUT_FILE, "> $def_output_file") or die "Can not open file $def_output_file";
- syswrite OUTPUT_FILE,"$_ \n";
- syswrite OUTPUT_FILE,"BEGIN\n\n";
+extract_spec_version();
- # Get all the text delimited by -- ASN1START and -- ASN1STOP
- extract_asn1();
+extract_asn1();
- syswrite OUTPUT_FILE,"END\n\n";
- close(OUTPUT_FILE);
- }
-
- # Process the EUTRA-RRC-Variables section
- if( m/EUTRA-UE-Variables DEFINITIONS AUTOMATIC TAGS ::=/){
- open(OUTPUT_FILE, "> $var_output_file") or die "Can not open file $def_output_file";
- syswrite OUTPUT_FILE,"$_ \n";
- syswrite OUTPUT_FILE,"BEGIN\n\n";
-
- # Get all the text delimited by -- ASN1START and -- ASN1STOP
- extract_asn1();
-
- syswrite OUTPUT_FILE,"END\n\n";
- close(OUTPUT_FILE);
- }
- # Process the EUTRA-InterNodeDefinitions section
- if( m/EUTRA-InterNodeDefinitions DEFINITIONS AUTOMATIC TAGS ::=/){
- open(OUTPUT_FILE, "> $internode_output_file") or die "Can not open file $def_output_file";
- syswrite OUTPUT_FILE,"$_ \n";
- syswrite OUTPUT_FILE,"BEGIN\n\n";
-
- # Get all the text delimited by -- ASN1START and -- ASN1STOP
- extract_asn1();
+close(INPUT_FILE);
- syswrite OUTPUT_FILE,"END\n\n";
- close(OUTPUT_FILE);
+# This subroutine extracts the version of the specification
+sub extract_spec_version {
+ my $line;
+ while($line = <INPUT_FILE>){
+ if($line =~ m/3GPP TS (25|36)\.331 V/){
+ $version = $line;
+ return;
+ }
}
}
-close(INPUT_FILE);
-
# This subroutine copies the text delimited by -- ASN1START and -- ASN1STOP in INPUT_FILE
# and copies it into OUTPUT_FILE.
-# It stops when it meets the keyword "END"
+# The OUTPUT_FILE is opened on encounter of the keyword "DEFINITIONS AUTOMATIC TAGS"
+# and closed on encounter of the keyword "END"
sub extract_asn1 {
- my $line = <INPUT_FILE>;
+ my $line;
my $is_asn1 = 0;
+ my $output_file_name = 0;
- while(($line ne "END\n") && ($line ne "END\r\n")){
+ while($line = <INPUT_FILE>){
if ($line =~ m/-- ASN1STOP/) {
$is_asn1 = 0;
}
- if ($is_asn1 == 1){
+
+ if($line =~ m/DEFINITIONS AUTOMATIC TAGS ::=/){
+ ($output_file_name) = ($line =~ m/^([a-zA-Z\-]+)\s+DEFINITIONS AUTOMATIC TAGS ::=/);
+ $output_file_name = "$output_file_name".".asn";
+ print "generating $output_file_name\n";
+ open(OUTPUT_FILE, "> $output_file_name") or die "Can not open file $output_file_name";
+ syswrite OUTPUT_FILE,"-- $version-- \$Id$output_file_name 32781 2010-05-12 05:51:54Z etxrab \$\n--\n";
+ $is_asn1 = 1;
+ }
+
+ if (($line =~ /END$/) && (defined fileno OUTPUT_FILE)){
+ syswrite OUTPUT_FILE,"$line";
+ close(OUTPUT_FILE);
+ $is_asn1 = 0;
+ }
+
+ if (($is_asn1 == 1) && (defined fileno OUTPUT_FILE)){
syswrite OUTPUT_FILE,"$line";
}
if ($line =~ m/-- ASN1START/) {
$is_asn1 = 1;
}
- $line = <INPUT_FILE>;
}
}
+