Hardware-based packet editor

Information

  • Patent Grant
  • 9742879
  • Patent Number
    9,742,879
  • Date Filed
    Thursday, August 13, 2015
    9 years ago
  • Date Issued
    Tuesday, August 22, 2017
    7 years ago
Abstract
Hardware-based packet editor receives a packet editing script which includes script entries indicating modifications to a data packet and a data block with data for the modified data packet. For a script entry in the packet editing script, the packet editor copies data in the data block at a block location and with a block length identified in the script entry into a packet buffer. The packet editor repeats the copying for the remaining script entries for the modified data packet. The packet editor then generates the modified data packet with the data in the packet buffer. The packet editing script is generated such that a script entry is created for data to be included in the modified data packet and data to be inserted into the modified data packet. Creation of a script entry is omitted for data to be removed.
Description
BACKGROUND OF THE INVENTION

Field


This invention relates generally to data communications, and more specifically, to a service gateway.


Background


Service gateways such as firewall, server load balancers have been deployed by service providers and enterprises. In the past, service gateways were used for special purposes such as security. They are, however, used in expanded ways today. Many service providers deploy service gateways to perform various service gateway applications to examine and analyze data packets of a communication session between a host device and a server computer. Many gateway applications modify the packets to assist the analysis of the data packets and the communication sessions. Packet modification is a computation intensive and memory access intensive task. The modification task is usually performed by a processor module of a service gateway. Typically the processor or processor module analyzes a data packet, determines the necessary modification data blocks, creates a packet memory buffer, copies some data from the data packet into the data packet memory buffer and copies the modification data blocks into the packet memory buffer. When the data copying is completed, the processor has generated a new data packet from the original data packet. The service gateway then sends the generated data packet onto the network.


The data packet modification process is costly to the processor module, consuming CPU cycles and memory access bandwidth. If the data packet modification process can be offloaded and handled by a high performing hardware-based module of service gateway, the processor module can allocate its resources to handle additional data packets or additional communication sessions.


Therefore, there is a need to introduce a hardware-based high performing packet editing module to handle the data packet modification.


SUMMARY

This summary is provided to introduce a selection of concepts in a simplified form that are further described in the Detailed Description below. This summary is not intended to identify key features or essential features of the claimed subject matter, nor is it intended to be used as an aid in determining the scope of the claimed subject matter.


In some embodiments of the present invention, a method for modifying a data packet by a hardware-based packet editor, comprises: receiving, by the packet editor, a packet editing script comprising one or more script entries indicating modifications to be applied to the data packet and a data block comprising data for the modified packet; for each given script entry in the packet editing script, copying, by the packet editor, data in the data block at a location and a size identified in the given script entry into a packet buffer; and generating, by the packet editor, a modified data packet with the data in the packet buffer.


In one aspect of the present invention, the copying comprises: retrieving the given script entry of the packet editing script; determining whether the given script entry is a first script entry for the modified data packet; in response to determining that the given script entry is the first script entry for the modified data packet, reserving the packet buffer for the modified data packet; copying the data in the data block at a block location and with a block length identified in the given editing script into the packet buffer; determining whether the given script entry is a last script entry for the modified data packet; in response to determining that the given script entry is not the last script entry for the modified data packet, performing the copying the data in the data block at a block location and with a block length identified in the given editing script into the packet buffer and the determining whether the given script entry is a last script entry for the next given script entry of the packet editing script.


In one aspect of the present invention, the determining whether the given script entry is a first script entry for the modified data packet comprises: determining whether a start of packet (SOP) indicator in the given script entry indicates that the given script entry is the first script entry for the modified data packet.


In one aspect of the present invention, the determining whether the given script entry is a last script entry for the modified data packet comprises: determining whether an end of packet (EOP) indicator in the given script entry indicates that the given script entry is the last script entry for the modified data packet.


In one aspect of the present invention, the reserving the packet buffer for the modified data packet and the copying the data in the data block at a block location and with a block length identified in the given editing script into the packet buffer comprises: setting a packet buffer marker at a beginning of the packet buffer; appending a copy of the data in the data block at the block location and with the block length identified in the given editing script to the packet buffer at the packet buffer marker; and modifying the packet buffer marker by the block length identified in the given editing script.


In one aspect of the present invention, the generating the modified data packet with the data in the packet buffer comprises: in response to determining that the given script entry is the last script entry for the modified data packet, generating the modified data packet with the data in the packet buffer.


In one aspect of the present invention, the generating the modified data packet with the data in the packet buffer further comprises: determining whether the given script entry is the last script entry in the packet editing script; and in response to determining that the given script entry is not the last script entry in the packet editing script, repeating the retrieving the given script entry of the packet editing script, the determining whether the given script entry is a first script entry for the modified data packet, the reserving the packet buffer for the modified data packet, the copying the data in the data block at a block location and with a block length identified in the given editing script into the packet buffer, the determining whether the given script entry is a last script entry for the modified data packet, the performing the copying of the data into the packet buffer, and the generating the modified data packet with the data in the packet buffer for a next given script entry in the packet editing script.


In one aspect of the present invention, the determining whether the given script entry is the last script entry in the packet editing script comprises: determining whether an end of table (EOT) indicator in the given script entry indicates that the given script entry is the last script entry in the packet editing script.


According to another embodiment of the present invention, a method for processing a data packet by a service gateway comprising a processor, comprises: receiving, by the processor, a data packet from a host to be sent to a server, or from the server to be sent to the host; determining, by the processor, that the data packet requires modification prior to sending to the server or the host; generating, by the processor, a packet editing script, the script comprising one or more script entries indicating modifications to be applied to the data packet and a data block comprising data for the modified packet, wherein the generating comprises: for each and any given portion of the data packet determined to be included in the modified packet, generating a first script entry identifying a first location and a first length in the data block corresponding to the given portion determined to be included; for each and any given portion of the data packet determined to be removed from the data packet, omitting generation of a script entry corresponding to the given portion determined to be removed; and for each and any new data determined to be added to the modified packet, generating the new data to be comprised in the data block of the packet editing script and generating a second script entry identifying a second location and a second length in the data block corresponding to the new data; and sending, by the processor, the packet editing script to a hardware-based packet editor, wherein the packet editor generates the modified packet according to the script entries in the packet editing script.


System and computer program products corresponding to the above-summarized methods are also described and claimed herein.





BRIEF DESCRIPTION OF THE DRAWINGS

Embodiments are illustrated by way of example and not by limitation in the figures of the accompanying drawings, in which like references indicate similar elements



FIG. 1 illustrates an embodiment of a communication session processing method using a service gateway having a hardware-based packet editor according to the present invention.



FIG. 2 illustrates an embodiment of a packet processing flow according to the present invention.



FIG. 3 illustrates an embodiment of a packet editing script according to the present invention.



FIGS. 4 and 4A illustrate an embodiment of a packet editor processing flow according to the present invention.



FIG. 5 illustrates an example of a removal of a HTTP header attribute according to an embodiment of the present invention.



FIG. 6 illustrates an example of an insertion of a HTTP header and a fragmentation of a packet into two packets according to an embodiment of the present invention.



FIG. 7 illustrates additional embodiments of a service gateway application according to the present invention.





DETAILED DESCRIPTION

The following detailed description includes references to the accompanying drawings, which form a part of the detailed description. The drawings show illustrations in accordance with example embodiments. The following description is presented to enable one of ordinary skill in the art to make and use the present invention and is provided in the context of a patent application and its requirements. Various modifications to the embodiment will be readily apparent to those skilled in the art and the generic principles herein may be applied to other embodiments. Thus, the present invention is not intended to be limited to the embodiment shown but is to be accorded the widest scope consistent with the principles and features described herein.


The present invention can take the form of an entirely hardware embodiment, an entirely software embodiment or an embodiment containing both hardware and software elements. In a preferred embodiment, the present invention is implemented in software, which includes but is not limited to firmware, resident software, microcode, etc.


Furthermore, the present invention can take the form of a computer program product accessible from a computer-usable or computer-readable medium providing program code for use by or in connection with a computer or any instruction execution system. For the purposes of this description, a computer-usable or computer readable medium can be any apparatus that can contain, store, communicate, propagate, or transport eh program for use by or in connection with the instruction execution system, apparatus, or device.


