--- zzzz-none-000/linux-4.1.38/net/ipv6/sit.c 2017-01-18 18:48:06.000000000 +0000 +++ bcm63-7582-715/linux-4.1.38/net/ipv6/sit.c 2020-11-25 10:06:48.000000000 +0000 @@ -56,6 +56,10 @@ #include #include +#if defined(CONFIG_BCM_KF_BLOG) && defined(CONFIG_BLOG) +#include +#endif + /* This version of net/ipv6/sit.c is cloned of net/ipv4/ip_gre.c @@ -708,6 +712,12 @@ tstats->rx_bytes += skb->len; u64_stats_update_end(&tstats->syncp); +#if defined(CONFIG_BCM_KF_BLOG) && defined(CONFIG_BLOG) + blog_lock(); + blog_link(TOS_MODE, blog_ptr(skb), tunnel, DIR_RX, BLOG_TOS_FIXED); + blog_unlock(); +#endif + netif_rx(skb); return 0; @@ -983,9 +993,36 @@ skb_set_inner_ipproto(skb, IPPROTO_IPV6); - err = iptunnel_xmit(NULL, rt, skb, fl4.saddr, fl4.daddr, - protocol, tos, ttl, df, - !net_eq(tunnel->net, dev_net(dev))); +#if defined(CONFIG_BCM_KF_BLOG) && defined(CONFIG_BLOG) + blog_lock(); + blog_link(TOS_MODE, blog_ptr(skb), tunnel, DIR_TX, tunnel->parms.iph.tos); + blog_link(IF_DEVICE, blog_ptr(skb), (void*)dev, DIR_TX, skb->len); + blog_unlock(); +#endif + +#if defined(CONFIG_BCM_KF_IP) + /* + * cd-router #1329: DF flag should not be set + * RFC 3056 sec 4: DF flag should not be set + * RFC 4213 sec 3.2.1: DF flag MUST NOT be set for static MTU cases. + * RFC 4213 sec 3.2.2: For dynamic MTU cases, the algorithm should be: + * if ( (v4MTU-20) < 1280 ) { + * if ( v6Pkt > 1280 ) send ICMPv6 "TooBig" with MTU=1280; + * else encapsulate to v4 packet and DF flag MUST NOT be set + * } + * else { + * if ( v6Pkt > (v4MTU-20) ) send ICMPv6 "TooBig" with MTU=(v4MTU-20); + * else encapsulate to v4 packet and DF flag MUST be set + * } + */ + err = iptunnel_xmit(NULL, rt, skb, fl4.saddr, fl4.daddr, IPPROTO_IPV6, tos, + ttl, 0, !net_eq(tunnel->net, dev_net(dev))); +#else + err = iptunnel_xmit(NULL, rt, skb, fl4.saddr, fl4.daddr, + protocol, tos, ttl, df, + !net_eq(tunnel->net, dev_net(dev))); +#endif + iptunnel_xmit_stats(err, &dev->stats, dev->tstats); return NETDEV_TX_OK;