3.3.4.4.4 COMM_COMMAND Is CMD_JOINING

A downstream partner sent CMD_JOINING, trying to establish a connection session (3.3.4.6). The server MUST be the upstream partner. The server MUST have a corresponding outbound connection to the downstream partner. This connection can be a volatile connection.

The upstream partner MUST perform additional verification for the CMD_JOINING packet.

P_IN.COMM_JOIN_GUID MUST exist and be unique, or the server MUST NOT reply to the client (section 3.3.4.6). P_IN.REPLICA_VERSION_GUID MUST exist and be unique, or the server MUST NOT reply to the client.

If the local member is still in the initial sync state, FRS MUST NOT reply to the client. FRS MUST NOT Join a downstream partner while in the initial sync state.

If the connection is not an outbound connection, FRS MUST NOT reply to the client.

A connection session cannot be established if the partner times are out of sync by an implementation-specific Maximum Partner Clock Skew value (unless this is a volatile connection for SYSVOL seeding). FRS MUST compare the time when the packet was built by the partner (P_IN.COMM_JOIN_TIME) to the time when the packet was received (the current time). If the time difference is larger than the Maximum Partner Clock Skew value, the connection session establishment process MUST fail by not replying to the client.<81>

 If all tests are passed, FRS MUST set P_IN.COMM_JOIN_GUID to be its outbound-connection connection session GUID (see section 3.1.1.5). It MUST also set P_IN.COMM_VVECTOR to be its outbound-connection version vector.

It MUST set the outbound connection state to be JOINED. If P_IN.COMM_LAST_JOIN_TIME is 1, or the last connection session establishment time of the outbound connection is 1, FRS MUST perform a connection VVJoin.

The upstream partner MUST answer the connection session establishment request with a CMD_JOINED packet:

  • COMM_COMMAND MUST be CMD_JOINED (0x128).

  • COMM_JOIN_GUID MUST be P_IN.COMM_JOIN_GUID.

  • COMM_LAST_JOIN_TIME MUST be the current time.

  • Other elements are specified in section 3.3.4.4.1.

After the CMD_JOINED packet is sent:

  • If a connection VVJoin needs to be performed, FRS MUST go through the process specified in the following section.

  • If a connection VVJoin does not need to be performed, the upstream partner MUST send unknown change orders to the downstream partner based on the downstream partner version vector.