The medium can be an electronic, magnetic, optical, electromagnetic, infrared, or semiconductor system (or apparatus or device) or a propagation medium. Examples of a computer-readable medium include a semiconductor or solid state memory, magnetic tape, a removable computer diskette, a random access memory (RAM), a read-only memory (ROM), a rigid magnetic disk and an optical disk. Current examples of optical disks include compact disk-read only memory (CD-ROM), compact disk-read/write (CD-R/W) and DVD.


A data processing system suitable for storing and/or executing program code will include at least one processor coupled directly or indirectly to memory elements through a system bus. The memory elements can include local memory employed during actual execution of the program code, bulk storage, and cache memories which provide temporary storage of at least some program code in order to reduce the number of times code must be retrieved from bulk storage during execution.


Input/output or I/O devices (including but not limited to keyboards, displays, point devices, etc.) can be coupled to the system either directly or through intervening I/O controllers.


Network adapters may also be coupled to the system to enable the data processing system to become coupled to other data processing systems or remote printers or storage devices through intervening private or public networks. Modems, cable modem and Ethernet cards are just a few of the currently available types of network adapters.


The flowchart and block diagrams in the Figures illustrate the architecture, functionality, and operation of possible implementations of systems, methods and computer program products according to various embodiments of the present invention. In this regard, each block in the flowchart or block diagrams may represent a module, segment, or portion of code, which comprises one or more executable instructions for implementing the specified local function(s). It should also be noted that, in some alternative implementations, the functions noted in the block may occur out of the order noted in the figures. For example, two blocks shown in succession may, in fact, be executed substantially concurrently, or the blocks may sometimes be executed in the reverse order, depending upon the functionality involved. It will also be noted that each block of the block diagrams and/or flowchart illustration, and combinations of blocks in the block diagrams and/or flowchart illustration, can be implemented by special purpose hardware-based systems that perform the specified functions or acts, or combinations of special purpose hardware and computer instructions.


The terminology used herein is for the purpose of describing particular embodiments only and is not intended to be limiting of the invention. As used herein, the singular forms “a”, “an” and “the” are intended to include the plural forms as well, unless the context clearly indicates otherwise. It will be further understood that the terms “comprises” and/or “comprising,” when used in this specification, specify the presence of stated features, integers, steps, operations, elements, and/or components, but do not preclude the presence or addition of one or more other features, integers, steps, operations, elements, components, and/or groups thereof.


In an embodiment illustrated in FIG. 1, a service gateway 300 processes a communication session 400 between a host 100 and a server 200. Communication session 400 is delivered over a data network 150.


In one embodiment, data network 150 includes an Internet Protocol (IP) network, a corporate data network, a regional corporate data network, an Internet service provider network, a residential data network, a wired network such as Ethernet, a wireless network such as a WiFi network, a Bluetooth network, or a cellular network. In one embodiment, data network 150 resides in a data center, or connects to a network or application network cloud.


Host 100 is a computing device with network access capabilities. In one embodiment, host 100 is a workstation, a desktop personal computer or a laptop personal computer, a Personal Data Assistant (PDA), a tablet PC, a smartphone, or a cellular phone, a set-top box, an Internet media viewer, an Internet media player, a smart sensor, a smart medical device, a net-top box, a networked television set, a networked DVR, a networked Blu-ray player, a media center, or a network connected device.


Server 200 is a computing device typically coupled to a processor and a computer readable medium which stores computer readable program code. Server 200, with the processor and the computer readable program code, implements functionality of a Web server, a file server, a video server, a database server, an application server, a voice system, a conferencing server, a media gateway, a media center, an app server or a network server providing a network service or an application service to host 100 using the communication session 400.


Service gateway 300 is operationally coupled to a processor module 310, a packet editor 350, a network interface module 330, and a computer readable medium 340. The computer readable medium 340 stores computer readable program code, which when executed by the processor module 310, implements the various embodiments of the present invention as described herein. In some embodiments, service gateway 300 is implemented as a server load balancer, an application delivery controller, a service delivery platform, a traffic manager, a security gateway, a component of a firewall system, a component of a virtual private network (VPN), a load balancer for video servers, a gateway to distribute load to one or more servers, a Web or HyperText Transport Protocol (HTTP) server handling the HTTP layer of the HTTP service session, or a gateway performing network address translation (NAT).


Processor module 310 typically includes one or more general processors or micro-processors. In one embodiment, processor module 310 includes a multi-core microprocessor. In one embodiment, processor module 310 includes a memory unit storing variables used during execution of the computer readable program code stored in computer readable medium 340.


Network interface module 330 connects to data network 150. Network interface module 330 receives data packets of communication session 400 from host 100 and server 200, and sends data packets of communication session 400 to host 100 and server 200.


Packet editor 350 is a hardware-based packet processing accelerating module, typically comprising high performing capabilities to process data packets. In one embodiment, packet editor 350 includes a field programmable gate array (FPGA) module, an application specific integrated circuit (ASIC), a digital signal processor (DSP), or a circuitry capable of performing the high speed processing needs of packet editor 350.


In one embodiment, host 100 sends a data packet 403 of communication session 400 towards server 200. Service gateway 300 receives data packet 403 through network module 330. Processor module 310 processes data packet 403 according to the computer readable program code stored on the computer readable medium 340. Processor module 310 determines that data packet 403 is to be modified by packet editor 350. Packet editor 350 receives data packet 403 and generates data packet 408. Network module 330 transmits data packet 408 to server 200.


In one embodiment, server 200 sends a data packet 418 of communication session 400 towards host 100. Service gateway 300 receives data packet 418 through network module 330. Processor module 310 processes data packet 418 according to the computer readable program code stored on the computer readable medium 340. Processor module 310 determines that data packet 418 to be modified by packet editor 350. Packet editor 350 receives data packet 418 and generates data packet 413. Network module 330 transmits data packet 413 to host 100.


In one embodiment, data packet 403 is a HyperText Transport Protocol (HTTP) packet, and packet editor 350 removes a part of HTTP header of data packet 403 to generate data packet 408. In one embodiment, 418 is a HTTP packet and packet editor 350 inserts a HTTP header to data packet 418 in order to generate data packet 413.


In one embodiment, data packet 403 is an IP packet comprising an IP header, and packet editor 350 inserts a second IP header to data packet 403 in order to generate an IP tunnel data packet 408. In one embodiment, packet editor 350 performs IP fragmentation to generate data packet 408 and a second data packet (not shown) prior to sending data packet 408 and the second data packet to server 200. In one embodiment, data packet 403 is an IP tunnel packet and packet editor 350 removes an IP header from data packet 403 in order to generate data packet 408. In various embodiments, data packet 418 can also have the same or similar properties as data packet 408 (i.e. comprise an IP header, be an IP tunnel packet, etc.). After being processed by packet editor 350, data packet 413 can have the same or similar properties as data packet 408 (i.e. have a second IP header inserted, be fragmented, etc.).


In one embodiment, packet editor 350 processes data packet 403 to generate data packet 408 by copying one or more data blocks of data packet 403 onto data packet 408, copying additional data blocks onto data packet 408 through instruction from processor module 310, computing a checksum using one or more parts of data packet 403, and placing the checksum onto data packet 408.


The above mentioned data packet modification of data packet 408 are applicable in many implementations of service gateway 300, for example, as a HTTP proxy server, TCP proxy server, Layer 3/Layer 4 tunnel gateway, a firewall, IP tunnel gateway, IPv4/IPv6 tunneling gateway, IP-IP tunneling gateway.



FIG. 2 illustrates service gateway 300 processing a data packet 405. Service gateway 300 receives a data packet 405. Data packet 405 may be sent by host 100 or server 200. Service gateway 300 implements a service gateway application 314, which is a software residing in computer readable medium 340 executed by processor module 310. Application 314 determines, based on data packet 405, that data packet 405 requires modification. Application 314 generates a packet editing script 512. Packet editing script 512 includes one or more script entries that indicate the necessary modification(s) to be applied to data packet 405. When the application 314 determines that data is to be included in the data packet 405, the application 314 generates a script entry describing the data to be included. When the application 314 determines that data is to be removed from the data packet 405, the application 314 omits generating a script entry that would describe the data being removed. When the application 314 determines that data is to be inserted into the data packet 405, the application 314 generates a script entry describing the data to be inserted. A more detailed description of the packet editing script 512 follows later in this specification.


