"SfR Fresh" - the SfR Freeware/Shareware Archive 
Member "trafshow-3.1/linux/netinet/ip_var.h" of archive trafshow-3.1.tgz:
As a special service "SfR Fresh" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting with prefixed line numbers.
Alternatively you can here view or download the uninterpreted source code file.
That can be also achieved for any archive member file by clicking within an archive contents listing on the first character of the file(path) respectively on the according byte size field.
1 /*
2 * Copyright (c) 1982, 1986, 1993
3 * The Regents of the University of California. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * 3. All advertising materials mentioning features or use of this software
14 * must display the following acknowledgement:
15 * This product includes software developed by the University of
16 * California, Berkeley and its contributors.
17 * 4. Neither the name of the University nor the names of its contributors
18 * may be used to endorse or promote products derived from this software
19 * without specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE.
32 *
33 * @(#)ip_var.h 8.2 (Berkeley) 1/9/95
34 */
35
36 #include <endian.h>
37
38 /*
39 * Overlay for ip header used by other protocols (tcp, udp).
40 */
41 struct ipovly {
42 caddr_t ih_next, ih_prev; /* for protocol sequence q's */
43 u_char ih_x1; /* (unused) */
44 u_char ih_pr; /* protocol */
45 short ih_len; /* protocol length */
46 struct in_addr ih_src; /* source internet address */
47 struct in_addr ih_dst; /* destination internet address */
48 };
49
50 /*
51 * Ip reassembly queue structure. Each fragment
52 * being reassembled is attached to one of these structures.
53 * They are timed out after ipq_ttl drops to 0, and may also
54 * be reclaimed if memory becomes tight.
55 */
56 struct ipq {
57 struct ipq *next,*prev; /* to other reass headers */
58 u_char ipq_ttl; /* time for reass q to live */
59 u_char ipq_p; /* protocol of this fragment */
60 u_short ipq_id; /* sequence id for reassembly */
61 struct ipasfrag *ipq_next,*ipq_prev;
62 /* to ip headers of fragments */
63 struct in_addr ipq_src,ipq_dst;
64 };
65
66 /*
67 * Ip header, when holding a fragment.
68 *
69 * Note: ipf_next must be at same offset as ipq_next above
70 */
71 struct ipasfrag {
72 #if BYTE_ORDER == LITTLE_ENDIAN
73 u_char ip_hl:4,
74 ip_v:4;
75 #endif
76 #if BYTE_ORDER == BIG_ENDIAN
77 u_char ip_v:4,
78 ip_hl:4;
79 #endif
80 u_char ipf_mff; /* XXX overlays ip_tos: use low bit
81 * to avoid destroying tos;
82 * copied from (ip_off&IP_MF) */
83 short ip_len;
84 u_short ip_id;
85 short ip_off;
86 u_char ip_ttl;
87 u_char ip_p;
88 u_short ip_sum;
89 struct ipasfrag *ipf_next; /* next fragment */
90 struct ipasfrag *ipf_prev; /* previous fragment */
91 };
92
93 /*
94 * Structure stored in mbuf in inpcb.ip_options
95 * and passed to ip_output when ip options are in use.
96 * The actual length of the options (including ipopt_dst)
97 * is in m_len.
98 */
99 #define MAX_IPOPTLEN 40
100
101 struct ipoption {
102 struct in_addr ipopt_dst; /* first-hop dst if source routed */
103 char ipopt_list[MAX_IPOPTLEN]; /* options proper */
104 };
105
106 struct ipstat {
107 u_long ips_total; /* total packets received */
108 u_long ips_badsum; /* checksum bad */
109 u_long ips_tooshort; /* packet too short */
110 u_long ips_toosmall; /* not enough data */
111 u_long ips_badhlen; /* ip header length < data size */
112 u_long ips_badlen; /* ip length < ip header length */
113 u_long ips_fragments; /* fragments received */
114 u_long ips_fragdropped; /* frags dropped (dups, out of space) */
115 u_long ips_fragtimeout; /* fragments timed out */
116 u_long ips_forward; /* packets forwarded */
117 u_long ips_cantforward; /* packets rcvd for unreachable dest */
118 u_long ips_redirectsent; /* packets forwarded on same net */
119 u_long ips_noproto; /* unknown or unsupported protocol */
120 u_long ips_delivered; /* datagrams delivered to upper level*/
121 u_long ips_localout; /* total ip packets generated here */
122 u_long ips_odropped; /* lost packets due to nobufs, etc. */
123 u_long ips_reassembled; /* total packets reassembled ok */
124 u_long ips_fragmented; /* datagrams sucessfully fragmented */
125 u_long ips_ofragments; /* output fragments created */
126 u_long ips_cantfrag; /* don't fragment flag was set, etc. */
127 u_long ips_badoptions; /* error in option processing */
128 u_long ips_noroute; /* packets discarded due to no route */
129 u_long ips_badvers; /* ip version != 4 */
130 u_long ips_rawout; /* total raw ip packets generated */
131 };
132
133 #ifdef KERNEL
134 /* flags passed to ip_output as last parameter */
135 #define IP_FORWARDING 0x1 /* most of ip header exists */
136 #define IP_RAWOUTPUT 0x2 /* raw ip header exists */
137 #define IP_ROUTETOIF SO_DONTROUTE /* bypass routing tables */
138 #define IP_ALLOWBROADCAST SO_BROADCAST /* can send broadcast packets */
139
140 struct ipstat ipstat;
141 struct ipq ipq; /* ip reass. queue */
142 u_short ip_id; /* ip packet ctr, for ids */
143 int ip_defttl; /* default IP ttl */
144
145 int in_control __P((struct socket *, u_long, caddr_t, struct ifnet *));
146 int ip_ctloutput __P((int, struct socket *, int, int, struct mbuf **));
147 void ip_deq __P((struct ipasfrag *));
148 int ip_dooptions __P((struct mbuf *));
149 void ip_drain __P((void));
150 void ip_enq __P((struct ipasfrag *, struct ipasfrag *));
151 void ip_forward __P((struct mbuf *, int));
152 void ip_freef __P((struct ipq *));
153 void ip_freemoptions __P((struct ip_moptions *));
154 int ip_getmoptions __P((int, struct ip_moptions *, struct mbuf **));
155 void ip_init __P((void));
156 int ip_mforward __P((struct mbuf *, struct ifnet *));
157 int ip_optcopy __P((struct ip *, struct ip *));
158 int ip_output __P((struct mbuf *,
159 struct mbuf *, struct route *, int, struct ip_moptions *));
160 int ip_pcbopts __P((struct mbuf **, struct mbuf *));
161 struct ip *
162 ip_reass __P((struct ipasfrag *, struct ipq *));
163 struct in_ifaddr *
164 ip_rtaddr __P((struct in_addr));
165 int ip_setmoptions __P((int, struct ip_moptions **, struct mbuf *));
166 void ip_slowtimo __P((void));
167 struct mbuf *
168 ip_srcroute __P((void));
169 void ip_stripoptions __P((struct mbuf *, struct mbuf *));
170 int ip_sysctl __P((int *, u_int, void *, size_t *, void *, size_t));
171 void ipintr __P((void));
172 int rip_ctloutput __P((int, struct socket *, int, int, struct mbuf **));
173 void rip_init __P((void));
174 void rip_input __P((struct mbuf *));
175 int rip_output __P((struct mbuf *, struct socket *, u_long));
176 int rip_usrreq __P((struct socket *,
177 int, struct mbuf *, struct mbuf *, struct mbuf *));
178 #endif