|
|
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__ */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.