mirror of
https://github.com/ton-blockchain/ton
synced 2025-03-09 15:40:10 +00:00
Ratelimit nochannel ADNL packets (#1147)
* Get ADNL stats in validator console * Add timestamp to stats * Limit nochannel adnl packets --------- Co-authored-by: SpyCheese <mikle98@yandex.ru>
This commit is contained in:
parent
e08111159f
commit
b2b79fead1
18 changed files with 838 additions and 175 deletions
|
@ -55,6 +55,7 @@ class AdnlLocalId : public td::actor::Actor {
|
|||
void deliver(AdnlNodeIdShort src, td::BufferSlice data);
|
||||
void deliver_query(AdnlNodeIdShort src, td::BufferSlice data, td::Promise<td::BufferSlice> promise);
|
||||
void receive(td::IPAddress addr, td::BufferSlice data);
|
||||
void decrypt_packet_done(td::IPAddress addr);
|
||||
|
||||
void subscribe(std::string prefix, std::unique_ptr<AdnlPeerTable::Callback> callback);
|
||||
void unsubscribe(std::string prefix);
|
||||
|
@ -77,6 +78,8 @@ class AdnlLocalId : public td::actor::Actor {
|
|||
void update_packet(AdnlPacket packet, bool update_id, bool sign, td::int32 update_addr_list_if,
|
||||
td::int32 update_priority_addr_list_if, td::Promise<AdnlPacket> promise);
|
||||
|
||||
void get_stats(td::Promise<tl_object_ptr<ton_api::adnl_stats_localId>> promise);
|
||||
|
||||
td::uint32 get_mode() {
|
||||
return mode_;
|
||||
}
|
||||
|
@ -101,6 +104,22 @@ class AdnlLocalId : public td::actor::Actor {
|
|||
|
||||
td::uint32 mode_;
|
||||
|
||||
struct InboundRateLimiter {
|
||||
RateLimiter rate_limiter = RateLimiter(75, 0.33);
|
||||
td::uint64 currently_decrypting_packets = 0;
|
||||
};
|
||||
std::map<td::IPAddress, InboundRateLimiter> inbound_rate_limiter_;
|
||||
struct PacketStats {
|
||||
double ts_start = 0.0, ts_end = 0.0;
|
||||
std::map<td::IPAddress, td::uint64> decrypted_packets;
|
||||
std::map<td::IPAddress, td::uint64> dropped_packets;
|
||||
|
||||
tl_object_ptr<ton_api::adnl_stats_localIdPackets> tl() const;
|
||||
} packet_stats_cur_, packet_stats_prev_, packet_stats_total_;
|
||||
void add_decrypted_packet_stats(td::IPAddress addr);
|
||||
void add_dropped_packet_stats(td::IPAddress addr);
|
||||
void prepare_packet_stats();
|
||||
|
||||
void publish_address_list();
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue