Apparatus and method for binding a connection-oriented client to a communication channel

Each connection-oriented client in a network device is bound to its own communication channel. The communication channel may be an X.25 logical channel having a single virtual circuit.

FIELD OF THE INVENTION

The present invention relates generally to communication systems, and more particularly to binding a connection-oriented client to a communication channel.

BACKGROUND OF THE INVENTION

In today's information age, communication networks are often used for interconnecting various network devices. Each network device supports various applications that communicate using various protocols. For convenience, an application in a network device is referred to hereinafter as a “client.”

In order for a client to communicate over the communication network, the client requires a communication channel. The network device supports various communication channels. The client binds to a communication channel in order to communicate over the communication channel.

In a prior art embodiment of the invention, the network device includes binding logic that binds clients to communication channels. The binding logic is logically situated between the client logic and the X.25 logic within the network device. The binding logic binds all clients having the same destination to a shared set of communication channels. This type of binding does not work well for connection-oriented clients.

SUMMARY OF THE INVENTION

In accordance with one aspect of the invention, each connection-oriented client is bound to its own communication channel.

In one embodiment of the invention, each connection-oriented client is bound to its own X.25 logical channel. The X.25 logical channel includes a single virtual circuit.

DETAILED DESCRIPTION OF A PREFERRED EMBODIMENT

In an embodiment of the invention, the network device includes client logic supporting a number of clients, binding logic, and driver logic supporting various types of communication channels. The binding logic is logically situated between the client logic and the driver logic within the network device, and in particular between the client logic and the X.25 logic. The binding logic sets up bindings between clients and communication channels. The binding logic provides a common interface to the clients for all communication channels, and thus the clients do not require any logic that is specific to a particular type of communication channel.

In one embodiment of the invention, the communication channels are X.25 logical channels. X.25 is a common networking protocol that includes a frame-based link layer and a packet-based network layer. X.25 uses virtual circuits in order to multiplex multiple communication streams over a single link layer connection. An X.25 logical channel may include one or more virtual circuits. In such an embodiment, the driver logic includes X.25 logic for managing X.25 logical channels.

FIG. 1is a block diagram100showing the relationship between the client logic102, the binding logic104, and the X.25 logic106in an exemplary embodiment of the present invention. The binding logic104is logically situated between the client logic102and the X.25 logic106. The binding logic sets up bindings between clients and X.25 logical channels. Such bindings may be initiated by the client logic102, for example, upon requesting an X.25 communication channel, or by the X.25 logic106, for example, upon receiving call over the X.25 network.

When a connection-oriented client binds to an X.25 logical channel, the binding logic104binds the connection-oriented client to its own X.25 logical channel. The X.25 logical channel includes a single virtual circuit, and is referenced by an X.25 channel identifier. No other clients utilize the communication channel.

In order to simplify the design of the client logic102, the client logic102creates connect logic for each communication channel to which it binds. The connect logic is a separate operating system process from the client logic102that is referenced by a connect logic identifier. The connect logic maintains a list of available communication channels, which, for a connection-oriented client, will contain at most one communication channel. Data is exchanged between the client logic102and the connect logic using a message passing scheme based upon the connect logic identifier.

The binding logic104actually sets up a binding between the connect logic created by the client logic102and an X.25 logical channel created by the X.25 logic106. Data is exchanged between the connect logic and the X.25 logical channel using a message passing scheme based upon the connect logic identifier and the X.25 channel identifier.

Initiating a Binding by the Client Logic

The network device may permit a connection-oriented client102to initiate a connection. In this case, when the client102requests a communication channel, the communication channel is created, and the client102is bound to the communication channel.

When the connection-oriented client logic102requires an X.25 logical channel, the client logic102creates connect logic for the connection, and sends a channel request message to the binding logic104. The channel request message includes a calling address, a called address, a connect type indicating that a connection-oriented connection is requested, the connect logic identifier identifying the connect logic, and an X.25 channel identifier equal to zero indicating that a new X.25 logical channel is requested.

Upon receiving the channel request message from the client logic102, the binding logic104sends a channel request message the X.25 logic106. The channel request message includes the calling address, the called address, the connect type, and the connect logic identifier.

