IP Library Granted Patent US 8,990,431
Granted Patent B2
US 8,990,431 · App. 12/489,180 · Granted Mar 24, 2015

Systems and methods for identifying a processor from a plurality of processors to provide symmetrical request and response processing

Inventors: Deepak Goel (Bangalore, IN); Jyotheesh Kurma (Bangalore, IN); Sandhya Gopinath (Bangalore, IN)
Assignee: Citrix Systems, Inc.
H04L67/1002H04L67/1023G06F9/45533
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,990,431
App. No.
12/489,180
Filed
Jun 22, 2009
Granted
Mar 24, 2015
Kind
B2
Art Unit
2453
USPC
709/202
Abstract

Described herein is a method and system for distributing request and responses across a multi-core system. Each core executes a packet engine that further processes data packets allocated to that core. A flow distributor executing within the multi-core system forwards client requests to a packet engine on a core that is selected based on a value generated when a hash is applied to a tuple comprising a client IP address, a client port, a server IP address and a server port identified in the request. The packet engine selects a first IP address and a first port of the core, and determines whether a hash of a tuple comprising those values identifies the selected core. A modification is then made to the client request so that the client request includes a tuple comprising the first IP address, the server IP address, the first port and the server port.

Claims (63)

1. A method for providing symmetrical request and response processing across a packet engine of a plurality of packet engines, each of the plurality of packet engines executing on a respective core of a plurality of cores in a multi-core system intermediary to a client and a server, the method comprising:

a) receiving, by a packet engine on a first core of a multi-core device intermediary to a client and a server, from a flow distributor, a request of the client to the server, the first core selected by the flow distributor based on a first hash of a first tuple comprising a client internet protocol address, a client port, a server internet protocol address and a server port identified in the request;

b) selecting, by the packet engine, a first internet protocol address of one or more internet protocol addresses of the first core and a first port from a plurality of ports of the first core;

c) determining, by the packet engine, that a second hash of a second tuple comprising at least the first internet protocol address and the first port, identifies the first core;

d) identifying, by the packet engine, that the first port is available;

e) modifying, by the packet engine, the client internet protocol address of the request of the client to comprise the first internet protocol address and the client port of the request of the client to comprise the first port; and

f) transmitting, by the packet engine, the modified request of the client to the server.

2. The method of claim 1 , further comprising receiving, by the flow distributor, a response from the server to the request of the client, and distributing, by the flow distributor, the response to the first core of the packet engine based on the hash of a third tuple comprising a client internet protocol address, a client port, a server internet protocol address and a server port identified in the response.

3. The method of claim 1 , wherein step (c) further comprises determining, by the packet engine, that the first hash of the first tuple identifies the first core on which the packet engine executes.

4. The method of claim 1 , wherein step (c) further comprises determining, by the packet engine, that the second hash of the second tuple identifies the first core on which the packet engine executes.

5. The method of claim 1 , wherein step (d) further comprises:

determining, by the packet engine, that the first port is not available;

selecting, by the packet engine, a second port from the plurality of ports of the first core;

determining, by the packet engine, that the second port is available;

determining, by the packet engine, that a hash of a fourth tuple comprising at least the first internet protocol address and the second port, identifies the first core; and

modifying, by the packet engine, the request of the client to identify the first internet protocol address as the client internet protocol address and the second port as the client port.

6. The method of claim 1 , wherein step (d) further comprises:

determining, by the packet engine, that the first port is not available;

selecting, by the packet engine, a second internet protocol address from the one or more internet protocol addresses of the first core;

selecting, by the packet engine, a second port from the plurality of ports of the first core;

determining, by the packet engine, that a hash of a fifth tuple comprising at least the second internet protocol address and the second port, identifies the first core; and

modifying, by the packet engine, the request of the client to identify the second internet protocol address as the client internet protocol address and the second port as the client port.

7. The method of claim 1 , wherein step (b) further comprises selecting a first internet protocol address from a group of predetermined internet protocol addresses of the first core.

8. The method of claim 1 , wherein the flow distributor executes within the multi-core system.

9. The method of claim 1 , wherein step (b) further comprises selecting a first port from a port table comprising available ports.

10. The method of claim 9 , further comprising selecting each port for inclusion in the port table based in part on one or more hashes of local internet protocol addresses of a first core and local ports associated with each local internet protocol address.

11. The method of claim 1 , further comprising storing, by each of at least two cores of the multi-core device a port table comprising available ports on that core.

12. The method of claim 1 , wherein the first core is selected by the flow distributor based in part on the first hash of the first tuple.

13. The method of claim 1 , further comprising updating a port allocation table to indicate the assignment of the first port to the data packet.

14. A system for providing symmetrical request and response processing across a packet engine of a plurality of packet engines, each of the plurality of packet engines executing on a respective core of a plurality of cores in a multi-core system intermediary to a client and a server, the system comprising:

a multi-core device intermediary to a client and a server, the multi-core device comprising a plurality of cores;

