Annotation of XNU/bsd/netinet/ip_nat.h, revision 1.1.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) 1995-1997 by Darren Reed.
                     24:  *
                     25:  * Redistribution and use in source and binary forms are permitted
                     26:  * provided that this notice is preserved and due credit is given
                     27:  * to the original author and the contributors.
                     28:  *
                     29:  * @(#)ip_nat.h        1.5 2/4/96
                     30:  */
                     31: 
                     32: #ifndef        __IP_NAT_H__
                     33: #define        __IP_NAT_H__
                     34: 
                     35: #ifndef SOLARIS
                     36: #define SOLARIS (defined(sun) && (defined(__svr4__) || defined(__SVR4)))
                     37: #endif
                     38: 
                     39: #if defined(__STDC__) || defined(__GNUC__)
                     40: #define        SIOCADNAT       _IOW('r', 80, struct ipnat)
                     41: #define        SIOCRMNAT       _IOW('r', 81, struct ipnat)
                     42: #define        SIOCGNATS       _IOR('r', 82, struct natstat)
                     43: #define        SIOCGNATL       _IOWR('r', 83, struct natlookup)
                     44: #define SIOCGFRST      _IOR('r', 84, struct ipfrstat)
                     45: #define SIOCGIPST      _IOR('r', 85, struct ips_stat)
                     46: #define        SIOCFLNAT       _IOWR('r', 86, int)
                     47: #define        SIOCCNATL       _IOWR('r', 87, int)
                     48: #else
                     49: #define        SIOCADNAT       _IOW(r, 80, struct ipnat)
                     50: #define        SIOCRMNAT       _IOW(r, 81, struct ipnat)
                     51: #define        SIOCGNATS       _IOR(r, 82, struct natstat)
                     52: #define        SIOCGNATL       _IOWR(r, 83, struct natlookup)
                     53: #define SIOCGFRST      _IOR(r, 84, struct ipfrstat)
                     54: #define SIOCGIPST      _IOR(r, 85, struct ips_stat)
                     55: #define        SIOCFLNAT       _IOWR(r, 86, int)
                     56: #define        SIOCCNATL       _IOWR(r, 87, int)
                     57: #endif
                     58: 
                     59: #define        NAT_SIZE        367
                     60: #ifndef        APR_LABELLEN
                     61: #define        APR_LABELLEN    16
                     62: #endif
                     63: 
                     64: typedef        struct  nat     {
                     65:        u_long  nat_age;
                     66:        int     nat_flags;
                     67:        u_32_t  nat_sumd;
                     68:        u_32_t  nat_ipsumd;
                     69:        void    *nat_data;
                     70:        struct  in_addr nat_inip;
                     71:        struct  in_addr nat_outip;
                     72:        struct  in_addr nat_oip;        /* other ip */
                     73:        U_QUAD_T        nat_pkts;
                     74:        U_QUAD_T        nat_bytes;
                     75:        u_short nat_oport;      /* other port */
                     76:        u_short nat_inport;
                     77:        u_short nat_outport;
                     78:        u_short nat_use;
                     79:        u_char  nat_state[2];
                     80:        struct  ipnat   *nat_ptr;
                     81:        struct  nat     *nat_next;
                     82:        struct  nat     *nat_hnext[2];
                     83:        struct  nat     **nat_hstart[2];
                     84:        void    *nat_ifp;
                     85:        int     nat_dir;
                     86: } nat_t;
                     87: 
                     88: typedef        struct  ipnat   {
                     89:        struct  ipnat   *in_next;
                     90:        void    *in_ifp;
                     91:        void    *in_apr;
                     92:        u_int   in_space;
                     93:        u_int   in_use;
                     94:        struct  in_addr in_nextip;
                     95:        u_short in_pnext;
                     96:        u_short in_flags;
                     97:        u_short in_port[2];
                     98:        struct  in_addr in_in[2];
                     99:        struct  in_addr in_out[2];
                    100:        int     in_redir; /* 0 if it's a mapping, 1 if it's a hard redir */
                    101:        char    in_ifname[IFNAMSIZ];
                    102:        char    in_plabel[APR_LABELLEN];        /* proxy label */
                    103:        char    in_p;   /* protocol */
                    104:        u_short in_dport;
                    105: } ipnat_t;
                    106: 
                    107: #define        in_pmin         in_port[0]      /* Also holds static redir port */
                    108: #define        in_pmax         in_port[1]
                    109: #define        in_nip          in_nextip.s_addr
                    110: #define        in_inip         in_in[0].s_addr
                    111: #define        in_inmsk        in_in[1].s_addr
                    112: #define        in_outip        in_out[0].s_addr
                    113: #define        in_outmsk       in_out[1].s_addr
                    114: 
                    115: #define        NAT_OUTBOUND    0
                    116: #define        NAT_INBOUND     1
                    117: 
                    118: #define        NAT_MAP         0x01
                    119: #define        NAT_REDIRECT    0x02
                    120: #define        NAT_BIMAP       (NAT_MAP|NAT_REDIRECT)
                    121: 
                    122: #define        IPN_CMPSIZ      (sizeof(struct in_addr) * 4 + sizeof(u_short) * 3 + \
                    123:                         sizeof(int) + IFNAMSIZ + APR_LABELLEN + sizeof(char))
                    124: 
                    125: typedef        struct  natlookup {
                    126:        struct  in_addr nl_inip;
                    127:        struct  in_addr nl_outip;
                    128:        struct  in_addr nl_realip;
                    129:        int     nl_flags;
                    130:        u_short nl_inport;
                    131:        u_short nl_outport;
                    132:        u_short nl_realport;
                    133: } natlookup_t;
                    134: 
                    135: typedef        struct  natstat {
                    136:        u_long  ns_mapped[2];
                    137:        u_long  ns_rules;
                    138:        u_long  ns_added;
                    139:        u_long  ns_expire;
                    140:        u_long  ns_inuse;
                    141:        u_long  ns_logged;
                    142:        u_long  ns_logfail;
                    143:        nat_t   **ns_table[2];
                    144:        ipnat_t *ns_list;
                    145: } natstat_t;
                    146: 
                    147: #define        IPN_ANY         0x00
                    148: #define        IPN_TCP         0x01
                    149: #define        IPN_UDP         0x02
                    150: #define        IPN_TCPUDP      0x03
                    151: #define        IPN_DELETE      0x04
                    152: #define        IPN_ICMPERR     0x08
                    153: 
                    154: 
                    155: typedef        struct  natlog {
                    156:        struct  in_addr nl_origip;
                    157:        struct  in_addr nl_outip;
                    158:        struct  in_addr nl_inip;
                    159:        u_short nl_origport;
                    160:        u_short nl_outport;
                    161:        u_short nl_inport;
                    162:        u_short nl_type;
                    163:        int     nl_rule;
                    164:        U_QUAD_T        nl_pkts;
                    165:        U_QUAD_T        nl_bytes;
                    166: } natlog_t;
                    167: 
                    168: 
                    169: #define        NL_NEWMAP       NAT_MAP
                    170: #define        NL_NEWRDR       NAT_REDIRECT
                    171: #define        NL_EXPIRE       0xffff
                    172: 
                    173: 
                    174: extern void    ip_natsync __P((void *));
                    175: extern u_long  fr_defnatage;
                    176: extern u_long  fr_defnaticmpage;
                    177: extern nat_t   *nat_table[2][NAT_SIZE];
                    178: #if defined(__NetBSD__) || defined(__OpenBSD__) || (__FreeBSD_version >= 300003)
                    179: extern int     nat_ioctl __P((caddr_t, u_long, int));
                    180: #else
                    181: extern int     nat_ioctl __P((caddr_t, int, int));
                    182: #endif
                    183: extern nat_t   *nat_new __P((ipnat_t *, ip_t *, fr_info_t *, u_short, int));
                    184: extern nat_t   *nat_outlookup __P((void *, int, struct in_addr, u_short,
                    185:                                 struct in_addr, u_short));
                    186: extern nat_t   *nat_inlookup __P((void *, int, struct in_addr, u_short,
                    187:                                struct in_addr, u_short));
                    188: extern nat_t   *nat_lookupredir __P((natlookup_t *));
                    189: extern nat_t   *nat_lookupmapip __P((void *, int, struct in_addr, u_short,
                    190:                                   struct in_addr, u_short));
                    191: extern nat_t   *nat_icmpinlookup __P((ip_t *, fr_info_t *));
                    192: extern nat_t   *nat_icmpin __P((ip_t *, fr_info_t *, int *));
                    193: 
                    194: extern int     ip_natout __P((ip_t *, int, fr_info_t *));
                    195: extern int     ip_natin __P((ip_t *, int, fr_info_t *));
                    196: extern void    ip_natunload __P((void)), ip_natexpire __P((void));
                    197: extern void    nat_log __P((struct nat *, u_short));
                    198: extern void    fix_incksum __P((u_short *, u_32_t));
                    199: extern void    fix_outcksum __P((u_short *, u_32_t));
                    200: 
                    201: #endif /* __IP_NAT_H__ */

unix.superglobalmegacorp.com

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