/**
 * Copyright 2019 Google LLC
 *
 * Licensed under the Apache License, Version 2.0 (the 'License');
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an 'AS IS' BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
/// <reference types="node" />
import * as stream from 'stream';
import InterfaceSocket from './InterfaceSocket';
import Link from './Link';
import { TransportType } from './transports';
export interface InterfaceOptions {
    pcapPath?: string;
    requestedTransports?: TransportType[];
}
export default class Interface extends stream.Duplex {
    private requestedTransports?;
    static create(phy: stream.Duplex, options?: InterfaceOptions): Interface;
    constructor(options?: InterfaceOptions);
    isClosed: boolean;
    private sockets;
    private lcp;
    private link?;
    private linkAvailable;
    private pcapWriter?;
    _read(): void;
    _write(chunk: Buffer, _: string, callback: (err?: Error) => void): void;
    connect(protocol: number): InterfaceSocket;
    unregisterSocket(protocol: number): void;
    sendPacket(protocol: number, packet: Buffer): void;
    closeAllSockets(): void;
    close(): Promise<void>;
    private down;
    private handlePingSuccess;
    private handlePingFailure;
    private onLinkUp;
    private onLinkDown;
    getLink(timeout?: number): Promise<Link>;
}
