sd-ndisc-router: introduce sd_ndisc_router_get_sender_mac()
authorYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 29 Feb 2024 03:45:51 +0000 (12:45 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 13 Mar 2024 03:32:52 +0000 (12:32 +0900)
The Router Advertisement option can take the MAC address of the sender.
Let's introduce a function to get it from the parsed options.

src/libsystemd-network/sd-ndisc-router.c
src/systemd/sd-ndisc-router.h

index 46baa4fc8eac82d3d92d11aa2f676a909119376c..fcc2bbce6ee3e46573ac35aff083b870b1b6a81a 100644 (file)
@@ -175,6 +175,12 @@ int sd_ndisc_router_get_preference(sd_ndisc_router *rt, unsigned *ret) {
         return 0;
 }
 
+int sd_ndisc_router_get_sender_mac(sd_ndisc_router *rt, struct ether_addr *ret) {
+        assert_return(rt, -EINVAL);
+
+        return ndisc_option_get_mac(rt->options, SD_NDISC_OPTION_SOURCE_LL_ADDRESS, ret);
+}
+
 int sd_ndisc_router_get_mtu(sd_ndisc_router *rt, uint32_t *ret) {
         assert_return(rt, -EINVAL);
         assert_return(ret, -EINVAL);
index 57dbb12817accec1508d7fb3ac6f6d0c2a88bcf9..dde37bcfd765ddb588e2287a38d962ea9238b8c0 100644 (file)
@@ -18,6 +18,7 @@
 ***/
 
 #include <inttypes.h>
+#include <net/ethernet.h>
 #include <netinet/in.h>
 #include <sys/types.h>
 #include <time.h>
@@ -42,6 +43,7 @@ int sd_ndisc_router_get_lifetime(sd_ndisc_router *rt, uint64_t *ret);
 int sd_ndisc_router_get_lifetime_timestamp(sd_ndisc_router *rt, clockid_t clock, uint64_t *ret);
 int sd_ndisc_router_get_reachable_time(sd_ndisc_router *rt, uint64_t *ret);
 int sd_ndisc_router_get_retransmission_time(sd_ndisc_router *rt, uint64_t *ret);
+int sd_ndisc_router_get_sender_mac(sd_ndisc_router *rt, struct ether_addr *ret);
 int sd_ndisc_router_get_mtu(sd_ndisc_router *rt, uint32_t *ret);
 
 /* Generic option access */