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