import * as VScript from "vscript";
import * as _Time from "./Time";
import * as _NetworkInterfaces from "./NetworkInterfaces";
import * as _PTP from "./PTP";
export declare const lift: {
    readonly AllGeneralSettings: (kwl: string | null, socket: VScript.VSocket) => AllGeneralSettings | null;
    readonly Agent: (kwl: string | null, socket: VScript.VSocket) => Agent | null;
    readonly AgentMasterStatistics: (kwl: string | null, socket: VScript.VSocket) => AgentMasterStatistics | null;
    readonly AgentSlaveStatisticsInstantaneousEstimate: (x: any | null, _: VScript.VSocket) => AgentSlaveStatisticsInstantaneousEstimate | null;
    readonly AgentSlaveStatisticsOneWayDelay: (x: any | null, _: VScript.VSocket) => AgentSlaveStatisticsOneWayDelay | null;
    readonly AgentSlaveStatistics: (kwl: string | null, socket: VScript.VSocket) => AgentSlaveStatistics | null;
    readonly MasterSettings: (kwl: string | null, socket: VScript.VSocket) => MasterSettings | null;
    readonly MasterSettingsGrandmaster: (kwl: string | null, socket: VScript.VSocket) => MasterSettingsGrandmaster | null;
    readonly SlaveSettings: (kwl: string | null, socket: VScript.VSocket) => SlaveSettings | null;
    readonly Port: (kwl: string | null, socket: VScript.VSocket) => Port | null;
    readonly PortBestMasters: (kwl: string | null, socket: VScript.VSocket) => PortBestMasters | null;
    readonly Master: (kwl: string | null, socket: VScript.VSocket) => Master | null;
    readonly MasterVisibleVia: (kwl: string | null, socket: VScript.VSocket) => MasterVisibleVia | null;
};
export declare const lower: {
    readonly AllGeneralSettings: (ref: AllGeneralSettings | null) => string | null;
    readonly Agent: (ref: Agent | null) => string | null;
    readonly AgentMasterStatistics: (ref: AgentMasterStatistics | null) => string | null;
    readonly AgentSlaveStatisticsInstantaneousEstimate: (x: AgentSlaveStatisticsInstantaneousEstimate | null) => (number | boolean | "SyncFollowUp" | "DelayRespReq")[] | null;
    readonly AgentSlaveStatisticsOneWayDelay: (x: AgentSlaveStatisticsOneWayDelay | null) => number[] | null;
    readonly AgentSlaveStatistics: (ref: AgentSlaveStatistics | null) => string | null;
    readonly MasterSettings: (ref: MasterSettings | null) => string | null;
    readonly MasterSettingsGrandmaster: (ref: MasterSettingsGrandmaster | null) => string | null;
    readonly SlaveSettings: (ref: SlaveSettings | null) => string | null;
    readonly Port: (ref: Port | null) => string | null;
    readonly PortBestMasters: (ref: PortBestMasters | null) => string | null;
    readonly Master: (ref: Master | null) => string | null;
    readonly MasterVisibleVia: (ref: MasterVisibleVia | null) => string | null;
};
export declare type MessageClass = "Event" | "General";
export declare type MessageType = "Sync" | "Delay_Req" | "Pdelay_Req" | "Pdelay_Resp" | "Follow_Up" | "Delay_Resp" | "Pdelay_Resp_Follow_Up" | "Announce" | "Signaling" | "Management" | "Invalid";
export declare type QualityAssessment = "Convergent" | "Normal" | "Divergent" | "None";
export declare type Routing = "Unicast" | "Multicast";
declare class MasterVisibleVia {
    readonly raw: VScript.Subtree;
    constructor(raw: VScript.Subtree);
    get port(): VScript.rKeyword<string | null, Port | null, MasterVisibleVia>;
    /**
      time at which an announce message from this master had last been received
      via the referenced port, measured relative to process initialization time
    */
    get announced_at(): VScript.rKeyword<number, number, MasterVisibleVia>;
}
export declare class Master {
    readonly raw: VScript.Subtree;
    constructor(raw: VScript.Subtree);
    get gen_address(): VScript.rKeyword<string, string, Master>;
    get evt_address(): VScript.rKeyword<string, string, Master>;
    get visible_via(): VScript.StronglyTypedTable<MasterVisibleVia, VScript.TableRowView<MasterVisibleVia>>;
    /**
      PTP traits as extracted from the most recently received announce message
    */
    get ptp_traits(): _PTP.Traits;
}
export declare class MasterAsTableRow extends Master {
    readonly enclosing_table: VScript.StronglyTypedTable<Master>;
    readonly index: number;
    constructor(raw_row: VScript.TableRow, enclosing_table: VScript.StronglyTypedTable<Master>);
}
declare class PortBestMasters {
    readonly raw: VScript.Subtree;
    constructor(raw: VScript.Subtree);
    get wrapped_reference(): VScript.rKeyword<string | null, Master | null, PortBestMasters>;
}
export declare class Port {
    readonly raw: VScript.Subtree;
    constructor(raw: VScript.Subtree);
    get brief(): VScript.rKeyword<string, string, Port>;
    get hosting_interface(): VScript.rKeyword<string | null, _NetworkInterfaces.VirtualInterface | null, Port>;
    get lane(): VScript.rKeyword<_NetworkInterfaces.Lane, _NetworkInterfaces.Lane, Port>;
    get port_identity(): VScript.rKeyword<any, _PTP.PortIdentity | null, this>;
    get best_masters(): VScript.StronglyTypedArray<Port, PortBestMasters, VScript.RowView<PortBestMasters>>;
}
export declare class PortAsTableRow extends Port {
    readonly enclosing_table: VScript.StronglyTypedTable<Port>;
    readonly index: number;
    constructor(raw_row: VScript.TableRow, enclosing_table: VScript.StronglyTypedTable<Port>);
}
export declare type MeasurementFamily = "SyncFollowUp" | "DelayRespReq";
export declare class SlaveSettings {
    readonly raw: VScript.Subtree;
    constructor(raw: VScript.Subtree);
    /**
      base-2 logarithm of the delay request interval in seconds. E.g., a
      setting of -3 will cause this agent to emit delay requests 8 times a
      second; 4 times a second if this is set to -2. Delay request intervals
      may not be shorter than the minimum delay request interval set by the
      currently active master.
    */
    get log2_delayreq_interval(): VScript.duplexKeyword<number, number, SlaveSettings>;
    get log2_master_sync_interval(): VScript.rKeyword<number, number, SlaveSettings>;
    /**
      minimum delay request interval as set by the most recently received delay
      response message
    */
    get relative_min_log2_delayreq_interval(): VScript.rKeyword<number, number, SlaveSettings>;
    /**
      unlike sync and follow-up messages, which contain no client-dependent
      information and are thus useful to all clients within their PTP domain,
      delay request/response messages are useful only to the inquiring client
      (and perhaps to the master if it wishes to monitor its clients' timing
      properties). Exchanging these messages via unicast reduces both network
      traffic and local workload but yields otherwise identical results (this
      mode may also be called `Hybrid` on other products). If
      `delay_req_routing` is set to `Multicast`, this optimization is disabled
      and all delay requests emitted by this agent will be sent to the PTP
      multicast event address `224.0.1.129:319`
    */
    get delay_req_routing(): VScript.duplexKeyword<Routing, Routing, SlaveSettings>;
}
declare class MasterSettingsGrandmaster {
    readonly raw: VScript.Subtree;
    constructor(raw: VScript.Subtree);
    /**
      this value will be used as `priority_1` if this agent is set to act as a
      PTP master
    */
    get priority_1(): VScript.duplexKeyword<number, number, MasterSettingsGrandmaster>;
    /**
      this value will be used as `priority_2` if this agent is set to act as a
      PTP master
    */
    get priority_2(): VScript.duplexKeyword<number, number, MasterSettingsGrandmaster>;
    /**
      this value will be used as `clock_quality` if this agent is set to act as
      a PTP master
    */
    get clock_quality(): VScript.duplexKeyword<any, _PTP.ClockQuality | null, this>;
    /**
      ClockIdentity as defined by the PTP standard, stored in big-endian order.
    */
    get clock_identity(): VScript.rKeyword<[number, number, number, number, number, number, number, number], [number, number, number, number, number, number, number, number], MasterSettingsGrandmaster>;
}
export declare class MasterSettings {
    readonly raw: VScript.Subtree;
    constructor(raw: VScript.Subtree);
    /**
      base-2 logarithm of the announce interval in seconds. E.g., a setting of
      -2 will cause this agent to emit announce messages 4 times a second; 2
      times a second if this is set to -1.
    */
    get log2_announce_interval(): VScript.duplexKeyword<number, number, MasterSettings>;
    /**
      base-2 logarithm of the sync interval in seconds. E.g., a setting of -3
      will cause this agent to emit sync and followup messages 8 times a
      second; 4 times a second if this is set to -2.
    */
    get log2_sync_interval(): VScript.duplexKeyword<number, number, MasterSettings>;
    get delay_decimation_factor(): VScript.rKeyword<number, number, MasterSettings>;
    /**
      unlike sync and follow-up messages, which contain no client-dependent
      information and are thus useful to all clients within their PTP domain,
      delay request/response messages are useful only to the inquiring client
      (and perhaps to the master if it wishes to monitor its clients' timing
      properties). Exchanging these messages via unicast reduces both network
      traffic and local workload but yields otherwise identical results (this
      mode may also be called `Hybrid` on other products). If
      `delay_resp_routing` is set to `Multicast`, all delay responses emitted
      by this agent will be sent to the PTP multicast address `224.0.1.129`
    */
    get delay_resp_routing(): VScript.duplexKeyword<Routing, Routing, MasterSettings>;
    get time_source(): VScript.duplexKeyword<string | null, _Time.Source | null, MasterSettings>;
    get grandmaster(): MasterSettingsGrandmaster;
}
interface AgentSlaveStatisticsOneWayDelay {
    mean: number;
    error: number;
}
interface AgentSlaveStatisticsInstantaneousEstimate {
    type: MeasurementFamily;
    seconds_s: number;
    nanoseconds_s: number;
    seconds_m: number;
    nanoseconds_m: number;
    accepted: boolean;
}
declare class AgentSlaveStatistics {
    readonly raw: VScript.Subtree;
    constructor(raw: VScript.Subtree);
    get num_syncs_received(): VScript.rKeyword<number, number, AgentSlaveStatistics>;
    get num_followups_received(): VScript.rKeyword<number, number, AgentSlaveStatistics>;
    /**
      number of measurements performed on the basis of incoming sync/followup
      messages. May be smaller than the number of received sync messages due
      to, e.g., missing followup messages
    */
    get num_sync_measurements(): VScript.rKeyword<number, number, AgentSlaveStatistics>;
    /**
      number of delay request messages handed off to the operating system. The
      actual number of transmitted messages may be lower in case of network
      configuration issues; check `num_delay_measurements` if you suspect this
      to be the case
    */
    get num_delayreqs_sent(): VScript.rKeyword<number, number, AgentSlaveStatistics>;
    get num_delayresps_received(): VScript.rKeyword<number, number, AgentSlaveStatistics>;
    /**
      number of delay response messages considered for further processing. May
      be smaller than the number of received delay response messages due to,
      e.g., mismatching requesting source port identities (especially when
      operating in multicast routing mode)
    */
    get num_delayresps_considered(): VScript.rKeyword<number, number, AgentSlaveStatistics>;
    /**
      number of delay response messages that were considered for processing,
      but later discarded for other reasons
    */
    get num_delayresps_discarded(): VScript.rKeyword<number, number, AgentSlaveStatistics>;
    /**
      number of measurements performed on the basis of delay request/response
      messages. May be both smaller than the number of dispatched delay request
      messages (perhaps due to network configuration issues), and smaller than
      the number of received delay response messages (especially when operating
      in multicast routing mode, where most incoming delay response messages
      are typically intended for other PTP clients)
    */
    get num_delay_measurements(): VScript.rKeyword<number, number, AgentSlaveStatistics>;
    get one_way_delay(): VScript.rKeyword<any, AgentSlaveStatisticsOneWayDelay | null, this>;
    get estimated_jitter(): VScript.rKeyword<number, number, AgentSlaveStatistics>;
    get publish_instantaneous_estimates(): VScript.rwKeyword<boolean, boolean, AgentSlaveStatistics>;
    get instantaneous_estimate(): VScript.rKeyword<any, AgentSlaveStatisticsInstantaneousEstimate | null, this>;
}
declare class AgentMasterStatistics {
    readonly raw: VScript.Subtree;
    constructor(raw: VScript.Subtree);
    get num_announces_sent(): VScript.rKeyword<number, number, AgentMasterStatistics>;
    get num_syncs_sent(): VScript.rKeyword<number, number, AgentMasterStatistics>;
    get num_followups_sent(): VScript.rKeyword<number, number, AgentMasterStatistics>;
    get num_delayreqs_received(): VScript.rKeyword<number, number, AgentMasterStatistics>;
    get num_delayresps_sent(): VScript.rKeyword<number, number, AgentMasterStatistics>;
}
export declare class Agent {
    readonly raw: VScript.Subtree;
    constructor(raw: VScript.Subtree);
    get mode(): VScript.rwKeyword<"SlaveOnly" | "MasterSlave" | "MasterOnly", "SlaveOnly" | "MasterSlave" | "MasterOnly", Agent>;
    get state(): VScript.rKeyword<"Inactive" | "Listening" | "Passive" | "Slave" | "Master", "Inactive" | "Listening" | "Passive" | "Slave" | "Master", Agent>;
    get domain(): VScript.duplexKeyword<number, number, Agent>;
    /**
      best (as defined by the Best Master Clock algorithm) PTP master visible
      on this interface and within this PTP domain, excluding this agent
      itself.
    */
    get best_foreign_master(): VScript.rKeyword<string | null, Master | null, Agent>;
    get lane(): VScript.rKeyword<_NetworkInterfaces.Lane, _NetworkInterfaces.Lane, Agent>;
    get hosting_port(): VScript.duplexKeyword<string | null, Port | null, Agent>;
    get slave_settings(): SlaveSettings;
    get master_settings(): MasterSettings;
    get slave_statistics(): AgentSlaveStatistics;
    get master_statistics(): AgentMasterStatistics;
    get output(): _Time.Source;
}
export declare class AgentAsNamedTableRow extends Agent {
    private readonly raw_row;
    readonly enclosing_table: VScript.StronglyTypedNamedTable<Agent>;
    readonly index: number;
    constructor(raw_row: VScript.NamedTableRow, enclosing_table: VScript.StronglyTypedNamedTable<Agent>);
    rename(name: string, opts?: VScript.CommonWriteOptions): Promise<void>;
    delete(opts?: VScript.CommonWriteOptions): Promise<void>;
}
declare class AllGeneralSettings {
    readonly raw: VScript.Subtree;
    constructor(raw: VScript.Subtree);
    /**
      remove visible masters if the time elapsed since their last Announce
      message exceeds *master_timeout*
    */
    get master_timeout(): VScript.duplexKeyword<number, number, AllGeneralSettings>;
    /**
      if `best_master_selection` is set to `Eager`, an incoming Announce
      message will immediately register its sender as the currently accepted
      PTP master if all previously registered masters are deemed inferior by
      the BMC algorithm. Conversely, if `Cautious` is selected, and if the
      PTPClock is currently calibrated, a previously selected PTP master will
      be retained until it times out
    */
    get best_master_selection(): VScript.rwKeyword<"Eager" | "Cautious", "Eager" | "Cautious", AllGeneralSettings>;
    /**
      offload DelayResponse generation to hardware if supported by the
      currently active FPGA build
    */
    get hardware_offload(): VScript.duplexKeyword<boolean, boolean, AllGeneralSettings>;
    /**
      if DelayResponse hardware offloading is available, delay requests will by
      default not be forwarded to the CPU. If you wish to do so to, e.g.,
      analyze incoming traffic using `tcpdump`, set this option to `false`
    */
    get absorb_delayrequests(): VScript.duplexKeyword<boolean, boolean, AllGeneralSettings>;
}
export declare class All {
    readonly raw: VScript.Subtree;
    constructor(raw: VScript.Subtree);
    get general_settings(): AllGeneralSettings;
    get agents(): VScript.StronglyTypedNamedTable<Agent, VScript.NamedTableRowView<Agent>>;
    get ports(): VScript.StronglyTypedTable<Port, VScript.TableRowView<Port>>;
    get visible_masters(): VScript.StronglyTypedTable<Master, VScript.TableRowView<Master>>;
}
export declare const Enums: {
    readonly MeasurementFamily: MeasurementFamily[];
    readonly Routing: Routing[];
    readonly QualityAssessment: QualityAssessment[];
    readonly MessageType: MessageType[];
    readonly MessageClass: MessageClass[];
};
export {};
