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 8static 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 15static 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 24static inline struct nlattr *rtnh_attrs(const struct rtnexthop *rtnh) 25{ 26 return (struct nlattr *) ((char *) rtnh + NLA_ALIGN(sizeof(*rtnh))); 27} 28 29static inline int rtnh_attrlen(const struct rtnexthop *rtnh) 30{ 31 return rtnh->rtnh_len - NLA_ALIGN(sizeof(*rtnh)); 32} 33 34#endif 35