net: replace ipfragok with skb->local_df
As Herbert Xu said: we should be able to simply replace ipfragok with skb->local_df. commit f88037(sctp: Drop ipfargok in sctp_xmit function) has droped ipfragok and set local_df value properly. The patch kills the ipfragok parameter of .queue_xmit(). Signed-off-by: Shan Wei <shanwei@cn.fujitsu.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
0eecb78494
commit
4e15ed4d93
15 changed files with 20 additions and 20 deletions
|
@ -38,5 +38,5 @@ extern void inet6_csk_reqsk_queue_hash_add(struct sock *sk,
|
||||||
|
|
||||||
extern void inet6_csk_addr2sockaddr(struct sock *sk, struct sockaddr *uaddr);
|
extern void inet6_csk_addr2sockaddr(struct sock *sk, struct sockaddr *uaddr);
|
||||||
|
|
||||||
extern int inet6_csk_xmit(struct sk_buff *skb, int ipfragok);
|
extern int inet6_csk_xmit(struct sk_buff *skb);
|
||||||
#endif /* _INET6_CONNECTION_SOCK_H */
|
#endif /* _INET6_CONNECTION_SOCK_H */
|
||||||
|
|
|
@ -36,7 +36,7 @@ struct tcp_congestion_ops;
|
||||||
* (i.e. things that depend on the address family)
|
* (i.e. things that depend on the address family)
|
||||||
*/
|
*/
|
||||||
struct inet_connection_sock_af_ops {
|
struct inet_connection_sock_af_ops {
|
||||||
int (*queue_xmit)(struct sk_buff *skb, int ipfragok);
|
int (*queue_xmit)(struct sk_buff *skb);
|
||||||
void (*send_check)(struct sock *sk, struct sk_buff *skb);
|
void (*send_check)(struct sock *sk, struct sk_buff *skb);
|
||||||
int (*rebuild_header)(struct sock *sk);
|
int (*rebuild_header)(struct sock *sk);
|
||||||
int (*conn_request)(struct sock *sk, struct sk_buff *skb);
|
int (*conn_request)(struct sock *sk, struct sk_buff *skb);
|
||||||
|
|
|
@ -101,7 +101,7 @@ extern int ip_do_nat(struct sk_buff *skb);
|
||||||
extern void ip_send_check(struct iphdr *ip);
|
extern void ip_send_check(struct iphdr *ip);
|
||||||
extern int __ip_local_out(struct sk_buff *skb);
|
extern int __ip_local_out(struct sk_buff *skb);
|
||||||
extern int ip_local_out(struct sk_buff *skb);
|
extern int ip_local_out(struct sk_buff *skb);
|
||||||
extern int ip_queue_xmit(struct sk_buff *skb, int ipfragok);
|
extern int ip_queue_xmit(struct sk_buff *skb);
|
||||||
extern void ip_init(void);
|
extern void ip_init(void);
|
||||||
extern int ip_append_data(struct sock *sk,
|
extern int ip_append_data(struct sock *sk,
|
||||||
int getfrag(void *from, char *to, int offset, int len,
|
int getfrag(void *from, char *to, int offset, int len,
|
||||||
|
|
|
@ -482,8 +482,7 @@ extern int ip6_rcv_finish(struct sk_buff *skb);
|
||||||
extern int ip6_xmit(struct sock *sk,
|
extern int ip6_xmit(struct sock *sk,
|
||||||
struct sk_buff *skb,
|
struct sk_buff *skb,
|
||||||
struct flowi *fl,
|
struct flowi *fl,
|
||||||
struct ipv6_txoptions *opt,
|
struct ipv6_txoptions *opt);
|
||||||
int ipfragok);
|
|
||||||
|
|
||||||
extern int ip6_nd_hdr(struct sock *sk,
|
extern int ip6_nd_hdr(struct sock *sk,
|
||||||
struct sk_buff *skb,
|
struct sk_buff *skb,
|
||||||
|
|
|
@ -292,7 +292,7 @@ static int dccp_v6_send_response(struct sock *sk, struct request_sock *req,
|
||||||
&ireq6->loc_addr,
|
&ireq6->loc_addr,
|
||||||
&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);
|
||||||
err = net_xmit_eval(err);
|
err = net_xmit_eval(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -347,7 +347,7 @@ static void dccp_v6_ctl_send_reset(struct sock *sk, struct sk_buff *rxskb)
|
||||||
if (!ip6_dst_lookup(ctl_sk, &dst, &fl)) {
|
if (!ip6_dst_lookup(ctl_sk, &dst, &fl)) {
|
||||||
if (xfrm_lookup(net, &dst, &fl, NULL, 0) >= 0) {
|
if (xfrm_lookup(net, &dst, &fl, NULL, 0) >= 0) {
|
||||||
skb_dst_set(skb, dst);
|
skb_dst_set(skb, dst);
|
||||||
ip6_xmit(ctl_sk, skb, &fl, NULL, 0);
|
ip6_xmit(ctl_sk, skb, &fl, NULL);
|
||||||
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);
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -136,7 +136,7 @@ static int dccp_transmit_skb(struct sock *sk, struct sk_buff *skb)
|
||||||
|
|
||||||
DCCP_INC_STATS(DCCP_MIB_OUTSEGS);
|
DCCP_INC_STATS(DCCP_MIB_OUTSEGS);
|
||||||
|
|
||||||
err = icsk->icsk_af_ops->queue_xmit(skb, 0);
|
err = icsk->icsk_af_ops->queue_xmit(skb);
|
||||||
return net_xmit_eval(err);
|
return net_xmit_eval(err);
|
||||||
}
|
}
|
||||||
return -ENOBUFS;
|
return -ENOBUFS;
|
||||||
|
|
|
@ -311,7 +311,7 @@ int ip_output(struct sk_buff *skb)
|
||||||
!(IPCB(skb)->flags & IPSKB_REROUTED));
|
!(IPCB(skb)->flags & IPSKB_REROUTED));
|
||||||
}
|
}
|
||||||
|
|
||||||
int ip_queue_xmit(struct sk_buff *skb, int ipfragok)
|
int ip_queue_xmit(struct sk_buff *skb)
|
||||||
{
|
{
|
||||||
struct sock *sk = skb->sk;
|
struct sock *sk = skb->sk;
|
||||||
struct inet_sock *inet = inet_sk(sk);
|
struct inet_sock *inet = inet_sk(sk);
|
||||||
|
@ -370,7 +370,7 @@ int ip_queue_xmit(struct sk_buff *skb, int ipfragok)
|
||||||
skb_reset_network_header(skb);
|
skb_reset_network_header(skb);
|
||||||
iph = ip_hdr(skb);
|
iph = ip_hdr(skb);
|
||||||
*((__be16 *)iph) = htons((4 << 12) | (5 << 8) | (inet->tos & 0xff));
|
*((__be16 *)iph) = htons((4 << 12) | (5 << 8) | (inet->tos & 0xff));
|
||||||
if (ip_dont_fragment(sk, &rt->u.dst) && !ipfragok)
|
if (ip_dont_fragment(sk, &rt->u.dst) && !skb->local_df)
|
||||||
iph->frag_off = htons(IP_DF);
|
iph->frag_off = htons(IP_DF);
|
||||||
else
|
else
|
||||||
iph->frag_off = 0;
|
iph->frag_off = 0;
|
||||||
|
|
|
@ -890,7 +890,7 @@ static int tcp_transmit_skb(struct sock *sk, struct sk_buff *skb, int clone_it,
|
||||||
if (after(tcb->end_seq, tp->snd_nxt) || tcb->seq == tcb->end_seq)
|
if (after(tcb->end_seq, tp->snd_nxt) || tcb->seq == tcb->end_seq)
|
||||||
TCP_INC_STATS(sock_net(sk), TCP_MIB_OUTSEGS);
|
TCP_INC_STATS(sock_net(sk), TCP_MIB_OUTSEGS);
|
||||||
|
|
||||||
err = icsk->icsk_af_ops->queue_xmit(skb, 0);
|
err = icsk->icsk_af_ops->queue_xmit(skb);
|
||||||
if (likely(err <= 0))
|
if (likely(err <= 0))
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
|
|
|
@ -178,7 +178,7 @@ struct dst_entry *__inet6_csk_dst_check(struct sock *sk, u32 cookie)
|
||||||
return dst;
|
return dst;
|
||||||
}
|
}
|
||||||
|
|
||||||
int inet6_csk_xmit(struct sk_buff *skb, int ipfragok)
|
int inet6_csk_xmit(struct sk_buff *skb)
|
||||||
{
|
{
|
||||||
struct sock *sk = skb->sk;
|
struct sock *sk = skb->sk;
|
||||||
struct inet_sock *inet = inet_sk(sk);
|
struct inet_sock *inet = inet_sk(sk);
|
||||||
|
@ -234,7 +234,7 @@ int inet6_csk_xmit(struct sk_buff *skb, int ipfragok)
|
||||||
/* Restore final destination back after routing done */
|
/* Restore final destination back after routing done */
|
||||||
ipv6_addr_copy(&fl.fl6_dst, &np->daddr);
|
ipv6_addr_copy(&fl.fl6_dst, &np->daddr);
|
||||||
|
|
||||||
return ip6_xmit(sk, skb, &fl, np->opt, 0);
|
return ip6_xmit(sk, skb, &fl, np->opt);
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPORT_SYMBOL_GPL(inet6_csk_xmit);
|
EXPORT_SYMBOL_GPL(inet6_csk_xmit);
|
||||||
|
|
|
@ -185,7 +185,7 @@ int ip6_output(struct sk_buff *skb)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int ip6_xmit(struct sock *sk, struct sk_buff *skb, struct flowi *fl,
|
int ip6_xmit(struct sock *sk, struct sk_buff *skb, struct flowi *fl,
|
||||||
struct ipv6_txoptions *opt, int ipfragok)
|
struct ipv6_txoptions *opt)
|
||||||
{
|
{
|
||||||
struct net *net = sock_net(sk);
|
struct net *net = sock_net(sk);
|
||||||
struct ipv6_pinfo *np = inet6_sk(sk);
|
struct ipv6_pinfo *np = inet6_sk(sk);
|
||||||
|
|
|
@ -509,7 +509,7 @@ static int tcp_v6_send_synack(struct sock *sk, struct request_sock *req,
|
||||||
__tcp_v6_send_check(skb, &treq->loc_addr, &treq->rmt_addr);
|
__tcp_v6_send_check(skb, &treq->loc_addr, &treq->rmt_addr);
|
||||||
|
|
||||||
ipv6_addr_copy(&fl.fl6_dst, &treq->rmt_addr);
|
ipv6_addr_copy(&fl.fl6_dst, &treq->rmt_addr);
|
||||||
err = ip6_xmit(sk, skb, &fl, opt, 0);
|
err = ip6_xmit(sk, skb, &fl, opt);
|
||||||
err = net_xmit_eval(err);
|
err = net_xmit_eval(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1071,7 +1071,7 @@ static void tcp_v6_send_response(struct sk_buff *skb, u32 seq, u32 ack, u32 win,
|
||||||
if (!ip6_dst_lookup(ctl_sk, &dst, &fl)) {
|
if (!ip6_dst_lookup(ctl_sk, &dst, &fl)) {
|
||||||
if (xfrm_lookup(net, &dst, &fl, NULL, 0) >= 0) {
|
if (xfrm_lookup(net, &dst, &fl, NULL, 0) >= 0) {
|
||||||
skb_dst_set(buff, dst);
|
skb_dst_set(buff, dst);
|
||||||
ip6_xmit(ctl_sk, buff, &fl, NULL, 0);
|
ip6_xmit(ctl_sk, buff, &fl, NULL);
|
||||||
TCP_INC_STATS_BH(net, TCP_MIB_OUTSEGS);
|
TCP_INC_STATS_BH(net, TCP_MIB_OUTSEGS);
|
||||||
if (rst)
|
if (rst)
|
||||||
TCP_INC_STATS_BH(net, TCP_MIB_OUTRSTS);
|
TCP_INC_STATS_BH(net, TCP_MIB_OUTRSTS);
|
||||||
|
|
|
@ -954,7 +954,8 @@ int l2tp_xmit_core(struct l2tp_session *session, struct sk_buff *skb, size_t dat
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Queue the packet to IP for output */
|
/* Queue the packet to IP for output */
|
||||||
error = ip_queue_xmit(skb, 1);
|
skb->local_df = 1;
|
||||||
|
error = ip_queue_xmit(skb);
|
||||||
|
|
||||||
/* Update stats */
|
/* Update stats */
|
||||||
if (error >= 0) {
|
if (error >= 0) {
|
||||||
|
|
|
@ -501,7 +501,7 @@ static int l2tp_ip_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *m
|
||||||
skb_dst_set(skb, dst_clone(&rt->u.dst));
|
skb_dst_set(skb, dst_clone(&rt->u.dst));
|
||||||
|
|
||||||
/* Queue the packet to IP for output */
|
/* Queue the packet to IP for output */
|
||||||
rc = ip_queue_xmit(skb, 0);
|
rc = ip_queue_xmit(skb);
|
||||||
|
|
||||||
error:
|
error:
|
||||||
/* Update stats */
|
/* Update stats */
|
||||||
|
|
|
@ -232,7 +232,7 @@ static int sctp_v6_xmit(struct sk_buff *skb, struct sctp_transport *transport)
|
||||||
if (!(transport->param_flags & SPP_PMTUD_ENABLE))
|
if (!(transport->param_flags & SPP_PMTUD_ENABLE))
|
||||||
skb->local_df = 1;
|
skb->local_df = 1;
|
||||||
|
|
||||||
return ip6_xmit(sk, skb, &fl, np->opt, 0);
|
return ip6_xmit(sk, skb, &fl, np->opt);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Returns the dst cache entry for the given source and destination ip
|
/* Returns the dst cache entry for the given source and destination ip
|
||||||
|
|
|
@ -854,7 +854,7 @@ static inline int sctp_v4_xmit(struct sk_buff *skb,
|
||||||
IP_PMTUDISC_DO : IP_PMTUDISC_DONT;
|
IP_PMTUDISC_DO : IP_PMTUDISC_DONT;
|
||||||
|
|
||||||
SCTP_INC_STATS(SCTP_MIB_OUTSCTPPACKS);
|
SCTP_INC_STATS(SCTP_MIB_OUTSCTPPACKS);
|
||||||
return ip_queue_xmit(skb, 0);
|
return ip_queue_xmit(skb);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct sctp_af sctp_af_inet;
|
static struct sctp_af sctp_af_inet;
|
||||||
|
|
Loading…
Reference in a new issue