• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src/router/snooper/

Lines Matching refs:group

91 	struct group_entry group;
165 static struct member_entry *get_member(struct group_entry *group, in_addr_t addr, int port, int allocate)
169 LIST_FOREACH(member, &group->members[port], link) {
191 LIST_INSERT_HEAD(&group->members[port], member, link);
202 static void init_group(struct group_entry *group)
206 // group->time = now();
207 group->portmap = 0;
209 LIST_INIT(&group->members[port]);
214 struct group_entry *group, *prev;
217 LIST_FOREACH(group, &groups.hash[index], hash) {
218 if (memcmp(group->ea, ea, ETHER_ADDR_LEN) == 0)
219 return group;
226 group = &groups.entries[groups.count++];
228 group = calloc(1, sizeof(*group));
229 if (group)
233 if (!group) {
235 STAILQ_FOREACH(group, &groups.pool, link) {
236 if (group->portmap == 0)
238 prev = group;
240 if (!group)
242 LIST_REMOVE(group, hash);
246 switch_clr_portmap(group->ea);
247 memset(&group, 0, sizeof(group));
250 init_group(group);
251 memcpy(group->ea, ea, ETHER_ADDR_LEN);
252 LIST_INSERT_HEAD(&groups.hash[index], group, hash);
253 STAILQ_INSERT_TAIL(&groups.pool, group, link);
255 return group;
258 static void consume_group(struct group_entry *group)
263 group->portmap = 0;
265 LIST_FOREACH_SAFE(member, &group->members[port], link, next)
270 static int get_portmap(struct group_entry *group)
275 if (!LIST_EMPTY(&group->members[port]))
299 init_group(&routers.group);
302 set_timer(&routers.timer, router_timer, &routers.group);
325 struct group_entry *group;
330 STAILQ_FOREACH(group, &groups.pool, link) {
331 portmap = group->portmap;
334 if (time_after(group->time, time)) {
335 if (time_before(group->time, expires))
336 expires = group->time;
339 consume_group(group);
342 ARG_EA(group->ea), ARG_PORTS(portmap));
344 portmap &= ~routers.group.portmap;
346 switch_del_portmap(group->ea, portmap);
355 struct group_entry *group;
363 group = get_group(maddr, 1);
364 if (group) {
365 portmap = group->portmap;
367 group->time = now() + timeout;
368 member = get_member(group, addr, port, 1);
370 member->time = group->time;
371 group->portmap = get_portmap(group);
372 portmap = (portmap ^ group->portmap) & group->portmap;
375 if (!timer_pending(timer) || time_before(group->time, timer->expires))
376 mod_timer(timer, group->time);
379 ARG_EA(group->ea), ARG_PORTS(portmap), ARG_IP(&addr), timeout / TIMER_HZ);
384 switch_add_portmap(maddr, portmap | routers.group.portmap);
391 struct group_entry *group;
398 group = get_group(maddr, 0);
399 if (group) {
400 portmap = group->portmap;
402 member = get_member(group, addr, port, 0);
405 group->portmap = get_portmap(group);
406 portmap = (portmap ^ group->portmap) & portmap;
407 if (portmap && group->portmap == 0)
408 consume_group(group);
411 ARG_EA(group->ea), ARG_PORTS(portmap), ARG_IP(&addr));
415 portmap &= ~routers.group.portmap;
424 struct group_entry *group = data;
429 portmap = group->portmap;
433 if (time_after(group->time, time)) {
434 group->time = time + ~0UL/2;
436 LIST_FOREACH_SAFE(member, &group->members[port], link, next) {
438 if (time_before(member->time, group->time))
439 group->time = member->time;
445 group->portmap = get_portmap(group);
446 portmap = (portmap ^ group->portmap) & portmap;
447 if (group->portmap)
448 mod_timer(timer, group->time);
450 consume_group(group);
452 consume_group(group);
455 ARG_EA(group->ea), ARG_PORTS(portmap));
458 STAILQ_FOREACH(group, &groups.pool, link) {
459 groupmap = portmap & ~group->portmap;
461 switch_del_portmap(group->ea, groupmap);
468 struct group_entry *group;
476 group = &routers.group;
477 if (group) {
478 portmap = group->portmap;
480 group->time = now() + timeout;
481 member = get_member(group, addr, port, 1);
483 member->time = group->time;
484 group->portmap = get_portmap(group);
485 portmap = (portmap ^ group->portmap) & group->portmap;
488 if (!timer_pending(timer) || time_after(timer->expires, group->time))
489 mod_timer(timer, group->time);
492 ARG_EA(group->ea), ARG_PORTS(portmap), ARG_IP(&addr), timeout / TIMER_HZ);
497 STAILQ_FOREACH(group, &groups.pool, link) {
498 groupmap = portmap & ~group->portmap;
500 switch_add_portmap(group->ea, groupmap);
509 struct group_entry *group;
513 group = get_group(maddr, 0);
514 if (!group)
516 group->time = time;
518 STAILQ_FOREACH(group, &groups.pool, link) {
519 group->time = time;
522 log_cache("%-6s fast expire %s in %d", "expire", maddr ? "group" : "all", timeout / TIMER_HZ);
531 struct group_entry *group;
538 while ((group = STAILQ_FIRST(&groups.pool))) {
539 consume_group(group);
540 LIST_REMOVE(group, hash);
542 switch_clr_portmap(group->ea);
544 free(group);
547 consume_group(&routers.group);