|  | @@ -153,8 +153,10 @@ int fc_els_tx ( struct fc_els *els, const void *data, size_t len ) {
 | 
		
	
		
			
			| 153 | 153 |   */
 | 
		
	
		
			
			| 154 | 154 |  static int fc_els_rx ( struct fc_els *els,
 | 
		
	
		
			
			| 155 | 155 |  		       struct io_buffer *iobuf,
 | 
		
	
		
			
			| 156 |  | -		       struct xfer_metadata *meta __unused ) {
 | 
		
	
		
			
			|  | 156 | +		       struct xfer_metadata *meta ) {
 | 
		
	
		
			
			| 157 | 157 |  	struct fc_els_frame_common *frame = iobuf->data;
 | 
		
	
		
			
			|  | 158 | +	struct sockaddr_fc *src = ( ( struct sockaddr_fc * ) meta->src );
 | 
		
	
		
			
			|  | 159 | +	struct sockaddr_fc *dest = ( ( struct sockaddr_fc * ) meta->dest );
 | 
		
	
		
			
			| 158 | 160 |  	size_t len = iob_len ( iobuf );
 | 
		
	
		
			
			| 159 | 161 |  	int ( * rx ) ( struct fc_els *els, const void *data, size_t len );
 | 
		
	
		
			
			| 160 | 162 |  	int rc;
 | 
		
	
	
		
			
			|  | @@ -167,6 +169,18 @@ static int fc_els_rx ( struct fc_els *els,
 | 
		
	
		
			
			| 167 | 169 |  		rc = -EINVAL;
 | 
		
	
		
			
			| 168 | 170 |  		goto done;
 | 
		
	
		
			
			| 169 | 171 |  	}
 | 
		
	
		
			
			|  | 172 | +	if ( ! src ) {
 | 
		
	
		
			
			|  | 173 | +		DBGC ( els, FCELS_FMT " received frame missing source "
 | 
		
	
		
			
			|  | 174 | +		       "address:\n", FCELS_ARGS ( els ) );
 | 
		
	
		
			
			|  | 175 | +		rc = -EINVAL;
 | 
		
	
		
			
			|  | 176 | +		goto done;
 | 
		
	
		
			
			|  | 177 | +	}
 | 
		
	
		
			
			|  | 178 | +	if ( ! dest ) {
 | 
		
	
		
			
			|  | 179 | +		DBGC ( els, FCELS_FMT " received frame missing destination "
 | 
		
	
		
			
			|  | 180 | +		       "address:\n", FCELS_ARGS ( els ) );
 | 
		
	
		
			
			|  | 181 | +		rc = -EINVAL;
 | 
		
	
		
			
			|  | 182 | +		goto done;
 | 
		
	
		
			
			|  | 183 | +	}
 | 
		
	
		
			
			| 170 | 184 |  
 | 
		
	
		
			
			| 171 | 185 |  	/* Check for rejection responses */
 | 
		
	
		
			
			| 172 | 186 |  	if ( fc_els_is_request ( els ) &&
 | 
		
	
	
		
			
			|  | @@ -177,6 +191,11 @@ static int fc_els_rx ( struct fc_els *els,
 | 
		
	
		
			
			| 177 | 191 |  		goto done;
 | 
		
	
		
			
			| 178 | 192 |  	}
 | 
		
	
		
			
			| 179 | 193 |  
 | 
		
	
		
			
			|  | 194 | +	/* Update port IDs */
 | 
		
	
		
			
			|  | 195 | +	memcpy ( &els->port_id, &dest->sfc_port_id, sizeof ( els->port_id ) );
 | 
		
	
		
			
			|  | 196 | +	memcpy ( &els->peer_port_id, &src->sfc_port_id,
 | 
		
	
		
			
			|  | 197 | +		 sizeof ( els->peer_port_id ) );
 | 
		
	
		
			
			|  | 198 | +
 | 
		
	
		
			
			| 180 | 199 |  	/* Determine handler, if necessary */
 | 
		
	
		
			
			| 181 | 200 |  	if ( ! els->handler )
 | 
		
	
		
			
			| 182 | 201 |  		els->handler = fc_els_detect ( els, frame, len );
 | 
		
	
	
		
			
			|  | @@ -513,8 +532,8 @@ static int fc_els_flogi_rx ( struct fc_els *els, const void *data,
 | 
		
	
		
			
			| 513 | 532 |  	DBGC ( els, FCELS_FMT " has port %s\n", FCELS_ARGS ( els ),
 | 
		
	
		
			
			| 514 | 533 |  	       fc_ntoa ( &flogi->port_wwn ) );
 | 
		
	
		
			
			| 515 | 534 |  	if ( has_fabric ) {
 | 
		
	
		
			
			| 516 |  | -		DBGC ( els, FCELS_FMT " has fabric with local ID %s\n",
 | 
		
	
		
			
			| 517 |  | -		       FCELS_ARGS ( els ), fc_id_ntoa ( &els->port_id ) );
 | 
		
	
		
			
			|  | 535 | +		DBGC ( els, FCELS_FMT " has fabric with", FCELS_ARGS ( els ) );
 | 
		
	
		
			
			|  | 536 | +		DBGC ( els, " local ID %s\n", fc_id_ntoa ( &els->port_id ) );
 | 
		
	
		
			
			| 518 | 537 |  	} else {
 | 
		
	
		
			
			| 519 | 538 |  		DBGC ( els, FCELS_FMT " has point-to-point link\n",
 | 
		
	
		
			
			| 520 | 539 |  		       FCELS_ARGS ( els ) );
 |