Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b9df3cb8 authored by Gerrit Renker's avatar Gerrit Renker Committed by David S. Miller
Browse files

[TCP/DCCP]: Introduce net_xmit_eval



Throughout the TCP/DCCP (and tunnelling) code, it often happens that the
return code of a transmit function needs to be tested against NET_XMIT_CN
which is a value that does not indicate a strict error condition.

This patch uses a macro for these recurring situations which is consistent
with the already existing macro net_xmit_errno, saving on duplicated code.

Signed-off-by: default avatarGerrit Renker <gerrit@erg.abdn.ac.uk>
Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@mandriva.com>
parent 1ed176a8
Loading
Loading
Loading
Loading
+4 −0
Original line number Original line Diff line number Diff line
@@ -66,6 +66,10 @@ struct netpoll_info;
#define NET_RX_CN_HIGH		4   /* The storm is here */
#define NET_RX_CN_HIGH		4   /* The storm is here */
#define NET_RX_BAD		5  /* packet dropped due to kernel error */
#define NET_RX_BAD		5  /* packet dropped due to kernel error */


/* NET_XMIT_CN is special. It does not guarantee that this packet is lost. It
 * indicates that the device will soon be dropping packets, or already drops
 * some packets of the same priority; prompting us to send less aggressively. */
#define net_xmit_eval(e)	((e) == NET_XMIT_CN? 0 : (e))
#define net_xmit_errno(e)	((e) != NET_XMIT_CN ? -ENOBUFS : 0)
#define net_xmit_errno(e)	((e) != NET_XMIT_CN ? -ENOBUFS : 0)


#endif
#endif
+1 −1
Original line number Original line Diff line number Diff line
@@ -35,7 +35,7 @@ struct ip_tunnel
	ip_send_check(iph);						\
	ip_send_check(iph);						\
									\
									\
	err = NF_HOOK(PF_INET, NF_IP_LOCAL_OUT, skb, NULL, rt->u.dst.dev, dst_output);\
	err = NF_HOOK(PF_INET, NF_IP_LOCAL_OUT, skb, NULL, rt->u.dst.dev, dst_output);\
	if (err == NET_XMIT_SUCCESS || err == NET_XMIT_CN) {		\
	if (net_xmit_eval(err) == 0) {					\
		stats->tx_bytes += pkt_len;				\
		stats->tx_bytes += pkt_len;				\
		stats->tx_packets++;					\
		stats->tx_packets++;					\
	} else {							\
	} else {							\
+2 −3
Original line number Original line Diff line number Diff line
@@ -501,8 +501,7 @@ static int dccp_v4_send_response(struct sock *sk, struct request_sock *req,
		err = ip_build_and_send_pkt(skb, sk, ireq->loc_addr,
		err = ip_build_and_send_pkt(skb, sk, ireq->loc_addr,
					    ireq->rmt_addr,
					    ireq->rmt_addr,
					    ireq->opt);
					    ireq->opt);
		if (err == NET_XMIT_CN)
		err = net_xmit_eval(err);
			err = 0;
	}
	}


out:
out:
@@ -571,7 +570,7 @@ static void dccp_v4_ctl_send_reset(struct sk_buff *rxskb)
				    rxskb->nh.iph->saddr, NULL);
				    rxskb->nh.iph->saddr, NULL);
	bh_unlock_sock(dccp_v4_ctl_socket->sk);
	bh_unlock_sock(dccp_v4_ctl_socket->sk);


	if (err == NET_XMIT_CN || err == 0) {
	if (net_xmit_eval(err) == 0) {
		DCCP_INC_STATS_BH(DCCP_MIB_OUTSEGS);
		DCCP_INC_STATS_BH(DCCP_MIB_OUTSEGS);
		DCCP_INC_STATS_BH(DCCP_MIB_OUTRSTS);
		DCCP_INC_STATS_BH(DCCP_MIB_OUTRSTS);
	}
	}
+1 −2
Original line number Original line Diff line number Diff line
@@ -294,8 +294,7 @@ static int dccp_v6_send_response(struct sock *sk, struct request_sock *req,
							 &ireq6->rmt_addr);
							 &ireq6->rmt_addr);
		ipv6_addr_copy(&fl.fl6_dst, &ireq6->rmt_addr);
		ipv6_addr_copy(&fl.fl6_dst, &ireq6->rmt_addr);
		err = ip6_xmit(sk, skb, &fl, opt, 0);
		err = ip6_xmit(sk, skb, &fl, opt, 0);
		if (err == NET_XMIT_CN)
		err = net_xmit_eval(err);
			err = 0;
	}
	}


done:
done:
+2 −12
Original line number Original line Diff line number Diff line
@@ -125,16 +125,7 @@ static int dccp_transmit_skb(struct sock *sk, struct sk_buff *skb)


		memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt));
		memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt));
		err = icsk->icsk_af_ops->queue_xmit(skb, sk, 0);
		err = icsk->icsk_af_ops->queue_xmit(skb, sk, 0);
		if (err <= 0)
		return net_xmit_eval(err);
			return err;

		/* NET_XMIT_CN is special. It does not guarantee,
		 * that this packet is lost. It tells that device
		 * is about to start to drop packets or already
		 * drops some packets of the same priority and
		 * invokes us to send less aggressively.
		 */
		return err == NET_XMIT_CN ? 0 : err;
	}
	}
	return -ENOBUFS;
	return -ENOBUFS;
}
}
@@ -426,8 +417,7 @@ int dccp_send_reset(struct sock *sk, enum dccp_reset_codes code)
		if (skb != NULL) {
		if (skb != NULL) {
			memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt));
			memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt));
			err = inet_csk(sk)->icsk_af_ops->queue_xmit(skb, sk, 0);
			err = inet_csk(sk)->icsk_af_ops->queue_xmit(skb, sk, 0);
			if (err == NET_XMIT_CN)
			return net_xmit_eval(err);
				err = 0;
		}
		}
	}
	}


Loading