diff --git a/src/confd/src/core.c b/src/confd/src/core.c index 04652ca2..23f00e35 100644 --- a/src/confd/src/core.c +++ b/src/confd/src/core.c @@ -83,6 +83,11 @@ int sr_plugin_init_cb(sr_session_ctx_t *session, void **priv) if (rc) goto err; + /* Used by, e.g., ietf-interfaces, to update interfaces types */ + rc = sr_session_start(confd.conn, SR_DS_CANDIDATE, &confd.cand); + if (rc) + goto err; + confd.aug = aug_init(NULL, "", 0); if (!confd.aug) goto err; diff --git a/src/confd/src/core.h b/src/confd/src/core.h index f016a21f..c9ebe6b2 100644 --- a/src/confd/src/core.h +++ b/src/confd/src/core.h @@ -64,6 +64,7 @@ static inline void print_val(sr_val_t *val) struct confd { sr_session_ctx_t *session; /* running datastore */ sr_session_ctx_t *startup; /* startup datastore */ + sr_session_ctx_t *cand; /* candidate datastore */ sr_conn_ctx_t *conn; sr_subscription_ctx_t *sub; diff --git a/src/confd/src/ietf-interfaces.c b/src/confd/src/ietf-interfaces.c index 97dc8c9b..8e9b19d9 100644 --- a/src/confd/src/ietf-interfaces.c +++ b/src/confd/src/ietf-interfaces.c @@ -517,12 +517,9 @@ int ietf_interfaces_init(struct confd *confd) goto fail; REGISTER_CHANGE(confd->session, "ietf-interfaces", "/ietf-interfaces:interfaces", 0, ifchange, confd, &confd->sub); - - sr_session_switch_ds(confd->session, SR_DS_CANDIDATE); - REGISTER_CHANGE(confd->session, "ietf-interfaces", "/ietf-interfaces:interfaces", + REGISTER_CHANGE(confd->cand, "ietf-interfaces", "/ietf-interfaces:interfaces", SR_SUBSCR_UPDATE, ifchange_cand, confd, &confd->sub); - sr_session_switch_ds(confd->session, SR_DS_RUNNING); return SR_ERR_OK; fail: ERROR("init failed: %s", sr_strerror(rc));