rtnexthop
while (start_size < NLA_DATA_LEN(nla) / sizeof(struct rtnexthop))
#define _IN(_field) offsetof(struct rtnexthop, _field)
SNL_DECLARE_PARSER_EXT(_mpath_nh_parser, sizeof(struct rtnexthop),
#define RTNH_HDRLEN ((int)sizeof(struct rtnexthop))
#define RTNH_NEXT(_nh) ((struct rtnexthop *)((char *)(_nh) + _RTNH_ALIGNED_LEN(_nh)))
struct rtnexthop *rtnh = nlmsg_reserve_object(nw, struct rtnexthop);
rtnh = nlattr_restore_offset(nw, nh_off, struct rtnexthop);
#define _IN(_field) offsetof(struct rtnexthop, _field)
NL_DECLARE_PARSER_EXT(mpath_parser, struct rtnexthop, NULL, nlf_p_rtnh, nla_p_rtnh, post_p_rtnh);
struct rtnexthop *rtnh;
max_nhops = data_len / sizeof(struct rtnexthop);
for (rtnh = (struct rtnexthop *)(nla + 1); data_len > 0; ) {
rtnh = (struct rtnexthop *)((char *)rtnh + len);