WO1998041922A1 - Accelerated hierarchical address filtering and translation - Google Patents

Accelerated hierarchical address filtering and translation Download PDF

Info

Publication number
WO1998041922A1
WO1998041922A1 PCT/US1998/003795 US9803795W WO9841922A1 WO 1998041922 A1 WO1998041922 A1 WO 1998041922A1 US 9803795 W US9803795 W US 9803795W WO 9841922 A1 WO9841922 A1 WO 9841922A1
Authority
WO
WIPO (PCT)
Prior art keywords
address
entry
priority
binary
memory
Prior art date
Application number
PCT/US1998/003795
Other languages
French (fr)
Inventor
David C. Feldmeier
Original Assignee
Music Semiconductors, Inc.
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Music Semiconductors, Inc. filed Critical Music Semiconductors, Inc.
Priority to AU64409/98A priority Critical patent/AU6440998A/en
Publication of WO1998041922A1 publication Critical patent/WO1998041922A1/en

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/903Querying
    • G06F16/90335Query processing
    • G06F16/90339Query processing by using parallel associative memories or content-addressable memories

Definitions

  • the present invention relates generally to data communication networks and, in particular, to a method and apparatus for performing accelerated hierarchical address filtering and translation.
  • Address translation is the process of mapping an address, such as the network address contained in a packet, to some desired information. Examples of desired information include determining the output port of a switch to which a packet is to be sent and determining the address of the next-hop router for the routing of Internet Protocol (IP) datagrams.
  • Address filtering is a process similar to address translation, except that rather than retrieving the data associated with an address, the process simply determines whether the address exists in a table of addresses.
  • address translation includes both address translation and address filtering operations.
  • addresses can be categorized as either flat addresses or hierarchical addresses.
  • Figs. 1A-1B illustrate examples of flat and hierarchical addresses.
  • Flat addresses are addresses that have no internal structure that can be used in protocol processing of the address .
  • Ethernet address 110 of Fig. 1A is an example of a flat address.
  • Ethernet addresses have a structure (e.g., one part of the address denotes the manufacturer of the equipment using that address) , that structure is not relevant to protocol processing operations, such as routing.
  • Many techniques have been developed for accelerating flat address translation. As these techniques are well known to those skilled in the art, they are not further discussed herein.
  • Hierarchical addresses are addresses that have an internal structure that can be used in protocol processing of the address. Examples of hierarchical addresses include Internet Protocol (IP) v.4 addresses, IP v.6 addresses, E.164 addresses (used in ATM network protocol processing), and telephone numbers.
  • IP Internet Protocol
  • IP v.4 addresses IP v.4 addresses
  • IP v.6 addresses E.164 addresses (used in ATM network protocol processing)
  • telephone numbers telephone numbers.
  • Telephone number 120 of Fig. IB is used to illustrate the internal structure of a hierarchical address.
  • the highest level of the hierarchy is denoted by area code 130, which is used to identify telephone numbers in area 135.
  • the next level of hierarchy is central office code 140, which is used to identify telephone numbers in central office zone 145.
  • the lowest level of the hierarchy is station number 150, which identifies the specific telephone subscriber 155 among those serviced by the station for central office zone 145.
  • the hierarchical structure of a telephone number is used when determining how to route a call through the telephone network. For example, if a call both originates and terminates in central office zone 145 (i.e., both the source and the destination numbers have central office code 140) ,' then the telephone call passes only through the central office for central office zone 145. If a call both originates and terminates in area 135 (i.e., both the source and destination numbers have area code 130) , no longdistance carrier is used to carry the call. Note that a flat address can be viewed as a hierarchical address with a single level of hierarchy. Thus, any address translation technique that operates on hierarchical addresses can also be applied to flat addresses.
  • Hierarchical addresses allow for processing of addresses without the need for storing information about all addresses to be processed.
  • Information about entire classes of addresses is stored in a single entry. For example, if a call originates within area 135 and terminates in an area having a different area code, the correct action is to forward the call to a long distance carrier, regardless of the area code of the destination telephone number. Thus, a single entry in the table determines the handling of any telephone call to an area code other than area code 130.
  • a look-up table is used to store various hierarchical addresses, each corresponding to a specific action to be taken in routing the call.
  • Fig. 2A illustrates a typical prior art routing table used to route calls originating in area 145.
  • entry A represents a hierarchical address that matches all telephone numbers in the "908" area code and the "979" central office code. This is accomplished by inserting don't care (X) values into the entries to indicate any valid value in the corresponding digit of the address compared to the entry. In other words, table entry "908-979-XXXX" matches all telephone numbers between "908-979-0000" and "908-979-9999".
  • entry B represents all telephone numbers in the "908" area code and the "852" central office code.
  • Entry C represents all telephone numbers in the "908" area code regardless of their central office code.
  • entry D represents all long distance telephone numbers. Any telephone number that is compared to the table entries matches one or more entries in the table (since all telephone numbers match entry D) . For the table to operate correctly, however, it is necessary for the correct matching entry to be returned.
  • the correct matching entry is the one at the lowest hierarchical level (i.e., the entry with the fewest X's) . For example, if the table is searched for the
  • the matching entries are A, C and D.
  • entry A is the correct matching entry having the lowest hierarchical rank and thus allowing for the most specific action (i.e., placing the call within the central office) .
  • Fig. 2B illustrates a switching table 200 which uses a PATRICIA tree to route calls originating in central office zone 145.
  • Telephone numbers are compared with table entries in order from top to bottom looking for a matching entry.
  • the telephone number is first compared to entry A. If the area code of the telephone number is "908," subentries A. a, A.b and A.c are searched; otherwise the telephone number is compared to entry B, the long distance point-of-presence entry, which matches all telephone numbers .
  • processing speed is typically slower than in equivalent hardware implementations and comparisons with table entries are typically performed in a sequential order.
  • a content addressable memory is a memory device that allows retrieval of information by specifying part of the stored information rather than by specifying a storage address. For example, if an entry "abed" were stored in a CAM, the CAM could be instructed to return the complete contents of all locations containing "ab” .
  • CAMs are sometimes referred to as associative memories. CAMs are generally classified as either binary or ternary CAMs. Binary CAMs store binary entries, while ternary CAMs store ternary entries. Binary entries are entries that contain only 0 or 1 values, while ternary entries are entries that contain 0, 1 or X (i.e., "don't care") values. Note that a single ternary entry can be expressed as two or more binary entries.
  • a single ternary entry “1X0” can be represented by two binary entries “110” and “100”
  • a single ternary entry “1XX” can be represented by four binary entries "100”, “101”, “110” and “111”, etc.
  • ternary CAMs require a smaller number of table entries to represent each hierarchical address than binary CAMs.
  • ternary CAMs require more complex hardware and are generally more expensive than binary CAMs .
  • CAMs may be implemented using a variety of techniques and technologies. One common technique is to search all CAM entries simultaneously in parallel to find the desired entry. Other techniques include hardware implementations of techniques commonly associated with software, such as hashing, serial search, binary search, and various search techniques based on a tree data structure. As these techniques are well known to those skilled in the art, they are not further discussed herein.
  • a first prior art technique relies on the intrinsic priority encoding of entries stored in a CAM. Since the order in which entries are retrieved from a CAM can be predicted based on the location of the entries, address routing operations can be implemented by first storing the addresses in the table into the CAM in a given order and then searching the table for the address, as shown in Fig. 3A. In Fig. 3A, the addresses are first stored in the CAM in reverse hierarchical order in stage 310. The CAM is then searched for the address in stage 320. Since the entries are returned in reverse hierarchical order, the first matching entry returned by the search is the one with the lowest hierarchical rank, which is also the correct matching entry.
  • Fig. 2C illustrates the table of Fig. 2A augmented by a priority field added to each entry.
  • the priority field is used to represent the hierarchical order of the entries and allows the CAM to be searched in hierarchical order without requiring all entries to be re-sorted when a new entry is added to the CAM. For example, in Fig. 2C, entry D, which matches all telephone numbers, has the highest hierarchical level 1.
  • Hierarchical addresses can be directly stored in ternary CAMs, in order to be stored in binary CAMs they must first be translated into binary format. As discussed above, a ternary address can be translated into two or more binary addresses. However, the number of binary addresses needed to represent a ternary address is 2 m where m is the number of don't care digits in the ternary address. For example, ternary address "908-979-XXXX" would be translated into 10,000 binary addresses, "908-979-0000" through "908-979-9999". As the cost of CAMs is dependent on the number of entries they can store, the number of binary addresses needed to represent large hierarchical addresses renders this solution undesirable.
  • the McAuley article proposes translating a ternary hierarchical address into a binary address and a binary priority mask, as shown in Fig. 4A.
  • the binary address has a 1 in the positions in which the ternary address has a 1, and 0s in the other positions.
  • the mask contains a 0 in the positions in which the ternary address has an X, and Is in the other positions.
  • each bit in the binary address together with a corresponding bit in the priority mask, accurately indicates the value of a corresponding bit in the ternary entry, as shown in Fig. 4A.
  • the binary addresses are stored in the CAM, while the binary masks indicate which bits of the stored addresses are compared to the search address during searches of the CAM. As only one binary address is generated for each ternary address, the size of the CAM is greatly reduced.
  • ternary addresses In order for values to be correctly stored in the binary CAM, ternary addresses must be translated into unique binary addresses.
  • Fig. 4B shows two ternary entries that generate the same binary address, albeit with different masks. If more than one ternary value is translated into a single binary address stored in the CAM, only one set of data can be stored in the CAM (in the location of the binary address) and thus only one ternary address can be correctly translated. This problem is remedied by treating certain ternary values as invalid to ensure that all ternary values are translated into unique binary addresses. For example, in IP v.4, 0 is not a legal value for the lowest level of the hierarchical address .
  • a second prior art technique consists of searching a binary CAM for portions of an address specified by a priority mask, as shown in Fig. 3B .
  • a binary CAM is first searched for a binary address using a binary priority field at the lowest hierarchical level (i.e., the most specific hierarchical level) in stage 340.
  • Stage 345 determines whether the search found any matching entries, in which case the first of the matching entries is retrieved in stage 355; otherwise the CAM is searched again for the same address and a priority field at the next higher hierarchical level .
  • the first matching entry is the correct matching entry, as it has the lowest hierarchical level of any matching entry.
  • a third prior art technique uses a ternary CAM in place of a binary CAM to reduce the number of searches of the CAM needed in the worst case to find a matching entry.
  • a ternary CAM is a binary CAM that can handle "don't care" values (represented by the symbol X) which match both 1 and 0 values. This technique is illustrated in Fig. 3C. Unlike with binary CAMs, ternary addresses are stored in the ternary CAM together with the corresponding binary priority fields representing the hierarchical level of the addresses .
  • the ternary CAM is then searched with an address to be translated and a priority field in which all bits, except for the most significant bit, have a don't care value. After each search, a don't care bit of the priority field is replaced by a 1 or a
  • the ternary CAM is first searched for an address and a priority field having a 1 in the most significant bit position and an X in all other bit positions, in stage 360.
  • Stage 365 determines if there are any matching entries, in which case the operation proceeds to stage 375; otherwise the least significant bit in the priority field having a value of
  • Stage 375 determines whether any bits of the priority field have a value of X, in which case the most significant bit in the priority field having a value of X is replaced by a value of 1 in stage 380.
  • the CAM is then searched for the address and the modified priority field, in stage 385.
  • Stage 390 determines whether there is a single matching entry, in which case the matching entry is retrieved from the CAM in stage 395; otherwise stages 365-390 are repeated until the test of stage 390 is satisfied and the operation terminates.
  • one X is resolved (i.e. replaced by a 1 or a 0) after each search until a matching entry is found.
  • This technique requires in the worst case a number of searches equal to the number of bits used to represent the priority field (i.e., if N is the number of hierarchical levels represented by the priority field, log 2 N searches are required to find a matching entry at the lowest hierarchical level, as all bits of the priority mask must be resolved) .
  • the invention provides methods and apparata for performing hierarchical address translation using either binary or ternary CAMs which require a lower number of searches of the CAM than prior art techniques .
  • a method and apparatus are provided for translating a ternary hierarchical address using a binary CAM that require in the worst case only log 2 N searches of the CAM, where N is the number of hierarchical levels of the hierarchical address, and only requires one entry to be stored in the CAM for each hierarchical address.
  • Prior art techniques for translating hierarchical addresses using a binary CAM either require N searches of the CAM to be performed in the worst case or multiple table entries to be stored in the CAM for each hierarchical address.
  • each ternary hierarchical address into a binary address and a binary priority mask and storing the binary addresses in the binary CAM.
  • a binary search of the priority masks is then performed by searching the CAM with a priority mask and choosing a next priority mask depending on the results of the search of the CAM until a correct matching entry (i.e., the matching entry with the lowest hierarchical level) is found.
  • a further method and apparatus are provided for performing hierarchical address translation using a ternary CAM that require only a fixed number (2, or 1 when pipelined) of searches of the CAM, independent of the number of hierarchical addresses or of the number of hierarchical levels of the address .
  • Prior art techniques for translating hierarchical addresses using ternary CAMs require in the worst case log 2 N searches of the CAM.
  • the number of searches of the CAM required to translate an address is always 2 (1 if the searches are pipelined) regardless of the number of addresses stored in the CAM or of the number of hierarchical levels represented by the priority field.
  • a method and apparatus are also provided for performing hierarchical address translation using a memory and a CAM that require only a single search of the memory once the address has been translated using the CAM. This is achieved by storing a hierarchical address translated using the CAM in the memory and using the memory to perform successive hierarchical address translations. Unlike prior art techniques that required multiple searches of the CAM, once the address has been translated, this technique only requires one search of the CAM for successive translations of that address .
  • Fig. 1A illustrates an example of a prior art flat address .
  • Fig. IB illustrates an example of a prior art hierarchical address .
  • Fig. 2A illustrates a typical prior art routing table used to route calls originating in a calling area.
  • Fig. 2B illustrates a switch which uses a PATRICIA tree to route calls originating in a central office zone.
  • Fig. 2C illustrates the table of Fig. 2A augmented by a priority field added to each entry.
  • Fig. 3A is a flow diagram of a prior art technique for translating hierarchical addresses using a CAM.
  • Fig. 3B is a flow diagram of a different prior art technique for translating hierarchical addresses using a binary CAM.
  • Fig. 3C is a flow diagram of yet another prior art technique for translating hierarchical addresses using a ternary CAM.
  • Fig. 4A illustrates multiple prior art ternary entries of a switching table and their respective encoding as pairs of binary addresses and binary masks.
  • Fig. 4B illustrates two ternary entries of a switching table that are encoded as a same binary address, but different binary masks.
  • Fig. 5 is a flow diagram of a hierarchical address translation operation using a binary CAM, according to one embodiment of the invention.
  • Fig. 6A illustrates multiple entries of an IP routing table used in an hierarchical address translation operation, according to one embodiment of the invention.
  • Fig. 6B shows the order in which the table entries of Fig. 6A are stored in a CAM.
  • Figs. 6C-6F illustrate the results produced by successive searches of the CAM for various addresses during the hierarchical address translation operation of Fig. 5.
  • Fig. 7 is a schematic diagram of a circuit for performing the hierarchical address translation operation of Fig. 5.
  • Fig. 8 illustrates a plurality of ternary table entries augmented by an N-bit priority field, where N is the number of priority levels stored in the table, according to one embodiment of the invention.
  • Fig. 9 is a flow diagram of an hierarchical address translation operation using a ternary CAM, according to one embodiment of the invention.
  • Figs. 10A-10B are schematic diagrams of a circuit during the hierarchical address translation operation of Fig. 9.
  • Fig. 11 is a flow diagram of a hierarchical address translation operation using a cache CAM, according to one embodiment of the invention.
  • Fig. 12 is a block diagram of a circuit during the hierarchical address translation operation of Fig. 11.
  • Fig. 13 is a block diagram of an IP router circuit, according to one embodiment of the invention.
  • Fig. 14 is a block diagram of a network firewall circuit, according to one embodiment of the invention.
  • Fig. 15 is a block diagram of a network switch circuit, according to one embodiment of the invention.
  • Fig. 16 illustrates an input port and a switch control processor element of the circuit of Fig. 15 in greater detail.
  • a content addressable memory is used to improve the performance of hierarchical address translation systems .
  • ternary hierarchical address values are stored in a binary CAM by breaking the ternary address into two components: a binary address and a priority mask.
  • the binary address has a 1 in the positions in which the ternary address has a 1, and 0s in the other positions.
  • the mask contains a 0 in the positions in which the ternary address has an X, and Is in the other positions.
  • one embodiment of the invention provides a method of translating hierarchical addresses using a binary CAM that only requires log 2 N searches of the CAM, where N is the number of hierarchical levels of the address. This is accomplished by first ordering priority masks so that a mask with m trailing zeros is used in a search before a mask with n trailing zeros, where m ⁇ n.
  • one embodiment of the present invention searches the CAM using a binary search technique, as shown in Fig. 5.
  • a binary search technique as shown in Fig. 5.
  • the priority masks are not used in hierarchical order, but rather according to the their position in a binary search tree.
  • the search is repeated with a priority mask with a higher hierarchical level until a single matching entry (or no matching entry, in which case the correct matching entry is the first matching entry generated by the previous search) is found.
  • the CAM is searched with a priority mask that has a median value of all masks in the list, in stage 500.
  • Stage 510 determines if more than a single match is found, in which case the mask of the desired address is in the first half of the list, and the CAM is searched again with a mask that has a median value of all masks in the first half of the list, in stage 520. Otherwise stages 510-520 are repeated until either a single match or no matches are found.
  • Stage 530 determines whether the search produced no matches, in which case the mask of the desired addresses is in the second half of the list, and the CAM is searched with a mask that has a median value of all masks in the second half of the list, in stage 540. Otherwise stages 530-540 are repeated until at least one matching entry is found. The matching entry is then retrieved from the CAM in stage 550. Note that in some cases a search that generated multiple matching entries is followed by a search that generates no matching entries. In this case, the desired entry is the first matching entry generated by the last search in which multiple matches were found. It is for this case that the order of CAM entries is important. Address entries are stored in the CAM such that the addresses with masks with the largest number of trailing zeros are stored first.
  • Figs. 6A-6F illustrate an example of the a hierarchial address translation operation of Fig. 5 performed on an IP v.4 address.
  • Fig. 6A shows four ternary entries that are to be stored in the CAM, along with their respective binary addresses and masks. For convenience, all entries in Figs. 6A-6F are shown as hexadecimal, rather than binary, digits.
  • the binary entries are stored in the CAM in the order shown in Fig. 6B . Note that the address of entry D (Fig. 6A) which has the largest number of trailing 0s (four) is stored in the first location of the CAM, followed by the address of entry C which has the second largest number of trailing 0s (three), etc.
  • Fig. 6C illustrates the results of a search for address "8C FC 0D 23".
  • the CAM is searched with mask 610, generating matches on entries 0, 2 and 3 (Fig. 6B) .
  • the search is repeated with mask 620, generating matches on entries 2 and 3.
  • the search is repeated again with mask 630, generating a single matching entry, entry 3, which is the desired entry.
  • Fig. 6D illustrates the results of a search for address "8C FC 0D 42".
  • the first two searches are analogous to the ones illustrated in Fig. 6C; however, the search with mask 630 generates no matching entries. Accordingly, the desired entry is the first matching entry returned by the previous search, namely entry 2.
  • Fig. 6E illustrates the results of a search for address "8C FC 53 42".
  • the first search with mask 610 produces a single matching entry, entry 1, which is also the desired entry.
  • Fig. 6F illustrates the results of a search for address "8C FC A3 42".
  • the first search with mask 610 produces no matching entries, therefore a second search is performed with mask 640, generating multiple matching entries, entries 0, 1, 2 and 3. Accordingly, the desired entry is the first matching entry, namely entry 0.
  • a circuit according to one embodiment of the present invention comprises a CAM 700 and a controller 710.
  • Mask values for searching the CAM are stored in a sequential binary tree arrangement depending on their hierarchical level in a register bank of the CAM 700 to simplify the logic required to traverse the tree.
  • the mask at the root of the tree (which has a median hierarchical level of all masks stored in the tree) is stored in the first register and all other masks are stored so that for each mask at a node of the tree stored in register n, its immediate descendants in the tree are stored in registers 2n and 2n+l, respectively.
  • a register 720 holds a value of an address 730 that is compared to the entries stored in CAM 700.
  • a register 740 holds a value of an entry read from CAM 700.
  • Controller 710 receives input signals from CAM 700 over a bus and transmits control signals over separate buses to register 750, shifter 760, adder 770 and multiplexers 780 and 790.
  • Register 750 is initially loaded with a one value to point to the first register of the CAM which stores a mask at the root of the tree (i.e., the mask having a median hierarchical level of all masks stored in the tree) .
  • the priority field is then routed to CAM 700.
  • the contents of CAM 700 are then searched for a match on address 730 and the initial priority mask. If one or more matches are generated, the matching entry is stored in register 740. If more than one match occurs, the value of the priority mask index stored in register 750 is routed to shifter 760 and multiplied by two. Since the binary search tree is stored in sequential order, this operation has the effect of pointing the priority mask index to the next node of the binary search tree .
  • the priority mask index value generated by shifter 760 is then routed to adder 770 together with an output of multiplexer 780, which is in turn connected to a logical one source, a logical zero source and is controlled by controller 710.
  • Adder 770 then adds either a zero or a one to the priority mask index value generated by shifter 760 as necessary to generate a new priority mask index value which is then stored back into register 750, through multiplexer 790.
  • adding a zero or a one to the priority mask index has the effect of following one of the two branches at a node of the binary search tree.
  • Multiplexer 790 is also connected to a logical one source and is controlled by controller 710.
  • a table of hierarchical addresses can be directly stored in a ternary CAM. Multiple CAM entries, however, may match the hierarchical address being translated. Generally, CAMs allow only a single match result to be read at any one time. To maximize the speed of address translation operations, it is desirable to have the first match result that is read from the CAM be the desired match result.
  • Prior art techniques solve this problem by using a priority encoder provided by some CAMs to allow multiple matches to be read out one at a time. The priority encoder determines the order in which the matches are read from the CAM based on where the entry is stored in the CAM. Entries are written into the CAM in such a way that the desired entry is always the first entry read.
  • a priority field may be added to every entry stored in the ternary CAM.
  • the priority field is used in searching the ternary CAM for an address.
  • Fig. 8 illustrates four entries stored in a ternary CAM to which a priority field has been added to indicate a hierarchical level of the address.
  • Prior art techniques search a ternary CAM storing hierarchical addresses by performing a binary search of the priority fields.
  • a binary search requires in the worst case log 2 N searches, where N is the number of priority levels of the address.
  • the ternary CAM is pipelined to provide address resolution in a single cycle or, if no pipeline is used, in a fixed number of cycles independent of the number of priority levels of the address.
  • the priority field is translated into a bit mask (a sequence of 0s and Is in which each bit indicates whether an action is to be performed on a corresponding element of a sequence to which the mask is applied) representation where N bits of the priority field are used to represent N priority levels of the address in stage 900. Accordingly, each priority field has N bits, only one of which has a value of 1.
  • a first search of the CAM for (908) 979-1035 generates matches on entries A, C and D (Fig. 8) .
  • Stage 920 determines whether there are multiple matching entries, in which case all matching entries output the value of their priority fields simultaneously so that the logical OR function of the values can be computed, in stage 930.
  • the logical OR of the values of the priority fields of entries A, C and D is "111". Since priority fields are encoded so as to contain only a single 1, it follows that "100" is the value of the highest priority field of any matching entry.
  • the CAM is then searched for the combination of address (908) 979-1035 and priority field "100" in stage 940, generating a single matching entry A. Entry A is then retrieved from the CAM in stage 950. Each time an entry is written into the CAM, both an entry value and a priority value are provided. Internal to the device, the priority value is expanded such that no priority value contains more than a single bit . This is accomplished by encoding P levels of priority as a 2 P binary values. For example, consider a device with four levels of priority from the user's point of view: "00", “01", "10", and "11". Internally, the priorities would be represented as: “0001", “0010”, “0100", and "1000".
  • Figs. 10A-10B illustrate a circuit for performing the operation of Fig. 9.
  • Fig. 10A shows a first cycle of the operation of Fig. 9.
  • a comparand 1000 (the address that is being searched for in the CAM) is used to drive the bit lines 1010 of the elements of CAM 1020.
  • a comparand 1000 (the address that is being searched for in the CAM) is used to drive the bit lines 1010 of the elements of CAM 1020.
  • comparand 1000 the address that is being searched for in the CAM
  • FIGs. 10A-10B For illustrative purposes, only four elements of CAM 1020 are shown in Figs. 10A-10B. However, the invention is not limited by any number of CAM elements and can be implemented using a CAM having an arbitrary number of elements.
  • Any element of CAM 1020 that matches comparand 1000 asserts its match line 1030 and enables an associated priority CAM 1040.
  • Any other suitable type of memory such as an SRAM can be used in place of priority CAM 10
  • priority encoder 1060 is used to select the highest priority value. For example, assume that the matching entries have priorities of "0100" and "0010". The output of the logical OR function of the priority values is "0110". Priority encoder 1060 then determines that highest priority 1070 is "0100" and the first cycle of the operation of Fig. 9 terminates.
  • Fig. 10B shows the second cycle of operation of Fig. 9.
  • both comparand 1000 and highest priority 1070 are input into the CAM.
  • the appropriate match line 1080 is enabled and address encoder 1090 outputs the address of the matching entry of CAM 1020.
  • a two- cycle operation has been described for simplicity, the operation can be performed in one cycle.
  • multiple operations of Fig. 9 can be pipelined so that cycle 1 of a first operation is performed simultaneously with cycle 2 of a second operation, allowing CAM 1000 to perform operations at a rate of one cycle per operation.
  • N-l bits are used to represent N priority levels of the address rather than N bits. This is achieved by encoding the highest priority level as all 0s. If a match occurs and the output of the logic OR circuit is all 0s, the match has the highest priority field.
  • a CAM is used to cache the results of previous hierarchical address translations as flat or hierarchical addresses, as illustrated by the flow diagram of Fig. 11.
  • Fig. 11 illustrates the process of performing an address translation according to one embodiment of the invention.
  • the CAM is checked for the address in stage 1110. If the address is found in stage 1120, the associated data is retrieved form the CAM in stage 1130 and the operation proceeds with stage 1160. If the address is not found, a hierarchical address translation, according to any technique known in the art or described herein, is performed in stage 1140. The hierarchical address and the results of the address translation are then stored in the CAM in stage 1150.
  • the results of the translation are made available for packet processing in stage 1160.
  • the advantage of this approach is that once an address has been translated, packet processing can proceed at a higher speed than the native speed of the hierarchical address translation technique employed, since the translation data can simply be retrieved from the CAM. This technique is particularly advantageous in applications in which a limited number of addresses is repeatedly translated.
  • Fig. 12 shows a circuit that can be used to implement the operation of Fig. 11.
  • cache module 1200 comprises a queue 1210 and a CAM 1220.
  • CAM 1220 can be either a binary or a ternary CAM.
  • Cache module 1200 communicates with address lookup module 1230. '
  • address lookup module 1230 During an address translation operation, an address is queued on queue 1210. Queue 1210, in turn, processes lookups of CAM 1220. If the lookup of CAM 1220 does not return a matching entry, the address is provided to address lookup module 1230. Lookup module 1230 then translates the address and the result of the address translation is stored in CAM 1220. After the translated address is stored in CAM 1220, subsequent translations of that address can thus be performed simply by a lookup of CAM 1220.
  • this embodiment of the invention requires that the CAM store only addresses that are currently active. Entries in the CAM may be timestamped to allow removal of inactive entries to minimize the size of the CAM. The timestamp indicates the time at which the entry has been most recently accessed. If the entry has not been accessed recently, it becomes a candidate for removal from the CAM.
  • CAM may be temporarily out of date during background processing of table updates; however this method is advantageous for applications in which table entries are updated infrequently, as it limits the overhead caused by updating the entries.
  • Yet another approach consists of performing table lookups in parallel with CAM lookups. If packets are arriving at a modest speed, the CAM is updated continuously. During periods of heavy traffic, the CAM may fall out of step as table lookup falls behind. However, for applications in which data traffic is bursty, this approach represents a good compromise, as it allows the CAM to be updated between bursts of traffic, thereby limiting the overhead caused by the updates .
  • Figs. 13-16 illustrate applications that take advantage of the hierarchical address translation techniques described above.
  • Fig. 13 illustrates an internet protocol datagram router, according to one embodiment of the invention.
  • Data packets transmitted over the internet are typically routed through a chain of network routers in between their origin and destination. Each router receives the packet and translates its destination address into the address of the next router in the chain to which the packet is to be transmitted.
  • a packet received over a network connection 1300 is initially stored in input packet queue 1310. The packet is then routed to address extraction module 1320 and to an input line of demultiplexer 1330.
  • Address extraction module 1320 extracts a portion of the packet representing an address to which the packet is to be routed. The address extracted by address extraction module 1320 is then routed to IP address lookup 1340.
  • IP address lookup 1340 is an apparatus for performing hierarchical address translation according to an embodiment of the invention.
  • the contents of an entry stored in IP address lookup 1340 and matching the address is then routed to a control port 1335 of demultiplexer 1330.
  • Demultiplexer 1330 routes the packet received from input packet queue 1310 to one of output packet queues 1350, 1360 or 1370 depending on the signal received from IP address lookup 1340.
  • the output queue in which the packet is stored routes the packet to the one of networks 1355, 1365 or 1375 to which it is connected.
  • Fig. 14 illustrates a network firewall device according to one embodiment of the invention.
  • Network firewalls are circuits used to allow data packets to be transmitted only to certain destination and to discard packets being transmitted to other destinations.
  • a packet received over a network connection 1400 is initially stored in input packet queue 1410.
  • the packet is then routed to address extraction module 1420 and to an input line of demultiplexer 1430.
  • Address extraction module 1420 extracts a portion of the packet representing an address to which the packet is to be routed.
  • the address extracted by address extraction module 1420 is then routed to network address lookup 1440.
  • Network address lookup 1440 is an apparatus for performing hierarchical address translation according to an embodiment of the invention. The contents of an entry stored in network address lookup 1440 and matching the address is then routed to a control port 1435 of demultiplexer 1430.
  • Demultiplexer 1430 routes the packet received from input packet queue 1410 to either output packet queue 1450 or to discard line 1460 depending on the signal received from network address lookup 1440.
  • Output packet queue 1450 in turn, routes the packet to network 1470 to which it is connected.
  • FIGs. 15-16 illustrate a network switch according to one embodiment of the invention.
  • a network switch is a circuit used to route a data packet transmitted by one device connected to the network to a second device connected to the network.
  • Network switches may be used to dynamically change the routing of data packets in between their origin and destination to evenly distribute network traffic.
  • a switch control processor 1500 is connected to a plurality of input ports 1510 (of which only four are shown for clarity) and to a switch fabric 1520.
  • Input ports 1510 are connected to a set of input lines of switch fabric 1520.
  • a set of output ports of switch fabric 1520 is in turn connected to a plurality of output ports 1530.
  • Fig. 16 illustrates one of input ports 1510 and switch control processor 1500 in greater detail.
  • Input port 1510 comprises an input queue 1600 connected to an extract packet type module 1610 and to a demultiplexer 1620.
  • Extract packet module 1610 controls which output line of demultiplexer 1620 the packet is routed to. If the packet type is a signalling packet, the packet is routed to input queue 1670 of switch control processor 1500. Otherwise, the packet is routed to extract connection ID module 1630 and to prefix output port number module 1640.
  • Extraction connection ID module 1630 extracts a connection ID from the packet and routes it to switch table 1650.
  • Switch control processor 1500 comprises an input queue 1670 connected to an extract connection ID module 1660 and to an extract address module 1680, which is in turn connected to a network address lookup 1690.
  • Extract connection ID module 1660 extracts a connection ID from the packet and routes it to switch table 1650 of input port 1510.
  • Extract address module 1680 extracts an address from the packet and routes it to network address lookup 1690.
  • Network address lookup 1690 is an apparatus for performing hierarchical address translation according to an embodiment of the present invention.
  • Network address lookup 1690 translates the address received from extract address module 1680 into an output port number which is routed back to switch table 1650 of input port 1510.
  • Switch table 1650 is a device for performing flat address translation of connection IDs to output port numbers.
  • the output port number is stored in switch table 1650 and then routed to prefix output port number module 1640. Finally, prefix output port number module 1640 prepends (i.e., inserts in front of the packet) the output port number to the packet and routes it to the switch fabric 1520 (Fig. 15) . Switch fabric 1520 then routes the packet to the appropriate output port 1530, depending on the value of the packet received from input port 1510.
  • Embodiments described above illustrate but do not limit the invention.
  • the invention is not limited by any particular hardware implementation. Any suitable technique can be used for implementing
  • CAMs CAMs.
  • the invention is not limited to any specific size of the CAM.
  • a hardware implementation of the embodiments of the present invention has been described for clarity, the embodiments can be implemented using any combination of software and hardware.
  • some embodiments are implemented by a programmed computer executing the operations of Figs. 5, 9 and 11.
  • Other embodiments and variations are within the scope of the invention, as defined by the following claims.

Abstract

A method and apparatus are provided for performing hierarchical address translation by translating each ternary hierarchical address into a binary addresses and a binary priority mask and storing the binary addresses in the binary CAM. A binary search of the priority masks is then performed by searching the CAM with a priority mask and choosing a next priority mask depending on the results of the search of the CAM until a correct matching entry (i.e., the matching entry with the lowest hierarchical level) is found. This technique only requires log2N searches of the CAM, where N is the number of hierarchical levels represented by the priority field. A method and apparatus are also provided for performing hierarchical address translation by storing table entries including a priority field in a ternary CAM and performing only a fixed number of searches of the CAM. Finally, a method and apparatus are plrovided for storing a translated hierarchical address in a cache CAM and using the cache CAM to perform successive hierarchical address translations.

Description

ACCELERATED HIERARCHICAL ADDRESS FILTERING AND
TRANSLATION
BACKGROUND OF THE INVENTION Field of the invention
The present invention relates generally to data communication networks and, in particular, to a method and apparatus for performing accelerated hierarchical address filtering and translation.
Description of Related Art
Address translation is the process of mapping an address, such as the network address contained in a packet, to some desired information. Examples of desired information include determining the output port of a switch to which a packet is to be sent and determining the address of the next-hop router for the routing of Internet Protocol (IP) datagrams. Address filtering is a process similar to address translation, except that rather than retrieving the data associated with an address, the process simply determines whether the address exists in a table of addresses. The term address translation, as used herein, includes both address translation and address filtering operations.
With respect to routing, addresses can be categorized as either flat addresses or hierarchical addresses. Figs. 1A-1B illustrate examples of flat and hierarchical addresses. Flat addresses are addresses that have no internal structure that can be used in protocol processing of the address . Ethernet address 110 of Fig. 1A is an example of a flat address. Although Ethernet addresses have a structure (e.g., one part of the address denotes the manufacturer of the equipment using that address) , that structure is not relevant to protocol processing operations, such as routing. Many techniques have been developed for accelerating flat address translation. As these techniques are well known to those skilled in the art, they are not further discussed herein.
Hierarchical addresses are addresses that have an internal structure that can be used in protocol processing of the address. Examples of hierarchical addresses include Internet Protocol (IP) v.4 addresses, IP v.6 addresses, E.164 addresses (used in ATM network protocol processing), and telephone numbers.
Telephone number 120 of Fig. IB is used to illustrate the internal structure of a hierarchical address. Consider telephone number 120. The highest level of the hierarchy is denoted by area code 130, which is used to identify telephone numbers in area 135. The next level of hierarchy is central office code 140, which is used to identify telephone numbers in central office zone 145. The lowest level of the hierarchy is station number 150, which identifies the specific telephone subscriber 155 among those serviced by the station for central office zone 145.
The hierarchical structure of a telephone number is used when determining how to route a call through the telephone network. For example, if a call both originates and terminates in central office zone 145 (i.e., both the source and the destination numbers have central office code 140) ,' then the telephone call passes only through the central office for central office zone 145. If a call both originates and terminates in area 135 (i.e., both the source and destination numbers have area code 130) , no longdistance carrier is used to carry the call. Note that a flat address can be viewed as a hierarchical address with a single level of hierarchy. Thus, any address translation technique that operates on hierarchical addresses can also be applied to flat addresses.
Hierarchical addresses allow for processing of addresses without the need for storing information about all addresses to be processed. Information about entire classes of addresses is stored in a single entry. For example, if a call originates within area 135 and terminates in an area having a different area code, the correct action is to forward the call to a long distance carrier, regardless of the area code of the destination telephone number. Thus, a single entry in the table determines the handling of any telephone call to an area code other than area code 130.
In order to translate a specific telephone number into an action to be performed in the protocol processing of a call, a look-up table is used to store various hierarchical addresses, each corresponding to a specific action to be taken in routing the call.
Fig. 2A illustrates a typical prior art routing table used to route calls originating in area 145. In Fig. 2A, entry A represents a hierarchical address that matches all telephone numbers in the "908" area code and the "979" central office code. This is accomplished by inserting don't care (X) values into the entries to indicate any valid value in the corresponding digit of the address compared to the entry. In other words, table entry "908-979-XXXX" matches all telephone numbers between "908-979-0000" and "908-979-9999". Likewise, entry B represents all telephone numbers in the "908" area code and the "852" central office code. Entry C, in turn, represents all telephone numbers in the "908" area code regardless of their central office code. Finally, entry D represents all long distance telephone numbers. Any telephone number that is compared to the table entries matches one or more entries in the table (since all telephone numbers match entry D) . For the table to operate correctly, however, it is necessary for the correct matching entry to be returned. The correct matching entry is the one at the lowest hierarchical level (i.e., the entry with the fewest X's) . For example, if the table is searched for the
(908) 979-1035 telephone number, the matching entries are A, C and D. However, entry A is the correct matching entry having the lowest hierarchical rank and thus allowing for the most specific action (i.e., placing the call within the central office) .
Current methods for translating hierarchical addresses are implemented in software and use tree structures, such as PATRICIA trees. PATRICIA trees are described on pages 481-493 of "The Art of Computer Programming, Vol. 3 : Searching and Sorting" by Donald E. Knuth (Reading, MA: Addison Wesley, 1973) , which is herein incorporated by reference in its entirety. Fig. 2B illustrates a switching table 200 which uses a PATRICIA tree to route calls originating in central office zone 145.
Telephone numbers are compared with table entries in order from top to bottom looking for a matching entry. The telephone number is first compared to entry A. If the area code of the telephone number is "908," subentries A. a, A.b and A.c are searched; otherwise the telephone number is compared to entry B, the long distance point-of-presence entry, which matches all telephone numbers .
This approach, however, is limited by the constraints of a software implementation: processing speed is typically slower than in equivalent hardware implementations and comparisons with table entries are typically performed in a sequential order.
Several techniques that utilize content addressable memories (CAMs) for searching a routing table are discussed in "Fast Routing Table Lookup Using CAMs" by Anthony J. McAuley and Paul Francis (1993 INFOCOM Proceedings) [hereinafter "the McAuley article"], which is herein incorporated by reference in its entirety. Prior art techniques, such as those described in the McAuley article, are summarized in Figs. 3A-3C.
A content addressable memory (CAM) is a memory device that allows retrieval of information by specifying part of the stored information rather than by specifying a storage address. For example, if an entry "abed" were stored in a CAM, the CAM could be instructed to return the complete contents of all locations containing "ab" . CAMs are sometimes referred to as associative memories. CAMs are generally classified as either binary or ternary CAMs. Binary CAMs store binary entries, while ternary CAMs store ternary entries. Binary entries are entries that contain only 0 or 1 values, while ternary entries are entries that contain 0, 1 or X (i.e., "don't care") values. Note that a single ternary entry can be expressed as two or more binary entries. In other words, a single ternary entry "1X0" can be represented by two binary entries "110" and "100", or a single ternary entry "1XX" can be represented by four binary entries "100", "101", "110" and "111", etc.
As hierarchical addresses often comprise ternary values (e.g. "908-979-XXXX" ) , ternary CAMs require a smaller number of table entries to represent each hierarchical address than binary CAMs. However, ternary CAMs require more complex hardware and are generally more expensive than binary CAMs .
CAMs may be implemented using a variety of techniques and technologies. One common technique is to search all CAM entries simultaneously in parallel to find the desired entry. Other techniques include hardware implementations of techniques commonly associated with software, such as hashing, serial search, binary search, and various search techniques based on a tree data structure. As these techniques are well known to those skilled in the art, they are not further discussed herein.
The advantages of using CAMs for hierarchical address translation are higher performance and better price/performance ratio than using existing techniques. A first prior art technique relies on the intrinsic priority encoding of entries stored in a CAM. Since the order in which entries are retrieved from a CAM can be predicted based on the location of the entries, address routing operations can be implemented by first storing the addresses in the table into the CAM in a given order and then searching the table for the address, as shown in Fig. 3A. In Fig. 3A, the addresses are first stored in the CAM in reverse hierarchical order in stage 310. The CAM is then searched for the address in stage 320. Since the entries are returned in reverse hierarchical order, the first matching entry returned by the search is the one with the lowest hierarchical rank, which is also the correct matching entry.
This technique, however, is not very useful in practice since it requires all the entries in the CAM to be sorted every time a new entry is added to preserve the inverse hierarchical ordering. To remedy this problem, the McAuley article proposes adding a priority field to table entries, as shown in Fig. 2C. Fig. 2C illustrates the table of Fig. 2A augmented by a priority field added to each entry. The priority field is used to represent the hierarchical order of the entries and allows the CAM to be searched in hierarchical order without requiring all entries to be re-sorted when a new entry is added to the CAM. For example, in Fig. 2C, entry D, which matches all telephone numbers, has the highest hierarchical level 1.
While hierarchical addresses can be directly stored in ternary CAMs, in order to be stored in binary CAMs they must first be translated into binary format. As discussed above, a ternary address can be translated into two or more binary addresses. However, the number of binary addresses needed to represent a ternary address is 2m where m is the number of don't care digits in the ternary address. For example, ternary address "908-979-XXXX" would be translated into 10,000 binary addresses, "908-979-0000" through "908-979-9999". As the cost of CAMs is dependent on the number of entries they can store, the number of binary addresses needed to represent large hierarchical addresses renders this solution undesirable.
To solve this problem, the McAuley article proposes translating a ternary hierarchical address into a binary address and a binary priority mask, as shown in Fig. 4A. The binary address has a 1 in the positions in which the ternary address has a 1, and 0s in the other positions. The mask contains a 0 in the positions in which the ternary address has an X, and Is in the other positions. As a result, each bit in the binary address, together with a corresponding bit in the priority mask, accurately indicates the value of a corresponding bit in the ternary entry, as shown in Fig. 4A. The binary addresses are stored in the CAM, while the binary masks indicate which bits of the stored addresses are compared to the search address during searches of the CAM. As only one binary address is generated for each ternary address, the size of the CAM is greatly reduced.
In order for values to be correctly stored in the binary CAM, ternary addresses must be translated into unique binary addresses. Fig. 4B, for example, shows two ternary entries that generate the same binary address, albeit with different masks. If more than one ternary value is translated into a single binary address stored in the CAM, only one set of data can be stored in the CAM (in the location of the binary address) and thus only one ternary address can be correctly translated. This problem is remedied by treating certain ternary values as invalid to ensure that all ternary values are translated into unique binary addresses. For example, in IP v.4, 0 is not a legal value for the lowest level of the hierarchical address .
A second prior art technique consists of searching a binary CAM for portions of an address specified by a priority mask, as shown in Fig. 3B . In Fig. 3B, a binary CAM is first searched for a binary address using a binary priority field at the lowest hierarchical level (i.e., the most specific hierarchical level) in stage 340. Stage 345 then determines whether the search found any matching entries, in which case the first of the matching entries is retrieved in stage 355; otherwise the CAM is searched again for the same address and a priority field at the next higher hierarchical level . The first matching entry is the correct matching entry, as it has the lowest hierarchical level of any matching entry.
This technique, however, requires in the worst case a search for each hierarchical level of the entries in the CAM. A third prior art technique, therefore, uses a ternary CAM in place of a binary CAM to reduce the number of searches of the CAM needed in the worst case to find a matching entry. A ternary CAM is a binary CAM that can handle "don't care" values (represented by the symbol X) which match both 1 and 0 values. This technique is illustrated in Fig. 3C. Unlike with binary CAMs, ternary addresses are stored in the ternary CAM together with the corresponding binary priority fields representing the hierarchical level of the addresses . The ternary CAM is then searched with an address to be translated and a priority field in which all bits, except for the most significant bit, have a don't care value. After each search, a don't care bit of the priority field is replaced by a 1 or a
0 (as explained below) , until a binary priority field is obtained. An entry matching the address and the binary priority field is the correct matching entry.
In Fig. 3C, the ternary CAM is first searched for an address and a priority field having a 1 in the most significant bit position and an X in all other bit positions, in stage 360. Stage 365 then determines if there are any matching entries, in which case the operation proceeds to stage 375; otherwise the least significant bit in the priority field having a value of
1 is replaced by a value of 0. Stage 375 then determines whether any bits of the priority field have a value of X, in which case the most significant bit in the priority field having a value of X is replaced by a value of 1 in stage 380. The CAM is then searched for the address and the modified priority field, in stage 385. Stage 390 determines whether there is a single matching entry, in which case the matching entry is retrieved from the CAM in stage 395; otherwise stages 365-390 are repeated until the test of stage 390 is satisfied and the operation terminates. Thus, one X is resolved (i.e. replaced by a 1 or a 0) after each search until a matching entry is found.
This technique requires in the worst case a number of searches equal to the number of bits used to represent the priority field (i.e., if N is the number of hierarchical levels represented by the priority field, log2N searches are required to find a matching entry at the lowest hierarchical level, as all bits of the priority mask must be resolved) .
There is thus a need for an improved method and apparatus for performing fast hierarchical address translation.
SUMMARY
The invention provides methods and apparata for performing hierarchical address translation using either binary or ternary CAMs which require a lower number of searches of the CAM than prior art techniques .
In particular, a method and apparatus are provided for translating a ternary hierarchical address using a binary CAM that require in the worst case only log2N searches of the CAM, where N is the number of hierarchical levels of the hierarchical address, and only requires one entry to be stored in the CAM for each hierarchical address. Prior art techniques for translating hierarchical addresses using a binary CAM either require N searches of the CAM to be performed in the worst case or multiple table entries to be stored in the CAM for each hierarchical address.
This is achieved by translating each ternary hierarchical address into a binary address and a binary priority mask and storing the binary addresses in the binary CAM. A binary search of the priority masks is then performed by searching the CAM with a priority mask and choosing a next priority mask depending on the results of the search of the CAM until a correct matching entry (i.e., the matching entry with the lowest hierarchical level) is found.
A further method and apparatus are provided for performing hierarchical address translation using a ternary CAM that require only a fixed number (2, or 1 when pipelined) of searches of the CAM, independent of the number of hierarchical addresses or of the number of hierarchical levels of the address . Prior art techniques for translating hierarchical addresses using ternary CAMs require in the worst case log2N searches of the CAM.
This is achieved by storing a ternary address and a priority field representing a hierarchical level of the ternary address in a ternary CAM, searching the CAM for an address to be translated, comparing the priority fields of all addresses stored in the CAM that match the address to determine which matching entries have the highest hierarchical level, and searching the CAM for the address and the priority field having the lowest hierarchical level of all matching entries generated by the first search. Thus, the number of searches of the CAM required to translate an address is always 2 (1 if the searches are pipelined) regardless of the number of addresses stored in the CAM or of the number of hierarchical levels represented by the priority field.
A method and apparatus are also provided for performing hierarchical address translation using a memory and a CAM that require only a single search of the memory once the address has been translated using the CAM. This is achieved by storing a hierarchical address translated using the CAM in the memory and using the memory to perform successive hierarchical address translations. Unlike prior art techniques that required multiple searches of the CAM, once the address has been translated, this technique only requires one search of the CAM for successive translations of that address .
As a result, the number of searches required to translate a hierarchical address using either binary or ternary CAMs is reduced and the performance of hierarchical address translation operations is improved. This is particularly advantageous in applications where fast network routing is critical, such as the routing of data packets in network switches .
BRIEF DESCRIPTION OF THE DRAWINGS
Fig. 1A illustrates an example of a prior art flat address .
Fig. IB illustrates an example of a prior art hierarchical address .
Fig. 2A illustrates a typical prior art routing table used to route calls originating in a calling area.
Fig. 2B illustrates a switch which uses a PATRICIA tree to route calls originating in a central office zone.
Fig. 2C illustrates the table of Fig. 2A augmented by a priority field added to each entry.
Fig. 3A is a flow diagram of a prior art technique for translating hierarchical addresses using a CAM.
Fig. 3B is a flow diagram of a different prior art technique for translating hierarchical addresses using a binary CAM.
Fig. 3C is a flow diagram of yet another prior art technique for translating hierarchical addresses using a ternary CAM.
Fig. 4A illustrates multiple prior art ternary entries of a switching table and their respective encoding as pairs of binary addresses and binary masks. Fig. 4B illustrates two ternary entries of a switching table that are encoded as a same binary address, but different binary masks.
Fig. 5 is a flow diagram of a hierarchical address translation operation using a binary CAM, according to one embodiment of the invention.
Fig. 6A illustrates multiple entries of an IP routing table used in an hierarchical address translation operation, according to one embodiment of the invention.
Fig. 6B shows the order in which the table entries of Fig. 6A are stored in a CAM.
Figs. 6C-6F illustrate the results produced by successive searches of the CAM for various addresses during the hierarchical address translation operation of Fig. 5. Fig. 7 is a schematic diagram of a circuit for performing the hierarchical address translation operation of Fig. 5.
Fig. 8 illustrates a plurality of ternary table entries augmented by an N-bit priority field, where N is the number of priority levels stored in the table, according to one embodiment of the invention.
Fig. 9 is a flow diagram of an hierarchical address translation operation using a ternary CAM, according to one embodiment of the invention. Figs. 10A-10B are schematic diagrams of a circuit during the hierarchical address translation operation of Fig. 9.
Fig. 11 is a flow diagram of a hierarchical address translation operation using a cache CAM, according to one embodiment of the invention.
Fig. 12 is a block diagram of a circuit during the hierarchical address translation operation of Fig. 11.
Fig. 13 is a block diagram of an IP router circuit, according to one embodiment of the invention. Fig. 14 is a block diagram of a network firewall circuit, according to one embodiment of the invention.
Fig. 15 is a block diagram of a network switch circuit, according to one embodiment of the invention.
Fig. 16 illustrates an input port and a switch control processor element of the circuit of Fig. 15 in greater detail. DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS
According to the embodiments of the invention, a content addressable memory is used to improve the performance of hierarchical address translation systems .
In one embodiment of the invention, ternary hierarchical address values are stored in a binary CAM by breaking the ternary address into two components: a binary address and a priority mask. The binary address has a 1 in the positions in which the ternary address has a 1, and 0s in the other positions. The mask contains a 0 in the positions in which the ternary address has an X, and Is in the other positions. Some examples are shown in Fig. 4A.
Note that only the binary address values are stored in the CAM, while the masks are stored in a separate mask list. The list of mask values, sorted in hierarchical order, is used during searches of the CAM to find a desired address. The CAM uses the one's- complement of the address mask during searches. As discussed with reference to Fig. 4B, ternary addresses are translated into unique binary addresses.
Some prior art techniques employ a similar scheme to store hierarchical addresses in a binary CAM and to search the CAM for table entries matching an address using different priority masks. These methods, however, require, in the worst case, that the binary CAM be searched once for each priority mask in the list. By contrast, one embodiment of the invention provides a method of translating hierarchical addresses using a binary CAM that only requires log2N searches of the CAM, where N is the number of hierarchical levels of the address. This is accomplished by first ordering priority masks so that a mask with m trailing zeros is used in a search before a mask with n trailing zeros, where m < n. In addition, rather than searching for all priority masks in the mask list sequentially, as taught by the prior art, one embodiment of the present invention searches the CAM using a binary search technique, as shown in Fig. 5. Unlike in prior art techniques, in which priority masks are used in reverse hierarchical order so that the first matching entry is the correct matching entry, using a binary search the first matching entry may not be the correct matching entry. This is because the priority masks are not used in hierarchical order, but rather according to the their position in a binary search tree. As a result, if a search of the CAM produces multiple matching entries, the search is repeated with a priority mask with a higher hierarchical level until a single matching entry (or no matching entry, in which case the correct matching entry is the first matching entry generated by the previous search) is found. Initially, the CAM is searched with a priority mask that has a median value of all masks in the list, in stage 500. Stage 510 then determines if more than a single match is found, in which case the mask of the desired address is in the first half of the list, and the CAM is searched again with a mask that has a median value of all masks in the first half of the list, in stage 520. Otherwise stages 510-520 are repeated until either a single match or no matches are found. Stage 530 then determines whether the search produced no matches, in which case the mask of the desired addresses is in the second half of the list, and the CAM is searched with a mask that has a median value of all masks in the second half of the list, in stage 540. Otherwise stages 530-540 are repeated until at least one matching entry is found. The matching entry is then retrieved from the CAM in stage 550. Note that in some cases a search that generated multiple matching entries is followed by a search that generates no matching entries. In this case, the desired entry is the first matching entry generated by the last search in which multiple matches were found. It is for this case that the order of CAM entries is important. Address entries are stored in the CAM such that the addresses with masks with the largest number of trailing zeros are stored first. Figs. 6A-6F illustrate an example of the a hierarchial address translation operation of Fig. 5 performed on an IP v.4 address. Fig. 6A shows four ternary entries that are to be stored in the CAM, along with their respective binary addresses and masks. For convenience, all entries in Figs. 6A-6F are shown as hexadecimal, rather than binary, digits.
The binary entries are stored in the CAM in the order shown in Fig. 6B . Note that the address of entry D (Fig. 6A) which has the largest number of trailing 0s (four) is stored in the first location of the CAM, followed by the address of entry C which has the second largest number of trailing 0s (three), etc.
The incoming address is then compared to the binary entries stored in the CAM using a set of CAM masks. The CAM masks used are the one' s-complement of the priority mask for which the search is performed. Fig. 6C illustrates the results of a search for address "8C FC 0D 23". First, the CAM is searched with mask 610, generating matches on entries 0, 2 and 3 (Fig. 6B) . As the first search produced multiple matches, the search is repeated with mask 620, generating matches on entries 2 and 3. The search is repeated again with mask 630, generating a single matching entry, entry 3, which is the desired entry. Fig. 6D illustrates the results of a search for address "8C FC 0D 42". The first two searches are analogous to the ones illustrated in Fig. 6C; however, the search with mask 630 generates no matching entries. Accordingly, the desired entry is the first matching entry returned by the previous search, namely entry 2. Fig. 6E illustrates the results of a search for address "8C FC 53 42". Here, the first search with mask 610 produces a single matching entry, entry 1, which is also the desired entry.
Finally, Fig. 6F illustrates the results of a search for address "8C FC A3 42". Here, the first search with mask 610 produces no matching entries, therefore a second search is performed with mask 640, generating multiple matching entries, entries 0, 1, 2 and 3. Accordingly, the desired entry is the first matching entry, namely entry 0.
The operation of Fig. 5 can be implemented by the circuit of Fig. 7. In Fig. 7, a circuit according to one embodiment of the present invention comprises a CAM 700 and a controller 710. Mask values for searching the CAM are stored in a sequential binary tree arrangement depending on their hierarchical level in a register bank of the CAM 700 to simplify the logic required to traverse the tree. Thus, the mask at the root of the tree (which has a median hierarchical level of all masks stored in the tree) is stored in the first register and all other masks are stored so that for each mask at a node of the tree stored in register n, its immediate descendants in the tree are stored in registers 2n and 2n+l, respectively. Accordingly, after each search the circuit generates an index for the register storing the next mask in the tree by multiplying the register index by two and adding either a one or a zero to that value. A register 720 holds a value of an address 730 that is compared to the entries stored in CAM 700. A register 740 holds a value of an entry read from CAM 700. Controller 710 receives input signals from CAM 700 over a bus and transmits control signals over separate buses to register 750, shifter 760, adder 770 and multiplexers 780 and 790. Register 750 is initially loaded with a one value to point to the first register of the CAM which stores a mask at the root of the tree (i.e., the mask having a median hierarchical level of all masks stored in the tree) . The priority field is then routed to CAM 700. The contents of CAM 700 are then searched for a match on address 730 and the initial priority mask. If one or more matches are generated, the matching entry is stored in register 740. If more than one match occurs, the value of the priority mask index stored in register 750 is routed to shifter 760 and multiplied by two. Since the binary search tree is stored in sequential order, this operation has the effect of pointing the priority mask index to the next node of the binary search tree . The priority mask index value generated by shifter 760 is then routed to adder 770 together with an output of multiplexer 780, which is in turn connected to a logical one source, a logical zero source and is controlled by controller 710. Adder 770 then adds either a zero or a one to the priority mask index value generated by shifter 760 as necessary to generate a new priority mask index value which is then stored back into register 750, through multiplexer 790. Again, as the binary search tree is stored in sequential order, adding a zero or a one to the priority mask index has the effect of following one of the two branches at a node of the binary search tree. Multiplexer 790 is also connected to a logical one source and is controlled by controller 710.
Furthermore, a table of hierarchical addresses can be directly stored in a ternary CAM. Multiple CAM entries, however, may match the hierarchical address being translated. Generally, CAMs allow only a single match result to be read at any one time. To maximize the speed of address translation operations, it is desirable to have the first match result that is read from the CAM be the desired match result. Prior art techniques solve this problem by using a priority encoder provided by some CAMs to allow multiple matches to be read out one at a time. The priority encoder determines the order in which the matches are read from the CAM based on where the entry is stored in the CAM. Entries are written into the CAM in such a way that the desired entry is always the first entry read. With existing CAMs, this can be done by writing entries in inverse hierarchical order. Within a hierarchical level, the ordering of the entries is irrelevant because no more than one matching entry is found for any given level of the hierarchy. This approach, however, renders adding new entries to the CAM very time-consuming because of the need to maintain inverse hierarchical ordering. To solve this problem, a priority field may be added to every entry stored in the ternary CAM. The priority field is used in searching the ternary CAM for an address. Fig. 8 illustrates four entries stored in a ternary CAM to which a priority field has been added to indicate a hierarchical level of the address.
Prior art techniques search a ternary CAM storing hierarchical addresses by performing a binary search of the priority fields. As is well known to those skilled in the art, however, a binary search requires in the worst case log2N searches, where N is the number of priority levels of the address. By contrast, in one embodiment of the present invention, the ternary CAM is pipelined to provide address resolution in a single cycle or, if no pipeline is used, in a fixed number of cycles independent of the number of priority levels of the address. This is accomplished by using N bits of the priority field to denote N levels of priority, searching the ternary CAM for the address, decoding the priority fields of the matching entries produced by the search to determine the highest priority field of any matching entries and the searching the ternary CAM a second time for the address and the highest priority field of the matching entries. If the two searches are pipelined, each search effectively requires a single cycle. The process of searching the CAM for an address, such as telephone number (908) 979-1035, is illustrated in Fig. 9. First, the priority field is translated into a bit mask (a sequence of 0s and Is in which each bit indicates whether an action is to be performed on a corresponding element of a sequence to which the mask is applied) representation where N bits of the priority field are used to represent N priority levels of the address in stage 900. Accordingly, each priority field has N bits, only one of which has a value of 1. In stage 910, a first search of the CAM for (908) 979-1035 generates matches on entries A, C and D (Fig. 8) . Stage 920 then determines whether there are multiple matching entries, in which case all matching entries output the value of their priority fields simultaneously so that the logical OR function of the values can be computed, in stage 930. The logical OR of the values of the priority fields of entries A, C and D is "111". Since priority fields are encoded so as to contain only a single 1, it follows that "100" is the value of the highest priority field of any matching entry. The CAM is then searched for the combination of address (908) 979-1035 and priority field "100" in stage 940, generating a single matching entry A. Entry A is then retrieved from the CAM in stage 950. Each time an entry is written into the CAM, both an entry value and a priority value are provided. Internal to the device, the priority value is expanded such that no priority value contains more than a single bit . This is accomplished by encoding P levels of priority as a 2P binary values. For example, consider a device with four levels of priority from the user's point of view: "00", "01", "10", and "11". Internally, the priorities would be represented as: "0001", "0010", "0100", and "1000".
Figs. 10A-10B illustrate a circuit for performing the operation of Fig. 9. Fig. 10A shows a first cycle of the operation of Fig. 9. A comparand 1000 (the address that is being searched for in the CAM) is used to drive the bit lines 1010 of the elements of CAM 1020. For illustrative purposes, only four elements of CAM 1020 are shown in Figs. 10A-10B. However, the invention is not limited by any number of CAM elements and can be implemented using a CAM having an arbitrary number of elements. Any element of CAM 1020 that matches comparand 1000 asserts its match line 1030 and enables an associated priority CAM 1040. Any other suitable type of memory such as an SRAM can be used in place of priority CAM 1040. All enabled entries of priority CAM 1040 assert their priority values on read lines 1050 indicating that the entries match the address. If multiple matches with different priorities are found, priority encoder 1060 is used to select the highest priority value. For example, assume that the matching entries have priorities of "0100" and "0010". The output of the logical OR function of the priority values is "0110". Priority encoder 1060 then determines that highest priority 1070 is "0100" and the first cycle of the operation of Fig. 9 terminates.
Fig. 10B shows the second cycle of operation of Fig. 9. In this cycle, both comparand 1000 and highest priority 1070 are input into the CAM. For the entries (usually one) that match both comparand 1000 and highest priority 1070, the appropriate match line 1080 is enabled and address encoder 1090 outputs the address of the matching entry of CAM 1020. Although a two- cycle operation has been described for simplicity, the operation can be performed in one cycle. For example, multiple operations of Fig. 9 can be pipelined so that cycle 1 of a first operation is performed simultaneously with cycle 2 of a second operation, allowing CAM 1000 to perform operations at a rate of one cycle per operation.
According to a further embodiment of the invention, N-l bits are used to represent N priority levels of the address rather than N bits. This is achieved by encoding the highest priority level as all 0s. If a match occurs and the output of the logic OR circuit is all 0s, the match has the highest priority field.
According to a further embodiment of the invention, a CAM is used to cache the results of previous hierarchical address translations as flat or hierarchical addresses, as illustrated by the flow diagram of Fig. 11. Fig. 11 illustrates the process of performing an address translation according to one embodiment of the invention. When a packet arrives, the CAM is checked for the address in stage 1110. If the address is found in stage 1120, the associated data is retrieved form the CAM in stage 1130 and the operation proceeds with stage 1160. If the address is not found, a hierarchical address translation, according to any technique known in the art or described herein, is performed in stage 1140. The hierarchical address and the results of the address translation are then stored in the CAM in stage 1150. Finally, the results of the translation are made available for packet processing in stage 1160. The advantage of this approach is that once an address has been translated, packet processing can proceed at a higher speed than the native speed of the hierarchical address translation technique employed, since the translation data can simply be retrieved from the CAM. This technique is particularly advantageous in applications in which a limited number of addresses is repeatedly translated.
Fig. 12 shows a circuit that can be used to implement the operation of Fig. 11. In Fig. 12, cache module 1200 comprises a queue 1210 and a CAM 1220. CAM 1220 can be either a binary or a ternary CAM. Cache module 1200, in turn, communicates with address lookup module 1230.' During an address translation operation, an address is queued on queue 1210. Queue 1210, in turn, processes lookups of CAM 1220. If the lookup of CAM 1220 does not return a matching entry, the address is provided to address lookup module 1230. Lookup module 1230 then translates the address and the result of the address translation is stored in CAM 1220. After the translated address is stored in CAM 1220, subsequent translations of that address can thus be performed simply by a lookup of CAM 1220.
Unlike prior art techniques that required that the CAM store all known hierarchical addresses, this embodiment of the invention requires that the CAM store only addresses that are currently active. Entries in the CAM may be timestamped to allow removal of inactive entries to minimize the size of the CAM. The timestamp indicates the time at which the entry has been most recently accessed. If the entry has not been accessed recently, it becomes a candidate for removal from the CAM.
Since the CAM is used to cache the results of previous hierarchical address translations, care must be taken to ensure that if a table entry is modified
(i.e., the address translation for an address changes) the modification is reflected in the entry stored in the CAM. As a result, this approach is particularly advantageous for applications in which hierarchical table entries do not change over time, such as a network routing table. However, several techniques can be used to handle table updates in applications in which table entries change more often. A first approach consists of flushing the contents of the CAM whenever a new table arrives. While this approach guarantees that all addresses are always processed correctly, this approach is probably more drastic than required. An alternative approach consists of comparing the new table and the old table in the background, and updating the affected CAM entries on an as-needed basis. Using this approach the CAM may be temporarily out of date during background processing of table updates; however this method is advantageous for applications in which table entries are updated infrequently, as it limits the overhead caused by updating the entries. Yet another approach consists of performing table lookups in parallel with CAM lookups. If packets are arriving at a modest speed, the CAM is updated continuously. During periods of heavy traffic, the CAM may fall out of step as table lookup falls behind. However, for applications in which data traffic is bursty, this approach represents a good compromise, as it allows the CAM to be updated between bursts of traffic, thereby limiting the overhead caused by the updates . Figs. 13-16 illustrate applications that take advantage of the hierarchical address translation techniques described above.
Fig. 13 illustrates an internet protocol datagram router, according to one embodiment of the invention. Data packets transmitted over the internet are typically routed through a chain of network routers in between their origin and destination. Each router receives the packet and translates its destination address into the address of the next router in the chain to which the packet is to be transmitted. A packet received over a network connection 1300 is initially stored in input packet queue 1310. The packet is then routed to address extraction module 1320 and to an input line of demultiplexer 1330. Address extraction module 1320, in turn, extracts a portion of the packet representing an address to which the packet is to be routed. The address extracted by address extraction module 1320 is then routed to IP address lookup 1340. IP address lookup 1340 is an apparatus for performing hierarchical address translation according to an embodiment of the invention. The contents of an entry stored in IP address lookup 1340 and matching the address is then routed to a control port 1335 of demultiplexer 1330. Demultiplexer 1330 routes the packet received from input packet queue 1310 to one of output packet queues 1350, 1360 or 1370 depending on the signal received from IP address lookup 1340. The output queue in which the packet is stored, in turn, routes the packet to the one of networks 1355, 1365 or 1375 to which it is connected. Fig. 14 illustrates a network firewall device according to one embodiment of the invention. Network firewalls are circuits used to allow data packets to be transmitted only to certain destination and to discard packets being transmitted to other destinations. A packet received over a network connection 1400 is initially stored in input packet queue 1410. The packet is then routed to address extraction module 1420 and to an input line of demultiplexer 1430. Address extraction module 1420, in turn, extracts a portion of the packet representing an address to which the packet is to be routed. The address extracted by address extraction module 1420 is then routed to network address lookup 1440. Network address lookup 1440 is an apparatus for performing hierarchical address translation according to an embodiment of the invention. The contents of an entry stored in network address lookup 1440 and matching the address is then routed to a control port 1435 of demultiplexer 1430. Demultiplexer 1430 routes the packet received from input packet queue 1410 to either output packet queue 1450 or to discard line 1460 depending on the signal received from network address lookup 1440. Output packet queue 1450, in turn, routes the packet to network 1470 to which it is connected.
Figs. 15-16 illustrate a network switch according to one embodiment of the invention. A network switch is a circuit used to route a data packet transmitted by one device connected to the network to a second device connected to the network. Network switches may be used to dynamically change the routing of data packets in between their origin and destination to evenly distribute network traffic.
In Fig. 15, a switch control processor 1500 is connected to a plurality of input ports 1510 (of which only four are shown for clarity) and to a switch fabric 1520. Input ports 1510 are connected to a set of input lines of switch fabric 1520. A set of output ports of switch fabric 1520, is in turn connected to a plurality of output ports 1530.
Fig. 16 illustrates one of input ports 1510 and switch control processor 1500 in greater detail. Input port 1510 comprises an input queue 1600 connected to an extract packet type module 1610 and to a demultiplexer 1620. Extract packet module 1610 controls which output line of demultiplexer 1620 the packet is routed to. If the packet type is a signalling packet, the packet is routed to input queue 1670 of switch control processor 1500. Otherwise, the packet is routed to extract connection ID module 1630 and to prefix output port number module 1640. Extraction connection ID module 1630 extracts a connection ID from the packet and routes it to switch table 1650.
Switch control processor 1500, in turn, comprises an input queue 1670 connected to an extract connection ID module 1660 and to an extract address module 1680, which is in turn connected to a network address lookup 1690. Extract connection ID module 1660 extracts a connection ID from the packet and routes it to switch table 1650 of input port 1510. Extract address module 1680 extracts an address from the packet and routes it to network address lookup 1690. Network address lookup 1690 is an apparatus for performing hierarchical address translation according to an embodiment of the present invention. Network address lookup 1690 translates the address received from extract address module 1680 into an output port number which is routed back to switch table 1650 of input port 1510. Switch table 1650 is a device for performing flat address translation of connection IDs to output port numbers. The output port number is stored in switch table 1650 and then routed to prefix output port number module 1640. Finally, prefix output port number module 1640 prepends (i.e., inserts in front of the packet) the output port number to the packet and routes it to the switch fabric 1520 (Fig. 15) . Switch fabric 1520 then routes the packet to the appropriate output port 1530, depending on the value of the packet received from input port 1510.
Embodiments described above illustrate but do not limit the invention. In particular, the invention is not limited by any particular hardware implementation. Any suitable technique can be used for implementing
CAMs. In addition, the invention is not limited to any specific size of the CAM. While a hardware implementation of the embodiments of the present invention has been described for clarity, the embodiments can be implemented using any combination of software and hardware. For example, some embodiments are implemented by a programmed computer executing the operations of Figs. 5, 9 and 11. Other embodiments and variations are within the scope of the invention, as defined by the following claims.

