7 #include <boost/foreach.hpp>
44 uint32_t
value1, uint32_t
value2) : value1(value1), value2(value2) {
48 autogen::LoadBalanceType *lb_type)
const {
49 lb_type->load_balance_fields.load_balance_field_list.clear();
51 lb_type->load_balance_fields.load_balance_field_list.push_back(
52 string(
"l3-source-address"));
54 lb_type->load_balance_fields.load_balance_field_list.push_back(
55 string(
"l3-destination-address"));
57 lb_type->load_balance_fields.load_balance_field_list.push_back(
58 string(
"l4-protocol"));
60 lb_type->load_balance_fields.load_balance_field_list.push_back(
61 string(
"l4-source-port"));
63 lb_type->load_balance_fields.load_balance_field_list.push_back(
64 string(
"l4-destination-port"));
65 lb_type->load_balance_decision =
source_bias ?
"source-bias" :
"field-hash";
79 return *
this == kDefaultLoadBalanceAttribute;
89 copy(data.begin(), data.end(),
data_.begin());
102 for (
const auto &comm : ext_community->
communities()) {
104 copy(comm.begin(), comm.end(),
data_.begin());
118 attr.
source_bias = lb_type.load_balance_decision ==
"source-bias";
123 bool load_balance_default =
124 !attr.
source_bias && (lb_type.load_balance_fields.begin() ==
125 lb_type.load_balance_fields.end());
132 for (autogen::LoadBalanceFieldListType::const_iterator it =
133 lb_type.load_balance_fields.begin();
134 it != lb_type.load_balance_fields.end(); ++it) {
135 const string s = *it;
136 if (s ==
"l3-source-address") {
140 if (s ==
"l3-destination-address") {
144 if (s ==
"l4-protocol") {
148 if (s ==
"l4-source-port") {
152 if (s ==
"l4-destination-port") {
253 vector<string> fields = vector<string>();
255 show_load_balance->set_decision_type(
"source-bias");
256 show_load_balance->set_fields(fields);
260 show_load_balance->set_decision_type(
"field-hash");
262 fields.push_back(
"l3-source-address");
264 fields.push_back(
"l3-destination-address");
266 fields.push_back(
"l4-protocol");
268 fields.push_back(
"l4-source-port");
270 fields.push_back(
"l4-destination-port");
271 show_load_balance->set_fields(fields);
276 string str(
"load-balance:");
277 str += attr.
source_bias ?
"source-bias" :
"field-hash";
void ShowAttribute(ShowLoadBalance *show_load_balance) const
const bool IsDefault() const
void SetL4Protocol(bool flag)
const LoadBalanceAttribute ToAttribute() const
static uint64_t get_value_unaligned(const uint8_t *data, int size)
const bool IsDefault() const
bool operator!=(const LoadBalance &other) const
uint8_t l3_source_address
static const LoadBalanceAttribute kDefaultLoadBalanceAttribute
void SetL4DestinationPort(bool flag)
void SetSourceBias(bool flag)
uint8_t l4_destination_port
static uint64_t get_value(const uint8_t *data, int size)
static bool IsPresent(const BgpPath *path)
void Encode(autogen::LoadBalanceType *lb_type) const
uint8_t l3_destination_address
bool operator==(const LoadBalance &other) const
boost::array< uint8_t, kSize > bytes_type
bool operator!=(const LoadBalanceAttribute &other) const
void SetL3DestinationAddress(bool flag)
void SetL3SourceAddress(bool flag)
uint8_t l4_destination_port
uint8_t l3_destination_address
void SetL4SourcePort(bool flag)
const ExtCommunity * ext_community() const
const BgpAttr * GetAttr() const
uint8_t l3_source_address
std::string ToString() const
void FillAttribute(LoadBalanceAttribute *attr)
bool operator==(const LoadBalanceAttribute &other) const
static void put_value(uint8_t *data, int size, uint64_t value)