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 |
35 |