Lines Matching +full:cmd +full:- +full:cnt +full:- +full:name
3 * Use of this source code is governed by a BSD-style
5 * SPDX-License-Identifier: BSD-2-Clause
87 return (&m->u.nlmsg); in nlmsg_ptr()
93 return (m->u.nlmsg.nlmsg_len); in nlmsg_len()
99 return (m->u.nlmsg.nlmsg_type); in nlmsg_type()
108 if (len > SIZE_MAX - sizeof(*m) || in nlmsg_new()
113 m->siz = siz; in nlmsg_new()
114 m->len = len; in nlmsg_new()
115 m->ptr = m->payload; in nlmsg_new()
116 m->u.nlmsg.nlmsg_type = type; in nlmsg_new()
117 m->u.nlmsg.nlmsg_flags = NLM_F_REQUEST | flags; in nlmsg_new()
118 m->u.nlmsg.nlmsg_len = NLMSG_HDRLEN; in nlmsg_new()
136 nlalen - sizeof(h.u) > UINT16_MAX || in nla_from_buf()
137 nlalen > SIZE_MAX - sizeof(*a) || in nla_from_buf()
139 (a = calloc(1, sizeof(*a) + nlalen - sizeof(h.u))) == NULL) in nla_from_buf()
142 memcpy(&a->u, *ptr, nlalen); in nla_from_buf()
143 a->siz = sizeof(*a) + nlalen - sizeof(h.u); in nla_from_buf()
144 a->ptr = a->payload; in nla_from_buf()
145 a->len = nlalen - sizeof(h.u); in nla_from_buf()
147 *len -= skip; in nla_from_buf()
155 return (nla_from_buf((void *)&a->ptr, &a->len)); in nla_getattr()
161 return (a->u.nla.nla_type); in nla_type()
167 return (nla_from_buf((void *)&m->ptr, &m->len)); in nlmsg_getattr()
171 nla_read(nlamsgbuf_t *a, void *buf, size_t cnt) in nla_read() argument
173 if (cnt > a->u.nla.nla_len || in nla_read()
174 fido_buf_read((void *)&a->ptr, &a->len, buf, cnt) < 0) in nla_read()
175 return (-1); in nla_read()
177 a->u.nla.nla_len = (uint16_t)(a->u.nla.nla_len - cnt); in nla_read()
195 msglen - sizeof(h.u) > UINT16_MAX || in nlmsg_from_buf()
197 (m = nlmsg_new(0, 0, msglen - sizeof(h.u))) == NULL) in nlmsg_from_buf()
200 memcpy(&m->u, *ptr, msglen); in nlmsg_from_buf()
202 *len -= skip; in nlmsg_from_buf()
208 nlmsg_read(nlmsgbuf_t *m, void *buf, size_t cnt) in nlmsg_read() argument
210 if (cnt > m->u.nlmsg.nlmsg_len || in nlmsg_read()
211 fido_buf_read((void *)&m->ptr, &m->len, buf, cnt) < 0) in nlmsg_read()
212 return (-1); in nlmsg_read()
214 m->u.nlmsg.nlmsg_len = (uint32_t)(m->u.nlmsg.nlmsg_len - cnt); in nlmsg_read()
220 nlmsg_write(nlmsgbuf_t *m, const void *buf, size_t cnt) in nlmsg_write() argument
222 if (cnt > UINT32_MAX - m->u.nlmsg.nlmsg_len || in nlmsg_write()
223 fido_buf_write(&m->ptr, &m->len, buf, cnt) < 0) in nlmsg_write()
224 return (-1); in nlmsg_write()
226 m->u.nlmsg.nlmsg_len = (uint32_t)(m->u.nlmsg.nlmsg_len + cnt); in nlmsg_write()
232 nlmsg_set_genl(nlmsgbuf_t *m, uint8_t cmd) in nlmsg_set_genl() argument
237 g.u.genl.cmd = cmd; in nlmsg_set_genl()
244 nlmsg_get_genl(nlmsgbuf_t *m, uint8_t cmd) in nlmsg_get_genl() argument
250 if (nlmsg_read(m, &g, sizeof(g)) < 0 || g.u.genl.cmd != cmd) in nlmsg_get_genl()
251 return (-1); in nlmsg_get_genl()
262 return (-1); in nlmsg_get_status()
264 status = -status; in nlmsg_get_status()
277 if ((skip = NLMSG_ALIGN(len)) > UINT16_MAX - sizeof(a.u) || in nlmsg_setattr()
278 skip < len || (padding = calloc(1, skip - len)) == NULL) in nlmsg_setattr()
279 return (-1); in nlmsg_setattr()
286 nlmsg_write(m, padding, skip - len) < 0 ? -1 : 0; in nlmsg_setattr()
329 if ((n = a->len) < 1 || a->ptr[n - 1] != '\0' || in nla_get_str()
334 s[n - 1] = '\0'; in nla_get_str()
344 if ((r = WRITE(fd, nlmsg_ptr(m), nlmsg_len(m))) == -1) { in nlmsg_tx()
346 return (-1); in nlmsg_tx()
350 return (-1); in nlmsg_tx()
364 return (-1); in nlmsg_rx()
368 return (-1); in nlmsg_rx()
370 if ((r = READ(fd, ptr, len)) == -1) { in nlmsg_rx()
372 return (-1); in nlmsg_rx()
390 return (-1); in nlmsg_iter()
408 return (-1); in nla_iter()
425 return (-1); in nl_parse_reply()
441 return (-1); in nl_parse_reply()
453 char *name; in parse_mcastgrp() local
457 if ((name = nla_get_str(a)) == NULL || in parse_mcastgrp()
458 strcmp(name, NFC_GENL_MCAST_EVENT_NAME) != 0) { in parse_mcastgrp()
459 free(name); in parse_mcastgrp()
460 return (-1); /* XXX skip? */ in parse_mcastgrp()
462 free(name); in parse_mcastgrp()
465 if (family->mcastgrp) in parse_mcastgrp()
467 if (nla_get_u32(a, &family->mcastgrp) < 0) { in parse_mcastgrp()
469 return (-1); in parse_mcastgrp()
492 if (family->id) in parse_family()
494 if (nla_get_u16(a, &family->id) < 0) { in parse_family()
496 return (-1); in parse_family()
523 return (-1); in nl_get_nfc_family()
527 if ((r = nlmsg_rx(fd, reply, sizeof(reply), -1)) < 0) { in nl_get_nfc_family()
529 return (-1); in nl_get_nfc_family()
534 return (-1); in nl_get_nfc_family()
538 return (-1); in nl_get_nfc_family()
551 if (t->found || nla_type(a) != NFC_ATTR_TARGET_INDEX) { in parse_target()
555 if (nla_get_u32(a, t->value) < 0) { in parse_target()
557 return (-1); in parse_target()
559 t->found = 1; in parse_target()
572 if ((m = nlmsg_new(nl->nfc_type, NLM_F_ACK, 64)) == NULL || in fido_nl_power_nfc()
575 nlmsg_tx(nl->fd, m) < 0) { in fido_nl_power_nfc()
577 return (-1); in fido_nl_power_nfc()
580 if ((r = nlmsg_rx(nl->fd, reply, sizeof(reply), -1)) < 0) { in fido_nl_power_nfc()
582 return (-1); in fido_nl_power_nfc()
584 if ((ok = nl_parse_reply(reply, (size_t)r, nl->nfc_type, in fido_nl_power_nfc()
587 return (-1); in fido_nl_power_nfc()
601 if ((m = nlmsg_new(nl->nfc_type, NLM_F_ACK, 64)) == NULL || in nl_nfc_poll()
605 nlmsg_tx(nl->fd, m) < 0) { in nl_nfc_poll()
607 return (-1); in nl_nfc_poll()
610 if ((r = nlmsg_rx(nl->fd, reply, sizeof(reply), -1)) < 0) { in nl_nfc_poll()
612 return (-1); in nl_nfc_poll()
614 if ((ok = nl_parse_reply(reply, (size_t)r, nl->nfc_type, in nl_nfc_poll()
617 return (-1); in nl_nfc_poll()
632 if ((m = nlmsg_new(nl->nfc_type, NLM_F_DUMP, 64)) == NULL || in nl_dump_nfc_target()
635 nlmsg_tx(nl->fd, m) < 0) { in nl_dump_nfc_target()
637 return (-1); in nl_dump_nfc_target()
640 if ((r = nlmsg_rx(nl->fd, reply, sizeof(reply), ms)) < 0) { in nl_dump_nfc_target()
642 return (-1); in nl_dump_nfc_target()
646 if ((ok = nl_parse_reply(reply, (size_t)r, nl->nfc_type, in nl_dump_nfc_target()
649 return (-1); in nl_dump_nfc_target()
653 return (-1); in nl_dump_nfc_target()
671 return (-1); in parse_nfc_event()
673 if (dev == ctx->dev) in parse_nfc_event()
674 ctx->eventcnt++; in parse_nfc_event()
691 return (-1); in fido_nl_get_nfc_target()
694 if (setsockopt(nl->fd, SOL_NETLINK, NETLINK_ADD_MEMBERSHIP, in fido_nl_get_nfc_target()
695 &nl->nfc_mcastgrp, sizeof(nl->nfc_mcastgrp)) == -1) { in fido_nl_get_nfc_target()
697 return (-1); in fido_nl_get_nfc_target()
700 r = nlmsg_rx(nl->fd, reply, sizeof(reply), NETLINK_POLL_MS); in fido_nl_get_nfc_target()
702 if (setsockopt(nl->fd, SOL_NETLINK, NETLINK_DROP_MEMBERSHIP, in fido_nl_get_nfc_target()
703 &nl->nfc_mcastgrp, sizeof(nl->nfc_mcastgrp)) == -1) { in fido_nl_get_nfc_target()
705 return (-1); in fido_nl_get_nfc_target()
710 return (-1); in fido_nl_get_nfc_target()
714 if ((ok = nl_parse_reply(reply, (size_t)r, nl->nfc_type, in fido_nl_get_nfc_target()
717 return (-1); in fido_nl_get_nfc_target()
721 return (-1); in fido_nl_get_nfc_target()
723 if (nl_dump_nfc_target(nl, dev, target, -1) < 0) { in fido_nl_get_nfc_target()
725 return (-1); in fido_nl_get_nfc_target()
738 if (nl->fd != -1 && close(nl->fd) == -1) in fido_nl_free()
749 int ok = -1; in fido_nl_new()
753 if ((nl->fd = socket(AF_NETLINK, SOCK_RAW | SOCK_CLOEXEC, in fido_nl_new()
754 NETLINK_GENERIC)) == -1) { in fido_nl_new()
758 nl->saddr.nl_family = AF_NETLINK; in fido_nl_new()
759 if (bind(nl->fd, (struct sockaddr *)&nl->saddr, in fido_nl_new()
760 sizeof(nl->saddr)) == -1) { in fido_nl_new()
764 if (nl_get_nfc_family(nl->fd, &nl->nfc_type, &nl->nfc_mcastgrp) < 0) { in fido_nl_new()