X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lib%2Fstream-fd.c;h=90d328acc0c4fdd93f01a50b2ca8fb48bdd9ef94;hb=f40869bdf6feca4d3ff7c59a1fb1f7ac101bc967;hp=6b782ec295c55ffce636721c219d2a299c4b7844;hpb=1e3f34c7693bcabae8e443ac1b246680ef9b60e2;p=sliver-openvswitch.git diff --git a/lib/stream-fd.c b/lib/stream-fd.c index 6b782ec29..90d328acc 100644 --- a/lib/stream-fd.c +++ b/lib/stream-fd.c @@ -16,7 +16,6 @@ #include #include "stream-fd.h" -#include #include #include #include @@ -169,10 +168,11 @@ struct fd_pstream int fd; int (*accept_cb)(int fd, const struct sockaddr *, size_t sa_len, struct stream **); + int (*set_dscp_cb)(int fd, uint8_t dscp); char *unlink_path; }; -static struct pstream_class fd_pstream_class; +static const struct pstream_class fd_pstream_class; static struct fd_pstream * fd_pstream_cast(struct pstream *pstream) @@ -199,12 +199,14 @@ int new_fd_pstream(const char *name, int fd, int (*accept_cb)(int fd, const struct sockaddr *sa, size_t sa_len, struct stream **streamp), + int (*set_dscp_cb)(int fd, uint8_t dscp), char *unlink_path, struct pstream **pstreamp) { struct fd_pstream *ps = xmalloc(sizeof *ps); pstream_init(&ps->pstream, &fd_pstream_class, name); ps->fd = fd; ps->accept_cb = accept_cb; + ps->set_dscp_cb = set_dscp_cb; ps->unlink_path = unlink_path; *pstreamp = &ps->pstream; return 0; @@ -254,13 +256,24 @@ pfd_wait(struct pstream *pstream) poll_fd_wait(ps->fd, POLLIN); } -static struct pstream_class fd_pstream_class = { +static int +pfd_set_dscp(struct pstream *pstream, uint8_t dscp) +{ + struct fd_pstream *ps = fd_pstream_cast(pstream); + if (ps->set_dscp_cb) { + return ps->set_dscp_cb(ps->fd, dscp); + } + return 0; +} + +static const struct pstream_class fd_pstream_class = { "pstream", false, NULL, pfd_close, pfd_accept, - pfd_wait + pfd_wait, + pfd_set_dscp, }; /* Helper functions. */