static int 
RLog_LoadConf(PCOSA_DML_RLOG conf)
{
    UtopiaContext ctx;
    char param[256];

    if (!Utopia_Init(&ctx))
        return -1;

    memset(conf, 0, sizeof(*conf));

    Utopia_RawGet(&ctx, NULL, RLOG_CFG_ENABLE, param, sizeof(param));
    if (atoi(param) == 1)
        conf->Enable = TRUE;
    else
        conf->Enable = FALSE;

    Utopia_RawGet(&ctx, NULL, RLOG_CFG_HOST, conf->Host, sizeof(conf->Host));

    Utopia_RawGet(&ctx, NULL, RLOG_CFG_PORT, param, sizeof(param));
    conf->Port = atoi(param);
    
    /* could not change */
    conf->Protocol = COSA_DML_RLOG_PROTO_UDP;
    snprintf(conf->Patterns, sizeof(conf->Patterns), "*.*");

    Utopia_Free(&ctx, 0);
    return 0;
}
ANSC_STATUS
CosaDmlNeighdiscIfGetEntry
    (
        ANSC_HANDLE                 hContext,
        ULONG                       ulIndex,
        PCOSA_DML_NEIGHDISC_IF_FULL        pEntry
    )
{
    UtopiaContext utctx = {0};
    char out[256] = {0};
    int  need_write = 0;

    if (!Utopia_Init(&utctx))
        return ANSC_STATUS_FAILURE;

    memset(out, 0, sizeof(out));
    Utopia_RawGet(&utctx,NULL,SYSCFG_FORMAT_NEIGHDISC_IF"_inst_num",out,sizeof(out));
    if (!out[0] || !(atoi(out)))
    {
        /*the first time system boots up*/
        need_write = 1;
        strcpy(out, "1");
        Utopia_RawSet(&utctx,NULL,SYSCFG_FORMAT_NEIGHDISC_IF"_inst_num",out);
    }
    g_neighdisc_interface.Cfg.InstanceNumber = atoi(out);

    memset(out, 0, sizeof(out));
    Utopia_RawGet(&utctx,NULL,SYSCFG_FORMAT_NEIGHDISC_IF"_alias",out,sizeof(out));
    if (!out[0])
    {
        /*the first time system boots up*/
        need_write = 1;
        strcpy(out, "InterfaceSetting1");
        Utopia_RawSet(&utctx,NULL,SYSCFG_FORMAT_NEIGHDISC_IF"_alias",out);
    }
    safe_strcpy(g_neighdisc_interface.Cfg.Alias, out, sizeof(g_neighdisc_interface.Cfg.Alias));

    /*we don't support writing to these variables*/
    g_neighdisc_interface.Cfg.bEnabled   = TRUE;
    g_neighdisc_interface.Cfg.bNUDEnable = TRUE;
    g_neighdisc_interface.Cfg.bRSEnable  = TRUE;

    Utopia_RawGet(&utctx,NULL,SYSCFG_FORMAT_NEIGHDISC_IF"_RetransTimer",out,sizeof(out));
    if (!out[0] || !(atoi(out)))
        g_neighdisc_interface.Cfg.RetransTimer = 1000;
    else
        g_neighdisc_interface.Cfg.RetransTimer = atoi(out);

    Utopia_RawGet(&utctx,NULL,SYSCFG_FORMAT_NEIGHDISC_IF"_RtrSolicitationInterval",out,sizeof(out));
    if (!out[0] || !(atoi(out)))
        g_neighdisc_interface.Cfg.RtrSolicitationInterval = 4000;
    else
        g_neighdisc_interface.Cfg.RtrSolicitationInterval = atoi(out);

    Utopia_RawGet(&utctx,NULL,SYSCFG_FORMAT_NEIGHDISC_IF"_MaxRtrSolicitations",out,sizeof(out));
    if (!out[0] || !(atoi(out)))
        g_neighdisc_interface.Cfg.MaxRtrSolicitations = 3;
    else
        g_neighdisc_interface.Cfg.MaxRtrSolicitations = atoi(out);

    Utopia_Free(&utctx,need_write);                    

    AnscCopyMemory(pEntry, &g_neighdisc_interface, sizeof(*pEntry));

    /*handle backend*/
    _apply_kernel_params(&pEntry->Cfg);

    return ANSC_STATUS_SUCCESS;
}