summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexey Kuznetsov <kuznet@ms2.inr.ac.ru>2003-08-02 09:06:26 -0700
committerDavid S. Miller <davem@nuts.ninka.net>2003-08-02 09:06:26 -0700
commit7155c25898b0111271f076fc9bcf547e267e2d44 (patch)
tree6608ae5ee6f8bd0dbd6e354218077603900ea2f9
parent85ea267d3cc26dd5e3ca52189880d59a6c8f3196 (diff)
[IPV4]: IP options were not updated while forwarding multicasts.
-rw-r--r--net/ipv4/ipmr.c13
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);
}
/*