mirror of
https://github.com/netbirdio/netbird.git
synced 2025-07-22 08:40:36 +02:00
This PR introduces a new inactivity package responsible for monitoring peer activity and notifying when peers become inactive. Introduces a new Signal message type to close the peer connection after the idle timeout is reached. Periodically checks the last activity of registered peers via a Bind interface. Notifies via a channel when peers exceed a configurable inactivity threshold. Default settings DefaultInactivityThreshold is set to 15 minutes, with a minimum allowed threshold of 1 minute. Limitations This inactivity check does not support kernel WireGuard integration. In kernel–user space communication, the user space side will always be responsible for closing the connection.
79 lines
2.2 KiB
Protocol Buffer
79 lines
2.2 KiB
Protocol Buffer
syntax = "proto3";
|
|
|
|
import "google/protobuf/descriptor.proto";
|
|
|
|
option go_package = "/proto";
|
|
|
|
package signalexchange;
|
|
|
|
service SignalExchange {
|
|
// Synchronously connect to the Signal Exchange service offering connection candidates and waiting for connection candidates from the other party (remote peer)
|
|
rpc Send(EncryptedMessage) returns (EncryptedMessage) {}
|
|
// Connect to the Signal Exchange service offering connection candidates and maintain a channel for receiving candidates from the other party (remote peer)
|
|
rpc ConnectStream(stream EncryptedMessage) returns (stream EncryptedMessage) {}
|
|
}
|
|
|
|
// Used for sending through signal.
|
|
// The body of this message is the Body message encrypted with the Wireguard private key and the remote Peer key
|
|
message EncryptedMessage {
|
|
|
|
// Wireguard public key
|
|
string key = 2;
|
|
|
|
// Wireguard public key of the remote peer to connect to
|
|
string remoteKey = 3;
|
|
|
|
// encrypted message Body
|
|
bytes body = 4;
|
|
}
|
|
|
|
// A decrypted representation of the EncryptedMessage. Used locally before/after encryption
|
|
message Message {
|
|
// WireGuard public key
|
|
string key = 2;
|
|
|
|
// WireGuard public key of the remote peer to connect to
|
|
string remoteKey = 3;
|
|
|
|
Body body = 4;
|
|
}
|
|
|
|
// Actual body of the message that can contain credentials (type OFFER/ANSWER) or connection Candidate
|
|
// This part will be encrypted
|
|
message Body {
|
|
// Message type
|
|
enum Type {
|
|
OFFER = 0;
|
|
ANSWER = 1;
|
|
CANDIDATE = 2;
|
|
MODE = 4;
|
|
GO_IDLE = 5;
|
|
}
|
|
Type type = 1;
|
|
string payload = 2;
|
|
// wgListenPort is an actual WireGuard listen port
|
|
uint32 wgListenPort = 3;
|
|
string netBirdVersion = 4;
|
|
Mode mode = 5;
|
|
|
|
// featuresSupported list of supported features by the client of this protocol
|
|
repeated uint32 featuresSupported = 6;
|
|
|
|
// RosenpassConfig is a Rosenpass config of the remote peer our peer tries to connect to
|
|
RosenpassConfig rosenpassConfig = 7;
|
|
|
|
// relayServerAddress is url of the relay server
|
|
string relayServerAddress = 8;
|
|
}
|
|
|
|
// Mode indicates a connection mode
|
|
message Mode {
|
|
optional bool direct = 1;
|
|
}
|
|
|
|
message RosenpassConfig {
|
|
bytes rosenpassPubKey = 1;
|
|
// rosenpassServerAddr is an IP:port of the rosenpass service
|
|
string rosenpassServerAddr = 2;
|
|
}
|