nhg               152 include/net/nexthop.h struct nexthop *nexthop_mpath_select(const struct nh_group *nhg, int nhsel)
nhg               157 include/net/nexthop.h 	if (nhsel >= nhg->num_nh)
nhg               160 include/net/nexthop.h 	return nhg->nh_entries[nhsel].nh;
nhg               167 include/net/nexthop.h 	struct nh_group *nhg = rtnl_dereference(nh->nh_grp);
nhg               170 include/net/nexthop.h 	for (i = 0; i < nhg->num_nh; i++) {
nhg               171 include/net/nexthop.h 		struct nexthop *nhe = nhg->nh_entries[i].nh;
nhg               174 include/net/nexthop.h 		int weight = nhg->nh_entries[i].weight;
nhg               242 include/net/nexthop.h 		struct nh_group *nhg = rcu_dereference(nh->nh_grp);
nhg               245 include/net/nexthop.h 		for (i = 0; i < nhg->num_nh; i++) {
nhg               246 include/net/nexthop.h 			struct nexthop *nhe = nhg->nh_entries[i].nh;
nhg                63 net/ipv4/nexthop.c 	struct nh_group *nhg;
nhg                66 net/ipv4/nexthop.c 	nhg = rcu_dereference_raw(nh->nh_grp);
nhg                67 net/ipv4/nexthop.c 	for (i = 0; i < nhg->num_nh; ++i) {
nhg                68 net/ipv4/nexthop.c 		struct nh_grp_entry *nhge = &nhg->nh_entries[i];
nhg                74 net/ipv4/nexthop.c 	WARN_ON(nhg->spare == nhg);
nhg                76 net/ipv4/nexthop.c 	kfree(nhg->spare);
nhg                77 net/ipv4/nexthop.c 	kfree(nhg);
nhg               127 net/ipv4/nexthop.c 	struct nh_group *nhg;
nhg               129 net/ipv4/nexthop.c 	nhg = kzalloc(sz, GFP_KERNEL);
nhg               130 net/ipv4/nexthop.c 	if (nhg)
nhg               131 net/ipv4/nexthop.c 		nhg->num_nh = num_nh;
nhg               133 net/ipv4/nexthop.c 	return nhg;
nhg               184 net/ipv4/nexthop.c static int nla_put_nh_group(struct sk_buff *skb, struct nh_group *nhg)
nhg               187 net/ipv4/nexthop.c 	size_t len = nhg->num_nh * sizeof(*p);
nhg               192 net/ipv4/nexthop.c 	if (nhg->mpath)
nhg               203 net/ipv4/nexthop.c 	for (i = 0; i < nhg->num_nh; ++i) {
nhg               204 net/ipv4/nexthop.c 		p->id = nhg->nh_entries[i].nh->id;
nhg               205 net/ipv4/nexthop.c 		p->weight = nhg->nh_entries[i].weight - 1;
nhg               239 net/ipv4/nexthop.c 		struct nh_group *nhg = rtnl_dereference(nh->nh_grp);
nhg               241 net/ipv4/nexthop.c 		if (nla_put_nh_group(skb, nhg))
nhg               293 net/ipv4/nexthop.c 	struct nh_group *nhg = rtnl_dereference(nh->nh_grp);
nhg               294 net/ipv4/nexthop.c 	size_t sz = sizeof(struct nexthop_grp) * nhg->num_nh;
nhg               376 net/ipv4/nexthop.c 		struct nh_group *nhg = rtnl_dereference(nh->nh_grp);
nhg               381 net/ipv4/nexthop.c 		if (nhg->mpath) {
nhg               403 net/ipv4/nexthop.c 	struct nexthop_grp *nhg;
nhg               413 net/ipv4/nexthop.c 	len /= sizeof(*nhg);
nhg               415 net/ipv4/nexthop.c 	nhg = nla_data(tb[NHA_GROUP]);
nhg               417 net/ipv4/nexthop.c 		if (nhg[i].resvd1 || nhg[i].resvd2) {
nhg               421 net/ipv4/nexthop.c 		if (nhg[i].weight > 254) {
nhg               426 net/ipv4/nexthop.c 			if (nhg[i].id == nhg[j].id) {
nhg               433 net/ipv4/nexthop.c 	nhg = nla_data(tb[NHA_GROUP]);
nhg               437 net/ipv4/nexthop.c 		nh = nexthop_find_by_id(net, nhg[i].id);
nhg               493 net/ipv4/nexthop.c 	struct nh_group *nhg;
nhg               499 net/ipv4/nexthop.c 	nhg = rcu_dereference(nh->nh_grp);
nhg               500 net/ipv4/nexthop.c 	for (i = 0; i < nhg->num_nh; ++i) {
nhg               501 net/ipv4/nexthop.c 		struct nh_grp_entry *nhge = &nhg->nh_entries[i];
nhg               538 net/ipv4/nexthop.c 		struct nh_group *nhg;
nhg               541 net/ipv4/nexthop.c 		nhg = rcu_dereference_rtnl(nh->nh_grp);
nhg               542 net/ipv4/nexthop.c 		for (i = 0; i < nhg->num_nh; i++) {
nhg               543 net/ipv4/nexthop.c 			struct nh_grp_entry *nhge = &nhg->nh_entries[i];
nhg               586 net/ipv4/nexthop.c 		struct nh_group *nhg;
nhg               588 net/ipv4/nexthop.c 		nhg = rtnl_dereference(nh->nh_grp);
nhg               589 net/ipv4/nexthop.c 		if (nhg->has_v4)
nhg               653 net/ipv4/nexthop.c 		struct nh_group *nhg;
nhg               661 net/ipv4/nexthop.c 		nhg = rtnl_dereference(nh->nh_grp);
nhg               663 net/ipv4/nexthop.c 		err = nexthop_check_scope(nhg->nh_entries[0].nh, scope, extack);
nhg               686 net/ipv4/nexthop.c static void nh_group_rebalance(struct nh_group *nhg)
nhg               692 net/ipv4/nexthop.c 	for (i = 0; i < nhg->num_nh; ++i)
nhg               693 net/ipv4/nexthop.c 		total += nhg->nh_entries[i].weight;
nhg               695 net/ipv4/nexthop.c 	for (i = 0; i < nhg->num_nh; ++i) {
nhg               696 net/ipv4/nexthop.c 		struct nh_grp_entry *nhge = &nhg->nh_entries[i];
nhg               711 net/ipv4/nexthop.c 	struct nh_group *nhg, *newg;
nhg               716 net/ipv4/nexthop.c 	nhg = rtnl_dereference(nhp->nh_grp);
nhg               717 net/ipv4/nexthop.c 	newg = nhg->spare;
nhg               720 net/ipv4/nexthop.c 	if (nhg->num_nh == 1) {
nhg               725 net/ipv4/nexthop.c 	newg->has_v4 = nhg->has_v4;
nhg               726 net/ipv4/nexthop.c 	newg->mpath = nhg->mpath;
nhg               727 net/ipv4/nexthop.c 	newg->num_nh = nhg->num_nh;
nhg               730 net/ipv4/nexthop.c 	nhges = nhg->nh_entries;
nhg               732 net/ipv4/nexthop.c 	for (i = 0, j = 0; i < nhg->num_nh; ++i) {
nhg               734 net/ipv4/nexthop.c 		if (nhg->nh_entries[i].nh == nh) {
nhg               771 net/ipv4/nexthop.c 	struct nh_group *nhg = rcu_dereference_rtnl(nh->nh_grp);
nhg               772 net/ipv4/nexthop.c 	int i, num_nh = nhg->num_nh;
nhg               775 net/ipv4/nexthop.c 		struct nh_grp_entry *nhge = &nhg->nh_entries[i];
nhg              1104 net/ipv4/nexthop.c 	struct nh_group *nhg;
nhg              1114 net/ipv4/nexthop.c 	nhg = nexthop_grp_alloc(num_nh);
nhg              1115 net/ipv4/nexthop.c 	if (!nhg) {
nhg              1121 net/ipv4/nexthop.c 	nhg->spare = nexthop_grp_alloc(num_nh);
nhg              1122 net/ipv4/nexthop.c 	if (!nhg) {
nhg              1123 net/ipv4/nexthop.c 		kfree(nhg);
nhg              1127 net/ipv4/nexthop.c 	nhg->spare->spare = nhg;
nhg              1129 net/ipv4/nexthop.c 	for (i = 0; i < nhg->num_nh; ++i) {
nhg              1139 net/ipv4/nexthop.c 			nhg->has_v4 = true;
nhg              1141 net/ipv4/nexthop.c 		nhg->nh_entries[i].nh = nhe;
nhg              1142 net/ipv4/nexthop.c 		nhg->nh_entries[i].weight = entry[i].weight + 1;
nhg              1143 net/ipv4/nexthop.c 		list_add(&nhg->nh_entries[i].nh_list, &nhe->grp_list);
nhg              1144 net/ipv4/nexthop.c 		nhg->nh_entries[i].nh_parent = nh;
nhg              1148 net/ipv4/nexthop.c 		nhg->mpath = 1;
nhg              1149 net/ipv4/nexthop.c 		nh_group_rebalance(nhg);
nhg              1152 net/ipv4/nexthop.c 	rcu_assign_pointer(nh->nh_grp, nhg);
nhg              1158 net/ipv4/nexthop.c 		nexthop_put(nhg->nh_entries[i].nh);
nhg              1160 net/ipv4/nexthop.c 	kfree(nhg->spare);
nhg              1161 net/ipv4/nexthop.c 	kfree(nhg);