Whamcloud - gitweb
* 5602 fix improves checks that NID is set correctly and causes incorrect
[fs/lustre-release.git] / lnet / klnds / ralnd / ralnd.h
index cc5c2e6..7e43705 100644 (file)
 #include <linux/sysctl.h>
 
 #include <net/sock.h>
+#include <linux/in.h>
 
 #define DEBUG_SUBSYSTEM S_NAL
 
 #include <linux/kp30.h>
+#include <linux/portals_compat25.h>
 #include <portals/p30.h>
 #include <portals/lib-p30.h>
 #include <portals/nal.h>
@@ -86,6 +88,8 @@
 /* default vals for runtime tunables */
 #define RANAL_TIMEOUT           30              /* comms timeout (seconds) */
 #define RANAL_LISTENER_TIMEOUT   5              /* listener timeout (seconds) */
+#define RANAL_BACKLOG          127              /* listener's backlog */
+#define RANAL_PORT             988              /* listener's port */
 #define RANAL_MAX_IMMEDIATE    (2<<10)          /* immediate payload breakpoint */
 
 typedef struct 
@@ -102,9 +106,8 @@ typedef struct
 typedef struct
 {
         RAP_PVOID               rad_handle;     /* device handle */
-        RAP_PROTECTION_HANDLE   rad_ptag;       /* protection tag */
-        RAP_CQ_HANDLE           rad_fma_cq;     /* FMA (small message) completion queue */
-        RAP_CQ_HANDLE           rad_rdma_cq;    /* rdma completion queue */
+        RAP_PVOID               rad_fma_cqh;    /* FMA completion queue handle */
+        RAP_PVOID               rad_rdma_cqh;   /* rdma completion queue handle */
         int                     rad_id;         /* device id */
         int                     rad_idx;        /* index in kra_devices */
         int                     rad_ready;      /* set by device callback */
@@ -147,6 +150,7 @@ typedef struct
         spinlock_t        kra_reaper_lock;      /* serialise */
         
         struct list_head  kra_connd_peers;      /* peers waiting for a connection */
+        struct list_head  kra_connd_acceptq;    /* accepted sockets to handshake */
         wait_queue_head_t kra_connd_waitq;      /* connection daemons sleep here */
         spinlock_t        kra_connd_lock;       /* serialise */
 
@@ -162,6 +166,12 @@ typedef struct
 #define RANAL_INIT_LIB             2
 #define RANAL_INIT_ALL             3
 
+typedef struct kra_acceptsock                   /* accepted socket queued for connd */
+{
+        struct list_head     ras_list;          /* queue for attention */
+        struct socket       *ras_sock;          /* the accepted socket */
+} kra_acceptsock_t;
+
 /************************************************************************
  * Wire message structs.  These are sent in sender's byte order
  * (i.e. receiver checks magic and flips if required).
@@ -172,7 +182,8 @@ typedef struct kra_connreq                      /* connection request/response *
         __u32             racr_magic;           /* I'm an ranal connreq */
         __u16             racr_version;         /* this is my version number */
         __u16             racr_devid;           /* sender's device ID */
-        __u64             racr_nid;             /* sender's NID */
+        __u64             racr_srcnid;          /* sender's NID */
+        __u64             racr_dstnid;          /* who sender expects to listen */
         __u64             racr_peerstamp;       /* sender's instance stamp */
         __u64             racr_connstamp;       /* sender's connection stamp */
         __u32             racr_timeout;         /* sender's timeout */
@@ -341,7 +352,7 @@ typedef struct kra_peer
         atomic_t            rap_refcount;       /* # users */
         int                 rap_persistence;    /* "known" peer refs */
         int                 rap_connecting;     /* connection forming */
-        unsigned long       rap_reconnect_time; /* CURRENT_TIME when reconnect OK */
+        unsigned long       rap_reconnect_time; /* CURRENT_SECONDS when reconnect OK */
         unsigned long       rap_reconnect_interval; /* exponential backoff */
 } kra_peer_t;
 
@@ -446,30 +457,25 @@ kranal_tx_mapped (kra_tx_t *tx)
                 tx->tx_buftype == RANAL_BUF_PHYS_MAPPED);
 }
 
-#if CONFIG_X86
 static inline __u64
 kranal_page2phys (struct page *p)
 {
-        __u64 page_number = p - mem_map;
-        
-        return (page_number << PAGE_SHIFT);
+        return page_to_phys(p);
 }
-#else
-# error "no page->phys"
-#endif
 
-extern int kranal_listener_procint(ctl_table *table, 
-                                   int write, struct file *filp, 
-                                   void *buffer, size_t *lenp);
-extern void kranal_update_reaper_timeout(long timeout);
+extern void kranal_free_acceptsock (kra_acceptsock_t *ras);
+extern int kranal_listener_procint (ctl_table *table, 
+                                    int write, struct file *filp, 
+                                    void *buffer, size_t *lenp);
+extern void kranal_update_reaper_timeout (long timeout);
 extern void kranal_tx_done (kra_tx_t *tx, int completion);
 extern void kranal_unlink_peer_locked (kra_peer_t *peer);
-extern void kranal_schedule_conn(kra_conn_t *conn);
+extern void kranal_schedule_conn (kra_conn_t *conn);
 extern kra_peer_t *kranal_create_peer (ptl_nid_t nid);
 extern kra_peer_t *kranal_find_peer_locked (ptl_nid_t nid);
 extern void kranal_post_fma (kra_conn_t *conn, kra_tx_t *tx);
 extern int kranal_del_peer (ptl_nid_t nid, int single_share);
-extern void kranal_device_callback(RAP_INT32 devid);
+extern void kranal_device_callback (RAP_INT32 devid, RAP_PVOID arg);
 extern int kranal_thread_start (int(*fn)(void *arg), void *arg);
 extern int kranal_connd (void *arg);
 extern int kranal_reaper (void *arg);
@@ -477,3 +483,4 @@ extern int kranal_scheduler (void *arg);
 extern void kranal_close_conn_locked (kra_conn_t *conn, int error);
 extern void kranal_terminate_conn_locked (kra_conn_t *conn);
 extern void kranal_connect (kra_peer_t *peer);
+extern int kranal_conn_handshake (struct socket *sock, kra_peer_t *peer);