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 <bind/bind_resolver.h> 8 : #include <vnc_cfg_types.h> 9 : #include <oper_db.h> 10 : #include <forwarding_class.h> 11 : #include <global_qos_config.h> 12 : #include <config_manager.h> 13 : 14 2 : GlobalQosConfig::GlobalQosConfig(Agent *agent) : OperIFMapTable(agent) { 15 2 : } 16 : 17 4 : GlobalQosConfig::~GlobalQosConfig() { 18 4 : } 19 : 20 0 : void GlobalQosConfig::ResetDscp() { 21 0 : if (control_dscp_ != kInvalidDscp) { 22 0 : if (control_dscp_ != 0) { 23 0 : agent()->SetXmppDscp(0); 24 : } 25 0 : control_dscp_ = kInvalidDscp; 26 : } 27 0 : if (dns_dscp_ != kInvalidDscp) { 28 0 : if (dns_dscp_ != 0) { 29 0 : SetDnsDscp(0); 30 : } 31 0 : dns_dscp_ = kInvalidDscp; 32 : } 33 0 : if (analytics_dscp_ != kInvalidDscp) { 34 0 : if (analytics_dscp_ != 0) { 35 0 : Sandesh::SetDscpValue(0); 36 : } 37 0 : analytics_dscp_ = kInvalidDscp; 38 : } 39 0 : } 40 : 41 0 : void GlobalQosConfig::SetDnsDscp(uint8_t value) { 42 0 : BindResolver *resolver = BindResolver::Resolver(); 43 0 : if (resolver) { 44 0 : resolver->SetDscpValue(value); 45 : } 46 0 : } 47 : 48 0 : void GlobalQosConfig::ConfigDelete(IFMapNode *node) { 49 0 : if (node->IsDeleted()) { 50 0 : ResetDscp(); 51 : } 52 0 : } 53 : 54 0 : void GlobalQosConfig::ConfigAddChange(IFMapNode *node) { 55 : autogen::GlobalQosConfig *cfg = 56 0 : static_cast<autogen::GlobalQosConfig *>(node->GetObject()); 57 0 : if (cfg && 58 0 : cfg->IsPropertySet(autogen::GlobalQosConfig::CONTROL_TRAFFIC_DSCP)) { 59 : const autogen::ControlTrafficDscpType &dscp = 60 0 : cfg->control_traffic_dscp(); 61 0 : if (control_dscp_ != dscp.control) { 62 0 : control_dscp_ = dscp.control; 63 0 : agent()->SetXmppDscp(control_dscp_); 64 : } 65 0 : if (dns_dscp_ != dscp.dns) { 66 0 : dns_dscp_ = dscp.dns; 67 0 : SetDnsDscp(dns_dscp_); 68 : } 69 0 : if (analytics_dscp_ != dscp.analytics) { 70 0 : analytics_dscp_ = dscp.analytics; 71 0 : Sandesh::SetDscpValue(analytics_dscp_); 72 : } 73 : } else { 74 0 : ResetDscp(); 75 : } 76 0 : } 77 : 78 0 : void GlobalQosConfig::ConfigManagerEnqueue(IFMapNode *node) { 79 0 : agent()->config_manager()->AddGlobalQosConfigNode(node); 80 0 : }