Lines Matching refs:gnode
183 struct amt_group_node *gnode,
190 hlist_for_each_entry_rcu(snode, &gnode->sources[hash], node)
211 struct amt_group_node *gnode;
213 hlist_for_each_entry_rcu(gnode, &tunnel->groups[hash], node) {
214 if (amt_addr_equal(&gnode->group_addr, group) &&
215 amt_addr_equal(&gnode->host_addr, host) &&
216 gnode->v6 == v6)
217 return gnode;
225 struct amt_group_node *gnode = snode->gnode;
228 tunnel = gnode->tunnel_list;
230 if (!gnode->v6) {
231 netdev_dbg(snode->gnode->amt->dev,
234 &gnode->group_addr.ip4);
237 netdev_dbg(snode->gnode->amt->dev,
240 &gnode->group_addr.ip6);
247 gnode->nr_sources--;
253 static void amt_del_group(struct amt_dev *amt, struct amt_group_node *gnode)
259 if (cancel_delayed_work(&gnode->group_timer))
261 hlist_del_rcu(&gnode->node);
262 gnode->tunnel_list->nr_groups--;
264 if (!gnode->v6)
266 &gnode->group_addr.ip4);
270 &gnode->group_addr.ip6);
273 hlist_for_each_entry_safe(snode, t, &gnode->sources[i], node)
279 kfree_rcu(gnode, rcu);
292 struct amt_group_node *gnode = snode->gnode;
293 struct amt_dev *amt = gnode->amt;
296 tunnel = gnode->tunnel_list;
299 if (gnode->filter_mode == MCAST_INCLUDE) {
301 if (!gnode->nr_sources)
302 amt_del_group(amt, gnode);
314 struct amt_group_node *gnode,
330 gnode->group_timer.timer.expires);
350 if (!gnode->v6)
353 &gnode->group_addr.ip4,
359 &gnode->group_addr.ip6,
364 static struct amt_source_node *amt_alloc_snode(struct amt_group_node *gnode,
374 snode->gnode = gnode;
410 struct amt_group_node *gnode = container_of(to_delayed_work(work),
413 struct amt_tunnel_list *tunnel = gnode->tunnel_list;
414 struct amt_dev *amt = gnode->amt;
423 if (gnode->filter_mode == MCAST_INCLUDE) {
432 &gnode->sources[i], node) {
443 amt_del_group(amt, gnode);
445 gnode->filter_mode = MCAST_INCLUDE;
469 struct amt_group_node *gnode;
476 gnode = kzalloc(sizeof(*gnode) +
479 if (unlikely(!gnode))
482 gnode->amt = amt;
483 gnode->group_addr = *group;
484 gnode->host_addr = *host;
485 gnode->v6 = v6;
486 gnode->tunnel_list = tunnel;
487 gnode->filter_mode = MCAST_INCLUDE;
488 INIT_HLIST_NODE(&gnode->node);
489 INIT_DELAYED_WORK(&gnode->group_timer, amt_group_work);
491 INIT_HLIST_HEAD(&gnode->sources[i]);
494 hlist_add_head_rcu(&gnode->node, &tunnel->groups[hash]);
497 if (!gnode->v6)
499 &gnode->group_addr.ip4);
503 &gnode->group_addr.ip6);
506 return gnode;
1173 struct amt_group_node *gnode;
1273 hlist_for_each_entry_rcu(gnode, &tunnel->groups[hash],
1276 if (gnode->group_addr.ip4 == iph->daddr)
1280 if (ipv6_addr_equal(&gnode->group_addr.ip6,
1322 struct amt_group_node *gnode;
1329 hlist_for_each_entry_safe(gnode, t, &tunnel->groups[i], node)
1330 amt_del_group(amt, gnode);
1354 struct amt_group_node *gnode)
1362 hlist_for_each_entry_safe(snode, t, &gnode->sources[i], node) {
1370 hlist_for_each_entry_rcu(snode, &gnode->sources[i], node) {
1372 if (!gnode->v6)
1373 netdev_dbg(snode->gnode->amt->dev,
1376 &gnode->group_addr.ip4);
1379 netdev_dbg(snode->gnode->amt->dev,
1382 &gnode->group_addr.ip6);
1389 struct amt_group_node *gnode, void *grec,
1423 if (amt_lookup_src(tunnel, gnode, AMT_FILTER_ALL, &src))
1426 snode = amt_alloc_snode(gnode, &src);
1429 hlist_add_head_rcu(&snode->node, &gnode->sources[hash]);
1431 gnode->nr_sources++;
1433 if (!gnode->v6)
1434 netdev_dbg(snode->gnode->amt->dev,
1437 &gnode->group_addr.ip4);
1440 netdev_dbg(snode->gnode->amt->dev,
1443 &gnode->group_addr.ip6);
1469 struct amt_group_node *gnode,
1511 snode = amt_lookup_src(tunnel, gnode, filter, &src);
1514 amt_act_src(tunnel, gnode, snode, act);
1520 hlist_for_each_entry_safe(snode, t, &gnode->sources[i],
1523 amt_act_src(tunnel, gnode, snode, act);
1534 snode = amt_lookup_src(tunnel, gnode, filter, &src);
1537 amt_act_src(tunnel, gnode, snode, act);
1543 hlist_for_each_entry_safe(snode, t, &gnode->sources[i],
1560 amt_act_src(tunnel, gnode, snode, act);
1576 snode = amt_lookup_src(tunnel, gnode, AMT_FILTER_ALL,
1579 snode = amt_lookup_src(tunnel, gnode,
1582 amt_act_src(tunnel, gnode, snode, act);
1594 struct amt_group_node *gnode,
1597 if (gnode->filter_mode == MCAST_INCLUDE) {
1603 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_UNI,
1608 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_UNI,
1613 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_INT,
1623 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_INT,
1628 amt_lookup_act_srcs(tunnel, gnode, zero_grec, AMT_OPS_UNI,
1633 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_INT,
1638 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_SUB,
1647 struct amt_group_node *gnode,
1650 if (gnode->filter_mode == MCAST_INCLUDE) {
1658 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_INT,
1663 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_SUB_REV,
1668 amt_lookup_act_srcs(tunnel, gnode, zero_grec, AMT_OPS_UNI,
1673 if (!mod_delayed_work(amt_wq, &gnode->group_timer,
1676 gnode->filter_mode = MCAST_EXCLUDE;
1687 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_SUB_REV,
1692 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_INT,
1697 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_SUB_REV,
1702 if (!mod_delayed_work(amt_wq, &gnode->group_timer,
1711 struct amt_group_node *gnode,
1714 if (gnode->filter_mode == MCAST_INCLUDE) {
1721 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_UNI,
1726 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_UNI,
1731 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_INT,
1743 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_UNI,
1748 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_UNI,
1756 amt_lookup_act_srcs(tunnel, gnode, zero_grec, AMT_OPS_UNI,
1763 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_INT,
1772 struct amt_group_node *gnode,
1775 if (gnode->filter_mode == MCAST_INCLUDE) {
1784 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_INT,
1789 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_SUB_REV,
1794 amt_lookup_act_srcs(tunnel, gnode, zero_grec, AMT_OPS_UNI,
1799 if (!mod_delayed_work(amt_wq, &gnode->group_timer,
1802 gnode->filter_mode = MCAST_EXCLUDE;
1814 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_SUB_REV,
1819 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_SUB_REV,
1824 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_INT,
1829 if (!mod_delayed_work(amt_wq, &gnode->group_timer,
1838 struct amt_group_node *gnode,
1841 if (gnode->filter_mode == MCAST_INCLUDE) {
1847 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_UNI,
1852 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_INT,
1862 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_UNI,
1867 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_SUB,
1874 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_INT,
1883 struct amt_group_node *gnode,
1886 if (gnode->filter_mode == MCAST_INCLUDE) {
1892 amt_lookup_act_srcs(tunnel, gnode, zero_grec, AMT_OPS_UNI,
1903 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_SUB_REV,
1908 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_UNI,
1913 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_SUB_REV,
1918 amt_lookup_act_srcs(tunnel, gnode, grec, AMT_OPS_UNI,
1942 struct amt_group_node *gnode;
1950 gnode = amt_lookup_group(tunnel, &group, &host, false);
1951 if (!gnode) {
1952 gnode = amt_add_group(amt, tunnel, &group, &host, false);
1953 if (!IS_ERR(gnode)) {
1954 gnode->filter_mode = MCAST_EXCLUDE;
1955 if (!mod_delayed_work(amt_wq, &gnode->group_timer,
1979 struct amt_group_node *gnode;
1987 gnode = amt_lookup_group(tunnel, &group, &host, false);
1988 if (gnode)
1989 amt_del_group(amt, gnode);
1999 struct amt_group_node *gnode;
2021 gnode = amt_lookup_group(tunnel, &group, &host, false);
2022 if (!gnode) {
2023 gnode = amt_add_group(amt, tunnel, &group, &host,
2025 if (IS_ERR(gnode))
2029 amt_add_srcs(amt, tunnel, gnode, grec, false);
2032 amt_mcast_is_in_handler(amt, tunnel, gnode, grec,
2036 amt_mcast_is_ex_handler(amt, tunnel, gnode, grec,
2040 amt_mcast_to_in_handler(amt, tunnel, gnode, grec,
2044 amt_mcast_to_ex_handler(amt, tunnel, gnode, grec,
2048 amt_mcast_allow_handler(amt, tunnel, gnode, grec,
2052 amt_mcast_block_handler(amt, tunnel, gnode, grec,
2058 amt_cleanup_srcs(amt, tunnel, gnode);
2103 struct amt_group_node *gnode;
2109 gnode = amt_lookup_group(tunnel, &group, &host, true);
2110 if (!gnode) {
2111 gnode = amt_add_group(amt, tunnel, &group, &host, true);
2112 if (!IS_ERR(gnode)) {
2113 gnode->filter_mode = MCAST_EXCLUDE;
2114 if (!mod_delayed_work(amt_wq, &gnode->group_timer,
2140 struct amt_group_node *gnode;
2147 gnode = amt_lookup_group(tunnel, &group, &host, true);
2148 if (gnode) {
2149 amt_del_group(amt, gnode);
2161 struct amt_group_node *gnode;
2183 gnode = amt_lookup_group(tunnel, &group, &host, true);
2184 if (!gnode) {
2185 gnode = amt_add_group(amt, tunnel, &group, &host,
2187 if (IS_ERR(gnode))
2191 amt_add_srcs(amt, tunnel, gnode, grec, true);
2194 amt_mcast_is_in_handler(amt, tunnel, gnode, grec,
2198 amt_mcast_is_ex_handler(amt, tunnel, gnode, grec,
2202 amt_mcast_to_in_handler(amt, tunnel, gnode, grec,
2206 amt_mcast_to_ex_handler(amt, tunnel, gnode, grec,
2210 amt_mcast_allow_handler(amt, tunnel, gnode, grec,
2214 amt_mcast_block_handler(amt, tunnel, gnode, grec,
2220 amt_cleanup_srcs(amt, tunnel, gnode);