For example, in one embodiment, application 314 determines that a HTTP header is to be removed from data packet 405. Packet editing script 512 describes the part of HTTP header to be removed. In one embodiment, application 314 determines that a HTTP header is to be inserted into data packet 405. Packet editing script 512 describes the location where the HTTP header is to be inserted and the data for the HTTP header. In one embodiment, application 314 determines that an additional IP header is to be inserted into data packet 405. Packet editing script 512 describes the details of the additional IP header such that packet editor 350 will perform the insertion. In one embodiment, packet editing script 512 includes data packet 405. Application 314 then sends the packet editing script 512 to the packet editor 350, effectively informing the packet editor 350 that it is to modify data packet 405 using packet editing script 512.


Packet editor 350 receives packet editing script 512 and generates data packet 415 based on the packet editing script 512.


In one embodiment, packet editor 350 sends data packet 415 to network module 330 for transmission. In one embodiment, packet editor 350 informs application 314 after generation of data packet 415. Application 314 informs network module 330 to transmit data packet 415.



FIG. 3 illustrates a packet editing script 512. In one embodiment, packet editing script 512 includes a script entry table 524 and a data block 527.


Script entry table 524 includes a script entry 542. In one embodiment, script entry 542 includes a plurality of fields comprising a block location 551, a block length 552, a start-of-packet indication (SOP) 554, an end-of-packet indication (EOP) 553, and an end-of-script indication (EOT) 555 (also referred to as end-of-table). In one embodiment, SOP 554, EOP 553 and EOT 555 are 1-bit long indicators; block location 551 has a 10-bit value; block length 552 has an 11-bit value. Script entry 542 may include one or more unused multi-bit fields such that script entry 542 is a 4-byte or 32-bit long data structure.


Block location 551 and block length 552 references a block of data in data block 527. Block location 551 refers to the location of data block 527.


In one embodiment, script entry table 524 includes a second script entry 543 with the same fields. The one or more script entries, such as script entry 542 and second script entry 543, are used by packet editor 350 to generate a modified data packet.


Data block 527 contains one or more blocks of data to generate a modified data packet.



FIG. 4 illustrates packet editor 350 generating a data packet 353 based on packet editing script 512. In this embodiment, packet editor 350 includes a control memory 354, a control module 356, a packet buffer 359, and a packet buffer marker 358.



FIG. 4A illustrates, in conjunction with FIG. 4, a processing flow of packet editor 350. In step 931, in response to receiving the packet editing script 512, packet editor 350 retrieves one or more script entries from script entry table 524 and stores the script entries into control memory 354. In one embodiment packet editor 350 retrieves script entry 542 from script entry table 524 and stores script entry 542 into control memory 354. Packet editor 350 examines EOT 555 of script entry 542. If EOT 555 has a value of 0, packet editor 350 determines script entry 542 is not the last script entry of script entry table 524. Packet editor 350 retrieves a next script entry from script entry table 524. If EOT 555 has a value of 1, packet editor 350 determines script entry 542 is the last script entry of script entry table 524. Packet editor 350 completes step 931.


In step 933, control module 356 retrieves script entry 542 from control memory 354, and starts to process script entry 542.


In step 935, control module 356 examines SOP 554. If SOP 554 has a value of 1, control module 356 reserves packet buffer 359 in order to generate a data packet 353. Control module 356 sets the value of packet buffer marker 358 at 0, or at the beginning of packet buffer 359. If SOP 554 has a value of 0, control module 356 proceeds to another step.


In step 937, control module 356 copies a block of data from data block 527 to packet buffer 359, based on block location 551 and block length 552 of script entry 542. Control module 356 appends to packet buffer 359 at the packet buffer marker 358 the block of data from data block 527 starting from block location 551 with a size of block length 552. Control module 356 increases packet buffer marker 358 by the value of block length 552, such that the subsequent copy would start after the current copied data block.


In step 939, control module 356 examines EOP 553. If EOP 553 has a value of 1, control module 356 determines the completion of generating data packet 353 in packet buffer 359, with a block of data up to the packet buffer marker 358. Packet editor 350 continues with step 943. If EOP 553 has a value of 0, step 943 is skipped, and control module 356 proceeds to step 949.


In step 943, packet editor 350 further includes a checksum module 357. Checksum module 357 computes a checksum for data packet 353. In one embodiment, data packet 353 includes an IP packet. Checksum module 357 computes a checksum for the IP header and modifies data packet 353 with the computed checksum. In one embodiment, data packet 353 includes a TCP or UDP packet, checksum module 357 computes a checksum for the corresponding TCP or UDP packet, and modifies data packet 353 with the computed checksum. In one embodiment, data packet 353 includes a packet format requiring a checksum, checksum module 357 computes a checksum for the packet format and modifies data packet 353 with the computed checksum.


In step 949, control module 356 examines EOT 555. If EOT 555 has a value of 1, control module 356 determines processing of packet editing script 512 is completed. If EOT 555 has a value of 0, control module 356 fetches a second script entry from control memory 354 and repeats performing steps 933-949 for the second script entry.



FIG. 5 illustrates an example packet editing script 612 to remove a HTTP header field. In this embodiment, script entry table 624 includes script entry 642 and second script entry 643. Script entry 642 includes


Block location 651=8


Block length 652=192


SOP 654=1


EOP 653=0


EOT 655=0


Second Script entry 643 includes


Block location 661=284


Block length 662=726


SOP 664=0


EOP 663=1


EOT 665=1


Data block 627 includes a total of 1000 bytes of data, which may be a HTTP packet.


Packet editor 350 constructs a data packet 409 according to packet editing script 612, as illustrated in FIG. 4. More specifically, packet editor 350 obtains script entry 642 of script entry table 624. Script entry 642 indicates in EOT 655 (of value 0) that script entry 642 is not the last script entry in script entry table 624. SOP 654 of value 1 indicates a beginning of a data packet. Packet editor 350 prepares a packet buffer for data packet 409. Packet editor 350 examines block location 651 and block length 652. Packet editor 350 copies a total of 192 (value of block length 652) bytes of data block 627, starting at location 8 (value of block location 651).


EOP 653 of value 0 indicates generation of data packet 409 is not completed. After completion of script entry 642, packet editor 350 obtains second script entry 643 and processes accordingly. SOP 664 has a value of 0, indicating to packet editor 350 to continue with data packet 409. Packet editor 350 examines block location 661 and block length 662. Packet editor 350 copies 726 (value of block length 662) bytes of data block 627 starting at location 284 (value of block location 661) of packet editing script 612. Upon completion of copying, packet editor 350 determines from the value (1) of EOP 663 that data packet 409 generation is completed.


EOT 665 of value 1 indicates that second script entry 643 is the last entry in script entry table 624. Packet editor 350 determines the completion of processing of packet editing script 612.


In this embodiment, packet editor 350 does not copy data block from location 192 to location 284 (for a total of 92 bytes). The data block not copied represents a HTTP header field to be removed.



FIG. 6 illustrates an example of a packet editing script 712 to insert data, such as a HTTP header field, and to generate two data packets. In one embodiment, generation of two packets indicates fragmenting an IP packet into two IP packets. In this example, packet editing script 712 includes script entry table 724, which includes script entries 742, 743, 744, 745, and 746.


Script entry 742 includes


Block location 821=20


Block length 822=231


SOP 824=1


EOP 823=0


EOT 825=0


Script entry 743 includes


Block location 831=1544


Block length 832=200


SOP 834=0


EOP 833=0


EOT 835=0


Script entry 744 includes


Block location 841=251


Block length 842=1073


SOP 844=0


EOP 843=1


EOT 845=0


Script entry 745 includes


Block location 851=1524


Block length 852=20


SOP 854=1


EOP 853=0


EOT 855=0


Script entry 746 includes


Block location 861=1324


Block length 862=200


SOP 864=0


EOP 863=1


EOT 865=1


Data block 727 includes an original packet 772, a second packet header 773, and a to-be-inserted data block 774. In this example, original packet 772 has a size of 1504 bytes; second packet header 773 is of size 20 bytes and to-be-inserted data block 774 is of size 200 bytes.


The block location of original packet 772 is 20 in data block 727. The block location of the second packet header 773 is 1524. The block location of the to-be-inserted data block 774 is 1324.