Upon receiving the channel request message from the binding logic104, the X.25 logic106creates an X.25 channel having an X.25 channel identifier, and sends a channel available message to the binding logic104indicating that the X.25 channel was created. The channel available message includes the X.25 channel identifier to identify the X.25 channel, and also includes the connect logic identifier so that the binding logic104can correlate the X.25 channel with the connect logic.

Upon receiving the channel available message from the X.25 logic106, the binding logic104updates its binding database to bind the connect logic identified by the connect logic identifier and the X.25 channel identified by the X.25 channel identifier, and sends a startup message to the connect logic including the X.25 channel identifier. The start up message confirms that the binding was successfully created.

Upon receiving the startup message from the binding logic104, the connect logic updates its list of available communication channels to include the newly created X.25 channel.

Thereafter, when the client logic102needs to send data over the communication channel, the client logic102forwards the data to the connect logic. As part of its normal processing, the connect logic searches its list of available communication channels for a usable channel. Since there is only one communication channel for the connection-oriented client (i.e., the X.25 channel that was created by the X.25 logic106), the connect logic forwards the data to the X.25 channel.

Similarly, when data is received over the X.25 channel, the data is forwarded to the connect logic, which in turn forwards the data to the client logic102.

FIG. 2shows the various event flows when a binding is initiated by the client logic102. For convenience, an event flow in which an entity is created is shown by a dashed arrow. An event flow involving a message exchange is shown by a solid arrow. The event sequence number is shown in parentheses.

When the connection-oriented client logic102requires an X.25 logical channel, the client logic102creates connect logic108for the connection in step (1), and sends a channel request message to the binding logic104in step (2). The channel request message includes a calling address, a called address, a connect type indicating that a connection-oriented connection is requested, the connect logic identifier identifying the connect logic108, and an X.25 channel identifier equal to zero indicating that a new X.25 logical channel is requested.

Upon receiving the channel request message from the client logic102in step (2), the binding logic104sends a channel request message to the X.25 logic106in step (3). The channel request message includes the calling address, the called address, the connect type, and the connect logic identifier.

Upon receiving the channel request message from the binding logic104in step (3), the X.25 logic106creates an X.25 channel110having an X.25 channel identifier in step (4), and sends a channel available message to the binding logic104indicating that the X.25 channel was created in step (5). The channel available message includes the X.25 channel identifier to identify the X.25 channel110, and also includes the connect logic identifier so that the binding logic104can correlate the X.25 channel110with the connect logic108.

Upon receiving the channel available message from the X.25 logic106in step (5), the binding logic104updates its binding database to bind the connect logic108identified by the connect logic identifier and the X.25 channel110identified by the X.25 channel identifier, and sends a startup message to the connect logic108including the X.25 channel identifier in step (6). The startup message confirms that the binding was successfully created.

Upon receiving the startup message from the binding logic104in step (6), the connect logic108updates its list of available communication channels to include the newly created X.25 channel110.

Thereafter, when the client logic102needs to send data over the communication channel, the client logic102forwards the data to the connect logic108in step (7). As part of its normal processing, the connect logic108searches its list of available communication channels for a usable channel. Since there is only one communication channel for the connection-oriented client (i.e., the X.25 channel110that was created by the X.25 logic106), the connect logic108forwards the data to the X.25 channel110in step (8).

Similarly, when data is received over the X.25 channel, the data is forwarded to the connect logic, which in turn forwards the data to the client logic102. This event flow is not shown in FIG.2.

FIG. 3is a logic flow diagram showing exemplary logic300for initiating a binding by the client logic102. Beginning at step302, the client logic102creates connect logic having a connect logic identifier, in step3041, and sends a channel request message to the binding logic104, in step306. The channel request message includes a calling address, a called address, a connect type indicating that a connection-oriented connection is requested, the connect logic identifier identifying the connect logic, and an X.25 hannel identifier equal to zero indicating that a new X.25 logical channel is requested.

Upon receiving the channel request message from the client logic102, the binding logic104sends a channel request message to the X.25 logic106, in step308. The channel request message includes the calling address, the called address, the connect type, and the connect logic identifier.

Upon receiving the channel request message from the binding logic104, the X.25 logic106creates an X.25 channel identifier having an X.25 channel identifier, in step310, and sends a channel available message to the binding logic104indicating that the X.25 channel was created, in step312. The channel available message includes the X.25 channel identifier to identify the X.25 channel, and also includes the connect logic identifier so that the binding logic104can correlate the X.25 channel with the connect logic.

