IP Library Patent Application 14684307
Patent Application
App. No. 14/684,307

METHOD, APPARATUS, AND COMPUTER-READABLE MEDIUM FOR EFFICIENT SUBNET IDENTIFICATION

Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US None
App. No.
14/684,307
Abstract

An apparatus, computer-readable medium, and computer-implemented method for efficiently identifying a subnet including sorting a plurality of Internet Protocol (IP) address ranges to generate a sorted list of IP address ranges and determining one or more result IP address ranges in the sorted list of IP address ranges which contain an IP address based at least in part on one or more binary searches of the sorted list of IP address ranges, the one or more binary searches utilizing one or more search keys that are based at least in part on the IP address.

Claims (131)

1 . A method executed by one or more computing devices for efficient subnet identification, the method comprising:

sorting, by at least one of the one or more computing devices, a plurality of Internet Protocol (IP) address ranges to generate a sorted list of IP address ranges; and

determining, by at least one of the one or more computing devices, one or more result IP address ranges in the sorted list of IP address ranges which contain an IP address based at least in part on one or more binary searches of the sorted list of IP address ranges, wherein the one or more binary searches utilize one or more search keys that are based at least in part on the IP address.

2 . The method of claim 1 , wherein sorting the plurality of IP address ranges comprises:

comparing a first bit string corresponding to a first IP address range in the plurality of IP address ranges with a second bit string corresponding to a second IP address range in the plurality of IP address ranges; and

sorting the first IP address range and the second IP address range based at least in part on the comparison.

3 . The method of claim 1 , wherein sorting the plurality of IP address ranges comprises:

storing a first IP address range in the plurality of IP address ranges as a first fixed-width byte sequence;

storing a second IP address range in the plurality of IP address ranges as a second fixed-width byte sequence;

comparing the first fixed-width byte sequence with the second fixed-width byte sequence; and

sorting the first IP address range and the second IP address range based at least in part on the comparison.

4 . The method of claim 1 , wherein the plurality of IP address ranges are sorted in ascending lexicographic order.

5 . The method of claim 1 , wherein each IP address range in the plurality of IP address ranges comprises an IP address and an associated network mask.

6 . The method of claim 1 , wherein each IP address range in the plurality of IP address ranges is expressed in Classless Inter-Domain Routing (CIDR) notation.

7 . The method of claim 1 , wherein determining one or more result IP address ranges in the sorted list of IP address ranges which include an IP address based at least in part on one or more binary searches of the sorted list of IP address ranges comprises:

generating a plurality of search keys from the IP address, wherein each search key in the plurality of search keys incorporates a unique number of significant bits from the IP address and wherein the total number of search keys is equal to the total number of significant bits in the IP address; and

performing a plurality of binary searches of the sorted list of IP address ranges using the plurality of search keys to identify any IP address ranges in the sorted list of IP address ranges which match the plurality of search keys.

8 . The method of claim 1 , wherein determining one or more result IP address ranges in the sorted list of IP address ranges which include an IP address based at least in part on one or more binary searches of the sorted list of IP address ranges comprises:

generating a list of parent pointers corresponding to the sorted list IP of address ranges, wherein each parent pointer in the list of parent pointers corresponds to an IP address range in the sorted list of IP address ranges and points to either another IP address range in the sorted list IP of address ranges or a terminal node;

performing a binary search on the sorted list of IP address ranges using the IP address as a search key, wherein the binary search returns a flag indicating whether the sorted list of IP address ranges contains the search key and an index value corresponding to either a location of the search key in the sorted list of IP address ranges or a search index value at termination of the binary search; and

determining the one or more result IP address ranges based at least in part on the flag, the index value, the sorted list of IP address ranges, and the list of parent pointers.

9 . The method of claim 8 , wherein each parent pointer in the list of parent pointers points to either a terminal node or to an IP address range in the sorted list IP of address ranges which encompasses the IP address range corresponding to that parent pointer and which is the next largest IP address range in the sorted list IP of address ranges.

10 . The method of claim 8 , further comprising:

receiving, by at least one of the one or more computing devices, an input indicating a strict containment operation.

11 . The method of claim 10 , wherein determining the one or more result IP address ranges based at least in part on the flag, the index value, the sorted list of IP address ranges, and the list of parent pointers comprises:

identifying a first IP address range corresponding to the index value in the sorted list of IP address ranges based at least in part on a determination that the flag is true;

