Lines 190-197
Link Here
|
190 |
static void * |
190 |
static void * |
191 |
pknock_seq_start(struct seq_file *s, loff_t *pos) |
191 |
pknock_seq_start(struct seq_file *s, loff_t *pos) |
192 |
{ |
192 |
{ |
193 |
const struct proc_dir_entry *pde = s->private; |
193 |
const struct xt_pknock_rule *rule = s->private; |
194 |
const struct xt_pknock_rule *rule = pde->data; |
|
|
195 |
|
194 |
|
196 |
spin_lock_bh(&list_lock); |
195 |
spin_lock_bh(&list_lock); |
197 |
|
196 |
|
Lines 210-217
Link Here
|
210 |
static void * |
209 |
static void * |
211 |
pknock_seq_next(struct seq_file *s, void *v, loff_t *pos) |
210 |
pknock_seq_next(struct seq_file *s, void *v, loff_t *pos) |
212 |
{ |
211 |
{ |
213 |
const struct proc_dir_entry *pde = s->private; |
212 |
const struct xt_pknock_rule *rule = s->private; |
214 |
const struct xt_pknock_rule *rule = pde->data; |
|
|
215 |
|
213 |
|
216 |
++*pos; |
214 |
++*pos; |
217 |
if (*pos >= peer_hashsize) |
215 |
if (*pos >= peer_hashsize) |
Lines 243-250
Link Here
|
243 |
unsigned long time; |
241 |
unsigned long time; |
244 |
const struct list_head *peer_head = v; |
242 |
const struct list_head *peer_head = v; |
245 |
|
243 |
|
246 |
const struct proc_dir_entry *pde = s->private; |
244 |
const struct xt_pknock_rule *rule = s->private; |
247 |
const struct xt_pknock_rule *rule = pde->data; |
|
|
248 |
|
245 |
|
249 |
list_for_each_safe(pos, n, peer_head) { |
246 |
list_for_each_safe(pos, n, peer_head) { |
250 |
peer = list_entry(pos, struct peer, head); |
247 |
peer = list_entry(pos, struct peer, head); |
Lines 295-301
Link Here
|
295 |
int ret = seq_open(file, &pknock_seq_ops); |
292 |
int ret = seq_open(file, &pknock_seq_ops); |
296 |
if (ret == 0) { |
293 |
if (ret == 0) { |
297 |
struct seq_file *sf = file->private_data; |
294 |
struct seq_file *sf = file->private_data; |
298 |
sf->private = PDE(inode); |
295 |
sf->private = PDE_DATA(inode); |
299 |
} |
296 |
} |
300 |
return ret; |
297 |
return ret; |
301 |
} |
298 |
} |
Lines 478-490
Link Here
|
478 |
rule->timer.function = peer_gc; |
475 |
rule->timer.function = peer_gc; |
479 |
rule->timer.data = (unsigned long)rule; |
476 |
rule->timer.data = (unsigned long)rule; |
480 |
|
477 |
|
481 |
rule->status_proc = create_proc_entry(info->rule_name, 0, pde); |
478 |
rule->status_proc = proc_create_data(info->rule_name, 0, pde, |
|
|
479 |
&pknock_proc_ops, rule); |
482 |
if (rule->status_proc == NULL) |
480 |
if (rule->status_proc == NULL) |
483 |
goto out; |
481 |
goto out; |
484 |
|
482 |
|
485 |
rule->status_proc->proc_fops = &pknock_proc_ops; |
|
|
486 |
rule->status_proc->data = rule; |
487 |
|
488 |
list_add(&rule->head, &rule_hashtable[hash]); |
483 |
list_add(&rule->head, &rule_hashtable[hash]); |
489 |
pr_debug("(A) rule_name: %s - created.\n", rule->rule_name); |
484 |
pr_debug("(A) rule_name: %s - created.\n", rule->rule_name); |
490 |
return true; |
485 |
return true; |