VOM: support for pipes
[vpp.git] / extras / vom / vom / l2_xconnect_cmds.cpp
1 /*
2  * Copyright (c) 2018 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/l2_xconnect_cmds.hpp"
17
18 namespace VOM {
19 namespace l2_xconnect_cmds {
20 bind_cmd::bind_cmd(HW::item<bool>& item,
21                    const handle_t& east_itf,
22                    const handle_t& west_itf)
23   : rpc_cmd(item)
24   , m_east_itf(east_itf)
25   , m_west_itf(west_itf)
26 {
27 }
28
29 bool
30 bind_cmd::operator==(const bind_cmd& other) const
31 {
32   return ((m_east_itf == other.m_east_itf) && (m_west_itf == other.m_west_itf));
33 }
34
35 rc_t
36 bind_cmd::issue(connection& con)
37 {
38   msg_t req(con.ctx(), std::ref(*this));
39
40   auto& payload = req.get_request().get_payload();
41   payload.rx_sw_if_index = m_east_itf.value();
42   payload.tx_sw_if_index = m_west_itf.value();
43   payload.enable = 1;
44
45   VAPI_CALL(req.execute());
46
47   wait();
48
49   return (rc_t::OK);
50 }
51
52 std::string
53 bind_cmd::to_string() const
54 {
55   std::ostringstream s;
56   s << "L2-bind: " << m_hw_item.to_string()
57     << " east-itf:" << m_east_itf.to_string()
58     << " west-itf:" << m_west_itf.to_string();
59
60   return (s.str());
61 }
62
63 unbind_cmd::unbind_cmd(HW::item<bool>& item,
64                        const handle_t& east_itf,
65                        const handle_t& west_itf)
66   : rpc_cmd(item)
67   , m_east_itf(east_itf)
68   , m_west_itf(west_itf)
69 {
70 }
71
72 bool
73 unbind_cmd::operator==(const unbind_cmd& other) const
74 {
75   return ((m_east_itf == other.m_east_itf) && (m_west_itf == other.m_west_itf));
76 }
77
78 rc_t
79 unbind_cmd::issue(connection& con)
80 {
81   msg_t req(con.ctx(), std::ref(*this));
82
83   auto& payload = req.get_request().get_payload();
84   payload.rx_sw_if_index = m_east_itf.value();
85   payload.tx_sw_if_index = m_west_itf.value();
86   payload.enable = 0;
87
88   VAPI_CALL(req.execute());
89
90   wait();
91   m_hw_item.set(rc_t::NOOP);
92
93   return (rc_t::OK);
94 }
95
96 std::string
97 unbind_cmd::to_string() const
98 {
99   std::ostringstream s;
100   s << "L2-unbind: " << m_hw_item.to_string()
101     << " east-itf:" << m_east_itf.to_string()
102     << " west-itf:" << m_west_itf.to_string();
103
104   return (s.str());
105 }
106
107 dump_cmd::dump_cmd()
108 {
109 }
110
111 bool
112 dump_cmd::operator==(const dump_cmd& other) const
113 {
114   return (true);
115 }
116
117 rc_t
118 dump_cmd::issue(connection& con)
119 {
120   m_dump.reset(new msg_t(con.ctx(), std::ref(*this)));
121
122   VAPI_CALL(m_dump->execute());
123
124   wait();
125
126   return rc_t::OK;
127 }
128
129 std::string
130 dump_cmd::to_string() const
131 {
132   return ("l2-xconnect-dump");
133 }
134
135 }; // namespace l2_xconnect_cmds
136 }; // namespace VOM
137
138 /*
139  * fd.io coding-style-patch-verification: ON
140  *
141  * Local Variables:
142  * eval: (c-set-style "mozilla")
143  * End:
144  */