if (pkt->ip_summed != CHECKSUM_UNNECESSARY) { if ((unsigned short) csum_fold(skb_checksum(pkt, 0, pkt->len, pkt->csum))) { kfree_skb(pkt); rxrpc_krxiod_queue_transport(trans); _leave(" CSUM failed"); return; } 
if (skb_checksum_complete(pkt)) { kfree_skb(pkt); rxrpc_krxiod_queue_transport(trans); _leave(" CSUM failed"); return; 
void rxrpc_trans_receive_packet(struct rxrpc_transport *trans){	struct rxrpc_message *msg;	struct rxrpc_peer *peer;	struct sk_buff *pkt;	int ret;	__be32 addr;	__be16 port;	LIST_HEAD(msgq);	_enter("%p{%d}", trans, trans->port);	for (;;) {		/* deal with outstanting errors first */		if (trans->error_rcvd)			rxrpc_trans_receive_error_report(trans);		/* attempt to receive a packet */		pkt = skb_recv_datagram(trans->socket->sk, 0, 1, &ret);		if (!pkt) {			if (ret == -EAGAIN) {				_leave(" EAGAIN");				return;			}			/* an icmp error may have occurred */			rxrpc_krxiod_queue_transport(trans);			_leave(" error %d\n", ret);			return;		}		/* we'll probably need to checksum it (didn't call		 * sock_recvmsg) */		if (pkt->ip_summed != CHECKSUM_UNNECESSARY) {			if ((unsigned short)			    csum_fold(skb_checksum(pkt, 0, pkt->len,						   pkt->csum))) {				kfree_skb(pkt);				rxrpc_krxiod_queue_transport(trans);				_leave(" CSUM failed");				return;			}		}		addr = pkt->nh.iph->saddr;		port = pkt->h.uh->source;		_net("Rx Received UDP packet from %08x:%04hu",		     ntohl(addr), ntohs(port));		/* unmarshall the Rx parameters and split jumbo packets */		ret = rxrpc_incoming_msg(trans, pkt, &msgq);		if (ret < 0) {			kfree_skb(pkt);			rxrpc_krxiod_queue_transport(trans);			_leave(" bad packet");			return;		}		BUG_ON(list_empty(&msgq));		msg = list_entry(msgq.next, struct rxrpc_message, link);		/* locate the record for the peer from which it		 * originated */		ret = rxrpc_peer_lookup(trans, addr, &peer);		if (ret < 0) {			kdebug("Rx No connections from that peer");			rxrpc_trans_immediate_abort(trans, msg, -EINVAL);			goto finished_msg;		}		/* try and find a matching connection */		ret = rxrpc_connection_lookup(peer, msg, &msg->conn);		if (ret < 0) {			kdebug("Rx Unknown Connection");			rxrpc_trans_immediate_abort(trans, msg, -EINVAL);			rxrpc_put_peer(peer);			goto finished_msg;		}		rxrpc_put_peer(peer);		/* deal with the first packet of a new call */		if (msg->hdr.flags & RXRPC_CLIENT_INITIATED &&		    msg->hdr.type == RXRPC_PACKET_TYPE_DATA &&		    ntohl(msg->hdr.seq) == 1		    ) {			_debug("Rx New server call");			rxrpc_trans_receive_new_call(trans, &msgq);			goto finished_msg;		}		/* deal with subsequent packet(s) of call */		_debug("Rx Call packet");		while (!list_empty(&msgq)) {			msg = list_entry(msgq.next, struct rxrpc_message, link);			list_del_init(&msg->link);			ret = rxrpc_conn_receive_call_packet(msg->conn, NULL, msg);			if (ret < 0) {				rxrpc_trans_immediate_abort(trans, msg, ret);				rxrpc_put_message(msg);				goto finished_msg;			}			rxrpc_put_message(msg);		}		goto finished_msg;		/* dispose of the packets */	finished_msg:		while (!list_empty(&msgq)) {			msg = list_entry(msgq.next, struct rxrpc_message, link);			list_del_init(&msg->link);			rxrpc_put_message(msg);		}		kfree_skb(pkt);	}	_leave("");} /* end rxrpc_trans_receive_packet() */
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/fb286bb2990a107009dbf25f6ffebeb7df77f9be/transport.c/clean/net/rxrpc/transport.c