Annotation of XNU/bsd/netinet/ip_fw.h, revision 1.1

1.1     ! root        1: /*
        !             2:  * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
        !             3:  *
        !             4:  * @APPLE_LICENSE_HEADER_START@
        !             5:  * 
        !             6:  * The contents of this file constitute Original Code as defined in and
        !             7:  * are subject to the Apple Public Source License Version 1.1 (the
        !             8:  * "License").  You may not use this file except in compliance with the
        !             9:  * License.  Please obtain a copy of the License at
        !            10:  * http://www.apple.com/publicsource and read it before using this file.
        !            11:  * 
        !            12:  * This Original Code and all software distributed under the License are
        !            13:  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
        !            14:  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
        !            15:  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
        !            16:  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
        !            17:  * License for the specific language governing rights and limitations
        !            18:  * under the License.
        !            19:  * 
        !            20:  * @APPLE_LICENSE_HEADER_END@
        !            21:  */
        !            22: /*
        !            23:  * Copyright (c) 1993 Daniel Boulet
        !            24:  * Copyright (c) 1994 Ugen J.S.Antsilevich
        !            25:  *
        !            26:  * Redistribution and use in source forms, with and without modification,
        !            27:  * are permitted provided that this entire comment appears intact.
        !            28:  *
        !            29:  * Redistribution in binary form may occur without any restrictions.
        !            30:  * Obviously, it would be nice if you gave credit where credit is due
        !            31:  * but requiring it would be too onerous.
        !            32:  *
        !            33:  * This software is provided ``AS IS'' without any warranties of any kind.
        !            34:  *
        !            35:  */
        !            36: 
        !            37: #ifndef _IP_FW_H
        !            38: #define _IP_FW_H
        !            39: 
        !            40: #include <sys/queue.h>
        !            41: 
        !            42: /*
        !            43:  * This union structure identifies an interface, either explicitly
        !            44:  * by name or implicitly by IP address. The flags IP_FW_F_IIFNAME
        !            45:  * and IP_FW_F_OIFNAME say how to interpret this structure. An
        !            46:  * interface unit number of -1 matches any unit number, while an
        !            47:  * IP address of 0.0.0.0 indicates matches any interface.
        !            48:  *
        !            49:  * The receive and transmit interfaces are only compared against the
        !            50:  * the packet if the corresponding bit (IP_FW_F_IIFACE or IP_FW_F_OIFACE)
        !            51:  * is set. Note some packets lack a receive or transmit interface
        !            52:  * (in which case the missing "interface" never matches).
        !            53:  */
        !            54: 
        !            55: union ip_fw_if {
        !            56:     struct in_addr fu_via_ip;  /* Specified by IP address */
        !            57:     struct {                   /* Specified by interface name */
        !            58: #define FW_IFNLEN     10 /* need room ! was IFNAMSIZ */
        !            59:            char  name[FW_IFNLEN];
        !            60:            short unit;         /* -1 means match any unit */
        !            61:     } fu_via_if;
        !            62: };
        !            63: 
        !            64: /*
        !            65:  * Format of an IP firewall descriptor
        !            66:  *
        !            67:  * fw_src, fw_dst, fw_smsk, fw_dmsk are always stored in network byte order.
        !            68:  * fw_flg and fw_n*p are stored in host byte order (of course).
        !            69:  * Port numbers are stored in HOST byte order.
        !            70:  * Warning: setsockopt() will fail if sizeof(struct ip_fw) > MLEN (108)
        !            71:  */
        !            72: 
        !            73: struct ip_fw {
        !            74:     u_int64_t fw_pcnt,fw_bcnt;         /* Packet and byte counters */
        !            75:     struct in_addr fw_src, fw_dst;     /* Source and destination IP addr */
        !            76:     struct in_addr fw_smsk, fw_dmsk;   /* Mask for src and dest IP addr */
        !            77:     u_short fw_number;                 /* Rule number */
        !            78:     u_int fw_flg;                      /* Flags word */
        !            79: #define IP_FW_MAX_PORTS        10              /* A reasonable maximum */
        !            80:        union {
        !            81:        u_short fw_pts[IP_FW_MAX_PORTS];        /* Array of port numbers to match */
        !            82: #define IP_FW_ICMPTYPES_MAX    128
        !            83: #define IP_FW_ICMPTYPES_DIM    (IP_FW_ICMPTYPES_MAX / (sizeof(unsigned) * 8))
        !            84:        unsigned fw_icmptypes[IP_FW_ICMPTYPES_DIM]; /* ICMP types bitmap */
        !            85:        } fw_uar;
        !            86:     u_char fw_ipopt,fw_ipnopt;         /* IP options set/unset */
        !            87:     u_char fw_tcpf,fw_tcpnf;           /* TCP flags set/unset */
        !            88:     long timestamp;                    /* timestamp (tv_sec) of last match */
        !            89:     union ip_fw_if fw_in_if, fw_out_if;        /* Incoming and outgoing interfaces */
        !            90:     union {
        !            91:        u_short fu_divert_port;         /* Divert/tee port (options IPDIVERT) */
        !            92:        u_short fu_pipe_nr;             /* pipe number (option DUMMYNET) */
        !            93:        u_short fu_skipto_rule;         /* SKIPTO command rule number */
        !            94:        u_short fu_reject_code;         /* REJECT response code */
        !            95:        struct sockaddr_in fu_fwd_ip;
        !            96:     } fw_un;
        !            97:     u_char fw_prot;                    /* IP protocol */
        !            98:     u_char fw_nports;                  /* N'of src ports and # of dst ports */
        !            99:                                        /* in ports array (dst ports follow */
        !           100:                                        /* src ports; max of 10 ports in all; */
        !           101:                                        /* count of 0 means match all ports) */
        !           102:     void *pipe_ptr;                    /* Pipe ptr in case of dummynet pipe */
        !           103:     void *next_rule_ptr ;              /* next rule in case of match */
        !           104: };
        !           105: 
        !           106: #define IP_FW_GETNSRCP(rule)           ((rule)->fw_nports & 0x0f)
        !           107: #define IP_FW_SETNSRCP(rule, n)                do {                            \
        !           108:                                          (rule)->fw_nports &= ~0x0f;   \
        !           109:                                          (rule)->fw_nports |= (n);     \
        !           110:                                        } while (0)
        !           111: #define IP_FW_GETNDSTP(rule)           ((rule)->fw_nports >> 4)
        !           112: #define IP_FW_SETNDSTP(rule, n)                do {                            \
        !           113:                                          (rule)->fw_nports &= ~0xf0;   \
        !           114:                                          (rule)->fw_nports |= (n) << 4;\
        !           115:                                        } while (0)
        !           116: 
        !           117: #define fw_divert_port fw_un.fu_divert_port
        !           118: #define fw_skipto_rule fw_un.fu_skipto_rule
        !           119: #define fw_reject_code fw_un.fu_reject_code
        !           120: #define fw_pipe_nr     fw_un.fu_pipe_nr
        !           121: #define fw_fwd_ip      fw_un.fu_fwd_ip
        !           122: 
        !           123: struct ip_fw_chain {
        !           124:         LIST_ENTRY(ip_fw_chain) chain;
        !           125:         struct ip_fw    *rule;
        !           126: };
        !           127: 
        !           128: /*
        !           129:  * Values for "flags" field .
        !           130:  */
        !           131: #define IP_FW_F_COMMAND 0x000000ff     /* Mask for type of chain entry:        */
        !           132: #define IP_FW_F_DENY   0x00000000      /* This is a deny rule                  */
        !           133: #define IP_FW_F_REJECT 0x00000001      /* Deny and send a response packet      */
        !           134: #define IP_FW_F_ACCEPT 0x00000002      /* This is an accept rule               */
        !           135: #define IP_FW_F_COUNT  0x00000003      /* This is a count rule                 */
        !           136: #define IP_FW_F_DIVERT 0x00000004      /* This is a divert rule                */
        !           137: #define IP_FW_F_TEE    0x00000005      /* This is a tee rule                   */
        !           138: #define IP_FW_F_SKIPTO 0x00000006      /* This is a skipto rule                */
        !           139: #define IP_FW_F_FWD    0x00000007      /* This is a "change forwarding address" rule */
        !           140: #define IP_FW_F_PIPE   0x00000008      /* This is a dummynet rule */
        !           141: 
        !           142: #define IP_FW_F_IN     0x00000100      /* Check inbound packets                */
        !           143: #define IP_FW_F_OUT    0x00000200      /* Check outbound packets               */
        !           144: #define IP_FW_F_IIFACE 0x00000400      /* Apply inbound interface test         */
        !           145: #define IP_FW_F_OIFACE 0x00000800      /* Apply outbound interface test        */
        !           146: 
        !           147: #define IP_FW_F_PRN    0x00001000      /* Print if this rule matches           */
        !           148: 
        !           149: #define IP_FW_F_SRNG   0x00002000      /* The first two src ports are a min    *
        !           150:                                         * and max range (stored in host byte   *
        !           151:                                         * order).                              */
        !           152: 
        !           153: #define IP_FW_F_DRNG   0x00004000      /* The first two dst ports are a min    *
        !           154:                                         * and max range (stored in host byte   *
        !           155:                                         * order).                              */
        !           156: 
        !           157: #define IP_FW_F_FRAG   0x00008000      /* Fragment                             */
        !           158: 
        !           159: #define IP_FW_F_IIFNAME        0x00010000      /* In interface by name/unit (not IP)   */
        !           160: #define IP_FW_F_OIFNAME        0x00020000      /* Out interface by name/unit (not IP)  */
        !           161: 
        !           162: #define IP_FW_F_INVSRC 0x00040000      /* Invert sense of src check            */
        !           163: #define IP_FW_F_INVDST 0x00080000      /* Invert sense of dst check            */
        !           164: 
        !           165: #define IP_FW_F_ICMPBIT 0x00100000     /* ICMP type bitmap is valid            */
        !           166: 
        !           167: #define IP_FW_F_MASK   0x001FFFFF      /* All possible flag bits mask          */
        !           168: 
        !           169: /*
        !           170:  * For backwards compatibility with rules specifying "via iface" but
        !           171:  * not restricted to only "in" or "out" packets, we define this combination
        !           172:  * of bits to represent this configuration.
        !           173:  */
        !           174: 
        !           175: #define IF_FW_F_VIAHACK        (IP_FW_F_IN|IP_FW_F_OUT|IP_FW_F_IIFACE|IP_FW_F_OIFACE)
        !           176: 
        !           177: /*
        !           178:  * Definitions for REJECT response codes.
        !           179:  * Values less than 256 correspond to ICMP unreachable codes.
        !           180:  */
        !           181: #define IP_FW_REJECT_RST       0x0100          /* TCP packets: send RST */
        !           182: 
        !           183: /*
        !           184:  * Definitions for IP option names.
        !           185:  */
        !           186: #define IP_FW_IPOPT_LSRR       0x01
        !           187: #define IP_FW_IPOPT_SSRR       0x02
        !           188: #define IP_FW_IPOPT_RR         0x04
        !           189: #define IP_FW_IPOPT_TS         0x08
        !           190: 
        !           191: /*
        !           192:  * Definitions for TCP flags.
        !           193:  */
        !           194: #define IP_FW_TCPF_FIN         TH_FIN
        !           195: #define IP_FW_TCPF_SYN         TH_SYN
        !           196: #define IP_FW_TCPF_RST         TH_RST
        !           197: #define IP_FW_TCPF_PSH         TH_PUSH
        !           198: #define IP_FW_TCPF_ACK         TH_ACK
        !           199: #define IP_FW_TCPF_URG         TH_URG
        !           200: #define IP_FW_TCPF_ESTAB       0x40
        !           201: 
        !           202: /*
        !           203:  * Main firewall chains definitions and global var's definitions.
        !           204:  */
        !           205: #ifdef KERNEL
        !           206: 
        !           207: /*
        !           208:  * Function definitions.
        !           209:  */
        !           210: void ip_fw_init __P((void));
        !           211: 
        !           212: /* Firewall hooks */
        !           213: struct ip;
        !           214: struct sockopt;
        !           215: typedef        int ip_fw_chk_t __P((struct ip **, int, struct ifnet *, u_int16_t *,
        !           216:             struct mbuf **, struct ip_fw_chain **, struct sockaddr_in **));
        !           217: typedef        int ip_fw_ctl_t __P((struct sockopt *));
        !           218: extern ip_fw_chk_t *ip_fw_chk_ptr;
        !           219: extern ip_fw_ctl_t *ip_fw_ctl_ptr;
        !           220: 
        !           221: /* IP NAT hooks */
        !           222: typedef        int ip_nat_t __P((struct ip **, struct mbuf **, struct ifnet *, int));
        !           223: typedef        int ip_nat_ctl_t __P((struct sockopt *));
        !           224: extern ip_nat_t *ip_nat_ptr;
        !           225: extern ip_nat_ctl_t *ip_nat_ctl_ptr;
        !           226: #define        IP_NAT_IN       0x00000001
        !           227: #define        IP_NAT_OUT      0x00000002
        !           228: 
        !           229: #endif /* KERNEL */
        !           230: 
        !           231: #endif /* _IP_FW_H */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.