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>
This commit is contained in:

committed by
Stefano Brivio

parent
fb5d1c5d7d
commit
f616ca231e
6
tap.h
6
tap.h
@@ -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);
|
||||
|
Reference in New Issue
Block a user