a flow distributor receiving a request of a client to a server, and selecting a first core based on a first hash of a first tuple comprising a client internet protocol address, a client port, a server internet protocol address and a server port identified in the client request; and

a packet engine executing on the first core of the multi-core device, the packet engine:

receiving the client request,

selecting a first internet protocol address of one or more internet protocol addresses of the first core and a first port from a plurality of ports of the first core,

determining that a second hash of a second tuple comprising at least the first internet protocol address and the first port, identifies the first core,

identifying that the first port is available,

modifying the client internet protocol address of the client request to comprise the first internet protocol address and the client port of the client request to comprise the first port, and

transmitting the modified request of the client to the server.

15. The system of claim 14 , wherein the flow distributor:

receives a response from the server to the request of the client; and

distributes the response to the first core of the packet engine based on the hash of a third tuple comprising a client internet protocol address, a client port, a server internet protocol address and a server port identified in the response.

16. The system of claim 14 , wherein the packet engine determines that the first hash of the first tuple identifies the first core on which the packet engine executes.

17. The system of claim 14 , wherein the packet engine determines that the second hash of the second tuple identifies the first core on which the packet engine executes.

18. The system of claim 14 , wherein the packet engine:

determines that the first port is not available;

selects a second port from the plurality of ports of the first core;

determines that the second port is available;

determines that a hash of a fourth tuple comprising at least the first internet protocol address and the second port, identifies the first core; and

modifies the request of the client to identify the first internet protocol address as the client internet protocol address and the second port as the client port.

19. The system of claim 14 , wherein the packet engine:

determines that the first port is not available;

selects a second internet protocol address from the one or more internet protocol addresses of the first core;

selects a second port from the plurality of ports of the first core;

determines that a hash of a fifth tuple comprising at least the second internet protocol address and the second port, identifies the first core; and

modifies the request of the client to identify the second internet protocol address as the client internet protocol address and the second port as the client port.

20. The system of claim 14 , wherein the packet engine selects a first internet protocol address from a group of predetermined internet protocol addresses of the first core.

21. The system of claim 14 , wherein the flow distributor executes within the multi-core system.

22. The system of claim 14 , wherein the packet engine selects a first port from a port table comprising available ports.

23. The system of claim 22 , wherein the packet engine selects each port for inclusion in the port table based in part on one or more hashes of local internet protocol addresses of the first core and local ports associated with each local internet protocol address.

24. The system of claim 14 , wherein the multi-core device comprises at least two cores, each core storing a port table comprising available ports on that core.

25. The system of claim 14 , wherein the first core is selected by the flow distributor based in part on the first hash of the first tuple.

26. The system of claim 14 , further comprising a port allocation table updated to indicate the assignment of the first port to the data packet.

Assignments (9)
PATENT SECURITY AGREEMENT Recorded Aug 15, 2025
From: CLOUD SOFTWARE GROUP, INC.; CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 072488/0172 →
SECURITY INTEREST Recorded May 24, 2024
From: CLOUD SOFTWARE GROUP, INC. (F/K/A TIBCO SOFTWARE INC.); CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 067662/0568 →
PATENT SECURITY AGREEMENT Recorded Apr 14, 2023
From: CLOUD SOFTWARE GROUP, INC. (F/K/A TIBCO SOFTWARE INC.); CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 063340/0164 →
RELEASE AND REASSIGNMENT OF SECURITY INTEREST IN PATENT (REEL/FRAME 062113/0001) Recorded Apr 14, 2023
From: GOLDMAN SACHS BANK USA, AS COLLATERAL AGENT
To: CITRIX SYSTEMS, INC.; CLOUD SOFTWARE GROUP, INC. (F/K/A TIBCO SOFTWARE INC.)
Reel/Frame 063339/0525 →
PATENT SECURITY AGREEMENT Recorded Oct 7, 2022
From: TIBCO SOFTWARE INC.; CITRIX SYSTEMS, INC.
To: BANK OF AMERICA, N.A., AS COLLATERAL AGENT
Reel/Frame 062112/0262 →
PATENT SECURITY AGREEMENT Recorded Oct 7, 2022
From: TIBCO SOFTWARE INC.; CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 062113/0470 →
SECOND LIEN PATENT SECURITY AGREEMENT Recorded Oct 7, 2022
From: TIBCO SOFTWARE INC.; CITRIX SYSTEMS, INC.
To: GOLDMAN SACHS BANK USA, AS COLLATERAL AGENT
Reel/Frame 062113/0001 →
SECURITY INTEREST Recorded Sep 30, 2022
From: CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION
Reel/Frame 062079/0001 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jul 22, 2009
From: GOEL, DEEPAK; KURMA, JYOTHEESH RAO; GOPINATH, SANDHYA
To: CITRIX SYSTEMS, INC.
Reel/Frame 022987/0034 →
Continuity (1)
Related Publication 20100287227A1 · Nov 11, 2010