identifying a second IP address range that is a parent of the IP address range corresponding to the index value based at least in part on the sorted list of IP address ranges and the list of parent pointers;

adding the second IP address range to the one or more result IP address ranges based at least in part on a determination that the second IP address range is not equal to the search key;

identifying one or more third IP address ranges that are parents of the second IP address range based at least in part on the sorted list of IP address ranges and the list of parent pointers; and

adding the one or more third IP address ranges to the one or more result IP address ranges.

12 . The method of claim 8 , wherein determining the one or more result IP address ranges based at least in part on the flag, the index value, the sorted list of IP address ranges, and the list of parent pointers comprises:

adding an IP address range corresponding to the index value in the sorted list of IP address ranges to the one or more result IP address ranges based at least in part on a determination that the flag is true;

identifying one or more additional IP address ranges that are parents of the IP address range corresponding to the index value based at least in part on the sorted list of IP address ranges and the list of parent pointers; and

adding the one or more additional IP address ranges to the one or more result IP address ranges.

13 . The method of claim 12 , wherein determining the one or more result IP address ranges based at least in part on the flag, the index value, the sorted list of IP address ranges, and the list of parent pointers further comprises:

determining whether an IP address range located immediately after the IP address range corresponding to the index value in the sorted list of IP address ranges is equal to the search key; and

adding the IP address range located immediately after the IP address range corresponding to the index value in the sorted list of IP address ranges to the one or more result IP address ranges based at least in part on a determination that it is equal to the search key.

14 . The method of 8 , wherein determining the one or more result IP address ranges based at least in part on the flag, the index value, the sorted list of IP address ranges, and the list of parent pointers comprises:

decrementing the index value based at least in part on a determination that the flag is false;

determining whether an IP address range corresponding to the decremented index value in the sorted list of IP address ranges contains the search key;

adding the IP address range corresponding to the decremented index value to the one or more result IP address ranges based at least in part on a determination that the IP address range corresponding to the decremented index value contains the search key;

identifying one or more additional IP address ranges that are parents of the IP address range corresponding to the decremented index value based at least in part on the sorted list of IP address ranges and the list of parent pointers; and

adding the one or more additional IP address ranges to the one or more result IP address ranges.

15 . An apparatus for efficient subnet identification, the apparatus comprising:

one or more processors; and

one or more memories operatively coupled to at least one of the one or more processors and having instructions stored thereon that, when executed by at least one of the one or more processors, cause at least one of the one or more processors to:

sort a plurality of Internet Protocol (IP) address ranges to generate a sorted list of IP address ranges; and

determine one or more result IP address ranges in the sorted list of IP address ranges which contain an IP address based at least in part on one or more binary searches of the sorted list of IP address ranges, wherein the one or more binary searches utilize one or more search keys that are based at least in part on the IP address.

16 . The apparatus of claim 15 , wherein the instructions that, when executed by at least one of the one or more processors, cause at least one of the one or more processors to sort the plurality of IP address ranges further cause at least one of the one or more processors to:

compare a first bit string corresponding to a first IP address range in the plurality of IP address ranges with a second bit string corresponding to a second IP address range in the plurality of IP address ranges; and

sort the first IP address range and the second IP address range based at least in part on the comparison.

17 . The apparatus of claim 15 , wherein the instructions that, when executed by at least one of the one or more processors, cause at least one of the one or more processors to sort the plurality of IP address ranges further cause at least one of the one or more processors to:

store a first IP address range in the plurality of IP address ranges as a first fixed-width byte sequence;

store a second IP address range in the plurality of IP address ranges as a second fixed-width byte sequence;

compare the first fixed-width byte sequence with the second fixed-width byte sequence; and

sort the first IP address range and the second IP address range based at least in part on the comparison.

18 . The apparatus of claim 15 , wherein the plurality of IP address ranges are sorted in ascending lexicographic order.

19 . The apparatus of claim 15 , wherein each IP address range in the plurality of IP address ranges comprises an IP address and an associated network mask.

20 . The apparatus of claim 15 , wherein each IP address range in the plurality of IP address ranges is expressed in Classless Inter-Domain Routing (CIDR) notation.

21 . The apparatus of claim 15 , wherein the instructions that, when executed by at least one of the one or more processors, cause at least one of the one or more processors to determine one or more result IP address ranges in the sorted list of IP address ranges which include an IP address based at least in part on one or more binary searches of the sorted list of IP address ranges further cause at least one of the one or more processors to:

