blob: ef693e9f14019d0b99ee06fc1702bb534090c6c0 [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/ip_unnumbered.hpp"
Neale Ranns9ef1c0a2017-11-03 04:39:05 -070017#include "vom/ip_unnumbered_cmds.hpp"
Neale Ranns812ed392017-10-16 04:20:13 -070018
19namespace VOM {
20/**
21 * A DB of all LLDP configs
22 */
23singular_db<ip_unnumbered::key_t, ip_unnumbered> ip_unnumbered::m_db;
24
25ip_unnumbered::event_handler ip_unnumbered::m_evh;
26
27ip_unnumbered::ip_unnumbered(const interface& itf, const interface& l3_itf)
28 : m_itf(itf.singular())
29 , m_l3_itf(l3_itf.singular())
30{
31}
32
33ip_unnumbered::ip_unnumbered(const ip_unnumbered& o)
34 : m_itf(o.m_itf)
35 , m_l3_itf(o.m_l3_itf)
36 , m_config(o.m_config)
37{
38}
39
40ip_unnumbered::~ip_unnumbered()
41{
42 sweep();
43
44 // not in the DB anymore.
45 m_db.release(m_itf->key(), this);
46}
47
48void
49ip_unnumbered::sweep()
50{
51 if (m_config) {
Neale Ranns9ef1c0a2017-11-03 04:39:05 -070052 HW::enqueue(new ip_unnumbered_cmds::unconfig_cmd(m_config, m_itf->handle(),
53 m_l3_itf->handle()));
Neale Ranns812ed392017-10-16 04:20:13 -070054 }
55 HW::write();
56}
57
58void
59ip_unnumbered::dump(std::ostream& os)
60{
61 m_db.dump(os);
62}
63
64void
65ip_unnumbered::replay()
66{
67 if (m_config) {
Neale Ranns9ef1c0a2017-11-03 04:39:05 -070068 HW::enqueue(new ip_unnumbered_cmds::config_cmd(m_config, m_itf->handle(),
69 m_l3_itf->handle()));
Neale Ranns812ed392017-10-16 04:20:13 -070070 }
71}
72
73std::string
74ip_unnumbered::to_string() const
75{
76 std::ostringstream s;
77 s << "IP Unnumbered-config:"
78 << " itf:" << m_itf->to_string() << " l3-itf:" << m_l3_itf->to_string();
79
80 return (s.str());
81}
82
83void
84ip_unnumbered::update(const ip_unnumbered& desired)
85{
86 if (!m_config) {
Neale Ranns9ef1c0a2017-11-03 04:39:05 -070087 HW::enqueue(new ip_unnumbered_cmds::config_cmd(m_config, m_itf->handle(),
88 m_l3_itf->handle()));
Neale Ranns812ed392017-10-16 04:20:13 -070089 }
90}
91
92std::shared_ptr<ip_unnumbered>
93ip_unnumbered::find_or_add(const ip_unnumbered& temp)
94{
95 return (m_db.find_or_add(temp.m_itf->key(), temp));
96}
97
98std::shared_ptr<ip_unnumbered>
99ip_unnumbered::singular() const
100{
101 return find_or_add(*this);
102}
103
104ip_unnumbered::event_handler::event_handler()
105{
106 OM::register_listener(this);
107 inspect::register_handler({ "ip-un" }, "IP unnumbered configurations", this);
108}
109
110void
111ip_unnumbered::event_handler::handle_replay()
112{
113 m_db.replay();
114}
115
116void
117ip_unnumbered::event_handler::handle_populate(const client_db::key_t& key)
118{
119 // VPP provides no dump for IP unnumbered
120}
121
122dependency_t
123ip_unnumbered::event_handler::order() const
124{
125 return (dependency_t::BINDING);
126}
127
128void
129ip_unnumbered::event_handler::show(std::ostream& os)
130{
131 m_db.dump(os);
132}
133}
134
135/*
136 * fd.io coding-style-patch-verification: ON
137 *
138 * Local Variables:
139 * eval: (c-set-style "mozilla")
140 * End:
141 */