diff options
| author | Roy Marples <roy@marples.name> | 2021-02-02 14:41:54 +0000 |
|---|---|---|
| committer | Roy Marples <roy@marples.name> | 2021-02-02 14:41:54 +0000 |
| commit | 5d619328bf07da0b6b209ce12f22381a4fe435e0 (patch) | |
| tree | 5ace2bdf2c31a21315447462ee10b4e1f9f12e64 /src/privsep-bpf.c | |
| parent | b042338612f18c9be8576c258006f94395db6297 (diff) | |
| download | dhcpcd-5d619328bf07da0b6b209ce12f22381a4fe435e0.tar.xz | |
eloop: Make the API more like native poll/kqueue/epoll
Just have the one callback, but return an abstracted event mask
to work out if we can read/write have something else.
Log diagnostics if the event mask is unexpected.
While here add more logging if we fail to register an event to
monitor.
Diffstat (limited to 'src/privsep-bpf.c')
| -rw-r--r-- | src/privsep-bpf.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/src/privsep-bpf.c b/src/privsep-bpf.c index f402ea18..f0088568 100644 --- a/src/privsep-bpf.c +++ b/src/privsep-bpf.c @@ -54,7 +54,7 @@ #include "privsep.h" static void -ps_bpf_recvbpf(void *arg) +ps_bpf_recvbpf(void *arg, unsigned short events) { struct ps_process *psp = arg; struct bpf *bpf = psp->psp_bpf; @@ -65,6 +65,9 @@ ps_bpf_recvbpf(void *arg) .ps_cmd = psp->psp_id.psi_cmd, }; + if (events != ELE_READ) + logerrx("%s: unexpected event 0x%04x", __func__, events); + bpf->bpf_flags &= ~BPF_EOF; /* A BPF read can read more than one filtered packet at time. * This mechanism allows us to read each packet from the buffer. */ @@ -131,11 +134,11 @@ ps_bpf_recvmsgcb(void *arg, struct ps_msghdr *psm, struct msghdr *msg) } static void -ps_bpf_recvmsg(void *arg) +ps_bpf_recvmsg(void *arg, unsigned short events) { struct ps_process *psp = arg; - if (ps_recvpsmsg(psp->psp_ctx, psp->psp_fd, + if (ps_recvpsmsg(psp->psp_ctx, psp->psp_fd, events, ps_bpf_recvmsgcb, arg) == -1) logerr(__func__); } @@ -164,8 +167,8 @@ ps_bpf_start_bpf(void *arg) else if (ps_rights_limit_fd(psp->psp_bpf->bpf_fd) == -1) logerr("%s: ps_rights_limit_fd", __func__); #endif - else if (eloop_event_add(ctx->eloop, - psp->psp_bpf->bpf_fd, ps_bpf_recvbpf, psp) == -1) + else if (eloop_event_add(ctx->eloop, psp->psp_bpf->bpf_fd, ELE_READ, + ps_bpf_recvbpf, psp) == -1) logerr("%s: eloop_event_add", __func__); else { psp->psp_work_fd = psp->psp_bpf->bpf_fd; |
