forked from Minki/linux
net: Add helper function to parse netlink msg of ip_tunnel_parm
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>
This commit is contained in:
parent
537dd2d9fb
commit
b86fca800a
@ -305,6 +305,9 @@ void ip_tunnel_setup(struct net_device *dev, unsigned int net_id);
|
||||
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);
|
||||
|
||||
|
@ -1114,3 +1114,35 @@ bool ip_tunnel_netlink_encap_parms(struct nlattr *data[],
|
||||
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);
|
||||
|
@ -417,29 +417,7 @@ static void ipip_netlink_parms(struct nlattr *data[],
|
||||
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;
|
||||
|
@ -1503,32 +1503,7 @@ static void ipip6_netlink_parms(struct nlattr *data[],
|
||||
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]);
|
||||
|
Loading…
Reference in New Issue
Block a user