blob: 7e701dc4c524607888474cdc213d57bdc65ac7d6 [file] [log] [blame]
Neale Ranns812ed392017-10-16 04:20:13 -07001/*
2 * Copyright (c) 2017 Cisco and/or its affiliates.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at:
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16#include "vom/lldp_global.hpp"
Neale Ranns9ef1c0a2017-11-03 04:39:05 -070017#include "vom/lldp_global_cmds.hpp"
Neale Ranns812ed392017-10-16 04:20:13 -070018
19namespace VOM {
20/**
21 * A DB of all LLDP configs
22 */
23singular_db<std::string, lldp_global> lldp_global::m_db;
24
25lldp_global::event_handler lldp_global::m_evh;
26
27lldp_global::lldp_global(const std::string& system_name,
28 uint32_t tx_hold,
29 uint32_t tx_interval)
30 : m_system_name(system_name)
31 , m_tx_hold(tx_hold)
32 , m_tx_interval(tx_interval)
33{
34}
35
36lldp_global::lldp_global(const lldp_global& o)
37 : m_system_name(o.m_system_name)
38 , m_tx_hold(o.m_tx_hold)
39 , m_tx_interval(o.m_tx_interval)
40{
41}
42
43lldp_global::~lldp_global()
44{
45 sweep();
46
47 // not in the DB anymore.
48 m_db.release(m_system_name, this);
49}
50
Neale Rannsfd920602017-11-23 12:15:00 -080051const lldp_global::key_t&
52lldp_global::key() const
53{
54 return (m_system_name);
55}
56
57bool
58lldp_global::operator==(const lldp_global& l) const
59{
60 return ((key() == l.key()) && (m_tx_hold == l.m_tx_hold) &&
61 (m_tx_interval == l.m_tx_interval));
62}
63
Neale Ranns812ed392017-10-16 04:20:13 -070064void
65lldp_global::sweep()
66{
67 // no means to remove this in VPP
68}
69
70void
71lldp_global::dump(std::ostream& os)
72{
73 m_db.dump(os);
74}
75
76void
77lldp_global::replay()
78{
79 if (m_binding) {
Neale Ranns9ef1c0a2017-11-03 04:39:05 -070080 HW::enqueue(new lldp_global_cmds::config_cmd(m_binding, m_system_name,
81 m_tx_hold, m_tx_interval));
Neale Ranns812ed392017-10-16 04:20:13 -070082 }
83}
84
85std::string
86lldp_global::to_string() const
87{
88 std::ostringstream s;
89 s << "LLDP-global:"
90 << " system_name:" << m_system_name << " tx-hold:" << m_tx_hold
91 << " tx-interval:" << m_tx_interval;
92
93 return (s.str());
94}
95
96void
97lldp_global::update(const lldp_global& desired)
98{
99 if (!m_binding) {
Neale Ranns9ef1c0a2017-11-03 04:39:05 -0700100 HW::enqueue(new lldp_global_cmds::config_cmd(m_binding, m_system_name,
101 m_tx_hold, m_tx_interval));
Neale Ranns812ed392017-10-16 04:20:13 -0700102 }
103}
104
105std::shared_ptr<lldp_global>
106lldp_global::find_or_add(const lldp_global& temp)
107{
Neale Rannsfd920602017-11-23 12:15:00 -0800108 return (m_db.find_or_add(temp.key(), temp));
109}
110
111std::shared_ptr<lldp_global>
112lldp_global::find(const key_t& k)
113{
114 return (m_db.find(k));
Neale Ranns812ed392017-10-16 04:20:13 -0700115}
116
117std::shared_ptr<lldp_global>
118lldp_global::singular() const
119{
120 return find_or_add(*this);
121}
122
123lldp_global::event_handler::event_handler()
124{
125 OM::register_listener(this);
126 inspect::register_handler({ "lldp-global" }, "LLDP global configurations",
127 this);
128}
129
130void
131lldp_global::event_handler::handle_replay()
132{
133 m_db.replay();
134}
135
136void
137lldp_global::event_handler::handle_populate(const client_db::key_t& key)
138{
139 // FIXME
140}
141
142dependency_t
143lldp_global::event_handler::order() const
144{
145 return (dependency_t::GLOBAL);
146}
147
148void
149lldp_global::event_handler::show(std::ostream& os)
150{
151 m_db.dump(os);
152}
153}
154
155/*
156 * fd.io coding-style-patch-verification: ON
157 *
158 * Local Variables:
159 * eval: (c-set-style "mozilla")
160 * End:
161 */