]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - net/dccp/ccid.h
[PATCH] befs: use generic_ro_fops
[linux-2.6-omap-h63xx.git] / net / dccp / ccid.h
index 469f9a14b4631be3b8cdf190d7a6664bae41fdea..c37eeeaf5c6e21982c341391d8d8db1a9929bdb9 100644 (file)
@@ -14,6 +14,7 @@
  */
 
 #include <net/sock.h>
+#include <linux/compiler.h>
 #include <linux/dccp.h>
 #include <linux/list.h>
 #include <linux/module.h>
@@ -30,21 +31,38 @@ struct ccid {
        int             (*ccid_hc_tx_init)(struct sock *sk);
        void            (*ccid_hc_rx_exit)(struct sock *sk);
        void            (*ccid_hc_tx_exit)(struct sock *sk);
-       void            (*ccid_hc_rx_packet_recv)(struct sock *sk, struct sk_buff *skb);
+       void            (*ccid_hc_rx_packet_recv)(struct sock *sk,
+                                                 struct sk_buff *skb);
        int             (*ccid_hc_rx_parse_options)(struct sock *sk,
                                                    unsigned char option,
                                                    unsigned char len, u16 idx,
                                                    unsigned char* value);
-       void            (*ccid_hc_rx_insert_options)(struct sock *sk, struct sk_buff *skb);
-       void            (*ccid_hc_tx_insert_options)(struct sock *sk, struct sk_buff *skb);
-       void            (*ccid_hc_tx_packet_recv)(struct sock *sk, struct sk_buff *skb);
+       void            (*ccid_hc_rx_insert_options)(struct sock *sk,
+                                                    struct sk_buff *skb);
+       void            (*ccid_hc_tx_insert_options)(struct sock *sk,
+                                                    struct sk_buff *skb);
+       void            (*ccid_hc_tx_packet_recv)(struct sock *sk,
+                                                 struct sk_buff *skb);
        int             (*ccid_hc_tx_parse_options)(struct sock *sk,
                                                    unsigned char option,
                                                    unsigned char len, u16 idx,
                                                    unsigned char* value);
        int             (*ccid_hc_tx_send_packet)(struct sock *sk,
                                                  struct sk_buff *skb, int len);
-       void            (*ccid_hc_tx_packet_sent)(struct sock *sk, int more, int len);
+       void            (*ccid_hc_tx_packet_sent)(struct sock *sk, int more,
+                                                 int len);
+       void            (*ccid_hc_rx_get_info)(struct sock *sk,
+                                              struct tcp_info *info);
+       void            (*ccid_hc_tx_get_info)(struct sock *sk,
+                                              struct tcp_info *info);
+       int             (*ccid_hc_rx_getsockopt)(struct sock *sk,
+                                                const int optname, int len,
+                                                u32 __user *optval,
+                                                int __user *optlen);
+       int             (*ccid_hc_tx_getsockopt)(struct sock *sk,
+                                                const int optname, int len,
+                                                u32 __user *optval,
+                                                int __user *optlen);
 };
 
 extern int        ccid_register(struct ccid *ccid);
@@ -92,13 +110,15 @@ static inline int ccid_hc_tx_init(struct ccid *ccid, struct sock *sk)
 
 static inline void ccid_hc_rx_exit(struct ccid *ccid, struct sock *sk)
 {
-       if (ccid->ccid_hc_rx_exit != NULL)
+       if (ccid != NULL && ccid->ccid_hc_rx_exit != NULL &&
+           dccp_sk(sk)->dccps_hc_rx_ccid_private != NULL)
                ccid->ccid_hc_rx_exit(sk);
 }
 
 static inline void ccid_hc_tx_exit(struct ccid *ccid, struct sock *sk)
 {
-       if (ccid->ccid_hc_tx_exit != NULL)
+       if (ccid != NULL && ccid->ccid_hc_tx_exit != NULL &&
+           dccp_sk(sk)->dccps_hc_tx_ccid_private != NULL)
                ccid->ccid_hc_tx_exit(sk);
 }
 
@@ -123,7 +143,8 @@ static inline int ccid_hc_tx_parse_options(struct ccid *ccid, struct sock *sk,
 {
        int rc = 0;
        if (ccid->ccid_hc_tx_parse_options != NULL)
-               rc = ccid->ccid_hc_tx_parse_options(sk, option, len, idx, value);
+               rc = ccid->ccid_hc_tx_parse_options(sk, option, len, idx,
+                                                   value);
        return rc;
 }
 
@@ -151,4 +172,40 @@ static inline void ccid_hc_rx_insert_options(struct ccid *ccid, struct sock *sk,
        if (ccid->ccid_hc_rx_insert_options != NULL)
                ccid->ccid_hc_rx_insert_options(sk, skb);
 }
+
+static inline void ccid_hc_rx_get_info(struct ccid *ccid, struct sock *sk,
+                                      struct tcp_info *info)
+{
+       if (ccid->ccid_hc_rx_get_info != NULL)
+               ccid->ccid_hc_rx_get_info(sk, info);
+}
+
+static inline void ccid_hc_tx_get_info(struct ccid *ccid, struct sock *sk,
+                                      struct tcp_info *info)
+{
+       if (ccid->ccid_hc_tx_get_info != NULL)
+               ccid->ccid_hc_tx_get_info(sk, info);
+}
+
+static inline int ccid_hc_rx_getsockopt(struct ccid *ccid, struct sock *sk,
+                                       const int optname, int len,
+                                       u32 __user *optval, int __user *optlen)
+{
+       int rc = -ENOPROTOOPT;
+       if (ccid->ccid_hc_rx_getsockopt != NULL)
+               rc = ccid->ccid_hc_rx_getsockopt(sk, optname, len,
+                                                optval, optlen);
+       return rc;
+}
+
+static inline int ccid_hc_tx_getsockopt(struct ccid *ccid, struct sock *sk,
+                                       const int optname, int len,
+                                       u32 __user *optval, int __user *optlen)
+{
+       int rc = -ENOPROTOOPT;
+       if (ccid->ccid_hc_tx_getsockopt != NULL)
+               rc = ccid->ccid_hc_tx_getsockopt(sk, optname, len,
+                                                optval, optlen);
+       return rc;
+}
 #endif /* _CCID_H */