blob: e3db9f87bc2756a2d476f98471728ebfdb896e0d [file] [log] [blame]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
library fuchsia.net.filter.deprecated;
using fuchsia.net;
/// The maximum number of rules.
const MAX_RULES uint32 = 128;
/// The possible errors that result from enabling/disabling filtering on an
/// interface.
type EnableDisableInterfaceError = strict enum {
NOT_FOUND = 1;
};
/// A protocol for filtering TCP/IP traffic and Network Address Translation.
// TODO(https://fxbug.dev/42173074): Modernize/upgrade filter/NAT APIs.
@discoverable
closed protocol Filter {
/// Enable the filter on a specific interface.
///
/// The filter is disabled by default. If the filter is already enabled,
/// no error is returned.
///
/// + request `id` The id of the network interface.
/// * error Reports `NOT_FOUND` if `id` is not a valid interface.
strict EnableInterface(struct {
id fuchsia.net.InterfaceId;
}) -> () error EnableDisableInterfaceError;
/// Disable the filter on a specific interface.
///
/// The filter is disabled by default. If the filter is already disabled,
/// no error is returned.
///
/// + request `id` The id of the network interface.
/// * error Reports `NOT_FOUND` if `id` is not a valid interface.
strict DisableInterface(struct {
id fuchsia.net.InterfaceId;
}) -> () error EnableDisableInterfaceError;
/// GetRules gets the current rules. They do not include NAT or RDR rules.
/// (use GetNatRules or GetRdrRules instead).
///
/// - response `rules` The current filter rules.
/// - response `generation` The generation number associated with the current
/// rules.
strict GetRules() -> (struct {
rules vector<Rule>:MAX_RULES;
generation uint32;
});
/// UpdateRules updates the current rules. It does not update NAT or RDR rules
/// (use UpdateNatRules or UpdateRdrRules instead).
///
/// UpdateRules takes a generation number that is previously returned from
/// GetRules. The generation number has to be up-to-date, i.e. it has to
/// match with the one associated with the current rules. The service will
/// assign a new generation number to the new rules.
///
/// + request `rules` The new filter rules to install.
/// + request `generation` The generation number previously returned from
/// GetRules.
/// * error Reports `GENERATION_MISMATCH` if `generation` is not the
/// generation number for the current rules.
/// * error Reports `BAD_RULE` if `rules` are not valid.
strict UpdateRules(struct {
rules vector<Rule>:MAX_RULES;
generation uint32;
}) -> () error strict enum {
GENERATION_MISMATCH = 1;
BAD_RULE = 2;
};
/// GetNatRules gets the current NAT rules.
///
/// - response `rules` The current NAT rules.
/// - response `generation` The generation number associated with the current
/// NAT rules.
strict GetNatRules() -> (struct {
rules vector<Nat>:MAX_RULES;
generation uint32;
});
/// UpdateNatRules updates the current NAT rules.
///
/// UpdateNatRules takes a generation number that is previously returned from
/// GetRules. The generation number has to be up-to-date, i.e. it has to
/// match with the one associated with the current NAT rules. The service will
/// assign a new generation number to the new NAT rules.
///
/// + request `rules` The new NAT rules to install.
/// + request `generation` The generation number previously returned from
/// GetNATRules.
/// * error Reports `GENERATION_MISMATCH` if `generation` is not the
/// generation number for the current rules.
/// * error Reports `BAD_RULE` if `rules` are not valid.
strict UpdateNatRules(struct {
rules vector<Nat>:MAX_RULES;
generation uint32;
}) -> () error strict enum {
GENERATION_MISMATCH = 1;
BAD_RULE = 2;
};
/// GetRdrRules gets the current RDR rules.
///
/// - response `rules` The current RDR rules.
/// - response `generation` The generation number associated with the current
/// RDR rules.
strict GetRdrRules() -> (struct {
rules vector<Rdr>:MAX_RULES;
generation uint32;
});
/// UpdateRdrRules updates the previous RDR rules with new rules.
///
/// UpdateRdrRules takes a generation number that is previously returned from
/// GetRules. The generation number has to be up-to-date, i.e. it has to
/// match with the one associated with the current RDR rules. The service will
/// assign a new generation number to the new RDR rules.
///
/// + request `rules` The new RDR rules to install.
/// + request `generation` The generation number previously returned from
/// GetRDRRules.
/// * error Reports `NOT_SUPPORTED` if the operation is not supported.
strict UpdateRdrRules(struct {
rules vector<Rdr>:MAX_RULES;
generation uint32;
}) -> () error strict enum {
// TODO(https://fxbug.dev/42147284): Implement RDR API using gvisor iptables.
NOT_SUPPORTED = 1;
};
/// No-op method that allows checking for presence.
///
/// It's not currently possible for a client with an optionally-provided
/// protocol to check whether there's someone on the other end without
/// making a FIDL call (https://fxbug.dev/296283299). This method provides a
/// workaround by giving a client a two-way method that it can call to check
/// for liveness.
strict CheckPresence() -> ();
};