Add ip_tunnel_netlink_parms to parse netlink msg of ip_tunnel_parm.
Reduces duplicate code, no actual functional changes.
Signed-off-by: Liu Jian <liujian56@huawei.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
 bool ip_tunnel_netlink_encap_parms(struct nlattr *data[],
                                   struct ip_tunnel_encap *encap);
 
+void ip_tunnel_netlink_parms(struct nlattr *data[],
+                            struct ip_tunnel_parm *parms);
+
 extern const struct header_ops ip_tunnel_header_ops;
 __be16 ip_tunnel_parse_protocol(const struct sk_buff *skb);
 
 
        return ret;
 }
 EXPORT_SYMBOL_GPL(ip_tunnel_netlink_encap_parms);
+
+void ip_tunnel_netlink_parms(struct nlattr *data[],
+                            struct ip_tunnel_parm *parms)
+{
+       if (data[IFLA_IPTUN_LINK])
+               parms->link = nla_get_u32(data[IFLA_IPTUN_LINK]);
+
+       if (data[IFLA_IPTUN_LOCAL])
+               parms->iph.saddr = nla_get_be32(data[IFLA_IPTUN_LOCAL]);
+
+       if (data[IFLA_IPTUN_REMOTE])
+               parms->iph.daddr = nla_get_be32(data[IFLA_IPTUN_REMOTE]);
+
+       if (data[IFLA_IPTUN_TTL]) {
+               parms->iph.ttl = nla_get_u8(data[IFLA_IPTUN_TTL]);
+               if (parms->iph.ttl)
+                       parms->iph.frag_off = htons(IP_DF);
+       }
+
+       if (data[IFLA_IPTUN_TOS])
+               parms->iph.tos = nla_get_u8(data[IFLA_IPTUN_TOS]);
+
+       if (!data[IFLA_IPTUN_PMTUDISC] || nla_get_u8(data[IFLA_IPTUN_PMTUDISC]))
+               parms->iph.frag_off = htons(IP_DF);
+
+       if (data[IFLA_IPTUN_FLAGS])
+               parms->i_flags = nla_get_be16(data[IFLA_IPTUN_FLAGS]);
+
+       if (data[IFLA_IPTUN_PROTO])
+               parms->iph.protocol = nla_get_u8(data[IFLA_IPTUN_PROTO]);
+}
+EXPORT_SYMBOL_GPL(ip_tunnel_netlink_parms);
 
        if (!data)
                return;
 
-       if (data[IFLA_IPTUN_LINK])
-               parms->link = nla_get_u32(data[IFLA_IPTUN_LINK]);
-
-       if (data[IFLA_IPTUN_LOCAL])
-               parms->iph.saddr = nla_get_in_addr(data[IFLA_IPTUN_LOCAL]);
-
-       if (data[IFLA_IPTUN_REMOTE])
-               parms->iph.daddr = nla_get_in_addr(data[IFLA_IPTUN_REMOTE]);
-
-       if (data[IFLA_IPTUN_TTL]) {
-               parms->iph.ttl = nla_get_u8(data[IFLA_IPTUN_TTL]);
-               if (parms->iph.ttl)
-                       parms->iph.frag_off = htons(IP_DF);
-       }
-
-       if (data[IFLA_IPTUN_TOS])
-               parms->iph.tos = nla_get_u8(data[IFLA_IPTUN_TOS]);
-
-       if (data[IFLA_IPTUN_PROTO])
-               parms->iph.protocol = nla_get_u8(data[IFLA_IPTUN_PROTO]);
-
-       if (!data[IFLA_IPTUN_PMTUDISC] || nla_get_u8(data[IFLA_IPTUN_PMTUDISC]))
-               parms->iph.frag_off = htons(IP_DF);
+       ip_tunnel_netlink_parms(data, parms);
 
        if (data[IFLA_IPTUN_COLLECT_METADATA])
                *collect_md = true;
 
        if (!data)
                return;
 
-       if (data[IFLA_IPTUN_LINK])
-               parms->link = nla_get_u32(data[IFLA_IPTUN_LINK]);
-
-       if (data[IFLA_IPTUN_LOCAL])
-               parms->iph.saddr = nla_get_be32(data[IFLA_IPTUN_LOCAL]);
-
-       if (data[IFLA_IPTUN_REMOTE])
-               parms->iph.daddr = nla_get_be32(data[IFLA_IPTUN_REMOTE]);
-
-       if (data[IFLA_IPTUN_TTL]) {
-               parms->iph.ttl = nla_get_u8(data[IFLA_IPTUN_TTL]);
-               if (parms->iph.ttl)
-                       parms->iph.frag_off = htons(IP_DF);
-       }
-
-       if (data[IFLA_IPTUN_TOS])
-               parms->iph.tos = nla_get_u8(data[IFLA_IPTUN_TOS]);
-
-       if (!data[IFLA_IPTUN_PMTUDISC] || nla_get_u8(data[IFLA_IPTUN_PMTUDISC]))
-               parms->iph.frag_off = htons(IP_DF);
-
-       if (data[IFLA_IPTUN_FLAGS])
-               parms->i_flags = nla_get_be16(data[IFLA_IPTUN_FLAGS]);
-
-       if (data[IFLA_IPTUN_PROTO])
-               parms->iph.protocol = nla_get_u8(data[IFLA_IPTUN_PROTO]);
+       ip_tunnel_netlink_parms(data, parms);
 
        if (data[IFLA_IPTUN_FWMARK])
                *fwmark = nla_get_u32(data[IFLA_IPTUN_FWMARK]);