OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [include/] [net/] [ip.h] - Blame information for rev 1774

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1275 phoenix
/*
2
 * INET         An implementation of the TCP/IP protocol suite for the LINUX
3
 *              operating system.  INET is implemented using the  BSD Socket
4
 *              interface as the means of communication with the user level.
5
 *
6
 *              Definitions for the IP module.
7
 *
8
 * Version:     @(#)ip.h        1.0.2   05/07/93
9
 *
10
 * Authors:     Ross Biro, <bir7@leland.Stanford.Edu>
11
 *              Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
12
 *              Alan Cox, <gw4pts@gw4pts.ampr.org>
13
 *
14
 * Changes:
15
 *              Mike McLagan    :       Routing by source
16
 *
17
 *              This program is free software; you can redistribute it and/or
18
 *              modify it under the terms of the GNU General Public License
19
 *              as published by the Free Software Foundation; either version
20
 *              2 of the License, or (at your option) any later version.
21
 */
22
#ifndef _IP_H
23
#define _IP_H
24
 
25
#include <linux/config.h>
26
#include <linux/types.h>
27
#include <linux/socket.h>
28
#include <linux/ip.h>
29
#include <linux/netdevice.h>
30
#include <linux/inetdevice.h>
31
#include <linux/in_route.h>
32
#include <net/route.h>
33
#include <net/arp.h>
34
 
35
#ifndef _SNMP_H
36
#include <net/snmp.h>
37
#endif
38
 
39
#include <net/sock.h>   /* struct sock */
40
 
41
struct inet_skb_parm
42
{
43
        struct ip_options       opt;            /* Compiled IP options          */
44
        unsigned char           flags;
45
 
46
#define IPSKB_MASQUERADED       1
47
#define IPSKB_TRANSLATED        2
48
#define IPSKB_FORWARDED         4
49
};
50
 
51
struct ipcm_cookie
52
{
53
        u32                     addr;
54
        int                     oif;
55
        struct ip_options       *opt;
56
};
57
 
58
#define IPCB(skb) ((struct inet_skb_parm*)((skb)->cb))
59
 
60
struct ip_ra_chain
61
{
62
        struct ip_ra_chain      *next;
63
        struct sock             *sk;
64
        void                    (*destructor)(struct sock *);
65
};
66
 
67
extern struct ip_ra_chain *ip_ra_chain;
68
extern rwlock_t ip_ra_lock;
69
 
70
/* IP flags. */
71
#define IP_CE           0x8000          /* Flag: "Congestion"           */
72
#define IP_DF           0x4000          /* Flag: "Don't Fragment"       */
73
#define IP_MF           0x2000          /* Flag: "More Fragments"       */
74
#define IP_OFFSET       0x1FFF          /* "Fragment Offset" part       */
75
 
76
#define IP_FRAG_TIME    (30 * HZ)               /* fragment lifetime    */
77
 
78
extern void             ip_mc_dropsocket(struct sock *);
79
extern void             ip_mc_dropdevice(struct net_device *dev);
80
extern int              ip_mc_procinfo(char *, char **, off_t, int);
81
extern int              ip_mcf_procinfo(char *, char **, off_t, int);
82
 
83
/*
84
 *      Functions provided by ip.c
85
 */
86
 
87
extern int              ip_build_and_send_pkt(struct sk_buff *skb, struct sock *sk,
88
                                              u32 saddr, u32 daddr,
89
                                              struct ip_options *opt);
90
extern int              ip_rcv(struct sk_buff *skb, struct net_device *dev,
91
                               struct packet_type *pt);
92
extern int              ip_local_deliver(struct sk_buff *skb);
93
extern int              ip_mr_input(struct sk_buff *skb);
94
extern int              ip_output(struct sk_buff *skb);
95
extern int              ip_mc_output(struct sk_buff *skb);
96
extern int              ip_fragment(struct sk_buff *skb, int (*out)(struct sk_buff*));
97
extern int              ip_do_nat(struct sk_buff *skb);
98
extern void             ip_send_check(struct iphdr *ip);
99
extern int              ip_queue_xmit(struct sk_buff *skb, int ipfragok);
100
extern void             ip_init(void);
101
extern int              ip_build_xmit(struct sock *sk,
102
                                      int getfrag (const void *,
103
                                                   char *,
104
                                                   unsigned int,
105
                                                   unsigned int),
106
                                      const void *frag,
107
                                      unsigned length,
108
                                      struct ipcm_cookie *ipc,
109
                                      struct rtable *rt,
110
                                      int flags);
111
 
112
/*
113
 *      Map a multicast IP onto multicast MAC for type Token Ring.
114
 *      This conforms to RFC1469 Option 2 Multicasting i.e.
115
 *      using a functional address to transmit / receive
116
 *      multicast packets.
117
 */
118
 
119
static inline void ip_tr_mc_map(u32 addr, char *buf)
120
{
121
        buf[0]=0xC0;
122
        buf[1]=0x00;
123
        buf[2]=0x00;
124
        buf[3]=0x04;
125
        buf[4]=0x00;
126
        buf[5]=0x00;
127
}
128
 
129
struct ip_reply_arg {
130
        struct iovec iov[2];
131
        int          n_iov;    /* redundant */
132
        u32          csum;
133
        int          csumoffset; /* u16 offset of csum in iov[0].iov_base */
134
                                 /* -1 if not needed */
135
};
136
 
137
void ip_send_reply(struct sock *sk, struct sk_buff *skb, struct ip_reply_arg *arg,
138
                   unsigned int len);
139
 
140
extern __inline__ int ip_finish_output(struct sk_buff *skb);
141
 
142
struct ipv4_config
143
{
144
        int     log_martians;
145
        int     autoconfig;
146
        int     no_pmtu_disc;
147
};
148
 
