diff options
author | Pablo Neira Ayuso <pablo@netfilter.org> | 2012-04-24 10:55:33 +0200 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2012-08-01 19:17:35 +0200 |
commit | c712ccebc993cad3f73000bbe9e4788ebeb95ca2 (patch) | |
tree | ea989f68f8b5ae703948be15c76457d17d5a963d /include/fds.h | |
parent | ec4c0ff33746fb2c663194f27dd41deee83f870f (diff) | |
download | conntrack-tools-c712ccebc993cad3f73000bbe9e4788ebeb95ca2.tar.gz conntrack-tools-c712ccebc993cad3f73000bbe9e4788ebeb95ca2.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/fds.h')
-rw-r--r-- | include/fds.h | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/include/fds.h b/include/fds.h index f3728d7..ed0c8be 100644 --- a/include/fds.h +++ b/include/fds.h @@ -12,11 +12,13 @@ struct fds { struct fds_item { struct list_head head; int fd; + void (*cb)(void *data); + void *data; }; struct fds *create_fds(void); void destroy_fds(struct fds *); -int register_fd(int fd, struct fds *fds); +int register_fd(int fd, void (*cb)(void *data), void *data, struct fds *fds); int unregister_fd(int fd, struct fds *fds); #endif |