blob: 4584bd14be2752e287d7106acebe7708f96de459 [file] [log] [blame]
/*
* 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.
*/
#ifndef __VOM_BOND_INTERFACE_H__
#define __VOM_BOND_INTERFACE_H__
#include "vom/interface.hpp"
namespace VOM {
/**
* A bond-interface. e.g. a bond interface
*/
class bond_interface : public interface
{
public:
/**
* A bond interface mode
*/
struct mode_t : enum_base<mode_t>
{
/**
* Round-Robin bond interface mode
*/
const static mode_t ROUND_ROBIN;
/**
* Active-backup bond interface mode
*/
const static mode_t ACTIVE_BACKUP;
/**
* XOR bond interface mode
*/
const static mode_t XOR;
/**
* Broadcast bond interface mode
*/
const static mode_t BROADCAST;
/**
* LACP bond interface mode
*/
const static mode_t LACP;
/**
* Unspecificed bond interface mode
*/
const static mode_t UNSPECIFIED;
/**
* Convert VPP's value of the bond to a mode
*/
static const mode_t from_numeric_val(uint8_t v);
private:
/**
* Private constructor taking the value and the string name
*/
mode_t(int v, const std::string& s);
};
/**
* A bond interface load balance
*/
struct lb_t : enum_base<lb_t>
{
/**
* L2 bond interface lb
*/
const static lb_t L2;
/**
* L34 bond interface lb
*/
const static lb_t L34;
/**
* L23 bond interface lb
*/
const static lb_t L23;
/**
* Unspecificed bond interface lb
*/
const static lb_t UNSPECIFIED;
/**
* Convert VPP's value of the bond to a lb
*/
static const lb_t from_numeric_val(uint8_t v);
private:
/**
* Private constructor taking the value and the string name
*/
lb_t(int v, const std::string& s);
};
bond_interface(const std::string& name,
admin_state_t state,
mode_t mode,
lb_t lb = lb_t::UNSPECIFIED);
bond_interface(const std::string& name,
admin_state_t state,
const l2_address_t& l2_address,
mode_t mode,
lb_t lb = lb_t::UNSPECIFIED);
~bond_interface();
bond_interface(const bond_interface& o);
/**
* The the singular instance of the bond interface in the DB by handle
*/
static std::shared_ptr<bond_interface> find(const handle_t& hdl);
/**
* Return the matching 'singular instance' of the BOND interface
*/
std::shared_ptr<bond_interface> singular() const;
/**
* set the mode
*/
void set(mode_t mode);
/**
* set the lb
*/
void set(lb_t lb);
/**
* convert to string
*/
virtual std::string to_string() const;
protected:
/**
* set the handle
*/
void set(handle_t& handle);
friend class interface_factory;
private:
/**
* l2 address on bond interface
*/
l2_address_t m_l2_address;
/**
* mode on bond interface
*/
mode_t m_mode;
/**
* lb mode on bond interface
*/
lb_t m_lb;
/**
* Return the matching 'instance' of the sub-interface
* over-ride from the base class
*/
std::shared_ptr<interface> singular_i() const;
/**
* Virtual functions to construct an interface create commands.
*/
virtual std::queue<cmd*>& mk_create_cmd(std::queue<cmd*>& cmds);
/**
* Virtual functions to construct an interface delete commands.
*/
virtual std::queue<cmd*>& mk_delete_cmd(std::queue<cmd*>& cmds);
/*
* It's the OM class that call singular()
*/
friend class OM;
};
}
/*
* fd.io coding-style-patch-verification: ON
*
* Local Variables:
* eval: (c-set-style "mozilla")
* End:
*/
#endif