diff options
author | David Gibson <david@gibson.dropbear.id.au> | 2022-10-19 11:43:57 +1100 |
---|---|---|
committer | Stefano Brivio <sbrivio@redhat.com> | 2022-10-19 03:35:00 +0200 |
commit | c6845f60a062b69d1d4e64db1b6d0f1b6ac75d43 (patch) | |
tree | b0fec8679576b5f4be1132374ab582d1a568c913 /dhcp.c | |
parent | 2dbc622f547cc4d150c8c6a1b1ecaf47aba2baca (diff) | |
download | passt-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>
Diffstat (limited to 'dhcp.c')
-rw-r--r-- | dhcp.c | 18 |
1 files changed, 2 insertions, 16 deletions
@@ -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; } |