|  | // 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; | 
|  |  | 
|  | 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 { | 
|  | ANY = 0; | 
|  | ICMP = 1; | 
|  | TCP = 2; | 
|  | UDP = 3; | 
|  | ICMPV6 = 4; | 
|  | }; | 
|  |  | 
|  | /// PortRange specifies an inclusive range of port numbers. | 
|  | struct PortRange { | 
|  | uint16 start; | 
|  | uint16 end; | 
|  | }; | 
|  |  | 
|  | /// 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; | 
|  | PortRange src_port_range; | 
|  | fuchsia.net.Subnet? dst_subnet; | 
|  | /// If true, matches any address that is NOT contained in the subnet. | 
|  | bool dst_subnet_invert_match; | 
|  | PortRange dst_port_range; | 
|  | uint32 nic; | 
|  | bool log; | 
|  | bool keep_state; | 
|  | }; | 
|  |  | 
|  | /// 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; | 
|  | PortRange dst_port_range; | 
|  | fuchsia.net.IpAddress new_dst_addr; | 
|  | PortRange new_dst_port_range; | 
|  | uint32 nic; | 
|  | }; |