1 /* ip_var.h 4.6 82/11/13 */ 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 u_char ip_hl:4, 38 ip_v:4; 39 u_char ipf_mff; /* copied from (ip_off&IP_MF) */ 40 short ip_len; 41 u_short ip_id; 42 short ip_off; 43 u_char ip_ttl; 44 u_char ip_p; 45 u_short ip_sum; 46 struct ipasfrag *ipf_next; /* next fragment */ 47 struct ipasfrag *ipf_prev; /* previous fragment */ 48 }; 49 50 struct ipstat { 51 int ips_badsum; /* checksum bad */ 52 int ips_tooshort; /* packet too short */ 53 }; 54 55 #ifdef KERNEL 56 struct ipstat ipstat; 57 struct ipq ipq; /* ip reass. queue */ 58 struct ipq *ip_freef(); 59 u_short ip_id; /* ip packet ctr, for ids */ 60 #endif 61