Commit 963bfeeeec913d135c15dc400f2f86cb62655d81
Committed by
David S. Miller
1 parent
e955cead03
Exists in
master
and in
7 other branches
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
net/ipv4/route.c
... | ... | @@ -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 | } |