Skip to content

Commit

Permalink
add openvpn data formats
Browse files Browse the repository at this point in the history
  • Loading branch information
ainghazal committed Apr 18, 2024
1 parent d5bcbfc commit 011ff9f
Show file tree
Hide file tree
Showing 2 changed files with 76 additions and 0 deletions.
46 changes: 46 additions & 0 deletions oonidata/src/oonidata/models/dataformats.py
Original file line number Diff line number Diff line change
Expand Up @@ -283,6 +283,7 @@ class DNSQuery(BaseModel):
dial_id: Optional[int] = None



@add_slots
@dataclass
class TCPConnectStatus(BaseModel):
Expand Down Expand Up @@ -364,3 +365,48 @@ class NetworkEvent(BaseModel):
# Deprecated fields
dial_id: Optional[int] = None
conn_id: Optional[int] = None

@add_slots
@dataclass
class OpenVPNConnectStatus(BaseModel):
success: bool
failure: Union[Failure, bool] = None

@add_slots
@dataclass
class OpenVPNHandshake(BaseModel):
bootstrap_time: float
endpoint: str
ip: str # we might want to make this optional, and scrub in favor of ASN/prefix
port: int
transport: str
provider: str
openvpn_options: Optional[dict] = None
status: OpenVPNConnectStatus
t0: float
t: float
tags: Optional[List[str]] = None
transaction_id: Optional[str] = None

@add_slots
@dataclass
class OpenVPNPacket(BaseModel):
operation: str
stage: str
opcode: str
id: int
acks: List[int]
payload_size: int
send_attempts: Optional[int] = None


@add_slots
@dataclass
class OpenVPNNetworkEvent(BaseModel):
operation: str
stage: str
t: float
tags: Optional[List[str]] = None
transaction_id: Optional[str] = None
packet: Optional[OpenVPNPacket] = None

30 changes: 30 additions & 0 deletions oonidata/src/oonidata/models/nettests/openvpn.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
from dataclasses import dataclass
from typing import List, Optional
from oonidata.compat import add_slots
from oonidata.models.dataformats import (
BaseTestKeys,
Failure,
TCPConnect,
OpenVPNHandshake,
OpenVPNNetworkEvent,
)
from oonidata.models.nettests.base_measurement import BaseMeasurement


@add_slots
@dataclass
class OpenVPNTestKeys(BaseTestKeys):
failure: Failure = None
success: Optional[bool] = False

network_events: Optional[List[OpenVPNNetworkEvent]] = None
openvpn_handshake: Optional[List[OpenVPNHandshake]] = None
tcp_connect: Optional[List[TCPConnect]] = None


@add_slots
@dataclass
class OpenVPN(BaseMeasurement):
__test_name__ = "openvpn"

test_keys: OpenVPNTestKeys

0 comments on commit 011ff9f

Please sign in to comment.