Lines Matching defs:snode

92 	struct amt_source_node *snode;
100 hlist_for_each_entry_safe(snode, t, &gc_list, node) {
101 hlist_del_rcu(&snode->node);
102 kfree_rcu(snode, rcu);
128 static bool amt_status_filter(struct amt_source_node *snode,
135 if (snode->status == AMT_SOURCE_STATUS_FWD &&
136 snode->flags == AMT_SOURCE_OLD)
140 if (snode->status == AMT_SOURCE_STATUS_D_FWD &&
141 snode->flags == AMT_SOURCE_OLD)
145 if (snode->status == AMT_SOURCE_STATUS_FWD &&
146 snode->flags == AMT_SOURCE_NEW)
150 if (snode->status == AMT_SOURCE_STATUS_D_FWD &&
151 snode->flags == AMT_SOURCE_NEW)
158 if (snode->status == AMT_SOURCE_STATUS_NONE &&
159 snode->flags == AMT_SOURCE_NEW)
163 if ((snode->status == AMT_SOURCE_STATUS_D_FWD ||
164 snode->status == AMT_SOURCE_STATUS_FWD) &&
165 snode->flags == AMT_SOURCE_OLD)
169 if ((snode->status == AMT_SOURCE_STATUS_D_FWD ||
170 snode->status == AMT_SOURCE_STATUS_FWD) &&
171 snode->flags == AMT_SOURCE_NEW)
188 struct amt_source_node *snode;
190 hlist_for_each_entry_rcu(snode, &gnode->sources[hash], node)
191 if (amt_status_filter(snode, filter) &&
192 amt_addr_equal(&snode->source_addr, src))
193 return snode;
223 static void amt_destroy_source(struct amt_source_node *snode)
225 struct amt_group_node *gnode = snode->gnode;
231 netdev_dbg(snode->gnode->amt->dev,
233 &snode->source_addr.ip4,
237 netdev_dbg(snode->gnode->amt->dev,
239 &snode->source_addr.ip6,
244 cancel_delayed_work(&snode->source_timer);
245 hlist_del_init_rcu(&snode->node);
249 hlist_add_head_rcu(&snode->node, &source_gc_list);
255 struct amt_source_node *snode;
273 hlist_for_each_entry_safe(snode, t, &gnode->sources[i], node)
274 amt_destroy_source(snode);
289 struct amt_source_node *snode = container_of(to_delayed_work(work),
292 struct amt_group_node *gnode = snode->gnode;
300 amt_destroy_source(snode);
307 snode->status = AMT_SOURCE_STATUS_D_FWD;
315 struct amt_source_node *snode,
322 mod_delayed_work(amt_wq, &snode->source_timer,
326 cancel_delayed_work(&snode->source_timer);
329 mod_delayed_work(amt_wq, &snode->source_timer,
333 snode->status = AMT_SOURCE_STATUS_FWD;
334 snode->flags = AMT_SOURCE_NEW;
337 snode->status = AMT_SOURCE_STATUS_D_FWD;
338 snode->flags = AMT_SOURCE_NEW;
341 cancel_delayed_work(&snode->source_timer);
342 snode->status = AMT_SOURCE_STATUS_NONE;
343 snode->flags = AMT_SOURCE_NEW;
352 &snode->source_addr.ip4,
358 &snode->source_addr.ip6,
367 struct amt_source_node *snode;
369 snode = kzalloc(sizeof(*snode), GFP_ATOMIC);
370 if (!snode)
373 memcpy(&snode->source_addr, src, sizeof(union amt_addr));
374 snode->gnode = gnode;
375 snode->status = AMT_SOURCE_STATUS_NONE;
376 snode->flags = AMT_SOURCE_NEW;
377 INIT_HLIST_NODE(&snode->node);
378 INIT_DELAYED_WORK(&snode->source_timer, amt_source_work);
380 return snode;
415 struct amt_source_node *snode;
431 hlist_for_each_entry_safe(snode, t,
433 if (!delayed_work_pending(&snode->source_timer) ||
434 snode->status == AMT_SOURCE_STATUS_D_FWD) {
435 amt_destroy_source(snode);
438 snode->status = AMT_SOURCE_STATUS_FWD;
1356 struct amt_source_node *snode;
1362 hlist_for_each_entry_safe(snode, t, &gnode->sources[i], node) {
1363 if (snode->flags == AMT_SOURCE_OLD)
1364 amt_destroy_source(snode);
1370 hlist_for_each_entry_rcu(snode, &gnode->sources[i], node) {
1371 snode->flags = AMT_SOURCE_OLD;
1373 netdev_dbg(snode->gnode->amt->dev,
1375 &snode->source_addr.ip4,
1379 netdev_dbg(snode->gnode->amt->dev,
1381 &snode->source_addr.ip6,
1393 struct amt_source_node *snode;
1426 snode = amt_alloc_snode(gnode, &src);
1427 if (snode) {
1428 hash = amt_source_hash(tunnel, &snode->source_addr);
1429 hlist_add_head_rcu(&snode->node, &gnode->sources[hash]);
1434 netdev_dbg(snode->gnode->amt->dev,
1436 &snode->source_addr.ip4,
1440 netdev_dbg(snode->gnode->amt->dev,
1442 &snode->source_addr.ip6,
1477 struct amt_source_node *snode;
1511 snode = amt_lookup_src(tunnel, gnode, filter, &src);
1512 if (!snode)
1514 amt_act_src(tunnel, gnode, snode, act);
1520 hlist_for_each_entry_safe(snode, t, &gnode->sources[i],
1522 if (amt_status_filter(snode, filter))
1523 amt_act_src(tunnel, gnode, snode, act);
1534 snode = amt_lookup_src(tunnel, gnode, filter, &src);
1535 if (!snode)
1537 amt_act_src(tunnel, gnode, snode, act);
1543 hlist_for_each_entry_safe(snode, t, &gnode->sources[i],
1545 if (!amt_status_filter(snode, filter))
1556 if (amt_addr_equal(&snode->source_addr,
1560 amt_act_src(tunnel, gnode, snode, act);
1576 snode = amt_lookup_src(tunnel, gnode, AMT_FILTER_ALL,
1578 if (!snode) {
1579 snode = amt_lookup_src(tunnel, gnode,
1581 if (snode)
1582 amt_act_src(tunnel, gnode, snode, act);