According to the process illustrated in FIGS. 4 and 4A, packet editor 350 processes in the order of script entries 742, 743, 744, 745 and 746, and generates data packet 411 and data packet 412. In processing script entry 742 with SOP 824 being 1, packet editor 350 prepares data buffer for data packet 411. Packet editor 350 copies a block of data from data block 727 of size 231 bytes (value of block length 822) from location 20 (value of block location 821). The block of data copied is the first 231 bytes of original packet 772. Next, packet editor 350, according to script entry 743, copies a block of data from data block 727 of size 200 (value of block length 832) from location 1544 (value of block location 831) onto data packet 411. The block of data copied includes the entirety of the to-be-inserted data block 774.


Then packet editor 350, according to script entry 744, copies a block of data from data block 727 of size 1073 (value of block length 842) from location 251 (value of block location 841) onto data packet 411. The block of data copied is a data block in original packet 772 immediately following the block of data copied in script entry 742. EOP 843 being 1 indicates completion of data packet 411 generation.


Then packet editor 350 proceeds to process script entry 745. SOP 854 being 1 instructs packet editor 350 to prepare to generate data packet 412. Packet editor 350 copies a block of data from data block 727 of size 20 bytes (value of block length 852) from location 1524 (value of block location 851) onto data packet 412. The block of data copied includes the entirety of the second packet header 773.


Packet editor 350 proceeds to process script entry 746. Packet editor 350 copies a block of data from data block 727 of size 200 bytes (value of block length 862) from location 1324 (value of block location 861) onto data packet 412. The block of data copied is the remaining data of the original packet 772, after the block of data copied in script entry 744.


EOP 863 of script entry 746 has a value 1. Packet editor 350 determines data packet 412 generation is completed. EOT 865 of script entry 746 has a value 1. Packet editor 350 determines processing of packet editing script 712 is completed. As a result of completing packet editing script 712, packet editor 350 generates data packet 411 and data packet 412.


The above figures illustrate embodiments of packet editing scripts to remove or not to copy one or more blocks of data from data block(s) and to copy one or more blocks of data from data block(s). By using the copying instructions, those skilled in the art may formulate a packet editing script for various data packet manipulation.


In one embodiment, service gateway application 314, illustrated in FIG. 7, implements a network address translation of an input data packet 405. Service gateway application 314 prepares a data block 532 as a replacement IP/TCP/UDP header for data packet 405. Service gateway application 314 creates a packet editing script 512 wherein the data block 527 includes data packet 405 and data block 532, and script entry table 524 to include one or more script entries to instruct packet editor 350 not to copy the IP/TCP/UDP header of data packet 405, copy data block 532, and copy the remaining portion of data packet 405.


In one embodiment of the present invention, service gateway application 314 implements an IP tunneling gateway (such as IP-IP tunnel, IPv4/IPv6 tunnel). Service gateway application 314 receives data packet 405 and determines that an IP tunnel header is to be inserted. Service gateway application 314 prepares data block 532 as the IP tunnel header. Service gateway application 314 creates a packet editing script 512, where the data block 527 includes data packet 405 and data block 532, and script entry table 524 to include one or more script entries to instruct packet editor 350 to copy data block 532, and to copy data packet 405.


In one embodiment, service gateway application 314 determines an IP tunnel header is to be removed. Service gateway application 314 determines the size of the IP tunnel header. Service gateway application 314 creates a packet editing script 512, where the data block 527 includes data packet 405, and a script entry 542 such that the block location of script entry 542 skips the tunnel header. Packet editing script 512 instructs packet editor 350 to copy data packet 405 while skipping, or not copying, the IP tunnel header.


In one embodiment, service gateway application 314 implements a proxy service such as TCP proxy or HTTP proxy. Service gateway application 314 receives an input data packet 405 and determines that a first plurality of data blocks in data packet 403 is to be replaced by a second plurality of data blocks. Service gateway application 314 prepares the second plurality of data blocks, and creates a packet editing script 512, where the data block 527 of packet editing script 512 includes data packet 405 and the second plurality of data blocks. The packet editing script 512 also prepares script entry table 524 to include a plurality of script entries instructing packet editor 350 to copy certain data blocks from data packet 405, not to copy the first plurality of data blocks from data packet 405, and to copy the second plurality of data blocks, in essence replacing the first plurality of data blocks with the second plurality of data blocks.


Although the present invention has been described in accordance with the embodiments shown, one of ordinary skill in the art will readily recognize that there could be variations to the embodiments and those variations would be within the spirit and scope of the present invention. Accordingly, many modifications may be made by one of ordinary skill in the art without departing from the spirit and scope of the appended claims.

