From 95d3570b47429b54b735cfe96f676e523b1470d3 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Wed, 6 Mar 2024 12:28:51 +0900 Subject: [PATCH] sd-ndisc-router: introduce sd_ndisc_router_set_sender_address() Currently this is not used, but will be used later to modify the sender address. --- src/libsystemd-network/icmp6-packet.c | 11 +++++++++++ src/libsystemd-network/icmp6-packet.h | 1 + src/libsystemd-network/sd-ndisc-router.c | 6 ++++++ src/systemd/sd-ndisc-router.h | 1 + 4 files changed, 19 insertions(+) diff --git a/src/libsystemd-network/icmp6-packet.c b/src/libsystemd-network/icmp6-packet.c index 35459d11a29..21d744beaa4 100644 --- a/src/libsystemd-network/icmp6-packet.c +++ b/src/libsystemd-network/icmp6-packet.c @@ -27,6 +27,17 @@ static ICMP6Packet* icmp6_packet_new(size_t size) { return p; } +int icmp6_packet_set_sender_address(ICMP6Packet *p, const struct in6_addr *addr) { + assert(p); + + if (addr) + p->sender_address = *addr; + else + p->sender_address = (const struct in6_addr) {}; + + return 0; +} + int icmp6_packet_get_sender_address(ICMP6Packet *p, struct in6_addr *ret) { assert(p); diff --git a/src/libsystemd-network/icmp6-packet.h b/src/libsystemd-network/icmp6-packet.h index 7d02534a8c2..16f354fc95a 100644 --- a/src/libsystemd-network/icmp6-packet.h +++ b/src/libsystemd-network/icmp6-packet.h @@ -21,6 +21,7 @@ ICMP6Packet* icmp6_packet_ref(ICMP6Packet *p); ICMP6Packet* icmp6_packet_unref(ICMP6Packet *p); DEFINE_TRIVIAL_CLEANUP_FUNC(ICMP6Packet*, icmp6_packet_unref); +int icmp6_packet_set_sender_address(ICMP6Packet *p, const struct in6_addr *addr); int icmp6_packet_get_sender_address(ICMP6Packet *p, struct in6_addr *ret); int icmp6_packet_get_timestamp(ICMP6Packet *p, clockid_t clock, usec_t *ret); const struct icmp6_hdr* icmp6_packet_get_header(ICMP6Packet *p); diff --git a/src/libsystemd-network/sd-ndisc-router.c b/src/libsystemd-network/sd-ndisc-router.c index 4b4cc530a69..f8476c4d6bd 100644 --- a/src/libsystemd-network/sd-ndisc-router.c +++ b/src/libsystemd-network/sd-ndisc-router.c @@ -40,6 +40,12 @@ sd_ndisc_router* ndisc_router_new(ICMP6Packet *packet) { return rt; } +int sd_ndisc_router_set_sender_address(sd_ndisc_router *rt, const struct in6_addr *addr) { + assert_return(rt, -EINVAL); + + return icmp6_packet_set_sender_address(rt->packet, addr); +} + int sd_ndisc_router_get_sender_address(sd_ndisc_router *rt, struct in6_addr *ret) { assert_return(rt, -EINVAL); diff --git a/src/systemd/sd-ndisc-router.h b/src/systemd/sd-ndisc-router.h index 32ee5796e63..b07fefba3b9 100644 --- a/src/systemd/sd-ndisc-router.h +++ b/src/systemd/sd-ndisc-router.h @@ -33,6 +33,7 @@ sd_ndisc_router *sd_ndisc_router_ref(sd_ndisc_router *rt); sd_ndisc_router *sd_ndisc_router_unref(sd_ndisc_router *rt); _SD_DEFINE_POINTER_CLEANUP_FUNC(sd_ndisc_router, sd_ndisc_router_unref); +int sd_ndisc_router_set_sender_address(sd_ndisc_router *rt, const struct in6_addr *addr); int sd_ndisc_router_get_sender_address(sd_ndisc_router *rt, struct in6_addr *ret); int sd_ndisc_router_get_timestamp(sd_ndisc_router *rt, clockid_t clock, uint64_t *ret);