mirror of
https://github.com/OpenVPN/openvpn3.git
synced 2024-09-19 19:52:15 +02:00
ovpn-dco: extend stats in order to retrieve both VPN and transport numbers
Signed-off-by: Antonio Quartulli <antonio@openvpn.net>
This commit is contained in:
parent
37ae62143d
commit
9b976d6e2b
@ -505,7 +505,15 @@ class OvpnDcoClient : public Client,
|
||||
struct OvpnDcoPeer peer;
|
||||
buf.read(&peer, sizeof(peer));
|
||||
|
||||
last_stats = SessionStats::DCOTransportSource::Data(peer.rx_bytes, peer.tx_bytes);
|
||||
last_stats = SessionStats::DCOTransportSource::Data(peer.transport.rx_bytes,
|
||||
peer.transport.tx_bytes,
|
||||
peer.vpn.rx_bytes,
|
||||
peer.vpn.tx_bytes,
|
||||
peer.transport.rx_pkts,
|
||||
peer.transport.tx_pkts,
|
||||
peer.vpn.rx_pkts,
|
||||
peer.vpn.tx_pkts);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -133,6 +133,11 @@ class SessionStats : public RC<thread_safe_refcount>
|
||||
count_t tun_bytes_in = 0;
|
||||
count_t tun_bytes_out = 0;
|
||||
|
||||
count_t transport_pkts_in = 0;
|
||||
count_t transport_pkts_out = 0;
|
||||
count_t tun_pkts_in = 0;
|
||||
count_t tun_pkts_out = 0;
|
||||
|
||||
Data() = default;
|
||||
|
||||
Data(count_t transport_bytes_in_arg, count_t transport_bytes_out_arg)
|
||||
@ -148,6 +153,26 @@ class SessionStats : public RC<thread_safe_refcount>
|
||||
{
|
||||
}
|
||||
|
||||
Data(count_t transport_bytes_in_arg,
|
||||
count_t transport_bytes_out_arg,
|
||||
count_t tun_bytes_in_arg,
|
||||
count_t tun_bytes_out_arg,
|
||||
count_t transport_pkts_in_arg,
|
||||
count_t transport_pkts_out_arg,
|
||||
count_t tun_pkts_in_arg,
|
||||
count_t tun_pkts_out_arg)
|
||||
|
||||
: transport_bytes_in(transport_bytes_in_arg),
|
||||
transport_bytes_out(transport_bytes_out_arg),
|
||||
tun_bytes_in(tun_bytes_in_arg),
|
||||
tun_bytes_out(tun_bytes_out_arg),
|
||||
transport_pkts_in(transport_pkts_in_arg),
|
||||
transport_pkts_out(transport_pkts_out_arg),
|
||||
tun_pkts_in(tun_pkts_in_arg),
|
||||
tun_pkts_out(tun_pkts_out_arg)
|
||||
{
|
||||
}
|
||||
|
||||
Data operator-(const Data &rhs) const
|
||||
{
|
||||
Data data;
|
||||
@ -159,6 +184,14 @@ class SessionStats : public RC<thread_safe_refcount>
|
||||
data.tun_bytes_in = tun_bytes_in - rhs.tun_bytes_in;
|
||||
if (tun_bytes_out > rhs.tun_bytes_out)
|
||||
data.tun_bytes_out = tun_bytes_out - rhs.tun_bytes_out;
|
||||
if (transport_pkts_in > rhs.transport_pkts_in)
|
||||
data.transport_pkts_in = transport_pkts_in - rhs.transport_pkts_in;
|
||||
if (transport_pkts_out > rhs.transport_pkts_out)
|
||||
data.transport_pkts_out = transport_pkts_out - rhs.transport_pkts_out;
|
||||
if (tun_pkts_in > rhs.tun_pkts_in)
|
||||
data.tun_pkts_in = tun_pkts_in - rhs.tun_pkts_in;
|
||||
if (tun_pkts_out > rhs.tun_pkts_out)
|
||||
data.tun_pkts_out = tun_pkts_out - rhs.tun_pkts_out;
|
||||
return data;
|
||||
}
|
||||
};
|
||||
@ -180,6 +213,10 @@ class SessionStats : public RC<thread_safe_refcount>
|
||||
stats_[BYTES_OUT] += data.transport_bytes_out;
|
||||
stats_[TUN_BYTES_IN] += data.tun_bytes_in;
|
||||
stats_[TUN_BYTES_OUT] += data.tun_bytes_out;
|
||||
stats_[PACKETS_IN] += data.transport_pkts_in;
|
||||
stats_[PACKETS_OUT] += data.transport_pkts_out;
|
||||
stats_[TUN_PACKETS_IN] += data.tun_pkts_in;
|
||||
stats_[TUN_PACKETS_OUT] += data.tun_pkts_out;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -57,8 +57,16 @@ struct OvpnDcoPeer
|
||||
__u32 interval;
|
||||
__u32 timeout;
|
||||
} keepalive;
|
||||
__u64 rx_bytes, tx_bytes;
|
||||
__u32 rx_pkts, tx_pkts;
|
||||
struct
|
||||
{
|
||||
__u64 rx_bytes, tx_bytes;
|
||||
__u32 rx_pkts, tx_pkts;
|
||||
} vpn;
|
||||
struct
|
||||
{
|
||||
__u64 rx_bytes, tx_bytes;
|
||||
__u32 rx_pkts, tx_pkts;
|
||||
} transport;
|
||||
};
|
||||
|
||||
/**
|
||||
@ -685,8 +693,7 @@ class GeNL : public RC<thread_unsafe_refcount>
|
||||
return NL_SKIP;
|
||||
}
|
||||
|
||||
if (nla_parse(attrs, OVPN_ATTR_MAX, genlmsg_attrdata(gnlh, 0),
|
||||
genlmsg_attrlen(gnlh, 0), NULL))
|
||||
if (nla_parse(attrs, OVPN_ATTR_MAX, genlmsg_attrdata(gnlh, 0), genlmsg_attrlen(gnlh, 0), NULL))
|
||||
{
|
||||
OPENVPN_LOG("received bogus data from ovpn-dco");
|
||||
return NL_SKIP;
|
||||
@ -784,10 +791,15 @@ class GeNL : public RC<thread_unsafe_refcount>
|
||||
nla_len(get_peer_attrs[OVPN_GET_PEER_RESP_ATTR_SOCKADDR_REMOTE]));
|
||||
peer.keepalive.interval = nla_get_u32(get_peer_attrs[OVPN_GET_PEER_RESP_ATTR_KEEPALIVE_INTERVAL]);
|
||||
peer.keepalive.timeout = nla_get_u32(get_peer_attrs[OVPN_GET_PEER_RESP_ATTR_KEEPALIVE_TIMEOUT]);
|
||||
peer.rx_bytes = nla_get_u64(get_peer_attrs[OVPN_GET_PEER_RESP_ATTR_RX_BYTES]);
|
||||
peer.tx_bytes = nla_get_u64(get_peer_attrs[OVPN_GET_PEER_RESP_ATTR_TX_BYTES]);
|
||||
peer.rx_pkts = nla_get_u32(get_peer_attrs[OVPN_GET_PEER_RESP_ATTR_RX_PACKETS]);
|
||||
peer.tx_pkts = nla_get_u32(get_peer_attrs[OVPN_GET_PEER_RESP_ATTR_TX_PACKETS]);
|
||||
peer.vpn.rx_bytes = nla_get_u64(get_peer_attrs[OVPN_GET_PEER_RESP_ATTR_VPN_RX_BYTES]);
|
||||
peer.vpn.tx_bytes = nla_get_u64(get_peer_attrs[OVPN_GET_PEER_RESP_ATTR_VPN_TX_BYTES]);
|
||||
peer.vpn.rx_pkts = nla_get_u32(get_peer_attrs[OVPN_GET_PEER_RESP_ATTR_VPN_RX_PACKETS]);
|
||||
peer.vpn.tx_pkts = nla_get_u32(get_peer_attrs[OVPN_GET_PEER_RESP_ATTR_VPN_TX_PACKETS]);
|
||||
|
||||
peer.transport.rx_bytes = nla_get_u64(get_peer_attrs[OVPN_GET_PEER_RESP_ATTR_LINK_RX_BYTES]);
|
||||
peer.transport.tx_bytes = nla_get_u64(get_peer_attrs[OVPN_GET_PEER_RESP_ATTR_LINK_TX_BYTES]);
|
||||
peer.transport.rx_pkts = nla_get_u32(get_peer_attrs[OVPN_GET_PEER_RESP_ATTR_LINK_RX_PACKETS]);
|
||||
peer.transport.tx_pkts = nla_get_u32(get_peer_attrs[OVPN_GET_PEER_RESP_ATTR_LINK_TX_PACKETS]);
|
||||
|
||||
self->reset_buffer();
|
||||
self->buf.write(&gnlh->cmd, sizeof(gnlh->cmd));
|
||||
|
Loading…
Reference in New Issue
Block a user