generate plurality of search keys from the IP address, wherein each search key in the plurality of search keys incorporates a unique number of significant bits from the IP address and wherein the total number of search keys is equal to the total number of significant bits in the IP address; and

perform a plurality of binary searches of the sorted list of IP address ranges using the plurality of search keys to identify any IP address ranges in the sorted list of IP address ranges which match the plurality of search keys.

22 . The apparatus of claim 15 , wherein the instructions that, when executed by at least one of the one or more processors, cause at least one of the one or more processors to determine one or more result IP address ranges in the sorted list of IP address ranges which include an IP address based at least in part on one or more binary searches of the sorted list of IP address ranges further cause at least one of the one or more processors to:

generate a list of parent pointers corresponding to the sorted list IP of address ranges, wherein each parent pointer in the list of parent pointers corresponds to an IP address range in the sorted list of IP address ranges and points to either another IP address range in the sorted list IP of address ranges or a terminal node;

perform a binary search on the sorted list of IP address ranges using the IP address as a search key, wherein the binary search returns a flag indicating whether the sorted list of IP address ranges contains the search key and an index value corresponding to either a location of the search key in the sorted list of IP address ranges or a search index value at termination of the binary search; and

determine the one or more result IP address ranges based at least in part on the flag, the index value, the sorted list of IP address ranges, and the list of parent pointers.

23 . The apparatus of claim 22 , wherein each parent pointer in the list of parent pointers points to either a terminal node or to an IP address range in the sorted list IP of address ranges which encompasses the IP address range corresponding to that parent pointer and which is the next largest IP address range in the sorted list IP of address ranges.

24 . The apparatus of claim 22 , wherein at least one of the one or more memories has further instructions stored thereon that, when executed by at least one of the one or more processors, cause at least one of the one or more processors to:

receive an input indicating a strict containment operation.

25 . The apparatus of claim 24 , wherein the instructions that, when executed by at least one of the one or more processors, cause at least one of the one or more processors to determine the one or more result IP address ranges based at least in part on the flag, the index value, the sorted list of IP address ranges, and the list of parent pointers further cause at least one of the one or more processors to:

identify a first IP address range corresponding to the index value in the sorted list of IP address ranges based at least in part on a determination that the flag is true;

identify a second IP address range that is a parent of the IP address range corresponding to the index value based at least in part on the sorted list of IP address ranges and the list of parent pointers;

add the second IP address range to the one or more result IP address ranges based at least in part on a determination that the second IP address range is not equal to the search key;

identify one or more third IP address ranges that are parents of the second IP address range based at least in part on the sorted list of IP address ranges and the list of parent pointers; and

add the one or more third IP address ranges to the one or more result IP address ranges.

26 . The apparatus of claim 22 , wherein the instructions that, when executed by at least one of the one or more processors, cause at least one of the one or more processors to determine the one or more result IP address ranges based at least in part on the flag, the index value, the sorted list of IP address ranges, and the list of parent pointers further cause at least one of the one or more processors to:

add an IP address range corresponding to the index value in the sorted list of IP address ranges to the one or more result IP address ranges based at least in part on a determination that the flag is true;

identify one or more additional IP address ranges that are parents of the IP address range corresponding to the index value based at least in part on the sorted list of IP address ranges and the list of parent pointers; and

add the one or more additional IP address ranges to the one or more result IP address ranges.

27 . The apparatus of claim 26 , wherein the instructions that, when executed by at least one of the one or more processors, cause at least one of the one or more processors to determine the one or more result IP address ranges based at least in part on the flag, the index value, the sorted list of IP address ranges, and the list of parent pointers further cause at least one of the one or more processors to:

determine whether an IP address range located immediately after the IP address range corresponding to the index value in the sorted list of IP address ranges is equal to the search key; and

add the IP address range located immediately after the IP address range corresponding to the index value in the sorted list of IP address ranges to the one or more result IP address ranges based at least in part on a determination that it is equal to the search key.

28 . The apparatus of claim 22 , wherein the instructions that, when executed by at least one of the one or more processors, cause at least one of the one or more processors to determine the one or more result IP address ranges based at least in part on the flag, the index value, the sorted list of IP address ranges, and the list of parent pointers further cause at least one of the one or more processors to:

decrement the index value based at least in part on a determination that the flag is false;

