import { AxiosInstance } from 'axios';
import { PaginationParams, PaginatedResponse } from './instances';
export interface IPAddress {
    address: string;
    gateway: string | null;
    subnet_mask: string | null;
    prefix: number | null;
    type: string;
    public: boolean;
    rdns: string | null;
    linode_id: number | null;
    region: string | null;
}
export interface IPv6Range {
    range: string;
    prefix: number;
    region: string;
    route_target: string | null;
}
export interface IPv6Pool {
    range: string;
    prefix: number;
    region: string;
}
export interface AllocateIPRequest {
    type: 'ipv4';
    public: boolean;
    linode_id?: number;
}
export interface UpdateIPRequest {
    rdns: string | null;
}
export interface ShareIPsRequest {
    linode_id: number;
    ips: string[];
}
export interface Firewall {
    id: number;
    label: string;
    created: string;
    updated: string;
    status: string;
    rules: {
        inbound_policy: 'ACCEPT' | 'DROP';
        outbound_policy: 'ACCEPT' | 'DROP';
        inbound: FirewallRule[];
        outbound: FirewallRule[];
    };
    tags: string[];
}
export interface FirewallRule {
    ports: string;
    protocol: 'TCP' | 'UDP' | 'ICMP';
    addresses: {
        ipv4?: string[];
        ipv6?: string[];
    };
    action: 'ACCEPT' | 'DROP';
}
export interface CreateFirewallRequest {
    label: string;
    rules: {
        inbound_policy: 'ACCEPT' | 'DROP';
        outbound_policy: 'ACCEPT' | 'DROP';
        inbound?: FirewallRule[];
        outbound?: FirewallRule[];
    };
    devices?: {
        linodes?: number[];
        nodebalancers?: number[];
    };
    tags?: string[];
}
export interface UpdateFirewallRequest {
    label?: string;
    tags?: string[];
    status?: 'enabled' | 'disabled';
}
export interface FirewallDevice {
    id: number;
    entity_id: number;
    type: 'linode' | 'nodebalancer';
    label: string;
    url: string;
    created: string;
    updated: string;
}
export interface CreateFirewallDeviceRequest {
    id: number;
    type: 'linode' | 'nodebalancer';
}
export interface UpdateFirewallRulesRequest {
    inbound_policy?: 'ACCEPT' | 'DROP';
    outbound_policy?: 'ACCEPT' | 'DROP';
    inbound?: FirewallRule[];
    outbound?: FirewallRule[];
}
export interface VLAN {
    id: string;
    description: string;
    region: string;
    linodes: number[];
    created: string;
}
export interface LinodeNetworkingClient {
    getIPAddresses: () => Promise<{
        ipv4: {
            public: IPAddress[];
            private: IPAddress[];
            shared: IPAddress[];
        };
        ipv6: {
            slaac: IPAddress;
            link_local: IPAddress;
            ranges: IPv6Range[];
        };
    }>;
    getIPAddress: (address: string) => Promise<IPAddress>;
    updateIPAddress: (address: string, data: UpdateIPRequest) => Promise<IPAddress>;
    allocateIPAddress: (data: AllocateIPRequest) => Promise<IPAddress>;
    shareIPAddresses: (data: ShareIPsRequest) => Promise<{}>;
    getIPv6Ranges: () => Promise<PaginatedResponse<IPv6Range>>;
    getIPv6Range: (range: string) => Promise<IPv6Range>;
    getIPv6Pools: () => Promise<PaginatedResponse<IPv6Pool>>;
    getFirewalls: (params?: PaginationParams) => Promise<PaginatedResponse<Firewall>>;
    getFirewall: (id: number) => Promise<Firewall>;
    createFirewall: (data: CreateFirewallRequest) => Promise<Firewall>;
    updateFirewall: (id: number, data: UpdateFirewallRequest) => Promise<Firewall>;
    deleteFirewall: (id: number) => Promise<{}>;
    getFirewallDevices: (firewallId: number) => Promise<PaginatedResponse<FirewallDevice>>;
    createFirewallDevice: (firewallId: number, data: CreateFirewallDeviceRequest) => Promise<FirewallDevice>;
    deleteFirewallDevice: (firewallId: number, deviceId: number) => Promise<{}>;
    getFirewallRules: (firewallId: number) => Promise<{
        inbound: FirewallRule[];
        outbound: FirewallRule[];
    }>;
    updateFirewallRules: (firewallId: number, data: UpdateFirewallRulesRequest) => Promise<{
        inbound: FirewallRule[];
        outbound: FirewallRule[];
    }>;
    getVLANs: (params?: PaginationParams) => Promise<PaginatedResponse<VLAN>>;
    getVLAN: (regionId: string, label: string) => Promise<VLAN>;
}
export declare function createNetworkingClient(axios: AxiosInstance): LinodeNetworkingClient;
