[cifs-protocol] MS-ADTS 6.2.2.3.4.3 KCC ColorVertices
Douglas Bagnall
douglas.bagnall at catalyst.net.nz
Fri Jul 10 01:27:42 UTC 2015
hi Dochelp,
In the ColorVertices function:
LET localSiteVertex be the vertex in graph.Vertices such that
localSiteVertex.ID = objectGUID of the local DC's site object
FOR each v in g.Vertices
FOR each interSiteTransport object t that is a child of the
CN=Inter-Site Transports child of the CN=Sites child of the
config NC
IF localSiteVertex.Color = COLOR.RED and t!name ≠ "IP"
and FLAG_CR_NTDS_DOMAIN bit is set in cr!systemFlags
Skip t
ENDIF
IF no edge e exists in g.Edges such that e.VertexIDs
contains v.ID
Skip t
ENDIF
LET partialReplicaOkay be TRUE if and only if
localSiteVertex.Color = COLOR.BLACK
LET bh be the result of GetBridgeheadDC(
localSiteVertex.ID, cr, t, partialReplicaOkay,
detectFailedDCs)
IF bh = null
/* No bridgehead DC is currently available. */
SET foundFailedDCs to TRUE
Skip t
ENDIF
APPEND t!objectGUID to v.AcceptRedRed
APPEND t!objectGUID to v.AcceptBlack
ENDFOR
ENDFOR
... GetBridgeheadDC() is being called for the localSiteVertex in a
loop over all the graph vertices. That's this bit in the middle:
LET partialReplicaOkay be TRUE if and only if
localSiteVertex.Color = COLOR.BLACK
LET bh be the result of GetBridgeheadDC(
localSiteVertex.ID, cr, t, partialReplicaOkay,
detectFailedDCs)
which seems invariant with regard to the outer loop -- it will produce
the same answers for each vertex -- and somewhat irrelevant for the
Accept* lists on the remote vertex. It looks to me like it would make
sense to use the vertex v in place of localSiteVertex in this part.
However, the spec is very determined to generate the localSiteVertex
variable for something, so this doesn't look like a simple typo. In
effect this looks like a roundabout way of saying nothing gets added to
anyone's Accept* lists when there is no local bridgehead.
regards,
Douglas
More information about the cifs-protocol
mailing list