1*7c478bd9Sstevel@tonic-gate /* 2*7c478bd9Sstevel@tonic-gate * Copyright (c) 1997-2001 by Sun Microsystems, Inc. 3*7c478bd9Sstevel@tonic-gate * All rights reserved. 4*7c478bd9Sstevel@tonic-gate */ 5*7c478bd9Sstevel@tonic-gate 6*7c478bd9Sstevel@tonic-gate /* 7*7c478bd9Sstevel@tonic-gate * Copyright (c) 1982, 1986 Regents of the University of California. 8*7c478bd9Sstevel@tonic-gate * All rights reserved. The Berkeley software License Agreement 9*7c478bd9Sstevel@tonic-gate * specifies the terms and conditions for redistribution. 10*7c478bd9Sstevel@tonic-gate */ 11*7c478bd9Sstevel@tonic-gate 12*7c478bd9Sstevel@tonic-gate /* 13*7c478bd9Sstevel@tonic-gate * Overlay for ip header used by other protocols (tcp, udp). 14*7c478bd9Sstevel@tonic-gate */ 15*7c478bd9Sstevel@tonic-gate 16*7c478bd9Sstevel@tonic-gate #ifndef _NETINET_IP_VAR_H 17*7c478bd9Sstevel@tonic-gate #define _NETINET_IP_VAR_H 18*7c478bd9Sstevel@tonic-gate 19*7c478bd9Sstevel@tonic-gate #pragma ident "%Z%%M% %I% %E% SMI" 20*7c478bd9Sstevel@tonic-gate /* ip_var.h 1.11 88/08/19 SMI; from UCB 7.1 6/5/86 */ 21*7c478bd9Sstevel@tonic-gate 22*7c478bd9Sstevel@tonic-gate #include <sys/isa_defs.h> 23*7c478bd9Sstevel@tonic-gate 24*7c478bd9Sstevel@tonic-gate #ifdef __cplusplus 25*7c478bd9Sstevel@tonic-gate extern "C" { 26*7c478bd9Sstevel@tonic-gate #endif 27*7c478bd9Sstevel@tonic-gate 28*7c478bd9Sstevel@tonic-gate struct ipovly { 29*7c478bd9Sstevel@tonic-gate #ifdef _LP64 30*7c478bd9Sstevel@tonic-gate uint32_t ih_next, ih_prev; 31*7c478bd9Sstevel@tonic-gate #else 32*7c478bd9Sstevel@tonic-gate caddr_t ih_next, ih_prev; /* for protocol sequence q's */ 33*7c478bd9Sstevel@tonic-gate #endif 34*7c478bd9Sstevel@tonic-gate uchar_t ih_x1; /* (unused) */ 35*7c478bd9Sstevel@tonic-gate uchar_t ih_pr; /* protocol */ 36*7c478bd9Sstevel@tonic-gate short ih_len; /* protocol length */ 37*7c478bd9Sstevel@tonic-gate struct in_addr ih_src; /* source internet address */ 38*7c478bd9Sstevel@tonic-gate struct in_addr ih_dst; /* destination internet address */ 39*7c478bd9Sstevel@tonic-gate }; 40*7c478bd9Sstevel@tonic-gate 41*7c478bd9Sstevel@tonic-gate /* 42*7c478bd9Sstevel@tonic-gate * Ip reassembly queue structure. Each fragment 43*7c478bd9Sstevel@tonic-gate * being reassembled is attached to one of these structures. 44*7c478bd9Sstevel@tonic-gate * They are timed out after ipq_ttl drops to 0, and may also 45*7c478bd9Sstevel@tonic-gate * be reclaimed if memory becomes tight. 46*7c478bd9Sstevel@tonic-gate */ 47*7c478bd9Sstevel@tonic-gate struct ipq { 48*7c478bd9Sstevel@tonic-gate struct ipq *next, *prev; /* to other reass headers */ 49*7c478bd9Sstevel@tonic-gate uchar_t ipq_ttl; /* time for reass q to live */ 50*7c478bd9Sstevel@tonic-gate uchar_t ipq_p; /* protocol of this fragment */ 51*7c478bd9Sstevel@tonic-gate ushort_t ipq_id; /* sequence id for reassembly */ 52*7c478bd9Sstevel@tonic-gate struct ipasfrag *ipq_next, *ipq_prev; 53*7c478bd9Sstevel@tonic-gate /* to ip headers of fragments */ 54*7c478bd9Sstevel@tonic-gate struct in_addr ipq_src, ipq_dst; 55*7c478bd9Sstevel@tonic-gate }; 56*7c478bd9Sstevel@tonic-gate 57*7c478bd9Sstevel@tonic-gate /* 58*7c478bd9Sstevel@tonic-gate * Ip header, when holding a fragment. 59*7c478bd9Sstevel@tonic-gate * 60*7c478bd9Sstevel@tonic-gate * Note: ipf_next must be at same offset as ipq_next above 61*7c478bd9Sstevel@tonic-gate */ 62*7c478bd9Sstevel@tonic-gate struct ipasfrag { 63*7c478bd9Sstevel@tonic-gate #ifdef _BIT_FIELDS_LTOH 64*7c478bd9Sstevel@tonic-gate uchar_t ip_hl:4, 65*7c478bd9Sstevel@tonic-gate ip_v:4; 66*7c478bd9Sstevel@tonic-gate #else 67*7c478bd9Sstevel@tonic-gate uchar_t ip_v:4, 68*7c478bd9Sstevel@tonic-gate ip_hl:4; 69*7c478bd9Sstevel@tonic-gate #endif 70*7c478bd9Sstevel@tonic-gate uchar_t ipf_mff; /* copied from (ip_off&IP_MF) */ 71*7c478bd9Sstevel@tonic-gate short ip_len; 72*7c478bd9Sstevel@tonic-gate ushort_t ip_id; 73*7c478bd9Sstevel@tonic-gate short ip_off; 74*7c478bd9Sstevel@tonic-gate uchar_t ip_ttl; 75*7c478bd9Sstevel@tonic-gate uchar_t ip_p; 76*7c478bd9Sstevel@tonic-gate ushort_t ip_sum; 77*7c478bd9Sstevel@tonic-gate struct ipasfrag *ipf_next; /* next fragment */ 78*7c478bd9Sstevel@tonic-gate struct ipasfrag *ipf_prev; /* previous fragment */ 79*7c478bd9Sstevel@tonic-gate }; 80*7c478bd9Sstevel@tonic-gate 81*7c478bd9Sstevel@tonic-gate /* 82*7c478bd9Sstevel@tonic-gate * Structure stored in mbuf in inpcb.ip_options 83*7c478bd9Sstevel@tonic-gate * and passed to ip_output when ip options are in use. 84*7c478bd9Sstevel@tonic-gate * The actual length of the options (including ipopt_dst) 85*7c478bd9Sstevel@tonic-gate * is in m_len. 86*7c478bd9Sstevel@tonic-gate */ 87*7c478bd9Sstevel@tonic-gate #define MAX_IPOPTLEN 40 88*7c478bd9Sstevel@tonic-gate 89*7c478bd9Sstevel@tonic-gate struct ipoption { 90*7c478bd9Sstevel@tonic-gate struct in_addr ipopt_dst; /* first-hop dst if source routed */ 91*7c478bd9Sstevel@tonic-gate char ipopt_list[MAX_IPOPTLEN]; /* options proper */ 92*7c478bd9Sstevel@tonic-gate }; 93*7c478bd9Sstevel@tonic-gate 94*7c478bd9Sstevel@tonic-gate struct ipstat { 95*7c478bd9Sstevel@tonic-gate long ips_total; /* total packets received */ 96*7c478bd9Sstevel@tonic-gate long ips_badsum; /* checksum bad */ 97*7c478bd9Sstevel@tonic-gate long ips_tooshort; /* packet too short */ 98*7c478bd9Sstevel@tonic-gate long ips_toosmall; /* not enough data */ 99*7c478bd9Sstevel@tonic-gate long ips_badhlen; /* ip header length < data size */ 100*7c478bd9Sstevel@tonic-gate long ips_badlen; /* ip length < ip header length */ 101*7c478bd9Sstevel@tonic-gate long ips_fragments; /* fragments received */ 102*7c478bd9Sstevel@tonic-gate long ips_fragdropped; /* frags dropped (dups, out of space) */ 103*7c478bd9Sstevel@tonic-gate long ips_fragtimeout; /* fragments timed out */ 104*7c478bd9Sstevel@tonic-gate long ips_forward; /* packets forwarded */ 105*7c478bd9Sstevel@tonic-gate long ips_cantforward; /* packets rcvd for unreachable dest */ 106*7c478bd9Sstevel@tonic-gate long ips_redirectsent; /* packets forwarded on same net */ 107*7c478bd9Sstevel@tonic-gate }; 108*7c478bd9Sstevel@tonic-gate 109*7c478bd9Sstevel@tonic-gate #ifdef _KERNEL 110*7c478bd9Sstevel@tonic-gate /* flags passed to ip_output as last parameter */ 111*7c478bd9Sstevel@tonic-gate #define IP_FORWARDING 0x1 /* most of ip header exists */ 112*7c478bd9Sstevel@tonic-gate #define IP_ROUTETOIF SO_DONTROUTE /* bypass routing tables */ 113*7c478bd9Sstevel@tonic-gate #define IP_ALLOWBROADCAST SO_BROADCAST /* can send broadcast packets */ 114*7c478bd9Sstevel@tonic-gate #endif 115*7c478bd9Sstevel@tonic-gate 116*7c478bd9Sstevel@tonic-gate #ifdef __cplusplus 117*7c478bd9Sstevel@tonic-gate } 118*7c478bd9Sstevel@tonic-gate #endif 119*7c478bd9Sstevel@tonic-gate 120*7c478bd9Sstevel@tonic-gate #endif /* _NETINET_IP_VAR_H */ 121