osaf/services/saf/immsv/immnd/ImmModel.cc                          |  39 
++++++++-
 osaf/services/saf/immsv/immnd/ImmSearchOp.cc                       |   2 +-
 osaf/services/saf/immsv/immnd/ImmSearchOp.hh                       |   4 +-
 osaf/services/saf/immsv/schema/SAI-AIS-IMM-XSD-A.01.02_OpenSAF.xsd |  10 +-
 4 files changed, 40 insertions(+), 15 deletions(-)


diff --git a/osaf/services/saf/immsv/immnd/ImmModel.cc 
b/osaf/services/saf/immsv/immnd/ImmModel.cc
--- a/osaf/services/saf/immsv/immnd/ImmModel.cc
+++ b/osaf/services/saf/immsv/immnd/ImmModel.cc
@@ -72,7 +72,7 @@ struct AttrInfo
 {
     AttrInfo():mValueType(0), mFlags(0), mNtfId(0){}
     SaUint32T       mValueType;
-    SaUint32T       mFlags;
+    SaImmAttrFlagsT mFlags;
     SaUint32T       mNtfId;
     ImmAttrValue    mDefaultValue;
 };
@@ -2219,6 +2219,7 @@ ImmModel::classCreate(const ImmsvOmClass
     int illegal=0;
     bool persistentRt = false;
     bool persistentRdn = false;
+    bool useUnknownFlag = false;
     ClassInfo* classInfo = NULL;
     ClassInfo* prevClassInfo = NULL;
     ClassInfo dummyClass(req->classCategory);
@@ -2423,7 +2424,10 @@ ImmModel::classCreate(const ImmsvOmClass
             }
         }
         err = attrCreate(classInfo, attr, attrName);