Claims
  • 1. A method for modifying a data packet by a hardware-based packet editor, comprising: receiving, by the packet editor, a packet editing script comprising one or more script entries indicating modifications to be applied to the data packet and a data block comprising data for the modified data packet;determining whether a script entry of the one or more script entries is a first script entry for the modified data packet;in response to determining that the given script entry is a first script entry for the modified data packet, reserving a packet buffer for the modified data packet;for each given script entry in the packet editing script, copying, by the packet editor, data in the data block at a location and a size identified in the given script entry into the packet buffer; andgenerating, by the packet editor, a modified data packet with the data in the packet buffer.
  • 2. The method of claim 1, wherein the copying further comprises: determining whether the given script entry is a last script entry for the modified data packet; andin response to determining that the given script entry is not the last script entry for the modified data packet, performing the copying the data in the data block at a block location and with a block length identified in the given script entry into the packet buffer, and the determining whether the given script entry is a last script entry for the modified data packet for the next given script entry of the packet editing script.
  • 3. The method of claim 1, wherein the determining whether the given script entry is a first script entry for the modified data packet comprises: determining whether a start of packet (SOP) indicator in the given script entry indicates that the given script entry is the first script entry for the modified data packet.
  • 4. The method of claim 2, wherein the determining whether the given script entry is a last script entry for the modified data packet comprises: determining whether an end of packet (EOP) indicator in the given script entry indicates that the given script entry is the last script entry for the modified data packet.
  • 5. The method of claim 1, wherein the reserving the packet buffer for the modified data packet and the copying the data in the data block at a block location and with a block length identified in the given script entry into the packet buffer comprises: setting a packet buffer marker at a beginning of the packet buffer;appending a copy of the data in the data block at the block location and with the block length identified in the given editing script to the packet buffer at the packet buffer marker; andmodifying the packet buffer marker by the block length identified in the given editing script.
  • 6. The method of claim 1, wherein the generating the modified data packet with the data in the packet buffer comprises: in response to determining that the given script entry is a last script entry for the modified data packet, generating the modified data packet with the data in the packet buffer.
  • 7. The method of claim 6, wherein the generating the modified data packet with the data in the packet buffer further comprises: determining whether the given script entry is a last script entry in the packet editing script; andin response to determining that the given script entry is not the last script entry in the packet editing script, repeating the retrieving the given script entry of the packet editing script, the determining whether the given script entry is a first script entry for the modified data packet, the reserving whether the given script entry is a first script entry for the modified data packet, the copying the data in the data block at a block location and with a block length identified in the given script entry into the packet buffer, the determining whether the given script entry is a last script entry for the modified data packet, the performing the copying and determining whether the given script entry is a last script entry for the modified data packet, and the generating the modified data packet with the data in the packet buffer for a next given script entry in the packet editing script.
  • 8. The method of claim 7, wherein the determining whether the given script entry is the last script entry in the packet editing script comprises: determining whether an end of table (EOT) indicator in the given script entry indicates that the given script entry is the last script entry in the packet editing script.
  • 9. A system, comprising: a packet buffer; anda hardware-based packet editor comprising a control memory and a control module,wherein the packet editor: receives a packet editing script comprising one or more script entries indicating modifications to be applied to a data packet and a data block comprising data for the modified data packet; andstores the packet editing script in the control memory,wherein the control module: retrieves each given script entry stored in the control memory;copies data in the data block at a location and a size identified in the given script entry into the packet buffer by determining whether the given script entry is a first script entry for the modified data packet;in response to determining that the given script entry is the first script entry for the modified data packet, reserves the packet buffer for the modified data packet;copies the data in the data block at a block location and with a block length identified in the given script entry into the packet buffer; andgenerates the modified data packet with the data in the packet buffer.
  • 10. The system of claim 9, wherein in copying the data in the data block at the location and the size identified in the given script entry into the packet buffer, the control module further: determines whether the given script entry is a last script entry for the modified data packet; andin response to determining that the given script entry is not the last script entry for the modified data packet, performs, for the next given script entry of the packet editing script, the copying of the data in the data block at the block location and with the block length identified in the given script entry into the packet buffer and the determining whether the given script entry is a last script entry for the modified data packet for the next given script entry of the packet editing script.
  • 11. The system of claim 9, wherein in determining whether the given script entry is the first script entry for the modified data packet, the control module: determines whether a start of packet (SOP) indicator in the given script entry indicates that the given script entry is the first script entry for the modified data packet.
  • 12. The system of claim 10, wherein in determining whether the given script entry is the last script entry for the modified data packet, the control module: determines whether an end of packet (EOP) indicator in the given script entry indicates that the given script entry is the last script entry for the modified data packet.
  • 13. The system of claim 10, wherein in reserving the packet buffer for the modified data packet and in copying the data in the data block at the block location and with the block length identified in the given script entry into the packet buffer, the control module: sets a packet buffer marker at a beginning of the packet buffer;appends a copy of the data in the data block at the block location and with the block length identified in the given editing script to the packet buffer at the packet buffer marker; andmodifies the packet buffer marker by the block length identified in the given editing script.
  • 14. The system of claim 10, wherein in generating the modified data packet with the data in the packet buffer, the control module: in response to determining that the given script entry is the last script entry for the modified data packet, generates the modified data packet with the data in the packet buffer.
  • 15. The system of claim 14, wherein in generating the modified data packet with the data in the packet buffer, the control module further: determines whether the given script entry is the last script entry in the packet editing script; andin response to determining that the given script entry is not the last script entry in the packet editing script, repeating the retrieving, the determining whether the given script entry is a first script entry for the modified data packet, the reserving, the copying the data in the data block at a block location and with a block length identified in the given script entry into the packet buffer, the determining whether the given script entry is a last script entry for the modified data packet, the performing, and the generating the modified data packet with the data in the packet buffer for a next given script entry in the packet editing script.
  • 16. The system of claim 15, wherein the determining whether the given script entry is the last script entry in the packet editing script, the control module: determines whether an end of table (EOT) indicator in the given script entry indicates that the given script entry is the last script entry in the packet editing script.
  • 17. A non-transitory computer-readable storage medium having embodied thereon a program, the program being executable by a processor to perform a method, the method comprising: a computer readable memory device having computer readable program code embodied therewith, the computer readable program code configured to:receiving a packet editing script comprising one or more script entries indicating modifications to be applied to a data packet and a data block comprising data for the modified data packet;determining whether a script entry of the one or more script entries is a first script entry for the modified data packet;in response to determining that the given script entry is a first script entry for the modified data packet, reserving a packet buffer for the modified data packet;for each given script entry in the packet editing script, copying data in the data block at a location and a size identified in the given script entry into a packet buffer; andgenerating a modified data packet with the data in the packet buffer.
  • 18. The storage medium of claim 17, wherein the copying data in the data block at a location and a size identified in the given script entry into a packet buffer further comprises: retrieving the given script entry of the packet editing script;determining whether the given script entry is a last script entry for the modified data packet; andin response to determining that the given script entry is not the last script entry for the modified data packet, performing the copy of the data in the data block at a block location and with a block length identified in the given editing script into the packet buffer and the determining whether the given script entry is a last script entry for the modified data packet for the next given script entry of the packet editing script.
  • 19. The storage medium of claim 17, wherein the determining whether the given script entry is a first script entry for the modified data packet comprises: determining whether a start of packet (SOP) indicator in the given script entry indicates that the given script entry is the first script entry for the modified data packet.
  • 20. The storage medium of claim 17, wherein the determining whether the given script entry is a first script entry for the modified data packet comprises: determining whether a start of packet (SOP) indicator in the given script entry indicates that the given script entry is the first script entry for the modified data packet.
  • 21. The storage medium of claim 18, wherein the reserving and the copying the data in the data block at a block location and with a block length identified in the given editing script into the packet buffer are configured to: set a packet buffer marker at a beginning of the packet buffer;append a copy of the data in the data block at the block location and with the block length identified in the given editing script to the packet buffer at the packet buffer marker; andmodify the packet buffer marker by the block length identified in the given editing script.
  • 22. The storage medium of claim 18, wherein the generating further comprises: in response to determining that the given script entry is the last script entry for the modified data packet, generating the modified data packet with the data in the packet buffer.
  • 23. The storage medium of claim 22, wherein the generating further comprises: determining whether the given script entry is the last script entry in the packet editing script; andin response to determining that the given script entry is not the last script entry in the packet editing script, repeat the retrieving, the determining whether the given script entry is a first script entry, the reserving, the copying the data in the data block at a block location and with a block length identified in the given script entry into the packet buffer, the determining whether the given script entry is a last script entry, the performing, and the generating the modified data packet with the data in the packet buffer for a next given script entry in the packet editing script.
  • 24. The storage medium of claim 23, wherein the determining whether the given script entry is the last script entry in the packet editing script further comprises: determining whether an end of table (EOT) indicator in the given script entry indicates that the given script entry is the last script entry in the packet editing script.
CROSS-REFERENCE TO RELATED APPLICATIONS

The present application is a continuation and claims the priority benefit of U.S. patent application Ser. No. 13/433,290 filed on Mar. 29, 2012 and entitled “Hardware-Based Packet Editor,” now U.S. Pat. No. 9,118,618 issued on Aug. 25, 2015. The disclosure of the above-referenced patent application is incorporated herein by reference in its entirety for all purposes.