determine whether an IP address range corresponding to the decremented index value in the sorted list of IP address ranges contains the search key;

add the IP address range corresponding to the decremented index value to the one or more result IP address ranges based at least in part on a determination that the IP address range corresponding to the decremented index value contains the search key;

identify one or more additional IP address ranges that are parents of the IP address range corresponding to the decremented index value based at least in part on the sorted list of IP address ranges and the list of parent pointers; and

add the one or more additional IP address ranges to the one or more result IP address ranges.

29 . At least one non-transitory computer-readable medium storing computer-readable instructions that, when executed by one or more computing devices, cause at least one of the one or more computing devices to:

sort a plurality of Internet Protocol (IP) address ranges to generate a sorted list of IP address ranges; and

determine one or more result IP address ranges in the sorted list of IP address ranges which contain an IP address based at least in part on one or more binary searches of the sorted list of IP address ranges, wherein the one or more binary searches utilize one or more search keys that are based at least in part on the IP address.

30 . The at least one non-transitory computer-readable medium of claim 29 , wherein the instructions that, when executed by at least one of the one or more computing devices, cause at least one of the one or more computing devices to sort the plurality of IP address ranges further cause at least one of the one or more computing devices to:

compare a first bit string corresponding to a first IP address range in the plurality of IP address ranges with a second bit string corresponding to a second IP address range in the plurality of IP address ranges; and

sort the first IP address range and the second IP address range based at least in part on the comparison.

31 . The at least one non-transitory computer-readable medium of claim 29 , wherein the instructions that, when executed by at least one of the one or more computing devices, cause at least one of the one or more computing devices to sort the plurality of IP address ranges further cause at least one of the one or more computing devices to:

store a first IP address range in the plurality of IP address ranges as a first fixed-width byte sequence;

store a second IP address range in the plurality of IP address ranges as a second fixed-width byte sequence;

compare the first fixed-width byte sequence with the second fixed-width byte sequence; and

sort the first IP address range and the second IP address range based at least in part on the comparison.

32 . The at least one non-transitory computer-readable medium of claim 29 , wherein the plurality of IP address ranges are sorted in ascending lexicographic order.

33 . The at least one non-transitory computer-readable medium of claim 29 , wherein each IP address range in the plurality of IP address ranges comprises an IP address and an associated network mask.

34 . The at least one non-transitory computer-readable medium of claim 29 , wherein each IP address range in the plurality of IP address ranges is expressed in Classless Inter-Domain Routing (CIDR) notation.

35 . The at least one non-transitory computer-readable medium of claim 29 , wherein the instructions that, when executed by at least one of the one or more computing devices, cause at least one of the one or more computing devices to determine one or more result IP address ranges in the sorted list of IP address ranges which include an IP address based at least in part on one or more binary searches of the sorted list of IP address ranges further cause at least one of the one or more computing devices to:

generate plurality of search keys from the IP address, wherein each search key in the plurality of search keys incorporates a unique number of significant bits from the IP address and wherein the total number of search keys is equal to the total number of significant bits in the IP address; and

perform a plurality of binary searches of the sorted list of IP address ranges using the plurality of search keys to identify any IP address ranges in the sorted list of IP address ranges which match the plurality of search keys.

36 . The at least one non-transitory computer-readable medium of claim 29 , wherein the instructions that, when executed by at least one of the one or more computing devices, cause at least one of the one or more computing devices to determine one or more result IP address ranges in the sorted list of IP address ranges which include an IP address based at least in part on one or more binary searches of the sorted list of IP address ranges further cause at least one of the one or more computing devices to:

generate a list of parent pointers corresponding to the sorted list IP of address ranges, wherein each parent pointer in the list of parent pointers corresponds to an IP address range in the sorted list of IP address ranges and points to either another IP address range in the sorted list IP of address ranges or a terminal node;

perform a binary search on the sorted list of IP address ranges using the IP address as a search key, wherein the binary search returns a flag indicating whether the sorted list of IP address ranges contains the search key and an index value corresponding to either a location of the search key in the sorted list of IP address ranges or a search index value at termination of the binary search; and

determine the one or more result IP address ranges based at least in part on the flag, the index value, the sorted list of IP address ranges, and the list of parent pointers.

37 . The at least one non-transitory computer-readable medium of claim 36 , wherein each parent pointer in the list of parent pointers points to either a terminal node or to an IP address range in the sorted list IP of address ranges which encompasses the IP address range corresponding to that parent pointer and which is the next largest IP address range in the sorted list IP of address ranges.

