OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
global_system_config.cc
Go to the documentation of this file.
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>
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 
20  port_start = 0;
21  port_end = 0;
22 }
23 
25  enable_ = true;
26  end_of_rib_time_ = 0;
28  xmpp_helper_enable_ = true;
29  config_seen_ = false;
30 }
31 
33  enable = false;
35 }
36 
37 void GracefulRestartParameters::Update(autogen::GlobalSystemConfig *cfg) {
38  bool changed = false;
39 
40  config_seen_ = true;
41  if (enable_ != cfg->graceful_restart_parameters().enable) {
42  enable_ = cfg->graceful_restart_parameters().enable;
43  changed = true;
44  }
45 
46  if (xmpp_helper_enable_ !=
47  cfg->graceful_restart_parameters().xmpp_helper_enable) {
49  cfg->graceful_restart_parameters().xmpp_helper_enable;
50  changed = true;
51  }
52 
53  if (end_of_rib_time_ !=
54  (uint32_t)cfg->graceful_restart_parameters().end_of_rib_timeout) {
56  (uint32_t)cfg->graceful_restart_parameters().end_of_rib_timeout;
57  changed = true;
58  }
59 
61  (uint32_t)cfg->graceful_restart_parameters().long_lived_restart_time) {
63  (uint32_t)cfg->graceful_restart_parameters().long_lived_restart_time;
64  changed = true;
65  }
66 
67  if (changed) {
68  Notify();
69  }
70 }
71 
73  for (GracefulRestartParameters::CallbackList::iterator it =
74  callbacks_.begin(); it != callbacks_.end(); it++) {
75  (*it)();
76  }
77 }
78 
80 {
81  callbacks_.push_back(cb);
82 }
83 
85  Reset();
86 }
87 
89 }
90 
92  if (node->IsDeleted()) {
93  Reset();
94  }
95 }
96 
100  fc_params_.Reset();
101  cfg_igmp_enable_ = false;
102 }
103 
105  autogen::GlobalSystemConfig *cfg =
106  dynamic_cast<autogen::GlobalSystemConfig *>(node->GetObject());
107 
108  if (!cfg) {
109  Reset();
110  return;
111  }
112 
113  //Populate BGP-aas params
115  cfg->bgpaas_parameters().port_start) ||
117  cfg->bgpaas_parameters().port_end)) {
118  bgpaas_parameters_.port_start = cfg->bgpaas_parameters().port_start;
119  bgpaas_parameters_.port_end = cfg->bgpaas_parameters().port_end;
120  // update BgpaaS session info
121  agent()->oper_db()->bgp_as_a_service()->
122  UpdateBgpAsAServiceSessionInfo();
123  }
124 
125  //Populate fast convergence params
126  if ((fc_params_.enable !=
127  cfg->fast_convergence_parameters().enable) ||
129  cfg->fast_convergence_parameters().xmpp_hold_time)) {
130  fc_params_.enable = cfg->fast_convergence_parameters().enable;
132  cfg->fast_convergence_parameters().xmpp_hold_time;
133  // if fc_enabled is not set, use default hold time
134  if (!fc_params_.enable)
136  // update hold time in existing xmpp sessions
138  }
139 
140  if (cfg_igmp_enable_ != cfg->igmp_enable()) {
141 
142  cfg_igmp_enable_ = cfg->igmp_enable();
143 
145  }
146 
147  //Populate gres params
149 }
150 
153 }
154 
156  return gres_parameters_;
157 }
158 
160  return cfg_igmp_enable_;
161 }
162 
163 void GlobalSystemConfig::FillSandeshInfo(GlobalSystemConfigResp *resp)
164 {
165  BGPaaSSandeshData bgp_params;
166  bgp_params.set_port_start(bgpaas_parameters_.port_start);
167  bgp_params.set_end_port(bgpaas_parameters_.port_end);
168  GracefulRestartSandeshData graceful_restart;
169  graceful_restart.set_enable(gres_parameters_.enable());
170  graceful_restart.set_end_of_rib_time(gres_parameters_.end_of_rib_time());
171  graceful_restart.set_xmpp_helper_enable(gres_parameters_.xmpp_helper_enable());
172  graceful_restart.set_config_seen(gres_parameters_.config_seen());
173  IgmpSandeshData igmp_params;
174  igmp_params.set_cfg_igmp_enable(cfg_igmp_enable());
175  resp->set_bgp_parameters(bgp_params);
176  resp->set_llgr_parameters(graceful_restart);
177  resp->set_igmp_parameters(igmp_params);
178 }
179 
180 void GlobalSystemConfigReq::HandleRequest() const {
181  GlobalSystemConfigResp *resp = new GlobalSystemConfigResp();
182  Agent *agent = Agent::GetInstance();
183  GlobalSystemConfig *global_sys_config = agent->oper_db()->global_system_config();
184  if (!global_sys_config) {
185  resp->set_more(false);
186  resp->Response();
187  return;
188  }
189  resp->set_context(context());
190  global_sys_config->FillSandeshInfo(resp);
191  resp->set_more(false);
192  resp->Response();
193  return;
194 }
GracefulRestartParameters & gres_parameters()
void FillSandeshInfo(GlobalSystemConfigResp *resp)
static Agent * GetInstance()
Definition: agent.h:436
#define DEFAULT_XMPP_HOLD_TIME
Agent * agent() const
Definition: oper_db.h:245
FastConvergenceParameters fc_params_
bool IsDeleted() const
Definition: db_entry.h:49
ConfigManager * config_manager() const
Definition: agent.cc:889
void Register(GracefulRestartParameters::Callback cb)
void NotifyAllEntries()
Definition: db_table.cc:596
OperDB * oper_db() const
Definition: agent.cc:1013
BgpAsAService * bgp_as_a_service() const
Definition: operdb_init.h:77
IFMapAgentTable * cfg_vm_interface_table() const
Definition: cfg_init.h:22
void Update(autogen::GlobalSystemConfig *cfg)
Definition: agent.h:358
BGPaaServiceParameters bgpaas_parameters_
VNController * controller() const
Definition: agent.cc:981
void AddGlobalSystemConfigNode(IFMapNode *node)
boost::function< void()> Callback
void ConfigManagerEnqueue(IFMapNode *node)
GracefulRestartParameters gres_parameters_
IFMapObject * GetObject()
Definition: ifmap_node.cc:63
void ConfigAddChange(IFMapNode *node)
GlobalSystemConfig(Agent *agent)
void XmppServerUpdate(uint8_t time_out)
void ConfigDelete(IFMapNode *node)
AgentConfig * cfg() const
Definition: agent.cc:865
GlobalSystemConfig * global_system_config() const
Definition: operdb_init.h:85