OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
ermvpn_route.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved.
3  */
4 
5 #ifndef SRC_BGP_ERMVPN_ERMVPN_ROUTE_H_
6 #define SRC_BGP_ERMVPN_ERMVPN_ROUTE_H_
7 
8 #include <boost/system/error_code.hpp>
9 
10 #include <set>
11 #include <string>
12 #include <vector>
13 
14 #include "base/util.h"
15 #include "base/address.h"
16 #include "bgp/bgp_attr.h"
17 #include "bgp/bgp_attr_base.h"
18 #include "bgp/bgp_route.h"
19 #include "net/bgp_af.h"
20 #include "net/rd.h"
21 
22 class ErmVpnPrefix {
23 public:
24  enum RouteType {
28  Invalid = 255,
29  };
30 
31  ErmVpnPrefix();
32  ErmVpnPrefix(uint8_t type, const RouteDistinguisher &rd,
33  const Ip4Address &group, const Ip4Address &source);
34  ErmVpnPrefix(uint8_t type, const RouteDistinguisher &rd,
35  const Ip4Address &router_id,
36  const Ip4Address &group, const Ip4Address &source);
37  const std::string GetType() const;
38 
39  static int FromProtoPrefix(const BgpProtoPrefix &proto_prefix,
40  ErmVpnPrefix *prefix);
41  static int FromProtoPrefix(BgpServer *server,
42  const BgpProtoPrefix &proto_prefix,
43  const BgpAttr *attr,
44  const Address::Family family,
45  ErmVpnPrefix *prefix, BgpAttrPtr *new_attr,
46  uint32_t *label, uint32_t *l3_label);
47  static ErmVpnPrefix FromString(const std::string &str,
48  boost::system::error_code *errorp = NULL);
49 
50  std::string ToString() const;
51  std::string ToXmppIdString() const;
52  static bool IsValidForBgp(uint8_t type);
53  static bool IsValid(uint8_t type);
54  bool operator==(const ErmVpnPrefix &rhs) const;
55 
56  uint8_t type() const { return type_; }
57  const RouteDistinguisher &route_distinguisher() const { return rd_; }
58  Ip4Address router_id() const { return router_id_; }
59  Ip4Address group() const { return group_; }
60  Ip4Address source() const { return source_; }
62 
63  void BuildProtoPrefix(BgpProtoPrefix *prefix) const;
64 
65 private:
66  uint8_t type_;
71 };
72 
73 class ErmVpnRoute : public BgpRoute {
74 public:
75  explicit ErmVpnRoute(const ErmVpnPrefix &prefix);
76  virtual int CompareTo(const Route &rhs) const;
77  virtual std::string ToString() const;
78  virtual std::string ToXmppIdString() const;
79  virtual bool IsValid() const;
80 
81  const ErmVpnPrefix &GetPrefix() const { return prefix_; }
82 
83  virtual KeyPtr GetDBRequestKey() const;
84  virtual void SetKey(const DBRequestKey *reqkey);
85  virtual void BuildProtoPrefix(BgpProtoPrefix *prefix,
86  const BgpAttr *attr = NULL,
87  uint32_t label = 0,
88  uint32_t l3_label = 0) const;
89  virtual void BuildBgpProtoNextHop(std::vector<uint8_t> &nh,
90  IpAddress nexthop) const;
91 
92  virtual bool IsLess(const DBEntry &genrhs) const {
93  const ErmVpnRoute &rhs = static_cast<const ErmVpnRoute &>(genrhs);
94  int cmp = CompareTo(rhs);
95  return (cmp < 0);
96  }
97 
98  const std::string GetType() const;
99 
100 private:
102  mutable std::string xmpp_id_str_;
103 
105 };
106 
107 #endif // SRC_BGP_ERMVPN_ERMVPN_ROUTE_H_
virtual std::string ToXmppIdString() const
void BuildProtoPrefix(BgpProtoPrefix *prefix) const
Definition: ermvpn_route.cc:94
const ErmVpnPrefix & GetPrefix() const
Definition: ermvpn_route.h:81
DISALLOW_COPY_AND_ASSIGN(ErmVpnRoute)
virtual int CompareTo(const Route &rhs) const
std::string ToString() const
Family
Definition: address.h:24
static bool IsValid(uint8_t type)
boost::asio::ip::address IpAddress
Definition: address.h:13
Ip4Address group_
Definition: ermvpn_route.h:69
RouteDistinguisher rd_
Definition: ermvpn_route.h:67
Definition: route.h:14
Ip4Address router_id_
Definition: ermvpn_route.h:68
std::string ToXmppIdString() const
std::unique_ptr< DBRequestKey > KeyPtr
Definition: db_entry.h:25
uint8_t type_
Definition: ermvpn_route.h:66
static ErmVpnPrefix FromString(const std::string &str, boost::system::error_code *errorp=NULL)
boost::intrusive_ptr< const BgpAttr > BgpAttrPtr
Definition: bgp_attr.h:991
uint8_t type() const
Definition: ermvpn_route.h:56
const std::string GetType() const
Ip4Address source_
Definition: ermvpn_route.h:70
virtual std::string ToString() const
Ip4Address router_id() const
Definition: ermvpn_route.h:58
const RouteDistinguisher & route_distinguisher() const
Definition: ermvpn_route.h:57
std::string xmpp_id_str_
Definition: ermvpn_route.h:102
Ip4Address source() const
Definition: ermvpn_route.h:60
boost::asio::ip::address_v4 Ip4Address
Definition: address.h:14
static bool IsValidForBgp(uint8_t type)
Ip4Address group() const
Definition: ermvpn_route.h:59
const std::string GetType() const
virtual KeyPtr GetDBRequestKey() const
void set_route_distinguisher(const RouteDistinguisher &rd)
Definition: ermvpn_route.h:61
bool operator==(const ErmVpnPrefix &rhs) const
ErmVpnRoute(const ErmVpnPrefix &prefix)
ErmVpnPrefix prefix_
Definition: ermvpn_route.h:101
static int FromProtoPrefix(const BgpProtoPrefix &proto_prefix, ErmVpnPrefix *prefix)
Definition: ermvpn_route.cc:49
virtual void BuildProtoPrefix(BgpProtoPrefix *prefix, const BgpAttr *attr=NULL, uint32_t label=0, uint32_t l3_label=0) const
virtual bool IsLess(const DBEntry &genrhs) const
Definition: ermvpn_route.h:92
virtual void SetKey(const DBRequestKey *reqkey)
virtual bool IsValid() const
virtual void BuildBgpProtoNextHop(std::vector< uint8_t > &nh, IpAddress nexthop) const