38 . The at least one non-transitory computer-readable medium of claim 36 , further storing computer-readable instructions that, when executed by at least one of the one or more computing devices, cause at least one of the one or more computing devices to:

receive an input indicating a strict containment operation.

39 . The at least one non-transitory computer-readable medium of claim 38 , wherein the instructions that, when executed by at least one of the one or more computing devices, cause at least one of the one or more computing devices to determine the one or more result IP address ranges based at least in part on the flag, the index value, the sorted list of IP address ranges, and the list of parent pointers further cause at least one of the one or more computing devices to:

identify a first IP address range corresponding to the index value in the sorted list of IP address ranges based at least in part on a determination that the flag is true;

identify a second IP address range that is a parent of the IP address range corresponding to the index value based at least in part on the sorted list of IP address ranges and the list of parent pointers;

add the second IP address range to the one or more result IP address ranges based at least in part on a determination that the second IP address range is not equal to the search key;

identify one or more third IP address ranges that are parents of the second IP address range based at least in part on the sorted list of IP address ranges and the list of parent pointers; and

add the one or more third IP address ranges to the one or more result IP address ranges.

40 . The at least one non-transitory computer-readable medium of claim 36 , wherein the instructions that, when executed by at least one of the one or more computing devices, cause at least one of the one or more computing devices to determine the one or more result IP address ranges based at least in part on the flag, the index value, the sorted list of IP address ranges, and the list of parent pointers further cause at least one of the one or more computing devices to:

add an IP address range corresponding to the index value in the sorted list of IP address ranges to the one or more result IP address ranges based at least in part on a determination that the flag is true;

identify one or more additional IP address ranges that are parents of the IP address range corresponding to the index value based at least in part on the sorted list of IP address ranges and the list of parent pointers; and

add the one or more additional IP address ranges to the one or more result IP address ranges.

41 . The at least one non-transitory computer-readable medium of claim 40 , wherein the instructions that, when executed by at least one of the one or more computing devices, cause at least one of the one or more computing devices to determine the one or more result IP address ranges based at least in part on the flag, the index value, the sorted list of IP address ranges, and the list of parent pointers further cause at least one of the one or more computing devices to:

determine whether an IP address range located immediately after the IP address range corresponding to the index value in the sorted list of IP address ranges is equal to the search key; and

add the IP address range located immediately after the IP address range corresponding to the index value in the sorted list of IP address ranges to the one or more result IP address ranges based at least in part on a determination that it is equal to the search key.

42 . The at least one non-transitory computer-readable medium of claim 36 , wherein the instructions that, when executed by at least one of the one or more computing devices, cause at least one of the one or more computing devices to determine the one or more result IP address ranges based at least in part on the flag, the index value, the sorted list of IP address ranges, and the list of parent pointers further cause at least one of the one or more computing devices to:

decrement the index value based at least in part on a determination that the flag is false;

determine whether an IP address range corresponding to the decremented index value in the sorted list of IP address ranges contains the search key;

add the IP address range corresponding to the decremented index value to the one or more result IP address ranges based at least in part on a determination that the IP address range corresponding to the decremented index value contains the search key;

identify one or more additional IP address ranges that are parents of the IP address range corresponding to the decremented index value based at least in part on the sorted list of IP address ranges and the list of parent pointers; and

add the one or more additional IP address ranges to the one or more result IP address ranges.

Assignments (4)
RELEASE OF SECURITY INTEREST Recorded Dec 1, 2022
From: SILICON VALLEY BANK
To: MANDIANT, INC.
Reel/Frame 061947/0309 →
MERGER Recorded Apr 13, 2021
From: X15 SOFTWARE, INC.
To: FIREEYE, INC.
Reel/Frame 056005/0538 →
CORRECTIVE ASSIGNMENT TO CORRECT THE ASSIGNEE ADDRESS PREVIOUSLY RECORDED AT REEL: 035490 FRAME: 0500. ASSIGNOR(S) HEREBY CONFIRMS THE ASSIGNMENT. Recorded Oct 8, 2015
From: BORKAR, VINAYAK
To: X15 SOFTWARE, INC.
Reel/Frame 036817/0001 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Apr 24, 2015
From: BORKAR, VINAYAK
To: X15 SOFTWARE, INC.
Reel/Frame 035490/0500 →