US6606681B1 - Optimized content addressable memory (CAM) - Google Patents
- ️Tue Aug 12 2003
US6606681B1 - Optimized content addressable memory (CAM) - Google Patents
Optimized content addressable memory (CAM) Download PDFInfo
-
Publication number
- US6606681B1 US6606681B1 US09/792,625 US79262501A US6606681B1 US 6606681 B1 US6606681 B1 US 6606681B1 US 79262501 A US79262501 A US 79262501A US 6606681 B1 US6606681 B1 US 6606681B1 Authority
- US
- United States Prior art keywords
- address
- cam
- key
- entry
- context Prior art date
- 2001-02-23 Legal status (The legal status 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 status listed.)
- Expired - Lifetime, expires 2021-06-28
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L45/00—Routing or path finding of packets in data switching networks
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L45/00—Routing or path finding of packets in data switching networks
- H04L45/74—Address processing for routing
- H04L45/745—Address table lookup; Address filtering
- H04L45/7453—Address table lookup; Address filtering using hashing
Definitions
- This invention relates generally to packet switched communication systems.
- RAM Random Access Memory
- Read-only memory can be used for storage of information that does not change.
- a conventional memory structure includes a memory space of data that includes a plurality of entries, each identifiable by a specific location in the memory space. Each entry has a name (the address) that serves to locate the contents within the memory space.
- An associative memory element more commonly referred to as content addressable memory (CAM), includes a different structure. CAM element objects are selected based on their contents, not based on their location in the memory space. Each CAM element includes a key and associated data. Examples of associative memory elements include a hash table and set-associative table. A content addressable memory is searched (searching of the keys in the CAM memory space) and returns a data value (data word) upon detecting a valid match condition for a given key. The CAM contains all keys to be compared during a search operation. In a conventional CAM, each key (i.e., entry) in the CAM is associated with a single data word.
- the association can be by location, that is, entries in the CAM can map directly to data stored in a RAM.
- the associative data portion of the CAM can be of the form of an actual data word or a pointer to the data word that is associated with the corresponding key.
- a CAM is searched whenever the information associated with a key is needed. A search is performed in the valid portion of the CAM. If a match is detected, a data word associated with the matching key is returned. Where the association is by location, the address of the key is obtained when a match is detected. Using the returned address, data can be read from, for example, a RAM that is used to store the associated data words.
- FIG. 1 a An example of a conventional CAM including associated RAM for storing data words is shown in FIG. 1 a.
- the CAM 100 includes a plurality of entries 102 , each including a valid bit 104 and a key 106 .
- the valid bit is set for each valid entry in CAM 100 .
- Not shown, but associated with each entry in the CAM 100 is an address for a given entry.
- Data words are stored in an external RAM 108 .
- Data words are located in RAM 108 in accordance with the addresses associated with the given entries (keys) in CAM 100 .
- An external search engine 110 provides keys to be searched for in the information space associated with CAM 100 . Thereafter, the valid portion of the CAM 100 (all valid entries) is searched. The address of a matching key is obtained upon detection of a match. The address is in turn forwarded to control logic 111 .
- Control logic 111 uses the address to access the appropriate data word stored in the RAM 108 (the data word associated with the key being searched).
- FIG. 1 b Another example of a conventional CAM is shown in FIG. 1 b, which is used to make forwarding decisions of packets in a router or switch.
- Each entry 102 in CAM 150 can include a tag 112 .
- the tag 112 is used to designate the entry as being either a source address or destination address. Accordingly, the same key can be stored multiple times in CAM 150 as a source address and as a destination address. Depending on whether the search invoked by search engine 110 is for a destination address or source address, different hits will result in CAM 150 for the same key.
- the number of entries or blocks in CAM 150 is equal to the sum of the number of source addresses and destination addresses that are to be searched.
- CAM memory tends to be expensive (relative to RAM). As the information base associated with a CAM grows, such as when multiple copies of the same key are included in the CAM, costs rise. What is desired is a means to be able to minimize the CAM size while still realizing the benefits derived from an associative memory structure.
- the invention provides a content addressable memory including an associative memory portion including N entries, each entry including a key.
- the content addressable memory further includes a random access memory portion.
- the random access memory portion includes K*N entries where a single key stored as an entry in the associative memory portion is mapped to K entries in the random access memory portion, where K is greater than 1.
- Each entry in the random access memory portion can be associated with a single key and can include information based on the key type.
- the type can be a source or destination address.
- the type can be a MAC address or an MPLS label.
- Each entry can include an M-bit type indicator, where M is greater than 1.
- the number of types can be two, source and destination addresses.
- the invention provides a content addressable memory including an associative memory portion including N entries, each entry including a key and an M-bit type indicator, where M is greater than 1.
- the content addressable memory further includes a random access memory portion.
- the random access memory portion includes N entries including K portions where a single key stored as an entry in the associative memory portion is mapped to a single entry in the random access memory including the K portions, where K is greater than 1.
- the invention provides a content addressable memory for storing MAC addresses and MPLS labels and includes an associative memory portion including N entries. Each entry includes a key and an M-bit type indicator, where M is greater than 1. Each key is of the form of a MAC address or MPLS label or both as indicated by the type indicator.
- the content addressable memory further includes a random access memory portion. The random access memory portion including K*N entries where a single key stored as an entry in the associative memory portion is mapped to up to K entries in the random access memory portion, where K is greater than 1.
- the invention provides a method for storing MAC addresses in a content addressable memory.
- the content addressable memory includes an associative portion and a random access portion.
- the associative portion includes one or more entries each including an address.
- the random access portion is operable to store information relevant to each address.
- the method includes associating a single address with plural entries in the random access memory when the single address is maintained in the associative portion of the content addressable memory for two different contexts, one dependent on whether the address is a source address and one dependent on whether the address is a destination address.
- the invention provides a method for storing MAC addresses in a content addressable memory.
- the content addressable memory includes an associative portion and a random access portion.
- the associative portion includes one or more entries each including an address.
- the random access portion is operable to store information relevant to each address.
- the method includes determining if an address is present in the associative portion for a first context, either as a source address or destination address. If the address is present, marking the address in the associative portion to indicate that the address is to be associated with a second context. Information relevant to the second context and associated with the address is added to the random access portion including mapping the address to relevant information stored in the random access portion associated with the first context and the second context.
- the invention provides a method for storing MAC addresses and MPLS labels in a content addressable memory.
- the method includes determining if a key is present in a first entry in the associative portion for a first context, either as a source address or destination address or both. If so, a portion of the key to be associated with an MPLS label is located. A same portion for all other keys in the content addressable memory is checked to see if the portion matches. If not, the address in the associative portion of the first entry is marked to indicate that the address is to be associated with a second context, the second context being an MPLS label. Information relevant to the second context and associated with the address is added to the random access portion including mapping the address to relevant information stored in the random access portion associated with the first context and the second context.
- aspects of the invention can include one or more of the following features. If the portion matches, a second portion of the key to be associated with a second MPLS label is located. A same portion for all other keys in the content addressable memory is checked to see if the second portion matches. If not, the address in the associative portion is marked to indicate that the address is to be associated with a second context, the second context being an MPLS label. Information relevant to the second context and associated with the address is added to the random access portion including mapping the address to relevant information stored in the random access portion associated with the first context and the second context.
- An optimized CAM is proposed that minimizes the CAM portion of a device at the expense of an external RAM portion of the device.
- the RAM portion of the device associated with the optimized CAM can be scaled up to accommodate a larger information base while keeping the associated CAM portion of the device the same size or smaller.
- the optimized CAM can include multi-use elements.
- the multi-use elements allow the optimized CAM to exploit the whole of the information base to be stored and searched while minimizing the number of entries required to support such operations.
- the optimized CAM provides a means to combine the search space for the information base to include both Ethernet MAC addresses and MPLS labels.
- the optimized CAM provides silicon area saving as well as saving in search time with respect to conventional CAM solutions for the same size of search information base.
- the optimized CAM enables supporting a mix of Ethernet type and MPLS type packets in the same network.
- One application of the optimized CAM is to implement a resilient packet ring media access controller (MAC).
- a resilient packet ring MAC provides functionality to allow spatial reuse of bandwidth and resiliency in a ring-based media.
- the resilient packet ring MAC can operate with Ethernet/802.3 and MPLS packets.
- FIG. 1 a is a block diagram of a conventional CAM.
- FIG. 1 b is a block diagram of another conventional CAM.
- FIG. 2 a is a block diagram of a lookup block including an optimized CAM block.
- FIG. 2 b is a block diagram of an optimized CAM block.
- FIG. 2 c is a block diagram of a data structure stored in the optimized CAM block of FIG. 2 b.
- FIG. 2 d is a block diagram of a data structure for an entry in the status memory of FIG. 2 b.
- FIG. 2 e is a block diagram of a data structure for a virtual entry in the status memory of FIG. 2 b.
- FIG. 3 is a block diagram for an alternative data structure stored in the optimized CAM block of FIG. 2 b for supporting MAC addresses and MPLS labels.
- FIG. 4 is a block diagram for an alternative data structure stored in the optimized CAM block of FIG. 2 b for supporting MAC addresses and plural MPLS labels.
- An optimized CAM is presented for use in plural digital switching applications.
- the optimized CAM can be used in conjunction with a Spatial Reuse Protocol (SRP) [RFC2892] forwarding block in a node of a network ring.
- the SRP forwarding block can be used to decide what traffic to add to the ring.
- the optimized CAM can be used in association with a lookup block of the SRP forwarding block.
- the lookup block performs searches for packets and returns relevant information.
- the relevant information can include decision information as to whether to pass a given packet using the SRP forwarding block to the ring or alternatively redirect the packet to a host associated with a respective node.
- the lookup block can be used for other operations (other than forwarding or filtering) such as for accounting, billing, traffic management or legacy operations.
- a lookup block 200 includes an optimized CAM block 202 , control logic 204 and memory 206 .
- Optimized CAM block 202 provides as an output a hit indication on hit signal line 208 and associated status bits on status bus 210 to control logic 204 . Details of the optimized CAM block 202 are described in greater detail below in association with FIGS. 2 b and 2 c.
- Control logic 204 receives the hit signal and associated status bits on hit signal line 208 and status bus 210 .
- Control logic 204 is used to monitor the optimized CAM block 202 output including to count the number of times an address in the CAM has been matched, and the number of bytes in the matched packets.
- Control logic 204 provides as an output a destination address match signal 222 , source address match signal 224 , byte counter signal 226 and a packet counter signal 228 to convey accounting information to a next block in the system.
- Memory 206 stores accounting information associated with lookup block 200 .
- memory 206 is a dual bank SRAM (1024 words ⁇ 144 bits SRAM) and is used to store the number of times an address in the CAM has been matched as well as the accumulated number of bytes in the matched packets.
- memory 206 is sized to store 1024 entries of 144 bits per entry.
- bits 0 through 71 are associated with source addresses while bits 72 through 143 are associated with destination addresses.
- the 144-bit entries can be stored in two banks of 1024 words ⁇ 72 bits where the most significant bit of the address chooses the bank (e.g., Bank 0 is for Source Addressee [SA] and Bank 1 is for Destination Addressee [DA]).
- Optimized CAM block 202 is shown in more detail in FIG. 2 b and includes a packet processing engine 252 , CAM control logic 254 , CAM (information space) 256 , status memory 258 , flip-flops 260 and selectors 262 .
- Optimized CAM block 202 finds matches between addresses contained in a packet with that of the addresses associated with a given node (and stored in CAM 256 ).
- Packet processing engine 252 receives as an input packets for processing and operates to extract address information from each packet. Packet processing engine 252 forwards the extracted address information in the form of a search string to CAM control logic 254 via selector 262 a.
- CAM control logic 254 receives search strings for processing and includes means for initiating and controlling searches of the information stored in CAM 256 .
- CAM control logic 254 also receives masking information through selector 262 b for use in masking portions of a key when executing a search. Masking search strings is described in greater detail below.
- CAM control logic 254 configures CAM 256 into its operational modes (access and search modes), the details of which are described in greater detail below.
- CAM control logic 254 controls reset, read, write and probe operations. CAM probe operations can be invoked to check that the CAM search routine is operational (during prototype testing) or during normal operations to determine if an address exists in the CAM 256 .
- CAM control logic includes plural registers for use in loading search strings and keys as well as controlling the operation of CAM 256 .
- CAM 256 is the repository of keys.
- CAM 256 includes one or more entries each including a key.
- Each entry in CAM 256 includes location data designating where in the information space associated with CAM 256 an entry is located.
- the location data, or address for the entry maps to status bits stored at a complementary location in status memory 258 .
- the structure and contents of status memory 258 is described in greater detail below.
- a data structure for entries stored in CAM 256 is shown in FIG. 2 c.
- Each entry 270 includes a tag with source/destination address bits 272 and a key 274 .
- the source/destination address bits 272 are two binary bits and indicate if the associated key entry (address) is a source or destination address or both. This aids in the searching of CAM 256 as will be described in greater detail below.
- the source/destination bits 272 are set as described in Table 1.
- the address is a Source Address 10
- the address is a Destination Address 11
- the address is both a Source and a Destination Address
- Key 274 can be a 48 bit MAC address.
- key 274 can be an MPLS label or tag. The use of MPLS labels is described in greater detail below.
- CAM 256 is sized to store a maximum of 1024 different 48-bit MAC Addresses (1024 words by 52 bits, where two bits are used for DA/SA, 48 for MAC address and two bits are unused).
- CAM 256 includes a valid bit (not shown) associated with each address location. Whenever a full reset or address location reset occurs, the valid bit is un-set. Operationally, CAM 256 only examines entries having a valid bit that is set. The valid bit is set when data is written to a given address location.
- CAM 256 includes a search routine (not shown).
- the search routine is invoked upon receipt of a search string from CAM control logic 254 .
- the search routine compares the search string to the CAM's key entries, masking bits in accordance with any received masking information, and returns an address for a matching entry as an output.
- CAM 256 operates in two modes, search and access. In search mode, CAM 256 operates on search strings received from CAM control logic 254 and locates matching keys and their associated status address information as described above. In access mode, CAM 256 operates as a RAM, and can be read from or written to using conventional address and data busses (not shown) supported by CAM 256 .
- Status memory 258 can be of the form of an SRAM. Status memory 258 includes information status bits associated with the keys in CAM 256 . Each address location in the CAM 256 has a direct relationship with the data stored in the status memory 258 (e.g., the address stored in CAM location 0 ⁇ 25 has its corresponding status bits stored in the status memory at location 0 ⁇ 25). The hit address determined in a search of CAM 256 for a given key is provided to status memory 258 so that the associated status information (bits) can be fed into the next block (the control logic block 204 ) of the device.
- the data structure for an entry stored in status memory 258 is four binary bits (0:3). In this implementation, bit 0 is associated with destination addresses, while bits (1:3) are associated with source addresses. Forwarding decisions for the packet are determined based on the values of the status bits. The status bits are set up in accordance with the information described in Table 2.
- status memory 258 includes entries with portions (bits) associated with each of source addresses and destination addresses, respectively.
- Control logic 204 and other portions of the device read/use the appropriate portions of the status bits.
- the address being searched is a destination address
- bit 0 of the status bits is read, the remaining bits being ignored.
- the address being searched is a source address
- status bits (1:3) are used, with bit 0 being ignored.
- each key can be either a source or destination address or both
- a single entry stored in CAM 256 is mapped to plural chunks of status information that are in turn stored in an entry in status memory 258 .
- the “entry” in status memory 258 can be sized in accordance with the information required to be stored.
- the entry includes plural portions (i.e., one portion associated with each chunk of status information (e.g., one portion for the relevant source address information and one for the relevant destination address information)), each of which can include plural bits, bytes or words of data.
- FIG. 2 d a general block diagram for an entry in status memory 258 is shown.
- Each entry 275 includes first and second portions 276 and 277 , respectively.
- the first portion can be dedicated to include relevant information for destination addresses and be sized to be one bit in length
- the second portion can be dedicated to include relevant information for source addresses and be sized to be three bits in length.
- Status memory 258 can have a width (in words or bytes or bits) to accommodate the information that is required to be stored for each of the different types of keys (e.g., source address, destination address) stored in CAM 256 .
- Status memory 258 can dedicate any number of bits/bytes/words to each key type for a given entry.
- Status memory 258 includes a one-to-one mapping of entries in CAM 256 with an entry in the status memory 258 .
- each entry includes two (or more, as described below) portions. Which portions are relevant depends on the type of address being searched (for example, source or destination).
- each entry in CAM 256 is associated with plural locations (forming a single “virtual entry”) in status memory 258 .
- each entry in CAM 256 can be associated with a virtual entry 280 in status memory 258 and include two (or more) contiguous words 282 .
- Logic can be included to map the address provided from CAM 256 to the tuple (or other defined set of words) stored in status memory 258 . Which word of the tuple (or set) is read, can depend on the type of address being searched for.
- CAM 256 includes N addressable entries, while status memory 258 includes K*N physical addressable entries (corresponding to N virtual entries).
- optimized CAM block 202 provides a 1 to N mapping from entries in CAM 256 to relevant information stored in a respective entry or “virtual entry” of status memory 258 . Mapping schemes are described in greater detail below.
- flip flops 260 a-b provide a delayed and synchronized hit status signal for output by optimized CAM block 202 to control logic 204 of FIG. 2 a.
- the hit status and status address can also be provided directly to a microcontroller.
- the search for a source address includes setting the CAM mask and search bits as appropriate (the DA search bit to ‘0’, and the SA bit to ‘1’) provided from CAM control logic 254 , and applying the extracted source address received from the packet-processing engine 252 to search bits [47:0]. If a match is made, the source address match signal 224 is held high for the entire packet (SAM Status Bit is not required).
- the optimized CAM block 202 can include a mapping from each CAM 256 entry (N entries in total) to plural physical entries (K*N) in status memory 258 .
- each of the physical entries in status memory 258 corresponded to relevant information associated with a particular type of key stored in CAM 256 .
- Addresses of different types can be stored in CAM 256 .
- the example above described source and destination addresses as might be associated with Ethernet packets. However, other packet formats can be supported. For example, MPLS labels can be stored in CAM 256 along with Ethernet source and destination addresses.
- An alternative data structure associated with entries in CAM 256 is shown in FIG. 3 .
- Each entry 300 includes tag bits 302 and a key 304 .
- the tag bits indicate the type of key stored.
- tag bits 302 can include 3 bits for designating whether the key (address) stored in CAM 256 for a given entry is a source address, destination address, both and/or an MPLS label.
- two source/destination address bits 306 are included and indicate if the associated key entry (address) is a source or destination address or both.
- the source/destination bits are set as described in Table 1.
- Tag 302 also includes a single MPLS label bit 308 to indicate that the address stored is an MPLS label.
- MPLS labels are 20 bits in length, while Ethernet source or destination addresses are sized to be 48 bits.
- CAM 256 When used as an MPLS label, CAM 256 only evaluates 20 bits of a given key. In one implementation, the relevant 20 bits are the first twenty bits of the key. Alternatively, the last twenty bits or some other combination of bits can be identified as being relevant for evaluation when searching for an MPLS label.
- Table 3 includes a description for how to set the tag bit values for a combined Ethernet address and MPLS label information space.
- Key 304 can be a 48 bit MAC address or an MPLS label or both. Key 304 can be both an MPLS label and a MAC address where its length is 48 bits, and where 20 of the bits are associated with an MPLS label. In one implementation, there is no restriction on the ratio of source addresses compared to destination addresses or MPLS labels stored in the CAM 256 . In one implementation, CAM 256 is sized to store a maximum of 1024 different 48-bit MAC Addresses or MPLS label (1024 words by 52 bits, where three bits are used for DA/SA/MPLS, 48 for MAC address or MPLS label and one bit is unused). As described above, CAM 256 can include a valid bit associated with each address location.
- CAM 256 includes three types of entries (source address, destination address and MPLS label)
- status memory 258 is appropriately sized (3*N) to include a physical entry (or portion of a wide entry) that is relevant to each type of key (address). Again, a mapping from a hit address presented by CAM 256 to a relevant portion of an entry, or to a physical entry in a larger virtual entry in status memory 258 may be required. Alternatively, only the relevant portion of an entry in status memory 258 may be read and passed to a next block in the system.
- CAM 252 includes 1024 entries and a status memory 257 is composed of a 3072 entry RAM (or 1024 triple-entry RAM) to support a fully populated and integrated MAC address and MPLS label information space.
- destination address When an Ethernet packet arrives, its destination (or source address) is extracted from the packet header.
- the search for destination address (or source address) is performed by selecting (using masking of individual CAM bits) the valid bit, appropriate tag bits 302 (3 bits) and the key 304 (48 bits) and applying destination address (or source address) at the search input of the CAM 256 . If there is a hit, the index (hit address) output of the CAM 256 is used as the read address of the RAM to read the corresponding data entry from status memory 258 .
- the search for a matching MPLS label includes selecting (using masking of individual 20 CAM bits) the appropriate tag bit 302 (3 bits) and the key 304 (20 bits). Upon a hit, the relevant information (the corresponding data entry) from status memory 258 is read.
- the MPLS label can be chosen in a way that its 20 bit value matches to a predetermined portion (as many bits as the size of an MPLS label—20 bits) of an existing source address/destination address (48 bits) already stored in the CAM 256 . This can be accomplished since MPLS labels have no global meaning and can be chosen independently by a local node according to its label resources.
- MPLS labels may be assigned as outlined above using source address and destination address values starting from the top of the CAM 256 if there is at least one Ethernet entry present.
- the tag bits 302 associated with the selected entry are set to indicate that the entry can also be an MPLS label by setting tag bit 308 .
- a pointer (not shown) can be used to remember the last used location. The next time an MPLS label is needed, the same process is repeated starting from the pointer location if there is at least one unassigned Ethernet entry in CAM 256 . Otherwise, an unused number can be assigned randomly or using any other method. When an unused number is assigned, the unused number is added to CAM 256 as a new entry.
- a search for the 20 bit MPLS label value is performed over the remaining portion of the CAM 256 information space. If plural hits arise (i.e., hit address is different than the address of the proposed MPLS label), then the proposed MPLS label is not unique in the information space, and as such another Ethernet entry is selected.
- the first full address is searched in the CAM 256 for a possible existing source (destination) address entry with the same value. If it is found, the same location is used for both. If it is not found, a new search in the CAM 256 for a possible existing MPLS label with the same 20 bit value is performed. If a matching MPLS label is found, the same location is used for the destination (source) address entry as well.
- this new destination (source) address entry is inserted to an empty location by writing the destination address into the key field 304 , setting the valid bit to valid, and setting tag bits 308 to an appropriate value (e.g., 100 for a destination address or 010 for a source address).
- CAM 256 becomes almost full with source/destination address and MPLS entries and if there are unmapped source addresses or destination address entries, some of the existing unmapped MPLS entries can be reassigned so that they map to a previously unmapped source/destination address.
- the change can be communicated to the downstream node so that labels are swapped correctly. Note that while a change is being communicated to the downstream node, both the new and old MPLS labels should be kept in the CAM 256 . Right after a confirmation is received, the old value can be removed from the CAM 256 .
- plural MPLS labels can be mapped to a single source/destination address.
- An alternative data structure associated with entries in CAM 256 that include plural MPLS labels is shown in FIG. 4 .
- Each entry 400 includes tag bits 402 and a key 404 .
- the tag bits indicate the type of key stored.
- tag bits 402 can include 4 bits for designating whether the key (address) stored in CAM 256 for a given entry is a source address, destination address or both and whether the entry includes one or two MPLS labels.
- two source/destination address bits 406 are included and indicate if the associated key entry (address) is a source or destination address or both.
- the source/destination bits are set as described in Table 1.
- Tag 402 also includes two MPLS label bits 408 to indicate that the address stored includes one or two MPLS labels.
- MPLS labels are 20 bits in length, while Ethernet source or destination addresses are sized to be 48 bits.
- a key can include a single source or destination address or can accommodate up to two MPLS labels.
- CAM 256 When searching for an MPLS label, CAM 256 only evaluates the relevant 20 bits of a given key associated with an MPLS label. In one implementation, the first 20 bits are used for a first MPLS label and the last 20 bits are used for the second MPLS label. Alternatively, some other combination of bits can be identified as being relevant for evaluation when searching from among the two embedded MPLS labels.
- Table 4 includes a description for how to set the tag bit values for a combined Ethernet address and MPLS label information space where two MPLS labels can be included in a single entry.
- Source/Destination Address/multiple MPLS tag bits Tag bits (DA/SA/MPLS1/2) Description 0000 Invalid entry 01xx
- the address is a Source Address 10xx
- the address is a Destination Address 11xx
- the address is both a Source and a Destination xx1x Address includes an MPLS label at location 1 xxx1 Address includes an MPLS label at location 2 xx11 Address includes an MPLS label at locations 1 & 2 1111
- the address is a source address, a destination address and includes 2 MPLS labels xxxx (note: All 16 combinations are possible)
- Key 404 can be a 48 bit MAC address or up to two MPLS labels or both. Key 404 can be both an MPLS label and a MAC address where its length is 48 bits, and where 20 (or 40) of the bits are associated with MPLS label(s). In one implementation, there is no restriction on the ratio of source addresses compared to destination addresses or MPLS labels stored in the CAM 256 . In one implementation, CAM 256 is sized to store a maximum of 1024 different 48-bit MAC Addresses or MPLS labels (1024 words by 52 bits, where four bits are used for DA/SA/MPLS 1 /MPLS 2 and 48 for MAC address or MPLS labels). As described above, CAM 256 can include a valid bit associated with each address location.
- CAM 256 includes four types of entries (source address, destination address, MPLS label 1 and MPLS label 2 ), status memory 258 is appropriately sized (4*N) to include a physical entry (or portion of a wide entry) that is relevant to each type of key (address). Again, a mapping from a hit address presented by CAM 256 to a relevant portion of an entry, or to a physical entry in a larger virtual entry in status memory 258 may be required. Alternatively, only the relevant portion of an entry may be read and passed to a next block in the system.
- CAM 252 includes 1024 entries and a status memory 258 composed of a 4096 entry RAM (or 1024 quadruple-entry RAM) to support a fully populated and integrated MAC address and MPLS label information space.
- destination address As before, when an Ethernet packet arrives, its destination (or source address) is extracted from the packet header.
- the search for destination address (or source address) is performed by selecting (using masking of individual CAM bits) the valid bit, appropriate tag bit 402 (4 bits) and the key 404 (48 bits) and applying destination address (or source address) at the search input of the CAM 256 . If there is a hit, the index (hit address) output of the CAM 256 is used as the read address of the RAM to read the corresponding data entry from status memory 258 .
- the search for the MPLS label is performed by selecting (using masking of individual CAM bits) the appropriate tag bit 402 (4 bits) and the key 404 (20 bits), first in a portion designated for storing a first MPLS label (i.e., MPLS 1 space), then, if no hit is detected, in a second portion designated for storing a second MPLS label (i.e., MPLS 2 space).
- the relevant information the corresponding data entry
- the relevant information the corresponding data entry
- the label is chosen in a way to match with one of two predetermined 20-bit portions of an existing source/destination address (48 bits) in CAM 256 . Selecting and mapping labels is as described above.
- Entries can be added to CAM 256 as described above.
- a multiple hit signal can be added to CAM 256 .
- the multiple hit signal indicates that there are at least two matches when a search is performed. Note that multiple hits should not happen when a new MAC address is inserted since a probe should happen prior to an insertion. However, a multiple hit may happen in the MPLS portion of the CAM 256 , whenever a new MAC address is inserted. When a probe in MPLS label portion(s) of a new MAC address indicates a multiple hit, the MPLS labels should be reassigned using the method described above before the new MAC entry is inserted. This way the MPLS searches will never result in a multiple hit later on.
- CAM 256 does not need a multiple hit signal. Before adding a new entry, CAM 256 reads and compares the CAM information space to determine if there will be a multiple hit after adding the new entry. If there is no multiple hit, the compare operation will produce no results (and accordingly a multiple hit would not arise if the proposed entry were added). If the compare operation does not produce a hit, then the label can be assigned or added. If the new MAC entry will produce a multiple hit, the multiple hit can be resolved by reassigning existing MPLS labels to some other value that does not cause a multiple hit. Any reassignment has to be communicated to the upstream node.
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
A method and apparatus for realizing a content addressable memory. The content addressable memory including an associative memory portion including N entries, each entry including a key and an M-bit type indicator. The content addressable memory further including a random access memory portion. The random access memory portion includes K*N entries where a single key stored as an entry in the associative memory portion is mapped to K entries in the random access memory portion, where K is greater than 1.
Description
This invention relates generally to packet switched communication systems.
BACKGROUNDWith reference to computing systems, memory refers to a place where the computing system holds information, such information able to be accessed and worked on as appropriate. Random Access Memory (RAM) can be used in a personal computer to temporarily store data that is currently being accessed or worked on. Read-only memory can be used for storage of information that does not change. A conventional memory structure includes a memory space of data that includes a plurality of entries, each identifiable by a specific location in the memory space. Each entry has a name (the address) that serves to locate the contents within the memory space.
An associative memory element, more commonly referred to as content addressable memory (CAM), includes a different structure. CAM element objects are selected based on their contents, not based on their location in the memory space. Each CAM element includes a key and associated data. Examples of associative memory elements include a hash table and set-associative table. A content addressable memory is searched (searching of the keys in the CAM memory space) and returns a data value (data word) upon detecting a valid match condition for a given key. The CAM contains all keys to be compared during a search operation. In a conventional CAM, each key (i.e., entry) in the CAM is associated with a single data word. The association can be by location, that is, entries in the CAM can map directly to data stored in a RAM. As such, the associative data portion of the CAM can be of the form of an actual data word or a pointer to the data word that is associated with the corresponding key.
In use, a CAM is searched whenever the information associated with a key is needed. A search is performed in the valid portion of the CAM. If a match is detected, a data word associated with the matching key is returned. Where the association is by location, the address of the key is obtained when a match is detected. Using the returned address, data can be read from, for example, a RAM that is used to store the associated data words.
An example of a conventional CAM including associated RAM for storing data words is shown in FIG. 1a. The
CAM100 includes a plurality of
entries102, each including a
valid bit104 and a
key106. The valid bit is set for each valid entry in
CAM100. Not shown, but associated with each entry in the
CAM100, is an address for a given entry. Data words are stored in an
external RAM108. Data words are located in
RAM108 in accordance with the addresses associated with the given entries (keys) in
CAM100. An
external search engine110 provides keys to be searched for in the information space associated with
CAM100. Thereafter, the valid portion of the CAM 100 (all valid entries) is searched. The address of a matching key is obtained upon detection of a match. The address is in turn forwarded to control
logic111.
Control logic111 uses the address to access the appropriate data word stored in the RAM 108 (the data word associated with the key being searched).
Another example of a conventional CAM is shown in FIG. 1b, which is used to make forwarding decisions of packets in a router or switch. Each
entry102 in
CAM150 can include a
tag112. The
tag112 is used to designate the entry as being either a source address or destination address. Accordingly, the same key can be stored multiple times in
CAM150 as a source address and as a destination address. Depending on whether the search invoked by
search engine110 is for a destination address or source address, different hits will result in
CAM150 for the same key. The number of entries or blocks in
CAM150 is equal to the sum of the number of source addresses and destination addresses that are to be searched.
CAM memory tends to be expensive (relative to RAM). As the information base associated with a CAM grows, such as when multiple copies of the same key are included in the CAM, costs rise. What is desired is a means to be able to minimize the CAM size while still realizing the benefits derived from an associative memory structure.
SUMMARYIn one aspect, the invention provides a content addressable memory including an associative memory portion including N entries, each entry including a key. The content addressable memory further includes a random access memory portion. The random access memory portion includes K*N entries where a single key stored as an entry in the associative memory portion is mapped to K entries in the random access memory portion, where K is greater than 1.
Aspects of the invention can include one or more of the following features. Each entry in the random access memory portion can be associated with a single key and can include information based on the key type. The type can be a source or destination address. The type can be a MAC address or an MPLS label. Each entry can include an M-bit type indicator, where M is greater than 1. The number of types can be two, source and destination addresses. The content addressable memory can be configured such that K=M.
In another aspect the invention provides a content addressable memory including an associative memory portion including N entries, each entry including a key and an M-bit type indicator, where M is greater than 1. The content addressable memory further includes a random access memory portion. The random access memory portion includes N entries including K portions where a single key stored as an entry in the associative memory portion is mapped to a single entry in the random access memory including the K portions, where K is greater than 1.
In another aspect, the invention provides a content addressable memory for storing MAC addresses and MPLS labels and includes an associative memory portion including N entries. Each entry includes a key and an M-bit type indicator, where M is greater than 1. Each key is of the form of a MAC address or MPLS label or both as indicated by the type indicator. The content addressable memory further includes a random access memory portion. The random access memory portion including K*N entries where a single key stored as an entry in the associative memory portion is mapped to up to K entries in the random access memory portion, where K is greater than 1.
In another aspect, the invention provides a method for storing MAC addresses in a content addressable memory. The content addressable memory includes an associative portion and a random access portion. The associative portion includes one or more entries each including an address. The random access portion is operable to store information relevant to each address. The method includes associating a single address with plural entries in the random access memory when the single address is maintained in the associative portion of the content addressable memory for two different contexts, one dependent on whether the address is a source address and one dependent on whether the address is a destination address.
In another aspect, the invention provides a method for storing MAC addresses in a content addressable memory. The content addressable memory includes an associative portion and a random access portion. The associative portion includes one or more entries each including an address. The random access portion is operable to store information relevant to each address. The method includes determining if an address is present in the associative portion for a first context, either as a source address or destination address. If the address is present, marking the address in the associative portion to indicate that the address is to be associated with a second context. Information relevant to the second context and associated with the address is added to the random access portion including mapping the address to relevant information stored in the random access portion associated with the first context and the second context.
In another aspect, the invention provides a method for storing MAC addresses and MPLS labels in a content addressable memory. The method includes determining if a key is present in a first entry in the associative portion for a first context, either as a source address or destination address or both. If so, a portion of the key to be associated with an MPLS label is located. A same portion for all other keys in the content addressable memory is checked to see if the portion matches. If not, the address in the associative portion of the first entry is marked to indicate that the address is to be associated with a second context, the second context being an MPLS label. Information relevant to the second context and associated with the address is added to the random access portion including mapping the address to relevant information stored in the random access portion associated with the first context and the second context.
Aspects of the invention can include one or more of the following features. If the portion matches, a second portion of the key to be associated with a second MPLS label is located. A same portion for all other keys in the content addressable memory is checked to see if the second portion matches. If not, the address in the associative portion is marked to indicate that the address is to be associated with a second context, the second context being an MPLS label. Information relevant to the second context and associated with the address is added to the random access portion including mapping the address to relevant information stored in the random access portion associated with the first context and the second context.
Aspects of the invention can include one or more of the following advantages. An optimized CAM is proposed that minimizes the CAM portion of a device at the expense of an external RAM portion of the device. The RAM portion of the device associated with the optimized CAM can be scaled up to accommodate a larger information base while keeping the associated CAM portion of the device the same size or smaller. The optimized CAM can include multi-use elements. The multi-use elements allow the optimized CAM to exploit the whole of the information base to be stored and searched while minimizing the number of entries required to support such operations. The optimized CAM provides a means to combine the search space for the information base to include both Ethernet MAC addresses and MPLS labels. The optimized CAM provides silicon area saving as well as saving in search time with respect to conventional CAM solutions for the same size of search information base. The optimized CAM enables supporting a mix of Ethernet type and MPLS type packets in the same network. One application of the optimized CAM is to implement a resilient packet ring media access controller (MAC). A resilient packet ring MAC provides functionality to allow spatial reuse of bandwidth and resiliency in a ring-based media. The resilient packet ring MAC can operate with Ethernet/802.3 and MPLS packets.
The details of one or more embodiments of the invention are set forth in the accompanying drawings and the description below. Other features, objects, and advantages of the invention will be apparent from the description and drawings, and from the claims.
DESCRIPTION OF DRAWINGSFIG. 1a is a block diagram of a conventional CAM.
FIG. 1b is a block diagram of another conventional CAM.
FIG. 2a is a block diagram of a lookup block including an optimized CAM block.
FIG. 2b is a block diagram of an optimized CAM block.
FIG. 2c is a block diagram of a data structure stored in the optimized CAM block of FIG. 2b.
FIG. 2d is a block diagram of a data structure for an entry in the status memory of FIG. 2b.
FIG. 2e is a block diagram of a data structure for a virtual entry in the status memory of FIG. 2b.
FIG. 3 is a block diagram for an alternative data structure stored in the optimized CAM block of FIG. 2b for supporting MAC addresses and MPLS labels.
FIG. 4 is a block diagram for an alternative data structure stored in the optimized CAM block of FIG. 2b for supporting MAC addresses and plural MPLS labels.
Like reference symbols in the various drawings indicate like elements.
DETAILED DESCRIPTIONAn optimized CAM is presented for use in plural digital switching applications. The optimized CAM can be used in conjunction with a Spatial Reuse Protocol (SRP) [RFC2892] forwarding block in a node of a network ring. The SRP forwarding block can be used to decide what traffic to add to the ring. The optimized CAM can be used in association with a lookup block of the SRP forwarding block. The lookup block performs searches for packets and returns relevant information. The relevant information can include decision information as to whether to pass a given packet using the SRP forwarding block to the ring or alternatively redirect the packet to a host associated with a respective node. The lookup block can be used for other operations (other than forwarding or filtering) such as for accounting, billing, traffic management or legacy operations.
Look-Up Block
Referring now to FIG. 2a, a
lookup block200 includes an optimized
CAM block202,
control logic204 and
memory206.
Data packets enter optimized
CAM block202 and the address for each packet is extracted from the packet header and provided as a search string to a CAM. A hit is made if there is a match with a key stored in the CAM. Optimized
CAM block202 provides as an output a hit indication on hit
signal line208 and associated status bits on
status bus210 to control
logic204. Details of the optimized
CAM block202 are described in greater detail below in association with FIGS. 2b and 2 c.
204 receives the hit signal and associated status bits on hit
signal line208 and
status bus210.
Control logic204 is used to monitor the optimized
CAM block202 output including to count the number of times an address in the CAM has been matched, and the number of bytes in the matched packets.
Control logic204 provides as an output a destination
address match signal222, source
address match signal224, byte counter signal 226 and a packet counter signal 228 to convey accounting information to a next block in the system.
206 stores accounting information associated with
lookup block200. In one implementation,
memory206 is a dual bank SRAM (1024 words×144 bits SRAM) and is used to store the number of times an address in the CAM has been matched as well as the accumulated number of bytes in the matched packets. In one implementation,
memory206 is sized to store 1024 entries of 144 bits per entry. In this implementation,
bits0 through 71 are associated with source addresses while bits 72 through 143 are associated with destination addresses. The 144-bit entries can be stored in two banks of 1024 words×72 bits where the most significant bit of the address chooses the bank (e.g.,
Bank0 is for Source Addressee [SA] and
Bank1 is for Destination Addressee [DA]).
Optimized CAM Block
Optimized
CAM block202 is shown in more detail in FIG. 2b and includes a
packet processing engine252,
CAM control logic254, CAM (information space) 256,
status memory258, flip-flops 260 and selectors 262. Optimized
CAM block202 finds matches between addresses contained in a packet with that of the addresses associated with a given node (and stored in CAM 256).
252 receives as an input packets for processing and operates to extract address information from each packet.
Packet processing engine252 forwards the extracted address information in the form of a search string to
CAM control logic254 via
selector262 a.
254 receives search strings for processing and includes means for initiating and controlling searches of the information stored in
CAM256.
CAM control logic254 also receives masking information through
selector262 b for use in masking portions of a key when executing a search. Masking search strings is described in greater detail below.
CAM control logic254 configures
CAM256 into its operational modes (access and search modes), the details of which are described in greater detail below. In addition,
CAM control logic254 controls reset, read, write and probe operations. CAM probe operations can be invoked to check that the CAM search routine is operational (during prototype testing) or during normal operations to determine if an address exists in the
CAM256. CAM control logic includes plural registers for use in loading search strings and keys as well as controlling the operation of
CAM256.
256 is the repository of keys.
CAM256 includes one or more entries each including a key. Each entry in
CAM256 includes location data designating where in the information space associated with
CAM256 an entry is located. The location data, or address for the entry, maps to status bits stored at a complementary location in
status memory258. The structure and contents of
status memory258 is described in greater detail below. A data structure for entries stored in
CAM256 is shown in FIG. 2c. Each
entry270 includes a tag with source/
destination address bits272 and a key 274. In one implementation, the source/
destination address bits272 are two binary bits and indicate if the associated key entry (address) is a source or destination address or both. This aids in the searching of
CAM256 as will be described in greater detail below. In one implementation, the source/
destination bits272 are set as described in Table 1.
TABLE 1 |
Source/Destination Address bits |
DA/SA | Description | |
00 | Invalid entry | |
01 | The address is a Source Address | |
10 | The address is a Destination Address | |
11 | The address is both a Source and a Destination Address | |
274 can be a 48 bit MAC address. Alternatively, key 274 can be an MPLS label or tag. The use of MPLS labels is described in greater detail below. In one implementation, there is no restriction on the ratio of source addresses compared to destination addresses stored in
CAM256. In one implementation,
CAM256 is sized to store a maximum of 1024 different 48-bit MAC Addresses (1024 words by 52 bits, where two bits are used for DA/SA, 48 for MAC address and two bits are unused).
256 includes a valid bit (not shown) associated with each address location. Whenever a full reset or address location reset occurs, the valid bit is un-set. Operationally,
CAM256 only examines entries having a valid bit that is set. The valid bit is set when data is written to a given address location.
256 includes a search routine (not shown). The search routine is invoked upon receipt of a search string from
CAM control logic254. The search routine compares the search string to the CAM's key entries, masking bits in accordance with any received masking information, and returns an address for a matching entry as an output.
CAM256 operates in two modes, search and access. In search mode,
CAM256 operates on search strings received from
CAM control logic254 and locates matching keys and their associated status address information as described above. In access mode,
CAM256 operates as a RAM, and can be read from or written to using conventional address and data busses (not shown) supported by
CAM256.
258 can be of the form of an SRAM.
Status memory258 includes information status bits associated with the keys in
CAM256. Each address location in the
CAM256 has a direct relationship with the data stored in the status memory 258 (e.g., the address stored in
CAM location0×25 has its corresponding status bits stored in the status memory at
location0×25). The hit address determined in a search of
CAM256 for a given key is provided to
status memory258 so that the associated status information (bits) can be fed into the next block (the control logic block 204) of the device. In one implementation, the data structure for an entry stored in
status memory258 is four binary bits (0:3). In this implementation,
bit0 is associated with destination addresses, while bits (1:3) are associated with source addresses. Forwarding decisions for the packet are determined based on the values of the status bits. The status bits are set up in accordance with the information described in Table 2.
TABLE 2 |
Status Bits |
bit | Name | Description | |
0 | DAH | Destination address to host-if set to 1 indicates | |
that the associated address stored in the CAM is | |||
a destination address destined for the Host | |||
1 | SAM | Source address monitor-This bit has no effect on | |
the forwarding decision for the packet. Set to 1 | |||
to increment the associated packet monitor | |||
(PM) counter | |||
2 | NE | Node address-when set to 1, indicates that the | |
source address is the address of the current node. | |||
3 | SAA/reject | Source address accept/reject bit-This bit is | |
used for packet filtering operations. | |||
As described above,
status memory258 includes entries with portions (bits) associated with each of source addresses and destination addresses, respectively.
Control logic204 and other portions of the device read/use the appropriate portions of the status bits. In the example above, if the address being searched is a destination address, then only bit 0 of the status bits is read, the remaining bits being ignored. Conversely, if the address being searched is a source address, status bits (1:3) are used, with
bit0 being ignored.
The configuration described above should not be construed as limiting. In the example above, where each key can be either a source or destination address or both, a single entry stored in
CAM256 is mapped to plural chunks of status information that are in turn stored in an entry in
status memory258. The “entry” in
status memory258 can be sized in accordance with the information required to be stored. The entry includes plural portions (i.e., one portion associated with each chunk of status information (e.g., one portion for the relevant source address information and one for the relevant destination address information)), each of which can include plural bits, bytes or words of data. Referring now to FIG. 2d, a general block diagram for an entry in
status memory258 is shown. Each
entry275 includes first and
second portions276 and 277, respectively. In the implementation described above, the first portion can be dedicated to include relevant information for destination addresses and be sized to be one bit in length, while the second portion can be dedicated to include relevant information for source addresses and be sized to be three bits in length.
Status memory258 can have a width (in words or bytes or bits) to accommodate the information that is required to be stored for each of the different types of keys (e.g., source address, destination address) stored in
CAM256.
Status memory258 can dedicate any number of bits/bytes/words to each key type for a given entry.
258 includes a one-to-one mapping of entries in
CAM256 with an entry in the
status memory258. As described above, each entry includes two (or more, as described below) portions. Which portions are relevant depends on the type of address being searched (for example, source or destination).
In one implementation, each entry in
CAM256 is associated with plural locations (forming a single “virtual entry”) in
status memory258. For example, referring now to FIG. 2e, each entry in
CAM256 can be associated with a
virtual entry280 in
status memory258 and include two (or more)
contiguous words282. Logic can be included to map the address provided from
CAM256 to the tuple (or other defined set of words) stored in
status memory258. Which word of the tuple (or set) is read, can depend on the type of address being searched for. In this example,
CAM256 includes N addressable entries, while
status memory258 includes K*N physical addressable entries (corresponding to N virtual entries). Accordingly, optimized
CAM block202 provides a 1 to N mapping from entries in
CAM256 to relevant information stored in a respective entry or “virtual entry” of
status memory258. Mapping schemes are described in greater detail below.
Referring again to FIG. 2b, flip flops 260 a-b provide a delayed and synchronized hit status signal for output by optimized
CAM block202 to control
logic204 of FIG. 2a. The hit status and status address, can also be provided directly to a microcontroller.
a. Searching
The search for a destination address includes setting the CAM mask and search bits as appropriate (the DA search bit to ‘1’, and the SA bit to ‘0’) provided from
CAM control logic254, and applying the extracted destination address received from the
packet processing engine252 to search bits [47:0]. If a match is made (and DAH Status bit=1), the destination
match address signal222 is held high for the entire packet.
The search for a source address includes setting the CAM mask and search bits as appropriate (the DA search bit to ‘0’, and the SA bit to ‘1’) provided from
CAM control logic254, and applying the extracted source address received from the packet-
processing engine252 to search bits [47:0]. If a match is made, the source
address match signal224 is held high for the entire packet (SAM Status Bit is not required).
b. Adding Entries to the
CAM256
When a new Ethernet entry (MAC address) for a destination address (or source address) needs to be added to the
CAM256, the full address is searched in the
CAM256 for a possible existing source address (destination address) entry with the same value. If a matching entry is found, the same entry (location) is used for both the source and destination address. The source/destination bits are set to indicate that the entry is both a source and destination address. In addition, the relevant destination information (source information) can be provided and stored in the status memory as appropriate.
MPLS Labels and Ethernet addresses
As described above, the optimized
CAM block202 can include a mapping from each
CAM256 entry (N entries in total) to plural physical entries (K*N) in
status memory258. In the implementation described, each of the physical entries in
status memory258 corresponded to relevant information associated with a particular type of key stored in
CAM256. Addresses of different types can be stored in
CAM256. The example above described source and destination addresses as might be associated with Ethernet packets. However, other packet formats can be supported. For example, MPLS labels can be stored in
CAM256 along with Ethernet source and destination addresses. An alternative data structure associated with entries in
CAM256 is shown in FIG. 3. Each
entry300 includes
tag bits302 and a key 304. The tag bits indicate the type of key stored. In one implementation,
tag bits302 can include 3 bits for designating whether the key (address) stored in
CAM256 for a given entry is a source address, destination address, both and/or an MPLS label. In one implementation, two source/
destination address bits306 are included and indicate if the associated key entry (address) is a source or destination address or both. In one implementation, the source/destination bits are set as described in Table 1.
Tag302 also includes a single
MPLS label bit308 to indicate that the address stored is an MPLS label.
Conventional MPLS labels are 20 bits in length, while Ethernet source or destination addresses are sized to be 48 bits. When used as an MPLS label,
CAM256 only evaluates 20 bits of a given key. In one implementation, the relevant 20 bits are the first twenty bits of the key. Alternatively, the last twenty bits or some other combination of bits can be identified as being relevant for evaluation when searching for an MPLS label. Table 3 includes a description for how to set the tag bit values for a combined Ethernet address and MPLS label information space.
TABLE 3 |
Source/Destination Address/MPLS label bits |
Tag bits (DA/SA/MPLS) | Description | |
00 | Invalid entry | |
01x | The address is a Source Address | |
10x | The address is a Destination Address | |
11x | The address is both a Source and a | |
Destination Address | ||
xx1 | The address includes an MPLS label | |
111 | The address is a source, a Destination | |
Address and an MPLS label. | ||
xxx | (note: All 8 combinations are possible) | |
304 can be a 48 bit MAC address or an MPLS label or both.
Key304 can be both an MPLS label and a MAC address where its length is 48 bits, and where 20 of the bits are associated with an MPLS label. In one implementation, there is no restriction on the ratio of source addresses compared to destination addresses or MPLS labels stored in the
CAM256. In one implementation,
CAM256 is sized to store a maximum of 1024 different 48-bit MAC Addresses or MPLS label (1024 words by 52 bits, where three bits are used for DA/SA/MPLS, 48 for MAC address or MPLS label and one bit is unused). As described above,
CAM256 can include a valid bit associated with each address location.
Where, as here,
CAM256 includes three types of entries (source address, destination address and MPLS label),
status memory258 is appropriately sized (3*N) to include a physical entry (or portion of a wide entry) that is relevant to each type of key (address). Again, a mapping from a hit address presented by
CAM256 to a relevant portion of an entry, or to a physical entry in a larger virtual entry in
status memory258 may be required. Alternatively, only the relevant portion of an entry in
status memory258 may be read and passed to a next block in the system. In one implementation,
CAM252 includes 1024 entries and a status memory 257 is composed of a 3072 entry RAM (or 1024 triple-entry RAM) to support a fully populated and integrated MAC address and MPLS label information space.
a. Operation
When an Ethernet packet arrives, its destination (or source address) is extracted from the packet header. The search for destination address (or source address) is performed by selecting (using masking of individual CAM bits) the valid bit, appropriate tag bits 302 (3 bits) and the key 304 (48 bits) and applying destination address (or source address) at the search input of the
CAM256. If there is a hit, the index (hit address) output of the
CAM256 is used as the read address of the RAM to read the corresponding data entry from
status memory258.
When an MPLS packet arrives, the search for a matching MPLS label includes selecting (using masking of individual 20 CAM bits) the appropriate tag bit 302 (3 bits) and the key 304 (20 bits). Upon a hit, the relevant information (the corresponding data entry) from
status memory258 is read.
b. MPLS label selection
When a new MPLS label needs to be assigned to a new connection, the MPLS label can be chosen in a way that its 20 bit value matches to a predetermined portion (as many bits as the size of an MPLS label—20 bits) of an existing source address/destination address (48 bits) already stored in the
CAM256. This can be accomplished since MPLS labels have no global meaning and can be chosen independently by a local node according to its label resources.
MPLS labels may be assigned as outlined above using source address and destination address values starting from the top of the
CAM256 if there is at least one Ethernet entry present. The
tag bits302 associated with the selected entry are set to indicate that the entry can also be an MPLS label by setting
tag bit308. A pointer (not shown) can be used to remember the last used location. The next time an MPLS label is needed, the same process is repeated starting from the pointer location if there is at least one unassigned Ethernet entry in
CAM256. Otherwise, an unused number can be assigned randomly or using any other method. When an unused number is assigned, the unused number is added to
CAM256 as a new entry.
Before committing to a mapping between a source address/destination address entry and a 20 bit MPLS label (i.e., one entry is to serve as both a source/destination address and an MPLS label), a search for the 20 bit MPLS label value is performed over the remaining portion of the
CAM256 information space. If plural hits arise (i.e., hit address is different than the address of the proposed MPLS label), then the proposed MPLS label is not unique in the information space, and as such another Ethernet entry is selected.
c. Adding Entries to the
CAM256
When a new Ethernet entry for a destination (source) address needs to be added to the
CAM256, the first full address is searched in the
CAM256 for a possible existing source (destination) address entry with the same value. If it is found, the same location is used for both. If it is not found, a new search in the
CAM256 for a possible existing MPLS label with the same 20 bit value is performed. If a matching MPLS label is found, the same location is used for the destination (source) address entry as well. If there is no match found in the
CAM256, this new destination (source) address entry is inserted to an empty location by writing the destination address into the
key field304, setting the valid bit to valid, and setting
tag bits308 to an appropriate value (e.g., 100 for a destination address or 010 for a source address).
If
CAM256 becomes almost full with source/destination address and MPLS entries and if there are unmapped source addresses or destination address entries, some of the existing unmapped MPLS entries can be reassigned so that they map to a previously unmapped source/destination address. The change can be communicated to the downstream node so that labels are swapped correctly. Note that while a change is being communicated to the downstream node, both the new and old MPLS labels should be kept in the
CAM256. Right after a confirmation is received, the old value can be removed from the
CAM256.
Plural MPLS Labels
In one implementation, plural MPLS labels can be mapped to a single source/destination address. An alternative data structure associated with entries in
CAM256 that include plural MPLS labels is shown in FIG. 4. Each
entry400 includes
tag bits402 and a key 404. The tag bits indicate the type of key stored. In one implementation,
tag bits402 can include 4 bits for designating whether the key (address) stored in
CAM256 for a given entry is a source address, destination address or both and whether the entry includes one or two MPLS labels. In one implementation, two source/
destination address bits406 are included and indicate if the associated key entry (address) is a source or destination address or both. In one implementation, the source/destination bits are set as described in Table 1.
Tag402 also includes two
MPLS label bits408 to indicate that the address stored includes one or two MPLS labels.
As described above, conventional MPLS labels are 20 bits in length, while Ethernet source or destination addresses are sized to be 48 bits. When used as an MPLS label, only 20 bits of the key are evaluated. Accordingly, a key can include a single source or destination address or can accommodate up to two MPLS labels. When searching for an MPLS label,
CAM256 only evaluates the relevant 20 bits of a given key associated with an MPLS label. In one implementation, the first 20 bits are used for a first MPLS label and the last 20 bits are used for the second MPLS label. Alternatively, some other combination of bits can be identified as being relevant for evaluation when searching from among the two embedded MPLS labels. Table 4 includes a description for how to set the tag bit values for a combined Ethernet address and MPLS label information space where two MPLS labels can be included in a single entry.
TABLE 4 |
Source/Destination Address/multiple MPLS tag bits |
Tag bits | |
(DA/SA/MPLS1/2) | Description |
0000 | Invalid entry |
01xx | The address is a Source Address |
10xx | The address is a Destination Address |
11xx | The address is both a Source and a Destination |
xx1x | Address includes an MPLS label at location 1 |
xxx1 | Address includes an MPLS label at location 2 |
xx11 | Address includes an MPLS label at locations 1 & 2 |
1111 | The address is a source address, a destination |
address and includes 2 MPLS labels | |
xxxx | (note: All 16 combinations are possible) |
404 can be a 48 bit MAC address or up to two MPLS labels or both.
Key404 can be both an MPLS label and a MAC address where its length is 48 bits, and where 20 (or 40) of the bits are associated with MPLS label(s). In one implementation, there is no restriction on the ratio of source addresses compared to destination addresses or MPLS labels stored in the
CAM256. In one implementation,
CAM256 is sized to store a maximum of 1024 different 48-bit MAC Addresses or MPLS labels (1024 words by 52 bits, where four bits are used for DA/SA/MPLS1/MPLS2 and 48 for MAC address or MPLS labels). As described above,
CAM256 can include a valid bit associated with each address location.
Where, as here,
CAM256 includes four types of entries (source address, destination address,
MPLS label1 and MPLS label 2),
status memory258 is appropriately sized (4*N) to include a physical entry (or portion of a wide entry) that is relevant to each type of key (address). Again, a mapping from a hit address presented by
CAM256 to a relevant portion of an entry, or to a physical entry in a larger virtual entry in
status memory258 may be required. Alternatively, only the relevant portion of an entry may be read and passed to a next block in the system. In one implementation,
CAM252 includes 1024 entries and a
status memory258 composed of a 4096 entry RAM (or 1024 quadruple-entry RAM) to support a fully populated and integrated MAC address and MPLS label information space.
a. Searching
As before, when an Ethernet packet arrives, its destination (or source address) is extracted from the packet header. The search for destination address (or source address) is performed by selecting (using masking of individual CAM bits) the valid bit, appropriate tag bit 402 (4 bits) and the key 404 (48 bits) and applying destination address (or source address) at the search input of the
CAM256. If there is a hit, the index (hit address) output of the
CAM256 is used as the read address of the RAM to read the corresponding data entry from
status memory258.
When an MPLS packet arrives, the search for the MPLS label is performed by selecting (using masking of individual CAM bits) the appropriate tag bit 402 (4 bits) and the key 404 (20 bits), first in a portion designated for storing a first MPLS label (i.e., MPLS1 space), then, if no hit is detected, in a second portion designated for storing a second MPLS label (i.e., MPLS2 space). Upon a hit, the relevant information (the corresponding data entry) from
status memory258 is read.
b. MPLS label selection
When a new MPLS label needs to be assigned to a new connection, the label is chosen in a way to match with one of two predetermined 20-bit portions of an existing source/destination address (48 bits) in
CAM256. Selecting and mapping labels is as described above.
c. Adding Entries to the
CAM256
Entries can be added to
CAM256 as described above.
d. Multiple Hits
Note that there may be multiple hits in MPLS searches if precaution is not taken when labels are assigned since an MPLS label is shorter than a MAC address (i.e., 20 bit portions of two MAC addresses may be equal). Either of the following three techniques can be used to resolve the multiple hit problem.
In a first technique, a multiple hit signal can be added to
CAM256. The multiple hit signal indicates that there are at least two matches when a search is performed. Note that multiple hits should not happen when a new MAC address is inserted since a probe should happen prior to an insertion. However, a multiple hit may happen in the MPLS portion of the
CAM256, whenever a new MAC address is inserted. When a probe in MPLS label portion(s) of a new MAC address indicates a multiple hit, the MPLS labels should be reassigned using the method described above before the new MAC entry is inserted. This way the MPLS searches will never result in a multiple hit later on.
In the second technique,
CAM256 does not need a multiple hit signal. Before adding a new entry,
CAM256 reads and compares the CAM information space to determine if there will be a multiple hit after adding the new entry. If there is no multiple hit, the compare operation will produce no results (and accordingly a multiple hit would not arise if the proposed entry were added). If the compare operation does not produce a hit, then the label can be assigned or added. If the new MAC entry will produce a multiple hit, the multiple hit can be resolved by reassigning existing MPLS labels to some other value that does not cause a multiple hit. Any reassignment has to be communicated to the upstream node.
Normally multiple hits should not happen as MAC addresses tend to be uncorrelated. However, if the same vendor produces multiple nodes in a network at the same time, they are likely to be assigned sequential numbers. When sequential numbers are used, multiple hits can be avoided (or reduced) by intelligently mapping the MAC address filed into 2 MPLS label fields in a way that resulting labels are somewhat randomized. One way of doing that would be using even bits of the MAC address for one label and using odd bits for the other label. Another way of reducing multiple hits is adding a few bits to the key field and concatenating them to the MAC addresses so that these few bits can be chosen (assigned) in a way to eliminate multiple hits in the MPLS label searches.
A number of embodiments of the invention have been described. Nevertheless, it will be understood that various modifications may be made without departing from the spirit and scope of the invention. Accordingly, other embodiments are within the scope of the following claims.
Claims (8)
1. A method for storing MAC addresses and MPLS labels in a content addressable memory, the content addressable memory including an associative portion and a random access portion, the associative portion including one or more entries each including a key, the random access portion for storing information relevant to each key, the method comprising:
determining if a key is present in a first entry in the associative portion for a first context, either as a source address or destination address or both;
locating a first key portion of the key to be associated with an MPLS label;
checking first key portion for all other keys in the content addressable memory to see if the first key portion matches;
if the first key portion does not match, marking the address in the associative portion of the first entry to indicate that the address is to be associated with a second context, the second context being an MPLS label; and
adding information relevant to the second context and associated with the address to the random access portion including mapping the address to relevant information stored in the random access portion associated with the first context and the second context.
2. The method of
claim 1, further comprising:
if the first key portion matches, locating a second key portion of the key to be associated with a second MPLS label;
checking the second key portion for all other keys in the content addressable memory to see if the second key portion matches;
if the second key portion does not match marking the address in the associative portion to indicate that the address is to be associated with a second context, the second context being an MPLS label; and
adding information relevant to the second context and associated with the address to the random access portion including mapping the address to relevant information stored in the random access portion associated with the first context and the second context.
3. The method of
claim 1, wherein the first context corresponds to an Ethernet address.
4. The method of
claim 1, wherein the first entry includes two MPLS labels.
5. An apparatus for storing MAC addresses and MPLS labels in a content addressable memory, the content addressable memory including an associative portion and a random access portion, the associative portion including one or more entries each including a key, the random access portion for storing information relevant to each key, the apparatus comprising:
means for determining if a key is present in a first entry in the associative portion for a first context, either as a source address or destination address or both;
means for locating a first key portion of the key to be associated with an MPLS label;
means for checking the first key portion for all other keys in the content addressable memory to see if the first key portion matches;
means for marking, if the first key portion does not match, the address in the associative portion of the first entry to indicate that the address is to be associated with a second context, the second context being an MPLS label; and
means for adding information relevant to the second context and associated with the address to the random access portion including mapping the address to relevant information stored in the random access portion associated with the first context and the second context.
6. The apparatus of
claim 5, further comprising:
means for locating, if the first key portion matches, a second key portion of the key to be associated with a second MPLS label;
means for checking the second key portion for all other keys in the content addressable memory to see if the second key portion matches;
means for marking, if the second key portion does not match, the address in the associative portion to indicate that the address is to be associated with a second context, the second context being an MPLS label; and
means for adding information relevant to the second context and associated with the address to the random access portion including mapping the address to relevant information stored in the random access portion associated with the first context and the second context.
7. The apparatus of
claim 5, wherein the first context corresponds to an Ethernet address.
8. The apparatus of
claim 5, wherein the first entry includes two MPLS labels.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/792,625 US6606681B1 (en) | 2001-02-23 | 2001-02-23 | Optimized content addressable memory (CAM) |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/792,625 US6606681B1 (en) | 2001-02-23 | 2001-02-23 | Optimized content addressable memory (CAM) |
Publications (1)
Publication Number | Publication Date |
---|---|
US6606681B1 true US6606681B1 (en) | 2003-08-12 |
Family
ID=27663642
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US09/792,625 Expired - Lifetime US6606681B1 (en) | 2001-02-23 | 2001-02-23 | Optimized content addressable memory (CAM) |
Country Status (1)
Country | Link |
---|---|
US (1) | US6606681B1 (en) |
Cited By (58)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030012198A1 (en) * | 2001-07-11 | 2003-01-16 | Nec Corporation | Packet processing unit |
US20030048785A1 (en) * | 2001-08-28 | 2003-03-13 | International Business Machines Corporation | Network processor with single interface supporting tree search engine and CAM |
US20030093646A1 (en) * | 2001-11-05 | 2003-05-15 | Hywire Ltd. | RAM-based range content addressable memory |
US20030191740A1 (en) * | 2001-12-10 | 2003-10-09 | Hywire Ltd. | Multi-dimensional associative search engine |
US20030208657A1 (en) * | 2002-05-06 | 2003-11-06 | Hywire Ltd. | Variable key type search engine and method therefor |
US20030225881A1 (en) * | 2002-06-04 | 2003-12-04 | Apoorv Saxena | Efficient cascaded lookups at a network node |
US20040008697A1 (en) * | 2002-05-15 | 2004-01-15 | Xyratex Technology Limited | Method and apparatus for enabling filtering of data packets |
US20040049630A1 (en) * | 2002-08-28 | 2004-03-11 | Hywire Ltd. | Implementation of a content addressable memory using a ram-cell structure |
US6757780B2 (en) * | 2002-01-09 | 2004-06-29 | Hywire Ltd. | Multiple module content addressable memories |
US20040170171A1 (en) * | 2002-08-10 | 2004-09-02 | Cisco Technology, Inc., A California Corporation | Generating and merging lookup results to apply multiple features |
US20040170172A1 (en) * | 2002-08-10 | 2004-09-02 | Cisco Technology, Inc., A California Corporation | Associative memory entries with force no-hit and priority indications of particular use in implementing policy maps in communication devices |
US20040172346A1 (en) * | 2002-08-10 | 2004-09-02 | Cisco Technology, Inc., A California Corporation | Generating accounting data based on access control list entries |
US20040250013A1 (en) * | 2001-07-24 | 2004-12-09 | Naoyuki Ogura | Associative memory system, network device, and network system |
US20040246957A1 (en) * | 2001-10-22 | 2004-12-09 | Jochen Grimminger | Method and device for mapping network headers onto mpls headers in bearer architectures |
US20050010612A1 (en) * | 2003-07-09 | 2005-01-13 | Cisco Technology, Inc. | Storing and searching a hierarchy of items of particular use with IP security policies and security associations |
US20050021752A1 (en) * | 2002-08-10 | 2005-01-27 | Cisco Technology, Inc., A California Corporation | Reverse path forwarding protection of packets using automated population of access control lists based on a forwarding information base |
US20050114602A1 (en) * | 2003-10-22 | 2005-05-26 | Cisco Technology, Inc. | Merging indications of matching items of multiple groups and possibly associated with skip conditions to identify winning entries of particular use for implementing access control lists |
US20050195831A1 (en) * | 2004-03-05 | 2005-09-08 | Samsung Electronics Co., Ltd. | Apparatus and method for forwarding mixed data packet types in a high-speed router |
US20050289295A1 (en) * | 2004-06-29 | 2005-12-29 | Cisco Technology, Inc. | Error Protection For Lookup Operations in Content-Addressable Memory Entries |
US20060047719A1 (en) * | 2004-08-30 | 2006-03-02 | Hywire Ltd. | Database storage and maintenance using row index ordering |
US20060059567A1 (en) * | 2004-02-20 | 2006-03-16 | International Business Machines Corporation | System and method for controlling data access using security label components |
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 |
US20060101196A1 (en) * | 2004-11-08 | 2006-05-11 | Emc Corp. | Content addressed storage device configured to maintain content address mapping |
US20060106977A1 (en) * | 2002-08-10 | 2006-05-18 | Cisco Technology, Inc. A California Corporation | Performing lookup operations on associative memory entries |
US20060112299A1 (en) * | 2004-11-08 | 2006-05-25 | Emc Corp. | Implementing application specific management policies on a content addressed storage device |
US7054993B1 (en) * | 2001-04-09 | 2006-05-30 | Netlogic Microsystems, Inc. | Ternary content addressable memory device |
US20060136660A1 (en) * | 2004-12-21 | 2006-06-22 | Cisco Technology, Inc. | Associative memory with invert result capability |
US20060161729A1 (en) * | 2005-01-18 | 2006-07-20 | Nemat Awais B | Quaternary content-addressable memory |
US20060168494A1 (en) * | 2005-01-22 | 2006-07-27 | Cisco Technology, Inc., A California Corporation | Error protecting groups of data words |
US20060187936A1 (en) * | 2005-02-18 | 2006-08-24 | Broadcom Corporation | Table searching techniques in a network device |
US7117301B1 (en) * | 2001-12-27 | 2006-10-03 | Netlogic Microsystems, Inc. | Packet based communication for content addressable memory (CAM) devices and systems |
US7120731B1 (en) * | 2003-07-15 | 2006-10-10 | Integrated Device Technology, Inc. | CAM-based search engines that support pipelined multi-database search operations using replacement search key segments |
US7136374B1 (en) * | 2001-03-19 | 2006-11-14 | Juniper Networks, Inc. | Transport networks supporting virtual private networks, and configuring such networks |
US20070115966A1 (en) * | 2005-11-21 | 2007-05-24 | Broadcom Corporation | Compact packet operation device and method |
US7240149B1 (en) | 2003-11-06 | 2007-07-03 | Cisco Technology, Inc. | Multiple branch operations in an associative memory |
US7249228B1 (en) | 2004-03-01 | 2007-07-24 | Cisco Technology, Inc. | Reducing the number of block masks required for programming multiple access control list in an associative memory |
US20070186035A1 (en) * | 2003-07-29 | 2007-08-09 | Fujitsu Limited | Content-addressable-memory device and method of controlling content addressable memory |
US7260675B1 (en) | 2003-07-15 | 2007-08-21 | Integrated Device Technology, Inc. | CAM-based search engines that support pipelined multi-database search operations using encoded multi-database identifiers |
US7305519B1 (en) | 2004-03-29 | 2007-12-04 | Cisco Technology, Inc. | Error protection for associative memory entries and lookup operations performed thereon |
US20080049522A1 (en) * | 2006-08-24 | 2008-02-28 | Cisco Technology, Inc. | Content addressable memory entry coding for error detection and correction |
US20080192737A1 (en) * | 2007-02-13 | 2008-08-14 | Fujitsu Limited | Switching apparatus and path monitoring setting method |
US20080218330A1 (en) * | 2007-03-09 | 2008-09-11 | Phillip Herzog Biles | Kit and system for providing security access to a door using power over ethernet with data persistence and fire alarm control panel integration |
US20080244170A1 (en) * | 2007-03-28 | 2008-10-02 | Cisco Technology, Inc. | Intelligent allocation of programmable comparison operations for reducing the number of associative memory entries required |
US20100054256A1 (en) * | 2004-03-30 | 2010-03-04 | Parker David K | Systems for supporting packet processing operations |
US20100057685A1 (en) * | 2008-09-02 | 2010-03-04 | Qimonda Ag | Information storage and retrieval system |
US7739445B1 (en) | 2004-06-11 | 2010-06-15 | Srinivasan Venkatachary | Circuit, apparatus, and method for extracting multiple matching entries from a content addressable memory (CAM) device |
US7814267B1 (en) * | 2008-02-04 | 2010-10-12 | Netlogic Microsystems, Inc. | Processor with compare operations based on any of multiple compare data segments |
US20110116507A1 (en) * | 2009-11-16 | 2011-05-19 | Alon Pais | Iterative parsing and classification |
US20110292940A1 (en) * | 2010-05-26 | 2011-12-01 | Fujitsu Limited | System and method for establishing a communication path using labels |
US8073005B1 (en) | 2001-12-27 | 2011-12-06 | Cypress Semiconductor Corporation | Method and apparatus for configuring signal lines according to idle codes |
US8599853B2 (en) | 2010-04-16 | 2013-12-03 | Wipro Limited | System and method for an exact match search using pointer based pipelined multibit trie traversal technique |
US20130336315A1 (en) * | 2012-06-15 | 2013-12-19 | Juniper Networks, Inc. | Allocating and distributing labels for packet encapsulation |
US10212082B2 (en) | 2017-07-01 | 2019-02-19 | Cisco Technology, Inc. | Dynamic priority of content-addressable memory blocks used in determining a highest-priority matching entry |
US10318588B2 (en) | 2017-07-01 | 2019-06-11 | Cisco Technology, Inc. | Searching varying selectable physical blocks of entries within a content-addressable memory |
US10387251B2 (en) | 2017-07-17 | 2019-08-20 | Cisco Technology, Inc. | Error detection and correction in a content-addressable memory using single-bit position lookup operations |
US10496299B2 (en) | 2018-04-16 | 2019-12-03 | Cisco Technology, Inc. | Efficient content-addressable memory entry integrity checking including for protecting the accuracy of packet processing operations |
US11194475B2 (en) | 2018-04-16 | 2021-12-07 | Cisco Technology, Inc. | Coordinated updating and searching a content-addressable memory including for packet processing operations |
US11467899B2 (en) | 2018-04-16 | 2022-10-11 | Cisco Technology, Inc. | Efficient content-addressable memory lookup result integrity checking and correcting operations including for protecting the accuracy of packet processing operations |
Citations (43)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3648254A (en) | 1969-12-31 | 1972-03-07 | Ibm | High-speed associative memory |
US4296475A (en) | 1978-12-19 | 1981-10-20 | U.S. Philips Corporation | Word-organized, content-addressable memory |
US4791606A (en) | 1987-09-01 | 1988-12-13 | Triad Semiconductors International Bv | High density CMOS dynamic CAM cell |
US4996666A (en) | 1988-08-12 | 1991-02-26 | Duluk Jr Jerome F | Content-addressable memory system capable of fully parallel magnitude comparisons |
US5088032A (en) | 1988-01-29 | 1992-02-11 | Cisco Systems, Inc. | Method and apparatus for routing communications among computer networks |
US5319763A (en) | 1991-04-02 | 1994-06-07 | Motorola, Inc. | Data processor with concurrent static and dynamic masking of operand information and method therefor |
US5383146A (en) | 1992-06-08 | 1995-01-17 | Music Semiconductors, Inc. | Memory with CAM and RAM partitions |
US5440715A (en) | 1990-06-27 | 1995-08-08 | Advanced Micro Devices, Inc. | Method and apparatus for expanding the width of a content addressable memory using a continuation bit |
US5450351A (en) | 1993-11-19 | 1995-09-12 | International Business Machines Corporation | Content addressable memory implementation with random access memory |
US5481540A (en) | 1990-08-24 | 1996-01-02 | At&T Corp. | FDDI bridge frame learning and filtering apparatus and method |
US5515370A (en) | 1994-03-31 | 1996-05-07 | Siemens Aktiengesellschaft | Circuit arrangement for line units of an ATM switching equipment |
US5740171A (en) | 1996-03-28 | 1998-04-14 | Cisco Systems, Inc. | Address translation mechanism for a high-performance network switch |
US5841874A (en) | 1996-08-13 | 1998-11-24 | Motorola, Inc. | Ternary CAM memory architecture and methodology |
US5842040A (en) | 1996-06-18 | 1998-11-24 | Storage Technology Corporation | Policy caching method and apparatus for use in a communication device based on contents of one data unit in a subset of related data units |
US5898689A (en) | 1992-12-04 | 1999-04-27 | Lucent Technologies Inc. | Packet network interface |
US5920886A (en) | 1997-03-14 | 1999-07-06 | Music Semiconductor Corporation | Accelerated hierarchical address filtering and translation using binary and ternary CAMs |
US5930359A (en) | 1996-09-23 | 1999-07-27 | Motorola, Inc. | Cascadable content addressable memory and system |
US5956336A (en) | 1996-09-27 | 1999-09-21 | Motorola, Inc. | Apparatus and method for concurrent search content addressable memory circuit |
US5978885A (en) | 1996-06-17 | 1999-11-02 | Hewlett Packard Co. | Method and apparatus for self-timing associative data memory |
US6000008A (en) | 1993-03-11 | 1999-12-07 | Cabletron Systems, Inc. | Method and apparatus for matching data items of variable length in a content addressable memory |
US6041389A (en) | 1995-11-16 | 2000-03-21 | E Cirrus Logic, Inc. | Memory architecture using content addressable memory, and systems and methods using the same |
US6047369A (en) | 1994-02-28 | 2000-04-04 | Intel Corporation | Flag renaming and flag masks within register alias table |
US6061368A (en) | 1997-11-05 | 2000-05-09 | Xylan Corporation | Custom circuitry for adaptive hardware routing engine |
US6069573A (en) | 1996-06-17 | 2000-05-30 | Hewlett-Packard Company | Match and match address signal prioritization in a content addressable memory encoder |
US6081440A (en) | 1998-11-05 | 2000-06-27 | Lara Technology, Inc. | Ternary content addressable memory (CAM) having fast insertion and deletion of data values |
US6091725A (en) | 1995-12-29 | 2000-07-18 | Cisco Systems, Inc. | Method for traffic management, traffic prioritization, access control, and packet forwarding in a datagram computer network |
US6097724A (en) | 1997-08-15 | 2000-08-01 | Lucent Technologies Inc. | Ram-based associative content-addressable memory device, method of operation thereof and ATM communication switching system employing the same |
US6134135A (en) | 2000-01-10 | 2000-10-17 | Switchcore, A.B. | Mask arrangement for scalable CAM/RAM structures |
US6137707A (en) | 1999-03-26 | 2000-10-24 | Netlogic Microsystems | Method and apparatus for simultaneously performing a plurality of compare operations in content addressable memory device |
US6141738A (en) | 1998-07-08 | 2000-10-31 | Nortel Networks Corporation | Address translation method and system having a forwarding table data structure |
US6148364A (en) | 1997-12-30 | 2000-11-14 | Netlogic Microsystems, Inc. | Method and apparatus for cascading content addressable memory devices |
US6154384A (en) | 1999-11-12 | 2000-11-28 | Netlogic Microsystems, Inc. | Ternary content addressable memory cell |
US6175513B1 (en) | 1999-07-12 | 2001-01-16 | Netlogic Microsystems | Method and apparatus for detecting multiple matches in a content addressable memory |
US6181698B1 (en) | 1997-07-09 | 2001-01-30 | Yoichi Hariguchi | Network routing table using content addressable memory |
US6199140B1 (en) | 1997-10-30 | 2001-03-06 | Netlogic Microsystems, Inc. | Multiport content addressable memory device and timing signals |
US6236658B1 (en) | 1997-11-21 | 2001-05-22 | Cisco Technology, Inc. | Method and apparatus for message routing, including a content addressable memory |
US6237061B1 (en) | 1999-01-05 | 2001-05-22 | Netlogic Microsystems, Inc. | Method for longest prefix matching in a content addressable memory |
US6240003B1 (en) | 2000-05-01 | 2001-05-29 | Micron Technology, Inc. | DRAM content addressable memory using part of the content as an address |
US6243667B1 (en) | 1996-05-28 | 2001-06-05 | Cisco Systems, Inc. | Network flow switching and flow data export |
US6246601B1 (en) | 2000-06-14 | 2001-06-12 | Netlogic Microsystems, Inc. | Method and apparatus for using an inter-row configurable content addressable memory |
US6295576B1 (en) | 1997-08-29 | 2001-09-25 | Nec Corporation | Associative memory having a mask function for use in a network router |
US20010053150A1 (en) * | 2000-05-24 | 2001-12-20 | David Clear | Packet processor with programmable application logic |
US6377998B2 (en) * | 1997-08-22 | 2002-04-23 | Nortel Networks Limited | Method and apparatus for performing frame processing for a network |
-
2001
- 2001-02-23 US US09/792,625 patent/US6606681B1/en not_active Expired - Lifetime
Patent Citations (44)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3648254A (en) | 1969-12-31 | 1972-03-07 | Ibm | High-speed associative memory |
US4296475A (en) | 1978-12-19 | 1981-10-20 | U.S. Philips Corporation | Word-organized, content-addressable memory |
US4791606A (en) | 1987-09-01 | 1988-12-13 | Triad Semiconductors International Bv | High density CMOS dynamic CAM cell |
US5088032A (en) | 1988-01-29 | 1992-02-11 | Cisco Systems, Inc. | Method and apparatus for routing communications among computer networks |
US4996666A (en) | 1988-08-12 | 1991-02-26 | Duluk Jr Jerome F | Content-addressable memory system capable of fully parallel magnitude comparisons |
US5440715A (en) | 1990-06-27 | 1995-08-08 | Advanced Micro Devices, Inc. | Method and apparatus for expanding the width of a content addressable memory using a continuation bit |
US5481540A (en) | 1990-08-24 | 1996-01-02 | At&T Corp. | FDDI bridge frame learning and filtering apparatus and method |
US5319763A (en) | 1991-04-02 | 1994-06-07 | Motorola, Inc. | Data processor with concurrent static and dynamic masking of operand information and method therefor |
US5383146A (en) | 1992-06-08 | 1995-01-17 | Music Semiconductors, Inc. | Memory with CAM and RAM partitions |
US5898689A (en) | 1992-12-04 | 1999-04-27 | Lucent Technologies Inc. | Packet network interface |
US6000008A (en) | 1993-03-11 | 1999-12-07 | Cabletron Systems, Inc. | Method and apparatus for matching data items of variable length in a content addressable memory |
US5450351A (en) | 1993-11-19 | 1995-09-12 | International Business Machines Corporation | Content addressable memory implementation with random access memory |
US6047369A (en) | 1994-02-28 | 2000-04-04 | Intel Corporation | Flag renaming and flag masks within register alias table |
US5515370A (en) | 1994-03-31 | 1996-05-07 | Siemens Aktiengesellschaft | Circuit arrangement for line units of an ATM switching equipment |
US6041389A (en) | 1995-11-16 | 2000-03-21 | E Cirrus Logic, Inc. | Memory architecture using content addressable memory, and systems and methods using the same |
US6091725A (en) | 1995-12-29 | 2000-07-18 | Cisco Systems, Inc. | Method for traffic management, traffic prioritization, access control, and packet forwarding in a datagram computer network |
US5740171A (en) | 1996-03-28 | 1998-04-14 | Cisco Systems, Inc. | Address translation mechanism for a high-performance network switch |
US6243667B1 (en) | 1996-05-28 | 2001-06-05 | Cisco Systems, Inc. | Network flow switching and flow data export |
US5978885A (en) | 1996-06-17 | 1999-11-02 | Hewlett Packard Co. | Method and apparatus for self-timing associative data memory |
US6069573A (en) | 1996-06-17 | 2000-05-30 | Hewlett-Packard Company | Match and match address signal prioritization in a content addressable memory encoder |
US5842040A (en) | 1996-06-18 | 1998-11-24 | Storage Technology Corporation | Policy caching method and apparatus for use in a communication device based on contents of one data unit in a subset of related data units |
US5841874A (en) | 1996-08-13 | 1998-11-24 | Motorola, Inc. | Ternary CAM memory architecture and methodology |
US5930359A (en) | 1996-09-23 | 1999-07-27 | Motorola, Inc. | Cascadable content addressable memory and system |
US5956336A (en) | 1996-09-27 | 1999-09-21 | Motorola, Inc. | Apparatus and method for concurrent search content addressable memory circuit |
US5920886A (en) | 1997-03-14 | 1999-07-06 | Music Semiconductor Corporation | Accelerated hierarchical address filtering and translation using binary and ternary CAMs |
US6181698B1 (en) | 1997-07-09 | 2001-01-30 | Yoichi Hariguchi | Network routing table using content addressable memory |
US6307855B1 (en) | 1997-07-09 | 2001-10-23 | Yoichi Hariguchi | Network routing table using content addressable memory |
US6097724A (en) | 1997-08-15 | 2000-08-01 | Lucent Technologies Inc. | Ram-based associative content-addressable memory device, method of operation thereof and ATM communication switching system employing the same |
US6377998B2 (en) * | 1997-08-22 | 2002-04-23 | Nortel Networks Limited | Method and apparatus for performing frame processing for a network |
US6295576B1 (en) | 1997-08-29 | 2001-09-25 | Nec Corporation | Associative memory having a mask function for use in a network router |
US6199140B1 (en) | 1997-10-30 | 2001-03-06 | Netlogic Microsystems, Inc. | Multiport content addressable memory device and timing signals |
US6061368A (en) | 1997-11-05 | 2000-05-09 | Xylan Corporation | Custom circuitry for adaptive hardware routing engine |
US6236658B1 (en) | 1997-11-21 | 2001-05-22 | Cisco Technology, Inc. | Method and apparatus for message routing, including a content addressable memory |
US6148364A (en) | 1997-12-30 | 2000-11-14 | Netlogic Microsystems, Inc. | Method and apparatus for cascading content addressable memory devices |
US6141738A (en) | 1998-07-08 | 2000-10-31 | Nortel Networks Corporation | Address translation method and system having a forwarding table data structure |
US6081440A (en) | 1998-11-05 | 2000-06-27 | Lara Technology, Inc. | Ternary content addressable memory (CAM) having fast insertion and deletion of data values |
US6237061B1 (en) | 1999-01-05 | 2001-05-22 | Netlogic Microsystems, Inc. | Method for longest prefix matching in a content addressable memory |
US6137707A (en) | 1999-03-26 | 2000-10-24 | Netlogic Microsystems | Method and apparatus for simultaneously performing a plurality of compare operations in content addressable memory device |
US6175513B1 (en) | 1999-07-12 | 2001-01-16 | Netlogic Microsystems | Method and apparatus for detecting multiple matches in a content addressable memory |
US6154384A (en) | 1999-11-12 | 2000-11-28 | Netlogic Microsystems, Inc. | Ternary content addressable memory cell |
US6134135A (en) | 2000-01-10 | 2000-10-17 | Switchcore, A.B. | Mask arrangement for scalable CAM/RAM structures |
US6240003B1 (en) | 2000-05-01 | 2001-05-29 | Micron Technology, Inc. | DRAM content addressable memory using part of the content as an address |
US20010053150A1 (en) * | 2000-05-24 | 2001-12-20 | David Clear | Packet processor with programmable application logic |
US6246601B1 (en) | 2000-06-14 | 2001-06-12 | Netlogic Microsystems, Inc. | Method and apparatus for using an inter-row configurable content addressable memory |
Non-Patent Citations (10)
Title |
---|
"Advantges of CAM in ASIC-Based Network Address Processing," Application Brief AB-N11, Rev. 1.2a Draft, Music Semiconductors, Milpitas, CA, Sep. 30, 1998, 4 pages. |
"Extending the LANCAM Comparand," Application Brief AB-N3, Rev. 1.0a Draft, Music Semiconductors, Milpitas, CA, Sep. 30, 1998, 4 pages. |
"Fast IPv4 and IPV4 CIDR Address Translation and Filtering Using the MUAC Routing CoProcessor (RCP)," Application Note AN-N25, Rev. 0a, Music Semiconductors, Milpitas, CA, Oct. 1, 1998, 16 pages. |
"Using MUSIC Devices and RCPs for IP Flow Recognition," Application Note AN-N27, Rev. 0, Music Semiconductors, Milpitas, CA, Oct. 21, 1998, 20 pages. |
"Using the MU9C1965A LANCAM MP for Data Wider than 128 Bits," Application Note AN-N19, Rev. 1a, Music Semiconductors, Milpitas, CA, Sep. 30, 1998, 16 pages. |
"Virtual Memory Applications of the MU9C1480A LANCAM," Application Note AN-N3, Rev. 1a, Music Semiconductors, Milpitas, CA, Sep. 30, 1998, 12 pages. |
"Wide Ternary Searches Using Music CAMs and RCPs," Application Note AN-N31, Rev. 0, Music Semiconductors, Milpitas, CA, Apr. 13, 1999, 8 pages. |
Brian Dipert, ed., "Special-purpose SRAMs Smooth the Ride," EDN, Jun. 24, 1999, pp. 93-104. |
Jon P. Wade and Charles G. Sodini, "A Ternary Content Addressable Search Engine," IEEE Journal of Solid-State Circuits, vol. 24, No. 4, Aug. 1989, pp. 1003-1013. |
Teuvo Kohonen, Content-Addressable Memories, 1987, pp. 128-129 and 142-144, Springer-Verlang, New York. |
Cited By (100)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7136374B1 (en) * | 2001-03-19 | 2006-11-14 | Juniper Networks, Inc. | Transport networks supporting virtual private networks, and configuring such networks |
US7054993B1 (en) * | 2001-04-09 | 2006-05-30 | Netlogic Microsystems, Inc. | Ternary content addressable memory device |
US7095742B2 (en) * | 2001-07-11 | 2006-08-22 | Nec Corporation | Packet processing unit |
US20030012198A1 (en) * | 2001-07-11 | 2003-01-16 | Nec Corporation | Packet processing unit |
US20040250013A1 (en) * | 2001-07-24 | 2004-12-09 | Naoyuki Ogura | Associative memory system, network device, and network system |
US7200712B2 (en) * | 2001-07-24 | 2007-04-03 | Terminus Technology, Limited | Associative memory system, network device, and network system |
US7167471B2 (en) * | 2001-08-28 | 2007-01-23 | International Business Machines Corporation | Network processor with single interface supporting tree search engine and CAM |
US20030048785A1 (en) * | 2001-08-28 | 2003-03-13 | International Business Machines Corporation | Network processor with single interface supporting tree search engine and CAM |
US7953077B2 (en) * | 2001-08-28 | 2011-05-31 | International Business Machines Corporation | Network processor with single interface supporting tree search engine and CAM |
US20060265363A1 (en) * | 2001-08-28 | 2006-11-23 | Calvignac Jean L | Network processor with single interface supporting tree search engine and cam |
US7408943B2 (en) * | 2001-10-22 | 2008-08-05 | Siemens Aktiengesellschaft | Method and device for mapping network headers onto MPLS headers in bearer architectures |
US20040246957A1 (en) * | 2001-10-22 | 2004-12-09 | Jochen Grimminger | Method and device for mapping network headers onto mpls headers in bearer architectures |
US6839800B2 (en) * | 2001-11-05 | 2005-01-04 | Hywire Ltd. | RAM-based range content addressable memory |
US20030093646A1 (en) * | 2001-11-05 | 2003-05-15 | Hywire Ltd. | RAM-based range content addressable memory |
US20030191740A1 (en) * | 2001-12-10 | 2003-10-09 | Hywire Ltd. | Multi-dimensional associative search engine |
US6957215B2 (en) * | 2001-12-10 | 2005-10-18 | Hywire Ltd. | Multi-dimensional associative search engine |
US8073005B1 (en) | 2001-12-27 | 2011-12-06 | Cypress Semiconductor Corporation | Method and apparatus for configuring signal lines according to idle codes |
US7117301B1 (en) * | 2001-12-27 | 2006-10-03 | Netlogic Microsystems, Inc. | Packet based communication for content addressable memory (CAM) devices and systems |
US6757780B2 (en) * | 2002-01-09 | 2004-06-29 | Hywire Ltd. | Multiple module content addressable memories |
US6901476B2 (en) * | 2002-05-06 | 2005-05-31 | Hywire Ltd. | Variable key type search engine and method therefor |
US20030208657A1 (en) * | 2002-05-06 | 2003-11-06 | Hywire Ltd. | Variable key type search engine and method therefor |
US20040008697A1 (en) * | 2002-05-15 | 2004-01-15 | Xyratex Technology Limited | Method and apparatus for enabling filtering of data packets |
US7412507B2 (en) * | 2002-06-04 | 2008-08-12 | Lucent Technologies Inc. | Efficient cascaded lookups at a network node |
US20030225881A1 (en) * | 2002-06-04 | 2003-12-04 | Apoorv Saxena | Efficient cascaded lookups at a network node |
US7689485B2 (en) | 2002-08-10 | 2010-03-30 | Cisco Technology, Inc. | Generating accounting data based on access control list entries |
US7350020B2 (en) | 2002-08-10 | 2008-03-25 | Cisco Technology, Inc. | Generating and merging lookup results to apply multiple features |
US20070002862A1 (en) * | 2002-08-10 | 2007-01-04 | Cisco Technology, Inc., A California Corporation | Generating and merging lookup results to apply multiple features |
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 |
US20050021752A1 (en) * | 2002-08-10 | 2005-01-27 | Cisco Technology, Inc., A California Corporation | Reverse path forwarding protection of packets using automated population of access control lists based on a forwarding information base |
US7237059B2 (en) | 2002-08-10 | 2007-06-26 | Cisco Technology, Inc | Performing lookup operations on associative memory entries |
US20060106977A1 (en) * | 2002-08-10 | 2006-05-18 | Cisco Technology, Inc. A California Corporation | Performing lookup operations on associative memory entries |
US20040170172A1 (en) * | 2002-08-10 | 2004-09-02 | Cisco Technology, Inc., A California Corporation | Associative memory entries with force no-hit and priority indications of particular use in implementing policy maps in communication devices |
US7177978B2 (en) | 2002-08-10 | 2007-02-13 | Cisco Technology, Inc. | Generating and merging lookup results to apply multiple features |
US20040172346A1 (en) * | 2002-08-10 | 2004-09-02 | Cisco Technology, Inc., A California Corporation | Generating accounting data based on access control list entries |
US20040170171A1 (en) * | 2002-08-10 | 2004-09-02 | Cisco Technology, Inc., A California Corporation | Generating and merging lookup results to apply multiple features |
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 |
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 |
US7017005B2 (en) * | 2002-08-28 | 2006-03-21 | Hywire Ltd. | Implementation of a content addressable memory using a RAM-cell structure |
US20040049630A1 (en) * | 2002-08-28 | 2004-03-11 | Hywire Ltd. | Implementation of a content addressable memory using a ram-cell structure |
US6988106B2 (en) | 2003-07-09 | 2006-01-17 | Cisco Technology, Inc. | Strong and searching a hierarchy of items of particular use with IP security policies and security associations |
US7493328B2 (en) | 2003-07-09 | 2009-02-17 | Cisco Technology, Inc. | Storing and searching a hierarchy of policies and associations thereof of particular use with IP security policies and security associations |
US20060074899A1 (en) * | 2003-07-09 | 2006-04-06 | Cisco Technology, Inc., A California Corporation | Storing and searching a hierarchy of policies and associations thereof of particular use with IP security policies and security associations |
US20050010612A1 (en) * | 2003-07-09 | 2005-01-13 | Cisco Technology, Inc. | Storing and searching a hierarchy of items of particular use with IP security policies and security associations |
US7260675B1 (en) | 2003-07-15 | 2007-08-21 | Integrated Device Technology, Inc. | CAM-based search engines that support pipelined multi-database search operations using encoded multi-database identifiers |
US7120731B1 (en) * | 2003-07-15 | 2006-10-10 | Integrated Device Technology, Inc. | CAM-based search engines that support pipelined multi-database search operations using replacement search key segments |
US20070186035A1 (en) * | 2003-07-29 | 2007-08-09 | Fujitsu Limited | Content-addressable-memory device and method of controlling content addressable memory |
US7716416B2 (en) * | 2003-07-29 | 2010-05-11 | Fujitsu Limited | Analysis for a multiple tag hit in a content addressable memory (CAM) |
US20050114602A1 (en) * | 2003-10-22 | 2005-05-26 | Cisco Technology, Inc. | Merging indications of matching items of multiple groups and possibly associated with skip conditions to identify winning entries of particular use for implementing access control lists |
US7080195B2 (en) | 2003-10-22 | 2006-07-18 | Cisco Technology, Inc. | Merging indications of matching items of multiple groups and possibly associated with skip conditions to identify winning entries of particular use for implementing access control lists |
US7240149B1 (en) | 2003-11-06 | 2007-07-03 | Cisco Technology, Inc. | Multiple branch operations in an associative memory |
US20060059567A1 (en) * | 2004-02-20 | 2006-03-16 | International Business Machines Corporation | System and method for controlling data access using security label components |
US7568235B2 (en) | 2004-02-20 | 2009-07-28 | International Business Machines Corporation | Controlling data access using security label components |
US7249228B1 (en) | 2004-03-01 | 2007-07-24 | Cisco Technology, Inc. | Reducing the number of block masks required for programming multiple access control list in an associative memory |
US20050195831A1 (en) * | 2004-03-05 | 2005-09-08 | Samsung Electronics Co., Ltd. | Apparatus and method for forwarding mixed data packet types in a high-speed router |
US7440460B2 (en) * | 2004-03-05 | 2008-10-21 | Samsung Electronics Co., Ltd. | Apparatus and method for forwarding mixed data packet types in a high-speed router |
US7305519B1 (en) | 2004-03-29 | 2007-12-04 | Cisco Technology, Inc. | Error protection for associative memory entries and lookup operations performed thereon |
US8085779B2 (en) * | 2004-03-30 | 2011-12-27 | Extreme Networks, Inc. | Systems for supporting packet processing operations |
US20100054256A1 (en) * | 2004-03-30 | 2010-03-04 | Parker David K | Systems for supporting packet processing operations |
US7739445B1 (en) | 2004-06-11 | 2010-06-15 | Srinivasan Venkatachary | Circuit, apparatus, and method for extracting multiple matching entries from a content addressable memory (CAM) device |
US20060080498A1 (en) * | 2004-06-29 | 2006-04-13 | Cisco Technology, Inc. | Error protection for lookup operations performed on ternary content-addressable memory entries |
US7290083B2 (en) | 2004-06-29 | 2007-10-30 | Cisco Technology, Inc. | Error protection for lookup operations in content-addressable memory entries |
US20050289295A1 (en) * | 2004-06-29 | 2005-12-29 | Cisco Technology, Inc. | Error Protection For Lookup Operations in Content-Addressable Memory Entries |
US7257672B2 (en) | 2004-06-29 | 2007-08-14 | Cisco Technology, Inc. | Error protection for lookup operations performed on ternary content-addressable memory entries |
US20060047719A1 (en) * | 2004-08-30 | 2006-03-02 | Hywire Ltd. | Database storage and maintenance using row index ordering |
US7627616B2 (en) * | 2004-08-30 | 2009-12-01 | Hywire Ltb. | Database storage and maintenance using row index ordering |
US8161013B2 (en) | 2004-11-08 | 2012-04-17 | Emc Corporation | Implementing application specific management policies on a content addressed storage device |
US7444464B2 (en) * | 2004-11-08 | 2008-10-28 | Emc Corporation | Content addressed storage device configured to maintain content address mapping |
US20060101196A1 (en) * | 2004-11-08 | 2006-05-11 | Emc Corp. | Content addressed storage device configured to maintain content address mapping |
US20060112299A1 (en) * | 2004-11-08 | 2006-05-25 | Emc Corp. | Implementing application specific management policies on a content addressed storage device |
US7219195B2 (en) | 2004-12-21 | 2007-05-15 | Cisco Technology, Inc. | Associative memory with invert result capability |
US20060136660A1 (en) * | 2004-12-21 | 2006-06-22 | Cisco Technology, Inc. | Associative memory with invert result capability |
US7523251B2 (en) | 2005-01-18 | 2009-04-21 | Cisco Technology, Inc. | Quaternary content-addressable memory |
US20060161729A1 (en) * | 2005-01-18 | 2006-07-20 | Nemat Awais B | Quaternary content-addressable memory |
US7350131B2 (en) | 2005-01-22 | 2008-03-25 | Cisco Technology, Inc. | Error protecting groups of data words |
US20060168494A1 (en) * | 2005-01-22 | 2006-07-27 | Cisco Technology, Inc., A California Corporation | Error protecting groups of data words |
US20060187936A1 (en) * | 2005-02-18 | 2006-08-24 | Broadcom Corporation | Table searching techniques in a network device |
US20070115966A1 (en) * | 2005-11-21 | 2007-05-24 | Broadcom Corporation | Compact packet operation device and method |
US7869411B2 (en) | 2005-11-21 | 2011-01-11 | Broadcom Corporation | Compact packet operation device and method |
US7689889B2 (en) | 2006-08-24 | 2010-03-30 | Cisco Technology, Inc. | Content addressable memory entry coding for error detection and correction |
US20080049522A1 (en) * | 2006-08-24 | 2008-02-28 | Cisco Technology, Inc. | Content addressable memory entry coding for error detection and correction |
US20080192737A1 (en) * | 2007-02-13 | 2008-08-14 | Fujitsu Limited | Switching apparatus and path monitoring setting method |
US8207814B2 (en) | 2007-03-09 | 2012-06-26 | Utc Fire & Security Americas Corporation, Inc. | Kit and system for providing security access to a door using power over ethernet with data persistence and fire alarm control panel integration |
US20080218330A1 (en) * | 2007-03-09 | 2008-09-11 | Phillip Herzog Biles | Kit and system for providing security access to a door using power over ethernet with data persistence and fire alarm control panel integration |
US7788445B2 (en) | 2007-03-28 | 2010-08-31 | Cisco Technology, Inc | Intelligent allocation of programmable comparison operations for reducing the number of associative memory entries required |
US20080244170A1 (en) * | 2007-03-28 | 2008-10-02 | Cisco Technology, Inc. | Intelligent allocation of programmable comparison operations for reducing the number of associative memory entries required |
US7814267B1 (en) * | 2008-02-04 | 2010-10-12 | Netlogic Microsystems, Inc. | Processor with compare operations based on any of multiple compare data segments |
US20100057685A1 (en) * | 2008-09-02 | 2010-03-04 | Qimonda Ag | Information storage and retrieval system |
US20110116507A1 (en) * | 2009-11-16 | 2011-05-19 | Alon Pais | Iterative parsing and classification |
US8599859B2 (en) * | 2009-11-16 | 2013-12-03 | Marvell World Trade Ltd. | Iterative parsing and classification |
US8599853B2 (en) | 2010-04-16 | 2013-12-03 | Wipro Limited | System and method for an exact match search using pointer based pipelined multibit trie traversal technique |
US20110292940A1 (en) * | 2010-05-26 | 2011-12-01 | Fujitsu Limited | System and method for establishing a communication path using labels |
US8537827B2 (en) * | 2010-05-26 | 2013-09-17 | Fujitsu Limited | System and method for establishing a communication path using labels |
US20130336315A1 (en) * | 2012-06-15 | 2013-12-19 | Juniper Networks, Inc. | Allocating and distributing labels for packet encapsulation |
US9088519B2 (en) * | 2012-06-15 | 2015-07-21 | Juniper Networks, Inc. | Allocating and distributing labels for packet encapsulation |
US10212082B2 (en) | 2017-07-01 | 2019-02-19 | Cisco Technology, Inc. | Dynamic priority of content-addressable memory blocks used in determining a highest-priority matching entry |
US10318588B2 (en) | 2017-07-01 | 2019-06-11 | Cisco Technology, Inc. | Searching varying selectable physical blocks of entries within a content-addressable memory |
US10387251B2 (en) | 2017-07-17 | 2019-08-20 | Cisco Technology, Inc. | Error detection and correction in a content-addressable memory using single-bit position lookup operations |
US10496299B2 (en) | 2018-04-16 | 2019-12-03 | Cisco Technology, Inc. | Efficient content-addressable memory entry integrity checking including for protecting the accuracy of packet processing operations |
US11194475B2 (en) | 2018-04-16 | 2021-12-07 | Cisco Technology, Inc. | Coordinated updating and searching a content-addressable memory including for packet processing operations |
US11467899B2 (en) | 2018-04-16 | 2022-10-11 | Cisco Technology, Inc. | Efficient content-addressable memory lookup result integrity checking and correcting operations including for protecting the accuracy of packet processing operations |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6606681B1 (en) | 2003-08-12 | Optimized content addressable memory (CAM) |
US6775281B1 (en) | 2004-08-10 | Method and apparatus for a four-way hash table |
US7277426B2 (en) | 2007-10-02 | Method and apparatus for reordering entries in a multi probe lookup |
US6665297B1 (en) | 2003-12-16 | Network routing table |
US8200686B2 (en) | 2012-06-12 | Lookup engine |
US7555594B2 (en) | 2009-06-30 | Range representation in a content addressable memory (CAM) using an improved encoding scheme |
US7274693B1 (en) | 2007-09-25 | Search engine for forwarding table content addressable memory |
US20020147721A1 (en) | 2002-10-10 | Compact data structures for pipelined message forwarding lookups |
US6725216B2 (en) | 2004-04-20 | Partitioning search key thereby distributing table across multiple non-contiguous memory segments, memory banks or memory modules |
WO2001005116A2 (en) | 2001-01-18 | Routing method and apparatus |
US6804230B1 (en) | 2004-10-12 | Communication device with forwarding database having a trie search facility |
US7739445B1 (en) | 2010-06-15 | Circuit, apparatus, and method for extracting multiple matching entries from a content addressable memory (CAM) device |
US11782895B2 (en) | 2023-10-10 | Cuckoo hashing including accessing hash tables using affinity table |
US6917954B2 (en) | 2005-07-12 | Load balancing in IP address lookup |
US7003625B2 (en) | 2006-02-21 | Searching small entities in a wide CAM |
EP1131921B1 (en) | 2006-08-30 | Method and apparatus for adaptive address lookup table generator |
US7593953B1 (en) | 2009-09-22 | Table lookup mechanism for address resolution |
US6996664B2 (en) | 2006-02-07 | Ternary content addressable memory with enhanced priority matching |
WO2005064868A1 (en) | 2005-07-14 | Network message processing using pattern matching |
GB2407674A (en) | 2005-05-04 | Lookup engine |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
2001-05-14 | AS | Assignment |
Owner name: AURORANETICS, INC., CALIFORNIA Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:UZUN, NECDET;REEL/FRAME:011799/0872 Effective date: 20010411 |
2001-10-26 | AS | Assignment |
Owner name: CISCO SYSTEMS, INC., CALIFORNIA Free format text: MERGER;ASSIGNOR:AURORANETICS, INC.;REEL/FRAME:012289/0099 Effective date: 20010822 |
2003-07-24 | STCF | Information on status: patent grant |
Free format text: PATENTED CASE |
2004-12-28 | CC | Certificate of correction | |
2005-01-25 | AS | Assignment |
Owner name: CISCO TECHNOLOGY, INC., CALIFORNIA Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:CISCO SYSTEMS, INC.;REEL/FRAME:015687/0620 Effective date: 20050125 |
2006-12-18 | FPAY | Fee payment |
Year of fee payment: 4 |
2011-02-14 | FPAY | Fee payment |
Year of fee payment: 8 |
2015-02-12 | FPAY | Fee payment |
Year of fee payment: 12 |