IB/core: Add raw packet QP type
IB_QPT_RAW_PACKET allows applications to build a complete packet, including L2 headers, when sending; on the receive side, the HW will not strip any headers. This QP type is designed for userspace direct access to Ethernet; for example by applications that do TCP/IP themselves. Only processes with the NET_RAW capability are allowed to create raw packet QPs (the name "raw packet QP" is supposed to suggest an analogy to AF_PACKET / SOL_RAW sockets). Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com> Reviewed-by: Sean Hefty <sean.hefty@intel.com> Signed-off-by: Roland Dreier <roland@purestorage.com>
This commit is contained in:
		
					parent
					
						
							
								d48b97b403
							
						
					
				
			
			
				commit
				
					
						c938a616aa
					
				
			
		
					 3 changed files with 5 additions and 1 deletions
				
			
		| 
						 | 
				
			
			@ -1399,6 +1399,9 @@ ssize_t ib_uverbs_create_qp(struct ib_uverbs_file *file,
 | 
			
		|||
	if (copy_from_user(&cmd, buf, sizeof cmd))
 | 
			
		||||
		return -EFAULT;
 | 
			
		||||
 | 
			
		||||
	if (cmd.qp_type == IB_QPT_RAW_PACKET && !capable(CAP_NET_RAW))
 | 
			
		||||
		return -EPERM;
 | 
			
		||||
 | 
			
		||||
	INIT_UDATA(&udata, buf + sizeof cmd,
 | 
			
		||||
		   (unsigned long) cmd.response + sizeof resp,
 | 
			
		||||
		   in_len - sizeof cmd, out_len - sizeof resp);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -479,6 +479,7 @@ static const struct {
 | 
			
		|||
				[IB_QPT_UD]  = (IB_QP_PKEY_INDEX		|
 | 
			
		||||
						IB_QP_PORT			|
 | 
			
		||||
						IB_QP_QKEY),
 | 
			
		||||
				[IB_QPT_RAW_PACKET] = IB_QP_PORT,
 | 
			
		||||
				[IB_QPT_UC]  = (IB_QP_PKEY_INDEX		|
 | 
			
		||||
						IB_QP_PORT			|
 | 
			
		||||
						IB_QP_ACCESS_FLAGS),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -605,7 +605,7 @@ enum ib_qp_type {
 | 
			
		|||
	IB_QPT_UD,
 | 
			
		||||
	IB_QPT_RAW_IPV6,
 | 
			
		||||
	IB_QPT_RAW_ETHERTYPE,
 | 
			
		||||
	/* Save 8 for RAW_PACKET */
 | 
			
		||||
	IB_QPT_RAW_PACKET = 8,
 | 
			
		||||
	IB_QPT_XRC_INI = 9,
 | 
			
		||||
	IB_QPT_XRC_TGT,
 | 
			
		||||
	IB_QPT_MAX
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue