@@ -1207,6 +1207,29 @@ schema_diff_ext_inst(const struct lysc_ext_instance *ext, struct lyd_node *chang
12071207 return rc ;
12081208}
12091209
1210+ /**
1211+ * @brief Create leaf-list of enabled features as part of cmp YANG data.
1212+ *
1213+ * @param[in] mod Module to use.
1214+ * @param[in,out] parent Node to append to.
1215+ * @return LY_ERR value.
1216+ */
1217+ static LY_ERR
1218+ schema_diff_enabled_features (const struct lys_module * mod , struct lyd_node * parent )
1219+ {
1220+ LY_ARRAY_COUNT_TYPE u ;
1221+
1222+ if (!mod -> implemented ) {
1223+ return LY_SUCCESS ;
1224+ }
1225+
1226+ LY_ARRAY_FOR (mod -> compiled -> features , u ) {
1227+ LY_CHECK_RET (lyd_new_term (parent , NULL , "enabled-feature" , mod -> compiled -> features [u ], 0 , NULL ));
1228+ }
1229+
1230+ return LY_SUCCESS ;
1231+ }
1232+
12101233/**
12111234 * @brief Create cmp YANG data from module imports.
12121235 *
@@ -1222,6 +1245,7 @@ schema_diff_imports(const struct lys_module *mod, const struct lysc_node *schema
12221245 LY_ARRAY_COUNT_TYPE u ;
12231246 char * keys = NULL ;
12241247 const struct lys_module * imp ;
1248+ struct lyd_node * mod_list ;
12251249
12261250 LY_ARRAY_FOR (mod -> parsed -> imports , u ) {
12271251 imp = mod -> parsed -> imports [u ].module ;
@@ -1238,7 +1262,8 @@ schema_diff_imports(const struct lys_module *mod, const struct lysc_node *schema
12381262 }
12391263
12401264 /* add the imports, recursively */
1241- LY_CHECK_GOTO (rc = lyd_new_list (diff_list , NULL , schema -> name , 0 , NULL , imp -> name , imp -> revision ), cleanup );
1265+ LY_CHECK_GOTO (rc = lyd_new_list (diff_list , NULL , schema -> name , 0 , & mod_list , imp -> name , imp -> revision ), cleanup );
1266+ LY_CHECK_GOTO (rc = schema_diff_enabled_features (imp , mod_list ), cleanup );
12421267 LY_CHECK_GOTO (rc = schema_diff_imports (imp , schema , diff_list ), cleanup );
12431268 }
12441269
@@ -2023,6 +2048,7 @@ lysc_diff_tree(const struct lys_module *mod1, const struct lys_module *mod2, con
20232048 LY_CHECK_GOTO (rc = lyd_new_inner (diff_list , NULL , "source" , 0 , & mod_cont ), cleanup );
20242049 LY_CHECK_GOTO (rc = lyd_new_term (mod_cont , NULL , "module" , mod1 -> name , 0 , NULL ), cleanup );
20252050 LY_CHECK_GOTO (rc = lyd_new_term (mod_cont , NULL , "revision" , mod1 -> revision , 0 , NULL ), cleanup );
2051+ LY_CHECK_GOTO (rc = schema_diff_enabled_features (mod1 , mod_cont ), cleanup );
20262052
20272053 imp_schema = lys_find_path (NULL , diff_list -> schema , "source-import" , 0 );
20282054 LY_CHECK_GOTO (rc = schema_diff_imports (mod1 , imp_schema , diff_list ), cleanup );
@@ -2031,6 +2057,7 @@ lysc_diff_tree(const struct lys_module *mod1, const struct lys_module *mod2, con
20312057 LY_CHECK_GOTO (rc = lyd_new_inner (diff_list , NULL , "target" , 0 , & mod_cont ), cleanup );
20322058 LY_CHECK_GOTO (rc = lyd_new_term (mod_cont , NULL , "module" , mod2 -> name , 0 , NULL ), cleanup );
20332059 LY_CHECK_GOTO (rc = lyd_new_term (mod_cont , NULL , "revision" , mod2 -> revision , 0 , NULL ), cleanup );
2060+ LY_CHECK_GOTO (rc = schema_diff_enabled_features (mod2 , mod_cont ), cleanup );
20342061
20352062 imp_schema = lys_find_path (NULL , diff_list -> schema , "target-import" , 0 );
20362063 LY_CHECK_GOTO (rc = schema_diff_imports (mod2 , imp_schema , diff_list ), cleanup );
0 commit comments