Upon receiving the channel available message from the X.25 logic106, the binding logic104updates its binding database to bind the connect logic identified by the connect logic identifier and the X.25 channel identified by the X.25 channel identifier, in step314, and sends a startup message to the connect logic including the X.25 channel identifier, in step316. The startup message confirms that the binding was successfully created.

Upon receiving the startup message from the binding logic104, the connect logic updates its list of available communication channels to include the newly created X.25 channel, in step318. The logic300terminates in step399.

Initiating a Binding by the X.25 Logic

The network device may be configured to receive calls that are initiated by other network devices. In this case, a call is only accepted if there is a client102that is available to be bound to the connection. Thus, a connection-oriented client102may make itself available for an incoming call by registering with the X.25 logic106. The client102may register to receive calls from a specific address or from any address.

When the X.25 logic106receives a call including a calling address and a called address, the X.25 logic106creates an X.25 channel having an X.25 channel identifier. The X.25 logic106then sends a new channel message to the client logic102, and also sends a channel available message to the binding logic104. The new channel message includes the calling address, the called address, and the X.25 channel identifier. The channel available message includes the X.25 channel identifier, and also includes a connect logic identifier equal to zero to indicate that there is no connect logic associated with the X.25 channel.

Upon receiving the channel available message from the X.25 logic106, the binding logic104updates its binding database to include the newly created X.25 channel.

Upon receiving the new channel message from the X.25 logic106, the client logic102creates connect logic for the connection, and sends a channel request message to the binding logic104. The channel request message includes the calling address, the called address, a connect type indicating that a connection-oriented connection is requested, the connect logic identifier identifying the connect logic, and the X.25 channel identifier identifying the X.25 channel.

Upon receiving the channel request message from the client logic102, the binding logic104binds the connect logic identified by the connect logic identifier and the X.25 channel identified by the X.25 channel identifier, and sends a startup message to the connect logic including the X.25 channel identifier. The startup message confirms that the binding was successfully created.

Upon receiving the startup message from the binding logic104, the connect logic updates its list of available communication channels to include the newly created X.25 channel.

Thereafter, when data is received over the X.25 channel, the data is forwarded to the connect logic, which in turn forwards the data to the client logic102.

Similarly, when the client logic102needs to send data over the communication channel, the client logic102forwards the data to the connect logic. As part of its normal processing, the connect logic searches its list of available communication channels for a usable channel. Since there is only one communication channel for the connection-oriented client (i.e., the X.25 channel that was created by the X.25 logic106), the connect logic forwards the data to the X.25 channel.

FIG. 4shows the various event flows when a binding is initiated by the X.25 logic106. For convenience, an event flow in which an entity is created is shown by a dashed arrow. An event flow involving a message exchange is shown by a solid arrow. The event sequence number is shown in parentheses.

When the X.25 logic106receives a call including a calling address and a called address, the X.25 logic106creates an X.25 channel110having an X.25 channel identifier in step (1). The X.25 logic106then sends a new channel message to the client logic102in step (2), and also sends a channel available message to the binding logic104in step (3). The new channel message includes the calling address, the called address, and the X.25 channel identifier. The channel available message includes the X.25 channel identifier, and also includes a connect logic identifier equal to zero to indicate that there is no connect logic associated with the X.25 channel.

Upon receiving the channel available message from the X.25 logic106in step (3), the binding logic104updates its binding database to include the newly created X.25 channel110.

Upon receiving the new channel message from the X.25 logic106in step (2), the client logic102creates connect logic108for the connection in step (4), and sends a channel request message to the binding logic104in step (5). The channel request message includes the calling address, the called address, a connect type indicating that a connection-oriented connection is requested the connect logic identifier identifying the connect logic108, and the X.25 channel identifier identifying the X.25 channel110.

Upon receiving the channel request message from the client logic102in step (5), the binding logic104binds the connect logic108identified by the connect logic identifier and the X.25 channel110identified by the X.25 channel identifier, and sends a startup message to the connect logic108including the X.25 channel identifier in step (6). The startup message confirms that the binding was successfully created.

Upon receiving the startup message from the binding logic104, the connect logic108updates its list of available communication channels to include the newly created X.25 channel110.

