blob: e61aa3c893510b4ce5f49c1b4721e63068328906 [file] [log] [blame]
// Copyright 2018 The Chromium 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;
using fuchsia.net;
/// Direction is which way (Incoming or Outgoing) a packet is moving in the stack.
enum Direction {
incoming = 0;
outgoing = 1;
};
enum Action {
pass = 0;
drop = 1;
drop_reset = 2;
};
enum SocketProtocol {
ip = 0;
icmp = 1;
tcp = 6;
udp = 17;
ipv6 = 41;
icmpv6 = 58;
};
/// Rule describes the conditions and the action of a rule.
struct Rule {
Action action;
Direction direction;
/// If true, no more rules will be tested.
bool quick;
SocketProtocol proto;
fuchsia.net.Subnet? src_subnet;
/// If true, matches any address that is NOT contained in the subnet.
bool src_subnet_invert_match;
uint16 src_port;
fuchsia.net.Subnet? dst_subnet;
/// If true, matches any address that is NOT contained in the subnet.
bool dst_subnet_invert_match;
uint16 dst_port;
uint32 nic;
bool log;
bool keepState;
};
/// NAT is a special rule for Network Address Translation, which rewrites
/// the address of an outgoing packet.
struct NAT {
SocketProtocol proto;
fuchsia.net.Subnet src_subnet;
fuchsia.net.IpAddress new_src_addr;
uint32 nic;
};
/// RDR is a special rule for Redirector, which forwards an incoming packet
/// to a machine inside the firewall.
struct RDR {
SocketProtocol proto;
fuchsia.net.IpAddress dst_addr;
uint16 dst_port;
fuchsia.net.IpAddress new_dst_addr;
uint16 new_dst_port;
uint32 nic;
};