From: Felix Fietkau Date: Sun, 23 Oct 2011 14:04:50 +0000 (+0200) Subject: add a function for creating a raw event socket that does not use genl or rtnl X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fnetifd.git;a=commitdiff_plain;h=e284f0d534d5caccebdb2c898e593fb5b13a9d39 add a function for creating a raw event socket that does not use genl or rtnl --- diff --git a/system-linux.c b/system-linux.c index 0308e6f..57a4617 100644 --- a/system-linux.c +++ b/system-linux.c @@ -58,6 +58,20 @@ create_socket(int protocol) } static bool +create_raw_event_socket(struct event_socket *ev, int protocol, + uloop_fd_handler cb) +{ + ev->sock = create_socket(protocol); + if (!ev->sock) + return false; + + ev->uloop.fd = nl_socket_get_fd(ev->sock); + ev->uloop.cb = handler_nl_event; + uloop_fd_add(&ev->uloop, ULOOP_READ | ULOOP_EDGE_TRIGGER); + return true; +} + +static bool create_event_socket(struct event_socket *ev, int protocol, int (*cb)(struct nl_msg *msg, void *arg)) { @@ -68,14 +82,7 @@ create_event_socket(struct event_socket *ev, int protocol, nl_cb_set(ev->cb, NL_CB_VALID, NL_CB_CUSTOM, cb, NULL); - ev->sock = create_socket(protocol); - if (!ev->sock) - return false; - - ev->uloop.fd = nl_socket_get_fd(ev->sock); - ev->uloop.cb = handler_nl_event; - uloop_fd_add(&ev->uloop, ULOOP_READ | ULOOP_EDGE_TRIGGER); - return true; + return create_raw_event_socket(ev, protocol, handler_nl_event); } int system_init(void)