patch-2.1.15 linux/include/net/ip.h
Next file: linux/include/net/ip_fib.h
Previous file: linux/include/net/inet_common.h
Back to the patch index
Back to the overall index
- Lines: 193
- Date:
Thu Dec 12 17:38:39 1996
- Orig file:
v2.1.14/linux/include/net/ip.h
- Orig date:
Fri Nov 15 23:49:10 1996
diff -u --recursive --new-file v2.1.14/linux/include/net/ip.h linux/include/net/ip.h
@@ -33,6 +33,26 @@
#include <net/sock.h> /* struct sock */
+struct inet_skb_parm
+{
+ struct ip_options opt; /* Compiled IP options */
+ u16 redirport; /* Redirect port */
+ unsigned char flags;
+ char vif;
+
+#define IPSKB_MASQUERADED 1
+#define IPSKB_TRANSLATED 2
+#define IPSKB_TUNNELED 4
+};
+
+struct ipcm_cookie
+{
+ u32 addr;
+ struct ip_options *opt;
+};
+
+#define IPCB(skb) ((struct inet_skb_parm*)((skb)->cb))
+
/* IP flags. */
#define IP_CE 0x8000 /* Flag: "Congestion" */
#define IP_DF 0x4000 /* Flag: "Don't Fragment" */
@@ -41,13 +61,9 @@
#define IP_FRAG_TIME (30 * HZ) /* fragment lifetime */
-#ifdef CONFIG_IP_MULTICAST
extern void ip_mc_dropsocket(struct sock *);
extern void ip_mc_dropdevice(struct device *dev);
extern int ip_mc_procinfo(char *, char **, off_t, int, int);
-#endif
-
-#include <net/ip_forward.h>
/* Describe an IP fragment. */
struct ipfrag
@@ -83,72 +99,119 @@
* Functions provided by ip.c
*/
-extern void ip_print(const struct iphdr *ip);
extern int ip_ioctl(struct sock *sk, int cmd, unsigned long arg);
-extern void ip_route_check(__u32 daddr);
-extern int ip_send(struct rtable *rt, struct sk_buff *skb, __u32 daddr, int len, struct device *dev, __u32 saddr);
-extern int ip_build_header(struct sk_buff *skb,
- __u32 saddr,
- __u32 daddr,
- struct device **dev, int type,
- struct options *opt, int len,
- int tos,int ttl,struct rtable **rp);
+extern int ip_build_pkt(struct sk_buff *skb, struct sock *sk,
+ u32 saddr, u32 daddr,
+ struct ip_options *opt);
+extern int ip_build_header(struct sk_buff *skb, struct sock *sk);
extern int ip_rcv(struct sk_buff *skb, struct device *dev,
struct packet_type *pt);
-extern int ip_options_echo(struct options * dopt, struct options * sopt,
- __u32 daddr, __u32 saddr,
- struct sk_buff * skb);
-extern int ip_options_compile(struct options * opt, struct sk_buff * skb);
+extern int ip_local_deliver(struct sk_buff *skb);
+extern int ip_mr_input(struct sk_buff *skb);
+extern int ip_output(struct sk_buff *skb);
+extern int ip_mc_output(struct sk_buff *skb);
+#ifdef CONFIG_IP_ACCT
+extern int ip_acct_output(struct sk_buff *skb);
+#else
+#define ip_acct_output dev_queue_xmit
+#endif
+extern void ip_fragment(struct sk_buff *skb, int, int (*out)(struct sk_buff*));
+extern struct sk_buff * ip_reply(struct sk_buff *skb, int payload);
+extern int ip_do_nat(struct sk_buff *skb);
extern void ip_send_check(struct iphdr *ip);
extern int ip_id_count;
-extern void ip_queue_xmit(struct sock *sk,
- struct device *dev, struct sk_buff *skb,
- int free);
+extern void ip_queue_xmit(struct sk_buff *skb);
extern void ip_init(void);
extern int ip_build_xmit(struct sock *sk,
int getfrag (const void *,
- __u32,
char *,
unsigned int,
unsigned int),
const void *frag,
unsigned short int length,
- __u32 daddr,
- __u32 saddr,
- struct options * opt,
- int flags,
- int type,
- int noblock);
+ struct ipcm_cookie *ipc,
+ struct rtable *rt,
+ int flags);
+
+
+static __inline__
+void ip_send(struct sk_buff *skb)
+{
+ ip_ll_header(skb);
+
+ if (skb->len > skb->dev->mtu + skb->dev->hard_header_len)
+ ip_fragment(skb, 0, ip_acct_output);
+ else
+ ip_acct_output(skb);
+}
+
+static __inline__
+int ip_decrease_ttl(struct iphdr *iph)
+{
+ u16 check = iph->check;
+ check = ntohs(check) + 0x0100;
+ if ((check & 0xFF00) == 0)
+ check++; /* carry overflow */
+ iph->check = htons(check);
+ return --iph->ttl;
+}
extern struct ip_mib ip_statistics;
+struct ipv4_config
+{
+ int accept_redirects;
+ int secure_redirects;
+ int rfc1620_redirects;
+ int rfc1812_filter;
+ int addrmask_agent;
+ int log_martians;
+ int source_route;
+ int multicast_route;
+ int bootp_agent;
+ int bootp_relay;
+ int fib_model;
+ int no_pmtu_disc;
+};
+
+extern struct ipv4_config ipv4_config;
+
+#define IS_ROUTER (ip_statistics.IpForwarding == 1)
+
/*
* Functions provided by ip_fragment.o
*/
-struct sk_buff *ip_defrag(struct iphdr *iph, struct sk_buff *skb, struct device *dev);
-void ip_fragment(struct sock *sk, struct sk_buff *skb, struct device *dev, int is_frag);
+struct sk_buff *ip_defrag(struct sk_buff *skb);
/*
* Functions provided by ip_forward.c
*/
-extern int ip_forward(struct sk_buff *skb, struct device *dev, int is_frag, __u32 target_addr);
+extern int ip_forward(struct sk_buff *skb);
+extern int ip_net_unreachable(struct sk_buff *skb);
/*
* Functions provided by ip_options.c
*/
-extern void ip_options_build(struct sk_buff *skb, struct options *opt, __u32 daddr, __u32 saddr, int is_frag);
-extern int ip_options_echo(struct options *dopt, struct options *sopt, __u32 daddr, __u32 saddr, struct sk_buff *skb);
+extern void ip_options_build(struct sk_buff *skb, struct ip_options *opt, u32 daddr, u32 saddr, int is_frag);
+extern int ip_options_echo(struct ip_options *dopt, struct sk_buff *skb);
extern void ip_options_fragment(struct sk_buff *skb);
-extern int ip_options_compile(struct options *opt, struct sk_buff *skb);
+extern int ip_options_compile(struct ip_options *opt, struct sk_buff *skb);
+extern int ip_options_getfromuser(struct ip_options **optp, unsigned char *data, int optlen);
+extern void ip_options_undo(struct ip_options * opt);
+extern void ip_forward_options(struct sk_buff *skb);
+extern int ip_options_rcv_srr(struct sk_buff *skb);
/*
* Functions provided by ip_sockglue.c
*/
-extern int ip_setsockopt(struct sock *sk, int level, int optname, char *optval, int optlen);
-extern int ip_getsockopt(struct sock *sk, int level, int optname, char *optval, int *optlen);
-
+extern void ip_cmsg_recv(struct msghdr *msg, struct sk_buff *skb);
+extern int ip_cmsg_send(struct msghdr *msg, struct ipcm_cookie *ipc, struct device **devp);
+extern int ip_setsockopt(struct sock *sk, int level, int optname, char *optval, int optlen);
+extern int ip_getsockopt(struct sock *sk, int level, int optname, char *optval, int *optlen);
+
+extern int ipv4_backlog_rcv(struct sock *sk, struct sk_buff *skb);
#endif /* _IP_H */
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov