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