After the connect logic108is bound to the X.25 channel110, the client logic102sends an accept channel message to the X.25 logic in step (7). The accept channel message includes the X.25 channel identifier.

Thereafter, when data is received over the X.25 channel110, the data is forwarded to the connect logic108in step (8), which in turn forwards the data to the client logic102in step (9).

Similarly, when the client logic102needs to send data over the communication channel, the client logic102forwards the data to the connect logic108in step (10). As part of its normal processing, the connect logic108searches its list of available communication channels for a usable channel. Since there is only one communication channel for the connection-oriented client (i.e., the X.25 channel that was created by the X.25 logic106), the connect logic108forwards the data to the X.25 channel110in step (11).

FIG. 5is a logic flow diagram showing exemplary logic500for initiating a binding by the X.25 logic106. Beginning at step502, the client logic102registers with the X.25 logic106as a connection-oriented client available to be bound, in step504. When the X.25 logic106receives a call including a calling address and a called address, in step506, the X.25 logic106creates an X.25 channel having an X.25 channel identifier, in step508. The X.25 logic106then sends a new channel message to the client logic102, in step510, and also sends a channel available message to the binding logic104, in step512. The new channel message includes the calling address, the called address, and the X.25 channel identifier. The channel available message includes the X.25 channel identifier, and also includes a connect logic identifier equal to zero to indicate that there is no connect logic associated with the X.25 channel.

Upon receiving the channel available message from the X.25 logic106, the binding logic104updates its binding database to include the newly created X.25 channel, in step514.

Upon receiving the new channel message from the X.25 logic106, the client logic102creates connect logic for the connection, in step516, and sends a channel request message to the binding logic104, in step518. The channel request message includes the calling address, the called address, a connect type indicating that a connection-oriented connection is requested, the connect logic identifier identifying the connect logic, and the X.25 channel identifier identifying the X.25 channel.

Upon receiving the channel request message from the client logic102, the binding logic104binds the connect logic identified by the connect logic identifier and the X.25 channel identified by the X.25 channel identifier, and sends a startup message to the connect logic including the X.25 channel identifier, in step520. The startup message confirms that the binding was successfully created.

Upon receiving the startup message from the binding logic104, the connect logic updates its list of available communication channels to include the newly created X.25 channel, in step522. The client logic102then sends an accept channel message to the X.25 logic106including the X.25 channel identifier, in step524. The logic500terminates in step599.

Error Recovery

During the normal course of operation, it is possible for either the client102or an X.25 channel to terminate. If a bound client terminates, then the binding logic104performs certain functions to “clean up” its associated X.25 logical channel. If a bound X.25 channel terminates, then the binding logic104notifies the client102that the communication channel is no longer available. In either case, the binding logic104unbinds the client102and its associated communication channel.

Alternative Embodiments

In the various embodiments describe heretofore, a connection-oriented client was bound to an X.25 communication channel. However, the present invention is in no way limited to binding connection-oriented clients to X.25 communication channels.

An exemplary embodiment of the present invention utilizes binding logic to bind a connection-oriented client to a communication channel. The binding logic provides a common interface to the clients for all communication channels, and is therefore a convenient implementational element of an exemplary embodiment of the invention. However, the present invention does not require binding logic, as similar logic may be included in either the client logic or the driver logic. Thus, the present invention is in no way limited to using binding logic.

Similarly, an exemplary embodiment of the present invention utilizes connect logic to simplify the design of the client, and is therefore a convenient implementational element of an exemplary embodiment of the invention. However, the present invention does not require separate connect logic, as similar logic may be included in the client. Thus, the present invention is in no way limited to using connect logic.

In an exemplary embodiment of the present invention, predominantly all of the logic described herein is implemented as a set of computer program instructions that are stored in a computer readable medium and executed by an embedded microprocessor system within a network device. Various embodiments of the invention may be implemented in any conventional computer programming language. For example, an embodiment may be implemented in a procedural programming language (e.g., “C”) or an object oriented programming language (e.g., “C++”). Alternative embodiments of the invention may be implemented using discrete components, integrated circuitry, programmable logic used in conjunction with a programmable logic device such as a Field Programmable Gate Array (FPGA) or microprocessor, or any other means including any combination thereof.

The present invention may be embodied in other specific forms without departing from the essence or essential characteristics. The described embodiments are to be considered in all respects only as illustrative and not restrictive.