Lines Matching refs:snode

90 	struct amt_source_node *snode;  in __amt_source_gc_work()  local
98 hlist_for_each_entry_safe(snode, t, &gc_list, node) { in __amt_source_gc_work()
99 hlist_del_rcu(&snode->node); in __amt_source_gc_work()
100 kfree_rcu(snode, rcu); in __amt_source_gc_work()
126 static bool amt_status_filter(struct amt_source_node *snode, in amt_status_filter() argument
133 if (snode->status == AMT_SOURCE_STATUS_FWD && in amt_status_filter()
134 snode->flags == AMT_SOURCE_OLD) in amt_status_filter()
138 if (snode->status == AMT_SOURCE_STATUS_D_FWD && in amt_status_filter()
139 snode->flags == AMT_SOURCE_OLD) in amt_status_filter()
143 if (snode->status == AMT_SOURCE_STATUS_FWD && in amt_status_filter()
144 snode->flags == AMT_SOURCE_NEW) in amt_status_filter()
148 if (snode->status == AMT_SOURCE_STATUS_D_FWD && in amt_status_filter()
149 snode->flags == AMT_SOURCE_NEW) in amt_status_filter()
156 if (snode->status == AMT_SOURCE_STATUS_NONE && in amt_status_filter()
157 snode->flags == AMT_SOURCE_NEW) in amt_status_filter()
161 if ((snode->status == AMT_SOURCE_STATUS_D_FWD || in amt_status_filter()
162 snode->status == AMT_SOURCE_STATUS_FWD) && in amt_status_filter()
163 snode->flags == AMT_SOURCE_OLD) in amt_status_filter()
167 if ((snode->status == AMT_SOURCE_STATUS_D_FWD || in amt_status_filter()
168 snode->status == AMT_SOURCE_STATUS_FWD) && in amt_status_filter()
169 snode->flags == AMT_SOURCE_NEW) in amt_status_filter()
186 struct amt_source_node *snode; in amt_lookup_src() local
188 hlist_for_each_entry_rcu(snode, &gnode->sources[hash], node) in amt_lookup_src()
189 if (amt_status_filter(snode, filter) && in amt_lookup_src()
190 amt_addr_equal(&snode->source_addr, src)) in amt_lookup_src()
191 return snode; in amt_lookup_src()
221 static void amt_destroy_source(struct amt_source_node *snode) in amt_destroy_source() argument
223 struct amt_group_node *gnode = snode->gnode; in amt_destroy_source()
229 netdev_dbg(snode->gnode->amt->dev, in amt_destroy_source()
231 &snode->source_addr.ip4, in amt_destroy_source()
235 netdev_dbg(snode->gnode->amt->dev, in amt_destroy_source()
237 &snode->source_addr.ip6, in amt_destroy_source()
242 cancel_delayed_work(&snode->source_timer); in amt_destroy_source()
243 hlist_del_init_rcu(&snode->node); in amt_destroy_source()
247 hlist_add_head_rcu(&snode->node, &source_gc_list); in amt_destroy_source()
253 struct amt_source_node *snode; in amt_del_group() local
271 hlist_for_each_entry_safe(snode, t, &gnode->sources[i], node) in amt_del_group()
272 amt_destroy_source(snode); in amt_del_group()
287 struct amt_source_node *snode = container_of(to_delayed_work(work), in amt_source_work() local
290 struct amt_group_node *gnode = snode->gnode; in amt_source_work()
298 amt_destroy_source(snode); in amt_source_work()
305 snode->status = AMT_SOURCE_STATUS_D_FWD; in amt_source_work()
313 struct amt_source_node *snode, in amt_act_src() argument
320 mod_delayed_work(amt_wq, &snode->source_timer, in amt_act_src()
324 cancel_delayed_work(&snode->source_timer); in amt_act_src()
327 mod_delayed_work(amt_wq, &snode->source_timer, in amt_act_src()
331 snode->status = AMT_SOURCE_STATUS_FWD; in amt_act_src()
332 snode->flags = AMT_SOURCE_NEW; in amt_act_src()
335 snode->status = AMT_SOURCE_STATUS_D_FWD; in amt_act_src()
336 snode->flags = AMT_SOURCE_NEW; in amt_act_src()
339 cancel_delayed_work(&snode->source_timer); in amt_act_src()
340 snode->status = AMT_SOURCE_STATUS_NONE; in amt_act_src()
341 snode->flags = AMT_SOURCE_NEW; in amt_act_src()
350 &snode->source_addr.ip4, in amt_act_src()
356 &snode->source_addr.ip6, in amt_act_src()
365 struct amt_source_node *snode; in amt_alloc_snode() local
367 snode = kzalloc(sizeof(*snode), GFP_ATOMIC); in amt_alloc_snode()
368 if (!snode) in amt_alloc_snode()
371 memcpy(&snode->source_addr, src, sizeof(union amt_addr)); in amt_alloc_snode()
372 snode->gnode = gnode; in amt_alloc_snode()
373 snode->status = AMT_SOURCE_STATUS_NONE; in amt_alloc_snode()
374 snode->flags = AMT_SOURCE_NEW; in amt_alloc_snode()
375 INIT_HLIST_NODE(&snode->node); in amt_alloc_snode()
376 INIT_DELAYED_WORK(&snode->source_timer, amt_source_work); in amt_alloc_snode()
378 return snode; in amt_alloc_snode()
413 struct amt_source_node *snode; in amt_group_work() local
429 hlist_for_each_entry_safe(snode, t, in amt_group_work()
431 if (!delayed_work_pending(&snode->source_timer) || in amt_group_work()
432 snode->status == AMT_SOURCE_STATUS_D_FWD) { in amt_group_work()
433 amt_destroy_source(snode); in amt_group_work()
436 snode->status = AMT_SOURCE_STATUS_FWD; in amt_group_work()
1325 struct amt_source_node *snode; in amt_cleanup_srcs() local
1331 hlist_for_each_entry_safe(snode, t, &gnode->sources[i], node) { in amt_cleanup_srcs()
1332 if (snode->flags == AMT_SOURCE_OLD) in amt_cleanup_srcs()
1333 amt_destroy_source(snode); in amt_cleanup_srcs()
1339 hlist_for_each_entry_rcu(snode, &gnode->sources[i], node) { in amt_cleanup_srcs()
1340 snode->flags = AMT_SOURCE_OLD; in amt_cleanup_srcs()
1342 netdev_dbg(snode->gnode->amt->dev, in amt_cleanup_srcs()
1344 &snode->source_addr.ip4, in amt_cleanup_srcs()
1348 netdev_dbg(snode->gnode->amt->dev, in amt_cleanup_srcs()
1350 &snode->source_addr.ip6, in amt_cleanup_srcs()
1362 struct amt_source_node *snode; in amt_add_srcs() local
1395 snode = amt_alloc_snode(gnode, &src); in amt_add_srcs()
1396 if (snode) { in amt_add_srcs()
1397 hash = amt_source_hash(tunnel, &snode->source_addr); in amt_add_srcs()
1398 hlist_add_head_rcu(&snode->node, &gnode->sources[hash]); in amt_add_srcs()
1403 netdev_dbg(snode->gnode->amt->dev, in amt_add_srcs()
1405 &snode->source_addr.ip4, in amt_add_srcs()
1409 netdev_dbg(snode->gnode->amt->dev, in amt_add_srcs()
1411 &snode->source_addr.ip6, in amt_add_srcs()
1446 struct amt_source_node *snode; in amt_lookup_act_srcs() local
1480 snode = amt_lookup_src(tunnel, gnode, filter, &src); in amt_lookup_act_srcs()
1481 if (!snode) in amt_lookup_act_srcs()
1483 amt_act_src(tunnel, gnode, snode, act); in amt_lookup_act_srcs()
1489 hlist_for_each_entry_safe(snode, t, &gnode->sources[i], in amt_lookup_act_srcs()
1491 if (amt_status_filter(snode, filter)) in amt_lookup_act_srcs()
1492 amt_act_src(tunnel, gnode, snode, act); in amt_lookup_act_srcs()
1503 snode = amt_lookup_src(tunnel, gnode, filter, &src); in amt_lookup_act_srcs()
1504 if (!snode) in amt_lookup_act_srcs()
1506 amt_act_src(tunnel, gnode, snode, act); in amt_lookup_act_srcs()
1512 hlist_for_each_entry_safe(snode, t, &gnode->sources[i], in amt_lookup_act_srcs()
1514 if (!amt_status_filter(snode, filter)) in amt_lookup_act_srcs()
1525 if (amt_addr_equal(&snode->source_addr, in amt_lookup_act_srcs()
1529 amt_act_src(tunnel, gnode, snode, act); in amt_lookup_act_srcs()
1545 snode = amt_lookup_src(tunnel, gnode, AMT_FILTER_ALL, in amt_lookup_act_srcs()
1547 if (!snode) { in amt_lookup_act_srcs()
1548 snode = amt_lookup_src(tunnel, gnode, in amt_lookup_act_srcs()
1550 if (snode) in amt_lookup_act_srcs()
1551 amt_act_src(tunnel, gnode, snode, act); in amt_lookup_act_srcs()