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

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