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 <map>
9
#include <mutex>
10
11
#include "
http/client/http_client.h
"
12
#include "
http/http_session.h
"
13
#include "
oper/vm_interface.h
"
14
15
class
MetadataServer
;
16
class
MetadataClient
;
17
18
class
MetadataProxy
{
19
public
:
20
struct
SessionData
{
21
SessionData
(
HttpConnection
*c,
bool
conn_close)
22
:
conn
(c),
content_len
(0),
data_sent
(0),
23
close_req
(conn_close),
header_end
(false) {}
24
25
HttpConnection
*
conn
;
26
uint32_t
content_len
;
27
uint32_t
data_sent
;
28
bool
close_req
;
29
bool
header_end
;
30
};
31
32
struct
MetadataStats
{
33
MetadataStats
() {
Reset
(); }
34
void
Reset
() {
requests
=
responses
=
proxy_sessions
=
internal_errors
= 0; }
35
36
uint32_t
requests
;
37
uint32_t
responses
;
38
uint32_t
proxy_sessions
;
39
uint32_t
internal_errors
;
40
};
41
42
typedef
std::map<HttpSession *, SessionData>
SessionMap
;
43
typedef
std::pair<HttpSession *, SessionData>
SessionPair
;
44
typedef
std::map<HttpConnection *, HttpSession *>
ConnectionSessionMap
;
45
typedef
std::pair<HttpConnection *, HttpSession *>
ConnectionSessionPair
;
46
typedef
boost::intrusive_ptr<HttpSession>
HttpSessionPtr
;
47
48
MetadataProxy
(
ServicesModule
*module,
const
std::string &secret);
49
virtual
~MetadataProxy
();
50
void
CloseSessions
();
51
void
Shutdown
();
52
53
void
HandleMetadataRequest
(
HttpSession
*session,
const
HttpRequest
*request);
54
void
HandleMetadataResponse
(
HttpConnection
*conn,
HttpSessionPtr
session,
55
std::string &msg, boost::system::error_code &ec);
56
57
void
OnServerSessionEvent
(
HttpSession
*session,
TcpSession::Event
event);
58
void
OnClientSessionEvent
(
HttpClientSession
*session,
TcpSession::Event
event);
59
60
const
MetadataStats
&
metadatastats
()
const
{
return
metadata_stats_
; }
61
void
ClearStats
() {
metadata_stats_
.
Reset
(); }
62
66
int
VhostIndex
(
const
std::string& vhost_name);
67
73
bool
NetlinkGetVhostIp
(
Ip6Address
& vhost_ll_ip);
74
79
void
NetlinkAddVhostNb
(
const
IpAddress
& nb_ip,
const
MacAddress
& via_mac);
80
84
void
NetlinkAddInterfaceRoute
(
const
IpAddress
& intf_addr);
85
93
void
AdvertiseMetaDataLinkLocalRoutes
(
const
VmInterface
* vm,
94
const
Ip6Address
& ll_ip,
const
VrfEntry
* intf_vrf);
95
100
void
DeleteMetaDataLinkLocalRoute
(
const
VmInterface
* vm_intf);
101
104
const
Ip6Address
&
Ipv6ServiceAddress
()
const
;
105
107
void
InitializeHttp6Server
(
const
VmInterface
*vhost0);
108
111
void
AdvertiseVhostRoute
();
112
113
116
void
DeleteVhostRoute
();
117
123
void
OnAVrfChange
(
DBTablePartBase
*part,
DBEntryBase
*e);
124
133
void
OnAFabricRouteChange
(
DBTablePartBase
*part,
DBEntryBase
*e);
134
141
void
OnAnInterfaceChange
(
DBTablePartBase
*part,
DBEntryBase
*e);
142
145
void
RegisterListeners
();
146
151
void
UnregisterListeners
();
152
153
private
:
154
HttpConnection
*
GetProxyConnection
(
HttpSession
*session,
155
bool
conn_close,
156
std::string *nova_hostname);
157
void
CloseServerSession
(
HttpSession
*session);
158
void
CloseClientSession
(
HttpConnection
*conn);
159
void
ErrorClose
(
HttpSession
*sesion, uint16_t error);
160
161
ServicesModule
*
services_
;
162
std::string
shared_secret_
;
163
166
MetadataServer
*
http_server_
;
167
170
MetadataServer
*
http_server6_
;
171
172
MetadataClient
*
http_client_
;
173
SessionMap
metadata_sessions_
;
174
ConnectionSessionMap
metadata_proxy_sessions_
;
175
MetadataStats
metadata_stats_
;
176
179
Ip6Address
ipv6_service_address_
;
180
183
DBTableBase::ListenerId
vrf_table_notify_id_
;
184
187
DBTableBase::ListenerId
fabric_notify_id_
;
188
191
DBTableBase::ListenerId
intf_table_notify_id_
;
192
197
std::map<std::string, Ip6Address>
ll_ipv6_addresses_
;
198
203
std::mutex
ll_ipv6_addr_mutex_
;
204
205
DISALLOW_COPY_AND_ASSIGN
(
MetadataProxy
);
206
};
207
208
#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:21
DBTableBase::ListenerId
int ListenerId
Definition:
db_table.h:62
DBTablePartBase
Definition:
db_table_partition.h:19
HttpClientSession
Definition:
http_client.h:38
HttpConnection
Definition:
http_client.h:64
HttpRequest
Definition:
http_request.h:14
MacAddress
Definition:
mac_address.h:14
MetadataClient
Definition:
metadata_client.h:11
MetadataProxy
Definition:
metadata_proxy.h:18
MetadataProxy::HandleMetadataResponse
void HandleMetadataResponse(HttpConnection *conn, HttpSessionPtr session, std::string &msg, boost::system::error_code &ec)
Definition:
metadata_proxy.cc:317
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:187
MetadataProxy::CloseSessions
void CloseSessions()
Definition:
metadata_proxy.cc:132
MetadataProxy::DISALLOW_COPY_AND_ASSIGN
DISALLOW_COPY_AND_ASSIGN(MetadataProxy)
MetadataProxy::http_client_
MetadataClient * http_client_
Definition:
metadata_proxy.h:172
MetadataProxy::ConnectionSessionMap
std::map< HttpConnection *, HttpSession * > ConnectionSessionMap
Definition:
metadata_proxy.h:44
MetadataProxy::CloseClientSession
void CloseClientSession(HttpConnection *conn)
Definition:
metadata_proxy.cc:500
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:507
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:183
MetadataProxy::ConnectionSessionPair
std::pair< HttpConnection *, HttpSession * > ConnectionSessionPair
Definition:
metadata_proxy.h:45
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:60
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:197
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:191
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:106
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:61
MetadataProxy::metadata_stats_
MetadataStats metadata_stats_
Definition:
metadata_proxy.h:175
MetadataProxy::shared_secret_
std::string shared_secret_
Definition:
metadata_proxy.h:162
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:170
MetadataProxy::Shutdown
void Shutdown()
Definition:
metadata_proxy.cc:146
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:179
MetadataProxy::OnServerSessionEvent
void OnServerSessionEvent(HttpSession *session, TcpSession::Event event)
Definition:
metadata_proxy.cc:393
MetadataProxy::HandleMetadataRequest
void HandleMetadataRequest(HttpSession *session, const HttpRequest *request)
Definition:
metadata_proxy.cc:166
MetadataProxy::SessionMap
std::map< HttpSession *, SessionData > SessionMap
Definition:
metadata_proxy.h:42
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:437
MetadataProxy::services_
ServicesModule * services_
Definition:
metadata_proxy.h:161
MetadataProxy::~MetadataProxy
virtual ~MetadataProxy()
Definition:
metadata_proxy.cc:128
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:166
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:46
MetadataProxy::SessionPair
std::pair< HttpSession *, SessionData > SessionPair
Definition:
metadata_proxy.h:43
MetadataProxy::metadata_proxy_sessions_
ConnectionSessionMap metadata_proxy_sessions_
Definition:
metadata_proxy.h:174
MetadataProxy::metadata_sessions_
SessionMap metadata_sessions_
Definition:
metadata_proxy.h:173
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:410
MetadataProxy::ll_ipv6_addr_mutex_
std::mutex ll_ipv6_addr_mutex_
A mutex which prevents simultaneous access to MetadataProxy::ll_ipv6_addresses_ table and member func...
Definition:
metadata_proxy.h:203
MetadataProxy::CloseServerSession
void CloseServerSession(HttpSession *session)
Definition:
metadata_proxy.cc:494
MetadataServer
Definition:
metadata_server.h:11
ServicesModule
Definition:
services_init.h:20
TcpSession::Event
Event
Definition:
tcp_session.h:43
VmInterface
Definition:
vm_interface.h:360
VrfEntry
Definition:
vrf.h:89
http_client.h
http_session.h
HttpSession
Definition:
http_session.cc:134
MetadataProxy::MetadataStats
Definition:
metadata_proxy.h:32
MetadataProxy::MetadataStats::proxy_sessions
uint32_t proxy_sessions
Definition:
metadata_proxy.h:38
MetadataProxy::MetadataStats::MetadataStats
MetadataStats()
Definition:
metadata_proxy.h:33
MetadataProxy::MetadataStats::Reset
void Reset()
Definition:
metadata_proxy.h:34
MetadataProxy::MetadataStats::responses
uint32_t responses
Definition:
metadata_proxy.h:37
MetadataProxy::MetadataStats::requests
uint32_t requests
Definition:
metadata_proxy.h:36
MetadataProxy::MetadataStats::internal_errors
uint32_t internal_errors
Definition:
metadata_proxy.h:39
MetadataProxy::SessionData
Definition:
metadata_proxy.h:20
MetadataProxy::SessionData::close_req
bool close_req
Definition:
metadata_proxy.h:28
MetadataProxy::SessionData::SessionData
SessionData(HttpConnection *c, bool conn_close)
Definition:
metadata_proxy.h:21
MetadataProxy::SessionData::conn
HttpConnection * conn
Definition:
metadata_proxy.h:25
MetadataProxy::SessionData::content_len
uint32_t content_len
Definition:
metadata_proxy.h:26
MetadataProxy::SessionData::header_end
bool header_end
Definition:
metadata_proxy.h:29
MetadataProxy::SessionData::data_sent
uint32_t data_sent
Definition:
metadata_proxy.h:27
vm_interface.h
contrail
controller
src
vnsw
agent
services
metadata_proxy.h
Generated by
1.9.1