diff options
| author | Alexey Kuznetsov <kuznet@ms2.inr.ac.ru> | 2003-08-02 09:06:26 -0700 |
|---|---|---|
| committer | David S. Miller <davem@nuts.ninka.net> | 2003-08-02 09:06:26 -0700 |
| commit | 7155c25898b0111271f076fc9bcf547e267e2d44 (patch) | |
| tree | 6608ae5ee6f8bd0dbd6e354218077603900ea2f9 | |
| parent | 85ea267d3cc26dd5e3ca52189880d59a6c8f3196 (diff) | |
[IPV4]: IP options were not updated while forwarding multicasts.
| -rw-r--r-- | net/ipv4/ipmr.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/net/ipv4/ipmr.c b/net/ipv4/ipmr.c index b9210beb3675..689ae198d82c 100644 --- a/net/ipv4/ipmr.c +++ b/net/ipv4/ipmr.c @@ -1100,6 +1100,7 @@ static void ip_encap(struct sk_buff *skb, u32 saddr, u32 daddr) skb->h.ipiph = skb->nh.iph; skb->nh.iph = iph; + memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt)); #ifdef CONFIG_NETFILTER nf_conntrack_put(skb->nfct); skb->nfct = NULL; @@ -1108,12 +1109,14 @@ static void ip_encap(struct sk_buff *skb, u32 saddr, u32 daddr) static inline int ipmr_forward_finish(struct sk_buff *skb) { - struct dst_entry *dst = skb->dst; + struct ip_options * opt = &(IPCB(skb)->opt); - if (skb->len <= dst_pmtu(dst)) - return dst_output(skb); - else - return ip_fragment(skb, dst_output); + IP_INC_STATS_BH(IpForwDatagrams); + + if (unlikely(opt->optlen)) + ip_forward_options(skb); + + return dst_output(skb); } /* |