Claims

CLAIMSWe claim:
1. A method for translating a hierarchical address, the method comprising: storing a plurality of table entries in a binary content addressable memory; and retrieving an entry matching the address from the memory, wherein retrieving the entry requires at most log2N searches of the memory, where N is a number of hierarchical levels of the address.
2. A method for translating a hierarchical address, the method comprising: storing a plurality of table entries in a ternary content addressable memory; and retrieving an entry matching the address from the memory, wherein retrieving the entry from the memory requires only a fixed number of searches of the memory independent of the number of hierarchical levels of the address.
3. A method for translating a hierarchical address, the method comprising: converting a plurality of ternary table entries into a plurality of binary table entries, wherein each binary entry comprises a binary address and a binary priority mask, the binary priority mask representing a hierarchical level of the entry; storing the binary addresses of the plurality of binary table entries in a binary content addressable memory so that a first binary address having a first number of trailing zeros is retrieved from the memory before a second binary address having a second number of trailing zeros, wherein the first number is greater than the second number; searching the memory for one or more entries matching the address by performing a binary search of the priority masks used in searching the memory; and retrieving an entry matching the address .
4. The method of Claim 3 , wherein the entry matching the address is a first entry in a list of entries matching the address.
5. The method of Claim 3, wherein the plurality of ternary table entries is converted into the plurality of binary table entries by: duplicating each digit of the ternary entry having a one or a zero value into a corresponding digit of an address of the binary entry; replacing each digit of the ternary entry having a one or a zero value with a one value in a corresponding digit of a priority mask of the binary entry; and replacing each digit of the ternary entry having a don't care value with a zero value in a corresponding digit of an address and into a corresponding digit of a priority mask of the binary entry.
6. The method of Claim 3 , wherein the binary search is performed by: performing an initial search of the memory for an address and a priority mask representing a median hierarchical value of all priority masks stored in the binary content addressable memory; upon determining that the initial search generated multiple matching entries, repeatedly searching the memory for the address with a priority mask representing a hierarchical value that is one level higher than a priority mask used in an immediately previous search until the search generates no more than one matching entry; upon determining that an immediately previous search generated no matching entries, repeatedly searching the memory for the address and a priority mask representing a hierarchical level that is one level lower than a priority mask used in an immediately previous search until the search generates at least one matching entry.
7. A method for translating a hierarchical address, the method comprising: storing a plurality of ternary table entries in a ternary content addressable memory, each table entry comprising an address and a priority field, the priority field representing a hierarchical level of the entry; searching the memory for one or more entries matching an address; routing a priority field of entries matching the address to a priority encoding circuitry; determining in the priority encoding circuitry that a priority field of an entry has a lowest hierarchical level of the entries matching the address; searching the memory for the address and the priority field of the entry having the lowest hierarchical level of the entries matching the address; and retrieving an entry matching the address .
8. The method of Claim 7, wherein the matching entry is a first entry in a list of entries matching the address.
9. A method for translating a hierarchical address, the method comprising: translating an address; storing a result of the translation in a content addressable memory; searching the memory for an entry matching the address; upon determining that an entry stored in the memory matches the address, retrieving the entry from the memory; and upon determining that no entry in the memory matches the address, translating the address and storing a result of the translation in the memory.
10. An apparatus for translating a hierarchical address comprising: a binary content addressable memory storing a plurality of table entries, the memory receiving as inputs an address and a priority mask and generating as output a value of one or more data entries stored in the memory; circuitry for storing a value of a plurality of priority masks, wherein each value of a priority mask is individually addressable; circuitry for addressing a value of a priority mask; and a controller causing different priority fields to be routed to the memory for a search depending on a result of a previous search; wherein a search of the table entries stored in the memory is performed by performing a binary search of the priority masks used in searching the memory .
11. An apparatus for translating a hierarchical address comprising: a ternary content addressable memory storing a plurality of table entries, each entry comprising an address and a priority field, the ternary content addressable memory receiving a search address as an input and generating a value of one or more data entries stored in the ternary content addressable memory as an output; a memory for storing a value of the entries generated by the ternary content addressable memory; a priority encoder receiving as an input a priority field of one or more table entries stored in the ternary content addressable memory and generating as an output a highest priority field of the input priority fields; and an address encoder receiving as an input an address of one or more table entries stored in the ternary content addressable memory and generating as an output a value of an entry having the highest priority field of the priority fields received as inputs by the priority encoder.
12. The apparatus of Claim 10, wherein the apparatus is part of an internet protocol router circuit.
13. The apparatus of Claim 11, wherein the apparatus is part of an internet protocol router circuit .
14. The apparatus of Claim 10, wherein the apparatus is part of a network firewall circuit.
15. The apparatus of Claim 11, wherein the apparatus is part of a network firewall circuit.
16. The apparatus of Claim 10, wherein the apparatus is part of a network switch.
17. The apparatus of Claim 11, wherein the apparatus is part of a network switch.
18. A method for translating a hierarchical address, the method comprising: storing a plurality of table entries in a binary content addressable memory; and determining whether an entry stored in the memory matches the address, wherein retrieving the entry requires at most log2N searches of the memory, where N is a number of hierarchical levels of the address.
19. A method for filtering a hierarchical address, the method comprising: storing a plurality of table entries in a ternary content addressable memory; and determining whether an entry matching the address is stored in the ternary memory, wherein said determining requires only a fixed number of searches of the memory independent of a number of hierarchical levels of the address.
20. A method filtering a hierarchical address, the method comprising: converting a plurality of ternary table entries into a plurality of binary table entries, wherein each binary entry comprises a binary address and a binary priority mask, the binary priority mask representing a hierarchical level of the entry; storing the binary addresses of the plurality of binary table entries in a binary content addressable memory so that a first binary address having a first number of trailing zeros is retrieved from the memory before a second binary address having a second number of trailing zeros, wherein the first number is greater than the second number; and searching the memory for one or more entries matching an address to determine whether the address is stored in the memory by performing a binary search of the priority, masks used in searching the memory.
21. A method for filtering a hierarchical address, the method comprising: storing a plurality of ternary table entries in a ternary content addressable memory, each table entry comprising an address and a priority field, the priority field representing a hierarchical level of the entry; searching the memory for one or more entries matching an address; routing a priority field of entries matching the address to a priority encoding circuitry; determining in the priority encoding circuitry that a priority field of an entry has a lowest hierarchical level of the entries routed to the priority encoding circuitry; and searching the memory for the address and the priority field of the entry having the lowest hierarchical level of the entries routed to the priority encoding circuitry to determine whether the address is stored in the memory.
PCT/US1998/003795 1997-03-14 1998-03-13 Accelerated hierarchical address filtering and translation WO1998041922A1 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
AU64409/98A AU6440998A (en) 1997-03-14 1998-03-13 Accelerated hierarchical address filtering and translation

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/818,073 1997-03-14
US08/818,073 US5920886A (en) 1997-03-14 1997-03-14 Accelerated hierarchical address filtering and translation using binary and ternary CAMs

