Commit a7280d6a authored by Sridhar Samudrala's avatar Sridhar Samudrala

[IPV{4,6}]: Add ipfragok arg to ip_queue_xmit.

parent 6a3354a9
...@@ -96,7 +96,7 @@ extern int ip_mc_output(struct sk_buff *skb); ...@@ -96,7 +96,7 @@ extern int ip_mc_output(struct sk_buff *skb);
extern int ip_fragment(struct sk_buff *skb, int (*out)(struct sk_buff*)); extern int ip_fragment(struct sk_buff *skb, int (*out)(struct sk_buff*));
extern int ip_do_nat(struct sk_buff *skb); 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_queue_xmit(struct sk_buff *skb); extern int ip_queue_xmit(struct sk_buff *skb, int ipfragok);
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,
......
...@@ -566,7 +566,8 @@ static inline void tcp_openreq_free(struct open_request *req) ...@@ -566,7 +566,8 @@ static inline void tcp_openreq_free(struct open_request *req)
*/ */
struct tcp_func { struct tcp_func {
int (*queue_xmit) (struct sk_buff *skb); int (*queue_xmit) (struct sk_buff *skb,
int ipfragok);
void (*send_check) (struct sock *sk, void (*send_check) (struct sock *sk,
struct tcphdr *th, struct tcphdr *th,
......
...@@ -280,7 +280,7 @@ int ip_output(struct sk_buff *skb) ...@@ -280,7 +280,7 @@ int ip_output(struct sk_buff *skb)
return ip_finish_output(skb); return ip_finish_output(skb);
} }
int ip_queue_xmit(struct sk_buff *skb) int ip_queue_xmit(struct sk_buff *skb, int ipfragok)
{ {
struct sock *sk = skb->sk; struct sock *sk = skb->sk;
struct inet_opt *inet = inet_sk(sk); struct inet_opt *inet = inet_sk(sk);
...@@ -337,7 +337,7 @@ int ip_queue_xmit(struct sk_buff *skb) ...@@ -337,7 +337,7 @@ int ip_queue_xmit(struct sk_buff *skb)
iph = (struct iphdr *) skb_push(skb, sizeof(struct iphdr) + (opt ? opt->optlen : 0)); iph = (struct iphdr *) skb_push(skb, sizeof(struct iphdr) + (opt ? opt->optlen : 0));
*((__u16 *)iph) = htons((4 << 12) | (5 << 8) | (inet->tos & 0xff)); *((__u16 *)iph) = htons((4 << 12) | (5 << 8) | (inet->tos & 0xff));
iph->tot_len = htons(skb->len); iph->tot_len = htons(skb->len);
if (ip_dont_fragment(sk, &rt->u.dst)) if (ip_dont_fragment(sk, &rt->u.dst) && !ipfragok)
iph->frag_off = htons(IP_DF); iph->frag_off = htons(IP_DF);
else else
iph->frag_off = 0; iph->frag_off = 0;
......
...@@ -276,7 +276,7 @@ int tcp_transmit_skb(struct sock *sk, struct sk_buff *skb) ...@@ -276,7 +276,7 @@ int tcp_transmit_skb(struct sock *sk, struct sk_buff *skb)
TCP_INC_STATS(TcpOutSegs); TCP_INC_STATS(TcpOutSegs);
err = tp->af_specific->queue_xmit(skb); err = tp->af_specific->queue_xmit(skb, 0);
if (err <= 0) if (err <= 0)
return err; return err;
......
...@@ -1746,7 +1746,7 @@ static int tcp_v6_rebuild_header(struct sock *sk) ...@@ -1746,7 +1746,7 @@ static int tcp_v6_rebuild_header(struct sock *sk)
return 0; return 0;
} }
static int tcp_v6_xmit(struct sk_buff *skb) static int tcp_v6_xmit(struct sk_buff *skb, int ipfragok)
{ {
struct sock *sk = skb->sk; struct sock *sk = skb->sk;
struct inet_opt *inet = inet_sk(sk); struct inet_opt *inet = inet_sk(sk);
......
...@@ -248,6 +248,8 @@ EXPORT_SYMBOL(inet_unregister_protosw); ...@@ -248,6 +248,8 @@ EXPORT_SYMBOL(inet_unregister_protosw);
EXPORT_SYMBOL(ip_route_output_key); EXPORT_SYMBOL(ip_route_output_key);
EXPORT_SYMBOL(ip_route_input); EXPORT_SYMBOL(ip_route_input);
EXPORT_SYMBOL(icmp_send); EXPORT_SYMBOL(icmp_send);
EXPORT_SYMBOL(icmp_statistics);
EXPORT_SYMBOL(icmp_err_convert);
EXPORT_SYMBOL(ip_options_compile); EXPORT_SYMBOL(ip_options_compile);
EXPORT_SYMBOL(ip_options_undo); EXPORT_SYMBOL(ip_options_undo);
EXPORT_SYMBOL(arp_send); EXPORT_SYMBOL(arp_send);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment