blob: 01f4a54a5176d1f2f9dbda0429cbbc9c7b55c983 [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/sub_interface.hpp"
Neale Ranns9ef1c0a2017-11-03 04:39:05 -070017#include "vom/sub_interface_cmds.hpp"
Neale Ranns812ed392017-10-16 04:20:13 -070018
19namespace VOM {
20/**
21 * Construct a new object matching the desried state
22 */
23sub_interface::sub_interface(const interface& parent,
24 admin_state_t state,
25 vlan_id_t vlan)
26 : interface(mk_name(parent, vlan), parent.type(), state)
27 , m_parent(parent.singular())
28 , m_vlan(vlan)
29{
30}
31
32sub_interface::sub_interface(const handle_t& handle,
33 const interface& parent,
34 admin_state_t state,
35 vlan_id_t vlan)
36 : interface(handle,
37 l2_address_t::ZERO,
38 mk_name(parent, vlan),
39 parent.type(),
40 state)
41 , m_parent(parent.singular())
42 , m_vlan(vlan)
43{
44}
45
46sub_interface::~sub_interface()
47{
48 sweep();
49 release();
50}
51
52sub_interface::sub_interface(const sub_interface& o)
53 : interface(o)
54 , m_parent(o.m_parent)
55 , m_vlan(o.m_vlan)
56{
57}
58
Neale Rannsfd920602017-11-23 12:15:00 -080059bool
60sub_interface::operator==(const sub_interface& s) const
61{
62 return (interface::operator==(s) && (m_parent->key() == s.m_parent->key()) &&
63 (m_vlan == s.m_vlan));
64}
65
Neale Ranns812ed392017-10-16 04:20:13 -070066std::string
67sub_interface::mk_name(const interface& parent, vlan_id_t vlan)
68{
69 return (parent.name() + "." + std::to_string(vlan));
70}
71
72std::queue<cmd*>&
73sub_interface::mk_create_cmd(std::queue<cmd*>& q)
74{
Neale Ranns9ef1c0a2017-11-03 04:39:05 -070075 q.push(new sub_interface_cmds::create_cmd(m_hdl, name(), m_parent->handle(),
76 m_vlan));
Neale Ranns812ed392017-10-16 04:20:13 -070077
78 return (q);
79}
80
81std::queue<cmd*>&
82sub_interface::mk_delete_cmd(std::queue<cmd*>& q)
83{
Neale Ranns9ef1c0a2017-11-03 04:39:05 -070084 q.push(new sub_interface_cmds::delete_cmd(m_hdl));
Neale Ranns812ed392017-10-16 04:20:13 -070085
86 return (q);
87}
88
89std::shared_ptr<sub_interface>
90sub_interface::singular() const
91{
92 return std::dynamic_pointer_cast<sub_interface>(singular_i());
93}
94
95std::shared_ptr<interface>
96sub_interface::singular_i() const
97{
Neale Rannsfd920602017-11-23 12:15:00 -080098 return m_db.find_or_add(key(), *this);
Neale Ranns812ed392017-10-16 04:20:13 -070099}
Neale Rannsfd920602017-11-23 12:15:00 -0800100
101std::shared_ptr<sub_interface>
102sub_interface::find(const key_t& k)
103{
104 return std::dynamic_pointer_cast<sub_interface>(m_db.find(k));
Neale Ranns812ed392017-10-16 04:20:13 -0700105}
106
Neale Rannsfd920602017-11-23 12:15:00 -0800107}; // namespace VOM
108
Neale Ranns812ed392017-10-16 04:20:13 -0700109/*
110 * fd.io coding-style-patch-verification: ON
111 *
112 * Local Variables:
113 * eval: (c-set-style "mozilla")
114 * End:
115 */