David Brazdil | 0f672f6 | 2019-12-10 10:32:29 +0000 | [diff] [blame^] | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
| 2 | #ifndef __NET_RTNH_H |
| 3 | #define __NET_RTNH_H |
| 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 | { |
| 10 | return remaining >= (int)sizeof(*rtnh) && |
| 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 |