OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
mac_mobility.cc
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved.
3  */
4 
6 
7 #include <stdio.h>
8 
9 #include <algorithm>
10 #include <string>
11 
12 
13 using std::copy;
14 using std::string;
15 
16 MacMobility::MacMobility(uint32_t seq, bool sticky) {
19  data_[2] = (sticky ? 0x01 : 0x0); // sticky
20  data_[3] = 0x00; // Reserved
21  put_value(&data_[4], 4, seq);
22 }
23 
25  copy(data.begin(), data.end(), data_.begin());
26 }
27 
28 bool MacMobility::sticky() const {
29  return (data_[2] & 0x1);
30 }
31 
32 uint32_t MacMobility::sequence_number() const {
33  uint8_t data[MacMobility::kSize];
34  copy(data_.begin(), data_.end(), &data[0]);
35  if (data[0] == BgpExtendedCommunityType::Evpn &&
37  uint32_t num = get_value(data + 4, 4);
38  return num;
39  }
40  return 0;
41 }
42 
43 std::string MacMobility::ToString() {
44  char temp[50];
45  snprintf(temp, sizeof(temp), "mobility:%s:%d",
46  (sticky() ? "sticky" : "non-sticky"), sequence_number());
47  return string(temp);
48 }
MacMobility(uint32_t seq, bool sticky=false)
Definition: mac_mobility.cc:16
static const int kSize
Definition: mac_mobility.h:18
static uint64_t get_value(const uint8_t *data, int size)
Definition: parse_object.h:39
std::string ToString()
Definition: mac_mobility.cc:43
bool sticky() const
Definition: mac_mobility.cc:28
boost::array< uint8_t, kSize > bytes_type
Definition: mac_mobility.h:19
uint32_t sequence_number() const
Definition: mac_mobility.cc:32
bytes_type data_
Definition: mac_mobility.h:38
static void put_value(uint8_t *data, int size, uint64_t value)
Definition: parse_object.h:55