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