Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
[safe/jmp/linux-2.6] / include / net / udp.h
index 93796be..addcdc6 100644 (file)
@@ -115,7 +115,7 @@ static inline void udp_lib_unhash(struct sock *sk)
        write_lock_bh(&udp_hash_lock);
        if (sk_del_node_init(sk)) {
                inet_sk(sk)->num = 0;
-               sock_prot_dec_use(sk->sk_prot);
+               sock_prot_inuse_add(sock_net(sk), sk->sk_prot, -1);
        }
        write_unlock_bh(&udp_hash_lock);
 }
@@ -125,6 +125,8 @@ static inline void udp_lib_close(struct sock *sk, long timeout)
        sk_common_release(sk);
 }
 
+extern int     udp_lib_get_port(struct sock *sk, unsigned short snum,
+               int (*)(const struct sock*,const struct sock*));
 
 /* net/ipv4/udp.c */
 extern int     udp_get_port(struct sock *sk, unsigned short snum,
@@ -133,6 +135,7 @@ extern void udp_err(struct sk_buff *, u32);
 
 extern int     udp_sendmsg(struct kiocb *iocb, struct sock *sk,
                            struct msghdr *msg, size_t len);
+extern void    udp_flush_pending_frames(struct sock *sk);
 
 extern int     udp_rcv(struct sk_buff *skb);
 extern int     udp_ioctl(struct sock *sk, int cmd, unsigned long arg);
@@ -145,27 +148,25 @@ extern int        udp_lib_setsockopt(struct sock *sk, int level, int optname,
                                   char __user *optval, int optlen,
                                   int (*push_pending_frames)(struct sock *));
 
-DECLARE_SNMP_STAT(struct udp_mib, udp_statistics);
 DECLARE_SNMP_STAT(struct udp_mib, udp_stats_in6);
 
 /* UDP-Lite does not have a standardized MIB yet, so we inherit from UDP */
-DECLARE_SNMP_STAT(struct udp_mib, udplite_statistics);
 DECLARE_SNMP_STAT(struct udp_mib, udplite_stats_in6);
 
 /*
  *     SNMP statistics for UDP and UDP-Lite
  */
-#define UDP_INC_STATS_USER(field, is_udplite)                         do {   \
-       if (is_udplite) SNMP_INC_STATS_USER(udplite_statistics, field);       \
-       else            SNMP_INC_STATS_USER(udp_statistics, field);  }  while(0)
-#define UDP_INC_STATS_BH(field, is_udplite)                           do  {  \
-       if (is_udplite) SNMP_INC_STATS_BH(udplite_statistics, field);         \
-       else            SNMP_INC_STATS_BH(udp_statistics, field);    }  while(0)
-
-#define UDP6_INC_STATS_BH(field, is_udplite)                         do  {  \
+#define UDP_INC_STATS_USER(net, field, is_udplite)           do { \
+       if (is_udplite) SNMP_INC_STATS_USER((net)->mib.udplite_statistics, field);       \
+       else            SNMP_INC_STATS_USER((net)->mib.udp_statistics, field);  }  while(0)
+#define UDP_INC_STATS_BH(net, field, is_udplite)             do { \
+       if (is_udplite) SNMP_INC_STATS_BH((net)->mib.udplite_statistics, field);         \
+       else            SNMP_INC_STATS_BH((net)->mib.udp_statistics, field);    }  while(0)
+
+#define UDP6_INC_STATS_BH(net, field, is_udplite)          do { (void)net;  \
        if (is_udplite) SNMP_INC_STATS_BH(udplite_stats_in6, field);         \
        else            SNMP_INC_STATS_BH(udp_stats_in6, field);    } while(0)
-#define UDP6_INC_STATS_USER(field, is_udplite)                        do {    \
+#define UDP6_INC_STATS_USER(net, field, is_udplite)        do { (void)net;    \
        if (is_udplite) SNMP_INC_STATS_USER(udplite_stats_in6, field);         \
        else            SNMP_INC_STATS_USER(udp_stats_in6, field);    } while(0)
 
@@ -173,34 +174,33 @@ DECLARE_SNMP_STAT(struct udp_mib, udplite_stats_in6);
 #define UDPX_INC_STATS_BH(sk, field) \
        do { \
                if ((sk)->sk_family == AF_INET) \
-                       UDP_INC_STATS_BH(field, 0); \
+                       UDP_INC_STATS_BH(sock_net(sk), field, 0); \
                else \
-                       UDP6_INC_STATS_BH(field, 0); \
+                       UDP6_INC_STATS_BH(sock_net(sk), field, 0); \
        } while (0);
 #else
-#define UDPX_INC_STATS_BH(sk, field) UDP_INC_STATS_BH(field, 0)
+#define UDPX_INC_STATS_BH(sk, field) UDP_INC_STATS_BH(sock_net(sk), field, 0)
 #endif
 
 /* /proc */
 struct udp_seq_afinfo {
-       struct module           *owner;
        char                    *name;
        sa_family_t             family;
        struct hlist_head       *hashtable;
-       int                     (*seq_show) (struct seq_file *m, void *v);
-       struct file_operations  *seq_fops;
+       struct file_operations  seq_fops;
+       struct seq_operations   seq_ops;
 };
 
 struct udp_iter_state {
+       struct seq_net_private  p;
        sa_family_t             family;
-       struct hlist_head       *hashtable;
        int                     bucket;
-       struct seq_operations   seq_ops;
+       struct hlist_head       *hashtable;
 };
 
 #ifdef CONFIG_PROC_FS
-extern int udp_proc_register(struct udp_seq_afinfo *afinfo);
-extern void udp_proc_unregister(struct udp_seq_afinfo *afinfo);
+extern int udp_proc_register(struct net *net, struct udp_seq_afinfo *afinfo);
+extern void udp_proc_unregister(struct net *net, struct udp_seq_afinfo *afinfo);
 
 extern int  udp4_proc_init(void);
 extern void udp4_proc_exit(void);