File tree Expand file tree Collapse file tree 1 file changed +16
-0
lines changed 
vm/devices/net/netvsp/src Expand file tree Collapse file tree 1 file changed +16
-0
lines changed Original file line number Diff line number Diff line change @@ -1891,6 +1891,8 @@ enum WorkerError {
18911891    RndisMessageTooSmall , 
18921892    #[ error( "unsupported rndis behavior" ) ]  
18931893    UnsupportedRndisBehavior , 
1894+     #[ error( "invalid lso packet" ) ]  
1895+     InvalidLsoPacket ( & ' static  str ) , 
18941896    #[ error( "vmbus queue error" ) ]  
18951897    Queue ( #[ from]   queue:: Error ) , 
18961898    #[ error( "too many control messages" ) ]  
@@ -2467,6 +2469,20 @@ impl<T: RingMem> NetChannel<T> {
24672469            } ) ; 
24682470        } 
24692471
2472+         if  metadata. offload_tcp_segmentation  { 
2473+             if  segments. len ( )  < 2  { 
2474+                 return  Err ( WorkerError :: InvalidLsoPacket ( 
2475+                     "LSO requires at least two SGEs" , 
2476+                 ) ) ; 
2477+             } 
2478+             let  first_segment_size = segments. first ( ) . unwrap ( ) . len ; 
2479+             if  first_segment_size > 256  { 
2480+                 return  Err ( WorkerError :: InvalidLsoPacket ( 
2481+                     "LSO requires first SGE to be <= 256 bytes" , 
2482+                 ) ) ; 
2483+             } 
2484+         } 
2485+ 
24702486        metadata. segment_count  = segments. len ( )  - start; 
24712487
24722488        stats. tx_packets . increment ( ) ; 
 
 
   
 
     
   
   
          
    
    
     
    
      
     
     
    You can’t perform that action at this time.
  
 
    
  
    
      
        
     
       
      
     
   
 
    
    
  
 
  
 
     
    
0 commit comments