Greg Kroah-Hartman | b244131 | 2017-11-01 15:07:57 +0100 | [diff] [blame] | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
David Ahern | 3c618c1 | 2019-04-20 09:28:20 -0700 | [diff] [blame] | 2 | #ifndef __NET_RTNH_H |
| 3 | #define __NET_RTNH_H |
Thomas Graf | 4e902c5 | 2006-08-17 18:14:52 -0700 | [diff] [blame] | 4 | |
| 5 | #include <linux/rtnetlink.h> |
| 6 | #include <net/netlink.h> |
| 7 | |
| 8 | static inline int rtnh_ok(const struct rtnexthop *rtnh, int remaining) |
| 9 | { |
Eric Dumazet | b1993a2 | 2018-04-07 13:42:38 -0700 | [diff] [blame] | 10 | return remaining >= (int)sizeof(*rtnh) && |
Thomas Graf | 4e902c5 | 2006-08-17 18:14:52 -0700 | [diff] [blame] | 11 | rtnh->rtnh_len >= sizeof(*rtnh) && |
| 12 | rtnh->rtnh_len <= remaining; |
| 13 | } |
| 14 | |
| 15 | static inline struct rtnexthop *rtnh_next(const struct rtnexthop *rtnh, |
| 16 | int *remaining) |
| 17 | { |
| 18 | int totlen = NLA_ALIGN(rtnh->rtnh_len); |
| 19 | |
| 20 | *remaining -= totlen; |
| 21 | return (struct rtnexthop *) ((char *) rtnh + totlen); |
| 22 | } |
| 23 | |
| 24 | static inline struct nlattr *rtnh_attrs(const struct rtnexthop *rtnh) |
| 25 | { |
| 26 | return (struct nlattr *) ((char *) rtnh + NLA_ALIGN(sizeof(*rtnh))); |
| 27 | } |
| 28 | |
| 29 | static inline int rtnh_attrlen(const struct rtnexthop *rtnh) |
| 30 | { |
| 31 | return rtnh->rtnh_len - NLA_ALIGN(sizeof(*rtnh)); |
| 32 | } |
| 33 | |
| 34 | #endif |