rtnh                8 include/net/rtnh.h static inline int rtnh_ok(const struct rtnexthop *rtnh, int remaining)
rtnh               10 include/net/rtnh.h 	return remaining >= (int)sizeof(*rtnh) &&
rtnh               11 include/net/rtnh.h 	       rtnh->rtnh_len >= sizeof(*rtnh) &&
rtnh               12 include/net/rtnh.h 	       rtnh->rtnh_len <= remaining;
rtnh               15 include/net/rtnh.h static inline struct rtnexthop *rtnh_next(const struct rtnexthop *rtnh,
rtnh               18 include/net/rtnh.h 	int totlen = NLA_ALIGN(rtnh->rtnh_len);
rtnh               21 include/net/rtnh.h 	return (struct rtnexthop *) ((char *) rtnh + totlen);
rtnh               24 include/net/rtnh.h static inline struct nlattr *rtnh_attrs(const struct rtnexthop *rtnh)
rtnh               26 include/net/rtnh.h 	return (struct nlattr *) ((char *) rtnh + NLA_ALIGN(sizeof(*rtnh)));
rtnh               29 include/net/rtnh.h static inline int rtnh_attrlen(const struct rtnexthop *rtnh)
rtnh               31 include/net/rtnh.h 	return rtnh->rtnh_len - NLA_ALIGN(sizeof(*rtnh));
rtnh              392 include/uapi/linux/rtnetlink.h #define RTNH_OK(rtnh,len) ((rtnh)->rtnh_len >= sizeof(struct rtnexthop) && \
rtnh              393 include/uapi/linux/rtnetlink.h 			   ((int)(rtnh)->rtnh_len) <= (len))
rtnh              394 include/uapi/linux/rtnetlink.h #define RTNH_NEXT(rtnh)	((struct rtnexthop*)(((char*)(rtnh)) + RTNH_ALIGN((rtnh)->rtnh_len)))
rtnh              397 include/uapi/linux/rtnetlink.h #define RTNH_DATA(rtnh)   ((struct rtattr*)(((char*)(rtnh)) + RTNH_LENGTH(0)))
rtnh              180 net/core/lwtunnel.c 	struct rtnexthop *rtnh = (struct rtnexthop *)attr;
rtnh              186 net/core/lwtunnel.c 	while (rtnh_ok(rtnh, remaining)) {
rtnh              187 net/core/lwtunnel.c 		attrlen = rtnh_attrlen(rtnh);
rtnh              189 net/core/lwtunnel.c 			attrs = rtnh_attrs(rtnh);
rtnh              200 net/core/lwtunnel.c 		rtnh = rtnh_next(rtnh, &remaining);
rtnh              637 net/ipv4/fib_semantics.c static int fib_count_nexthops(struct rtnexthop *rtnh, int remaining,
rtnh              642 net/ipv4/fib_semantics.c 	while (rtnh_ok(rtnh, remaining)) {
rtnh              644 net/ipv4/fib_semantics.c 		rtnh = rtnh_next(rtnh, &remaining);
rtnh              658 net/ipv4/fib_semantics.c static int fib_get_nhs(struct fib_info *fi, struct rtnexthop *rtnh,
rtnh              672 net/ipv4/fib_semantics.c 		if (!rtnh_ok(rtnh, remaining)) {
rtnh              678 net/ipv4/fib_semantics.c 		if (rtnh->rtnh_flags & (RTNH_F_DEAD | RTNH_F_LINKDOWN)) {
rtnh              684 net/ipv4/fib_semantics.c 		fib_cfg.fc_flags = (cfg->fc_flags & ~0xFF) | rtnh->rtnh_flags;
rtnh              685 net/ipv4/fib_semantics.c 		fib_cfg.fc_oif = rtnh->rtnh_ifindex;
rtnh              687 net/ipv4/fib_semantics.c 		attrlen = rtnh_attrlen(rtnh);
rtnh              689 net/ipv4/fib_semantics.c 			struct nlattr *nla, *nlav, *attrs = rtnh_attrs(rtnh);
rtnh              719 net/ipv4/fib_semantics.c 				  rtnh->rtnh_hops + 1, extack);
rtnh              723 net/ipv4/fib_semantics.c 		rtnh = rtnh_next(rtnh, &remaining);
rtnh              797 net/ipv4/fib_semantics.c static int fib_get_nhs(struct fib_info *fi, struct rtnexthop *rtnh,
rtnh              836 net/ipv4/fib_semantics.c 	struct rtnexthop *rtnh;
rtnh              882 net/ipv4/fib_semantics.c 	rtnh = cfg->fc_mp;
rtnh              888 net/ipv4/fib_semantics.c 		if (!rtnh_ok(rtnh, remaining))
rtnh              891 net/ipv4/fib_semantics.c 		if (rtnh->rtnh_ifindex && rtnh->rtnh_ifindex != nh->fib_nh_oif)
rtnh              894 net/ipv4/fib_semantics.c 		attrlen = rtnh_attrlen(rtnh);
rtnh              896 net/ipv4/fib_semantics.c 			struct nlattr *nla, *nlav, *attrs = rtnh_attrs(rtnh);
rtnh              940 net/ipv4/fib_semantics.c 		rtnh = rtnh_next(rtnh, &remaining);
rtnh             1660 net/ipv4/fib_semantics.c 	struct rtnexthop *rtnh;
rtnh             1663 net/ipv4/fib_semantics.c 	rtnh = nla_reserve_nohdr(skb, sizeof(*rtnh));
rtnh             1664 net/ipv4/fib_semantics.c 	if (!rtnh)
rtnh             1667 net/ipv4/fib_semantics.c 	rtnh->rtnh_hops = nh_weight - 1;
rtnh             1668 net/ipv4/fib_semantics.c 	rtnh->rtnh_ifindex = dev ? dev->ifindex : 0;
rtnh             1673 net/ipv4/fib_semantics.c 	rtnh->rtnh_flags = flags;
rtnh             1676 net/ipv4/fib_semantics.c 	rtnh->rtnh_len = nlmsg_get_pos(skb) - (void *)rtnh;
rtnh             2647 net/ipv4/ipmr.c 	struct rtnexthop *rtnh = nla_data(nla);
rtnh             2650 net/ipv4/ipmr.c 	while (rtnh_ok(rtnh, remaining)) {
rtnh             2651 net/ipv4/ipmr.c 		mfcc->mfcc_ttls[vifi] = rtnh->rtnh_hops;
rtnh             2654 net/ipv4/ipmr.c 		rtnh = rtnh_next(rtnh, &remaining);
rtnh             5065 net/ipv6/route.c 	struct rtnexthop *rtnh;
rtnh             5083 net/ipv6/route.c 	rtnh = (struct rtnexthop *)cfg->fc_mp;
rtnh             5088 net/ipv6/route.c 	while (rtnh_ok(rtnh, remaining)) {
rtnh             5090 net/ipv6/route.c 		if (rtnh->rtnh_ifindex)
rtnh             5091 net/ipv6/route.c 			r_cfg.fc_ifindex = rtnh->rtnh_ifindex;
rtnh             5093 net/ipv6/route.c 		attrlen = rtnh_attrlen(rtnh);
rtnh             5095 net/ipv6/route.c 			struct nlattr *nla, *attrs = rtnh_attrs(rtnh);
rtnh             5108 net/ipv6/route.c 		r_cfg.fc_flags |= (rtnh->rtnh_flags & RTNH_F_ONLINK);
rtnh             5123 net/ipv6/route.c 		rt->fib6_nh->fib_nh_weight = rtnh->rtnh_hops + 1;
rtnh             5132 net/ipv6/route.c 		rtnh = rtnh_next(rtnh, &remaining);
rtnh             5232 net/ipv6/route.c 	struct rtnexthop *rtnh;
rtnh             5238 net/ipv6/route.c 	rtnh = (struct rtnexthop *)cfg->fc_mp;
rtnh             5241 net/ipv6/route.c 	while (rtnh_ok(rtnh, remaining)) {
rtnh             5243 net/ipv6/route.c 		if (rtnh->rtnh_ifindex)
rtnh             5244 net/ipv6/route.c 			r_cfg.fc_ifindex = rtnh->rtnh_ifindex;
rtnh             5246 net/ipv6/route.c 		attrlen = rtnh_attrlen(rtnh);
rtnh             5248 net/ipv6/route.c 			struct nlattr *nla, *attrs = rtnh_attrs(rtnh);
rtnh             5260 net/ipv6/route.c 		rtnh = rtnh_next(rtnh, &remaining);
rtnh              833 net/mpls/af_mpls.c static u8 mpls_count_nexthops(struct rtnexthop *rtnh, int len,
rtnh              843 net/mpls/af_mpls.c 	while (rtnh_ok(rtnh, remaining)) {
rtnh              844 net/mpls/af_mpls.c 		struct nlattr *nla, *attrs = rtnh_attrs(rtnh);
rtnh              848 net/mpls/af_mpls.c 		attrlen = rtnh_attrlen(rtnh);
rtnh              875 net/mpls/af_mpls.c 		rtnh = rtnh_next(rtnh, &remaining);
rtnh              886 net/mpls/af_mpls.c 	struct rtnexthop *rtnh = cfg->rc_mp;
rtnh              899 net/mpls/af_mpls.c 		if (!rtnh_ok(rtnh, remaining))
rtnh              905 net/mpls/af_mpls.c 		if (rtnh->rtnh_hops || rtnh->rtnh_flags)
rtnh              908 net/mpls/af_mpls.c 		attrlen = rtnh_attrlen(rtnh);
rtnh              910 net/mpls/af_mpls.c 			struct nlattr *attrs = rtnh_attrs(rtnh);
rtnh              917 net/mpls/af_mpls.c 				    rtnh->rtnh_ifindex, nla_via, nla_newdst,
rtnh              925 net/mpls/af_mpls.c 		rtnh = rtnh_next(rtnh, &remaining);
rtnh             2015 net/mpls/af_mpls.c 		struct rtnexthop *rtnh;
rtnh             2029 net/mpls/af_mpls.c 			rtnh = nla_reserve_nohdr(skb, sizeof(*rtnh));
rtnh             2030 net/mpls/af_mpls.c 			if (!rtnh)
rtnh             2033 net/mpls/af_mpls.c 			rtnh->rtnh_ifindex = dev->ifindex;
rtnh             2035 net/mpls/af_mpls.c 				rtnh->rtnh_flags |= RTNH_F_LINKDOWN;
rtnh             2039 net/mpls/af_mpls.c 				rtnh->rtnh_flags |= RTNH_F_DEAD;
rtnh             2054 net/mpls/af_mpls.c 			rtnh->rtnh_len = nlmsg_get_pos(skb) - (void *)rtnh;