Publications (1)

Publication Number Publication Date
WO1998041922A1 true WO1998041922A1 (en) 1998-09-24

Family

ID=25224599

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/US1998/003795 WO1998041922A1 (en) 1997-03-14 1998-03-13 Accelerated hierarchical address filtering and translation

Country Status (3)

Country Link
US (1) US5920886A (en)
AU (1) AU6440998A (en)
WO (1) WO1998041922A1 (en)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6415354B1 (en) 1999-07-15 2002-07-02 Applied Micro Circuits Corporation Pipelined methods and apparatus for weight selection and content addressable memory searches
KR20020081569A (en) * 2002-09-04 2002-10-28 (주)시큐어베이스 The Management Method of tables that have entries of same size on CAM in Network device
EP1352334A2 (en) * 2001-07-20 2003-10-15 Nokia Inc. Selective routing of data flows using a tcam
AU774402B2 (en) * 1998-12-03 2004-06-24 Nortel Networks Corporation Providing desired service policies to subscribers accessing internet
WO2010094550A1 (en) * 2009-02-20 2010-08-26 Siemens Aktiengesellschaft Method for allocating addresses, and data processing system for carrying out the method
EP3222013A1 (en) * 2014-11-19 2017-09-27 Coriant Oy A lookup system and a lookup method

