System and method for a software-based TCP/IP offload engine for implementing efficient digital media streaming over internet protocol networks
First Claim
1. A method of sending media data through a network from a first computing device to a second computing device, the computing devices adhering to a packet-based network protocol, the method comprising:
- establishing a connection between the first computing device and the second computing device for a session according to the network protocol;
receiving an acknowledgement packet from the second computing device;
passing the received acknowledgement packet to a receive hook;
defining, via a central processing unit of the first computing device, based on the received acknowledgement packet, a packet header template for packets sent during the session, the template having a plurality of static fields filled with static values valid for packets sent during the session and variable fields that can acquire packet-dependent values for different packets sent during a session;
storing the packet header template in a memory location of a memory device of the first computing device;
creating, in a kernel space of the first computing device, based on a signal from the receive hook, a packet header based on the stored header template by updating, via the central processing unit of the first computing device, at least one packet-dependent value of a variable field of the template and combining the variable field values with the static values for the static fields from the stored header template;
receiving payload data in a user space buffer of the first computing device via a direct memory access (DMA) engine;
pre-pending the packet header to payload data to form a packet;
transmitting, via an Ethernet DMA without passing through a network protocol stack, the packet that includes the packet header and the payload from the user space buffer of the first computing device to a network interface of the first computing device; and
sending the packet that includes a copy of the updated packet header from the network interface to the second computing device.
6 Assignments
0 Petitions
Accused Products
Abstract
A method of sending data through a network from a first computing device to a second computing device is described, where the computing devices adhere to a packet-based network protocol. A connection between the first computing device and the second computing device is established for a session according to the network protocol. A packet header template is defined having a plurality of static fields filled with static values valid for all packets sent during the session and variable fields that can acquire packet-dependent values for different packets sent during a session. A packet header is created based on the header template by defining, in a central processing unit, at least one value of a variable field and by reusing the static values for the static fields. The packet header is pre-pended to payload data to form a packet, and the packet is sent to the second computing device.
-
Citations
20 Claims
-
1. A method of sending media data through a network from a first computing device to a second computing device, the computing devices adhering to a packet-based network protocol, the method comprising:
-
establishing a connection between the first computing device and the second computing device for a session according to the network protocol; receiving an acknowledgement packet from the second computing device; passing the received acknowledgement packet to a receive hook; defining, via a central processing unit of the first computing device, based on the received acknowledgement packet, a packet header template for packets sent during the session, the template having a plurality of static fields filled with static values valid for packets sent during the session and variable fields that can acquire packet-dependent values for different packets sent during a session; storing the packet header template in a memory location of a memory device of the first computing device; creating, in a kernel space of the first computing device, based on a signal from the receive hook, a packet header based on the stored header template by updating, via the central processing unit of the first computing device, at least one packet-dependent value of a variable field of the template and combining the variable field values with the static values for the static fields from the stored header template; receiving payload data in a user space buffer of the first computing device via a direct memory access (DMA) engine; pre-pending the packet header to payload data to form a packet; transmitting, via an Ethernet DMA without passing through a network protocol stack, the packet that includes the packet header and the payload from the user space buffer of the first computing device to a network interface of the first computing device; and sending the packet that includes a copy of the updated packet header from the network interface to the second computing device. - View Dependent Claims (2, 3, 4, 5, 6)
-
-
7. A method of sending a plurality of data packets through a network from a first computing device to a second computing device, the computing devices adhering to a TCP/IP protocol, the method comprising:
-
establishing a connection with the second computing device for a session according to the network protocol; receiving an acknowledgement packet from the second computing device; passing the received acknowledgement packet to a receive hook; defining, via a central processing unit of the first computing device, based on the received acknowledgement packet, a packet header template for packets sent during the session, the template having static fields filled with static values valid for packets sent during the session and variable fields that can acquire packet-dependent values for different packets of the plurality of data packets sent during a session, wherein the variable fields include a sequence number field and an acknowledgement number field; storing the packet header template in a memory location of a memory device of the first computing device; assigning sequence number values with the central processing unit to the sequence number fields of the header template for each of the plurality of packets; assigning acknowledgement number values with the central processing unit to the acknowledgement number fields of the header template for each of the plurality of packets; creating, in a kernel space of the first computing device, based on a signal from the receive hook, updated packet header templates based on the stored header template by updating the sequence number values and the acknowledgement number values of the stored packet header template; receiving payload data in a user space buffer of the first computing device via a direct memory access (DMA) engine; pre-pending updated packet header templates to payload data to form the plurality of packets; transmitting, via an Ethernet DMA without passing through a network protocol stack, packets that include the packet header templates and the payload data from the user space buffer of the first computing device to a network interface of the first computing device; and sending the data packets that include a copy of a pre-pended packet header from the network interface to the second computing device. - View Dependent Claims (8, 9, 10, 11, 12, 13, 17)
-
-
14. A computing-device for sending a plurality of media data packets through a network from a settop box gateway server to a settop box client located within the same building as the settop box gateway, the settop box gateway server and the settop box client adhering to a TCP/IP protocol,
wherein the computing-device comprises: -
a central processing unit; a network interface device; and a memory for storing computer-executable instructions for; causing the network interface device to establish a connection with the settop box client for a session according to the protocol and to receive an acknowledgement packet from the second computing device; causing the central processing unit to pass the received acknowledgement packet to a receive hook and to define, based on the received acknowledgement packet, a packet header template for packets sent from the gateway server to the client during the session, and store the header template in memory location of a memory device of the computing-device, the packet header template having static fields filled with static values valid for packets sent during the session and variable fields that can acquire packet-dependent values for different packets of the plurality of data packets sent during the session, wherein the variable fields include a sequence number field and an acknowledgement number; causing the central processing unit to assign sequence number values to the sequence number fields of the header template for each of the plurality of packets; causing the central processing unit to assign acknowledgement number values to the acknowledgement number fields of the header template for each of the plurality of packets; causing the central processing unit to create, in a kernel space of the first computing device, based on a signal from the receive hook, updated packet header templates based on the stored header template by updating the sequence number values and the acknowledgement number values of the stored packet header template; causing the central processing unit to receive payload data in a user space buffer of the first computing device via a direct memory access (DMA) engine; causing the central processing unit to pre-pend packet updated header templates to payload data to form the plurality of packets; causing the central processing unit to transmit, via an Ethernet DMA without passing through a network protocol stack, packets that include the packet header templates and the payload data from the user space buffer of the first computing device to a network interface of the first computing device; and causing the network interface device to send data packets that include a copy of a pre-pended packet header to the second computing device. - View Dependent Claims (15, 16, 18, 19, 20)
-
Specification