diff options
author | David Gibson <david@gibson.dropbear.id.au> | 2022-10-19 11:43:52 +1100 |
---|---|---|
committer | Stefano Brivio <sbrivio@redhat.com> | 2022-10-19 03:34:45 +0200 |
commit | f616ca231e1c6dc9256f999f868bb973d744104a (patch) | |
tree | abca6fe5dc318196eab6cdf1e4885d7d36a02754 /tap.h | |
parent | fb5d1c5d7d0b914a90aaeecf406c7092d9d55aeb (diff) | |
download | passt-f616ca231e1c6dc9256f999f868bb973d744104a.tar passt-f616ca231e1c6dc9256f999f868bb973d744104a.tar.gz passt-f616ca231e1c6dc9256f999f868bb973d744104a.tar.bz2 passt-f616ca231e1c6dc9256f999f868bb973d744104a.tar.lz passt-f616ca231e1c6dc9256f999f868bb973d744104a.tar.xz passt-f616ca231e1c6dc9256f999f868bb973d744104a.tar.zst passt-f616ca231e1c6dc9256f999f868bb973d744104a.zip |
Split tap_ip_send() into IPv4 and IPv6 specific functions
The IPv4 and IPv6 paths in tap_ip_send() have very little in common, and
it turns out that every caller (statically) knows if it is using IPv4 or
IPv6. So split into separate tap_ip4_send() and tap_ip6_send() functions.
Use a new tap_l2_hdr() function for the very small common part.
While we're there, make some minor cleanups:
- We were double writing some fields in the IPv6 header, so that it
temporary matched the pseudo-header for checksum calculation. With
recent checksum reworks, this isn't neccessary any more.
- We don't use any IPv4 header options, so use some sizeof() constructs
instead of some open coded values for header length.
- The comment used to say that the flow label was for TCP over IPv6, but
in fact the only thing we used it for was DHCPv6 over UDP traffic
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Diffstat (limited to 'tap.h')
-rw-r--r-- | tap.h | 6 |
1 files changed, 4 insertions, 2 deletions
@@ -9,8 +9,10 @@ in_addr_t tap_ip4_daddr(const struct ctx *c); const struct in6_addr *tap_ip6_daddr(const struct ctx *c, const struct in6_addr *src); -void tap_ip_send(const struct ctx *c, const struct in6_addr *src, uint8_t proto, - const char *in, size_t len, uint32_t flow); +void tap_ip4_send(const struct ctx *c, in_addr_t src, uint8_t proto, + const char *in, size_t len); +void tap_ip6_send(const struct ctx *c, const struct in6_addr *src, + uint8_t proto, const char *in, size_t len, uint32_t flow); int tap_send(const struct ctx *c, const void *data, size_t len); void tap_handler(struct ctx *c, int fd, uint32_t events, const struct timespec *now); |