~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/lib/build_OID_registry

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /lib/build_OID_registry (Version linux-6.12-rc7) and /lib/build_OID_registry (Version unix-v6-master)


  1 #!/usr/bin/perl -w                                
  2 # SPDX-License-Identifier: GPL-2.0-or-later       
  3 #                                                 
  4 # Build a static ASN.1 Object Identified (OID)    
  5 #                                                 
  6 # Copyright (C) 2012 Red Hat, Inc. All Rights     
  7 # Written by David Howells (dhowells@redhat.co    
  8 #                                                 
  9                                                   
 10 use strict;                                       
 11 use Cwd qw(abs_path);                             
 12                                                   
 13 my @names = ();                                   
 14 my @oids = ();                                    
 15                                                   
 16 if ($#ARGV != 1) {                                
 17     print STDERR "Format: ", $0, " <in-h-file>    
 18     exit(2);                                      
 19 }                                                 
 20                                                   
 21 my $abs_srctree = abs_path($ENV{'srctree'});      
 22                                                   
 23 #                                                 
 24 # Open the file to read from                      
 25 #                                                 
 26 open IN_FILE, "<$ARGV[0]" || die;                 
 27 while (<IN_FILE>) {                               
 28     chomp;                                        
 29     if (m!\s+OID_([a-zA-z][a-zA-Z0-9_]+),\s+/[    
 30         push @names, $1;                          
 31         push @oids, $2;                           
 32     }                                             
 33 }                                                 
 34 close IN_FILE || die;                             
 35                                                   
 36 #                                                 
 37 # Open the files to write into                    
 38 #                                                 
 39 open C_FILE, ">$ARGV[1]" or die;                  
 40 print C_FILE "/*\n";                              
 41 my $scriptname = $0;                              
 42 $scriptname =~ s#^\Q$abs_srctree/\E##;            
 43 print C_FILE " * Automatically generated by ",    
 44 print C_FILE " */\n";                             
 45                                                   
 46 #                                                 
 47 # Split the data up into separate lists and al    
 48 # encoded data arrays.                            
 49 #                                                 
 50 my @indices = ();                                 
 51 my @lengths = ();                                 
 52 my $total_length = 0;                             
 53                                                   
 54 for (my $i = 0; $i <= $#names; $i++) {            
 55     my $name = $names[$i];                        
 56     my $oid = $oids[$i];                          
 57                                                   
 58     my @components = split(/[.]/, $oid);          
 59                                                   
 60     # Determine the encoded length of this OID    
 61     my $size = $#components;                      
 62     for (my $loop = 2; $loop <= $#components;     
 63         my $c = $components[$loop];               
 64                                                   
 65         # We will base128 encode the number       
 66         my $tmp = ($c == 0) ? 0 : int(log($c)/    
 67         $tmp = int($tmp / 7);                     
 68         $size += $tmp;                            
 69     }                                             
 70     push @lengths, $size;                         
 71     push @indices, $total_length;                 
 72     $total_length += $size;                       
 73 }                                                 
 74                                                   
 75 #                                                 
 76 # Emit the look-up-by-OID index table             
 77 #                                                 
 78 print C_FILE "\n";                                
 79 if ($total_length <= 255) {                       
 80     print C_FILE "static const unsigned char o    
 81 } else {                                          
 82     print C_FILE "static const unsigned short     
 83 }                                                 
 84 for (my $i = 0; $i <= $#names; $i++) {            
 85     print C_FILE "\t[OID_", $names[$i], "] = "    
 86 }                                                 
 87 print C_FILE "\t[OID__NR] = ", $total_length,     
 88 print C_FILE "};\n";                              
 89                                                   
 90 #                                                 
 91 # Encode the OIDs                                 
 92 #                                                 
 93 my @encoded_oids = ();                            
 94                                                   
 95 for (my $i = 0; $i <= $#names; $i++) {            
 96     my @octets = ();                              
 97                                                   
 98     my @components = split(/[.]/, $oids[$i]);     
 99                                                   
100     push @octets, $components[0] * 40 + $compo    
101                                                   
102     for (my $loop = 2; $loop <= $#components;     
103         my $c = $components[$loop];               
104                                                   
105         # Base128 encode the number               
106         my $tmp = ($c == 0) ? 0 : int(log($c)/    
107         $tmp = int($tmp / 7);                     
108                                                   
109         for (; $tmp > 0; $tmp--) {                
110             push @octets, (($c >> $tmp * 7) &     
111         }                                         
112         push @octets, $c & 0x7f;                  
113     }                                             
114                                                   
115     push @encoded_oids, \@octets;                 
116 }                                                 
117                                                   
118 #                                                 
119 # Create a hash value for each OID                
120 #                                                 
121 my @hash_values = ();                             
122 for (my $i = 0; $i <= $#names; $i++) {            
123     my @octets = @{$encoded_oids[$i]};            
124                                                   
125     my $hash = $#octets;                          
126     foreach (@octets) {                           
127         $hash += $_ * 33;                         
128     }                                             
129                                                   
130     $hash = ($hash >> 24) ^ ($hash >> 16) ^ ($    
131                                                   
132     push @hash_values, $hash & 0xff;              
133 }                                                 
134                                                   
135 #                                                 
136 # Emit the OID data                               
137 #                                                 
138 print C_FILE "\n";                                
139 print C_FILE "static const unsigned char oid_d    
140 for (my $i = 0; $i <= $#names; $i++) {            
141     my @octets = @{$encoded_oids[$i]};            
142     print C_FILE "\t";                            
143     print C_FILE $_, ", " foreach (@octets);      
144     print C_FILE "\t// ", $names[$i];             
145     print C_FILE "\n";                            
146 }                                                 
147 print C_FILE "};\n";                              
148                                                   
149 #                                                 
150 # Build the search index table (ordered by len    
151 #                                                 
152 my @index_table = ( 0 .. $#names );               
153                                                   
154 @index_table = sort {                             
155     my @octets_a = @{$encoded_oids[$a]};          
156     my @octets_b = @{$encoded_oids[$b]};          
157                                                   
158     return $hash_values[$a] <=> $hash_values[$    
159         if ($hash_values[$a] != $hash_values[$    
160     return $#octets_a <=> $#octets_b              
161         if ($#octets_a != $#octets_b);            
162     for (my $i = $#octets_a; $i >= 0; $i--) {     
163         return $octets_a[$i] <=> $octets_b[$i]    
164             if ($octets_a[$i] != $octets_b[$i]    
165     }                                             
166     return 0;                                     
167                                                   
168 } @index_table;                                   
169                                                   
170 #                                                 
171 # Emit the search index and hash value table      
172 #                                                 
173 print C_FILE "\n";                                
174 print C_FILE "static const struct {\n";           
175 print C_FILE "\tunsigned char hash;\n";           
176 if ($#names <= 255) {                             
177     print C_FILE "\tenum OID oid : 8;\n";         
178 } else {                                          
179     print C_FILE "\tenum OID oid : 16;\n";        
180 }                                                 
181 print C_FILE "} oid_search_table[OID__NR] = {\    
182 for (my $i = 0; $i <= $#names; $i++) {            
183     my @octets = @{$encoded_oids[$index_table[    
184     printf(C_FILE "\t[%3u] = { %3u, OID_%-35s     
185            $i,                                    
186            $hash_values[$index_table[$i]],        
187            $names[$index_table[$i]]);             
188     printf C_FILE "%02x", $_ foreach (@octets)    
189     print C_FILE "\n";                            
190 }                                                 
191 print C_FILE "};\n";                              
192                                                   
193 #                                                 
194 # Emit the OID debugging name table               
195 #                                                 
196 #print C_FILE "\n";                               
197 #print C_FILE "const char *const oid_name_tabl    
198 #                                                 
199 #for (my $i = 0; $i <= $#names; $i++) {           
200 #    print C_FILE "\t\"", $names[$i], "\",\n"     
201 #}                                                
202 #print C_FILE "\t\"Unknown-OID\"\n";              
203 #print C_FILE "};\n";                             
204                                                   
205 #                                                 
206 # Polish off                                      
207 #                                                 
208 close C_FILE or die;                              
                                                      

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php