Lines Matching refs:gnode

185 					      struct amt_group_node *gnode,  in amt_lookup_src()  argument
192 hlist_for_each_entry_rcu(snode, &gnode->sources[hash], node) in amt_lookup_src()
213 struct amt_group_node *gnode; in amt_lookup_group() local
215 hlist_for_each_entry_rcu(gnode, &tunnel->groups[hash], node) { in amt_lookup_group()
216 if (amt_addr_equal(&gnode->group_addr, group) && in amt_lookup_group()
217 amt_addr_equal(&gnode->host_addr, host) && in amt_lookup_group()
218 gnode->v6 == v6) in amt_lookup_group()
219 return gnode; in amt_lookup_group()
227 struct amt_group_node *gnode = snode->gnode; in amt_destroy_source() local
230 tunnel = gnode->tunnel_list; in amt_destroy_source()
232 if (!gnode->v6) { in amt_destroy_source()
233 netdev_dbg(snode->gnode->amt->dev, in amt_destroy_source()
236 &gnode->group_addr.ip4); in amt_destroy_source()
239 netdev_dbg(snode->gnode->amt->dev, in amt_destroy_source()
242 &gnode->group_addr.ip6); in amt_destroy_source()
249 gnode->nr_sources--; in amt_destroy_source()
255 static void amt_del_group(struct amt_dev *amt, struct amt_group_node *gnode) in amt_del_group() argument
261 if (cancel_delayed_work(&gnode->group_timer)) in amt_del_group()
263 hlist_del_rcu(&gnode->node); in amt_del_group()
264 gnode->tunnel_list->nr_groups--; in amt_del_group()
266 if (!gnode->v6) in amt_del_group()
268 &gnode->group_addr.ip4); in amt_del_group()
272 &gnode->group_addr.ip6); in amt_del_group()
275 hlist_for_each_entry_safe(snode, t, &gnode->sources[i], node) in amt_del_group()
281 kfree_rcu(gnode, rcu); in amt_del_group()
294 struct amt_group_node *gnode = snode->gnode; in amt_source_work() local
295 struct amt_dev *amt = gnode->amt; in amt_source_work()
298 tunnel = gnode->tunnel_list; in amt_source_work()
301 if (gnode->filter_mode == MCAST_INCLUDE) { in amt_source_work()
303 if (!gnode->nr_sources) in amt_source_work()
304 amt_del_group(amt, gnode); in amt_source_work()
316 struct amt_group_node *gnode, in amt_act_src() argument
332 gnode->group_timer.timer.expires); in amt_act_src()
352 if (!gnode->v6) in amt_act_src()
355 &gnode->group_addr.ip4, in amt_act_src()
361 &gnode->group_addr.ip6, in amt_act_src()
366 static struct amt_source_node *amt_alloc_snode(struct amt_group_node *gnode, in amt_alloc_snode() argument
376 snode->gnode = gnode; in amt_alloc_snode()
412 struct amt_group_node *gnode = container_of(to_delayed_work(work), in amt_group_work() local
415 struct amt_tunnel_list *tunnel = gnode->tunnel_list; in amt_group_work()
416 struct amt_dev *amt = gnode->amt; in amt_group_work()
425 if (gnode->filter_mode == MCAST_INCLUDE) { in amt_group_work()
434 &gnode->sources[i], node) { in amt_group_work()
445 amt_del_group(amt, gnode); in amt_group_work()
447 gnode->filter_mode = MCAST_INCLUDE; in amt_group_work()
471 struct amt_group_node *gnode; in amt_add_group() local
478 gnode = kzalloc(sizeof(*gnode) + in amt_add_group()
481 if (unlikely(!gnode)) in amt_add_group()
484 gnode->amt = amt; in amt_add_group()
485 gnode->group_addr = *group; in amt_add_group()
486 gnode->host_addr = *host; in amt_add_group()
487 gnode->v6 = v6; in amt_add_group()
488 gnode->tunnel_list = tunnel; in amt_add_group()
489 gnode->filter_mode = MCAST_INCLUDE; in amt_add_group()
490 INIT_HLIST_NODE(&gnode->node); in amt_add_group()
491 INIT_DELAYED_WORK(&gnode->group_timer, amt_group_work); in amt_add_group()
493 INIT_HLIST_HEAD(&gnode->sources[i]); in amt_add_group()
496 hlist_add_head_rcu(&gnode->node, &tunnel->groups[hash]); in amt_add_group()
499 if (!gnode->v6) in amt_add_group()
501 &gnode->group_addr.ip4); in amt_add_group()
505 &gnode->group_addr.ip6); in amt_add_group()
508 return gnode; in amt_add_group()
1178 struct amt_group_node *gnode; in amt_dev_xmit() local
1278 hlist_for_each_entry_rcu(gnode, &tunnel->groups[hash], in amt_dev_xmit()
1281 if (gnode->group_addr.ip4 == iph->daddr) in amt_dev_xmit()
1285 if (ipv6_addr_equal(&gnode->group_addr.ip6, in amt_dev_xmit()
1327 struct amt_group_node *gnode; in amt_clear_groups() local
1334 hlist_for_each_entry_safe(gnode, t, &tunnel->groups[i], node) in amt_clear_groups()
1335 amt_del_group(amt, gnode); in amt_clear_groups()
1359 struct amt_group_node *gnode) in amt_cleanup_srcs() argument
1367 hlist_for_each_entry_safe(snode, t, &gnode->sources[i], node) { in amt_cleanup_srcs()
1375 hlist_for_each_entry_rcu(snode, &gnode->sources[i], node) { in amt_cleanup_srcs()
1377 if (!gnode->v6) in amt_cleanup_srcs()
1378 netdev_dbg(snode->gnode->amt->dev, in amt_cleanup_srcs()
1381 &gnode->group_addr.ip4); in amt_cleanup_srcs()
1384 netdev_dbg(snode->gnode->amt->dev, in amt_cleanup_srcs()
1387 &gnode->group_addr.ip6); in amt_cleanup_srcs()
1394 struct amt_group_node *gnode, void *grec, in amt_add_srcs() argument
1428 if (amt_lookup_src(tunnel, gnode, AMT_FILTER_ALL, &src)) in amt_add_srcs()
1431 snode = amt_alloc_snode(gnode, &src); in amt_add_srcs()
1434 hlist_add_head_rcu(&snode->node, &gnode->sources[hash]); in amt_add_srcs()
1436 gnode->nr_sources++; in amt_add_srcs()
1438 if (!gnode->v6) in amt_add_srcs()
1439 netdev_dbg(snode->gnode->amt->dev, in amt_add_srcs()
1442 &gnode->group_addr.ip4); in amt_add_srcs()
1445 netdev_dbg(snode->gnode->amt->dev, in amt_add_srcs()
1448 &gnode->group_addr.ip6); in amt_add_srcs()
1474 struct amt_group_node *gnode, in amt_lookup_act_srcs() argument
1516 snode = amt_lookup_src(tunnel, gnode, filter, &src); in amt_lookup_act_srcs()
1519 amt_act_src(tunnel, gnode, snode, act); in amt_lookup_act_srcs()
1525 hlist_for_each_entry_safe(snode, t, &gnode->sources[i], in amt_lookup_act_srcs()
1528 amt_act_src(tunnel, gnode, snode, act); in amt_lookup_act_srcs()
1539 snode = amt_lookup_src(tunnel, gnode, filter, &src); in amt_lookup_act_srcs()
1542 amt_act_src(tunnel, gnode, snode, act); in amt_lookup_act_srcs()
1548 hlist_for_each_entry_safe(snode, t, &gnode->sources[i], in amt_lookup_act_srcs()
1565 amt_act_src(tunnel, gnode, snode, act); in amt_lookup_act_srcs()
1581 snode = amt_lookup_src(tunnel, gnode, AMT_FILTER_ALL, in amt_lookup_act_srcs()
1584 snode = amt_lookup_src(tunnel, gnode, in amt_lookup_act_srcs()
1587 amt_act_src(tunnel, gnode, snode, act); in amt_lookup_act_srcs()
1599 struct amt_group_node *gnode, in amt_mcast_is_in_handler() argument
1602 if (gnode->filter_mode == MCAST_INCLUDE) { in amt_mcast_is_in_handler()
1608 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_UNI, in amt_mcast_is_in_handler()
1613 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_UNI, in amt_mcast_is_in_handler()
1618 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_INT, in amt_mcast_is_in_handler()
1628 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_INT, in amt_mcast_is_in_handler()
1633 amt_lookup_act_srcs(tunnel, gnode, zero_grec, AMT_OPS_UNI, in amt_mcast_is_in_handler()
1638 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_INT, in amt_mcast_is_in_handler()
1643 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_SUB, in amt_mcast_is_in_handler()
1652 struct amt_group_node *gnode, in amt_mcast_is_ex_handler() argument
1655 if (gnode->filter_mode == MCAST_INCLUDE) { in amt_mcast_is_ex_handler()
1663 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_INT, in amt_mcast_is_ex_handler()
1668 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_SUB_REV, in amt_mcast_is_ex_handler()
1673 amt_lookup_act_srcs(tunnel, gnode, zero_grec, AMT_OPS_UNI, in amt_mcast_is_ex_handler()
1678 if (!mod_delayed_work(amt_wq, &gnode->group_timer, in amt_mcast_is_ex_handler()
1681 gnode->filter_mode = MCAST_EXCLUDE; in amt_mcast_is_ex_handler()
1692 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_SUB_REV, in amt_mcast_is_ex_handler()
1697 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_INT, in amt_mcast_is_ex_handler()
1702 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_SUB_REV, in amt_mcast_is_ex_handler()
1707 if (!mod_delayed_work(amt_wq, &gnode->group_timer, in amt_mcast_is_ex_handler()
1716 struct amt_group_node *gnode, in amt_mcast_to_in_handler() argument
1719 if (gnode->filter_mode == MCAST_INCLUDE) { in amt_mcast_to_in_handler()
1726 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_UNI, in amt_mcast_to_in_handler()
1731 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_UNI, in amt_mcast_to_in_handler()
1736 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_INT, in amt_mcast_to_in_handler()
1748 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_UNI, in amt_mcast_to_in_handler()
1753 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_UNI, in amt_mcast_to_in_handler()
1761 amt_lookup_act_srcs(tunnel, gnode, zero_grec, AMT_OPS_UNI, in amt_mcast_to_in_handler()
1768 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_INT, in amt_mcast_to_in_handler()
1777 struct amt_group_node *gnode, in amt_mcast_to_ex_handler() argument
1780 if (gnode->filter_mode == MCAST_INCLUDE) { in amt_mcast_to_ex_handler()
1789 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_INT, in amt_mcast_to_ex_handler()
1794 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_SUB_REV, in amt_mcast_to_ex_handler()
1799 amt_lookup_act_srcs(tunnel, gnode, zero_grec, AMT_OPS_UNI, in amt_mcast_to_ex_handler()
1804 if (!mod_delayed_work(amt_wq, &gnode->group_timer, in amt_mcast_to_ex_handler()
1807 gnode->filter_mode = MCAST_EXCLUDE; in amt_mcast_to_ex_handler()
1819 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_SUB_REV, in amt_mcast_to_ex_handler()
1824 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_SUB_REV, in amt_mcast_to_ex_handler()
1829 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_INT, in amt_mcast_to_ex_handler()
1834 if (!mod_delayed_work(amt_wq, &gnode->group_timer, in amt_mcast_to_ex_handler()
1843 struct amt_group_node *gnode, in amt_mcast_allow_handler() argument
1846 if (gnode->filter_mode == MCAST_INCLUDE) { in amt_mcast_allow_handler()
1852 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_UNI, in amt_mcast_allow_handler()
1857 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_INT, in amt_mcast_allow_handler()
1867 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_UNI, in amt_mcast_allow_handler()
1872 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_SUB, in amt_mcast_allow_handler()
1879 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_INT, in amt_mcast_allow_handler()
1888 struct amt_group_node *gnode, in amt_mcast_block_handler() argument
1891 if (gnode->filter_mode == MCAST_INCLUDE) { in amt_mcast_block_handler()
1897 amt_lookup_act_srcs(tunnel, gnode, zero_grec, AMT_OPS_UNI, in amt_mcast_block_handler()
1908 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_SUB_REV, in amt_mcast_block_handler()
1913 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_UNI, in amt_mcast_block_handler()
1918 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_SUB_REV, in amt_mcast_block_handler()
1923 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_UNI, in amt_mcast_block_handler()
1947 struct amt_group_node *gnode; in amt_igmpv2_report_handler() local
1955 gnode = amt_lookup_group(tunnel, &group, &host, false); in amt_igmpv2_report_handler()
1956 if (!gnode) { in amt_igmpv2_report_handler()
1957 gnode = amt_add_group(amt, tunnel, &group, &host, false); in amt_igmpv2_report_handler()
1958 if (!IS_ERR(gnode)) { in amt_igmpv2_report_handler()
1959 gnode->filter_mode = MCAST_EXCLUDE; in amt_igmpv2_report_handler()
1960 if (!mod_delayed_work(amt_wq, &gnode->group_timer, in amt_igmpv2_report_handler()
1984 struct amt_group_node *gnode; in amt_igmpv2_leave_handler() local
1992 gnode = amt_lookup_group(tunnel, &group, &host, false); in amt_igmpv2_leave_handler()
1993 if (gnode) in amt_igmpv2_leave_handler()
1994 amt_del_group(amt, gnode); in amt_igmpv2_leave_handler()
2004 struct amt_group_node *gnode; in amt_igmpv3_report_handler() local
2026 gnode = amt_lookup_group(tunnel, &group, &host, false); in amt_igmpv3_report_handler()
2027 if (!gnode) { in amt_igmpv3_report_handler()
2028 gnode = amt_add_group(amt, tunnel, &group, &host, in amt_igmpv3_report_handler()
2030 if (IS_ERR(gnode)) in amt_igmpv3_report_handler()
2034 amt_add_srcs(amt, tunnel, gnode, grec, false); in amt_igmpv3_report_handler()
2037 amt_mcast_is_in_handler(amt, tunnel, gnode, grec, in amt_igmpv3_report_handler()
2041 amt_mcast_is_ex_handler(amt, tunnel, gnode, grec, in amt_igmpv3_report_handler()
2045 amt_mcast_to_in_handler(amt, tunnel, gnode, grec, in amt_igmpv3_report_handler()
2049 amt_mcast_to_ex_handler(amt, tunnel, gnode, grec, in amt_igmpv3_report_handler()
2053 amt_mcast_allow_handler(amt, tunnel, gnode, grec, in amt_igmpv3_report_handler()
2057 amt_mcast_block_handler(amt, tunnel, gnode, grec, in amt_igmpv3_report_handler()
2063 amt_cleanup_srcs(amt, tunnel, gnode); in amt_igmpv3_report_handler()
2108 struct amt_group_node *gnode; in amt_mldv1_report_handler() local
2114 gnode = amt_lookup_group(tunnel, &group, &host, true); in amt_mldv1_report_handler()
2115 if (!gnode) { in amt_mldv1_report_handler()
2116 gnode = amt_add_group(amt, tunnel, &group, &host, true); in amt_mldv1_report_handler()
2117 if (!IS_ERR(gnode)) { in amt_mldv1_report_handler()
2118 gnode->filter_mode = MCAST_EXCLUDE; in amt_mldv1_report_handler()
2119 if (!mod_delayed_work(amt_wq, &gnode->group_timer, in amt_mldv1_report_handler()
2145 struct amt_group_node *gnode; in amt_mldv1_leave_handler() local
2152 gnode = amt_lookup_group(tunnel, &group, &host, true); in amt_mldv1_leave_handler()
2153 if (gnode) { in amt_mldv1_leave_handler()
2154 amt_del_group(amt, gnode); in amt_mldv1_leave_handler()
2166 struct amt_group_node *gnode; in amt_mldv2_report_handler() local
2188 gnode = amt_lookup_group(tunnel, &group, &host, true); in amt_mldv2_report_handler()
2189 if (!gnode) { in amt_mldv2_report_handler()
2190 gnode = amt_add_group(amt, tunnel, &group, &host, in amt_mldv2_report_handler()
2192 if (IS_ERR(gnode)) in amt_mldv2_report_handler()
2196 amt_add_srcs(amt, tunnel, gnode, grec, true); in amt_mldv2_report_handler()
2199 amt_mcast_is_in_handler(amt, tunnel, gnode, grec, in amt_mldv2_report_handler()
2203 amt_mcast_is_ex_handler(amt, tunnel, gnode, grec, in amt_mldv2_report_handler()
2207 amt_mcast_to_in_handler(amt, tunnel, gnode, grec, in amt_mldv2_report_handler()
2211 amt_mcast_to_ex_handler(amt, tunnel, gnode, grec, in amt_mldv2_report_handler()
2215 amt_mcast_allow_handler(amt, tunnel, gnode, grec, in amt_mldv2_report_handler()
2219 amt_mcast_block_handler(amt, tunnel, gnode, grec, in amt_mldv2_report_handler()
2225 amt_cleanup_srcs(amt, tunnel, gnode); in amt_mldv2_report_handler()