blob: 7df391c0b69eea47480a1ba4ce17c1095f0d9f6b [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"
17#include "vom/cmd.hpp"
18
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) {
52 HW::enqueue(
53 new unconfig_cmd(m_config, m_itf->handle(), m_l3_itf->handle()));
54 }
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) {
68 HW::enqueue(new config_cmd(m_config, m_itf->handle(), m_l3_itf->handle()));
69 }
70}
71
72std::string
73ip_unnumbered::to_string() const
74{
75 std::ostringstream s;
76 s << "IP Unnumbered-config:"
77 << " itf:" << m_itf->to_string() << " l3-itf:" << m_l3_itf->to_string();
78
79 return (s.str());
80}
81
82void
83ip_unnumbered::update(const ip_unnumbered& desired)
84{
85 if (!m_config) {
86 HW::enqueue(new config_cmd(m_config, m_itf->handle(), m_l3_itf->handle()));
87 }
88}
89
90std::shared_ptr<ip_unnumbered>
91ip_unnumbered::find_or_add(const ip_unnumbered& temp)
92{
93 return (m_db.find_or_add(temp.m_itf->key(), temp));
94}
95
96std::shared_ptr<ip_unnumbered>
97ip_unnumbered::singular() const
98{
99 return find_or_add(*this);
100}
101
102ip_unnumbered::event_handler::event_handler()
103{
104 OM::register_listener(this);
105 inspect::register_handler({ "ip-un" }, "IP unnumbered configurations", this);
106}
107
108void
109ip_unnumbered::event_handler::handle_replay()
110{
111 m_db.replay();
112}
113
114void
115ip_unnumbered::event_handler::handle_populate(const client_db::key_t& key)
116{
117 // VPP provides no dump for IP unnumbered
118}
119
120dependency_t
121ip_unnumbered::event_handler::order() const
122{
123 return (dependency_t::BINDING);
124}
125
126void
127ip_unnumbered::event_handler::show(std::ostream& os)
128{
129 m_db.dump(os);
130}
131}
132
133/*
134 * fd.io coding-style-patch-verification: ON
135 *
136 * Local Variables:
137 * eval: (c-set-style "mozilla")
138 * End:
139 */