FD.io VPP  v21.01.1
Vector Packet Processing
tap_interface.cpp
Go to the documentation of this file.
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/tap_interface.hpp"
18 
19 #include <vapi/vpe.api.vapi.hpp>
20 
21 namespace VOM {
22 tap_interface::event_handler tap_interface::m_evh;
23 
24 /**
25  * Construct a new object matching the desried state
26  */
28  const admin_state_t& state,
29  const route::prefix_t& prefix)
30  : interface(name, type_t::TAPV2, state)
31  , m_prefix(prefix)
32  , m_l2_address(l2_address_t::ZERO)
33 {
34 }
35 
37  const admin_state_t& state,
38  const route::prefix_t& prefix,
39  const l2_address_t& l2_address)
40  : interface(name, type_t::TAPV2, state)
41  , m_prefix(prefix)
42  , m_l2_address(l2_address)
43 {
44 }
45 
47 {
48  sweep();
49  release();
50 }
51 
53  : interface(o)
54  , m_prefix(o.m_prefix)
55  , m_l2_address(o.m_l2_address)
56 {
57 }
58 
59 std::queue<cmd*>&
60 tap_interface::mk_create_cmd(std::queue<cmd*>& q)
61 {
62  q.push(new tap_interface_cmds::tapv2_create_cmd(m_hdl, name(), m_prefix,
63  m_l2_address));
64 
65  return (q);
66 }
67 
68 std::queue<cmd*>&
69 tap_interface::mk_delete_cmd(std::queue<cmd*>& q)
70 {
72 
73  return (q);
74 }
75 
76 std::shared_ptr<tap_interface>
78 {
79  return std::dynamic_pointer_cast<tap_interface>(singular_i());
80 }
81 
82 std::shared_ptr<interface>
83 tap_interface::singular_i() const
84 {
85  return m_db.find_or_add(name(), *this);
86 }
87 
88 void
89 tap_interface::event_handler::handle_populate(const client_db::key_t& key)
90 {
91  // It will be polulate by interface handler
92 }
93 
95 {
97  inspect::register_handler({ "tap" }, "tap_interfaces", this);
98 }
99 
100 void
101 tap_interface::event_handler::handle_replay()
102 {
103  // It will be replayed by interface handler
104 }
105 
107 tap_interface::event_handler::order() const
108 {
109  return (dependency_t::INTERFACE);
110 }
111 
112 void
113 tap_interface::event_handler::show(std::ostream& os)
114 {
115  // dumped by the interface handler
116 }
117 
118 }; // namespace VOM
119 
120 /*
121  * fd.io coding-style-patch-verification: OFF
122  *
123  * Local Variables:
124  * eval: (c-set-style "mozilla")
125  * End:
126  */
void release()
release/remove an interface form the singular store
Definition: interface.cpp:240
A tap-interface.
const std::string key_t
In the opflex world each entity is known by a URI which can be converted into a string.
Definition: client_db.hpp:51
const char *const string
Definition: cJSON.h:172
HW::item< handle_t > m_hdl
The SW interface handle VPP has asigned to the interface.
Definition: interface.hpp:540
A functor class that creates an interface.
virtual void sweep(void)
Sweep/reap the object if still stale.
Definition: interface.cpp:182
static void register_handler(const std::vector< std::string > &cmds, const std::string &help, command_handler *ch)
Register a command handler for inspection.
Definition: inspect.cpp:85
vl_api_prefix_t prefix
Definition: ip.api:144
const l2_address_t & l2_address() const
Return the L2 Address.
Definition: interface.cpp:158
Type def of a L2 address as read from VPP.
Definition: types.hpp:339
static singular_db< key_t, interface > m_db
A map of all interfaces key against the interface&#39;s name.
Definition: interface.hpp:572
const std::string & name() const
Return the interface type.
Definition: interface.cpp:271
The admin state of the interface.
Definition: interface.hpp:138
A representation of an interface in VPP.
Definition: interface.hpp:41
string name[64]
Definition: ip.api:44
void event_handler(void *tls_async)
Definition: tls_async.c:334
dependency_t
There needs to be a strict order in which object types are read from VPP (at boot time) and replayed ...
Definition: types.hpp:43
An interface type.
Definition: interface.hpp:67
tap_interface(const std::string &name, const admin_state_t &state, const route::prefix_t &prefix)
Construct a new object matching the desried state.
The VPP Object Model (VOM) library.
Definition: acl_binding.cpp:19
void show(char *chroot_path, int verbose)
Definition: svmtool.c:104
A functor class that deletes a Tap interface.
vl_api_dhcp_client_state_t state
Definition: dhcp.api:201
const key_t & key() const
Return the interface type.
Definition: interface.cpp:277
std::shared_ptr< tap_interface > singular() const
Return the matching &#39;singular instance&#39; of the TAP interface.
static bool register_listener(listener *listener)
Register a listener of events.
Definition: om.cpp:127
A prefix defintion.
Definition: prefix.hpp:131
interfaces are the root of the dependency graph