Annex C: Software Module Management UUID Usage 
C.1 Overview 
The Software Module Management mechanism uses a UUID (see RFC 4122 [28] for a complete definition of UUID) to uniformly identify a Deployment Unit across Agents. Since Deployment Units can be installed multiple times on a single Agent (e.g., multiple versions of the same Deployment Unit or the same version of the Deployment Unit on different Execution Environments), a Deployment Unit on a specific Agent is uniquely identified by the combination of UUID, version, and Execution Environment that the Deployment Unit is installed upon, but the UUID is still the uniform unique identifier of that Deployment Unit (i.e., this means that the UUID will be the same independent of the version of the Deployment Unit). A version 5 UUID is a method for generating UUIDs from “names” that are unique within some “namespace”, which means that a UUID generated by different actors but using the same “name” and “namespace” will cause the generation of the same exact UUID. The Software Module Management mechanism requires, whether the Controller or the Agent generates the UUID, that the UUID be generated in the exact same manner following both the rules defined in Section 4.3 / RFC 4122 [28] and the rules defined within this Annex.
Section 4.3 / RFC 4122 [28] identifies the following high-level requirements for a Version 3 UUID:
The UUIDs generated at different times from the same name in the same namespace MUST be equal.
The UUIDs generated from two different names in the same namespace should be different (with very high probability).
The UUIDs generated from the same name in two different namespaces should be different with (very high probability).
If two UUIDs that were generated from names are equal, then they were generated from the same name in the same namespace (with very high probability).
The remainder of this Annex defines additional rules that MUST be followed by the Controller and Agent when generating a UUID as well as under what circumstances a Agent will be required to generate a UUID.
C.2 UUID Generation Requirements 
The following set of additional requirements ensures that the Version 5 UUID will be uniform regardless of whether the Controller or Agent generates it:
The FQDN “namespace” UUID as defined in Appendix C /RFC 4122 [28] MUST be used: 6ba7b810-9dad-11d1-80b4-00c04fd430c8
The “name” will be the FQDN of the Deployment Unit, which MUST be a combination of the Deployment Unit’s Name (the value that will be contained within the DeploymentUnit.{i}.Name Parameter) and the Deployment Unit Vendor’s domain name (the value that will be contained within the DeploymentUnit.{i}.Vendor Parameter). The format is: ‘<Name> + “.” + <Vendor> + “.”’. For example, if the DU Vendor is “broadband-forum.org” and the DU Name is “sample1”, then the FQDN of the DU is “sample1.broadband-forum.org.”
As the Deployment Unit’s Name is used within generation of the FQDN, it MUST be altered if it contains any characters other than 0-9, a-z, A-Z, _ (underscore), or - (hyphen). Percent-encoding MUST be used to replace any other characters (i.e., a ‘%’ character followed by the ASCII hex value of the replaced character). For example, a Deployment Unit Name of “sample.1” would be converted to “sample%2e1”.
An example of a Version 5 UUID looks like: * 76183ed7-6a38-3890-66ef-a6488efb6690
C.3 Agent Requirements 
There are three circumstances when a Agent MUST generate its own UUID:
- Factory-Installed Deployment Units : a Deployment Unit is installed at factory time without the aid of a Controller
- LAN-Side-Installed Deployment Units : a Deployment Unit is installed by a LAN-Side management mechanism (e.g., UPnP DM SMS, CLI, or GUI) without the aid of a Controller
- Controller-Installed Deployment Units : a Deployment Unit is installed by a Controller, but the Controller either does not send the UUID or sends an empty string as the UUID within the Install operation of the ChangeDUState RPC.
In these circumstances the Agent MUST generate the UUID as it installs the Deployment Unit. The Controller can discover / validate the generated UUID by either inspecting the DUStateChangeComplete or inspecting the Deployment Unit Data Model table.