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

Generated by: LCOV version 1.14