-        if(err != SA_AIS_OK) {
+        if(err == SA_AIS_ERR_NOT_SUPPORTED) {
+            useUnknownFlag = true;
+            err = SA_AIS_OK;
+        } else if(err != SA_AIS_OK) {
             illegal = 1;
         }
         list = list->next;
@@ -2476,6 +2480,10 @@ ImmModel::classCreate(const ImmsvOmClass
         goto done;
     }
 
+    if(useUnknownFlag) {
+        LOG_NO("At least one attribute in class %s has unsupported attribute 
flag", className.c_str());
+    }
+
     /* All checks passed, now install the class def. */
 
     if(!schemaChange) {
@@ -3054,12 +3062,29 @@ ImmModel::attrCreate(ClassInfo* classInf
             }
         }
 
-        TRACE_5("create attribute '%s'", attrName.c_str());
+        SaImmAttrFlagsT unknownFlags = attr->attrFlags &
+          ~(SA_IMM_ATTR_MULTI_VALUE |
+            SA_IMM_ATTR_RDN |
+            SA_IMM_ATTR_CONFIG |
+            SA_IMM_ATTR_WRITABLE |
+            SA_IMM_ATTR_INITIALIZED |
+            SA_IMM_ATTR_RUNTIME |
+            SA_IMM_ATTR_PERSISTENT |
+            SA_IMM_ATTR_CACHED);
+
+        if(unknownFlags) {
+            /* This error means that at least one attribute flag is not 
supported by OpenSAF,
+             * but because of forward compatibility, future flags must be 
supported.
+             */
+            err = SA_AIS_ERR_NOT_SUPPORTED;
+            TRACE_5("create attribute '%s' with unknown flag(s), attribute 
flag: %llu", attrName.c_str(), attr->attrFlags);
+        } else {
+            TRACE_5("create attribute '%s'", attrName.c_str());
+        }
             
         AttrInfo* attrInfo = new AttrInfo;
         attrInfo->mValueType = attr->attrValueType;
-        osafassert(attr->attrFlags < 0xffffffff);
-        attrInfo->mFlags = (SaUint32T) attr->attrFlags;
+        attrInfo->mFlags = attr->attrFlags;
         attrInfo->mNtfId = attr->attrNtfId;
         if(attr->attrDefaultValue) {
             IMMSV_OCTET_STRING tmpos; //temporary octet string
@@ -3142,13 +3167,13 @@ ImmModel::classDescriptionGet(const IMMS
 
 struct AttrFlagIncludes
 {
-    AttrFlagIncludes(SaUint32T attrFlag) : mFlag(attrFlag) { }
+    AttrFlagIncludes(SaImmAttrFlagsT attrFlag) : mFlag(attrFlag) { }
     
     bool operator() (AttrMap::value_type& item) const {
         return (item.second->mFlags & mFlag) != 0;
     }
     
-    SaUint32T mFlag;
+    SaImmAttrFlagsT mFlag;
 };
 
 struct IdIs
diff --git a/osaf/services/saf/immsv/immnd/ImmSearchOp.cc 
b/osaf/services/saf/immsv/immnd/ImmSearchOp.cc
--- a/osaf/services/saf/immsv/immnd/ImmSearchOp.cc
+++ b/osaf/services/saf/immsv/immnd/ImmSearchOp.cc
@@ -51,7 +51,7 @@ ImmSearchOp::addObject(
 void
 ImmSearchOp::addAttribute(const std::string& attributeName, 
     SaUint32T valueType,
-    SaUint32T flags)
+    SaImmAttrFlagsT flags)
     
 {
     SearchObject& obj = mResultList.back();
diff --git a/osaf/services/saf/immsv/immnd/ImmSearchOp.hh 
b/osaf/services/saf/immsv/immnd/ImmSearchOp.hh
--- a/osaf/services/saf/immsv/immnd/ImmSearchOp.hh
+++ b/osaf/services/saf/immsv/immnd/ImmSearchOp.hh
@@ -32,7 +32,7 @@ struct SearchAttribute
     std::string name;
     ImmAttrValue*     valuep;
     SaImmValueTypeT  valueType;
-    SaUint32T flags;
+    SaImmAttrFlagsT flags;
 
     ~SearchAttribute();
 };
@@ -63,7 +63,7 @@ public:
     void          addAttribute(
                                const std::string& attributeName, 
                                SaUint32T valueType,
-                               SaUint32T flags);
+                               SaImmAttrFlagsT flags);
     void          addAttrValue(const ImmAttrValue& value);
     void          setImplementer(
                                  SaUint32T conn, 
diff --git a/osaf/services/saf/immsv/schema/SAI-AIS-IMM-XSD-A.01.02_OpenSAF.xsd 
b/osaf/services/saf/immsv/schema/SAI-AIS-IMM-XSD-A.01.02_OpenSAF.xsd
--- a/osaf/services/saf/immsv/schema/SAI-AIS-IMM-XSD-A.01.02_OpenSAF.xsd
+++ b/osaf/services/saf/immsv/schema/SAI-AIS-IMM-XSD-A.01.02_OpenSAF.xsd
@@ -59,11 +59,11 @@
                        <xs:documentation>Attribute flags</xs:documentation>
                </xs:annotation>
                <xs:restriction base="xs:string">
-                       <xs:enumeration value="SA_MULTI_VALUE"/>
-                       <xs:enumeration value="SA_WRITABLE"/>
-                       <xs:enumeration value="SA_INITIALIZED"/>
-                       <xs:enumeration value="SA_PERSISTENT"/>
-                       <xs:enumeration value="SA_CACHED"/>
+                       <xs:enumeration ID="0x00000001" value="SA_MULTI_VALUE"/>
+                       <xs:enumeration ID="0x00000200" value="SA_WRITABLE"/>
+                       <xs:enumeration ID="0x00000400" value="SA_INITIALIZED"/>
+                       <xs:enumeration ID="0x00020000" value="SA_PERSISTENT"/>
+                       <xs:enumeration ID="0x00040000" value="SA_CACHED"/>
                </xs:restriction>
        </xs:simpleType>
        <!--

------------------------------------------------------------------------------
Managing the Performance of Cloud-Based Applications
Take advantage of what the Cloud has to offer - Avoid Common Pitfalls.
Read the Whitepaper.
http://pubads.g.doubleclick.net/gampad/clk?id=121054471&iu=/4140/ostg.clktrk
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to