IP Library › Granted Patent US 8,638,796
Granted Patent B2
US 8,638,796 · App. 12/196,880 · Granted Jan 28, 2014

Re-ordering segments of a large number of segmented service flows

Inventors: Yie-Fong Dan (Cupertino, CA); Edmund Au (Cupertino, CA); Raymond Ng (Sunnyvale, CA); Yanyan Cui (San Jose, CA)
Assignee: Cisco Technology, Inc.
View Patent ↗
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 8,638,796
App. No.
12/196,880
Granted
Jan 28, 2014
Kind
B2
Abstract

A method and network device for re-ordering segments of a segmented data stream. The method includes receiving at least two segments of a segmented data stream. A descriptor for each of the at least two segments is obtained, and the at least two segments are re-ordered to generate re-ordered segments, where the re-ordered segments are in an original order. A set of re-ordered segments are processed to obtain at least one data packet, where at least one descriptor is utilized in the processing of the set of re-ordered segments.

Claims (87)

1. A method comprising:

receiving, via a plurality of radio frequency (RF) channels, a plurality of segments associated with a service flow, wherein the service flow comprises a plurality of discrete data packets and wherein one or more of the plurality of segments includes at least a portion of two or more different data packets separated by a packet boundary;

mapping each of the plurality of segments to a unique flow identifier (ID) based on an RF channel ID and a service ID of the service flow;

generating a descriptor for each of the plurality of segments, wherein each generated descriptor identifies a storage location of a segment associated with the descriptor and identifies any packet boundaries between portions of different data packets included in the segment;

storing the descriptor in a buffer corresponding to the unique flow identifier at a location in the buffer that corresponds to a sequence number associated with each of the plurality of segments that indicates an original order of segments of the service flow;

re-ordering the plurality segments based on the locations in the buffer of the stored descriptors and the storage locations contained within the descriptors to generate re-ordered segments, wherein the re-ordered segments are in the original order;

initializing first and second timeout trackers each comprising a descriptor pointer identifying a descriptor associated with the service flow and a timestamp;

determining, based on a timeout process using the first and second timeout trackers together, a range of re-ordered segments for examination, wherein at least one of the segments in the range of re-ordered segments includes a packet boundary between portions of different data packets included in the at least one segment;

examining descriptors associated with a set of re-ordered segments in the range of re-ordered segments to detect if the set of re-ordered segments is ready for packet retrieval of at least a first packet based on the packet boundaries contained within the descriptors; and

processing the set of re-ordered segments to obtain the at least first packet when it is detected that the set of re-ordered segments is ready for packet retrieval.

2. The method of claim 1 , wherein generating comprises generating the descriptor comprising information configured to indicate segment validity and a packet structure within a segment.

3. The method of claim 1 , further comprising:

storing a current state pertaining to the re-ordering of segments as a session entry in a session table; and

managing resources for segment reordering based on the session entry.

4. An apparatus, comprising:

a transceiver configured to receive a plurality of radio frequency (RF) channels; a demodulator configured to demodulate the plurality of radio frequency (RF) channels to obtain a plurality of segments associated with a service flow, wherein the service flow comprises a plurality of discrete data packets and wherein one or more of the plurality of segments includes at least a portion of two or more different data packets separated by a packet boundary; and

a processor configured to:

map each of the plurality of segments to a unique flow identifier (ID) based on an RF channel ID and a service ID of the service flow;

generate a descriptor for each of the plurality of segments, wherein each descriptor identifies a storage location of a segment associated with the descriptor and identifies any packet boundaries between portions of different data packets included in the segment;

store the descriptor in a buffer corresponding to the unique flow identifier at a location in the buffer that corresponds to a sequence number associated with each of the plurality of segments that indicates an original order of segments of the service flow;

re-order the plurality segments based on the locations in the buffer of the stored descriptors and the storage locations contained within the descriptors to generate re-ordered segments, wherein the re-ordered segments are in the original order;

initialize first and second timeout trackers each comprising a descriptor pointer identifying a descriptor associated with the service flow and a timestamp;

