ARP proxy dumps
[vpp.git] / extras / vom / vom / arp_proxy_config_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_config_cmds.hpp"
17
18 namespace VOM {
19 namespace arp_proxy_config_cmds {
20
21 config_cmd::config_cmd(HW::item<bool>& item,
22                        const boost::asio::ip::address_v4& low,
23                        const boost::asio::ip::address_v4& high)
24   : rpc_cmd(item)
25   , m_low(low)
26   , m_high(high)
27 {
28 }
29
30 bool
31 config_cmd::operator==(const config_cmd& o) const
32 {
33   return ((m_low == o.m_low) && (m_high == o.m_high));
34 }
35
36 rc_t
37 config_cmd::issue(connection& con)
38 {
39   msg_t req(con.ctx(), std::ref(*this));
40
41   auto& payload = req.get_request().get_payload();
42   payload.is_add = 1;
43
44   std::copy_n(std::begin(m_low.to_bytes()), m_low.to_bytes().size(),
45               payload.proxy.low_address);
46   std::copy_n(std::begin(m_high.to_bytes()), m_high.to_bytes().size(),
47               payload.proxy.hi_address);
48
49   VAPI_CALL(req.execute());
50
51   m_hw_item.set(wait());
52
53   return (rc_t::OK);
54 }
55
56 std::string
57 config_cmd::to_string() const
58 {
59   std::ostringstream s;
60   s << "ARP-proxy-config: " << m_hw_item.to_string()
61     << " low:" << m_low.to_string() << " high:" << m_high.to_string();
62
63   return (s.str());
64 }
65
66 unconfig_cmd::unconfig_cmd(HW::item<bool>& item,
67                            const boost::asio::ip::address_v4& low,
68                            const boost::asio::ip::address_v4& high)
69   : rpc_cmd(item)
70   , m_low(low)
71   , m_high(high)
72 {
73 }
74
75 bool
76 unconfig_cmd::operator==(const unconfig_cmd& o) const
77 {
78   return ((m_low == o.m_low) && (m_high == o.m_high));
79 }
80
81 rc_t
82 unconfig_cmd::issue(connection& con)
83 {
84   msg_t req(con.ctx(), std::ref(*this));
85
86   auto& payload = req.get_request().get_payload();
87   payload.is_add = 0;
88
89   std::copy_n(std::begin(m_low.to_bytes()), m_low.to_bytes().size(),
90               payload.proxy.low_address);
91   std::copy_n(std::begin(m_high.to_bytes()), m_high.to_bytes().size(),
92               payload.proxy.hi_address);
93
94   VAPI_CALL(req.execute());
95
96   wait();
97   m_hw_item.set(rc_t::NOOP);
98
99   return (rc_t::OK);
100 }
101
102 std::string
103 unconfig_cmd::to_string() const
104 {
105   std::ostringstream s;
106   s << "ARP-proxy-unconfig: " << m_hw_item.to_string()
107     << " low:" << m_low.to_string() << " high:" << m_high.to_string();
108
109   return (s.str());
110 }
111
112 bool
113 dump_cmd::operator==(const dump_cmd& other) const
114 {
115   return (true);
116 }
117
118 rc_t
119 dump_cmd::issue(connection& con)
120 {
121   m_dump.reset(new msg_t(con.ctx(), std::ref(*this)));
122
123   VAPI_CALL(m_dump->execute());
124
125   wait();
126
127   return rc_t::OK;
128 }
129
130 std::string
131 dump_cmd::to_string() const
132 {
133   return ("ARP-proxy-dump");
134 }
135
136 }; // namesapce cmds
137 }; // namespace VOM
138
139 /*
140  * fd.io coding-style-patch-verification: ON
141  *
142  * Local Variables:
143  * eval: (c-set-style "mozilla")
144  * End:
145  */