[EMAIL PROTECTED] wrote:
+struct ietf_mpa_frame {
+       u8 key[IETF_MPA_KEY_SIZE];
+       u8 flags;
+       u8 rev;
+       u16 priv_data_len;
+       u8 priv_data[0];

use unsigned long, not u8, for proper alignment.

plus, as noted in other emails, you should not ever be using 'u8' for pointers to raw data. We use 'void *' for that in the kernel.



+/* CM context params */
+struct nes_cm_tcp_context {
+       u8   client;            
+
+       u32  loc_seq_num;       
+       u32  loc_ack_num;       
+       u32  rem_ack_num;       
+       u32  rcv_nxt;           
+
+       u32  loc_id;
+       u32  rem_id;
+
+       u32 snd_wnd;
+       u32 max_snd_wnd;
+
+       u32 rcv_wnd;
+       u32 mss;
+       u8  snd_wscale;
+       u8  rcv_wscale;
+
+       struct nes_cm_tsa_context tsa_cntxt;    
+       struct timeval sent_ts;         
+};
+
+struct nes_cm_listener {
+       struct list_head list;
+       u64 session_id; 
+       struct nes_cm_core *core_p;
+       u8 loc_mac[ETH_ALEN];
+       nes_addr_t loc_addr;
+       u16 loc_port;
+       void *cm_id;
+       enum nes_cm_conn_type conn_type;
+       atomic_t ref_count;
+};
+
+/* per connection node and node state information */
+struct nes_cm_node {
+       u64 session_id; 
+       u32 hashkey;    
+
+       nes_addr_t loc_addr, rem_addr;
+       u16 loc_port, rem_port;
+
+       u8 loc_mac[ETH_ALEN];   
+       u8 rem_mac[ETH_ALEN];   
+
+       enum nes_cm_node_state state;   
+       struct nes_cm_tcp_context tcp_cntxt;    
+       struct nes_cm_core *core_p;
+       struct sk_buff_head resend_list;
+       struct nes_cm_node *listener;
+       atomic_t ref_count;                             
+       struct net_device *netdev_p;
+
+       struct nes_cm_node  *loopbackpartner ;
+       struct list_head retrans_list;
+       spinlock_t retrans_list_lock;
+       struct list_head recv_list;
+       spinlock_t recv_list_lock;
+       
+       int send_write0;
+       union {
+               struct ietf_mpa_frame mpa_frame_p;      
+               u8 mpa_frame_b[NES_CM_DEFAULT_MTU];
+       };
+       u16 mpa_frame_size;
+       void *cm_id;
+       struct list_head list;
+       int accelerated;
+       struct nes_cm_listener *listen_p;
+       enum nes_cm_conn_type conn_type;

use tabs to make your structs reviewable, like you did with the context params


+/* structure for client or CM to fill when making CM api calls. */
+/*     - only need to set relevant data, based on op. */
+struct nes_cm_info {
+       union {
+               struct iw_cm_id *cm_id;
+               struct net_device *netdev;
+       };
+
+       u16 loc_port;
+       u16 rem_port;
+       nes_addr_t loc_addr;
+       nes_addr_t rem_addr;
+
+       enum nes_cm_conn_type  conn_type;
+};
+
+/* CM event codes */
+enum  nes_cm_event_type {
+       NES_CM_EVENT_UNKNOWN,
+       NES_CM_EVENT_ESTABLISHED,
+       NES_CM_EVENT_MPA_REQ,
+       NES_CM_EVENT_MPA_CONNECT,
+       NES_CM_EVENT_MPA_ACCEPT,
+       NES_CM_EVENT_MPA_ESTABLISHED,
+       NES_CM_EVENT_CONNECTED,
+       NES_CM_EVENT_CLOSED,
+       NES_CM_EVENT_RESET,
+       NES_CM_EVENT_DROPPED_PKT,
+       NES_CM_EVENT_CLOSE_IMMED,
+       NES_CM_EVENT_CLOSE_HARD,
+       NES_CM_EVENT_CLOSE_CLEAN,
+       NES_CM_EVENT_ABORTED,
+       NES_CM_EVENT_SEND_FIRST
+};
+
+/* event to post to CM event handler */
+struct nes_cm_event {
+       enum nes_cm_event_type type;
+
+       struct nes_cm_info cm_info;
+       struct work_struct event_work;
+       struct nes_cm_node *node_p;
+};
+
+struct nes_cm_core {
+       enum nes_cm_node_state state;   
+       atomic_t session_id;                    
+
+       atomic_t listen_node_cnt;                       
+       struct nes_cm_node listen_list; 
+       spinlock_t listen_list_lock;    
+
+       u32 mtu;                                                
+       u32 free_tx_pkt_max;
+       u32 rx_pkt_posted;                              
+       struct sk_buff_head tx_free_list;       
+       atomic_t ht_node_cnt;                   
+       struct list_head connected_nodes;
+       /* struct list_head hashtable[NES_CM_HASHTABLE_SIZE]; */
+       spinlock_t ht_lock;                             
+
+       struct timer_list tcp_timer;    
+
+       struct nes_cm_ops *api;                 
+
+       int (*post_event)(struct nes_cm_event *event_p);
+       atomic_t events_posted;
+       struct workqueue_struct *event_wq;
+       struct workqueue_struct *disconn_wq;
+
+       atomic_t node_cnt;
+       u64 aborted_connects;
+       u32 options;
+
+       struct nes_cm_node *current_listen_node;
+};
+
+
+#define NES_CM_SET_PKT_SIZE        (1 << 1)
+#define NES_CM_SET_FREE_PKT_Q_SIZE (1 << 2)
+
+/* CM ops/API for client interface */
+struct nes_cm_ops {
+       int (*accelerated)(struct nes_cm_core *cm_core_p,
+                       struct nes_cm_node *node_p);
+       struct nes_cm_listener * (*listen)(struct nes_cm_core *cm_core_p,
+                       struct nes_vnic *nesvnic, struct nes_cm_info *nfo_p);
+       int (*stop_listener)(struct nes_cm_core *core_p,
+                       struct nes_cm_listener *cm_core_p);
+       struct nes_cm_node * (*connect)(struct nes_cm_core *cm_core_p,
+                       struct nes_vnic *nesvnic, struct ietf_mpa_frame 
*mpa_frame_p,
+                       struct nes_cm_info *nfo_p);
+       int (*close)(struct nes_cm_core *cm_core_p, struct nes_cm_node *node_p);
+       int (*accept)(struct nes_cm_core *cm_core_p, struct ietf_mpa_frame 
*mpa_frame_p,
+                       struct nes_cm_node *node_p);
+       int (*reject)(struct nes_cm_core *cm_core_p, struct ietf_mpa_frame 
*mpa_frame_p,
+                       struct nes_cm_node *node_p);
+       int (*recv_pkt)(struct nes_cm_core *cm_core_p, struct nes_vnic *nesvnic,
+                       struct sk_buff *skb_p);
+       int (*destroy_cm_core)(struct nes_cm_core *core_p);
+       int (*get)(struct nes_cm_core *cm_core_p);
+       int (*set)(struct nes_cm_core *core_p, u32 type, u32 value);
+};

how many users of this interface will be in the kernel, assuming your submission is accepted?

-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to