Patent Publication Number: US-2002009076-A1

Title: Method and means for classifying data packets

Description:
FIELD OF THE INVENTION  
       [0001] Present invention is related to the field of handling items such as packets in a communication system, by investigating their contents to detect, for different criteria, the respective criteria values contained in each packet, to use the criteria values for classifying the packet and to determine the applicable rule for further handling or forwarding of the packet.  
       BACKGROUND OF INVENTION  
       [0002] For handling packets in a communication system, e.g. the Internet, normally the destination address is evaluated to determine, in each of the intermediate nodes on the path of the packet, on which output or link it has to be forwarded. In various kinds of communication systems, different types of services are provided depending on the destination address, the origin adress, or other data provided in the header of each packet. The difference in the type of service may be the priority under which a packet is handled or forwarded, the price which has to be paid for the transmission, the denial of handling the packet at all for certain originators, etc. Due to the tremendous amounts of packets (or generally, data items) to be handled in today&#39;s systems, the speed of recognition of the criteria received with the packets and the resulting decision which type of handling is to be selected, must be made in extremely short time.  
       KNOWN APPROACHES/PRIOR SOLUTIONS  
       [0003] Several methods for classifying packets in communication systems are known from publications. In a paper by T. V. Lakshman and D. Stiliadis entitled “High-Speed Policy-based Forwarding Using Efficient Multi-dimensional Range Matching”, Proc. ACM SIGCOMM&#39;98, Comp.Commun.Rev. Vol.28, No.4, October 1998, pp.203-214, a method is described for finding, among a given set of rules, the one that is applicable for handling a received packet. For each of n dimensions (which e.g. represent destination address, origin address etc.), the respective dimension is partitioned into non-overlapping intervals each comprising a range of values from the respective dimension. The intervals are so selected that within any interval, no change of applicable rules occurs. For each such interval or range, a bitmap is generated including one bit for each rule existing in the system: when a rule applies in the range, the bit is one, otherwise it is zero. The bits within the bitmap are ordered according to the priority of the rules to which the bits correspond. This allows to select the rule with the highest priority in case multiple rules are applicable. When a packet is to be classified, it is first detected for each dimension into which interval or range the packet belongs, and then an intersection is made of the bitmaps of respective intervals, by making a bitwise AND combination. The result then indicates which rules are applicable, and one rule is finally selected according to the priority scheme. This allows fast classification for a small number of rules.  
       [0004] However, when there are hundreds or thousands of rules to be considered, the bitmaps will become large and require much storage. Access to these large bitmaps and performing an intersection over multiple of these bitmaps will require a lot of time, and therefore will limit the number of rules that can be supported at a given classification speed. In addition, the ordering of the bits within a bitmap based on the priority of the corresponding rules, makes it not possible to perform incremental updates on the data structure within a reasonable time: insertion of a new rule would require modification of all the bitmaps that correspond to all of the the intervals in all dimensions.  
       [0005] A paper entitled “Packet Classification on Multiple Fields” by P. Gupta and N. McKeown, ACM SIGCOMM&#39;99, published in Comp.Commun.Rev. Vol.29, No.4, October 1999, pp.147-160, describes a method in which the classification is done in several sequential steps. In the first step the packet header is split into multiple chunks that are used to simultaneously index multiple memories. In succeeding steps, the lookup results of previous steps are combined to form new chunks to simultaneously access different memories. In a preprocessing step so called chunk equivalence sets are derived for each chunk, from the projection of the various ranges involved in the classification rules on the chunk (for first step chunks) or from the possible intersections of the chunk equivalence sets of previous steps (for chunks in succeeding steps). Each element is assigned a so called equivalence class ID, which is obtained by binary numbering the set elements starting at zero. Each lookup result that is achieved by indexing a memory using a chunk value is the equivalence class ID corresponding to the element of the chunk equivalence set to which the value relates. Since the size of the equivalence ID is typically smaller than the size of the chunk used to index the memory, this can be regarded as a reduction. The memory lookup in the last step will provide the ID of the applicable rule with the highest priority. In this way a total reduction is achieved from the size of all relevant packet header parts to the size of a rule identification index.  
       [0006] The disadvantages of this method are its large storage requirements and inefficient storage usage. Dependent upon the rule characteristics, many memories may contain the same values many times. Directly related to this, updating the data structure by inserting or removing a rule can affect many memory locations preventing fast incremental updates. For large numbers of rules, the preprocessing will take considerable time.  
       [0007] All of the known methods suggested in the literature, despite allowing fast classification in several situations, will not allow the necessary handling speed when the number of rules (and the number of criteria which determine the applicable rule) is very high, as can be expected for the Internet in the near future.  
       OBJECTS OF THE INVENTION  
       [0008] It is an object of the invention to devise a method and means for classifying packets or other data items to be processed with respect to applicable rules, in response to the values of a plurality of criteria contained in each packet; the invention should allow to exploit a given, irregular distribution and interrelation of rules with respect to intervals of criteria values, for optimally mapping of this rule distribution and interrelation into the structure of a classification and search mechanism, so that efficient lookup procedures can be used. It is also an object to devise a classification method and means that allow fast and simple adaptation of search and classification structures to changes in the distribution of rules over input value ranges, e.g. the addition of new rules. A further object is to reduce the required size of storage and to minimize the time required for classifying each packet and for determining an applicable rule, in response to criteria input values received with a packet.  
       [0009] The invention for achieving theses objects is defined in the claims. Its advantages are, in particular, the following: The invention allows to determine the applicable class, e.g. the required handling rule for each packet (or data item to be classified), in a time which is compatible to the transmission speed of the packets so that no delay is encountered. Furhermore, well-known longest-matching-prefix searching methods can be used at least for the final selection step. In addition, updating of the mapping databases (lookup tables) when new rules are added or assignments between ranges and rules change, can be easily effected by adding a few entries in the tables without having to alter much of the stored data; complete updatings can be made at regular intervals for optimizing, without delaying previous immediate adaptation.  
       [0010] Embodiments of the invention are described in the following with reference to the drawings illustrating the inventive procedure. 
     
    
    
     LISTING OF DRAWINGS  
     [0011]FIG. 1 is a general, schematic illustration of the inventive procedure for classifying packets.  
     [0012]FIG. 2 is a diagram showing the relation between rules for packet classification and the ranges of criterion values (input values) for which they are valid.  
     [0013]FIG. 3 is a rule/range diagram together with primitive ranges for generating range tokens, and the range tokens which were assigned to basic ranges, for a first embodiment of the invention.  
     [0014]FIG. 4 illustrates details of the primitive ranges of FIG. 3.  
     [0015]FIG. 5 shows the resulting search tree for the first embodiment, for longest-matching-prefix-lookup operations to determine the applicable rule for a given input.  
     [0016]FIG. 6 is a rule/range diagram together with primitive ranges for generating range tokens, and the range tokens which were assigned to basic ranges, for a second embodiment of the invention.  
     [0017]FIG. 7A and FIG. 7B illustrate details of the primitive ranges of FIG. 6.  
     [0018]FIG. 8 shows the resulting search tree for the second embodiment, for longest-matching-prefix lookup operations to determine the applicable rule for a given input.  
     [0019]FIG. 9 is a modified rule/range diagram similar to that of FIG. 2, with an additional rule inserted, to explain updating of the search databases for packet classification.  
     [0020]FIG. 10 is a rule/range diagram together with primitive ranges for generating range tokens, for the modified rule distribution of FIG. 9, for explaining the updating operation.  
     [0021]FIG. 11 illustrates details of the primitive ranges of FIG. 10.  
     [0022]FIG. 12 shows the resulting updated search tree (only upper portion), based on the search tree of FIG. 5 of the first embodiment, for the modified rule distribution of FIG. 9 and FIG. 10.  
    
    
     DETAILED DESCRIPTION  
     [0023] A brief general description of the invention is given with reference to FIG. 1. As a first step in the classification process, input values of the relevant criteria are taken from the received input item. For this general description, it is assumed that the items to be classified are communication packets, and that the criteria are the destination address and the origin address. The two particular address values 11 and 12 are taken as input values for a lookup procedure in stored tables. In the next step it is determined, separately for each criterion, into which range (value interval) of preselected basic ranges the respective input value falls. This results in the identification of two basic ranges X i  and Y j  for the two input values. So far, these steps are the same as in other classification procedures already known.  
     [0024] Now, in another lookup operation in stored tables, a range token is found for each of the previously determined basic ranges, thus obtaining range tokens RT(X i ) and RT(Y j ). At least one of these range tokens is obtained from a set of range tokens of non-uniform (variable) length. For example, the set of range tokens RT(Y j ) may include tokens with a length between 1 bit and n bits. The range tokens are so selected and mapped (assigned) to the basic ranges that they form a prefix-oriented set adapted to the distribution of rules over the value ranges of input values. The two range tokens obtained for the actual input values are then used, in a predetermined combination, for a longest-matching-prefix lookup or search operation in a stored data structure which may be a binary search tree, and which is designed on the basis of rule prefixes to optimally utilize the occurring range token combinations as search keys, to finally obtain as output the identifier of that rule which is to be used for the particular combination of input values I 1  and I 2  received.  
     [0025] In a first embodiment of the invention to be described, only one of the range tokens is of variable length, while the other has a fixed length. In this case, the two range tokens are concatenated to obtain a single search key of variable length which is used as input for the longest-matching-prefix search operation.  
     [0026] In a second embodiment (described later), both range tokens are of variable length. These are then used together, as two separate partial search keys, as input to a special longest-matching-prefix lookup or search operation to determine the required rule identifier.  
     [0027] In this general description and in the two described embodiments, only two criteria are evaluated for classifying a received data item, e.g. for finding the rule according to which a received packet is to be further processed. The invention is, however, also applicable to systems in which more than two criteria are evaluated for the classification of an item. It is then just necessary to provide the used variables (basic range identifiers Xi, . . . , and range tokens RT(Xi), . . . ) in an n-dimensional system. This would result, by concatenation, either in a single search key for the LMP (longest-matching-prefix) lookup operation if only one token is of variable length and the (n−1) other tokens are of fixed length. Or, if all n tokens were of variable length, then n separate partial search keys will be presented as input to the LMP search operation, as will be principally explained for the second embodiment.  
     [0028] In the following, two embodiments of the invention will now be described as examples. Furthermore, a method is briefly explained for updating databases for packet classification which were generated according to the invention. Specific terms which are used in present description are briefly listed and defined at the end.  
     EXAMPLE 1  
     [0029] In this example four rules will be used that cover the following ranges (called rule ranges) in two dimensions which will be denoted as X and Y dimension:  
                                                           Rule   Priority   X Rule Range   Y Rule Range                          1   1   20-69   10-59           2   2   50-99   40-89           3   2   10-29   50-79           4   3   60-89   30-49                      
 
     [0030]FIG. 2 shows in a rule diagram (rule/range diagram) the rules as two-dimensional rectangles. The non-overlapping intervals X0-X8 and Y0-Y7 are obtained by projecting the range boundaries of all rules onto the X and Y axes. These intervals will be called basic ranges. The basic ranges are the following ones:  
                               Basic Range                                                X0   &lt;10           X1   10-19           X2   20-29           X3   30-49           X4   50-59           X5   60-69           X6   70-89           X7   90-99           X8   &gt;=100           Y0   &lt;10           Y1   10-29           Y2   30-39           Y3   40-49           Y4   50-59           Y5   60-79           Y6   80-89           Y7   &gt;=90                      
 
     [0031] Note that in the diagram of FIG. 2, the basic ranges are either 10 or 20 units wide (e.g., X2=20-29 and X3=30-49). Of course, any other (non-decimal) width of the basic ranges is possible; each basic range can have its own individual width.  
     [0032] In FIG. 2, when two rules overlap, then the rule with the higher priority is drawn ‘on top’ of the rule with the lower priority. For example rule 3 overlaps rule 1 in [X2,Y4] and since rule 3 has a higher priority than rule 1, it is drawn ‘on top’.  
     [0033] Variable-length range tokens  
     [0034] A “range token” is assigned to each of the basic ranges (except for ranges not covered by rules, which may receive a special range token not discussed here), and the set of range tokens representing one particular range intersection ( corresponding to the current input values from a received packet) is used in combination to determine the applicable rule. The concept of the invention involves the assignment of variable-length range tokens to the basic ranges in at least one dimension. In this example, variable-length range tokens will be assigned only to the basic ranges in the Y dimension.  
     [0035] Primitive range hierarchy  
     [0036] Primitive ranges, ordered in a hierarchy, are introduced to allow an effective and optimal generation of range tokens in response to the particular existing distribution and interrelation of rules.  
     [0037] One way to derive range tokens for the given set of rules is shown in FIG. 3. The Y rule ranges are used to build a hierarchy of layers containing so called primitive ranges as shown at the left side of the Y axis. The layering (L1, L2, L3) is shown in a horizontal way from left to right for illustrative purposes; the ‘bottom’ of the hierarchy is formed by the primitive ranges that are shown most to the left (layer L1). In FIG. 4, the primitive range hierarchy is shown in a normal vertical way.  
     [0038] The construction of the primitive range hierarchy is based on a certain ordering of the rules. The rule order can be selected in different ways, for example based on rule priority, size of the ranges, expected lifetime of a rule, or a combination. By an appropriate choice of the rule ordering it is possible to minimize the number of primitive ranges in the hierarchy, thereby reducing the neccessary number and the length of the range tokens, which then results in a reduction of the required storage. Here the following order will be used: rule 2, rule 3, rule 1, rule 4. The primitive range hierarchy has the following properties: Primitive ranges at the bottom layer (in FIG. 3 the leftmost ‘vertical layer’ L1) have to be disjoined (non-overlapping), and primitive ranges that are in higher layers (L2 and L3) have to be a subset of primitive ranges at a lower layer.  
     [0039] In FIG. 3, the entire Y rule range of rule 2 is placed as primitive range 2 at layer 1 (because rule 2 is the highest in the rule order). Then, according to the mentioned rule order, the Y rule range of rule 3 is taken, and is put as primitive range 3 at layer 2 on top of the primitive range 2. Primitive range 3 is a subset of the primitive range 2.  
     [0040] Next, the Y rule range of rule 1 is taken. The Y rule range of rule 1 does overlap with both primitive ranges 2 and 3. In order to preserve the property that primitive ranges in a higher layer have to be a subset of primitive ranges at a lower layer, the Y rule range of rule 1 is divided into three primitive ranges, denoted as 1a, 1b and 1c. Primitive range 1c is a subrange of the primitive range 3 and can therefore be placed on top of primitive range 3, at layer 3. Primitive range 1b is a subrange of primitive range 2 and disjoined with the primitive range 3, and is therefore placed at layer 2, on top of the primitive range 2. The remaining part of the Y range of rule 1, primitive range 1a, is disjoined with primitive range 2, and is therefore placed at layer 1.  
     [0041] Finally, the Y rule range of rule 4 is taken. This range does overlap with both primitive ranges 1a and 1b. In a similar way as was done with the Y rule range of rule 1, now the Y rule range of rule 4 is split into two primitive ranges 4a and 4b. Primitive range 4a is a subset of primitive range 1a and is therefore placed on top of primitive range la at layer 2. Primitive range 4b equals primitive range 1b. It is simply ‘merged’, i.e., the original primitive range 1b is now called primitive range “1b,4b”.  
     [0042]FIG. 4 shows the primitive range hierarchy in a vertical way.  
     [0043] Primitive range IDs  
     [0044] Each of the primitive ranges in the hierarchy is now assigned an identification (separately for each layer, and within each layer separately for each set of primitive ranges being associated with one of the primitive ranges at a lower level) in the following way:  
     [0045] If k equals the number of primitive ranges at the lowest layer, layer 1, then each of these primitive ranges is assigned a unique binary number with at most log(k) bits. In FIG. 4 primitive range 2 is assigned ID ‘0’, and primitive range 1a is assigned ID ‘1’.  
     [0046] The same process is repeated for each set of primitive ranges at a given layer that are subranges of one primitive range at a previous layer. For example, primitive range 3 and primitive range 1b,4b are the two subranges at layer 2 of primitive range 2 at layer 1. Primitive range 3 is assigned ID ‘0’ and primitive range 1b,4b is assigned ID ‘1’. FIG. 4 shows all the IDs that have been assigned in this way to the primitive ranges in the hierarchy.  
     [0047] By an appropriate selection of the rule order, one can minimize the number of primitive ranges and the number of required hierarchy layers.  
     [0048] Range tokens  
     [0049] Based on the primitive range IDs within the hierarchy, the range tokens for all basic ranges are now derived in the following way. For each basic range the range token consists of the concatenation of all the IDs of the primitive ranges that the given basic range is a subset of, where the order of the concatenation is according to the layering of these primitive ranges in the hierarchy (bottom to top layer).  
     [0050] For example, the range token “000” for basic range Y4 is derived in the following way. Basic range Y4 is a subset of primitive ranges 2, 3, and 1c as can be seen in FIG. 3. The IDs of these primitive ranges are “0”, “0”, and “0” according to FIG. 4, which when concatenated results in “000”. FIG. 3 shows all the range tokens for the basic ranges (Y1 . . . Y6) in the Y dimension at the right side that are derived in this way.  
     [0051] In this example only the basic ranges in the Y dimension are assigned variable-length range tokens. The basic ranges in the X dimension are assigned fixed-length range tokens, simply by numbering the basic ranges that are a subset of at least one rule range, with binary numbers of 3 bits (for 7 basic ranges), as can be seen in FIG. 3 (on top of the rule/range diagram).  
     [0052] Rule prefixes  
     [0053] In a classification operation according to the structures in this example, for a given input the X and Y basic ranges are determined in parallel. The given input is the set of relevant criteria values extracted from a received packet, e.g. one particular destination address and one particular origin address. For each input value, the basic range into which it falls and the associated range token are found e.g. in a lookup operation. The lookup operations for all input values are done in parallel to save time. These lookup operations are standard and therefore need no further explanation here. The resulting fixed-size range token of the found X basic range is concatenated with the resulting variable-size range token of the found Y basic range. The concatenation result is used as search key for a longest-matching-prefix search operation to determine the highest priority rule that applies on the given input of the classification operation.  
     [0054] An important element are the “rule prefixes” which determine the organization of the lookup or search tree which is finally used for finding the rule identifier in reponse to the concatenated range tokens. Each rule prefix represents the tree path to one rule identifier. The appropriate selection of these rule prefixes allows longest-matching-prefix lookup operations with optimal time and storage requirements.  
     [0055] The rule prefixes, against which the concatenated parallel search results (i.e., the search keys) are tested, are derived in the following way:  
     [0056] For each basic range in the X dimension, first the rules are determined for which the given basic range is a subset of the X rule range. Next, for each of these rules and the given basic X range it is determined which part of the respective Y rule range is not covered by a higher priority rule. For this part of the Y rule range the smallest set of primitive ranges is determined of which the Y rule range part is a subset. For each primitive range in the found set, a separate rule prefix is created by concatenating the range token of the given basic range in the X dimension with the ID of the given primitive range itself (in the Y dimension) and the IDs of all the primitive ranges that are below the given primitive range, in the order of the layering in the hierarchy. This provides a rule prefix for the given rule.  
     [0057] For example, basic range X5 is part of the X rule ranges of rules 1, 2, and 4. For rule 1, only the Y range Y1 is not covered by the higher priority rules 2 and 4. The smallest primitive range for which Y1 is a subset is primitive range 1a. A rule prefix is now obtained by concatenating the fixed sized range token of X5 (“101”) with the variable size ID of primitive range 1a (“1”): Rule prefix 1011→rule 1.  
     [0058] For rule 2 the Y ranges Y4 to Y6 are not covered by the higher priority rule 4. The smallest primitive range for which Y4 to Y6 are a subset is primitive range 2. A rule prefix is now obtained by concatenating the range token of X5 (“101”) with the variable size ID of primitive range 2 (“0”): Rule prefix 1010→rule 2.  
     [0059] Rule 4 is not covered by any higher priority rule for basic range X5. The smallest set of primitive ranges for which Y ranges Y2 and Y3 are a subset are primitive ranges 4a and “1b,4b”. For each of these primitive ranges a rule prefix is determined. For primitive range 4a, the rule prefix is obtained by concatenating the range token of X5 (“101”) with the ID of primitive range la (“1”) and the ID of primitive range 4a (“0”): Rule prefix 10110→rule 4.  
     [0060] For primitive range 4b, the rule prefix pointing to “rule 4” is obtained by concatenating the range token of X5 (“101”) with the ID of primitive range 2 (“0”) and the ID of primitive range “1b,4b” (“1”): Rule prefix 10101→rule 4. By performing the same procedure for all basic ranges in the X dimension the following list of rule prefixes is obtained:  
                               Rule Prefix                                                     1)   00100      rule 3            2)   01000      rule 3            3)   01001      rule 1            4)    0101      rule 1            5)   011000       rule 1            6)   01101      rule 1            7)    0111      rule 1            8)    1001      rule 1            9)    1000      rule 2           10)    1011      rule 1           11)   10110      rule 4           12)    1010      rule 2           13)   10101      rule 4           14)   11010      rule 4           15)    1100      rule 2           16)   11001      rule 4           17)    1110      rule 2                      
 
     [0061] Note that rule prefix 12 is a prefix of rule prefix 13. This can be understood from FIG. 3: if for the given input to the classification operation, rule prefix 12 is a matching prefix, then this means that this input relates to a coordinate somewhere in the rectangle [X5,Y3-Y6], which means that rule 2 applies. If rule prefix 13 is found to be a longer matching prefix, then this means that the input relates to a coordinate somewhere in the rectangle [X5,Y3], which means that also rule 4 applies, and since rule 4 has a higher priority, rule 4 will be the output of the classification operation. Also, rule prefix 15 is a prefix of rule prefix 16.  
     [0062] In the literature, several methods have been reported for performing fast longest-matching-prefix search operations. Any of these methods can be applied here. FIG. 5 shows a longest-matching-prefix search tree structure for the rule prefix list shown above. It is designed as a binary tree for reasons of simplicity. A short decription of its operation is given later.  
     EXAMPLE 2  
     [0063] In this second example the same four rules are assumed that were used in the first example and which were illustrated in FIG. 2.  
     [0064] Variable-length range tokens  
     [0065] In this example variable-length range tokens will be assigned to the basic ranges in both the X and Y dimensions. This in contrast to the first example, in which variable-length range tokens are assigned to the basic ranges in the Y dimension only.  
     [0066] When variable-length range tokens are used in two (or more) dimensions, an even better optimization of the classification procedure is possible at least for certain relations between rules and ranges. This can be seen from the resulting list of rule prefixes at the end of the description of this example, and from the resulting search tree in FIG. 8.  
     [0067] One way to assign variable-length range tokens to basic ranges in both dimensions involves two steps as are shown in FIG. 6.  
     [0068] The first step is to split the existing rules into so called subrules such that the two-dimensional rectangles that relate to these subrules are disjoined (non-overlapping) or are included in each other (i.e. the subrule of one rule (e.g. 3b) is included in another rule or in a subrule (e.g. 1a) of another rule). The way in which rules are split into subrules can be based on different criteria, for example on the rule priority, size of the rules ranges, or a combination. For example, in FIG. 6, rule 4 is split into two subrules 4a and 4b. As a consequence, subrule 4b is now included in rule 2, and subrule 4a is now disjoined with rule 2.  
     [0069] If a rule is split into subrules then, the subrules that would be completely covered by higher-priority rules can be discarded. For example, in FIG. 6, rule 1 is split into subrules 1a, 1b, 1c and 1d. The remaining part of rule 1 is covered by (the lower-left part of) higher-priority rule 2 and (the left part of) higher-priority subrule 4a, and is therefore discarded.  
     [0070] Once the property holds that all rules and subrules are included in each other or are disjoined, as a second step a primitive range hierarchy is build in each dimension. This is done in a similar way as described in the first example. For each dimension, the order of the rules and subrules used to build the primitive range hierarchy, is from larger (sub)rule ranges in the given dimension to smaller (sub)rule ranges. The resulting primitive range hierarchies for the X and Y dimensions are shown below the X axis and to the left of the Y axis, respectively, in FIG. 6.  
     [0071] For example, in the X dimension, the X rule range of rule 2 is taken as primitive range 2 at layer 1. On top of primitive range 2, primitive ranges 1c and 4a,b are placed at layer 2, corresponding to subrule 1c and subrules 4a and 4b. On top of primitive range 4a,b a primitive range 1d is placed at layer 3 corresponding to subrule 1d. The layering of these primitive ranges in the X dimension is done according to their sizes. In a similar way, primitive ranges for the Y dimension are generated.  
     [0072] The primitive range IDs are determined in the same way as described for the first example, and are shown in FIG. 7A and FIG. 7B. Also, the derivation of the variable-length range tokens from the primitive range hierarchy and the primitive range IDs is done in the same way as described for the first example, now for two dimensions. The results are shown in FIG. 6, above and on the right side of the rule/range diagram.  
     [0073] Rule prefixes  
     [0074] If in at least two dimensions, variable-length range tokens are assigned to the basic ranges, then the range tokens that are the results of the parallel search operations to determine the basic range in each dimension for the classification input, are not concatenated to construct an intermediate test result (i.e. a single search key), but are offered as separate bit vectors (two “partial search keys”) as input to a modified version of a longest-matching-prefix search, in order to determine the highest priority rule that applies to the given input values of the classification operation. The difference between this modified longest-matching-prefix search operation and a conventional longest-matching-prefix search operation is that in the latter type of operation exactly one bitvector (i.e. a single search key) is used as input that is processed from left to right. On the other hand, in the first type of operation, multiple differently sized bitvectors (two “partial search keys”) can be used as input that each are processed from left to right, however, the order in which parts of these various bitvectors are used at a certain point of the search operation, depends on the values of the bitvector parts that already have been processed. This will be illustrated now.  
     [0075] For each unsplit rule and for each subrule that have remained after the previously described split and discard operations, a rule prefix is derived in the following way. In each dimension the primitive range is determined that is equal to the rule range of the given rule or subrule in that dimension. Next, in each dimension the set of all primitive ranges are determined of which the determined primitive range is a subset and including the determined primitive range itself. Finally a rule prefix is created, by concatenating the primitive range IDs of all these primitive ranges, starting with the primitive range ID of the primitive range at layer 1 in the X dimension, then the primitive range ID of the primitive range at layer 1 in the Y dimension, then the primitive range ID of the primitive range at layer 2 in the X dimension, and so on, until all these primitive ranges have been covered. If for a given rule or subrule, the sets of primitive ranges for the X and Y dimensions contain a different number of elements, then the alternating concatenation of the primitive range IDs stops after all the primitive range IDs of one set have been used, and then only primitive range IDs of the remaining set will be used to create the remainder of the rule prefix. An important condition that has to be fulfilled, and which also determines the order in which the primitive range IDs related to the X and Y dimensions are concatenated, is that if a rule or subrule is included in a (lower-priority) rule or subrule, then the primitive range IDs related to the including rule or subrule, have to occur in the same order as in the rule prefix for that included rule or subrule. The reason for this is to avoid backtracking in the longest-matching-prefix lookup procedure for finally obtaining the applicable rule identifier.  
     [0076] For example (cf. FIG. 6, FIG. 7A and FIG. 7B), the rule prefix for subrule 1a can be constructed in the following way. In the X dimension, primitive range 1a,b equals the rule range of subrule 1a, and in the Y dimension, primitive range 1a equals the rule range of subrule 1a. The set of primitive ranges together with their primitive range IDs for which primitive range 1a is a subset (none in this case) in the X dimension, including primitive range 1a,b, and ordered from lower to higher layers, is: {1a,b: 11}.  
     [0077] The set of primitive ranges together with their primitive range IDs for which primitive range 1a is a subset in the Y dimension, including primitive range 1a, and ordered from lower to higher layers, is: {2: 0, 1a: 1}.  
     [0078] Since subrule 1a is not included in any other rule or subrule in FIG. 6, the corresponding rule prefix can directly be derived from these sets, simply by alternating the primitive range IDs of these sets starting with the X dimension: Rule prefix X(11) Y(0) Y(1)→rule 1.  
     [0079] The rule prefix for subrule 3b (which is included in subrule 1a) can be constructed in the following way. In the X dimension, primitive range 3b,d equals the rule range of subrule 3b, and in the Y dimension, primitive range 3a,b equals the rule range of subrule 3b. The set of primitive ranges together with their primitive range IDs for which primitive range 3b,d is a subset in the X dimension, including primitive range 3b,d and ordered from lower to higher layers, is: {1a,b: 11, 3b,d: 0}.  
     [0080] The set of primitive ranges together with their primitive range IDs for which primitive range 3a,b is a subset in the Y dimension, including primitive range 3a,b and ordered from lower to higher layers, is: {2: 0, 1a: 1, 3a,b: 0}.  
     [0081] Since subrule 3b is included in subrule 1a, the first elements of both sets have to be concatenated in the same order as they occur in the rule prefix related to subrule 1a. The remaining parts of the rule prefix is obtained by concatenating alternatingly the primitive range IDs of the remaining elements from both sets:  
     [0082] Rule prefix X(11) Y(0) Y(1) X(0) Y(0)→rule 3.  
     [0083] This shows that the rule prefix related to subrule 1a is (in a sense) a prefix of the rule prefix related to subrule 3b.  
     [0084] The rule prefixes for the other rules and subrules are obtained in the same way:  
                               Rule Prefix                                                     1)   X(11) Y(0) Y(1)      rule 1 (subrule 1a)            2)   X(11) Y(1)      rule 1 (subrule 1b)            3)   X(0) Y(1) X(1)      rule 1 (subrule 1c)            4)   X(0) Y(1) X(0) Y(1) X(0)      rule 1 (subrule 1d)            5)   X(0) Y(0)      rule 2            6)   X(10) Y(0) Y(1) Y(0)      rule 3 (subrule 3a)            7)   X(11) Y(0) Y(1) X(0) Y(0)      rule 3 (subrule 3b)            8)   X(10) Y(0) Y(0)      rule 3 (subrule 3c)            9)   X(11) Y(0) X(0) Y(0)      rule 3 (subrule 3d)           10)   X(0) Y(1) X(0) Y(0)      rule 4 (subrule 4a)           11)   X(0) Y(0) X(0) Y(1) Y(1)      rule 4 (subrule 4b)                      
 
     [0085] Note that the rule prefix related to rule 2, is (in a sense) a prefix of the rule prefix related to subrule 4b.  
     [0086] An example data structure (search tree) for performing a ‘modified’ longest-matching-prefix search (lookup) on the range tokens obtained from the parallel basic range searches, in order to determine the highest priority applicable rule, is shown in FIG. 8. In each node the next node is selected based on one bit that is taken either from the range token that is obtained from the basic range search in the X or Y dimension.  
     [0087] The differences of this longest-matching-prefix search tree as compared to other known LMP search trees (e.g. the one of FIG. 5) are: (a) Instead of a single search key, a pair of separate (partial) search keys is used as input. (b) Each entry in the search tree structure contains, in addition to the output indications (next entry to be used; rule identifier), also an indication from which one of the two (partial) input search keys the next control bit is to be taken. A further short description of the operation is given later.  
     [0088] For example, if the input to the classification operation is ‘located’ within the area [X6,Y3] in FIG. 6, then the following two range tokens would be the result of the parallel basic range search:  
     [0089] X dimension: 00 (X6)  
     [0090] Y dimension: 011 (Y3)  
     [0091] In FIG. 8, along the path through the data structure to rule 4, also rule 2 is found; however, since rule 4 corresponds to a longer rule prefix, rule 4 is selected, which is correct since rule 4 has a higher priority than rule 2.  
     [0092] Incremental Updating  
     [0093] Two examples will show how the classification data structure can be incrementally updated, for addition respectively removal of a rule. Incremental updates allow to quickly update the classification data structure in order to immediately reflect the new situation after the addition or removal of a rule. However, typically a more efficient structure is obtained when the entire data structure is build from scratch. In a practical system, this could be applied by regenerating the entire structure only after a fixed number of updates or after a certain period, and incrementally updating the data structure between these complete rebuilds.  
     [0094] Incremental addition of a rule  
     [0095] Basic ranges  
     [0096]FIG. 9 shows an example of the addition of a rule 5, to the original set of rules as shown in FIG. 2. In order to implement this new rule, the basic ranges X3 and Y1 are split into X3′ and X3″, and Y1′ and Y1″ respectively, to match the rule boundaries.  
     [0097] Primitive range hierarchy  
     [0098] The next step is to update the primitive range hierarchy that was shown in FIG. 3 and FIG. 4. This is shown in FIG. 10 and FIG. 11. The Y rule range of rule 5 (Y1″ and Y2) will be split into two primitive ranges 5a and 5b (because it partially overlaps with the already existing primitive range 4a). Primitive range 5a is merged with primitive range 4a now denoted as primitive range ‘4a,5b’, and primitive range 5a is added at layer 2. FIG. 11 shows the primitive range IDs. Primitive range 1a at layer 1 originally had only one subrange at layer 2, namely primitive range 4a. Primitive range 4a was assigned a one-bit primitive range ID equal to ‘0’. Now a second primitive range at layer 2, namely primitive range 5a, is added as subrange of primitive range 1a. Primitive range 5a can now be assigned directly the primitive range ID ‘1’, since not all the possible one-bit primitive range IDs had been assigned to all subranges at layer 2 of primitive range 1a. If this would not have been the case, then all the primitive range IDs of the subranges would have to be extended with one bit and reassigned. In that case, all the basic range IDs and rule prefixes that are affected by these primitive range IDs changes, have to be recalculated again and updated in the data structure.  
     [0099] It is therefore important for being able to perform incremental updates, that ‘spare’ primitive range IDs are kept throughout the primitive range hierarchy in order to limit the number of changes that have to be made for the addition of a new primitive range. Now a variable-length range token for the new basic range Y1″ can be derived in the same way as described in the first example. The basic range Y1′ will take over the range token of the original basic range Y1.  
     [0100] In FIG. 3 it can be seen that only 7 out of 8 possible three bit fixed sized range tokens have been assigned to basic ranges in the X dimension; only range token ‘000’ has not been assigned. This ‘spare’ range token will now be assigned to basic range X3′ while basic range X3″ is assigned the range token ‘011’ of the original basic range X3.  
     [0101]FIG. 10 shows the range tokens that now have been assigned to the basic ranges in the X and Y dimensions (above and at the right side of the rule/range diagram).  
     [0102] Rule prefixes  
     [0103] Based on the addition of rule 5 and the new basic ranges and range tokens the set of rule prefixes has to be updated in the following way:  
     [0104] Rule 5 covers the basic ranges X1, X2 and X3′ in the X dimension, and has a higher priority than rule 1. Therefore the following rule prefixes are added:  
                                                      00110      rule 5           00111      rule 5           01010      rule 5           01011      rule 5           00010      rule 5           00011      rule 5                      
 
     [0105] Basic ranges X3′ and X3″ inherit the rule prefixes related to the original basic range X3. Since basic range X3″ has the same range token ‘011’ as the original basic range X3, only the following rule prefixes that are related to the original basic range X3, have to be added for basic range X3′:  
                                                      000000      rule 1            0001      rule 1                      
 
     [0106] The total rule prefix list now becomes (in bold are the new rule prefixes):  
                               Rule Prefix                                                     1)   00100      rule 3            2)   00110      rule 5            3)   00111      rule 5            4)   01000      rule 3            5)   01001      rule 1            6)    0101      rule 1            7)   01010      rule 5            8)   01011      rule 5            9)   000000       rule 1           10)    0001      rule 1           11)   00010      rule 5           12)   00011      rule 5           13)   011000       rule 1           14)   01101      rule 1           15)    0111      rule 1           16)    1001      rule 1           17)    1000      rule 2           18)    1011      rule 1           19)   10110      rule 4           20)    1010      rule 2           21)   10101      rule 4           22)   11010      rule 4           23)    1100      rule 2           24)   11001      rule 4           25)    1110      rule 2                      
 
     [0107]FIG. 12 shows the corresponding updated version of the search tree structure of FIG. 5. Actually, FIG. 12 shows only the upper portion of the search tree structure, because in the lower portion, no updatings were necessary and it would be identical to the lower portion of the tree structure in FIG. 5.  
     [0108] Incremental deletion of a rule  
     [0109] The deletion of a rule from the existing structure is relatively easy. Such deletion just involves removing of all references to that rule from the longest-matching-prefix search tree structure. For example 2 would require removing four references to this rule for the tree shown in FIG. 5 (Example 1), or only removing one reference to this rule from the tree shown in FIG. 8 (Example 2).  
     [0110] Operation of the Search Trees  
     [0111] A short description is now given for the operation of the search trees which are shown schematically in FIG. 5, FIG. 8 and FIG. 12. Each of the circles in these search trees is a node which may be e.g. a group of entries in memory. Each node may include the following group of entries:  
     [0112] a) X or Y (input key to be evaluated)  
     [0113] b) Bit No. (key bit to be evaluated)  
     [0114] c) First Pointer to next node (if bit is zero)  
     [0115] d Second Pointer to next node (if bit is one)  
     [0116] e) Rule Identifier  
     [0117] The X or Y selection (field a) is only required if parallel partial search keys are used (FIG. 8). It is not required if a single input search key is used (FIG. 3 and FIG. 12). The bit number (field b) is not required if the evaluated bits are counted by the processor. A rule identifier is only stored in those nodes where it is actually required (cf. in FIG. 3 and FIG. 8).  
     [0118] The longest-matching-prefix lookup process in the search tree may include the following steps:  
     [0119] 1) Store the plural partial search keys (or the single search key).  
     [0120] 2) Set the bit counter(s) to zero (if bit counter(s) provided).  
     [0121] 3) Go to the entry node of the search tree.  
     [0122] 4) Get the bit indicated by the bit no. in entry (b) (or by the bit counter contents) from the input key indicated in entry (a), or from the single search key.  
     [0123] 5) Detect the binary value of this bit and depending on this value, either extract the first or second pointer from entries (c) and (d).  
     [0124] 6) Extract the rule identifier from entry (e) (if present) and buffer it.  
     [0125] 7) Detect whether the last bit of the current input key(s) was evaluated;  
     [0126] if yes: provide buffered rule identifier as output, or provide NIL output (if no rule identifier was buffered);  
     [0127] if no: (increase respective bit count by one, if available); go to next node in the search tree, using the pointer found in step (5), and repeat steps (4) to (7).  
     [0128] The search process ends and the last buffered rule identifier is provided as output if (a) a leaf node (end node) of the tree is reached, or if (b) for the next step, a bit would have to be evaluated from an input search key which is already exhausted.  
     TERMS LISTING  
     [0129] rule=one of plural different instructions for handling packets (or other items) depending on a classification in response to values of specific criteria they contain (rules are normally assigned priorities among each other)  
     [0130] rule diagram=a diagram in 2 (or n) dimensions showing the ranges of criteria values for which each of the rules is valid  
     [0131] basic range=each of the ranges in a rule diagram (=Xn/Yn) (generated by projecting all rule rectangle borders onto the rule diagram axes)  
     [0132] rule range=several basic ranges for which a rule is valid (generated by projecting the borders of one rule rectangle onto rule diagram axes)  
     [0133] rule order=sequence of rules according to priority or size etc.  
     [0134] rule identifier=result of classification operation (output of a final longest-matching-prefix lookup operation)  
     [0135] range token=a bit vector representing a basic range  
     [0136] criterion=a field in a packet (in an item) which is evaluated for classification (e.g. source address or destination address)  
     [0137] criterion value=actual value of criterion as contained in evaluated packet (item) also: input value or input parameter ( for classification)  
     [0138] search key=combination of range tokens for one particular point in the rule diagram, i.e. for one particular set of input values (used as input for longest-matching-prefix lookup to find associated rule identifier)  
     [0139] rule prefix=a prefix which is implemented in a longest-matching-prefix search tree and represents the path to an output, i.e. the path to a rule identifier  
     [0140] primitive range=one of plural ranges used for generating range tokens (may include one or several basic ranges) (primitive ranges are arranged in hierarchical layers)  
     [0141] primitive range identification=a single bit or a bit group for distinguishing primitive ranges within one layer