[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: Gerrit Renker <gerrit@erg.abdn.ac.uk> Signed-off-by: Arnaldo Carvalho de Melo <acme@mandriva.com>
This commit is contained in:
Родитель
1ed176a801
Коммит
b9df3cb8cf
|
@ -66,6 +66,10 @@ struct netpoll_info;
|
|||
#define NET_RX_CN_HIGH 4 /* The storm is here */
|
||||
#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)
|
||||
|
||||
#endif
|
||||
|
|
|
@ -35,7 +35,7 @@ struct ip_tunnel
|
|||
ip_send_check(iph); \
|
||||
\
|
||||
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_packets++; \
|
||||
} else { \
|
||||
|
|
|
@ -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,
|
||||
ireq->rmt_addr,
|
||||
ireq->opt);
|
||||
if (err == NET_XMIT_CN)
|
||||
err = 0;
|
||||
err = net_xmit_eval(err);
|
||||
}
|
||||
|
||||
out:
|
||||
|
@ -571,7 +570,7 @@ static void dccp_v4_ctl_send_reset(struct sk_buff *rxskb)
|
|||
rxskb->nh.iph->saddr, NULL);
|
||||
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_OUTRSTS);
|
||||
}
|
||||
|
|
|
@ -294,8 +294,7 @@ static int dccp_v6_send_response(struct sock *sk, struct request_sock *req,
|
|||
&ireq6->rmt_addr);
|
||||
ipv6_addr_copy(&fl.fl6_dst, &ireq6->rmt_addr);
|
||||
err = ip6_xmit(sk, skb, &fl, opt, 0);
|
||||
if (err == NET_XMIT_CN)
|
||||
err = 0;
|
||||
err = net_xmit_eval(err);
|
||||
}
|
||||
|
||||
done:
|
||||
|
|
|
@ -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));
|
||||
err = icsk->icsk_af_ops->queue_xmit(skb, sk, 0);
|
||||
if (err <= 0)
|
||||
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 net_xmit_eval(err);
|
||||
}
|
||||
return -ENOBUFS;
|
||||
}
|
||||
|
@ -426,8 +417,7 @@ int dccp_send_reset(struct sock *sk, enum dccp_reset_codes code)
|
|||
if (skb != NULL) {
|
||||
memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt));
|
||||
err = inet_csk(sk)->icsk_af_ops->queue_xmit(skb, sk, 0);
|
||||
if (err == NET_XMIT_CN)
|
||||
err = 0;
|
||||
return net_xmit_eval(err);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -662,8 +662,7 @@ static int tcp_v4_send_synack(struct sock *sk, struct request_sock *req,
|
|||
err = ip_build_and_send_pkt(skb, sk, ireq->loc_addr,
|
||||
ireq->rmt_addr,
|
||||
ireq->opt);
|
||||
if (err == NET_XMIT_CN)
|
||||
err = 0;
|
||||
err = net_xmit_eval(err);
|
||||
}
|
||||
|
||||
out:
|
||||
|
|
|
@ -484,13 +484,7 @@ static int tcp_transmit_skb(struct sock *sk, struct sk_buff *skb, int clone_it,
|
|||
|
||||
tcp_enter_cwr(sk);
|
||||
|
||||
/* 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 net_xmit_eval(err);
|
||||
|
||||
#undef SYSCTL_FLAG_TSTAMPS
|
||||
#undef SYSCTL_FLAG_WSCALE
|
||||
|
|
|
@ -748,7 +748,7 @@ ip6ip6_tnl_xmit(struct sk_buff *skb, struct net_device *dev)
|
|||
err = NF_HOOK(PF_INET6, NF_IP6_LOCAL_OUT, skb, NULL,
|
||||
skb->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_packets++;
|
||||
} else {
|
||||
|
|
|
@ -502,8 +502,7 @@ static int tcp_v6_send_synack(struct sock *sk, struct request_sock *req,
|
|||
|
||||
ipv6_addr_copy(&fl.fl6_dst, &treq->rmt_addr);
|
||||
err = ip6_xmit(sk, skb, &fl, opt, 0);
|
||||
if (err == NET_XMIT_CN)
|
||||
err = 0;
|
||||
err = net_xmit_eval(err);
|
||||
}
|
||||
|
||||
done:
|
||||
|
|
Загрузка…
Ссылка в новой задаче