3.1.4 Message Processing Events and Sequencing Rules

When any RPC method is received for a domain-based DFS namespace that is hosted by the server, the server MUST first check whether the DFS namespace is up-to-date with any changes that have happened on it. This check MUST be done against the PDC. When any changes are detected, the server MUST first bring the namespace it hosts up-to-date and then process the RPC method received. The details of this operation are implementation-specific.

For a domainv1-based DFS namespace, if the pKTGuid value matches the cached value, the server MAY work on a cached copy of the pKT attribute. The update operation MUST be committed by issuing LDAP writes for both the updated pKT attribute and a newly generated pKTGuid attribute. Using the same LDAP update operation for both attributes ensures atomicity of the update.

For non-update operations in domain-based DFS namespaces, DFS servers MAY retrieve DFS metadata from any DC within the domain. For update operations in domain-based DFS namespaces, DFS servers MUST retrieve and store DFS metadata on the PDC.

Unless noted otherwise, DFS servers MUST process host names as case-insensitive string literals. The DFS server MUST NOT, for example, consider a DNS-conformant host name (as specified in [RFC1034]) and an IP address as equivalent, even if the host name resolves via DNS to the IP address.

This protocol uses Win32 error codes. These values are taken from the Windows error number space, as specified in [MS-ERREF]. Vendors SHOULD reuse those values with their indicated meanings. Choosing any other value runs the risk of future collisions.<29>

The remainder of this section describes the methods used in the DFS: Namespace Management Protocol. The following table lists opnum values associated with the methods described in this document, as well as the section where each is described.

Methods in RPC Opnum Order

Method

Description

NetrDfsManagerGetVersion

A basic method that returns the version number of the DFS server.

Opnum: 0

NetrDfsAdd

A basic method that creates a new DFS link or that adds a new target to an existing link of a DFS namespace.

Opnum: 1

NetrDfsRemove

A basic method that removes a link or a link target from a DFS namespace.

Opnum: 2

NetrDfsSetInfo

A basic method that sets or modifies information relevant to a specific DFS root, DFS root target, DFS link, or DFS link target.

Opnum: 3

NetrDfsGetInfo

A basic method that returns information about a DFS root, a DFS link, or a DFS namespace.

Opnum: 4

NetrDfsEnum

A basic method that enumerates the DFS roots hosted on a server or the DFS links of a namespace on the server.

Opnum: 5

NetrDfsMove

A basic method that renames or moves one or more DFS links. <30>

Opnum: 6

Opnum7NotUsedOnWire

Reserved for local use.

Opnum: 7

Opnum8NotUsedOnWire

Reserved for local use.

Opnum: 8

Opnum9NotUsedOnWire

Reserved for local use.

Opnum: 9

NetrDfsAddFtRoot

A root target method that creates a new domainv1-based DFS namespace or that adds a root target to an existing namespace.

Opnum: 10

NetrDfsRemoveFtRoot

A root target method that removes a root target from a domain-based DFS namespace or that removes a domain-based DFS namespace.

Opnum: 11

NetrDfsAddStdRoot

A stand-alone namespace method that creates a new stand-alone DFS namespace.

Opnum: 12

NetrDfsRemoveStdRoot

A stand-alone namespace method that deletes a stand-alone DFS namespace.

Opnum: 13

NetrDfsManagerInitialize

A basic method that instructs the DFS server to discard its current state and to reinitialize itself from its stored configuration settings.

Opnum: 14

NetrDfsAddStdRootForced

A stand-alone namespace method that creates a new stand-alone DFS namespace without verifying the existence of the DFS root target share.

Opnum: 15

NetrDfsGetDcAddress

A domain-based namespace method that returns the host name of the DC for the client to use during the following processes: creating a domain-based DFS namespace, adding a root target to a domain-based DFS namespace, removing a root target from a domain-based DFS namespace, or removing a domain-based DFS namespace.

Opnum: 16

NetrDfsSetDcAddress

A domain-based namespace method that instructs a DFS server to use a specific DC for DFS metadata access in a domain-based DFS namespace.

Opnum: 17

NetrDfsFlushFtTable

A root target method that instructs the DFS server on a DC to purge a domain-based DFS entry from its referral cache.

Opnum: 18

NetrDfsAdd2

An extended method that creates a new DFS link or that adds a new target to an existing link of a DFS namespace.

Opnum: 19

NetrDfsRemove2

An extended method that removes a link or a link target.

Opnum: 20

NetrDfsEnumEx

An extended method that enumerates DFS roots hosted on a machine or DFS links of a namespace.

Opnum: 21

NetrDfsSetInfo2

An extended method that sets or modifies the information that is associated with a DFS root, a DFS root target, a DFS link, or a DFS link target.

Opnum: 22

NetrDfsAddRootTarget

 A basic method that creates a stand-alone DFS namespace, a domainv1-based DFS namespace, or a domainv2-based DFS namespace.<31>

Opnum: 23

NetrDfsRemoveRootTarget

A basic method that deletes a stand-alone DFS namespace, a domainv1-based DFS namespace, or a domainv2-based DFS namespace.<32>

Opnum: 24

NetrDfsGetSupportedNamespaceVersion

A basic method that determines the supported DFS metadata version number. This method is useful in determining an appropriate version number to pass to the NetrDfsAddRootTarget() method.<33>

Opnum: 25

In the preceding table, the term "Reserved for local use" means that the client MUST NOT send the opnum, and the server behavior is undefined<34> because it does not affect interoperability.