Families Citing this family (168)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6199140B1 (en) * 1997-10-30 2001-03-06 Netlogic Microsystems, Inc. Multiport content addressable memory device and timing signals
US6470227B1 (en) * 1997-12-02 2002-10-22 Murali D. Rangachari Method and apparatus for automating a microelectric manufacturing process
US6545981B1 (en) 1998-01-07 2003-04-08 Compaq Computer Corporation System and method for implementing error detection and recovery in a system area network
US6163834A (en) * 1998-01-07 2000-12-19 Tandem Computers Incorporated Two level address translation and memory registration system and method
US6493343B1 (en) 1998-01-07 2002-12-10 Compaq Information Technologies Group System and method for implementing multi-pathing data transfers in a system area network
JP3166700B2 (en) * 1998-03-12 2001-05-14 日本電気株式会社 Router and longest match search device
US6377577B1 (en) * 1998-06-30 2002-04-23 Cisco Technology, Inc. Access control list processing in hardware
US6658002B1 (en) 1998-06-30 2003-12-02 Cisco Technology, Inc. Logical operation unit for packet processing
US6389506B1 (en) * 1998-08-07 2002-05-14 Cisco Technology, Inc. Block mask ternary cam
US6289414B1 (en) * 1998-10-08 2001-09-11 Music Semiconductors, Inc. Partially ordered cams used in ternary hierarchical address searching/sorting
US6633563B1 (en) 1999-03-02 2003-10-14 Nortel Networks Limited Assigning cell data to one of several processors provided in a data switch
US6466976B1 (en) 1998-12-03 2002-10-15 Nortel Networks Limited System and method for providing desired service policies to subscribers accessing the internet
US6691168B1 (en) * 1998-12-31 2004-02-10 Pmc-Sierra Method and apparatus for high-speed network rule processing
US6237061B1 (en) 1999-01-05 2001-05-22 Netlogic Microsystems, Inc. Method for longest prefix matching in a content addressable memory
US7382736B2 (en) 1999-01-12 2008-06-03 Mcdata Corporation Method for scoring queued frames for selective transmission through a switch
US6460112B1 (en) * 1999-02-23 2002-10-01 Netlogic Microsystems, Llc Method and apparatus for determining a longest prefix match in a content addressable memory device
US6574702B2 (en) 1999-02-23 2003-06-03 Netlogic Microsystems, Inc. Method and apparatus for determining an exact match in a content addressable memory device
US6499081B1 (en) 1999-02-23 2002-12-24 Netlogic Microsystems, Inc. Method and apparatus for determining a longest prefix match in a segmented content addressable memory device
US6892272B1 (en) 1999-02-23 2005-05-10 Netlogic Microsystems, Inc. Method and apparatus for determining a longest prefix match in a content addressable memory device
US6539455B1 (en) 1999-02-23 2003-03-25 Netlogic Microsystems, Inc. Method and apparatus for determining an exact match in a ternary content addressable memory device
US6570877B1 (en) * 1999-04-07 2003-05-27 Cisco Technology, Inc. Search engine for forwarding table content addressable memory
US7249149B1 (en) 1999-08-10 2007-07-24 Washington University Tree bitmap data structures and their use in performing lookup operations
US6560610B1 (en) 1999-08-10 2003-05-06 Washington University Data structure using a tree bitmap and method for rapid classification of data in a database
US6795892B1 (en) 2000-06-14 2004-09-21 Netlogic Microsystems, Inc. Method and apparatus for determining a match address in an intra-row configurable cam device
US6324087B1 (en) 2000-06-08 2001-11-27 Netlogic Microsystems, Inc. Method and apparatus for partitioning a content addressable memory device
US6751701B1 (en) 2000-06-14 2004-06-15 Netlogic Microsystems, Inc. Method and apparatus for detecting a multiple match in an intra-row configurable CAM system
US7143231B1 (en) * 1999-09-23 2006-11-28 Netlogic Microsystems, Inc. Method and apparatus for performing packet classification for policy-based packet routing
US6763425B1 (en) 2000-06-08 2004-07-13 Netlogic Microsystems, Inc. Method and apparatus for address translation in a partitioned content addressable memory device
US6567340B1 (en) 1999-09-23 2003-05-20 Netlogic Microsystems, Inc. Memory storage cell based array of counters
US6542391B2 (en) 2000-06-08 2003-04-01 Netlogic Microsystems, Inc. Content addressable memory with configurable class-based storage partition
US6757779B1 (en) 1999-09-23 2004-06-29 Netlogic Microsystems, Inc. Content addressable memory with selectable mask write mode
US7110407B1 (en) 1999-09-23 2006-09-19 Netlogic Microsystems, Inc. Method and apparatus for performing priority encoding in a segmented classification system using enable signals
US6687785B1 (en) 2000-06-08 2004-02-03 Netlogic Microsystems, Inc. Method and apparatus for re-assigning priority in a partitioned content addressable memory device
US7272027B2 (en) * 1999-09-23 2007-09-18 Netlogic Microsystems, Inc. Priority circuit for content addressable memory
US7487200B1 (en) * 1999-09-23 2009-02-03 Netlogic Microsystems, Inc. Method and apparatus for performing priority encoding in a segmented classification system
US6799243B1 (en) 2000-06-14 2004-09-28 Netlogic Microsystems, Inc. Method and apparatus for detecting a match in an intra-row configurable cam system
US6526474B1 (en) 1999-10-25 2003-02-25 Cisco Technology, Inc. Content addressable memory (CAM) with accesses to multiple CAM arrays used to generate result for various matching sizes
US6467019B1 (en) * 1999-11-08 2002-10-15 Juniper Networks, Inc. Method for memory management in ternary content addressable memories (CAMs)
US7711738B1 (en) * 1999-11-15 2010-05-04 West Services, Inc. Method, system and computer-readable medium for accessing and retrieving court records, items and documents
CA2291310C (en) * 1999-11-30 2007-04-10 Mosaid Technologies Inc. Generating searchable data entries and applications therefore
US6493791B1 (en) * 1999-12-20 2002-12-10 Intel Corporation Prioritized content addressable memory
US6438674B1 (en) * 1999-12-21 2002-08-20 Intel Corporation Hash Cam having a reduced size memory array and its application
US20030093613A1 (en) * 2000-01-14 2003-05-15 David Sherman Compressed ternary mask system and method
US6615210B1 (en) * 2000-02-04 2003-09-02 Broad Web Corporation Bit stream ternary match scheme
US6633953B2 (en) 2000-02-08 2003-10-14 Hywire Ltd. Range content-addressable memory
US6252872B1 (en) * 2000-05-24 2001-06-26 Advanced Micro Devices, Inc. Data packet filter using contents addressable memory (CAM) and method
US6658458B1 (en) 2000-06-22 2003-12-02 Cisco Technology, Inc. Cascading associative memory arrangement
US6711661B1 (en) * 2000-06-29 2004-03-23 Motorola, Inc. Method and apparatus for performing hierarchical address translation
US6351429B1 (en) * 2000-06-29 2002-02-26 International Business Machines Corp. Binary to binary-encoded-ternary (BET) decoder using reordered logic
US7051078B1 (en) * 2000-07-10 2006-05-23 Cisco Technology, Inc. Hierarchical associative memory-based classification system
US6725326B1 (en) 2000-08-15 2004-04-20 Cisco Technology, Inc. Techniques for efficient memory management for longest prefix match problems
US6718326B2 (en) * 2000-08-17 2004-04-06 Nippon Telegraph And Telephone Corporation Packet classification search device and method
US6633567B1 (en) * 2000-08-31 2003-10-14 Mosaid Technologies, Inc. Method and apparatus for searching a filtering database with one search operation
US7236490B2 (en) 2000-11-17 2007-06-26 Foundry Networks, Inc. Backplane interface adapter
US7596139B2 (en) 2000-11-17 2009-09-29 Foundry Networks, Inc. Backplane interface adapter with error control and redundant fabric
US7002980B1 (en) 2000-12-19 2006-02-21 Chiaro Networks, Ltd. System and method for router queue and congestion management
US6438017B1 (en) * 2001-01-09 2002-08-20 Hewlett-Packard Company Read/write eight-slot CAM with interleaving
JP2002237190A (en) * 2001-02-07 2002-08-23 Kawasaki Microelectronics Kk Associative memory device and its constituting method
US6606681B1 (en) 2001-02-23 2003-08-12 Cisco Systems, Inc. Optimized content addressable memory (CAM)
US6910097B1 (en) 2001-04-09 2005-06-21 Netlogic Microsystems, Inc. Classless interdomain routing using binary content addressable memory
US7085267B2 (en) * 2001-04-27 2006-08-01 International Business Machines Corporation Methods, systems and computer program products for translating internet protocol (IP) addresses located in a payload of a packet
US6862281B1 (en) 2001-05-10 2005-03-01 Cisco Technology, Inc. L4 lookup implementation using efficient CAM organization
US7002965B1 (en) 2001-05-21 2006-02-21 Cisco Technology, Inc. Method and apparatus for using ternary and binary content-addressable memory stages to classify packets
US6615311B2 (en) 2001-06-07 2003-09-02 Riverstone Networks, Inc. Method and system for updating a content addressable memory (CAM) that prioritizes CAM entries according to prefix length
WO2003003250A1 (en) * 2001-06-28 2003-01-09 Hywire Ltd. Range content-addressable memory
US6959358B2 (en) * 2001-07-06 2005-10-25 Micron Technology, Inc. Distributed content addressable memory
US6678196B2 (en) 2001-07-06 2004-01-13 Micron Technology, Inc. Writing to and reading from a RAM or a CAM using current drivers and current sensing logic
US7260673B1 (en) 2001-07-20 2007-08-21 Cisco Technology, Inc. Method and apparatus for verifying the integrity of a content-addressable memory result
JP3845845B2 (en) * 2001-07-24 2006-11-15 株式会社テルミナス・テクノロジー Associative memory system and network equipment and network system
US6985483B2 (en) * 2001-07-31 2006-01-10 North Carolina State University Methods and systems for fast packet forwarding
US6665202B2 (en) 2001-09-25 2003-12-16 Integrated Device Technology, Inc. Content addressable memory (CAM) devices that can identify highest priority matches in non-sectored CAM arrays and methods of operating same
US6430072B1 (en) 2001-10-01 2002-08-06 International Business Machines Corporation Embedded CAM test structure for fully testing all matchlines
US7065083B1 (en) 2001-10-04 2006-06-20 Cisco Technology, Inc. Method and apparatus for dynamically generating lookup words for content-addressable memories
US6775737B1 (en) 2001-10-09 2004-08-10 Cisco Technology, Inc. Method and apparatus for allocating and using range identifiers as input values to content-addressable memories
US7210003B2 (en) * 2001-10-31 2007-04-24 Netlogic Microsystems, Inc. Comparand generation in a content addressable memory
US6993622B2 (en) * 2001-10-31 2006-01-31 Netlogic Microsystems, Inc. Bit level programming interface in a content addressable memory
KR100970122B1 (en) * 2001-11-01 2010-07-13 베리사인 인코포레이티드 High speed non-concurrency controlled database
WO2003044671A1 (en) * 2001-11-05 2003-05-30 Hywire Ltd. Ram-based range content addressable memory
US6957215B2 (en) * 2001-12-10 2005-10-18 Hywire Ltd. Multi-dimensional associative search engine
US7401180B1 (en) 2001-12-27 2008-07-15 Netlogic Microsystems, Inc. Content addressable memory (CAM) device having selectable access and method therefor
US7301961B1 (en) 2001-12-27 2007-11-27 Cypress Semiconductor Corportion Method and apparatus for configuring signal lines according to idle codes
US7185141B1 (en) 2001-12-27 2007-02-27 Netlogic Microsystems, Inc. Apparatus and method for associating information values with portions of a content addressable memory (CAM) device
US6715029B1 (en) * 2002-01-07 2004-03-30 Cisco Technology, Inc. Method and apparatus for possibly decreasing the number of associative memory entries by supplementing an associative memory result with discriminator bits from an original set of information
US6970971B1 (en) * 2002-01-08 2005-11-29 Cisco Technology, Inc. Method and apparatus for mapping prefixes and values of a hierarchical space to other representations
US6961808B1 (en) 2002-01-08 2005-11-01 Cisco Technology, Inc. Method and apparatus for implementing and using multiple virtual portions of physical associative memories
US6757780B2 (en) * 2002-01-09 2004-06-29 Hywire Ltd. Multiple module content addressable memories
US7237058B2 (en) 2002-01-14 2007-06-26 Netlogic Microsystems, Inc. Input data selection for content addressable memory
US6697276B1 (en) 2002-02-01 2004-02-24 Netlogic Microsystems, Inc. Content addressable memory device
US6876559B1 (en) 2002-02-01 2005-04-05 Netlogic Microsystems, Inc. Block-writable content addressable memory device
US7382637B1 (en) 2002-02-01 2008-06-03 Netlogic Microsystems, Inc. Block-writable content addressable memory device
US6934796B1 (en) 2002-02-01 2005-08-23 Netlogic Microsystems, Inc. Content addressable memory with hashing function
US6871262B1 (en) 2002-02-14 2005-03-22 Cisco Technology, Inc. Method and apparatus for matching a string with multiple lookups using a single associative memory
US6871265B1 (en) 2002-02-20 2005-03-22 Cisco Technology, Inc. Method and apparatus for maintaining netflow statistics using an associative memory to identify and maintain netflows
US7193996B2 (en) * 2002-02-28 2007-03-20 Acme Packet, Inc. System and method for determining a source of an internet protocol packet
US6745280B2 (en) * 2002-03-28 2004-06-01 Integrated Device Technology, Inc. Content addressable memories having entries stored therein with independently searchable weight fields and methods of operating same
US7468975B1 (en) 2002-05-06 2008-12-23 Foundry Networks, Inc. Flexible method for processing data packets in a network routing system for enhanced efficiency and monitoring capability
US7266117B1 (en) 2002-05-06 2007-09-04 Foundry Networks, Inc. System architecture for very fast ethernet blade
US20120155466A1 (en) 2002-05-06 2012-06-21 Ian Edward Davis Method and apparatus for efficiently processing data packets in a computer network
US7187687B1 (en) 2002-05-06 2007-03-06 Foundry Networks, Inc. Pipeline method and system for switching packets
US7649885B1 (en) 2002-05-06 2010-01-19 Foundry Networks, Inc. Network routing system for enhanced efficiency and monitoring capability
US7336660B2 (en) * 2002-05-31 2008-02-26 Cisco Technology, Inc. Method and apparatus for processing packets based on information extracted from the packets and context indications such as but not limited to input interface characteristics
US7181567B2 (en) * 2002-06-04 2007-02-20 Lucent Technologies Inc. Hitless restart of access control module
US7289498B2 (en) * 2002-06-04 2007-10-30 Lucent Technologies Inc. Classifying and distributing traffic at a network node
US7299317B1 (en) 2002-06-08 2007-11-20 Cisco Technology, Inc. Assigning prefixes to associative memory classes based on a value of a last bit of each prefix and their use including but not limited to locating a prefix and for maintaining a Patricia tree data structure
US7558775B1 (en) 2002-06-08 2009-07-07 Cisco Technology, Inc. Methods and apparatus for maintaining sets of ranges typically using an associative memory and for using these ranges to identify a matching range based on a query point or query range and to maintain sorted elements for use such as in providing priority queue operations
US6886073B2 (en) 2002-06-18 2005-04-26 International Business Machines Corporation Method and system for performing range rule testing in a ternary content addressable memory
US7079542B2 (en) * 2002-07-02 2006-07-18 Samsung Electronics Co., Ltd. Internet protocol address look-up method
US7313667B1 (en) 2002-08-05 2007-12-25 Cisco Technology, Inc. Methods and apparatus for mapping fields of entries into new values and combining these mapped values into mapped entries for use in lookup operations such as for packet processing
US7349382B2 (en) * 2002-08-10 2008-03-25 Cisco Technology, Inc. Reverse path forwarding protection of packets using automated population of access control lists based on a forwarding information base
US7177978B2 (en) * 2002-08-10 2007-02-13 Cisco Technology, Inc. Generating and merging lookup results to apply multiple features
CN100421106C (en) * 2002-08-10 2008-09-24 思科技术公司 Associative memory with enhanced capabilities
US7028136B1 (en) 2002-08-10 2006-04-11 Cisco Technology, Inc. Managing idle time and performing lookup operations to adapt to refresh requirements or operational rates of the particular associative memory or other devices used to implement the system
US7103708B2 (en) * 2002-08-10 2006-09-05 Cisco Technology, Inc. Performing lookup operations using associative memories optionally including modifying a search key in generating a lookup word and possibly forcing a no-hit indication in response to matching a particular entry
US7441074B1 (en) 2002-08-10 2008-10-21 Cisco Technology, Inc. Methods and apparatus for distributing entries among lookup units and selectively enabling less than all of the lookup units when performing a lookup operation
US7689485B2 (en) * 2002-08-10 2010-03-30 Cisco Technology, Inc. Generating accounting data based on access control list entries
US7082492B2 (en) * 2002-08-10 2006-07-25 Cisco Technology, Inc. Associative memory entries with force no-hit and priority indications of particular use in implementing policy maps in communication devices
US7065609B2 (en) * 2002-08-10 2006-06-20 Cisco Technology, Inc. Performing lookup operations using associative memories optionally including selectively determining which associative memory blocks to use in identifying a result and possibly propagating error indications
US7017005B2 (en) * 2002-08-28 2006-03-21 Hywire Ltd. Implementation of a content addressable memory using a RAM-cell structure
US8051211B2 (en) 2002-10-29 2011-11-01 Cisco Technology, Inc. Multi-bridge LAN aggregation
US6717946B1 (en) 2002-10-31 2004-04-06 Cisco Technology Inc. Methods and apparatus for mapping ranges of values into unique values of particular use for range matching operations using an associative memory
US7941605B1 (en) 2002-11-01 2011-05-10 Cisco Technology, Inc Methods and apparatus for generating a result based on a lookup result from a lookup operation using an associative memory and processing based on a discriminator portion of a lookup word
US7024515B1 (en) 2002-11-15 2006-04-04 Cisco Technology, Inc. Methods and apparatus for performing continue actions using an associative memory which might be particularly useful for implementing access control list and quality of service features
US7016210B2 (en) * 2002-12-30 2006-03-21 Micron Technology, Inc. Longest match detection in a CAM
US6996664B2 (en) * 2003-01-22 2006-02-07 Micron Technology, Inc. Ternary content addressable memory with enhanced priority matching
US7496035B1 (en) 2003-01-31 2009-02-24 Cisco Technology, Inc. Methods and apparatus for defining flow types and instances thereof such as for identifying packets corresponding to instances of the flow types
US7415472B2 (en) * 2003-05-13 2008-08-19 Cisco Technology, Inc. Comparison tree data structures of particular use in performing lookup operations
US7415463B2 (en) * 2003-05-13 2008-08-19 Cisco Technology, Inc. Programming tree data structures and handling collisions while performing lookup operations
US6901072B1 (en) 2003-05-15 2005-05-31 Foundry Networks, Inc. System and method for high speed packet transmission implementing dual transmit and receive pipelines
US7228378B1 (en) 2003-06-11 2007-06-05 Netlogic Microsystems, Inc. Entry location in a content addressable memory
US20050018683A1 (en) * 2003-07-21 2005-01-27 Zhao Yigiang Q. IP address storage technique for longest prefix match
US20060018142A1 (en) * 2003-08-11 2006-01-26 Varadarajan Srinivasan Concurrent searching of different tables within a content addressable memory
US7451267B1 (en) 2003-09-23 2008-11-11 Netlogic Microsystems, Inc. Method and apparatus for learn and related operations in network search engine
US8266373B1 (en) 2003-12-23 2012-09-11 Netlogic Microsystems, Inc. Content addressable memory (CAM) device and method for updating data by multiplexing between key register and mask value input
US7577784B1 (en) 2003-12-24 2009-08-18 Netlogic Microsystems, Inc. Full-ternary content addressable memory (CAM) configurable for pseudo-ternary operation
US7478109B1 (en) 2004-03-15 2009-01-13 Cisco Technology, Inc. Identification of a longest matching prefix based on a search of intervals corresponding to the prefixes
US7817659B2 (en) 2004-03-26 2010-10-19 Foundry Networks, Llc Method and apparatus for aggregating input data streams
US8730961B1 (en) 2004-04-26 2014-05-20 Foundry Networks, Llc System and method for optimizing router lookup
US7505295B1 (en) 2004-07-01 2009-03-17 Netlogic Microsystems, Inc. Content addressable memory with multi-row write function
US7627616B2 (en) * 2004-08-30 2009-12-01 Hywire Ltb. Database storage and maintenance using row index ordering
US7657703B1 (en) 2004-10-29 2010-02-02 Foundry Networks, Inc. Double density content addressable memory (CAM) lookup scheme
US7746865B2 (en) * 2004-12-07 2010-06-29 Intel Corporation Maskable content addressable memory
US20070121632A1 (en) * 2005-11-28 2007-05-31 Arabella Software, Ltd. Method and system for routing an IP packet
US8448162B2 (en) 2005-12-28 2013-05-21 Foundry Networks, Llc Hitless software upgrades
US7903654B2 (en) 2006-08-22 2011-03-08 Foundry Networks, Llc System and method for ECMP load sharing
US8238255B2 (en) 2006-11-22 2012-08-07 Foundry Networks, Llc Recovering from failures without impact on data traffic in a shared bus architecture
US7912050B2 (en) * 2006-12-05 2011-03-22 Electronics And Telecommunications Research Institute Method for classifying downstream packet in cable modem termination system at head-end supporting channel bonding mode, and cable modem termination system
US8155011B2 (en) 2007-01-11 2012-04-10 Foundry Networks, Llc Techniques for using dual memory structures for processing failure detection protocol packets
US8037399B2 (en) 2007-07-18 2011-10-11 Foundry Networks, Llc Techniques for segmented CRC design in high speed networks
US8271859B2 (en) 2007-07-18 2012-09-18 Foundry Networks Llc Segmented CRC design in high speed networks
US8125991B1 (en) 2007-07-31 2012-02-28 Hewlett-Packard Development Company, L.P. Network switch using managed addresses for fast route lookup
US7764205B2 (en) * 2007-08-27 2010-07-27 Comtech Aha Corporation Decompressing dynamic huffman coded bit streams
US8509236B2 (en) 2007-09-26 2013-08-13 Foundry Networks, Llc Techniques for selecting paths and/or trunk ports for forwarding traffic flows
US20090210382A1 (en) * 2008-02-15 2009-08-20 Eliel Louzoun Method for priority search using a tcam
US20090276604A1 (en) * 2008-05-01 2009-11-05 Broadcom Corporation Assigning memory for address types
US7848129B1 (en) 2008-11-20 2010-12-07 Netlogic Microsystems, Inc. Dynamically partitioned CAM array
US8090901B2 (en) 2009-05-14 2012-01-03 Brocade Communications Systems, Inc. TCAM management approach that minimize movements
US8599850B2 (en) 2009-09-21 2013-12-03 Brocade Communications Systems, Inc. Provisioning single or multistage networks using ethernet service instances (ESIs)
US8438330B2 (en) 2010-05-17 2013-05-07 Netlogic Microsystems, Inc. Updating cam arrays using prefix length distribution prediction
US7920399B1 (en) 2010-10-21 2011-04-05 Netlogic Microsystems, Inc. Low power content addressable memory device having selectable cascaded array segments
US8467213B1 (en) 2011-03-22 2013-06-18 Netlogic Microsystems, Inc. Power limiting in a content search system
US9230620B1 (en) * 2012-03-06 2016-01-05 Inphi Corporation Distributed hardware tree search methods and apparatus for memory data replacement
US9384835B2 (en) 2012-05-29 2016-07-05 Globalfoundries Inc. Content addressable memory early-predict late-correct single ended sensing
US9100212B2 (en) * 2012-07-18 2015-08-04 Netronome Systems, Inc. Transactional memory that performs a direct 32-bit lookup operation
US9098264B2 (en) * 2012-07-18 2015-08-04 Netronome Systems, Inc. Transactional memory that performs a direct 24-BIT lookup operation
US9152452B2 (en) * 2012-08-29 2015-10-06 Netronome Systems, Inc. Transactional memory that performs a CAMR 32-bit lookup operation
IL233776B (en) * 2014-07-24 2019-02-28 Verint Systems Ltd System and method for range matching
WO2016069228A1 (en) * 2014-10-29 2016-05-06 Kopin Corporation Ternary addressable select scanner
CN105550234B (en) * 2015-12-07 2018-12-25 浙江大学 Transmission method when being chosen based on binary search moonlet data

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5329618A (en) * 1992-04-02 1994-07-12 Fibronics Ltd. Look-up table for a bridge in a data communications system
US5386413A (en) * 1993-03-19 1995-01-31 Bell Communications Research, Inc. Fast multilevel hierarchical routing table lookup using content addressable memory
US5414704A (en) * 1992-10-22 1995-05-09 Digital Equipment Corporation Address lookup in packet data communications link, using hashing and content-addressable memory
US5422838A (en) * 1993-10-25 1995-06-06 At&T Corp. Content-addressable memory with programmable field masking
US5568415A (en) * 1993-02-19 1996-10-22 Digital Equipment Corporation Content addressable memory having a pair of memory cells storing don't care states for address translation

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5329618A (en) * 1992-04-02 1994-07-12 Fibronics Ltd. Look-up table for a bridge in a data communications system
US5414704A (en) * 1992-10-22 1995-05-09 Digital Equipment Corporation Address lookup in packet data communications link, using hashing and content-addressable memory
US5568415A (en) * 1993-02-19 1996-10-22 Digital Equipment Corporation Content addressable memory having a pair of memory cells storing don't care states for address translation
US5386413A (en) * 1993-03-19 1995-01-31 Bell Communications Research, Inc. Fast multilevel hierarchical routing table lookup using content addressable memory
US5422838A (en) * 1993-10-25 1995-06-06 At&T Corp. Content-addressable memory with programmable field masking

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
AU774402B2 (en) * 1998-12-03 2004-06-24 Nortel Networks Corporation Providing desired service policies to subscribers accessing internet
US6415354B1 (en) 1999-07-15 2002-07-02 Applied Micro Circuits Corporation Pipelined methods and apparatus for weight selection and content addressable memory searches
EP1352334A2 (en) * 2001-07-20 2003-10-15 Nokia Inc. Selective routing of data flows using a tcam
EP1352334A4 (en) * 2001-07-20 2007-01-03 Nokia Inc Selective routing of data flows using a tcam
KR20020081569A (en) * 2002-09-04 2002-10-28 (주)시큐어베이스 The Management Method of tables that have entries of same size on CAM in Network device
WO2010094550A1 (en) * 2009-02-20 2010-08-26 Siemens Aktiengesellschaft Method for allocating addresses, and data processing system for carrying out the method
EP3222013A1 (en) * 2014-11-19 2017-09-27 Coriant Oy A lookup system and a lookup method