US Referenced Citations (391)
Number Name Date Kind
4403286 Fry et al. Sep 1983 A
4495570 Kitajima et al. Jan 1985 A
4577272 Ballew et al. Mar 1986 A
4720850 Oberlander et al. Jan 1988 A
4864492 Blakely-Fogel et al. Sep 1989 A
4882699 Evensen Nov 1989 A
5031089 Liu et al. Jul 1991 A
5218676 Ben-Ayed et al. Jun 1993 A
5293488 Riley et al. Mar 1994 A
5341477 Pitkin et al. Aug 1994 A
5432908 Heddes et al. Jul 1995 A
5537542 Eilert et al. Jul 1996 A
5563878 Blakeley et al. Oct 1996 A
5603029 Aman et al. Feb 1997 A
5675739 Eilert et al. Oct 1997 A
5740371 Wallis Apr 1998 A
5751971 Dobbins et al. May 1998 A
5754752 Sheh et al. May 1998 A
5774660 Brendel et al. Jun 1998 A
5774668 Choquier et al. Jun 1998 A
5781550 Templin et al. Jul 1998 A
5796936 Watabe et al. Aug 1998 A
5812771 Fee et al. Sep 1998 A
5828847 Gehr et al. Oct 1998 A
5835724 Smith Nov 1998 A
5867636 Walker Feb 1999 A
5867661 Bittinger et al. Feb 1999 A
5875185 Wang et al. Feb 1999 A
5875296 Shi et al. Feb 1999 A
5917997 Bell et al. Jun 1999 A
5918017 Attanasio et al. Jun 1999 A
5923854 Bell et al. Jul 1999 A
5931914 Chiu Aug 1999 A
5935207 Logue et al. Aug 1999 A
5935215 Bell et al. Aug 1999 A
5941988 Bhagwat et al. Aug 1999 A
5944794 Okamoto et al. Aug 1999 A
5946686 Schmuck et al. Aug 1999 A
5951650 Bell et al. Sep 1999 A
5951694 Choquier et al. Sep 1999 A
6006264 Colby et al. Dec 1999 A
6006269 Phaal Dec 1999 A
6031978 Cotner et al. Feb 2000 A
6041357 Kunzelman et al. Mar 2000 A
6076108 Courts et al. Jun 2000 A
6088728 Bellemore et al. Jul 2000 A
6098093 Bayeh et al. Aug 2000 A
6104717 Coile et al. Aug 2000 A
6119174 Borowsky et al. Sep 2000 A
6128279 O'Neil et al. Oct 2000 A
6141749 Coss et al. Oct 2000 A
6141759 Braddy Oct 2000 A
6167428 Ellis Dec 2000 A
6185598 Farber et al. Feb 2001 B1
6223205 Harchol-Balter et al. Apr 2001 B1
6223287 Douglas et al. Apr 2001 B1
6247057 Barrera, III Jun 2001 B1
6249820 Dobbins et al. Jun 2001 B1
6252878 Locklear, Jr. et al. Jun 2001 B1
6262976 McNamara Jul 2001 B1
6286039 Van Horne et al. Sep 2001 B1
6314463 Abbott et al. Nov 2001 B1
6317786 Yamane et al. Nov 2001 B1
6324177 Howes et al. Nov 2001 B1
6324286 Lai et al. Nov 2001 B1
6330560 Harrison et al. Dec 2001 B1
6339423 Sampson et al. Jan 2002 B1
6353614 Borella et al. Mar 2002 B1
6360265 Falck et al. Mar 2002 B1
6363075 Huang et al. Mar 2002 B1
6363081 Gase Mar 2002 B1
6374300 Masters Apr 2002 B2
6374359 Shrader et al. Apr 2002 B1
6381632 Lowell Apr 2002 B1
6389462 Cohen et al. May 2002 B1
6393475 Leong et al. May 2002 B1
6397261 Eldridge et al. May 2002 B1
6415329 Gelman et al. Jul 2002 B1
6430622 Aiken, Jr. et al. Aug 2002 B1
6445704 Howes et al. Sep 2002 B1
6446225 Robsman et al. Sep 2002 B1
6490682 Vanstone et al. Dec 2002 B2
6496866 Attanasio et al. Dec 2002 B2
6510464 Grantges, Jr. et al. Jan 2003 B1
6515988 Eldridge et al. Feb 2003 B1
6519243 Nonaka et al. Feb 2003 B1
6535516 Leu et al. Mar 2003 B1
6542926 Zalewski et al. Apr 2003 B2
6564215 Hsiao et al. May 2003 B1
6567857 Gupta et al. May 2003 B1
6578066 Logan et al. Jun 2003 B1
6587866 Modi et al. Jul 2003 B1
6591262 MacLellan et al. Jul 2003 B1
6594268 Aukia et al. Jul 2003 B1
6598167 Devine et al. Jul 2003 B2
6606315 Albert et al. Aug 2003 B1
6609150 Lee et al. Aug 2003 B2
6611498 Baker et al. Aug 2003 B1
6650641 Albert et al. Nov 2003 B1
6657974 Britton et al. Dec 2003 B1
6658114 Farn et al. Dec 2003 B1
6697354 Borella et al. Feb 2004 B1
6701377 Burmann et al. Mar 2004 B2
6704317 Dobson Mar 2004 B1
6711618 Danner et al. Mar 2004 B1
6714979 Brandt et al. Mar 2004 B1
6718383 Hebert Apr 2004 B1
6742126 Mann et al. May 2004 B1
6745229 Gobin et al. Jun 2004 B1
6748413 Bournas Jun 2004 B1
6760758 Lund et al. Jul 2004 B1
6763370 Schmeidler et al. Jul 2004 B1
6763468 Gupta et al. Jul 2004 B2
6772333 Brendel Aug 2004 B1
6779017 Lamberton et al. Aug 2004 B1
6832322 Boden et al. Dec 2004 B1
6877095 Allen Apr 2005 B1
6886044 Miles et al. Apr 2005 B1
6892307 Wood et al. May 2005 B1
6941384 Aiken, Jr. et al. Sep 2005 B1
6952728 Alles et al. Oct 2005 B1
6954784 Aiken, Jr. et al. Oct 2005 B2
6963917 Callis et al. Nov 2005 B1
6965930 Arrowood et al. Nov 2005 B1
6996617 Aiken, Jr. et al. Feb 2006 B1
6996631 Aiken, Jr. et al. Feb 2006 B1
7013338 Nag et al. Mar 2006 B1
7058600 Combar et al. Jun 2006 B1
7058789 Henderson Jun 2006 B2
7058973 Sultan Jun 2006 B1
7086086 Ellis Aug 2006 B2
7111162 Bagepalli et al. Sep 2006 B1
7120697 Aiken, Jr. et al. Oct 2006 B2
7188181 Squier et al. Mar 2007 B1
7225249 Barry et al. May 2007 B1
7266604 Nathan et al. Sep 2007 B1
7284272 Howard et al. Oct 2007 B2
7290050 Smith et al. Oct 2007 B1
7308710 Yarborough Dec 2007 B2
7370100 Gunturu May 2008 B1
7373500 Ramelson et al. May 2008 B2
7406709 Maher, III et al. Jul 2008 B2
7430611 Aiken, Jr. et al. Sep 2008 B2
7441270 Edwards et al. Oct 2008 B1
7451312 Medvinsky et al. Nov 2008 B2
7463648 Eppstein et al. Dec 2008 B1
7509369 Tormasov Mar 2009 B1
7516485 Lee et al. Apr 2009 B1
7529242 Lyle May 2009 B1
7568041 Turner et al. Jul 2009 B1
7583668 Mayes et al. Sep 2009 B1
7591001 Shay Sep 2009 B2
7603454 Piper Oct 2009 B2
7703102 Eppstein et al. Apr 2010 B1
7716369 Le Pennec et al. May 2010 B2
7779130 Toutonghi Aug 2010 B1
7792113 Foschiano et al. Sep 2010 B1
7908651 Maher Mar 2011 B2
7948952 Hurtta et al. May 2011 B2
7970934 Patel Jun 2011 B1
7991859 Miller et al. Aug 2011 B1
8019870 Eppstein et al. Sep 2011 B1
8032634 Eppstein et al. Oct 2011 B1
8079077 Chen et al. Dec 2011 B2
8179809 Eppstein et al. May 2012 B1
8191106 Choyi et al. May 2012 B2
8224971 Miller et al. Jul 2012 B1
8234650 Eppstein et al. Jul 2012 B1
8239445 Gage et al. Aug 2012 B1
8244876 Sollee Aug 2012 B2
8255644 Sonnier Aug 2012 B2
8291487 Chen et al. Oct 2012 B1
8296434 Miller et al. Oct 2012 B1
8312507 Chen et al. Nov 2012 B2
8327128 Prince et al. Dec 2012 B1
8332925 Chen et al. Dec 2012 B2
8347392 Chess et al. Jan 2013 B2
8387128 Chen et al. Feb 2013 B1
8464333 Chen et al. Jun 2013 B1
8520615 Mehta et al. Aug 2013 B2
8543644 Gage et al. Sep 2013 B2
8584199 Chen et al. Nov 2013 B1
8595383 Chen et al. Nov 2013 B2
8595791 Chen et al. Nov 2013 B1
8595819 Chen et al. Nov 2013 B1
8675488 Sidebottom et al. Mar 2014 B1
8813180 Chen et al. Aug 2014 B1
8826372 Chen et al. Sep 2014 B1
8885463 Medved et al. Nov 2014 B1
8904512 Chen et al. Dec 2014 B1
8914871 Chen et al. Dec 2014 B1
8918857 Chen et al. Dec 2014 B1
RE45347 Chun et al. Jan 2015 E
8943577 Chen et al. Jan 2015 B1
9032502 Chen et al. May 2015 B1
9118618 Davis Aug 2015 B2
9118620 Davis Aug 2015 B1
9124550 Chen et al. Sep 2015 B1
9219751 Chen et al. Dec 2015 B1
9253152 Chen et al. Feb 2016 B1
9258332 Chen et al. Feb 2016 B2
9270705 Chen et al. Feb 2016 B1
9338225 Jalan et al. May 2016 B2
9350744 Chen et al. May 2016 B2
9356910 Chen et al. May 2016 B2
9497201 Chen et al. Nov 2016 B2
20010015812 Sugaya Aug 2001 A1
20010023442 Masters Sep 2001 A1
20020010783 Primak et al. Jan 2002 A1
20020026531 Keane et al. Feb 2002 A1
20020046348 Brustoloni Apr 2002 A1
20020053031 Bendinelli et al. May 2002 A1
20020091831 Johnson Jul 2002 A1
20020124089 Aiken, Jr. et al. Sep 2002 A1
20020133491 Sim et al. Sep 2002 A1
20020141448 Matsunaga Oct 2002 A1
20020143953 Aiken Oct 2002 A1
20020143954 Aiken, Jr. et al. Oct 2002 A1
20020143955 Shimada et al. Oct 2002 A1
20020166080 Attanasio et al. Nov 2002 A1
20020178265 Aiken, Jr. et al. Nov 2002 A1
20020178268 Aiken, Jr. et al. Nov 2002 A1
20020191575 Kalavade et al. Dec 2002 A1
20020194335 Maynard Dec 2002 A1
20020199000 Banerjee Dec 2002 A1
20030023711 Parmar et al. Jan 2003 A1
20030023873 Ben-Itzhak Jan 2003 A1
20030031180 Datta et al. Feb 2003 A1
20030035420 Niu Feb 2003 A1
20030061402 Yadav Mar 2003 A1
20030065950 Yarborough Apr 2003 A1
20030079146 Burstein Apr 2003 A1
20030081624 Aggarwal May 2003 A1
20030088788 Yang May 2003 A1
20030131245 Linderman Jul 2003 A1
20030135653 Marovich Jul 2003 A1
20030152078 Henderson Aug 2003 A1
20030167340 Jonsson Sep 2003 A1
20030202536 Foster et al. Oct 2003 A1
20030229809 Wexler et al. Dec 2003 A1
20040001497 Sharma Jan 2004 A1
20040054920 Wilson et al. Mar 2004 A1
20040107360 Herrmann et al. Jun 2004 A1
20040128312 Shalabi et al. Jul 2004 A1
20040139057 Hirata et al. Jul 2004 A1
20040139108 Tang et al. Jul 2004 A1
20040141005 Banatwala et al. Jul 2004 A1
20040143599 Shalabi et al. Jul 2004 A1
20040184442 Jones Sep 2004 A1
20040210623 Hydrie et al. Oct 2004 A1
20040243718 Fujiyoshi Dec 2004 A1
20040253956 Collins Dec 2004 A1
20050009520 Herrero et al. Jan 2005 A1
20050021949 Izawa et al. Jan 2005 A1
20050027947 Landin Feb 2005 A1
20050033985 Xu et al. Feb 2005 A1
20050038898 Mittig et al. Feb 2005 A1
20050050364 Feng Mar 2005 A1
20050074001 Mattes et al. Apr 2005 A1
20050114492 Arberg et al. May 2005 A1
20050125276 Rusu Jun 2005 A1
20050135422 Yeh Jun 2005 A1
20050141506 Aiken, Jr. et al. Jun 2005 A1
20050144468 Northcutt et al. Jun 2005 A1
20050169285 Wills et al. Aug 2005 A1
20050249225 Singhal Nov 2005 A1
20050251856 Araujo et al. Nov 2005 A1
20050259586 Hafid et al. Nov 2005 A1
20060031506 Redgate Feb 2006 A1
20060036733 Fujimoto et al. Feb 2006 A1
20060062142 Appanna et al. Mar 2006 A1
20060063517 Oh et al. Mar 2006 A1
20060064440 Perry Mar 2006 A1
20060064478 Sirkin Mar 2006 A1
20060069804 Miyake et al. Mar 2006 A1
20060077926 Rune Apr 2006 A1
20060080446 Bahl Apr 2006 A1
20060092950 Arregoces et al. May 2006 A1
20060098645 Walkin May 2006 A1
20060112170 Sirkin May 2006 A1
20060126625 Schollmeier et al. Jun 2006 A1
20060190997 Mahajani et al. Aug 2006 A1
20060195698 Pinkerton et al. Aug 2006 A1
20060209789 Gupta et al. Sep 2006 A1
20060227771 Raghunath et al. Oct 2006 A1
20060230129 Swami et al. Oct 2006 A1
20060233100 Luft et al. Oct 2006 A1
20070002857 Maher Jan 2007 A1
20070011419 Conti Jan 2007 A1
20070086382 Narayanan et al. Apr 2007 A1
20070094396 Takano et al. Apr 2007 A1
20070118881 Mitchell et al. May 2007 A1
20070124487 Yoshimoto et al. May 2007 A1
20070156919 Potti et al. Jul 2007 A1
20070165622 O'Rourke et al. Jul 2007 A1
20070177506 Singer et al. Aug 2007 A1
20070180226 Schory et al. Aug 2007 A1
20070180513 Raz et al. Aug 2007 A1
20070259673 Willars et al. Nov 2007 A1
20070274285 Werber et al. Nov 2007 A1
20070286077 Wu Dec 2007 A1
20070288247 Mackay Dec 2007 A1
20070294209 Strub et al. Dec 2007 A1
20070294694 Jeter et al. Dec 2007 A1
20080034111 Kamath et al. Feb 2008 A1
20080034419 Mullick et al. Feb 2008 A1
20080040789 Chen et al. Feb 2008 A1
20080109870 Sherlock et al. May 2008 A1
20080134332 Keohane et al. Jun 2008 A1
20080162679 Maher et al. Jul 2008 A1
20080216177 Yokosato et al. Sep 2008 A1
20080263209 Pisharody et al. Oct 2008 A1
20080271130 Ramamoorthy Oct 2008 A1
20080289044 Choi Nov 2008 A1
20080320151 McCanne Dec 2008 A1
20090037361 Prathaban et al. Feb 2009 A1
20090049537 Chen et al. Feb 2009 A1
20090106830 Maher Apr 2009 A1
20090113536 Zhang et al. Apr 2009 A1
20090141634 Rothstein et al. Jun 2009 A1
20090210698 Candelore Aug 2009 A1
20090213858 Dolganow et al. Aug 2009 A1
20090262741 Jungck et al. Oct 2009 A1
20090271472 Scheifler et al. Oct 2009 A1
20090313379 Rydnell et al. Dec 2009 A1
20100162378 Jayawardena et al. Jun 2010 A1
20100188975 Raleigh Jul 2010 A1
20100235880 Chen et al. Sep 2010 A1
20100257278 Gunturu Oct 2010 A1
20100312740 Clemm et al. Dec 2010 A1
20100333209 Alve Dec 2010 A1
20110013525 Breslau et al. Jan 2011 A1
20110064083 Borkenhagen et al. Mar 2011 A1
20110099403 Miyata et al. Apr 2011 A1
20110110294 Valluri et al. May 2011 A1
20110153834 Bharrat Jun 2011 A1
20110185073 Jagadeeswaran et al. Jul 2011 A1
20110276695 Maldaner Nov 2011 A1
20110292939 Subramaian et al. Dec 2011 A1
20110307606 Cobb Dec 2011 A1
20120023231 Ueno Jan 2012 A1
20120026897 Guichard et al. Feb 2012 A1
20120066371 Patel et al. Mar 2012 A1
20120084460 McGinnity et al. Apr 2012 A1
20120117571 Davis et al. May 2012 A1
20120144014 Natham et al. Jun 2012 A1
20120151353 Joanny Jun 2012 A1
20120155495 Clee Jun 2012 A1
20120215910 Wada Aug 2012 A1
20120239792 Banerjee et al. Sep 2012 A1
20120240185 Kapoor et al. Sep 2012 A1
20130007225 Gage et al. Jan 2013 A1
20130074177 Varadhan et al. Mar 2013 A1
20130083725 Mallya et al. Apr 2013 A1
20130089099 Pollock Apr 2013 A1
20130091273 Ly Apr 2013 A1
20130148500 Sonoda et al. Jun 2013 A1
20130166731 Yamanaka et al. Jun 2013 A1
20130166762 Jalan et al. Jun 2013 A1
20130191548 Boddukuri Jul 2013 A1
20130212242 Mendiratta et al. Aug 2013 A1
20130227165 Liu Aug 2013 A1
20130262702 Davis Oct 2013 A1
20130282791 Kruglick Oct 2013 A1
20130311686 Fetterman Nov 2013 A1
20130315241 Kamat et al. Nov 2013 A1
20140047115 Lipscomb et al. Feb 2014 A1
20140164617 Jalan et al. Jun 2014 A1
20140258465 Li Sep 2014 A1
20140258536 Chiong Sep 2014 A1
20140269728 Jalan et al. Sep 2014 A1
20140330977 van Bemmel Nov 2014 A1
20140330982 Jalan et al. Nov 2014 A1
20140334485 Jain et al. Nov 2014 A1
20150047012 Chen et al. Feb 2015 A1
20150085650 Cui et al. Mar 2015 A1
20150215436 Kancherla Jul 2015 A1
20150281087 Jalan et al. Oct 2015 A1
20150312092 Golshan et al. Oct 2015 A1
20150381465 Narayanan et al. Dec 2015 A1
20160014126 Jalan et al. Jan 2016 A1
20160036778 Chen et al. Feb 2016 A1
20160050233 Chen et al. Feb 2016 A1
20160065619 Chen et al. Mar 2016 A1
20160105395 Chen et al. Apr 2016 A1
20160105446 Chen et al. Apr 2016 A1
20160119382 Chen et al. Apr 2016 A1
20160139910 Ramanathan et al. May 2016 A1
20160173579 Jalan et al. Jun 2016 A1
20160261642 Chen et al. Sep 2016 A1
20170041350 Chen et al. Feb 2017 A1
Foreign Referenced Citations (63)
Number Date Country
1725702 Jan 2006 CN
1921457 Feb 2007 CN
1937591 Mar 2007 CN
101094225 Dec 2007 CN
101495993 Jul 2009 CN
101567818 Oct 2009 CN
101878663 Nov 2010 CN
ZL2007800018075 Feb 2011 CN
102104548 Jun 2011 CN
102918801 Feb 2013 CN
103365654 Oct 2013 CN
103428261 Dec 2013 CN
ZL2008801181789 Jun 2014 CN
102918801 May 2016 CN
0648038 Apr 1995 EP
1482685 Dec 2004 EP
1720287 Nov 2006 EP
1770915 Apr 2007 EP
1885096 Feb 2008 EP
2057552 May 2009 EP
2215863 Aug 2010 EP
2575328 Apr 2013 EP
2577910 Apr 2013 EP
2667571 Nov 2013 EP
2575328 Nov 2014 EP
1182547 Nov 2013 HK
1183569 Dec 2013 HK
1188498 May 2014 HK
1190539 Jul 2014 HK
1182547 Apr 2015 HK
2001298449 Oct 2001 JP
2004350188 Dec 2004 JP
2005518595 Jun 2005 JP
2006180295 Jul 2006 JP
2006333245 Dec 2006 JP
2007048052 Feb 2007 JP
2008217532 Sep 2008 JP
2009219065 Sep 2009 JP
2011505752 Feb 2011 JP
2013059122 Mar 2013 JP
2013070423 Apr 2013 JP
2013078134 Apr 2013 JP
2013528330 Jul 2013 JP
5364101 Sep 2013 JP
5480959 Feb 2014 JP
5579820 Jul 2014 JP
5579821 Jul 2014 JP
5946189 Jun 2016 JP
NI086309 Feb 1996 TW
NI109955 Dec 1999 TW
NI130506 Mar 2001 TW
NI137392 Jul 2001 TW
WO03073216 Sep 2003 WO
WO03103233 Dec 2003 WO
WO2006065691 Jun 2006 WO
WO2007076883 Jul 2007 WO
WO2008021620 Feb 2008 WO
WO2009073295 Jun 2009 WO
WO2011149796 Dec 2011 WO
WO2014088741 Jun 2014 WO
WO2014144837 Sep 2014 WO
WO2014179753 Nov 2014 WO
WO2015164026 Oct 2015 WO
Non-Patent Literature Citations (27)
Entry
Chiussi et al., “A Network Architecture for MPLS-Based Micro-Mobility”, IEEE WCNC 02, Orlando, Mar. 2002, 8pp.
Smith, M. et al; “Network Security Using NAT and NAPT”, 10th IEEE International Converence on Aug. 27-30, 2002, Piscataway, NJ, USA, 2012; Aug. 27, 2002; pp. 355-360.
Cardellini et al., “Dynamic Load Balancing on Web-server Systems”, IEEE Internet Computing, vol. 3, No. 3, pp. 28-39, May-Jun. 1999.
Wang et al., “Shield: Vulnerability Driven Network Filters for Preventing Known Vulnerability Exploits”, SIGCOMM'04, Aug. 30-Sep. 3, 2004, Portland, Oregon, USA, 12 pp.
Cardellini, et al., “Dynamic Load Balancing on Web-Server Systems”, IEEE Internet Computing, 1999, vol. 3(3), pp. 28-29.
Samar, V., “Single Sign-On Using Cookies for Web Applications,” IEEE 8th International Workshop, 1999, pp. 158-163.
“Allot Announces the General Availability of its Directory Services-Based NetPolicy™ Manager,” Allot Communications, Tel Aviv, Israel, Feb. 28, 2000, 2 pages.
“Allot Communications Announces Business-Aware Network Policy Manager,” Allot Communications, Sophia Antipolis, France, Sep. 20, 1999, 2 pages.
“Allot Communications Announces Directory Services Based Network Policy Manager,” Allot Communications, Los Gatos, California, Apr. 5, 1999, 2 pages.
“Allot Communications Announces the Netenforcer Family of IP Traffic Management Products: Fault-Tolerant, Scaleable, Policy-Based Bandwidth Management, QOS, SLA Solutions,” Allot Communications, Burlingame, California, Dec. 13, 1999, 2 pages.
“Allot Communications Launches NetEnforcer with NetWizard, the Fastest Way to Implement Accurate and Reliable Network QoS Policies,” Allot Communications, Burlingame, California, Jan. 25, 2001, 2 pages.
“Allot Introduces Turnkey Next Generation IP Service and Creation Solution-the Virtual Bandwidth Manager,” Allot Communications, Atlanta, Georgia, SUPERCOMM 2000, Booth #8458, Jun. 5, 2000, 2 pages.
“Data Communications Awards Allot Communications ‘Hot Product’ in Internetworking/IP Tools Category,” Allot Communications, Los Gatos, California, Jan. 18, 1999, 2 pages.
“Policy-Based Network Architecture,” Allot Communications, 2001, 12 pages.
Dahlin, A. et al, “EDDIE A Robust and Scalable Internet Server,” Ericsson Telecom AB, Stockholm, Sweden, pp. 1-7 (May 1998).
Aron, Mohit et al., “Efficient Support for P-HTTP in Cluster-Based Web Servers,” Proceedings of 1999 Annual Usenix Technical Conference, Monterey, California, Jun. 1999, 14 pages.
Aron, Mohit et al., “Scalable Content-aware Request Distribution in Cluster-based Network Servers,” Proceedings of the 2000 Annual Usenix Technical Conference, San Diego, California, Jun. 2000, 15 pages.
Aron, Mohit, “Scalable Content-aware Request Distribution in Cluster-based Network Servers,” Department of Computer Science, Rice University [Online, retreived on Mar. 13, 2001], Retreived from the Internet: <URL:http://softlib.rice.edu/softlib/scalableRD.html>, 8 pages.
“ACEdirector™: 8-PORT 10/100 MBPS Ethernet Switch,” Alteon WebSystems, San Jose, California (1999), 2 pages.
“Enhancing Web User Experience with Global Server Load Balancing,” Alteon WebSystems, San Jose, California, Jun. 1999, 8 pages.
“The Next Step in Server Load Balancing,” Alteon WebSystems, San Jose, California, Nov. 1999, 16 pages.
“1.3.1.2.5 Virtual IP Addressing (VIPA),” excerpt from “IP Configuration” [online], IBM Corporation, 1998 [retreived on Sep. 8, 1999], retreived from the Internet: <URL:http://w3.enterlib.ibm.com:80/cgi-bin/bookmgr/books/F1AF7001/1.3.1.2>, 4 pages.
“1.3.20 Device and Link Statement-Virtual Devices (VIPA),” excerpt from “IP Configuration” [online], IBM Corporation, 1998 [retreived on Sep. 8, 1999], retreived from the Internet: <URL:http://w3.enterlib.ibm.com:80/cgi-bin/bookmgr/books/F1AF7001/1.3.2>, 3 pages.
“1.3.23 Home Statement,” excerpt from “IP Configuration” [online], IBM Corporation, 1998 [retreived on Sep. 8, 1999], retreived from the Internet: <URL:http://w3.enterlib.ibm.com:80/cgi-bin/bookmgr/books/F1AF7001/1.3.2>, 6 pages.
Devine, Mac, “TCP/IP Application Availability and Workload Balancing in the Parallel Sysplex,” Share Technical Conference, Aug. 22-27, 1999, 17 pages.
Pai, Vivek S. et al., “Locality-Aware Request Distribution in Cluster-based Network Servers,” Proceedings of the 8th International Conference on Architectural Support for Programming Languages and Operating Systems (ASPLOS VIII), San Jose, CA, Oct. 1998, 12 pages.
Apostolopoulos, G. et al., “Design, Implementation and Performance of a Content-Based Switch,” INFOCOM 2000, Nineteenth Annual Joint Conference of the IEEE Computer and Communication Societies, IEEE, Mar. 2000, pp. 1117-1136, vol. 3.
Related Publications (1)
Number Date Country
20150350383 A1 Dec 2015 US
Continuations (1)
Number Date Country
Parent 13433290 Mar 2012 US
Child 14825609 US