blob: a98dc62bc59fab80e7362fe25c952a781e8fa6f4 [file] [log] [blame]
Neale Rannsbc27d1b2018-02-05 01:13:38 -08001/*
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/gbp_contract_cmds.hpp"
17
18namespace VOM {
19namespace gbp_contract_cmds {
20
21create_cmd::create_cmd(HW::item<bool>& item,
22 epg_id_t src_epg_id,
23 epg_id_t dst_epg_id,
24 const handle_t& acl)
25 : rpc_cmd(item)
26 , m_src_epg_id(src_epg_id)
27 , m_dst_epg_id(dst_epg_id)
28 , m_acl(acl)
29{
30}
31
32bool
33create_cmd::operator==(const create_cmd& other) const
34{
35 return ((m_acl == other.m_acl) && (m_src_epg_id == other.m_src_epg_id) &&
36 (m_dst_epg_id == other.m_dst_epg_id));
37}
38
39rc_t
40create_cmd::issue(connection& con)
41{
42 msg_t req(con.ctx(), std::ref(*this));
43
44 auto& payload = req.get_request().get_payload();
45 payload.is_add = 1;
46 payload.contract.acl_index = m_acl.value();
47 payload.contract.src_epg = m_src_epg_id;
48 payload.contract.dst_epg = m_dst_epg_id;
49
50 VAPI_CALL(req.execute());
51
52 m_hw_item.set(wait());
53
54 return rc_t::OK;
55}
56
57std::string
58create_cmd::to_string() const
59{
60 std::ostringstream s;
61 s << "gbp-contract-create: " << m_hw_item.to_string()
62 << " src-epg-id:" << m_src_epg_id << " dst-epg-id:" << m_dst_epg_id
63 << " acl:" << m_acl;
64
65 return (s.str());
66}
67
68delete_cmd::delete_cmd(HW::item<bool>& item,
69 epg_id_t src_epg_id,
70 epg_id_t dst_epg_id)
71 : rpc_cmd(item)
72 , m_src_epg_id(src_epg_id)
73 , m_dst_epg_id(dst_epg_id)
74{
75}
76
77bool
78delete_cmd::operator==(const delete_cmd& other) const
79{
80 return ((m_src_epg_id == other.m_src_epg_id) &&
81 (m_dst_epg_id == other.m_dst_epg_id));
82}
83
84rc_t
85delete_cmd::issue(connection& con)
86{
87 msg_t req(con.ctx(), std::ref(*this));
88
89 auto& payload = req.get_request().get_payload();
90 payload.is_add = 0;
91 payload.contract.acl_index = ~0;
92 payload.contract.src_epg = m_src_epg_id;
93 payload.contract.dst_epg = m_dst_epg_id;
94
95 VAPI_CALL(req.execute());
96
97 m_hw_item.set(wait());
98
99 return rc_t::OK;
100}
101
102std::string
103delete_cmd::to_string() const
104{
105 std::ostringstream s;
106 s << "gbp-contract-delete: " << m_hw_item.to_string()
107 << " src-epg-id:" << m_src_epg_id << " dst-epg-id:" << m_dst_epg_id;
108
109 return (s.str());
110}
111
112bool
113dump_cmd::operator==(const dump_cmd& other) const
114{
115 return (true);
116}
117
118rc_t
119dump_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
130std::string
131dump_cmd::to_string() const
132{
133 return ("gbp-contract-dump");
134}
135
136}; // namespace gbp_contract_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 */