aboutgitcodebugslistschat
diff options
context:
space:
mode:
authorDavid Gibson <david@gibson.dropbear.id.au>2022-10-19 11:43:57 +1100
committerStefano Brivio <sbrivio@redhat.com>2022-10-19 03:35:00 +0200
commitc6845f60a062b69d1d4e64db1b6d0f1b6ac75d43 (patch)
treeb0fec8679576b5f4be1132374ab582d1a568c913
parent2dbc622f547cc4d150c8c6a1b1ecaf47aba2baca (diff)
downloadpasst-c6845f60a062b69d1d4e64db1b6d0f1b6ac75d43.tar
passt-c6845f60a062b69d1d4e64db1b6d0f1b6ac75d43.tar.gz
passt-c6845f60a062b69d1d4e64db1b6d0f1b6ac75d43.tar.bz2
passt-c6845f60a062b69d1d4e64db1b6d0f1b6ac75d43.tar.lz
passt-c6845f60a062b69d1d4e64db1b6d0f1b6ac75d43.tar.xz
passt-c6845f60a062b69d1d4e64db1b6d0f1b6ac75d43.tar.zst
passt-c6845f60a062b69d1d4e64db1b6d0f1b6ac75d43.zip
dhcp: Use tap_udp4_send() helper in dhcp()
The IPv4 specific dhcp() manually constructs L2 and IP headers to send its DHCP reply packet, unlike its IPv6 equivalent in dhcpv6.c which uses the tap_udp6_send() helper. Now that we've broaded the parameters to tap_udp4_send() we can use it in dhcp() to avoid some duplicated logic. Signed-off-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
-rw-r--r--dhcp.c18
-rw-r--r--tap.c1
2 files changed, 2 insertions, 17 deletions
diff --git a/dhcp.c b/dhcp.c
index 2b3af82..d22698a 100644
--- a/dhcp.c
+++ b/dhcp.c
@@ -363,22 +363,8 @@ int dhcp(const struct ctx *c, const struct pool *p)
if (!c->no_dhcp_dns_search)
opt_set_dns_search(c, sizeof(m->o));
- uh->len = htons(len = offsetof(struct msg, o) + fill(m) + sizeof(*uh));
- uh->source = htons(67);
- uh->dest = htons(68);
- csum_udp4(uh, c->ip4.gw, c->ip4.addr, uh + 1, len - sizeof(*uh));
-
- iph->tot_len = htons(len += sizeof(*iph));
- iph->daddr = c->ip4.addr;
- iph->saddr = c->ip4.gw;
- csum_ip4_header(iph);
-
- len += sizeof(*eh);
- memcpy(eh->h_dest, eh->h_source, ETH_ALEN);
- memcpy(eh->h_source, c->mac, ETH_ALEN);
-
- if (tap_send(c, eh, len) < 0)
- perror("DHCP: send");
+ len = offsetof(struct msg, o) + fill(m);
+ tap_udp4_send(c, c->ip4.gw, 67, c->ip4.addr, 68, m, len);
return 1;
}
diff --git a/tap.c b/tap.c
index d250a0b..3f78c99 100644
--- a/tap.c
+++ b/tap.c
@@ -170,7 +170,6 @@ static void *tap_push_ip4h(char *buf, in_addr_t src, in_addr_t dst,
* @in: UDP payload contents (not including UDP header)
* @len: UDP payload length (not including UDP header)
*/
-/* cppcheck-suppress unusedFunction */
void tap_udp4_send(const struct ctx *c, in_addr_t src, in_port_t sport,
in_addr_t dst, in_port_t dport,
const void *in, size_t len)