상기한 목적을 달성하기 위한 본 발명의 일 측면에 따른 라우팅 시스템의 룰 엔트리 관리 방법은, 각각의 엔트리에 대응되는 해쉬 키를 가지는 해쉬 테이블을 구성하는 단계, 상기 해쉬 테이블의 엔트리를 헤드 노드로 하고, 룰 ID와 룰이 입력된 우선순위에 따라 부여되는 시퀀스 ID를 포함하는 각 노드들을 연결하는 단일 링크 리스트를 구성하는 단계 및 독립적인 헤드 노드를 가지고, 상기 단일 링크 리스트를 구성하는 각 노드들을 시퀀스 ID 순서에 따라 양방향으로 연결하는 양방향 링크 리스트를 구성하는 단계를 포함한다.
상기 라우팅 시스템의 룰 엔트리 관리 방법에 있어서 상기 해쉬 키는, 패킷 분류나 패킷 필터링 룰 각각을 구별하는 룰 ID, 룰이 적용된 인터페이스 인덱스 및 인터페이스 방향을 인자로 하여 생성된다.
상기 라우팅 시스템의 룰 엔트리 관리 방법에 있어서 상기 링크 리스트를 구성하는 각 노드는, 룰이 적용된 인터페이스 인덱스에 대한 정보를 더 포함하는 것을 특징으로 한다.
한편, 상기한 목적을 달성하기 위한 본 발명의 다른 측면에 따른 라우팅 시스템의 룰 엔트리 관리 방법은, 터너리 CAM에 추가하기 위한 룰을 수신하는 경우, 수신한 룰에 따른 해쉬 키를 생성하여 이에 매칭되는 해쉬 테이블 엔트리를 검색하는 단계, 검색된 해쉬 테이블 엔트리에 연결된 단일 링크 리스트에 해당 룰에 관한 정보와 일치하는 노드가 존재하는지 판단하는 단계 및 단일 링크 리스트가 존재하지 않는 경우 단일 링크 리스트의 첫 번째 노드 앞에 입력된 룰에 관한 정보를 포함하는 새로운 노드를 추가하고, 양방향 링크 리스트 중 역방향 리스트의 첫 번째 노드 앞에 상기 새로운 노드를 추가하는 단계를 포함한다.
상기 라우팅 시스템의 룰 엔트리 관리 방법은, 새로운 노드를 추가한 경우, 양방향 링크 리스트 중 시퀀스 ID가 증가하는 순서대로 읽어 가면서 새로운 노드에 시퀀스 ID를 할당하는 단계를 더 포함한다.
상기 라우팅 시스템의 룰 엔트리 관리 방법은, 시퀀스 ID 가 가리키는 터너리 CAM의 위치에 룰을 저장하는 단계를 더 포함한다.
상기 라우팅 시스템의 룰 엔트리 관리 방법에 있어서, 수신한 룰이 터너리 CAM 에서 삭제하기 위한 룰인 경우, 상기 룰의 ID와 인터페이스 인덱스에 일치하는 노드가 단일 링크 리스트에 존재하는지 검색하고, 일치하는 노드에 포함된 시퀀스 ID 가 가리키는 터너리 CAM의 위치에서 해당 룰을 삭제하는 것을 특징으로 한다.
상기 라우팅 시스템의 룰 엔트리 관리 방법은, 터너리 CAM의 위치에서 해당 룰을 삭제하는 경우, 양방향 링크 리스트와 단일 링크 리스트에서 해당 노드를 삭제하는 단계를 더 포함한다.
상기 라우팅 시스템의 룰 엔트리 관리 방법은, 룰이 저장되지 않은 엔트리가 존재하고, 다음 차례에 수신되는 룰에 부여될 시퀀스 ID로부터 최대 부여될 수 있는 시퀀스 ID 까지 사용되지 않은 엔트리가 존재하지 않는 경우, 양방향 링크 리스트를 순서대로 읽어가면서 시퀀스 ID를 재할당하는 단계를 더 포함한다.
상기 라우팅 시스템의 룰 엔트리 관리 방법에 있어서, 상기 시퀀스 ID 재할당 과정은, 다음 차례에 수신되는 룰에 부여될 시퀀스 ID로부터 최대 부여될 수 있는 시퀀스 ID 까지 사용되지 않은 터너리 CAM의 엔트리 개수에서 최대 부여될 수 있는 시퀀스 ID 이전에 사용 가능한 터너리 CAM의 엔트리 개수를 뺀 값의 절대값 시간 후에 수행된다.
상기 라우팅 시스템의 룰 엔트리 관리 방법에 있어서, 상기 시퀀스 ID 재할당 과정은, 양방향 링크 리스트를 시퀀스 ID 가 증가하는 순서대로 읽어가면서, 양방향 링크 리스트를 구성하는 각 노드에 시퀀스 ID를 1부터 차례로 재할당하는 것을 특징으로 한다.
한편, 상기한 목적을 달성하기 위한 본 발명의 또 다른 측면에 따른 라우팅 시스템은, 해쉬 키로 구성되는 해쉬 테이블, 상기 해쉬 테이블의 엔트리를 헤드 노드로 하고 룰 ID와 룰이 입력된 우선 순위에 따라 부여되는 시퀀스 ID를 포함하는 각 노드들을 연결하는 단일 링크 리스트 및 독립적인 헤드 노드를 가지고 상기 단일 링크 리스트를 구성하는 각 노드들을 시퀀스 ID 순서에 따라 양방향으로 연결하는 양방향 링크 리스트를 구성하는 네트워크 프로세서와 상기 노드에 포함된 룰을 룰에 부여되는 시퀀스 ID가 가리키는 터너리 CAM 엔트리에 저장하는 터너리 CAM을 포함한다.
상기 라우팅 시스템에 있어서 상기 해쉬 테이블은, 패킷 분류나 패킷 필터링 룰 각각을 구별하는 룰 ID, 룰이 적용된 인터페이스 인덱스 및 인터페이스의 방향을 인자로 하는 해쉬 키를 엔트리로 구성하는 것을 특징으로 한다.
상기 라우팅 시스템에 있어서 상기 단일 링크 리스트는, 상기 해쉬 테이블의 엔트리를 헤드 노드로 하고, 시퀀스 ID와 해쉬 키에 대응되는 룰 ID 또는 인터페이스 인덱스에 대한 정보를 포함하는 노드들을 순차적으로 연결한다.
상기 라우팅 시스템에 있어서 상기 양방향 링크 리스트는, 독립적인 헤드 노드를 주축으로 하여 상기 단일 링크 리스트를 구성하는 각 노드들을 시퀀스 ID 가 증가하는 순서 또는 감소하는 순서에 따라 연결한다.
상기 라우팅 시스템에 있어서 상기 네트워크 프로세서는, 패킷 분류 또는 패킷 필터링을 위한 룰 정보와 터너리 CAM에 임의의 룰을 추가 또는 삭제하기 위한 정보를 포함하는 엔트리 관리 정보를 엔트리 관리부에 제공하는 인터페이스부와 해쉬 테이블, 단일 링크 리스트 및 양방향 링크 리스트를 구성하고, 이를 참조하여 엔트리 관리 정보에 따라 임의의 룰을 터너리 CAM에 저장하거나, 터너리 CAM에서 삭제하는 엔트리 관리부를 포함한다.
상기 라우팅 시스템에 있어서 상기 네트워크 프로세서는, 터너리 CAM을 룩업하여 획득한 패킷 포워딩 정보에 따라 패킷을 필터링하거나 패킷 분류에 따른 정책을 적용하는 룩업 처리부를 더 포함한다.
상기 라우팅 시스템은, 상기 터너리 CAM이 저장하는 각 룰에 대응되는 패킷의 포워딩 정보를 저장하는 보조 메모리를 더 포함한다.
이하 본 발명에 따른 라우팅 시스템 및 라우팅 시스템의 룰 엔트리 관리 방법을 첨부한 도면을 참조하여 상세히 설명한다.
도 4는 본 발명에 따른 라우팅 시스템의 구성을 도시한 도면이다.
상기 라우팅 시스템은 네트워크 프로세서(400), 터너리 CAM(410), 보조 메모리(420) 등을 포함하며, 네트워크 프로세서(400)는 인터페이스부(402), 엔트리 관리부(404), 룩업 처리부(406)를 세부 블록으로 포함한다.
본원 발명에 따른 라우팅 시스템의 기본적인 구성은 종래의 라우팅 시스템과 기본적으로 동일하며, 그 구성 요소의 기능 또한 기존의 것과 거의 동일하다. 따라서 중복되는 설명을 피하기 위하여 하기에서는 종래의 구성 요소와 다른 부분에 대해서만 기술하기로 한다.
엔트리 관리부(404)는 패킷 분류나 패킷 필터링 룰 정보와 터너리 CAM(410) 에서의 룰 저장 위치와의 매핑 정보를 관리하기 위해 해쉬 테이블, 해쉬 테이블의 엔트리를 헤드 노드(Head Node)로 하는 단일 링크 리스트(Single Linked List) 및양방향 링크 리스트(Double Linked List)를 구성한다. 해쉬 테이블과 단일 링크 리스트 및 양방향 링크 리스트에 대해서는 도 5에 대한 설명에서 상세히 설명하도록 하겠다.
엔트리 관리부(404)는 해쉬 키를 사용하여 이에 매칭되는 해쉬 테이블 엔트리를 검색하는데, 상기 해쉬 키에 대해서도 역시 도 5에 대한 설명에서 상세히 설명하도록 한다.
도 5는 본 발명에서 터너리 CAM의 룰 엔트리를 관리하기 위하여 생성되는 해쉬 테이블과 단일 링크 리스트 및 양방향 링크 리스트의 연결 관계를 도시한 도면이다.
해쉬 테이블(510)은 해쉬 키들로 이루어진다. 도 5에서 도시된 것처럼 해쉬 테이블(510)에는 단일 링크 리스트와 양방향 링크 리스트가 연결되는데, 엔트리 관리부(404)는 이를 참조하여 터너리 CAM(410)에 룰을 고속으로 적재하거나 삭제할 수 있다. 해쉬 테이블(510)의 엔트리를 구성하는 해쉬 키는 다음과 같이 정의된다.
Hash Key = [(Direction<<15)|(Rule Id<<8)|Port Id]&0xFFFF
해쉬 키를 구성하는 인자들은 패킷 분류나 패킷 필터링 룰 각각을 구별하는 룰 ID(Rule Id), 룰이 적용된 인터페이스 인덱스(Port Id), 인터페이스의 방향(Direction)등이 될 수 있다. 이 경우 룰 ID는 패킷 분류나 패킷 필터링에 관한 룰을 구별하기 위하여 각각의 룰에 부여된 고유 ID를 말한다. Direction은 룰이 적용된 인터페이스의 방향을 의미하며, 각각의 인터페이스마다 ingress와 egress가 있을 수 있다. 마지막으로 Port ID는 룰이 적용된 인터페이스 인덱스를 가리킨다.
예를 들어 해쉬 테이블(510)의 키 사이즈를 16bit 로 정의한다면, 2
=65536 이므로 해쉬 키는 65536개가 생길 수 있다. 따라서 이 경우 해쉬 테이블(510)은 0부터 65535까지의 테이블 엔트리를 갖게 된다.
단일 링크 리스트(Single Linked List)는 해쉬 테이블(510)의 엔트리를 헤드 노드(Head Node)로 하는 연결 리스트이다. 상기 단일 링크 리스트를 구성하는 각 노드는 룰 ID, 인터페이스 인덱스와 그에 할당된 시퀀스 ID를 가진다. 엔트리 관리부(404)는 메모리 사용의 제약으로 정의한 해쉬 테이블(510)의 키 사이즈가 룰 ID, 인터페이스 인덱스, 인터페이스 방향의 모든 조합을 포함하지 못하는 경우를 대비하여 상기 단일 링크 리스트를 만든다.
예를 들어, 도 5에서는 각각의 해쉬 테이블 엔트리마다 단일 링크 리스트를 생성할 수 있다. 해쉬 테이블 엔트리 1을 헤드 노드로 하는 단일 링크 리스트는 노드 5(525), 노드 4(524) 및 노드 1(521)을 순차적으로 연결한다. 해쉬 테이블 엔트리 2를 헤드 노드로 하는 단일 링크 리스트는 노드 3(523)과 노드 2(522)를 순차적으로 연결한다. 해쉬 테이블 엔트리 65533을 헤드 노드로 하는 단일 링크 리스트에는 노드 6(526)만이 포함된다.
양방향 링크 리스트(Double Linked List)는 독립적인 헤드 노드(Head Node)(520)와 단일 링크 리스트를 구성하는 각 노드들로 구성되며, 독립적인 헤드 노드(520)를 주축으로 하여 단일 링크 리스트의 각 노드를 시퀀스 ID 순서로 양방향으로 연결한다. 단일 링크 리스트가 해쉬 테이블(510)의 엔트리를 헤드 노드로 구성하는데 반해, 양방향 링크 리스트는 독립적인 헤드 노드(520)를 갖는다.
상기 양방향 링크 리스트는 터너리 CAM(410)의 저장 위치를 나타내는 시퀀스 ID 순서를 보장한다. 이를 위해 양방향 링크 리스트는 순방향 리스트와 역방향 리스트를 가진다. 순방향 리스트란 양방향 링크 리스트의 헤드 노드(520)가 시퀀스 ID 값이 가장 낮은 노드를 가리키는 경우, 즉 시퀀스 ID 값이 가장 낮은 노드부터 시퀀스 ID 값이 높은 노드 순서로 연결한 리스트이다. 순방향 리스트는 터너리 CAM(410)에 룰이 저장된 순서를 나타낸다. 역방향 리스트란 양방향 링크 리스트로 연결된 노드 중에서 시퀀스 ID 값이 가장 큰 노드를 헤드 노드(520)가 가리키는 경우, 즉 시퀀스 ID 값이 가장 높은 노드에서 시퀀스 ID 값이 낮은 노드 순서로 연결한 리스트이다. 역방향 리스트는 양방향 링크 리스트에 새로운 룰을 빠르게 추가하기 위해 사용된다.
도 5에서는 노드 1(521), 노드 2(522), 노드 3(523), 노드 4(524), 노드 5(525), 노드 6(526)을 순서대로 연결한 것이 순방향 리스트가 된다. 이에 반하여 역방향 리스트는 노드 6(526), 노드 5(525), 노드 4(524), 노드 3(523), 노드 2(522), 노드 1(521)을 순서대로 연결한 것이 역방향 리스트가 된다.
설명의 편의성을 위해서 터너리 CAM의 최대 엔트리 개수가 8이라 가정하자. 우선 터너리 CAM과 관련하여 정의되는 파라미터에 관하여 기본적으로 살펴보면 다음과 같다.
Number of Free Entries는 터너리 CAM(410)의 엔트리 중에서, 룰이 저장되어 있지 않은 엔트리 개수를 가리킨다. 터너리 CAM(410)에 룰이 하나도 저장되지 않은 경우, 상기 Number of Free Entries의 값은"8"이다. 상기 Number of Free Entries 값은 룰이 터너리 CAM(410)에 저장될 때마다 감소하고, 룰이 터너리 CAM(410)에서 삭제될 때마다 증가한다.
Next Sequence Id는 다음 차례에 룰을 수신하는 경우, 상기 룰을 터너리 CAM(410)에 저장하게 될 위치를 가리킨다. 만일 터너리 CAM(410)에 룰이 하나도 저장되지 않은 경우, 다음 번 시퀀스 ID는 1이 될 것이므로(룰이 입력되는 순서대로 우선 순위를 보장하기 위해서, 터너리 CAM(410)의 저장 위치를 가리키는 시퀀스 ID를 1씩 증가한다는 것은 앞서 이미 살펴보았다.) Next Sequence Id 값은"1"이 된다. 상기 Next Sequence Id 값은 룰이 터너리 CAM(410)에 저장될 때마다"1"씩 증가한다. 만일 삭제된 룰을 다시 터너리 CAM(410)에 추가한 경우에는, 새로운 룰을 추가하기 전에 발생하는 시퀀스 ID 재할당 이후에 Next Sequence ID는 양방향 링크 리스트(Double Linked List) 중 순방향 리스트에서 가장 마지막에 할당된 시퀀스 ID 값으로 초기화한다.
Left Sequence Id는 Next Sequence Id로부터 최대 Sequence Id까지 사용되지 않는 터너리 CAM(410)의 엔트리 개수를 말한다. 터너리 CAM(410)에 룰이 하나도 저장되지 않는 경우에는 상기 Left Sequence Id 값은"8"이다. Left Sequence Id 값은 룰이 터너리 CAM(410)에 저장될 때마다 감소한다. Sequence Id 재할당이 발생한 이후에는 상기 Left Sequence Id는 Number of Free Entries 값으로 초기화한다.
Used Sequence Id는 Next Sequence Id 이전에 사용 가능한 터너리 CAM(410)의 엔트리 개수를 말한다. 터너리 CAM(410)에 저장된 룰이 하나도 삭제되지 않고 그대로 유지되는 경우, Used Sequence Id 값은"0"이다. 상기 Used Sequence Id 값은 룰이 터너리 CAM(410)에서 삭제될 때마다 증가한다. Sequence Id 재할당이 발생한 이후에, Used Sequence Id 값은 "0"으로 초기화한다.
이제 상기와 같은 해쉬 테이블과 단일 링크 리스트 및 양방향 링크 리스트를 사용하여 터너리 CAM에 룰을 고속으로 적재하거나 삭제하는 룰 엔트리 관리 방법에 대하여 보다 자세히 살펴보기로 하자.
도 6은 룰 5개가 이미 저장된 후에 새로운 룰 하나를 추가한 후의 해쉬 테이블, 단일 링크 리스트, 양방향 링크 리스트 및 터너리 CAM의 모습을 도시한 도면이다.
예를 들어, 룰 #1은 룰 ID 0이 인터페이스 인덱스 1의 ingress에 적용된 패킷 분류나 패킷 필터링 룰, 룰 #2는 룰 ID 0이 인터페이스 인덱스 2의 ingress에 적용된 룰, 룰 #3은 룰 ID 129가 인터페이스 인덱스 2의 Ingress에 적용된 룰, 룰 #4는 룰 ID 129가 인터페이스 인덱스 1의 Ingress에 적용된 룰, 룰 #5는 룰 ID 257이 인터페이스 인덱스 1의 Ingress에 적용된 룰, 룰 #6은 룰 ID 128이 인터페이스 인덱스 13의 egress에 적용된 룰이라고 가정한다.
도 6에서 도시된 것처럼 터너리 CAM(410)에는 6개의 룰에 대한 정보가 저장되어 있다. 지금까지 터너리 CAM(410)에 입력된 룰들은 시퀀스 ID 1부터 시퀀스 ID 6까지 순서대로 저장된다. 따라서 다음 차례에 입력되는 룰은 터너리 CAM(410) 중 시퀀스 ID 7의 위치에 저장된다. 따라서 Next Sequence ID 는 7이 된다.
터너리 CAM(410)의 최대 엔트리 개수가 8이고, Next Sequence ID 는 7이므로, Next Sequence ID 는 7부터 최대 시퀀스 ID인 8까지 사용되지 않는 터너리 CAM(410)의 엔트리 개수는 2이다. 따라서 Left Sequence ID값은 2이다. 또한 룰이 저장되어 있지 않은 터너리 CAM(410)의 엔트리 개수 또한 2가 될 것이므로, Number of Free Entries 값도 2가 된다.
터너리 CAM(410)에 저장된 6개의 룰들은 중간에 삭제되거나 추가되지 않고, 초기에 저장된 그대로 유지되고 있다. 따라서 Next Sequence ID인 7 이전에 사용 가능한 터너리 CAM(410)의 엔트리는 없다. 따라서 Used Sequence ID 값은 0이다.
도 7은 도 6에서 룰 #1과 룰 #3을 터너리 CAM에서 삭제한 후의 터너리 CAM 구조와 매핑 정보의 변화 모습을 도시한 도면이다.
다음 차례에 입력되는 룰은 터너리 CAM(410) 중 시퀀스 ID 7의 위치에 저장된다. 따라서 Next Sequence ID 는 도 6의 경우와 마찬가지로 7이다. 또한 Next Sequence ID 7로부터 터너리 CAM(410)의 최대 시퀀스 ID인 8까지 사용되지 않는 터너리 CAM(410)의 엔트리 개수는 2이므로, Left Sequence Id 값은 2가 된다.
그러나 터너리 CAM(410)에서 저장되어 있는 6개의 룰 중, 룰 #1과 룰 #3이 삭제되었으므로, 시퀀스 ID 1과 시퀀스 ID 3에 대응하는 터너리 CAM(410) 엔트리에는 룰이 저장되어 있지 않다. 도 6에서는 사용할 수 있는 터너리 CAM(410) 엔트리 개수가 2개였지만, 이 중 룰 #1과 룰 #3이 삭제되었으므로, 사용되지 않는 터너리 CAM(410)의 엔트리 개수는 4로 증가한다. 따라서 Number of Free Entries값은 4로 변한다.
또한 터너리 CAM(410)에 저장되어 있는 6개의 룰 들 중에서 2개의 룰이 삭제되었으므로, Next Sequence ID인 7 이전에 사용 가능한 터너리 CAM(410)의 엔트리는 2개로 늘어난다. 따라서 Used Sequence ID 값은 2가 된다. 아직 시퀀스 ID 재할당 과정을 거치지 않았기 때문에 상기 Left Sequence Id 값과 Number of Free Entries 값이 다르다.
도 8은 삭제된 룰 #1과 룰 #3을 다시 터너리 CAM에 추가한 후의 터너리 CAM 구조와 매핑 정보의 변화 모습을 도시한 도면이다.
도 8에서는 아직 시퀀스 ID 재할당 과정이 일어나지 않았다. 따라서 Next Sequence ID 이전에 사용 가능한 터너리 CAM(410)의 엔트리가 존재한다 하더라도, 이를 무시하고 추가되는 룰을 터너리 CAM(410)의 Next Sequence ID 위치부터 차례로 저장한다. 앞서 보았듯 Next Sequence ID는 7이므로, 추가되는 룰 #1은 터너리 CAM(410) 중 시퀀스 ID 7의 위치에 저장된다. 이에 따라 룰 #3은 시퀀스 ID 8의 위치에 저장된다.
이 경우 룰이 시퀀스 ID 8의 위치까지 이미 저장되었기 때문에, Next Sequence ID 값은 7에서 9로 변한다. 또한 Next Sequence ID 값이 최대 Sequence ID 값보다 커서, Next Sequence ID 로부터 최대 Sequence ID 까지 사용되지 않는 터너리 CAM(410)의 엔트리가 존재하지 않는다. 따라서 Left Sequence ID 값은 0 이다.
2개의 룰을 다시 터너리 CAM(410)에 추가하였으므로, 룰이 저장되어 있지 않은 터너리 CAM(410)의 엔트리의 개수는 4개에서 2개로 줄어든다. 따라서 Number of Free Entries값은 4에서 2로 변경된다. 또한 Next Sequence ID 값인 9 이전에 사용 가능한 Used Sequence ID 값 역시 2이다.
도 9는 시퀀스 ID 재할당 과정을 거친 상태에서, 룰 #7을 터너리 CAM에 추가한 후의 터너리 CAM 구조와 매핑 정보의 변화 모습을 도시한 도면이다.
앞서 설명하였지만 터너리 CAM(410)에 새롭게 추가되는 룰은 Next Sequence ID에 대응되는 위치에 저장된다. 그러나 터너리 CAM(410)에 저장되어 있는 기존의 룰이 삭제되어, Next Sequence ID 이전에 사용 가능한 터너리 CAM(410)의 엔트리가 존재할 수 있다. 따라서 보다 효율적인 터너리 CAM(410)의 엔트리 관리를 위하여 시퀀스 ID 재할당 과정이 필요하다.
시퀀스 ID 재할당 과정을 거치고 나면, 현재 터너리 CAM(410)에 저장된 룰들은 우선 순위대로 시퀀스 ID 값을 다시 할당받는다. 예를 들어 도 9에서는 룰 #2, 룰 #4, 룰 #5, 룰 #6, 룰 #1 및 룰 #3에 각각 시퀀스 ID 1, 시퀀스 ID 2, 시퀀스 ID 3, 시퀀스 ID 4, 시퀀스 ID 5 및 시퀀스 ID 6이 할당된다. 시퀀스 ID 재할당 과정을 거치고 나면, Next Sequence ID 이전에 사용 가능한 시퀀스 ID 가 없게 된다. 이후 추가되는 룰 #7은 시퀀스 ID 7에 대응되는 위치에 저장된다.
이후 변화된 터너리 CAM(410) 구조를 살펴보면, 다음 차례에 추가되는 룰은 시퀀스 ID 8의 위치에 저장될 것이므로 Next Sequence ID 값이 8이 된다. 또한 Next Sequence ID로부터 최대 Sequence ID까지 사용되지 않는 터너리 CAM(410)의 엔트리는 시퀀스 ID 8인 엔트리 단 한 개 이므로, Left Sequence ID 값은 1이다. 터너리 CAM(410)에 룰이 저장되어 있지 않은 엔트리도 시퀀스 ID 8에 대응되는 엔트리 뿐이므로, Number of Free Entries 값도 1이 된다. 그러나 터너리 CAM(410)은 시퀀스 ID 재할당 과정을 거쳤으므로, Next Sequence ID 이전에 사용 가능한 엔트리가 존재하지 않는다. 따라서 Used Sequence ID 값은 0으로 변했다.
도 10은 본 발명에 따라 터너리 CAM에 룰을 추가하는 과정을 도시한 도면이다.
엔트리 관리부(404)는 인터페이스부로부터 패킷 분류나 패킷 필터링 룰을 입력받는다(S1001). 이 경우 엔트리 관리부(404)는 룰에 따른 해쉬 키를 생성한다(S1002). 엔트리 관리부(404)는 생성한 해쉬 키를 이용하여 해쉬 테이블(510)을 검색하고(S1003), 상기 해쉬 키에 대응되는 해쉬 테이블 엔트리를 찾는다.
엔트리 관리부(404)는 검색된 해쉬 테이블 엔트리를 헤드 노드로 하는 단일 링크 리스트가 존재하는지 판단한다(S1004). 단일 링크 리스트가 존재하는 경우, 엔트리 관리부(404)는 룰 ID와 인터페이스 인덱스를 사용하여 상기 단일 링크 리스트를 검색한다(S1005). 이 경우 엔트리 관리부(404)는 단일 링크 리스트에 상기 룰 ID 와 인터페이스 인덱스에 일치하는 노드가 존재하지 않는지 판단한다(S1007). 일치하는 노드가 존재하는 경우라면, 수신된 룰을 터너리 CAM(410)에 추가할 필요가 없으므로 모든 과정이 종료된다.
그러나 일치하는 노드가 존재하지 않는 경우, 엔트리 관리부(404)는 단일 링크 리스트의 첫 번째 노드 앞에 상기 룰 ID 와 인터페이스 인덱스에 일치하는 새로운 노드를 추가한다(S1008). 또한 양방향 링크 리스트 중 역방향 리스트의 첫 번째 노드 앞에 새로운 노드를 추가한다(S1009).
만일 S1004 단계에서 단일 링크 리스트가 존재하지 않는다고 판단된 경우에는, 해당 해쉬 테이블 엔트리를 헤드 노드로 하는 단일 링크 리스트를 생성한다(S1006). 이후 S1009 단계를 거치게 된다.
단일 링크 리스트와 양방향 링크 리스트가 모두 업데이트 되면, 엔트리 관리부(404)는 양방향 링크 리스트 중 순방향 리스트 순서대로 읽어가면서 새로운 노드에 시퀀스 ID를 할당한다(S1010). 이 경우 각 노드에 포함된 룰들에 시퀀스 ID가 대응하여 할당된다.
엔트리 관리부(404)는 시퀀스 ID 가 가리키는 터너리 CAM(410) 위치에 시퀀스 ID에 대응되는 룰을 저장한다(S1011). 이 경우 엔트리 관리부(404)는 Next Sequence ID 값을 1 증가시키고(S1012), Number of Free Entries와 Left Sequence ID 값을 갱신한다(S1013).
엔트리 관리부(404)는 시퀀스 ID 재할당이 필요한지 판단한다(S1014). 시퀀스 ID 재할당이 필요한 경우, 엔트리 관리부(404)는 터너리 CAM(410)의 엔트리들에 시퀀스 ID를 재할당한다(S1015). 그러나 시퀀스 ID 재할당 과정이 필요하지 않은 경우라고 판단되면, 터너리 CAM(410)에의 룰 추가 과정을 모두 종료한다.
상기 시퀀스 ID 재할당 과정에 대해서는 다음에 도시하는 도 11에서 상세히 설명하겠다.
도 11은 시퀀스 ID 재할당 과정을 도시한 도면이다.
시퀀스 ID 재할당 과정은 Left Sequence ID 값이 0 이고, Number of Free entries 값이 0이 아닌 값을 갖는 경우에 수행한다. 이 경우 Next Sequence ID 로부터 최대 Sequence ID 까지 사용되지 않은 엔트리가 존재하지 않지만(Left Sequence ID 값이 0 이므로), Number of Free entries 값이 0이 아니므로 터너리 CAM(410) 전체적으로는 사용 가능한 엔트리가 존재한다. 따라서 시퀀스 ID 재할당 과정을 거쳐 터너리 CAM(410)의 엔트리를 재정렬하고, 다시 룰을 순서대로 입력하여야 한다.
시퀀스 ID 재할당 과정은 Left sequence ID 에서 Used Sequence Id를 뺀 값의 절대값 시간 후에 수행된다. 그러나 Left Sequence ID 값과 Used Sequence ID 값의 차가 큰 경우에는 시퀀스 ID를 미리 재정렬 할 필요가 있으므로, 시퀀스 ID 재할당을 미리 수행하게 할 수 있다.
시퀀스 ID 재할당 과정이 시작되면, 엔트리 관리부(404)는 양방향 링크 리 스트 중 순방향 리스트에 있는 노드의 시퀀스 ID를 "1"부터 시작하여 "1"증가하여 할당한다(S1101). 시퀀스 ID를 1 증가하여 할당한 엔트리 관리부(404)는, 터너리 CAM(410)에 저장된 룰을 새롭게 할당된 시퀀스 ID 위치로 이동한다(S1102).
엔트리 관리부(404)는 시퀀스 ID를 새롭게 할당받은 노드가 양방향 링크 리스트 중 순방항 리스트에서 마지막 노드인지 판단한다(S1103). 순방향 리스트의 마지막 노드가 아닌 경우에는 다시 S1101 단계로 되돌아간다.
시퀀스 ID를 새롭게 할당받은 노드가 순방향 리스트의 마지막 노드인 경우에는 Left Sequence ID, Next Sequence ID 및 Used Sequence ID 의 값을 갱신한다(S1104). 이로써 시퀀스 ID 재할당 과정은 모두 종료한다.
도 12는 본 발명에 따라 터너리 CAM에서 룰을 삭제하는 과정을 도시한 도면이다.
엔트리 관리부(404)는 인터페이스부(402)로부터 삭제할 패킷 분류나 패킷 필터링 룰을 입력받는다(S1201). 이 경우 엔트리 관리부(404)는 룰에 따른 해쉬 키를 생성한다(S1202). 엔트리 관리부(404)는 생성한 해쉬 키를 이용하여 해쉬 테이블(510)을 검색하고(S1203), 상기 해쉬 키에 대응되는 해쉬 테이블 엔트리를 찾는다.
엔트리 관리부(404)는 검색된 해쉬 테이블 엔트리를 헤드 노드로 하는 단일 링크 리스트가 존재하는지 판단한다(S1204). 단일 링크 리스트가 존재하지 않는 경우에는 삭제를 원하는 룰이 터너리 CAM(410)에 저장되어 있지 않은 것이므로 룰 삭제 과정은 종료된다.
만일 단일 링크 리스트가 존재하는 경우라면, 엔트리 관리부(404)는 룰 ID와 인터페이스 인덱스를 사용하여 상기 단일 링크 리스트를 검색한다(S1205). 이 경우 엔트리 관리부(404)는 단일 링크 리스트에 상기 룰 ID 와 인터페이스 인덱스에 일치하는 노드가 존재하는지 판단한다(S1206). 일치하는 노드가 존재하지 않는 경우에는 터너리 CAM(410)에서의 룰 삭제 과정은 종료된다.
그러나 일치하는 노드가 존재하는 경우에는, 엔트리 관리부(404)는 시퀀스 ID가 가리키는 터너리 CAM(410) 위치에서 해당 룰을 삭제한다(S1207). 터너리 CAM(410)에서 룰을 삭제한 엔트리 관리부(404)는 양방향 링크 리스트에서 해당 노드를 삭제한다(S1208). 또한 단일 링크 리스트에서 해당 노드를 삭제한다(S1209).
이 경우 엔트리 관리부(404)는 Number of Free Entries 와 Used Sequence ID 값을 갱신한다(S1210). 이후 엔트리 관리부(404)는 시퀀스 ID 재할당이 필요한지 판단하여(S1211), 판단 결과에 따라 시퀀스 ID를 재할당하거나(S1212) 터너리 CAM(410)에서의 룰 삭제 과정을 모두 종료한다.