diff options
author | Pablo Neira Ayuso <pablo@netfilter.org> | 2012-04-24 10:55:33 +0200 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2012-05-28 12:34:32 +0200 |
commit | 1250135046b96f2778bda51517c8a722171a6c16 (patch) | |
tree | 84344a92d70fe82b717be1c5344f10eddd295351 /include/conntrackd.h | |
parent | fcd6f78d277113628205789c8aba9ab1f5152fc4 (diff) | |
download | conntrack-tools-1250135046b96f2778bda51517c8a722171a6c16.tar.gz conntrack-tools-1250135046b96f2778bda51517c8a722171a6c16.zip |
conntrackd: generalize file descriptor infrastructure
This patch generalizes the select-based file descriptor infrastructure
by allowing you to register file descriptors and its callbacks. Instead
of hardcoding the descriptors that needs to be checked.
Now, struct fds_item contains a callback and pointer to data that is
passed to it:
struct fds_item {
struct list_head head;
int fd;
+ void (*cb)(void *data);
+ void *data;
};
Then, we check which ones are active in the select_main_step() function:
list_for_each_entry(cur, &STATE(fds)->list, head) {
if (FD_ISSET(cur->fd, &readfds))
cur->cb(cur->data);
}
And it invoked the corresponding callback.
I had to slightly modify the channel infrastructure to fit it into
the changes.
This modularity is required for the upcoming cthelper support.
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'include/conntrackd.h')
-rw-r--r-- | include/conntrackd.h | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/include/conntrackd.h b/include/conntrackd.h index 9359dfa..0e203e7 100644 --- a/include/conntrackd.h +++ b/include/conntrackd.h @@ -264,7 +264,6 @@ extern struct ct_general_state st; struct ct_mode { struct internal_handler *internal; int (*init)(void); - void (*run)(fd_set *readfds); int (*local)(int fd, int type, void *data); void (*kill)(void); }; @@ -278,7 +277,7 @@ extern struct ct_mode stats_mode; /* These live in run.c */ void killer(int foo); int init(void); -void run(void); +void select_main_loop(void); /* from read_config_yy.c */ int |