determine, based on a timeout process using the first and second timeout trackers together, a range of re-ordered segments for examination, wherein at least one of the segments in the range of re-ordered segments includes a packet boundary between portions of different data packets included in the at least one segment;

examine descriptors associated with a set of re-ordered segments in the range of re-ordered segments to detect if the set of re-ordered segments is ready for packet retrieval of at least a first packet based on the packet boundaries contained within the descriptors; and

process the set of re-ordered segments to obtain at the least first packet when it is detected that the set of re-ordered segments is ready for packet retrieval.

5. A system comprising:

at least one cable modem configured to:

generate a plurality of segments from a service flow, wherein the service flow comprises a plurality of discrete data packets and wherein one or more of the plurality of segments includes at least a portion of two or more different data packets separated by a packet boundary;

transmit the plurality of segments via a plurality of radio frequency (RF) channels;

a cable modem termination sub-system configured to:

receive the plurality of segments via the plurality of radio frequency (RF) channels;

map each of the plurality of segments to a unique flow identifier (ID) based on an RF channel ID and a service ID of the service flow;

generate a descriptor for each of the plurality of segments, wherein each descriptor identifies a storage location of a segment associated with the descriptor and identifies any packet boundaries between portions of different data packets included in the segment;

store the descriptor in a buffer corresponding to the unique flow identifier at a location in the buffer that corresponds to a sequence number associated with each of the plurality of segments that indicates an original order of segments of the service flow;

re-order the plurality segments based on the locations in the buffer of the stored descriptors and the storage locations contained within the descriptors to generate re-ordered segments, wherein the re-ordered segments are in the original order;

initialize first and second timeout trackers each comprising a descriptor pointer identifying a descriptor associated with the service flow and a timestamp;

determine, based on a timeout process using the first and second timeout trackers together, a range of re-ordered segments for examination, wherein at least one of the segments in the range of re-ordered segments includes a packet boundary between portions of different data packets included in the at least one segment;

examine descriptors associated with a set of re-ordered segments in the range of re-ordered segments to detect if the set of re-ordered segments is ready for packet retrieval of at least a first packet based on the packet boundaries contained within the descriptors; and

process the set of re-ordered segments to obtain the at least first packet when it is detected that the set of re-ordered segments is ready for packet retrieval.

6. The method of claim 1 , wherein receiving comprises receiving the plurality of segments that were segmented from the service flow with a variable byte length.

7. The method of claim 1 , wherein storing comprises storing the descriptor in the buffer in a descriptor table configured as a circular buffer and further comprising flushing out a portion of the circular buffer corresponding to the processed set of re-ordered segments, wherein the portion becomes available to store descriptors for newly received segments and wherein processing comprises processing sets of segments according to a first-in-first-out (FIFO) scheme.

8. The method of claim 7 , further comprising:

storing each of the plurality of segments in an arbitrary free buffer of a buffer pool; and

storing the location in the buffer pool of each of the plurality of segments in the descriptor table as part of a corresponding descriptor.

9. The method of claim 8 , further comprising:

determining if the processed set of re-ordered segments results in a remainder of a partial packet associated with a second packet; and

preserving the segments associated with the remainder of the partial packet in the buffer pool for processing with a next set of segments.

10. The method of claim 1 , wherein determining the range of re-ordered segments based on the timeout process comprises:

initializing the first timeout tracker that includes a first pointer to a beginning descriptor associated with the range of re-ordered segments;

initializing the second timeout tracker that includes a second pointer to an ending descriptor associated with the range of re-ordered segments;

initializing a first timer to a current time; determining if all of the segments associated with the range of segments have been received before the first timer reaches a predetermined time, wherein the range of segments begins at the first pointer and ends at the second pointer; and

in response to determining that all of the segments have been received, beginning the processing of the set of re-ordered segments.

11. The method of claim 10 , further comprising:

receiving a segment associated with the service flow with a sequence number that is greater than a sequence number associated with a segment corresponding to the second pointer;

