Index: D:/projinf1/trunk/core/al/kernel/al_cm_cep.c
===================================================================
--- D:/projinf1/trunk/core/al/kernel/al_cm_cep.c	(revision 6917)
+++ D:/projinf1/trunk/core/al/kernel/al_cm_cep.c	(revision 6918)
@@ -4335,6 +4335,7 @@
 		OUT			kcep_av_t* const			p_av )
 {
 	cep_agent_t*		p_port_cep;
+	int force_grh;
 
 	AL_ENTER( AL_DBG_CM );
 
@@ -4364,7 +4365,9 @@
 	p_av->attr.grh.src_gid = p_path->sgid;
 	p_av->attr.grh.dest_gid = p_path->dgid;
 
-	p_av->attr.grh_valid = !ib_gid_is_link_local( &p_path->dgid );
+	force_grh = p_port_cep->h_ca->obj.p_ci_ca->verbs.rdma_port_get_transport(p_port_cep-> h_ca->obj.p_ci_ca->h_ci_ca, p_port_cep->port_num) == RDMA_TRANSPORT_RDMAOE;
+	p_av->attr.grh_valid = force_grh || (!ib_gid_is_link_local( &p_path->dgid )) ||
+		       (ib_path_rec_hop_limit(p_path) > 1);
 
 	p_av->attr.static_rate = ib_path_rec_rate( p_path );
 	p_av->attr.path_bits = (uint8_t)(p_path->slid - p_port_cep->base_lid);
Index: D:/projinf1/trunk/inc/iba/ib_ci.h
===================================================================
--- D:/projinf1/trunk/inc/iba/ib_ci.h	(revision 6917)
+++ D:/projinf1/trunk/inc/iba/ib_ci.h	(revision 6918)
@@ -74,7 +74,7 @@
  * definition.
  */
 #define VERBS_MAJOR_VER			(0x0002)
-#define VERBS_MINOR_VER			(0x0001)
+#define VERBS_MINOR_VER			(0x0002)
 
 #define VERBS_VERSION			(((VERBS_MAJOR_VER) << 16) | (VERBS_MINOR_VER))
 #define MK_VERBS_VERSION(maj,min)	((((maj) & 0xFFFF) << 16) | \
@@ -2935,7 +2935,28 @@
 
 
 
+typedef enum rdma_transport_type
+(*ci_rdma_port_get_transport) (
+	IN			const	ib_ca_handle_t		h_ca,
+	IN			const 	uint8_t				port_num );
+/*
+* DESCRIPTION
+*	This routine Release page list for fast memory registration
+*
+* PARAMETERS
+*	h_ca
+*		[in] Handle to HCA
+*	port_num
+*		[in] port number to which this request is directed is to be sent.
+*	
+* RETURN VALUE
+*		rdma_transport_type identifying the type of the card
+* SEE ALSO
+*
+******
+*/
 
+
 #define	MAX_LIB_NAME		32
 
 #ifdef CL_KERNEL
@@ -3094,6 +3115,9 @@
 	ci_alloc_fast_reg_page_list	alloc_fast_reg_page_list;
 	ci_free_fast_reg_page_list	free_fast_reg_page_list;
 
+	/* 2.2 verbs */
+	ci_rdma_port_get_transport rdma_port_get_transport;
+
 } ci_interface_t;
 /********/
 
Index: D:/projinf1/trunk/hw/mlx4/kernel/hca/data.h
===================================================================
--- D:/projinf1/trunk/hw/mlx4/kernel/hca/data.h	(revision 6917)
+++ D:/projinf1/trunk/hw/mlx4/kernel/hca/data.h	(revision 6918)
@@ -327,10 +327,6 @@
 	IN	OUT			ci_interface_t				*p_interface );
 
 void
-mlnx_ca_if_livefish(
-	IN	OUT			ci_interface_t				*p_interface );
-
-void
 mlnx_mr_if_livefish(
 	IN	OUT			ci_interface_t				*p_interface );
 
Index: D:/projinf1/trunk/hw/mlx4/kernel/hca/ca.c
===================================================================
--- D:/projinf1/trunk/hw/mlx4/kernel/hca/ca.c	(revision 6917)
+++ D:/projinf1/trunk/hw/mlx4/kernel/hca/ca.c	(revision 6918)
@@ -407,8 +407,25 @@
 	return IB_SUCCESS;
 }
 
+enum rdma_transport_type
+mlnx_port_get_transport (
+	IN		const	ib_ca_handle_t	h_ca,
+	IN	const uint8_t				port_num )
+{
+	mlnx_hca_t *p_hca = (mlnx_hca_t *)h_ca;
+	struct ib_device *p_ibdev = hca2ibdev(p_hca);
+
+	HCA_ENTER(HCA_DBG_SHIM);
 	
+	ASSERT (port_num >= start_port(p_ibdev) && port_num <= end_port(p_ibdev));
 
+	HCA_EXIT(HCA_DBG_SHIM);
+
+	return p_ibdev->get_port_transport(p_ibdev, port_num);
+
+
+}
+
 void
 mlnx_ca_if(
 	IN	OUT			ci_interface_t				*p_interface )
@@ -419,14 +436,7 @@
 	p_interface->close_ca = mlnx_close_ca;
 	p_interface->register_event_handler = mlnx_register_event_handler;
 	p_interface->unregister_event_handler = mlnx_unregister_event_handler;
+	p_interface->rdma_port_get_transport = mlnx_port_get_transport;
+	
 }
 
-void
-mlnx_ca_if_livefish(
-	IN	OUT			ci_interface_t				*p_interface )
-{
-	p_interface->open_ca = mlnx_open_ca;
-	p_interface->query_ca = mlnx_query_ca;
-	p_interface->close_ca = mlnx_close_ca;
-}
-
Index: D:/projinf1/trunk/hw/mthca/kernel/hca_verbs.c
===================================================================
--- D:/projinf1/trunk/hw/mthca/kernel/hca_verbs.c	(revision 6917)
+++ D:/projinf1/trunk/hw/mthca/kernel/hca_verbs.c	(revision 6918)
@@ -1631,6 +1631,16 @@
 }
 	
 
+
+enum rdma_transport_type
+mlnx_port_get_transport (
+	IN		const	ib_ca_handle_t	h_ca,
+	IN	const uint8_t				port_num )
+{
+	UNREFERENCED_PARAMETER(h_ca);
+	UNREFERENCED_PARAMETER(port_num);
+	return RDMA_TRANSPORT_IB;
+}
 void
 setup_ci_interface(
 	IN		const	ib_net64_t					ca_guid,
@@ -1686,6 +1696,7 @@
 	p_interface->destroy_cq = mlnx_destroy_cq;
 
 	p_interface->local_mad = mlnx_local_mad;
+	p_interface->rdma_port_get_transport = mlnx_port_get_transport;
 	
 
 	mlnx_memory_if(p_interface);
