aboutgitcodebugslistschat
path: root/tap.c
diff options
context:
space:
mode:
authorAbdAlRahman Gad <abdobngad@gmail.com>2024-08-12 22:33:38 +0300
committerStefano Brivio <sbrivio@redhat.com>2024-08-13 19:46:16 +0200
commitc16141eda5e8473a11ffbca82e1d6142d463300c (patch)
tree182a5a3d1851b6368e666d8a1186c55ec75c1676 /tap.c
parentf6d5a52392645f9b52c1b969ea2e85762626c5ba (diff)
downloadpasst-c16141eda5e8473a11ffbca82e1d6142d463300c.tar
passt-c16141eda5e8473a11ffbca82e1d6142d463300c.tar.gz
passt-c16141eda5e8473a11ffbca82e1d6142d463300c.tar.bz2
passt-c16141eda5e8473a11ffbca82e1d6142d463300c.tar.lz
passt-c16141eda5e8473a11ffbca82e1d6142d463300c.tar.xz
passt-c16141eda5e8473a11ffbca82e1d6142d463300c.tar.zst
passt-c16141eda5e8473a11ffbca82e1d6142d463300c.zip
ndp.c: Turn NDP responder into more declarative implementation
- Add structs for NA, RA, NS, MTU, prefix info, option header, link-layer address, RDNSS, DNSSL and link-layer for RA message. - Turn NA message from purely imperative, going byte by byte, to declarative by filling it's struct. - Turn part of RA message into declarative. - Move packet_add() to be before the call of ndp() in tap6_handler() if the protocol of the packet is ICMPv6. - Add a pool of packets as an additional parameter to ndp(). - Check the size of NS packet with packet_get() before sending an NA packet. - Add documentation for the structs. - Add an enum for NDP option types. Link: https://bugs.passt.top/show_bug.cgi?id=21 Signed-off-by: AbdAlRahman Gad <abdobngad@gmail.com> [sbrivio: Minor coding style fixes] Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Diffstat (limited to 'tap.c')
-rw-r--r--tap.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/tap.c b/tap.c
index 5852705..87be3a6 100644
--- a/tap.c
+++ b/tap.c
@@ -808,12 +808,13 @@ resume:
if (l4len < sizeof(struct icmp6hdr))
continue;
- if (ndp(c, (struct icmp6hdr *)l4h, saddr))
+ packet_add(pkt, l4len, l4h);
+
+ if (ndp(c, (struct icmp6hdr *)l4h, saddr, pkt))
continue;
tap_packet_debug(NULL, ip6h, NULL, proto, NULL, 1);
- packet_add(pkt, l4len, l4h);
icmp_tap_handler(c, PIF_TAP, AF_INET6,
saddr, daddr, pkt, now);
continue;