BSR connection relay

BSR connection relay

Summary

bsr operates on two channels for one resource. Each channel is established in the opposite direction to each other, and operates as P2P without distinguishing between the server and the client.

In order to relay bsr communication, DRX also uses two channels. When DRX connection procedure is added, the number of connections increases to six.
In the local DRX, only four connections are visible except for the connection state between the remote DRX and the remote bsr.

Structure

drx-ctl connections all
------------------------------------------------------------------------------------------- Name Type local-bsr-ip State local-drx-ip State remote-drx-ip ------------------------------------------------------------------------------------------- r0-node2-node1 data (local-bsr) -established-> (local-drx) <-bridged----- (remote-drx) r0-node2-node1 meta (local-bsr) <-established- (local-drx) -----bridged-> (remote-drx) ------------------------------------------------------------------------------------------- All connections : 2, Established : 2

Each resource operates completely independently, and one resource consists of two channels. In the above output, the first channel is the Acceptor and the second channel is the Connector.
One channel manages two connections (local bsr, remote drx).

The connection of each channel including remote drbd is expressed as follows.

 

  • Acceptor

    • Receive remote DRX access through the outside IP / Port of the resource file.

    • Receive local bsr access through the inside IP / Port of the resource file.

  • Connector

    • Connect to outside IP / Port of remote DRX.

    • Connect to local bsr

When connecting to DRX, the channel type (meta / data) of each channel is undefined. When a connection with bsr is established, channel type is received from bsr.

Connection States

Category

States

Channel type

Description

Action

Category

States

Channel type

Description

Action

Preparing

allocating

All

Allocating memory to BAB.

Switches to 'bridging' state when memory allocation is complete.

Connection to
remote DRX

bridging

All

Attempting to connect to remote DRX.

Switches to 'bridged' state when connection is complete.

bridged

All

Connected with remote DRX.

Switches to 'waiting' or 'connecting' state immediately.

Connection to
local bsr

waiting

Acceptor

Waiting for local bsr to connect.

Switches to 'connected' state when connected with bsr.

Once connected to bsr, switch to the connected state

connecting

Connector

Connecting to local bsr.

After receiving the channel type from the remote DRX, connect to local bsr.
Switches to 'establishing' state when connected with bsr.

connected

Acceptor

Connected with local bsr.

It receives the channel type from local bsr, transfers it to the remote DRX.
And switches to 'establishing' state.

establishing

All

Finishing connection process.

Connector: forward 'established' event to remote DRX and switches to 'established' state.
Acceptor: When 'established' event is received from the remote DRX, it is switches to 'established' state.

established

All

Connection process is complete.

Starts relaying packet data of bsr.

Disconnecting

close_pending

All

Cleanup steps before closing the connection

Transmits the remaining data of the BAB and switches to 'stopping' state.

stopping

All

Closing connection

Closes current connection and switches to 'stopped' state.

stopped

All

Connection closed

Prepares for reconnection and switches to 'bridging' state.

State Changes

The state changes for each channel in normal connection is as follows.

 

State change when disconnected:

  • Disconnected with local bsr

    1. Both channels are switchs to 'stopping' state. (data channel goes through 'close_pending' state to empty the BAB.)

    2. When the operation to close the connection is completed, it is switches to 'stopped' state.

    3. Switches to 'connection' or 'waiting' state for reconnection with local bsr.

  • Disconnected between remote bsr and remote DRX

    1. As in the above situation, local DRX is also switches to 'connecting' or 'waiting' state through 'stopping' and 'stopped' state.

    2. Since the local bsr can reconnect, the following operation is performed for each channel.

      1. Acceptor: bsr will be connected and switches to 'establishing' state through 'connected' state.

      2. Connector: Since remote DRX is not connected to remote bsr, it remains 'connected' state.

  • Disconnected with remote DRX

    1. Both channels are switchs to 'stopping' state. (data channel goes through 'close_pending' state to empty the BAB.)

    2. When the operation to close the connection is completed, it is switches to 'stopped' state.

    3. Switches to 'bridging' state for reconnection with remote DRX.

Situation According To Connection States

Acceptor

Connector

Situation

Acceptor

Connector

Situation

allocating

allocating

It can be seen when the size of the TX BAB is very large or it is allocated to virtual memory and is slow.

bridging

bridging

Remote DRX is off, or local DRX and remote DRX can not connect to each other.

bridging

connecting

Remote DRX can not connect to local DRX.

waiting

bridging

Can not connect to remote DRX.

waiting

connecting

The resource in the local bsr is not in the 'connecting' state or it can not connect to the local DRX.

establishing

connecting

Local bsr is connected, but remote DRX can not connect to remote bsr.

established

connecting

Local bsr can connect to local DRX, but local DRX can not connect to local bsr.

establishing

established

Remote bsr can connect to remote DRX, but remote DRX can not connect to remote bsr.

waiting

established

Local DRX can connect to local bsr, but local bsr can not connect to local DRX.

established

connecting

Remote DRX can connect to remote bsr, but remote bsr can not connect to remote DRX.