/********************************************************************** caller: self prototype: ANSC_STATUS CosaDmlNeighdiscIfSetCfg ( ANSC_HANDLE hContext, PCOSA_DML_NEIGHDISC_IF_CFG pCfg ); Description: The API the NEIGHDISC configuration. Arguments: ANSC_HANDLE hContext, PCOSA_DML_NEIGHDISC_IF_CFG pCfg Return: The status of the operation. **********************************************************************/ ANSC_STATUS CosaDmlNeighdiscIfSetCfg ( ANSC_HANDLE hContext, PCOSA_DML_NEIGHDISC_IF_CFG pCfg ) { UtopiaContext utctx = {0}; char out[256] = {0}; if ( g_neighdisc_interface.Cfg.InstanceNumber != pCfg->InstanceNumber ) return ANSC_STATUS_CANT_FIND; /*handle syscfg stuff*/ if (!Utopia_Init(&utctx)) return ANSC_STATUS_FAILURE; if (!AnscEqualString(pCfg->Alias, g_neighdisc_interface.Cfg.Alias, TRUE)) Utopia_RawSet(&utctx,NULL,SYSCFG_FORMAT_NEIGHDISC_IF"_alias",pCfg->Alias); if (pCfg->RetransTimer != g_neighdisc_interface.Cfg.RetransTimer) { sprintf(out, "%d", pCfg->RetransTimer); Utopia_RawSet(&utctx,NULL,SYSCFG_FORMAT_NEIGHDISC_IF"_RetransTimer",out); /*this is so called backend implementation*/ _write_sysctl_file(RetransTimer_SYSCTL_FILE, pCfg->RetransTimer); } if (pCfg->RtrSolicitationInterval != g_neighdisc_interface.Cfg.RtrSolicitationInterval) { sprintf(out, "%d", pCfg->RtrSolicitationInterval); Utopia_RawSet(&utctx,NULL,SYSCFG_FORMAT_NEIGHDISC_IF"_RtrSolicitationInterval",out); /*this is so called backend implementation*/ /*RtrSolicitationInterval is in the unit of millisecond, but kernel wants seconds.*/ _write_sysctl_file(RtrSolicitationInterval_SYSCTL_FILE, (pCfg->RtrSolicitationInterval/1000 ? pCfg->RtrSolicitationInterval/1000:1)); } if (pCfg->MaxRtrSolicitations != g_neighdisc_interface.Cfg.MaxRtrSolicitations) { sprintf(out, "%d", pCfg->MaxRtrSolicitations); Utopia_RawSet(&utctx,NULL,SYSCFG_FORMAT_NEIGHDISC_IF"_MaxRtrSolicitations",out); /*this is so called backend implementation*/ _write_sysctl_file(MaxRtrSolicitations_SYSCTL_FILE, pCfg->MaxRtrSolicitations); } Utopia_Free(&utctx,1); AnscCopyMemory(&g_neighdisc_interface.Cfg, pCfg, sizeof(*pCfg)); return ANSC_STATUS_SUCCESS; }
static int RLog_SaveConf(const PCOSA_DML_RLOG conf) { UtopiaContext ctx; char param[256]; if (!Utopia_Init(&ctx)) return -1; if (conf->Enable) Utopia_RawSet(&ctx, NULL, RLOG_CFG_ENABLE, "1"); else Utopia_RawSet(&ctx, NULL, RLOG_CFG_ENABLE, "0"); Utopia_RawSet(&ctx, NULL, RLOG_CFG_HOST, conf->Host); snprintf(param, sizeof(param), "%d", conf->Port); Utopia_RawSet(&ctx, NULL, RLOG_CFG_PORT, param); Utopia_Free(&ctx, 1); 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; }