aboutsummaryrefslogtreecommitdiff
path: root/lib/libnetmap/nmreq.c
diff options
context:
space:
mode:
authorVincenzo Maffione <vmaffione@FreeBSD.org>2021-03-29 16:38:37 +0000
committerVincenzo Maffione <vmaffione@FreeBSD.org>2021-03-29 16:38:37 +0000
commitf8113f0a65ada9367bcbfa6e0d5d8a8451dd8ac2 (patch)
tree0d956a6900b762f54bd129a636b8468d59e5159b /lib/libnetmap/nmreq.c
parent660a47cb991d5a7ca69cd8dd9c09a5288d49e405 (diff)
Diffstat (limited to 'lib/libnetmap/nmreq.c')
-rw-r--r--lib/libnetmap/nmreq.c21
1 files changed, 9 insertions, 12 deletions
diff --git a/lib/libnetmap/nmreq.c b/lib/libnetmap/nmreq.c
index 7f4b2703d22d..39ee53c818c5 100644
--- a/lib/libnetmap/nmreq.c
+++ b/lib/libnetmap/nmreq.c
@@ -603,9 +603,10 @@ nmreq_options_decode(const char *opt, struct nmreq_opt_parser parsers[],
struct nmreq_option *
nmreq_find_option(struct nmreq_header *h, uint32_t t)
{
- struct nmreq_option *o = NULL;
+ struct nmreq_option *o;
- nmreq_foreach_option(h, o) {
+ for (o = (struct nmreq_option *)h->nr_options; o != NULL;
+ o = (struct nmreq_option *)o->nro_next) {
if (o->nro_reqtype == t)
break;
}
@@ -615,10 +616,10 @@ nmreq_find_option(struct nmreq_header *h, uint32_t t)
void
nmreq_remove_option(struct nmreq_header *h, struct nmreq_option *o)
{
- struct nmreq_option **nmo;
+ struct nmreq_option **nmo;
for (nmo = (struct nmreq_option **)&h->nr_options; *nmo != NULL;
- nmo = (struct nmreq_option **)&(*nmo)->nro_next) {
+ nmo = (struct nmreq_option **)&(*nmo)->nro_next) {
if (*nmo == o) {
*((uint64_t *)(*nmo)) = o->nro_next;
o->nro_next = (uint64_t)(uintptr_t)NULL;
@@ -632,14 +633,8 @@ nmreq_free_options(struct nmreq_header *h)
{
struct nmreq_option *o, *next;
- /*
- * Note: can't use nmreq_foreach_option() here; it frees the
- * list as it's walking and nmreq_foreach_option() isn't
- * modification-safe.
- */
- for (o = (struct nmreq_option *)(uintptr_t)h->nr_options; o != NULL;
- o = next) {
- next = (struct nmreq_option *)(uintptr_t)o->nro_next;
+ for (o = (struct nmreq_option *)h->nr_options; o != NULL; o = next) {
+ next = (struct nmreq_option *)o->nro_next;
free(o);
}
}
@@ -656,6 +651,8 @@ nmreq_option_name(uint32_t nro_reqtype)
return "csb";
case NETMAP_REQ_OPT_SYNC_KLOOP_MODE:
return "sync-kloop-mode";
+ case NETMAP_REQ_OPT_OFFSETS:
+ return "offsets";
default:
return "unknown";
}