[IPV4]: RTA_{DST,SRC,GATEWAY,PREFSRC} annotated
these are passed net-endian; use be32 netlink accessors Signed-off-by: Al Viro <viro@zeniv.linux.org.uk> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
e448515c79
commit
17fb2c6439
3 changed files with 17 additions and 17 deletions
|
@ -499,22 +499,22 @@ static int rtm_to_fib_config(struct sk_buff *skb, struct nlmsghdr *nlh,
|
||||||
nlmsg_for_each_attr(attr, nlh, sizeof(struct rtmsg), remaining) {
|
nlmsg_for_each_attr(attr, nlh, sizeof(struct rtmsg), remaining) {
|
||||||
switch (attr->nla_type) {
|
switch (attr->nla_type) {
|
||||||
case RTA_DST:
|
case RTA_DST:
|
||||||
cfg->fc_dst = nla_get_u32(attr);
|
cfg->fc_dst = nla_get_be32(attr);
|
||||||
break;
|
break;
|
||||||
case RTA_SRC:
|
case RTA_SRC:
|
||||||
cfg->fc_src = nla_get_u32(attr);
|
cfg->fc_src = nla_get_be32(attr);
|
||||||
break;
|
break;
|
||||||
case RTA_OIF:
|
case RTA_OIF:
|
||||||
cfg->fc_oif = nla_get_u32(attr);
|
cfg->fc_oif = nla_get_u32(attr);
|
||||||
break;
|
break;
|
||||||
case RTA_GATEWAY:
|
case RTA_GATEWAY:
|
||||||
cfg->fc_gw = nla_get_u32(attr);
|
cfg->fc_gw = nla_get_be32(attr);
|
||||||
break;
|
break;
|
||||||
case RTA_PRIORITY:
|
case RTA_PRIORITY:
|
||||||
cfg->fc_priority = nla_get_u32(attr);
|
cfg->fc_priority = nla_get_u32(attr);
|
||||||
break;
|
break;
|
||||||
case RTA_PREFSRC:
|
case RTA_PREFSRC:
|
||||||
cfg->fc_prefsrc = nla_get_u32(attr);
|
cfg->fc_prefsrc = nla_get_be32(attr);
|
||||||
break;
|
break;
|
||||||
case RTA_METRICS:
|
case RTA_METRICS:
|
||||||
cfg->fc_mx = nla_data(attr);
|
cfg->fc_mx = nla_data(attr);
|
||||||
|
|
|
@ -374,7 +374,7 @@ static int fib_get_nhs(struct fib_info *fi, struct rtnexthop *rtnh,
|
||||||
struct nlattr *nla, *attrs = rtnh_attrs(rtnh);
|
struct nlattr *nla, *attrs = rtnh_attrs(rtnh);
|
||||||
|
|
||||||
nla = nla_find(attrs, attrlen, RTA_GATEWAY);
|
nla = nla_find(attrs, attrlen, RTA_GATEWAY);
|
||||||
nh->nh_gw = nla ? nla_get_u32(nla) : 0;
|
nh->nh_gw = nla ? nla_get_be32(nla) : 0;
|
||||||
#ifdef CONFIG_NET_CLS_ROUTE
|
#ifdef CONFIG_NET_CLS_ROUTE
|
||||||
nla = nla_find(attrs, attrlen, RTA_FLOW);
|
nla = nla_find(attrs, attrlen, RTA_FLOW);
|
||||||
nh->nh_tclassid = nla ? nla_get_u32(nla) : 0;
|
nh->nh_tclassid = nla ? nla_get_u32(nla) : 0;
|
||||||
|
@ -427,7 +427,7 @@ int fib_nh_match(struct fib_config *cfg, struct fib_info *fi)
|
||||||
struct nlattr *nla, *attrs = rtnh_attrs(rtnh);
|
struct nlattr *nla, *attrs = rtnh_attrs(rtnh);
|
||||||
|
|
||||||
nla = nla_find(attrs, attrlen, RTA_GATEWAY);
|
nla = nla_find(attrs, attrlen, RTA_GATEWAY);
|
||||||
if (nla && nla_get_u32(nla) != nh->nh_gw)
|
if (nla && nla_get_be32(nla) != nh->nh_gw)
|
||||||
return 1;
|
return 1;
|
||||||
#ifdef CONFIG_NET_CLS_ROUTE
|
#ifdef CONFIG_NET_CLS_ROUTE
|
||||||
nla = nla_find(attrs, attrlen, RTA_FLOW);
|
nla = nla_find(attrs, attrlen, RTA_FLOW);
|
||||||
|
@ -952,7 +952,7 @@ int fib_dump_info(struct sk_buff *skb, u32 pid, u32 seq, int event,
|
||||||
rtm->rtm_protocol = fi->fib_protocol;
|
rtm->rtm_protocol = fi->fib_protocol;
|
||||||
|
|
||||||
if (rtm->rtm_dst_len)
|
if (rtm->rtm_dst_len)
|
||||||
NLA_PUT_U32(skb, RTA_DST, dst);
|
NLA_PUT_BE32(skb, RTA_DST, dst);
|
||||||
|
|
||||||
if (fi->fib_priority)
|
if (fi->fib_priority)
|
||||||
NLA_PUT_U32(skb, RTA_PRIORITY, fi->fib_priority);
|
NLA_PUT_U32(skb, RTA_PRIORITY, fi->fib_priority);
|
||||||
|
@ -961,11 +961,11 @@ int fib_dump_info(struct sk_buff *skb, u32 pid, u32 seq, int event,
|
||||||
goto nla_put_failure;
|
goto nla_put_failure;
|
||||||
|
|
||||||
if (fi->fib_prefsrc)
|
if (fi->fib_prefsrc)
|
||||||
NLA_PUT_U32(skb, RTA_PREFSRC, fi->fib_prefsrc);
|
NLA_PUT_BE32(skb, RTA_PREFSRC, fi->fib_prefsrc);
|
||||||
|
|
||||||
if (fi->fib_nhs == 1) {
|
if (fi->fib_nhs == 1) {
|
||||||
if (fi->fib_nh->nh_gw)
|
if (fi->fib_nh->nh_gw)
|
||||||
NLA_PUT_U32(skb, RTA_GATEWAY, fi->fib_nh->nh_gw);
|
NLA_PUT_BE32(skb, RTA_GATEWAY, fi->fib_nh->nh_gw);
|
||||||
|
|
||||||
if (fi->fib_nh->nh_oif)
|
if (fi->fib_nh->nh_oif)
|
||||||
NLA_PUT_U32(skb, RTA_OIF, fi->fib_nh->nh_oif);
|
NLA_PUT_U32(skb, RTA_OIF, fi->fib_nh->nh_oif);
|
||||||
|
@ -993,7 +993,7 @@ int fib_dump_info(struct sk_buff *skb, u32 pid, u32 seq, int event,
|
||||||
rtnh->rtnh_ifindex = nh->nh_oif;
|
rtnh->rtnh_ifindex = nh->nh_oif;
|
||||||
|
|
||||||
if (nh->nh_gw)
|
if (nh->nh_gw)
|
||||||
NLA_PUT_U32(skb, RTA_GATEWAY, nh->nh_gw);
|
NLA_PUT_BE32(skb, RTA_GATEWAY, nh->nh_gw);
|
||||||
#ifdef CONFIG_NET_CLS_ROUTE
|
#ifdef CONFIG_NET_CLS_ROUTE
|
||||||
if (nh->nh_tclassid)
|
if (nh->nh_tclassid)
|
||||||
NLA_PUT_U32(skb, RTA_FLOW, nh->nh_tclassid);
|
NLA_PUT_U32(skb, RTA_FLOW, nh->nh_tclassid);
|
||||||
|
|
|
@ -2661,11 +2661,11 @@ static int rt_fill_info(struct sk_buff *skb, u32 pid, u32 seq, int event,
|
||||||
if (rt->rt_flags & RTCF_NOTIFY)
|
if (rt->rt_flags & RTCF_NOTIFY)
|
||||||
r->rtm_flags |= RTM_F_NOTIFY;
|
r->rtm_flags |= RTM_F_NOTIFY;
|
||||||
|
|
||||||
NLA_PUT_U32(skb, RTA_DST, rt->rt_dst);
|
NLA_PUT_BE32(skb, RTA_DST, rt->rt_dst);
|
||||||
|
|
||||||
if (rt->fl.fl4_src) {
|
if (rt->fl.fl4_src) {
|
||||||
r->rtm_src_len = 32;
|
r->rtm_src_len = 32;
|
||||||
NLA_PUT_U32(skb, RTA_SRC, rt->fl.fl4_src);
|
NLA_PUT_BE32(skb, RTA_SRC, rt->fl.fl4_src);
|
||||||
}
|
}
|
||||||
if (rt->u.dst.dev)
|
if (rt->u.dst.dev)
|
||||||
NLA_PUT_U32(skb, RTA_OIF, rt->u.dst.dev->ifindex);
|
NLA_PUT_U32(skb, RTA_OIF, rt->u.dst.dev->ifindex);
|
||||||
|
@ -2678,12 +2678,12 @@ static int rt_fill_info(struct sk_buff *skb, u32 pid, u32 seq, int event,
|
||||||
NLA_PUT_U32(skb, RTA_MP_ALGO, rt->rt_multipath_alg);
|
NLA_PUT_U32(skb, RTA_MP_ALGO, rt->rt_multipath_alg);
|
||||||
#endif
|
#endif
|
||||||
if (rt->fl.iif)
|
if (rt->fl.iif)
|
||||||
NLA_PUT_U32(skb, RTA_PREFSRC, rt->rt_spec_dst);
|
NLA_PUT_BE32(skb, RTA_PREFSRC, rt->rt_spec_dst);
|
||||||
else if (rt->rt_src != rt->fl.fl4_src)
|
else if (rt->rt_src != rt->fl.fl4_src)
|
||||||
NLA_PUT_U32(skb, RTA_PREFSRC, rt->rt_src);
|
NLA_PUT_BE32(skb, RTA_PREFSRC, rt->rt_src);
|
||||||
|
|
||||||
if (rt->rt_dst != rt->rt_gateway)
|
if (rt->rt_dst != rt->rt_gateway)
|
||||||
NLA_PUT_U32(skb, RTA_GATEWAY, rt->rt_gateway);
|
NLA_PUT_BE32(skb, RTA_GATEWAY, rt->rt_gateway);
|
||||||
|
|
||||||
if (rtnetlink_put_metrics(skb, rt->u.dst.metrics) < 0)
|
if (rtnetlink_put_metrics(skb, rt->u.dst.metrics) < 0)
|
||||||
goto nla_put_failure;
|
goto nla_put_failure;
|
||||||
|
@ -2768,8 +2768,8 @@ int inet_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr* nlh, void *arg)
|
||||||
skb->nh.iph->protocol = IPPROTO_ICMP;
|
skb->nh.iph->protocol = IPPROTO_ICMP;
|
||||||
skb_reserve(skb, MAX_HEADER + sizeof(struct iphdr));
|
skb_reserve(skb, MAX_HEADER + sizeof(struct iphdr));
|
||||||
|
|
||||||
src = tb[RTA_SRC] ? nla_get_u32(tb[RTA_SRC]) : 0;
|
src = tb[RTA_SRC] ? nla_get_be32(tb[RTA_SRC]) : 0;
|
||||||
dst = tb[RTA_DST] ? nla_get_u32(tb[RTA_DST]) : 0;
|
dst = tb[RTA_DST] ? nla_get_be32(tb[RTA_DST]) : 0;
|
||||||
iif = tb[RTA_IIF] ? nla_get_u32(tb[RTA_IIF]) : 0;
|
iif = tb[RTA_IIF] ? nla_get_u32(tb[RTA_IIF]) : 0;
|
||||||
|
|
||||||
if (iif) {
|
if (iif) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue