📄 ipoib.h
字号:
struct ipoib_neigh { struct ipoib_ah *ah;#ifdef CONFIG_INFINIBAND_IPOIB_CM struct ipoib_cm_tx *cm;#endif union ib_gid dgid; struct sk_buff_head queue; struct neighbour *neighbour; struct net_device *dev; struct list_head list;};/* * We stash a pointer to our private neighbour information after our * hardware address in neigh->ha. The ALIGN() expression here makes * sure that this pointer is stored aligned so that an unaligned * load is not needed to dereference it. */static inline struct ipoib_neigh **to_ipoib_neigh(struct neighbour *neigh){ return (void*) neigh + ALIGN(offsetof(struct neighbour, ha) + INFINIBAND_ALEN, sizeof(void *));}struct ipoib_neigh *ipoib_neigh_alloc(struct neighbour *neigh, struct net_device *dev);void ipoib_neigh_free(struct net_device *dev, struct ipoib_neigh *neigh);extern struct workqueue_struct *ipoib_workqueue;/* functions */int ipoib_poll(struct napi_struct *napi, int budget);void ipoib_ib_completion(struct ib_cq *cq, void *dev_ptr);struct ipoib_ah *ipoib_create_ah(struct net_device *dev, struct ib_pd *pd, struct ib_ah_attr *attr);void ipoib_free_ah(struct kref *kref);static inline void ipoib_put_ah(struct ipoib_ah *ah){ kref_put(&ah->ref, ipoib_free_ah);}int ipoib_open(struct net_device *dev);int ipoib_add_pkey_attr(struct net_device *dev);int ipoib_add_umcast_attr(struct net_device *dev);void ipoib_send(struct net_device *dev, struct sk_buff *skb, struct ipoib_ah *address, u32 qpn);void ipoib_reap_ah(struct work_struct *work);void ipoib_flush_paths(struct net_device *dev);struct ipoib_dev_priv *ipoib_intf_alloc(const char *format);int ipoib_ib_dev_init(struct net_device *dev, struct ib_device *ca, int port);void ipoib_ib_dev_flush(struct work_struct *work);void ipoib_pkey_event(struct work_struct *work);void ipoib_ib_dev_cleanup(struct net_device *dev);int ipoib_ib_dev_open(struct net_device *dev);int ipoib_ib_dev_up(struct net_device *dev);int ipoib_ib_dev_down(struct net_device *dev, int flush);int ipoib_ib_dev_stop(struct net_device *dev, int flush);int ipoib_dev_init(struct net_device *dev, struct ib_device *ca, int port);void ipoib_dev_cleanup(struct net_device *dev);void ipoib_mcast_join_task(struct work_struct *work);void ipoib_mcast_send(struct net_device *dev, void *mgid, struct sk_buff *skb);void ipoib_mcast_restart_task(struct work_struct *work);int ipoib_mcast_start_thread(struct net_device *dev);int ipoib_mcast_stop_thread(struct net_device *dev, int flush);void ipoib_mcast_dev_down(struct net_device *dev);void ipoib_mcast_dev_flush(struct net_device *dev);#ifdef CONFIG_INFINIBAND_IPOIB_DEBUGstruct ipoib_mcast_iter *ipoib_mcast_iter_init(struct net_device *dev);int ipoib_mcast_iter_next(struct ipoib_mcast_iter *iter);void ipoib_mcast_iter_read(struct ipoib_mcast_iter *iter, union ib_gid *gid, unsigned long *created, unsigned int *queuelen, unsigned int *complete, unsigned int *send_only);struct ipoib_path_iter *ipoib_path_iter_init(struct net_device *dev);int ipoib_path_iter_next(struct ipoib_path_iter *iter);void ipoib_path_iter_read(struct ipoib_path_iter *iter, struct ipoib_path *path);#endifint ipoib_mcast_attach(struct net_device *dev, u16 mlid, union ib_gid *mgid);int ipoib_mcast_detach(struct net_device *dev, u16 mlid, union ib_gid *mgid);int ipoib_init_qp(struct net_device *dev);int ipoib_transport_dev_init(struct net_device *dev, struct ib_device *ca);void ipoib_transport_dev_cleanup(struct net_device *dev);void ipoib_event(struct ib_event_handler *handler, struct ib_event *record);int ipoib_vlan_add(struct net_device *pdev, unsigned short pkey);int ipoib_vlan_delete(struct net_device *pdev, unsigned short pkey);void ipoib_pkey_poll(struct work_struct *work);int ipoib_pkey_dev_delay_open(struct net_device *dev);void ipoib_drain_cq(struct net_device *dev);#ifdef CONFIG_INFINIBAND_IPOIB_CM#define IPOIB_FLAGS_RC 0x80#define IPOIB_FLAGS_UC 0x40/* We don't support UC connections at the moment */#define IPOIB_CM_SUPPORTED(ha) (ha[0] & (IPOIB_FLAGS_RC))static inline int ipoib_cm_admin_enabled(struct net_device *dev){ struct ipoib_dev_priv *priv = netdev_priv(dev); return IPOIB_CM_SUPPORTED(dev->dev_addr) && test_bit(IPOIB_FLAG_ADMIN_CM, &priv->flags);}static inline int ipoib_cm_enabled(struct net_device *dev, struct neighbour *n){ struct ipoib_dev_priv *priv = netdev_priv(dev); return IPOIB_CM_SUPPORTED(n->ha) && test_bit(IPOIB_FLAG_ADMIN_CM, &priv->flags);}static inline int ipoib_cm_up(struct ipoib_neigh *neigh){ return test_bit(IPOIB_FLAG_OPER_UP, &neigh->cm->flags);}static inline struct ipoib_cm_tx *ipoib_cm_get(struct ipoib_neigh *neigh){ return neigh->cm;}static inline void ipoib_cm_set(struct ipoib_neigh *neigh, struct ipoib_cm_tx *tx){ neigh->cm = tx;}void ipoib_cm_send(struct net_device *dev, struct sk_buff *skb, struct ipoib_cm_tx *tx);int ipoib_cm_dev_open(struct net_device *dev);void ipoib_cm_dev_stop(struct net_device *dev);int ipoib_cm_dev_init(struct net_device *dev);int ipoib_cm_add_mode_attr(struct net_device *dev);void ipoib_cm_dev_cleanup(struct net_device *dev);struct ipoib_cm_tx *ipoib_cm_create_tx(struct net_device *dev, struct ipoib_path *path, struct ipoib_neigh *neigh);void ipoib_cm_destroy_tx(struct ipoib_cm_tx *tx);void ipoib_cm_skb_too_long(struct net_device* dev, struct sk_buff *skb, unsigned int mtu);void ipoib_cm_handle_rx_wc(struct net_device *dev, struct ib_wc *wc);void ipoib_cm_handle_tx_wc(struct net_device *dev, struct ib_wc *wc);#elsestruct ipoib_cm_tx;static inline int ipoib_cm_admin_enabled(struct net_device *dev){ return 0;}static inline int ipoib_cm_enabled(struct net_device *dev, struct neighbour *n){ return 0;}static inline int ipoib_cm_up(struct ipoib_neigh *neigh){ return 0;}static inline struct ipoib_cm_tx *ipoib_cm_get(struct ipoib_neigh *neigh){ return NULL;}static inline void ipoib_cm_set(struct ipoib_neigh *neigh, struct ipoib_cm_tx *tx){}static inlinevoid ipoib_cm_send(struct net_device *dev, struct sk_buff *skb, struct ipoib_cm_tx *tx){ return;}static inlineint ipoib_cm_dev_open(struct net_device *dev){ return 0;}static inlinevoid ipoib_cm_dev_stop(struct net_device *dev){ return;}static inlineint ipoib_cm_dev_init(struct net_device *dev){ return -ENOSYS;}static inlinevoid ipoib_cm_dev_cleanup(struct net_device *dev){ return;}static inlinestruct ipoib_cm_tx *ipoib_cm_create_tx(struct net_device *dev, struct ipoib_path *path, struct ipoib_neigh *neigh){ return NULL;}static inlinevoid ipoib_cm_destroy_tx(struct ipoib_cm_tx *tx){ return;}static inlineint ipoib_cm_add_mode_attr(struct net_device *dev){ return 0;}static inline void ipoib_cm_skb_too_long(struct net_device* dev, struct sk_buff *skb, unsigned int mtu){ dev_kfree_skb_any(skb);}static inline void ipoib_cm_handle_rx_wc(struct net_device *dev, struct ib_wc *wc){}static inline void ipoib_cm_handle_tx_wc(struct net_device *dev, struct ib_wc *wc){}#endif#ifdef CONFIG_INFINIBAND_IPOIB_DEBUGvoid ipoib_create_debug_files(struct net_device *dev);void ipoib_delete_debug_files(struct net_device *dev);int ipoib_register_debugfs(void);void ipoib_unregister_debugfs(void);#elsestatic inline void ipoib_create_debug_files(struct net_device *dev) { }static inline void ipoib_delete_debug_files(struct net_device *dev) { }static inline int ipoib_register_debugfs(void) { return 0; }static inline void ipoib_unregister_debugfs(void) { }#endif#define ipoib_printk(level, priv, format, arg...) \ printk(level "%s: " format, ((struct ipoib_dev_priv *) priv)->dev->name , ## arg)#define ipoib_warn(priv, format, arg...) \ ipoib_printk(KERN_WARNING, priv, format , ## arg)extern int ipoib_sendq_size;extern int ipoib_recvq_size;extern struct ib_sa_client ipoib_sa_client;#ifdef CONFIG_INFINIBAND_IPOIB_DEBUGextern int ipoib_debug_level;#define ipoib_dbg(priv, format, arg...) \ do { \ if (ipoib_debug_level > 0) \ ipoib_printk(KERN_DEBUG, priv, format , ## arg); \ } while (0)#define ipoib_dbg_mcast(priv, format, arg...) \ do { \ if (mcast_debug_level > 0) \ ipoib_printk(KERN_DEBUG, priv, format , ## arg); \ } while (0)#else /* CONFIG_INFINIBAND_IPOIB_DEBUG */#define ipoib_dbg(priv, format, arg...) \ do { (void) (priv); } while (0)#define ipoib_dbg_mcast(priv, format, arg...) \ do { (void) (priv); } while (0)#endif /* CONFIG_INFINIBAND_IPOIB_DEBUG */#ifdef CONFIG_INFINIBAND_IPOIB_DEBUG_DATA#define ipoib_dbg_data(priv, format, arg...) \ do { \ if (data_debug_level > 0) \ ipoib_printk(KERN_DEBUG, priv, format , ## arg); \ } while (0)#else /* CONFIG_INFINIBAND_IPOIB_DEBUG_DATA */#define ipoib_dbg_data(priv, format, arg...) \ do { (void) (priv); } while (0)#endif /* CONFIG_INFINIBAND_IPOIB_DEBUG_DATA */#define IPOIB_GID_FMT "%2.2x%2.2x:%2.2x%2.2x:%2.2x%2.2x:%2.2x%2.2x:" \ "%2.2x%2.2x:%2.2x%2.2x:%2.2x%2.2x:%2.2x%2.2x"#define IPOIB_GID_RAW_ARG(gid) ((u8 *)(gid))[0], \ ((u8 *)(gid))[1], \ ((u8 *)(gid))[2], \ ((u8 *)(gid))[3], \ ((u8 *)(gid))[4], \ ((u8 *)(gid))[5], \ ((u8 *)(gid))[6], \ ((u8 *)(gid))[7], \ ((u8 *)(gid))[8], \ ((u8 *)(gid))[9], \ ((u8 *)(gid))[10],\ ((u8 *)(gid))[11],\ ((u8 *)(gid))[12],\ ((u8 *)(gid))[13],\ ((u8 *)(gid))[14],\ ((u8 *)(gid))[15]#define IPOIB_GID_ARG(gid) IPOIB_GID_RAW_ARG((gid).raw)#define IPOIB_QPN(ha) (be32_to_cpup((__be32 *) ha) & 0xffffff)#endif /* _IPOIB_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -