/* * Copyright (c) 2018 Cisco and/or its affiliates. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at: * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "vom/bond_interface.hpp" #include "vom/bond_group_binding.hpp" #include "vom/bond_group_binding_cmds.hpp" #include "vom/bond_interface_cmds.hpp" namespace VOM { /** * Construct a new object matching the desried state */ bond_interface::bond_interface(const std::string& name, admin_state_t state, mode_t mode, lb_t lb) : interface(name, type_t::BOND, state) , m_l2_address(l2_address_t::ZERO) , m_mode(mode) , m_lb(lb) { } bond_interface::bond_interface(const std::string& name, admin_state_t state, const l2_address_t& l2_address, mode_t mode, lb_t lb) : interface(name, type_t::BOND, state) , m_l2_address(l2_address) , m_mode(mode) , m_lb(lb) { } bond_interface::~bond_interface() { sweep(); release(); } bond_interface::bond_interface(const bond_interface& o) : interface(o) , m_l2_address(o.m_l2_address) , m_mode(o.m_mode) , m_lb(o.m_lb) { } std::shared_ptr bond_interface::find(const handle_t& hdl) { return std::dynamic_pointer_cast(interface::find(hdl)); } void bond_interface::set(bond_interface::mode_t mode) { m_mode = mode; } void bond_interface::set(bond_interface::lb_t lb) { m_lb = lb; } std::string bond_interface::to_string() const { std::ostringstream s; s << this->interface::to_string() << " mode:" << m_mode.to_string() << " lb:" << m_lb.to_string(); return (s.str()); } std::queue& bond_interface::mk_create_cmd(std::queue& q) { q.push(new bond_interface_cmds::create_cmd(m_hdl, name(), m_mode, m_lb, m_l2_address)); return (q); } std::queue& bond_interface::mk_delete_cmd(std::queue& q) { q.push(new bond_interface_cmds::delete_cmd(m_hdl)); return (q); } std::shared_ptr bond_interface::singular() const { return std::dynamic_pointer_cast(singular_i()); } std::shared_ptr bond_interface::singular_i() const { return m_db.find_or_add(name(), *this); } void bond_interface::set(handle_t& handle) { this->interface::set(handle); } const bond_interface::mode_t bond_interface::mode_t::ROUND_ROBIN(1, "round-robin"); const bond_interface::mode_t bond_interface::mode_t::ACTIVE_BACKUP( 2, "active-backup"); const bond_interface::mode_t bond_interface::mode_t::XOR(3, "xor"); const bond_interface::mode_t bond_interface::mode_t::BROADCAST(4, "broadcast"); const bond_interface::mode_t bond_interface::mode_t::LACP(5, "lacp"); const bond_interface::mode_t bond_interface::mode_t::UNSPECIFIED(0, "unspecified"); const bond_interface::mode_t bond_interface::mode_t::from_numeric_val(uint8_t numeric) { if (1 == numeric) { return (bond_interface::mode_t::ROUND_ROBIN); } if (2 == numeric) { return (bond_interface::mode_t::ACTIVE_BACKUP); } if (3 == numeric) { return (bond_interface::mode_t::XOR); } if (4 == numeric) { return (bond_interface::mode_t::BROADCAST); } if (5 == numeric) { return (bond_interface::mode_t::LACP); } return (bond_interface::mode_t::UNSPECIFIED); } bond_interface::mode_t::mode_t(int v, const std::string& s) : enum_base(v, s) { } const bond_interface::lb_t bond_interface::lb_t::L2(0, "l2"); const bond_interface::lb_t bond_interface::lb_t::L34(1, "l34"); const bond_interface::lb_t bond_interface::lb_t::L23(2, "l23"); const bond_interface::lb_t bond_interface::lb_t::UNSPECIFIED(~0, "unspecified"); const bond_interface::lb_t bond_interface::lb_t::from_numeric_val(uint8_t numeric) { if (0 == numeric) { return (bond_interface::lb_t::L2); } if (1 == numeric) { return (bond_interface::lb_t::L34); } if (2 == numeric) { return (bond_interface::lb_t::L23); } return (bond_interface::lb_t::UNSPECIFIED); } bond_interface::lb_t::lb_t(int v, const std::string& s) : enum_base(v, s) { } }; // namespace VOM /* * fd.io coding-style-patch-verification: ON * * Local Variables: * eval: (c-set-style "mozilla") * End: */