LCOV - code coverage report
Current view: top level - vnsw/agent/oper - global_system_config.cc (source / functions) Hit Total Coverage
Test: OpenSDN C/C++ coverage (all TARGET_SET jobs) Lines: 33 123 26.8 %
Date: 2026-11-09 02:10:49 Functions: 10 17 58.8 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*
       2             :  * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved.
       3             :  * Copyright Contributors to the OpenSDN project
       4             :  */
       5             : 
       6             : #include <cmn/agent.h>
       7             : #include <init/agent_param.h>
       8             : #include <bind/bind_resolver.h>
       9             : #include <vnc_cfg_types.h>
      10             : #include <oper_db.h>
      11             : #include <controller/controller_init.h>
      12             : #include <forwarding_class.h>
      13             : #include <global_system_config.h>
      14             : #include <config_manager.h>
      15             : #include <cfg/cfg_init.h>
      16             : #include "oper/bgp_as_service.h"
      17             : 
      18             : #define DEFAULT_XMPP_HOLD_TIME 90
      19             : 
      20           2 : void BGPaaServiceParameters::Reset() {
      21           2 :     port_start = 0;
      22           2 :     port_end = 0;
      23           2 : }
      24             : 
      25           2 : void GracefulRestartParameters::Reset() {
      26           2 :     enable_ = true;
      27           2 :     end_of_rib_time_ = 0;
      28           2 :     long_lived_restart_time_ = 0;
      29           2 :     xmpp_helper_enable_ = true;
      30           2 :     config_seen_ = false;
      31           2 : }
      32             : 
      33           2 : void FastConvergenceParameters::Reset() {
      34           2 :     enable = false;
      35           2 :     xmpp_hold_time = DEFAULT_XMPP_HOLD_TIME;
      36           2 : }
      37             : 
      38           0 : void GracefulRestartParameters::Update(autogen::GlobalSystemConfig *cfg) {
      39           0 :     bool changed = false;
      40             : 
      41           0 :     config_seen_ = true;
      42           0 :     if (enable_ != cfg->graceful_restart_parameters().enable) {
      43           0 :         enable_ = cfg->graceful_restart_parameters().enable;
      44           0 :         changed = true;
      45             :     }
      46             : 
      47           0 :     if (xmpp_helper_enable_ !=
      48           0 :         cfg->graceful_restart_parameters().xmpp_helper_enable) {
      49           0 :         xmpp_helper_enable_ =
      50           0 :             cfg->graceful_restart_parameters().xmpp_helper_enable;
      51           0 :         changed = true;
      52             :     }
      53             : 
      54           0 :     if (end_of_rib_time_ !=
      55           0 :         (uint32_t)cfg->graceful_restart_parameters().end_of_rib_timeout) {
      56           0 :         end_of_rib_time_ =
      57           0 :             (uint32_t)cfg->graceful_restart_parameters().end_of_rib_timeout;
      58           0 :         changed = true;
      59             :     }
      60             : 
      61           0 :     if (long_lived_restart_time_ !=
      62           0 :         (uint32_t)cfg->graceful_restart_parameters().long_lived_restart_time) {
      63           0 :         long_lived_restart_time_ =
      64           0 :             (uint32_t)cfg->graceful_restart_parameters().long_lived_restart_time;
      65           0 :         changed = true;
      66             :     }
      67             : 
      68           0 :     if (changed) {
      69           0 :         Notify();
      70             :     }
      71           0 : }
      72             : 
      73           0 : void GracefulRestartParameters::Notify() {
      74           0 :     for (GracefulRestartParameters::CallbackList::iterator it =
      75           0 :          callbacks_.begin(); it != callbacks_.end(); it++) {
      76           0 :         (*it)();
      77             :     }
      78           0 : }
      79             : 
      80           2 : void GracefulRestartParameters::Register(GracefulRestartParameters::Callback cb)
      81             : {
      82           2 :     callbacks_.push_back(cb);
      83           2 : }
      84             : 
      85           2 : GlobalSystemConfig::GlobalSystemConfig(Agent *agent) : OperIFMapTable(agent) {
      86           2 :     Reset();
      87           2 : }
      88             : 
      89           4 : GlobalSystemConfig::~GlobalSystemConfig() {
      90           4 : }
      91             : 
      92           0 : void GlobalSystemConfig::ConfigDelete(IFMapNode *node) {
      93           0 :     if (node->IsDeleted()) {
      94           0 :         Reset();
      95             :     }
      96           0 : }
      97             : 
      98           2 : void GlobalSystemConfig::Reset() {
      99           2 :     bgpaas_parameters_.Reset();
     100           2 :     gres_parameters_.Reset();
     101           2 :     fc_params_.Reset();
     102           2 :     cfg_igmp_enable_ = false;
     103           2 : }
     104             : 
     105           0 : void GlobalSystemConfig::ConfigAddChange(IFMapNode *node) {
     106             :     autogen::GlobalSystemConfig *cfg =
     107           0 :         dynamic_cast<autogen::GlobalSystemConfig *>(node->GetObject());
     108             : 
     109           0 :     if (!cfg) {
     110           0 :         Reset();
     111           0 :         return;
     112             :     }
     113             : 
     114             :     //Populate BGP-aas params
     115           0 :     if ((bgpaas_parameters_.port_start !=
     116           0 :                     cfg->bgpaas_parameters().port_start) ||
     117           0 :         (bgpaas_parameters_.port_end !=
     118           0 :                     cfg->bgpaas_parameters().port_end)) {
     119           0 :         bgpaas_parameters_.port_start = cfg->bgpaas_parameters().port_start;
     120           0 :         bgpaas_parameters_.port_end = cfg->bgpaas_parameters().port_end;
     121             :         // update BgpaaS session info
     122             :         agent()->oper_db()->bgp_as_a_service()->
     123           0 :                                 UpdateBgpAsAServiceSessionInfo();
     124             :     }
     125             : 
     126             :     //Populate fast convergence params
     127           0 :     if ((fc_params_.enable !=
     128           0 :                     cfg->fast_convergence_parameters().enable) ||
     129           0 :         (fc_params_.xmpp_hold_time !=
     130           0 :                     cfg->fast_convergence_parameters().xmpp_hold_time)) {
     131           0 :         fc_params_.enable = cfg->fast_convergence_parameters().enable;
     132           0 :         fc_params_.xmpp_hold_time =
     133           0 :                     cfg->fast_convergence_parameters().xmpp_hold_time;
     134             :         // if fc_enabled is not set, use default hold time
     135           0 :         if (!fc_params_.enable)
     136           0 :             fc_params_.xmpp_hold_time = DEFAULT_XMPP_HOLD_TIME;
     137             :         // update hold time in existing xmpp sessions
     138           0 :         agent()->controller()->XmppServerUpdate(fc_params_.xmpp_hold_time);
     139             :     }
     140             : 
     141           0 :     if (cfg_igmp_enable_ != cfg->igmp_enable()) {
     142             : 
     143           0 :         cfg_igmp_enable_ = cfg->igmp_enable();
     144             : 
     145           0 :         agent()->cfg()->cfg_vm_interface_table()->NotifyAllEntries();
     146             :     }
     147             : 
     148             :     //Populate gres params
     149           0 :     gres_parameters_.Update(cfg);
     150             : }
     151             : 
     152           0 : void GlobalSystemConfig::ConfigManagerEnqueue(IFMapNode *node) {
     153           0 :     agent()->config_manager()->AddGlobalSystemConfigNode(node);
     154           0 : }
     155             : 
     156         109 : GracefulRestartParameters &GlobalSystemConfig::gres_parameters() {
     157         109 :     return gres_parameters_;
     158             : }
     159             : 
     160        1202 : bool GlobalSystemConfig::cfg_igmp_enable() const {
     161        1202 :     return cfg_igmp_enable_;
     162             : }
     163             : 
     164           0 : void GlobalSystemConfig::FillSandeshInfo(GlobalSystemConfigResp *resp)
     165             : {
     166           0 :   BGPaaSSandeshData bgp_params;
     167           0 :   bgp_params.set_port_start(bgpaas_parameters_.port_start);
     168           0 :   bgp_params.set_end_port(bgpaas_parameters_.port_end);
     169           0 :   GracefulRestartSandeshData graceful_restart;
     170           0 :   graceful_restart.set_enable(gres_parameters_.enable());
     171           0 :   graceful_restart.set_end_of_rib_time(gres_parameters_.end_of_rib_time());
     172           0 :   graceful_restart.set_xmpp_helper_enable(gres_parameters_.xmpp_helper_enable());
     173           0 :   graceful_restart.set_config_seen(gres_parameters_.config_seen());
     174           0 :   IgmpSandeshData igmp_params;
     175           0 :   igmp_params.set_cfg_igmp_enable(cfg_igmp_enable());
     176           0 :   resp->set_bgp_parameters(bgp_params);
     177           0 :   resp->set_llgr_parameters(graceful_restart);
     178           0 :   resp->set_igmp_parameters(igmp_params);
     179           0 : }
     180             : 
     181           0 : void GlobalSystemConfigReq::HandleRequest() const {
     182           0 :     GlobalSystemConfigResp *resp = new GlobalSystemConfigResp();
     183           0 :     Agent *agent = Agent::GetInstance();
     184           0 :     GlobalSystemConfig  *global_sys_config = agent->oper_db()->global_system_config();
     185           0 :     if (!global_sys_config) {
     186           0 :         resp->set_more(false);
     187           0 :         resp->Response();
     188           0 :         return;
     189             :     }
     190           0 :     resp->set_context(context());
     191           0 :     global_sys_config->FillSandeshInfo(resp);
     192           0 :     resp->set_more(false);
     193           0 :     resp->Response();
     194           0 :     return;
     195             : }

Generated by: LCOV version 1.14