VOL-3551: Decode support for unknown managed entities

Change-Id: I3217bf1df161d9e073046e3c351c7e635ae852f8
diff --git a/generated/classidmap.go b/generated/classidmap.go
index 7538d66..2fe9ea1 100644
--- a/generated/classidmap.go
+++ b/generated/classidmap.go
@@ -23,8 +23,6 @@
 
 package generated
 
-import "fmt"
-
 // ManagedEntityInfo provides ManagedEntity information
 type ManagedEntityInfo struct {
 	New func(params ...ParamData) (*ManagedEntity, error)
@@ -239,12 +237,13 @@
 // LoadManagedEntityDefinition returns a function to create a Managed Entity for a specific
 // Managed Entity class ID
 func LoadManagedEntityDefinition(classID ClassID, params ...ParamData) (*ManagedEntity, OmciErrors) {
-	newFunc, ok := classToManagedEntityMap[classID]
-	if ok {
+	if newFunc, ok := classToManagedEntityMap[classID]; ok {
 		return newFunc(params...)
 	}
-	return nil, NewUnknownEntityError(fmt.Sprintf("managed entity %d (%#x) definition not found",
-		uint16(classID), uint16(classID)))
+	if IsVendorSpecificClassID(classID) {
+		return NewUnknownVendorSpecificME(classID, params...)
+	}
+	return NewUnknownG988ME(classID, params...)
 }
 
 // GetSupportedClassIDs returns an array of Managed Entity Class IDs supported
@@ -264,3 +263,12 @@
 	}
 	return medef.GetAttributeDefinitions(), err
 }
+
+// IsVendorSpecificClassID returns true if the provided class ID is reserved in ITU-T G.988
+// for vendor specific functionality
+func IsVendorSpecificClassID(classID ClassID) bool {
+	// Values below are from Table 11.2.4-1 of ITU-T G.988 (11/2017)
+	return (ClassID(240) <= classID && classID <= ClassID(255)) ||
+		(ClassID(350) <= classID && classID <= ClassID(399)) ||
+		(ClassID(65280) <= classID && classID <= ClassID(65535))
+}
\ No newline at end of file