vserver 1.9.5.x5
[linux-2.6.git] / include / net / ip.h
index 5a683cc..b4db137 100644 (file)
 #include <linux/in_route.h>
 #include <net/route.h>
 #include <net/arp.h>
-
-#ifndef _SNMP_H
 #include <net/snmp.h>
-#endif
 
-#include <net/sock.h>  /* struct sock */
+struct sock;
 
 struct inet_skb_parm
 {
@@ -92,8 +89,8 @@ extern int            ip_rcv(struct sk_buff *skb, struct net_device *dev,
                               struct packet_type *pt);
 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 **pskb);
-extern int             ip_mc_output(struct sk_buff **pskb);
+extern int             ip_output(struct sk_buff *skb);
+extern int             ip_mc_output(struct sk_buff *skb);
 extern int             ip_fragment(struct sk_buff *skb, int (*out)(struct sk_buff*));
 extern int             ip_do_nat(struct sk_buff *skb);
 extern void            ip_send_check(struct iphdr *ip);
@@ -112,6 +109,9 @@ extern ssize_t              ip_append_page(struct sock *sk, struct page *page,
 extern int             ip_push_pending_frames(struct sock *sk);
 extern void            ip_flush_pending_frames(struct sock *sk);
 
+/* datagram.c */
+extern int             ip4_datagram_connect(struct sock *sk, 
+                                            struct sockaddr *uaddr, int addr_len);
 
 /*
  *     Map a multicast IP onto multicast MAC for type Token Ring.
@@ -131,10 +131,10 @@ static inline void ip_tr_mc_map(u32 addr, char *buf)
 }
 
 struct ip_reply_arg {
-       struct iovec iov[1];   
-       u32          csum; 
-       int          csumoffset; /* u16 offset of csum in iov[0].iov_base */
-                                /* -1 if not needed */ 
+       struct kvec iov[1];   
+       u32         csum; 
+       int         csumoffset; /* u16 offset of csum in iov[0].iov_base */
+                               /* -1 if not needed */ 
 }; 
 
 void ip_send_reply(struct sock *sk, struct sk_buff *skb, struct ip_reply_arg *arg,
@@ -229,6 +229,39 @@ static inline void ip_eth_mc_map(u32 addr, char *buf)
        buf[3]=addr&0x7F;
 }
 
+/*
+ *     Map a multicast IP onto multicast MAC for type IP-over-InfiniBand.
+ *     Leave P_Key as 0 to be filled in by driver.
+ */
+
+static inline void ip_ib_mc_map(u32 addr, char *buf)
+{
+       buf[0]  = 0;            /* Reserved */
+       buf[1]  = 0xff;         /* Multicast QPN */
+       buf[2]  = 0xff;
+       buf[3]  = 0xff;
+       addr    = ntohl(addr);
+       buf[4]  = 0xff;
+       buf[5]  = 0x12;         /* link local scope */
+       buf[6]  = 0x40;         /* IPv4 signature */
+       buf[7]  = 0x1b;
+       buf[8]  = 0;            /* P_Key */
+       buf[9]  = 0;
+       buf[10] = 0;
+       buf[11] = 0;
+       buf[12] = 0;
+       buf[13] = 0;
+       buf[14] = 0;
+       buf[15] = 0;
+       buf[19] = addr & 0xff;
+       addr  >>= 8;
+       buf[18] = addr & 0xff;
+       addr  >>= 8;
+       buf[17] = addr & 0xff;
+       addr  >>= 8;
+       buf[16] = addr & 0x0f;
+}
+
 #if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
 #include <linux/ipv6.h>
 #endif
@@ -253,8 +286,20 @@ extern int ip_call_ra_chain(struct sk_buff *skb);
 /*
  *     Functions provided by ip_fragment.o
  */
-struct sk_buff *ip_defrag(struct sk_buff *skb);
+
+enum ip_defrag_users
+{
+       IP_DEFRAG_LOCAL_DELIVER,
+       IP_DEFRAG_CALL_RA_CHAIN,
+       IP_DEFRAG_CONNTRACK_IN,
+       IP_DEFRAG_CONNTRACK_OUT,
+       IP_DEFRAG_NAT_OUT,
+       IP_DEFRAG_VS_IN,
+       IP_DEFRAG_VS_OUT,
+       IP_DEFRAG_VS_FWD
+};
+
+struct sk_buff *ip_defrag(struct sk_buff *skb, u32 user);
 extern int ip_frag_nqueues;
 extern atomic_t ip_frag_mem;
 
@@ -294,14 +339,12 @@ extern void       ip_icmp_error(struct sock *sk, struct sk_buff *skb, int err,
 extern void    ip_local_error(struct sock *sk, int err, u32 daddr, u16 dport,
                               u32 info);
 
-extern int ipv4_proc_init(void);
-
 /* sysctl helpers - any sysctl which holds a value that ends up being
  * fed into the routing cache should use these handlers.
  */
 int ipv4_doint_and_flush(ctl_table *ctl, int write,
                         struct file* filp, void __user *buffer,
-                        size_t *lenp);
+                        size_t *lenp, loff_t *ppos);
 int ipv4_doint_and_flush_strategy(ctl_table *table, int __user *name, int nlen,
                                  void __user *oldval, size_t __user *oldlenp,
                                  void __user *newval, size_t newlen,