Also Published As

Publication number Publication date
AU6440998A (en) 1998-10-12
US5920886A (en) 1999-07-06

Similar Documents

Publication Publication Date Title
US5920886A (en) Accelerated hierarchical address filtering and translation using binary and ternary CAMs
US6665297B1 (en) Network routing table
US6181698B1 (en) Network routing table using content addressable memory
US7313667B1 (en) Methods and apparatus for mapping fields of entries into new values and combining these mapped values into mapped entries for use in lookup operations such as for packet processing
US7412561B2 (en) Transposing of bits in input data to form a comparand within a content addressable memory
JP4482259B2 (en) Method and apparatus for a 4-way hash table
US6434144B1 (en) Multi-level table lookup
US7424468B2 (en) Internet protocol address look-up device
US7526603B1 (en) High-speed low-power CAM-based search engine
US20070192303A1 (en) Method and Apparatus for Longest Prefix Matching in Processing a Forwarding Information Database
US20050021752A1 (en) Reverse path forwarding protection of packets using automated population of access control lists based on a forwarding information base
EP0746823B1 (en) Bit mapping apparatus and method
CN111937360B (en) Longest prefix matching
US7403526B1 (en) Partitioning and filtering a search space of particular use for determining a longest prefix match thereon
US6804230B1 (en) Communication device with forwarding database having a trie search facility
Hayashi et al. High-speed table lookup engine for IPv6 longest prefix match
WO2003027854A1 (en) Technique for updating a content addressable memory
EP1570608A1 (en) Parallel address decoding in a router
US6272133B1 (en) Packet filtering method
JP3558151B2 (en) Data search circuit
JPH07118719B2 (en) Pattern search method and apparatus
KR100428247B1 (en) Method of Constructing the Pipe-Lined Content Addressable Memory for High Speed Lookup of Longest Prefix Matching Algorithm in Internet Protocol Address Lookup
KR100460188B1 (en) Internet protocol address look-up method
KR100459542B1 (en) Internet protocol address look-up device
Pao TCAM organization for lPv6 address lookup

Legal Events

Date Code Title Description
AK Designated states

Kind code of ref document: A1

Designated state(s): AL AM AT AU AZ BA BB BG BR BY CA CH CN CU CZ DE DK EE ES FI GB GE GH GM GW HU ID IL IS JP KE KG KP KR KZ LC LK LR LS LT LU LV MD MG MK MN MW MX NO NZ PL PT RO RU SD SE SG SI SK SL TJ TM TR TT UA UG UZ VN YU ZW

AL Designated countries for regional patents

Kind code of ref document: A1

Designated state(s): GH GM KE LS MW SD SZ UG ZW AM AZ BY KG KZ MD RU TJ TM AT BE CH DE DK ES FI FR GB GR IE IT LU MC NL PT SE BF BJ CF CG CI CM GA GN ML MR NE SN TD TG

121 Ep: the epo has been informed by wipo that ep was designated in this application
REG Reference to national code

Ref country code: DE

Ref legal event code: 8642

NENP Non-entry into the national phase

Ref country code: CA

122 Ep: pct application non-entry in european phase
NENP Non-entry into the national phase

Ref country code: JP

Ref document number: 1998540526

Format of ref document f/p: F