Commit 963bfeeeec913d135c15dc400f2f86cb62655d81

Authored by Eric Dumazet
Committed by David S. Miller
1 parent e955cead03

net: RTA_MARK addition

Add a new rt attribute, RTA_MARK, and use it in
rt_fill_info()/inet_rtm_getroute() to support following commands :

ip route get 192.168.20.110 mark NUMBER
ip route get 192.168.20.108 from 192.168.20.110 iif eth1 mark NUMBER
ip route list cache [192.168.20.110] mark NUMBER

Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

Showing 2 changed files with 8 additions and 0 deletions Side-by-side Diff

include/linux/rtnetlink.h
... ... @@ -282,6 +282,7 @@
282 282 RTA_SESSION, /* no longer used */
283 283 RTA_MP_ALGO, /* no longer used */
284 284 RTA_TABLE,
  285 + RTA_MARK,
285 286 __RTA_MAX
286 287 };
287 288  
... ... @@ -2878,6 +2878,9 @@
2878 2878 if (rtnetlink_put_metrics(skb, rt->dst.metrics) < 0)
2879 2879 goto nla_put_failure;
2880 2880  
  2881 + if (rt->fl.mark)
  2882 + NLA_PUT_BE32(skb, RTA_MARK, rt->fl.mark);
  2883 +
2881 2884 error = rt->dst.error;
2882 2885 expires = rt->dst.expires ? rt->dst.expires - jiffies : 0;
2883 2886 if (rt->peer) {
... ... @@ -2933,6 +2936,7 @@
2933 2936 __be32 src = 0;
2934 2937 u32 iif;
2935 2938 int err;
  2939 + int mark;
2936 2940 struct sk_buff *skb;
2937 2941  
2938 2942 err = nlmsg_parse(nlh, sizeof(*rtm), tb, RTA_MAX, rtm_ipv4_policy);
... ... @@ -2960,6 +2964,7 @@
2960 2964 src = tb[RTA_SRC] ? nla_get_be32(tb[RTA_SRC]) : 0;
2961 2965 dst = tb[RTA_DST] ? nla_get_be32(tb[RTA_DST]) : 0;
2962 2966 iif = tb[RTA_IIF] ? nla_get_u32(tb[RTA_IIF]) : 0;
  2967 + mark = tb[RTA_MARK] ? nla_get_u32(tb[RTA_MARK]) : 0;
2963 2968  
2964 2969 if (iif) {
2965 2970 struct net_device *dev;
... ... @@ -2972,6 +2977,7 @@
2972 2977  
2973 2978 skb->protocol = htons(ETH_P_IP);
2974 2979 skb->dev = dev;
  2980 + skb->mark = mark;
2975 2981 local_bh_disable();
2976 2982 err = ip_route_input(skb, dst, src, rtm->rtm_tos, dev);
2977 2983 local_bh_enable();
... ... @@ -2989,6 +2995,7 @@
2989 2995 },
2990 2996 },
2991 2997 .oif = tb[RTA_OIF] ? nla_get_u32(tb[RTA_OIF]) : 0,
  2998 + .mark = mark,
2992 2999 };
2993 3000 err = ip_route_output_key(net, &rt, &fl);
2994 3001 }