1 /* ip_var.h 4.10 83/05/12 */ 2 3 /* 4 * Overlay for ip header used by other protocols (tcp, udp). 5 */ 6 struct ipovly { 7 caddr_t ih_next, ih_prev; /* for protocol sequence q's */ 8 u_char ih_x1; /* (unused) */ 9 u_char ih_pr; /* protocol */ 10 short ih_len; /* protocol length */ 11 struct in_addr ih_src; /* source internet address */ 12 struct in_addr ih_dst; /* destination internet address */ 13 }; 14 15 /* 16 * Ip reassembly queue structure. Each fragment 17 * being reassembled is attached to one of these structures. 18 * They are timed out after ipq_ttl drops to 0, and may also 19 * be reclaimed if memory becomes tight. 20 */ 21 struct ipq { 22 struct ipq *next,*prev; /* to other reass headers */ 23 u_char ipq_ttl; /* time for reass q to live */ 24 u_char ipq_p; /* protocol of this fragment */ 25 u_short ipq_id; /* sequence id for reassembly */ 26 struct ipasfrag *ipq_next,*ipq_prev; 27 /* to ip headers of fragments */ 28 struct in_addr ipq_src,ipq_dst; 29 }; 30 31 /* 32 * Ip header, when holding a fragment. 33 * 34 * Note: ipf_next must be at same offset as ipq_next above 35 */ 36 struct ipasfrag { 37 #ifdef vax 38 u_char ip_hl:4, 39 ip_v:4; 40 #endif 41 #ifdef sun 42 u_char ip_v:4, 43 ip_hl:4; 44 #endif 45 u_char ipf_mff; /* copied from (ip_off&IP_MF) */ 46 short ip_len; 47 u_short ip_id; 48 short ip_off; 49 u_char ip_ttl; 50 u_char ip_p; 51 u_short ip_sum; 52 struct ipasfrag *ipf_next; /* next fragment */ 53 struct ipasfrag *ipf_prev; /* previous fragment */ 54 }; 55 56 struct ipstat { 57 int ips_badsum; /* checksum bad */ 58 int ips_tooshort; /* packet too short */ 59 int ips_toosmall; /* not enough data */ 60 int ips_badhlen; /* ip header length < data size */ 61 int ips_badlen; /* ip length < ip header length */ 62 }; 63 64 #ifdef KERNEL 65 /* flags passed to ip_output as last parameter */ 66 #define IP_FORWARDING 0x1 /* most of ip header exists */ 67 #define IP_ROUTETOIF 0x10 /* same as SO_DONTROUTE */ 68 #define IP_ALLOWBROADCAST SS_PRIV /* can send broadcast packets */ 69 70 struct ipstat ipstat; 71 struct ipq ipq; /* ip reass. queue */ 72 u_short ip_id; /* ip packet ctr, for ids */ 73 #endif 74