system-linux: enable by default ignore encaplimit for ip6 tunnels
authorHans Dedecker <dedeckeh@gmail.com>
Mon, 17 Sep 2018 19:41:16 +0000 (21:41 +0200)
committerHans Dedecker <dedeckeh@gmail.com>
Tue, 18 Sep 2018 14:02:25 +0000 (16:02 +0200)
Enable ignore encaplimit by default for ip6 tunnels as not all ISPs support
the destination option header containing the tunnel encapsulation limit
resulting into broken map/ds-lite connectivity.
Setting the ignore encaplimit flag by default is a more sane setting as it
avoids user configuation of the encaplimit uci option for ds-lite/map tunnels
in case of broken connectivity.

Signed-off-by: Hans Dedecker <dedeckeh@gmail.com>
system-linux.c

index 9cd49d09dce7adf2e9141e1e04f32870441468fc..9401cd938ca7963d581e3966df8e4dd99731ee8b 100644 (file)
@@ -2344,6 +2344,7 @@ static int system_add_ip6_tunnel(const char *name, const unsigned int link,
 
        if ((cur = tb[TUNNEL_ATTR_DATA])) {
                struct blob_attr *tb_data[__IPIP6_DATA_ATTR_MAX];
+               uint32_t tun_flags = IP6_TNL_F_IGN_ENCAP_LIMIT;
 
                blobmsg_parse(ipip6_data_attr_list.params, __IPIP6_DATA_ATTR_MAX, tb_data,
                        blobmsg_data(cur), blobmsg_len(cur));
@@ -2361,8 +2362,8 @@ static int system_add_ip6_tunnel(const char *name, const unsigned int link,
                                }
 
                                nla_put_u8(nlm, IFLA_IPTUN_ENCAP_LIMIT, encap_limit);
-                       } else
-                               nla_put_u32(nlm, IFLA_IPTUN_FLAGS, IP6_TNL_F_IGN_ENCAP_LIMIT);
+                               tun_flags &= ~IP6_TNL_F_IGN_ENCAP_LIMIT;
+                       }
                }
 
 #ifdef IFLA_IPTUN_FMR_MAX
@@ -2432,6 +2433,8 @@ static int system_add_ip6_tunnel(const char *name, const unsigned int link,
                        nla_nest_end(nlm, fmrs);
                }
 #endif
+               if (tun_flags)
+                       nla_put_u32(nlm, IFLA_IPTUN_FLAGS, tun_flags);
        }
 
        nla_nest_end(nlm, infodata);