|
|
|
@ -539,10 +539,10 @@ static ssize_t proc_blist_read(struct file *f, char __user *b, size_t l, loff_t |
|
|
|
} |
|
|
|
|
|
|
|
memset(&op, 0, sizeof(op)); |
|
|
|
spin_lock_irqsave(&g->lock, flags); |
|
|
|
spin_lock_irqsave(&g->stats_lock, flags); |
|
|
|
memcpy(&op.target, &g->target, sizeof(op.target)); |
|
|
|
memcpy(&op.stats, &g->stats, sizeof(op.stats)); |
|
|
|
spin_unlock_irqrestore(&g->lock, flags); |
|
|
|
spin_unlock_irqrestore(&g->stats_lock, flags); |
|
|
|
|
|
|
|
target_push(g); |
|
|
|
|
|
|
|
@ -667,14 +667,14 @@ static int proc_list_show(struct seq_file *f, void *v) { |
|
|
|
struct mediaproxy_target *g = v; |
|
|
|
unsigned long flags; |
|
|
|
|
|
|
|
spin_lock_irqsave(&g->lock, flags); |
|
|
|
spin_lock_irqsave(&g->stats_lock, flags); |
|
|
|
seq_printf(f, "port %5u:\n", g->target.target_port); |
|
|
|
proc_list_addr_print(f, "src", &g->target.src_addr); |
|
|
|
proc_list_addr_print(f, "dst", &g->target.dst_addr); |
|
|
|
proc_list_addr_print(f, "mirror", &g->target.mirror_addr); |
|
|
|
seq_printf(f, " stats: %20llu bytes, %20llu packets, %20llu errors\n", |
|
|
|
g->stats.bytes, g->stats.packets, g->stats.errors); |
|
|
|
spin_unlock_irqrestore(&g->lock, flags); |
|
|
|
spin_unlock_irqrestore(&g->stats_lock, flags); |
|
|
|
|
|
|
|
target_push(g); |
|
|
|
|
|
|
|
@ -773,7 +773,7 @@ static int table_new_target(struct mediaproxy_table *t, struct mediaproxy_target |
|
|
|
memset(g, 0, sizeof(*g)); |
|
|
|
g->table = t->id; |
|
|
|
atomic_set(&g->refcnt, 1); |
|
|
|
spin_lock_init(&g->lock); |
|
|
|
spin_lock_init(&g->stats_lock); |
|
|
|
memcpy(&g->target, i, sizeof(*i)); |
|
|
|
|
|
|
|
if (update) |
|
|
|
@ -803,9 +803,9 @@ static int table_new_target(struct mediaproxy_table *t, struct mediaproxy_target |
|
|
|
if (!og) |
|
|
|
goto fail4; |
|
|
|
|
|
|
|
spin_lock(&og->lock); /* nested lock! irqs are disabled already */ |
|
|
|
spin_lock(&og->stats_lock); /* nested lock! irqs are disabled already */ |
|
|
|
memcpy(&g->stats, &og->stats, sizeof(g->stats)); |
|
|
|
spin_unlock(&og->lock); |
|
|
|
spin_unlock(&og->stats_lock); |
|
|
|
} |
|
|
|
else { |
|
|
|
err = -EEXIST; |
|
|
|
@ -1223,22 +1223,22 @@ not_stun: |
|
|
|
skb2 = skb_copy(skb, GFP_ATOMIC); |
|
|
|
err = send_proxy_packet(skb2, &g->target.src_addr, &g->target.mirror_addr, g->target.tos); |
|
|
|
if (err) { |
|
|
|
spin_lock_irqsave(&g->lock, flags); |
|
|
|
spin_lock_irqsave(&g->stats_lock, flags); |
|
|
|
g->stats.errors++; |
|
|
|
spin_unlock_irqrestore(&g->lock, flags); |
|
|
|
spin_unlock_irqrestore(&g->stats_lock, flags); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
err = send_proxy_packet(skb, &g->target.src_addr, &g->target.dst_addr, g->target.tos); |
|
|
|
|
|
|
|
spin_lock_irqsave(&g->lock, flags); |
|
|
|
spin_lock_irqsave(&g->stats_lock, flags); |
|
|
|
if (err) |
|
|
|
g->stats.errors++; |
|
|
|
else { |
|
|
|
g->stats.packets++; |
|
|
|
g->stats.bytes += skb->len; |
|
|
|
} |
|
|
|
spin_unlock_irqrestore(&g->lock, flags); |
|
|
|
spin_unlock_irqrestore(&g->stats_lock, flags); |
|
|
|
|
|
|
|
target_push(g); |
|
|
|
table_push(t); |
|
|
|
|