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 { 9 return remaining >= sizeof(*rtnh) && 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 34