initializing a third timeout tracker that includes a third pointer to a descriptor that is one greater than a descriptor for the segment;

initializing a second timer to a current time;

determining if all of the segments associated with a range of re-ordered segments between the second pointer and the third pointer have been received before the second timer reaches a predetermined time; and

in response to determining that all of the segments between the second pointer and the third pointer have been received, processing the re-ordered segments between the second pointer and the third pointer.

12. The apparatus of claim 4 , wherein the demodulator is configured to obtain the plurality of segments that were segmented from the service flow with a variable byte length.

13. The apparatus of claim 4 , wherein the processor is configured to store the descriptor in the buffer in a descriptor table configured as a circular buffer and further configured to flush out a portion of the circular buffer corresponding to the processed set of re-ordered segments, wherein the portion becomes available to store descriptors for newly received segments and the processor is configured to process sets of segments according to a first-in-first-out (FIFO) scheme.

14. The apparatus of claim 13 , wherein the processor is further configured to:

store each of the plurality of segments in an arbitrary free buffer of a buffer pool; and

store the location in the buffer pool of each of the plurality of segments in the descriptor table along as part of a corresponding descriptor.

15. The apparatus of claim 14 , wherein the processor is further configured to:

determine if the processed set of re-ordered segments results in a remainder of a partial packet associated with a second packet; and

preserve the segments associated with the remainder of the partial packet in the buffer pool for processing with a next set of segments.

16. The apparatus of claim 4 , wherein the processor is further configured to:

initialize the first timeout tracker that includes a first pointer to a beginning descriptor associated with the range of re-ordered segments;

initialize the second timeout tracker that includes a second pointer to an ending descriptor associated with the range of re-ordered segments;

initialize a first timer to a current time;

determine if all of the segments associated with the range of segments have been received before the first timer reaches a predetermined time, wherein the range of segments begins at the first pointer and ends at the second pointer; and

begin the processing of the set of re-ordered segments in response to determining that all of the segments have been received.

17. The apparatus of claim 16 , wherein the processor is further configured to:

receive a segment associated with the service flow with a sequence number that is greater than a sequence number associated with a segment corresponding to the second pointer;

initialize a third timeout tracker that includes a third pointer to a descriptor that is one greater than a descriptor for the segment;

initialize a second timer to a current time;

determine if all of the segments associated with a range of re-ordered segments between the second pointer and the third pointer have been received before the second timer reaches a predetermined time; and

process the re-ordered segments between the second pointer and the third pointer in response to determining that all of the segments between the second pointer and the third pointer have been received.

18. The apparatus of claim 4 , wherein the processor is further configured to:

store a current state pertaining to the re-ordering of segments as a session entry in a session table; and

manage resources for segment reordering based on the session entry.

19. The system of claim 5 , wherein the cable modem termination sub-system is configured to store the descriptor in the buffer in a descriptor table configured as a circular buffer and is further configured to flush out a portion of the circular buffer corresponding to the processed set of re-ordered segments, wherein the portion becomes available to store descriptors for newly received segments and the cable modem termination sub-system is configured to process sets of segments according to a first-in-first-out (FIFO) scheme.

20. The system of claim 5 , wherein the cable modem termination sub-system is further configured to:

initialize the first timeout tracker that includes a first pointer to a beginning descriptor associated with the range of re-ordered segments;

initialize the second timeout tracker that includes a second pointer to an ending descriptor associated with the range of re-ordered segments;

initialize a first timer to a current time; determine if all of the segments associated with the range of segments for the set of re-ordered segments have been received before the first timer reaches a predetermined time, wherein the range of segments begins at the first pointer and ends at the second pointer; and

begin the processing of the set of re-ordered segments in response to determining that all of the segments have been received.

Assignments (1)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Aug 25, 2008
From: DAN, YIE-FONG; AU, EDMUND; NG, RAYMOND; CUI, YANYAN
To: CISCO TECHNOLOGY, INC.
Reel/Frame 021435/0569 →
Continuity (1)
Related Publication 20100046519A1 · Feb 25, 2010