OpenSDN source code
metadata_proxy.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2013 Juniper Networks, Inc. All rights reserved.
3
*/
4
5
#ifndef vnsw_agent_metadata_proxy_h_
6
#define vnsw_agent_metadata_proxy_h_
7
8
#include "
http/client/http_client.h
"
9
#include "
http/http_session.h
"
10
#include "
oper/vm_interface.h
"
11
#include <map>
12
13
class
MetadataServer
;
14
class
MetadataClient
;
15
16
class
MetadataProxy
{
17
public
:
18
struct
SessionData
{
19
SessionData
(
HttpConnection
*c,
bool
conn_close)
20
:
conn
(c),
content_len
(0),
data_sent
(0),
21
close_req
(conn_close),
header_end
(false) {}
22
23
HttpConnection
*
conn
;
24
uint32_t
content_len
;
25
uint32_t
data_sent
;
26
bool
close_req
;
27
bool
header_end
;
28
};
29
30
struct
MetadataStats
{
31
MetadataStats
() {
Reset
(); }
32
void
Reset
() {
requests
=
responses
=
proxy_sessions
=
internal_errors
= 0; }
33
34
uint32_t
requests
;
35
uint32_t
responses
;
36
uint32_t
proxy_sessions
;
37
uint32_t
internal_errors
;
38
};
39
40
typedef
std::map<HttpSession *, SessionData>
SessionMap
;
41
typedef
std::pair<HttpSession *, SessionData>
SessionPair
;
42
typedef
std::map<HttpConnection *, HttpSession *>
ConnectionSessionMap
;
43
typedef
std::pair<HttpConnection *, HttpSession *>
ConnectionSessionPair
;
44
typedef
boost::intrusive_ptr<HttpSession>
HttpSessionPtr
;
45
46
MetadataProxy
(
ServicesModule
*module,
const
std::string &secret);
47
virtual
~MetadataProxy
();
48
void
CloseSessions
();
49
void
Shutdown
();
50
51
void
HandleMetadataRequest
(
HttpSession
*session,
const
HttpRequest
*request);
52
void
HandleMetadataResponse
(
HttpConnection
*conn,
HttpSessionPtr
session,
53
std::string &msg, boost::system::error_code &ec);
54
55
void
OnServerSessionEvent
(
HttpSession
*session,
TcpSession::Event
event);
56
void
OnClientSessionEvent
(
HttpClientSession
*session,
TcpSession::Event
event);
57
58
const
MetadataStats
&
metadatastats
()
const
{
return
metadata_stats_
; }
59
void
ClearStats
() {
metadata_stats_
.
Reset
(); }
60
64
int
VhostIndex
(
const
std::string& vhost_name);
65
71
bool
NetlinkGetVhostIp
(
Ip6Address
& vhost_ll_ip);
72
77
void
NetlinkAddVhostNb
(
const
IpAddress
& nb_ip,
const
MacAddress
& via_mac);
78
82
void
NetlinkAddInterfaceRoute
(
const
IpAddress
& intf_addr);
83
91
void
AdvertiseMetaDataLinkLocalRoutes
(
const
VmInterface
* vm,
92
const
Ip6Address
& ll_ip,
const
VrfEntry
* intf_vrf);
93
98
void
DeleteMetaDataLinkLocalRoute
(
const
VmInterface
* vm_intf);
99
102
const
Ip6Address
&
Ipv6ServiceAddress
()
const
;
103
105
void
InitializeHttp6Server
(
const
VmInterface
*vhost0);
106
109
void
AdvertiseVhostRoute
();
110
111
114
void
DeleteVhostRoute
();
115
121
void
OnAVrfChange
(
DBTablePartBase
*part,
DBEntryBase
*e);
122
131
void
OnAFabricRouteChange
(
DBTablePartBase
*part,
DBEntryBase
*e);
132
139
void
OnAnInterfaceChange
(
DBTablePartBase
*part,
DBEntryBase
*e);
140
143
void
RegisterListeners
();
144
149
void
UnregisterListeners
();
150
151
private
:
152
HttpConnection
*
GetProxyConnection
(
HttpSession
*session,
153
bool
conn_close,
154
std::string *nova_hostname);
155
void
CloseServerSession
(
HttpSession
*session);
156
void
CloseClientSession
(
HttpConnection
*conn);
157
void
ErrorClose
(
HttpSession
*sesion, uint16_t error);
158
159
ServicesModule
*
services_
;
160
std::string
shared_secret_
;
161
164
MetadataServer
*
http_server_
;
165
168
MetadataServer
*
http_server6_
;
169
170
MetadataClient
*
http_client_
;
171
SessionMap
metadata_sessions_
;
172
ConnectionSessionMap
metadata_proxy_sessions_
;
173
MetadataStats
metadata_stats_
;
174
177
Ip6Address
ipv6_service_address_
;
178
181
DBTableBase::ListenerId
vrf_table_notify_id_
;
182
185
DBTableBase::ListenerId
fabric_notify_id_
;
186
189
DBTableBase::ListenerId
intf_table_notify_id_
;
190
195
std::map<std::string, Ip6Address>
ll_ipv6_addresses_
;
196
201
tbb::mutex
ll_ipv6_addr_mutex_
;
202
203
DISALLOW_COPY_AND_ASSIGN
(
MetadataProxy
);
204
};
205
206
#endif
// vnsw_agent_metadata_proxy_h_
Ip6Address
boost::asio::ip::address_v6 Ip6Address
Definition:
address.h:15
IpAddress
boost::asio::ip::address IpAddress
Definition:
address.h:13
DBEntryBase
Definition:
db_entry.h:22
DBTableBase::ListenerId
int ListenerId
Definition:
db_table.h:62
DBTablePartBase
Definition:
db_table_partition.h:18
HttpClientSession
Definition:
http_client.h:36
HttpConnection
Definition:
http_client.h:62
HttpRequest
Definition:
http_request.h:14
MacAddress
Definition:
mac_address.h:14
MetadataClient
Definition:
metadata_client.h:11
MetadataProxy
Definition:
metadata_proxy.h:16
MetadataProxy::HandleMetadataResponse
void HandleMetadataResponse(HttpConnection *conn, HttpSessionPtr session, std::string &msg, boost::system::error_code &ec)
Definition:
metadata_proxy.cc:315
MetadataProxy::ll_ipv6_addr_mutex_
tbb::mutex ll_ipv6_addr_mutex_
A mutex which prevents simultaneous access to MetadataProxy::ll_ipv6_addresses_ table and member func...
Definition:
metadata_proxy.h:201
MetadataProxy::fabric_notify_id_
DBTableBase::ListenerId fabric_notify_id_
an ID of a listener (callback) that acts when a Fabric Policy VRF entry is modified
Definition:
metadata_proxy.h:185
MetadataProxy::CloseSessions
void CloseSessions()
Definition:
metadata_proxy.cc:130
MetadataProxy::DISALLOW_COPY_AND_ASSIGN
DISALLOW_COPY_AND_ASSIGN(MetadataProxy)
MetadataProxy::http_client_
MetadataClient * http_client_
Definition:
metadata_proxy.h:170
MetadataProxy::ConnectionSessionMap
std::map< HttpConnection *, HttpSession * > ConnectionSessionMap
Definition:
metadata_proxy.h:42
MetadataProxy::CloseClientSession
void CloseClientSession(HttpConnection *conn)
Definition:
metadata_proxy.cc:498
MetadataProxy::NetlinkAddVhostNb
void NetlinkAddVhostNb(const IpAddress &nb_ip, const MacAddress &via_mac)
Adds a new neighbour (an arp entry) with given IP and MAC addresses.
Definition:
freebsd/metadata_ipv6_netlink.cc:18
MetadataProxy::ErrorClose
void ErrorClose(HttpSession *sesion, uint16_t error)
Definition:
metadata_proxy.cc:505
MetadataProxy::DeleteVhostRoute
void DeleteVhostRoute()
Deletes the LL route to vhost0 interface in the fabric VRF instance.
Definition:
metadata_proxy_ip6.cc:191
MetadataProxy::vrf_table_notify_id_
DBTableBase::ListenerId vrf_table_notify_id_
an ID of a listener (callback) that acts when the VRF Table is modified
Definition:
metadata_proxy.h:181
MetadataProxy::ConnectionSessionPair
std::pair< HttpConnection *, HttpSession * > ConnectionSessionPair
Definition:
metadata_proxy.h:43
MetadataProxy::RegisterListeners
void RegisterListeners()
Registers callbacks to intercept Agent's events emerging when a VRF entry is modified or an Interface...
Definition:
metadata_proxy_ip6.cc:281
MetadataProxy::metadatastats
const MetadataStats & metadatastats() const
Definition:
metadata_proxy.h:58
MetadataProxy::ll_ipv6_addresses_
std::map< std::string, Ip6Address > ll_ipv6_addresses_
A correspondence table between a name of a vm interface, which requests a data from the service and t...
Definition:
metadata_proxy.h:195
MetadataProxy::AdvertiseVhostRoute
void AdvertiseVhostRoute()
Advertises the LL route to vhost0 interface in the fabric VRF instance.
Definition:
metadata_proxy_ip6.cc:165
MetadataProxy::intf_table_notify_id_
DBTableBase::ListenerId intf_table_notify_id_
an ID of a listener (callback) that acts when an InterfaceTable entry is modified
Definition:
metadata_proxy.h:189
MetadataProxy::AdvertiseMetaDataLinkLocalRoutes
void AdvertiseMetaDataLinkLocalRoutes(const VmInterface *vm, const Ip6Address &ll_ip, const VrfEntry *intf_vrf)
Advertises routes to a given vm-interface via a given IPv6 address. Routes are announced in the fabri...
Definition:
metadata_proxy_ip6.cc:35
MetadataProxy::OnAVrfChange
void OnAVrfChange(DBTablePartBase *part, DBEntryBase *e)
A callback that is invoked each time when a VRF entry is modified: added, changed or deleted.
Definition:
metadata_proxy_ip6.cc:199
MetadataProxy::MetadataProxy
MetadataProxy(ServicesModule *module, const std::string &secret)
Definition:
metadata_proxy.cc:104
MetadataProxy::NetlinkGetVhostIp
bool NetlinkGetVhostIp(Ip6Address &vhost_ll_ip)
Adds an IP address specified in vhost_ll_ip to vhost0 interface inet6 addresses.
Definition:
linux/metadata_ipv6_netlink.cc:359
MetadataProxy::ClearStats
void ClearStats()
Definition:
metadata_proxy.h:59
MetadataProxy::metadata_stats_
MetadataStats metadata_stats_
Definition:
metadata_proxy.h:173
MetadataProxy::shared_secret_
std::string shared_secret_
Definition:
metadata_proxy.h:160
MetadataProxy::http_server6_
MetadataServer * http_server6_
A pointer to a HTTP server listening on a IPv6 socket for Metadata requests from tenants / virtual ma...
Definition:
metadata_proxy.h:168
MetadataProxy::Shutdown
void Shutdown()
Definition:
metadata_proxy.cc:144
MetadataProxy::OnAnInterfaceChange
void OnAnInterfaceChange(DBTablePartBase *part, DBEntryBase *e)
A callback which is invoked everytime any vm interface is changed. Handles deletion of routes associa...
Definition:
metadata_proxy_ip6.cc:262
MetadataProxy::ipv6_service_address_
Ip6Address ipv6_service_address_
An IPv6 address on which Metadata6 link local service listens on. We use it instead of IPv4 compute I...
Definition:
metadata_proxy.h:177
MetadataProxy::OnServerSessionEvent
void OnServerSessionEvent(HttpSession *session, TcpSession::Event event)
Definition:
metadata_proxy.cc:391
MetadataProxy::HandleMetadataRequest
void HandleMetadataRequest(HttpSession *session, const HttpRequest *request)
Definition:
metadata_proxy.cc:164
MetadataProxy::SessionMap
std::map< HttpSession *, SessionData > SessionMap
Definition:
metadata_proxy.h:40
MetadataProxy::UnregisterListeners
void UnregisterListeners()
Unregisters all callbacks that were registered earlier to intercept Agent's events: MetadataProxy::On...
Definition:
metadata_proxy_ip6.cc:298
MetadataProxy::Ipv6ServiceAddress
const Ip6Address & Ipv6ServiceAddress() const
Returns an IPv6 address of the Metadata TF link local service.
Definition:
metadata_proxy_ip6.cc:140
MetadataProxy::DeleteMetaDataLinkLocalRoute
void DeleteMetaDataLinkLocalRoute(const VmInterface *vm_intf)
Deletes an announced earlier route to a vm interface via a given IPv6 address.
Definition:
metadata_proxy_ip6.cc:76
MetadataProxy::NetlinkAddInterfaceRoute
void NetlinkAddInterfaceRoute(const IpAddress &intf_addr)
Adds routes to internal addresses of VM's interfaces.
Definition:
linux/metadata_ipv6_netlink.cc:493
MetadataProxy::GetProxyConnection
HttpConnection * GetProxyConnection(HttpSession *session, bool conn_close, std::string *nova_hostname)
Definition:
metadata_proxy.cc:435
MetadataProxy::services_
ServicesModule * services_
Definition:
metadata_proxy.h:159
MetadataProxy::~MetadataProxy
virtual ~MetadataProxy()
Definition:
metadata_proxy.cc:126
MetadataProxy::VhostIndex
int VhostIndex(const std::string &vhost_name)
Returns index of a network device that is specified by vhost_name.
Definition:
metadata_proxy_ip6.cc:26
MetadataProxy::http_server_
MetadataServer * http_server_
A pointer to a HTTP server listening on a IPv4 socket for Metadata requests from tenants / virtual ma...
Definition:
metadata_proxy.h:164
MetadataProxy::OnAFabricRouteChange
void OnAFabricRouteChange(DBTablePartBase *part, DBEntryBase *e)
A callback that is invoked each time when a route is modified in the fabric policy VRF inet4 unicast ...
Definition:
metadata_proxy_ip6.cc:222
MetadataProxy::HttpSessionPtr
boost::intrusive_ptr< HttpSession > HttpSessionPtr
Definition:
metadata_proxy.h:44
MetadataProxy::SessionPair
std::pair< HttpSession *, SessionData > SessionPair
Definition:
metadata_proxy.h:41
MetadataProxy::metadata_proxy_sessions_
ConnectionSessionMap metadata_proxy_sessions_
Definition:
metadata_proxy.h:172
MetadataProxy::metadata_sessions_
SessionMap metadata_sessions_
Definition:
metadata_proxy.h:171
MetadataProxy::InitializeHttp6Server
void InitializeHttp6Server(const VmInterface *vhost0)
Initializes an HTTP server for IPv6 requests.
Definition:
metadata_proxy_ip6.cc:144
MetadataProxy::OnClientSessionEvent
void OnClientSessionEvent(HttpClientSession *session, TcpSession::Event event)
Definition:
metadata_proxy.cc:408
MetadataProxy::CloseServerSession
void CloseServerSession(HttpSession *session)
Definition:
metadata_proxy.cc:492
MetadataServer
Definition:
metadata_server.h:11
ServicesModule
Definition:
services_init.h:20
TcpSession::Event
Event
Definition:
tcp_session.h:47
VmInterface
Definition:
vm_interface.h:358
VrfEntry
Definition:
vrf.h:86
http_client.h
http_session.h
HttpSession
Definition:
http_session.cc:133
MetadataProxy::MetadataStats
Definition:
metadata_proxy.h:30
MetadataProxy::MetadataStats::proxy_sessions
uint32_t proxy_sessions
Definition:
metadata_proxy.h:36
MetadataProxy::MetadataStats::MetadataStats
MetadataStats()
Definition:
metadata_proxy.h:31
MetadataProxy::MetadataStats::Reset
void Reset()
Definition:
metadata_proxy.h:32
MetadataProxy::MetadataStats::responses
uint32_t responses
Definition:
metadata_proxy.h:35
MetadataProxy::MetadataStats::requests
uint32_t requests
Definition:
metadata_proxy.h:34
MetadataProxy::MetadataStats::internal_errors
uint32_t internal_errors
Definition:
metadata_proxy.h:37
MetadataProxy::SessionData
Definition:
metadata_proxy.h:18
MetadataProxy::SessionData::close_req
bool close_req
Definition:
metadata_proxy.h:26
MetadataProxy::SessionData::SessionData
SessionData(HttpConnection *c, bool conn_close)
Definition:
metadata_proxy.h:19
MetadataProxy::SessionData::conn
HttpConnection * conn
Definition:
metadata_proxy.h:23
MetadataProxy::SessionData::content_len
uint32_t content_len
Definition:
metadata_proxy.h:24
MetadataProxy::SessionData::header_end
bool header_end
Definition:
metadata_proxy.h:27
MetadataProxy::SessionData::data_sent
uint32_t data_sent
Definition:
metadata_proxy.h:25
vm_interface.h
contrail
controller
src
vnsw
agent
services
metadata_proxy.h
Generated by
1.9.1