149
extern struct ipv4_config ipv4_config;
150
extern struct ip_mib    ip_statistics[NR_CPUS*2];
151
#define IP_INC_STATS(field)             SNMP_INC_STATS(ip_statistics, field)
152
#define IP_INC_STATS_BH(field)          SNMP_INC_STATS_BH(ip_statistics, field)
153
#define IP_INC_STATS_USER(field)        SNMP_INC_STATS_USER(ip_statistics, field)
154
extern struct linux_mib net_statistics[NR_CPUS*2];
155
#define NET_INC_STATS(field)            SNMP_INC_STATS(net_statistics, field)
156
#define NET_INC_STATS_BH(field)         SNMP_INC_STATS_BH(net_statistics, field)
157
#define NET_INC_STATS_USER(field)       SNMP_INC_STATS_USER(net_statistics, field)
158
 
159
extern int sysctl_local_port_range[2];
160
extern int sysctl_ip_default_ttl;
161
 
162
#ifdef CONFIG_INET
163
static inline int ip_send(struct sk_buff *skb)
164
{
165
        if (skb->len > skb->dst->pmtu)
166
                return ip_fragment(skb, ip_finish_output);
167
        else
168
                return ip_finish_output(skb);
169
}
170
 
171
/* The function in 2.2 was invalid, producing wrong result for
172
 * check=0xFEFF. It was noticed by Arthur Skawina _year_ ago. --ANK(000625) */
173
static inline
174
int ip_decrease_ttl(struct iphdr *iph)
175
{
176
        u32 check = iph->check;
177
        check += __constant_htons(0x0100);
178
        iph->check = check + (check>=0xFFFF);
179
        return --iph->ttl;
180
}
181
 
182
static inline
183
int ip_dont_fragment(struct sock *sk, struct dst_entry *dst)
184
{
185
        return (sk->protinfo.af_inet.pmtudisc == IP_PMTUDISC_DO ||
186
                (sk->protinfo.af_inet.pmtudisc == IP_PMTUDISC_WANT &&
187
                 !(dst->mxlock&(1<<RTAX_MTU))));
188
}
189
 
190
extern void __ip_select_ident(struct iphdr *iph, struct dst_entry *dst);
191
 
192
static inline void ip_select_ident(struct iphdr *iph, struct dst_entry *dst, struct sock *sk)
193
{
194
        if (iph->frag_off&__constant_htons(IP_DF)) {
195
                /* This is only to work around buggy Windows95/2000
196
                 * VJ compression implementations.  If the ID field
197
                 * does not change, they drop every other packet in
198
                 * a TCP stream using header compression.
199
                 */
200
                iph->id = ((sk && sk->daddr) ? htons(sk->protinfo.af_inet.id++) : 0);
201
        } else
202
                __ip_select_ident(iph, dst);
203
}
204
 
205
/*
206
 *      Map a multicast IP onto multicast MAC for type ethernet.
207
 */
208
 
209
static inline void ip_eth_mc_map(u32 addr, char *buf)
210
{
211
        addr=ntohl(addr);
212
        buf[0]=0x01;
213
        buf[1]=0x00;
214
        buf[2]=0x5e;
215
        buf[5]=addr&0xFF;
216
        addr>>=8;
217
        buf[4]=addr&0xFF;
218
        addr>>=8;
219
        buf[3]=addr&0x7F;
220
}
221
 
222
#endif
223
 
224
extern int      ip_call_ra_chain(struct sk_buff *skb);
225
 
226
/*
227
 *      Functions provided by ip_fragment.o
228
 */
229
 
230
struct sk_buff *ip_defrag(struct sk_buff *skb);
231
extern int ip_frag_nqueues;
232
extern atomic_t ip_frag_mem;
233
 
234
/*
235
 *      Functions provided by ip_forward.c
236
 */
237
 
238
extern int ip_forward(struct sk_buff *skb);
239
extern int ip_net_unreachable(struct sk_buff *skb);
240
 
241
/*
242
 *      Functions provided by ip_options.c
243
 */
244
 
245
extern void ip_options_build(struct sk_buff *skb, struct ip_options *opt, u32 daddr, struct rtable *rt, int is_frag);
246
extern int ip_options_echo(struct ip_options *dopt, struct sk_buff *skb);
247
extern void ip_options_fragment(struct sk_buff *skb);
248
extern int ip_options_compile(struct ip_options *opt, struct sk_buff *skb);
249
extern int ip_options_get(struct ip_options **optp, unsigned char *data, int optlen, int user);
250
extern void ip_options_undo(struct ip_options * opt);
251
extern void ip_forward_options(struct sk_buff *skb);
252
extern int ip_options_rcv_srr(struct sk_buff *skb);
253
 
254
/*
255
 *      Functions provided by ip_sockglue.c
256
 */
257
 
258
extern void     ip_cmsg_recv(struct msghdr *msg, struct sk_buff *skb);
259
extern int      ip_cmsg_send(struct msghdr *msg, struct ipcm_cookie *ipc);
260
extern int      ip_setsockopt(struct sock *sk, int level, int optname, char *optval, int optlen);
261
extern int      ip_getsockopt(struct sock *sk, int level, int optname, char *optval, int *optlen);
262
extern int      ip_ra_control(struct sock *sk, unsigned char on, void (*destructor)(struct sock *));
263
 
264
extern int      ip_recv_error(struct sock *sk, struct msghdr *msg, int len);
265
extern void     ip_icmp_error(struct sock *sk, struct sk_buff *skb, int err,
266
                              u16 port, u32 info, u8 *payload);
267
extern void     ip_local_error(struct sock *sk, int err, u32 daddr, u16 dport,
268
                               u32 info);
269
 
270
#endif  /* _IP_H */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.