From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: passt.top; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: passt.top; dkim=pass (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=OqmNnkrk; dkim-atps=neutral Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by passt.top (Postfix) with ESMTPS id 5508D5A0287 for ; Wed, 11 Jun 2025 14:53:00 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1749646379; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Qwb/OtG482zvF/WzHNWtHY/J0YngX7tUWiKLjXqugDc=; b=OqmNnkrk6XWq4hgaZVRayNFdVTz/+77jnhNR4jKU8A9WpTgUjCD2cZdxXOEegGbVZELIWK bCgMERCfzZ2Pf/zJWwI6T4mJg7e3nO0jo8QApxZaUzOJZi+R1vKX8WhXIu7inhsKoxbjMQ b6cbR9o6dRlCOh3ef2UscfI8g1EtQ+E= Received: from mail-wr1-f70.google.com (mail-wr1-f70.google.com [209.85.221.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-452-W7tKXAydP8ShlMz7-Fh1Zw-1; Wed, 11 Jun 2025 08:52:58 -0400 X-MC-Unique: W7tKXAydP8ShlMz7-Fh1Zw-1 X-Mimecast-MFC-AGG-ID: W7tKXAydP8ShlMz7-Fh1Zw_1749646377 Received: by mail-wr1-f70.google.com with SMTP id ffacd0b85a97d-3a4fac7fa27so2960470f8f.0 for ; Wed, 11 Jun 2025 05:52:57 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749646376; x=1750251176; h=content-transfer-encoding:mime-version:organization:references :in-reply-to:message-id:subject:cc:to:from:date:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=Qwb/OtG482zvF/WzHNWtHY/J0YngX7tUWiKLjXqugDc=; b=kti50vCm9gTmLN8LnnhYRMQmpiFaphMavRHQFb5iQd+MHKAu2K+ixho4XQDtRKp3rt 1/75WcbJW590DL23+2USDYnuz9eF7Tkts3/oXg//dkGpqUBuXHG8fdD76EPpJf+9rd7+ nvby4768lMq32mRANbG4znxhAWbgyKx+DH8ny0A1wqrr10iUyIi0F7qY2Px7V+OzGlRW eMnBXNCL0/tfHoDsaSHpsPnBm4b/Nf6VJvw/ioiPJe9aEz544CDs4TbarBwDZXh3vYEk EdsCRmmhlDLHCKvc3uGvXNhqHFDuSZJb1E8b7/71KbXn1G6akIWqrjsQDHRp37jzBhUC nucA== X-Gm-Message-State: AOJu0Yy2vo3BqSqyLaoZ9c55avNAIVfHgQG39Gn4pgBco/rlYDniUOTi soaa+kgJ2DVC/17prW19Flc8z6LGgGZcm1slGsNijqjfLw6t1y2Z9WV1dbsUTskXy186MH7KVfz sTrPV9HVTPww8MrpMqFtpjzJbh3eR8DKZLWoPTPK9HBXQ/x20W9ByyU+3GbuE4Ay2Mu7sEP4I9v ZLEfxeYF2otwCu327/W0D+jeyI+XYiqHdL6bEj X-Gm-Gg: ASbGncu7ig70uqtKlXbCTniZ8rUhrr2C7YFj5e029IvGnHd5mMTdhl76WHFz5pPdIoV rGDagu6BeXgrYPiIpCc8hCiGQWjlzzbVmq7jgy9GJNvXRAmoGQWKeAkwh5vhA5SIopGBS4/PYnL fNG19VayuZ6DGJij8a5Ln4VrJheE9EH3HYICn44cVtSLHcYrDvk+W2heItQXpFFcqbeyQwTuSXb bvdRda4E2/aE2GWoylIsC5sK7DMc8yuptQCuusQ1wKg3IEdx5JKZMDH8rs8cgRGsFYxD8uH8AFi d4kH0DGvAPlJ4ltFWgpo/D9/dvOyfLnvvpNDOa5JN3CmV4yZcMU= X-Received: by 2002:a05:6000:4287:b0:3a3:6415:96c8 with SMTP id ffacd0b85a97d-3a558a4465fmr2264222f8f.41.1749646376599; Wed, 11 Jun 2025 05:52:56 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEVfLLfXLtHPedE+tnRX0c1GKo1ndrADPAenTnEYgKdYqPa1pcA50ItUKVEBMf+57DTMITP8A== X-Received: by 2002:a05:6000:4287:b0:3a3:6415:96c8 with SMTP id ffacd0b85a97d-3a558a4465fmr2264205f8f.41.1749646376174; Wed, 11 Jun 2025 05:52:56 -0700 (PDT) Received: from maya.myfinge.rs (ifcgrfdd.trafficplex.cloud. [176.103.220.4]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a5322ae43fsm15021030f8f.25.2025.06.11.05.52.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Jun 2025 05:52:55 -0700 (PDT) Date: Wed, 11 Jun 2025 14:52:53 +0200 From: Stefano Brivio To: Laurent Vivier Subject: Re: [PATCH v6 17/30] dhcp: Convert to iov_tail Message-ID: <20250611145253.19f73265@elisabeth> In-Reply-To: <20250604130834.3868010-18-lvivier@redhat.com> References: <20250604130834.3868010-1-lvivier@redhat.com> <20250604130834.3868010-18-lvivier@redhat.com> Organization: Red Hat X-Mailer: Claws Mail 4.2.0 (GTK 3.24.49; x86_64-pc-linux-gnu) MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: X5kRQrQUZUf49qWhjKaBMgc3yglrK5fLxeaQ4PQbapw_1749646377 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Message-ID-Hash: HYZSQDXEPZMHGHE7KNNVA2M5GFW5EKDC X-Message-ID-Hash: HYZSQDXEPZMHGHE7KNNVA2M5GFW5EKDC X-MailFrom: sbrivio@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: passt-dev@passt.top X-Mailman-Version: 3.3.8 Precedence: list List-Id: Development discussion and patches for passt Archived-At: Archived-At: List-Archive: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: On Wed, 4 Jun 2025 15:08:21 +0200 Laurent Vivier wrote: > Use packet_data() and extract headers using IOV_REMOVE_HEADER() > and IOV_PEEK_HEADER() rather than packet_get(). > > Signed-off-by: Laurent Vivier > --- > dhcp.c | 45 +++++++++++++++++++++++++++------------------ > 1 file changed, 27 insertions(+), 18 deletions(-) > > diff --git a/dhcp.c b/dhcp.c > index b0de04be6f27..7c92f30d0b39 100644 > --- a/dhcp.c > +++ b/dhcp.c > @@ -302,27 +302,33 @@ static void opt_set_dns_search(const struct ctx *c, size_t max_len) > */ > int dhcp(const struct ctx *c, const struct pool *p) > { > - size_t mlen, dlen, offset = 0, opt_len, opt_off = 0; > char macstr[ETH_ADDRSTRLEN]; > + size_t mlen, dlen, opt_len; > struct in_addr mask, dst; > + struct ethhdr eh_storage; > + struct iphdr iph_storage; > + struct udphdr uh_storage; > const struct ethhdr *eh; > const struct iphdr *iph; > const struct udphdr *uh; > + struct iov_tail data; > struct msg const *m; > struct msg reply; > unsigned int i; > + struct msg mc; Perhaps this could become msg_storage now? Or m_storage? Indentation shouldn't get much worse than it already is. > > - eh = packet_get(p, 0, offset, sizeof(*eh), NULL); > - offset += sizeof(*eh); > + if (!packet_data(p, 0, &data)) > + return -1; > > - iph = packet_get(p, 0, offset, sizeof(*iph), NULL); > + eh = IOV_REMOVE_HEADER(&data, eh_storage); > + iph = IOV_PEEK_HEADER(&data, iph_storage); > if (!eh || !iph) > return -1; > > - offset += iph->ihl * 4UL; > - uh = packet_get(p, 0, offset, sizeof(*uh), &mlen); > - offset += sizeof(*uh); > + if (!iov_tail_drop(&data, iph->ihl * 4UL)) > + return -1; > > + uh = IOV_REMOVE_HEADER(&data, uh_storage); > if (!uh) > return -1; > > @@ -332,7 +338,9 @@ int dhcp(const struct ctx *c, const struct pool *p) > if (c->no_dhcp) > return 1; > > - m = packet_get(p, 0, offset, offsetof(struct msg, o), &opt_len); > + mlen = iov_tail_size(&data); > + m = (struct msg const *)iov_remove_header_(&data, &mc, offsetof(struct msg, o), > + __alignof__(struct msg)); > if (!m || > mlen != ntohs(uh->len) - sizeof(*uh) || > mlen < offsetof(struct msg, o) || > @@ -355,27 +363,28 @@ int dhcp(const struct ctx *c, const struct pool *p) > memset(&reply.file, 0, sizeof(reply.file)); > reply.magic = m->magic; > > - offset += offsetof(struct msg, o); > - > for (i = 0; i < ARRAY_SIZE(opts); i++) > opts[i].clen = -1; > > - while (opt_off + 2 < opt_len) { > - const uint8_t *olen, *val; > + opt_len = iov_tail_size(&data); > + while (opt_len >= 2) { > + uint8_t olen_storage, type_storage; > + const uint8_t *olen; > uint8_t *type; > > - type = packet_get(p, 0, offset + opt_off, 1, NULL); > - olen = packet_get(p, 0, offset + opt_off + 1, 1, NULL); > + type = IOV_REMOVE_HEADER(&data, type_storage); > + olen = IOV_REMOVE_HEADER(&data, olen_storage); > if (!type || !olen) > return -1; > > - val = packet_get(p, 0, offset + opt_off + 2, *olen, NULL); > - if (!val) > + opt_len = iov_tail_size(&data); > + if (opt_len < *olen) > return -1; > > - memcpy(&opts[*type].c, val, *olen); > + iov_to_buf(&data.iov[0], data.cnt, data.off, &opts[*type].c, *olen); > opts[*type].clen = *olen; > - opt_off += *olen + 2; > + iov_tail_drop(&data, *olen); > + opt_len -= *olen; > } > > opts[80].slen = -1; -- Stefano