]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-ndisc: make callback takes arbitrary type of message
authorYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 14 Feb 2024 11:38:12 +0000 (20:38 +0900)
committerLuca Boccassi <luca.boccassi@gmail.com>
Sun, 25 Feb 2024 11:38:58 +0000 (11:38 +0000)
No functional change. Preparation for supporting Neighbor Advertisement
message.

src/libsystemd-network/sd-ndisc.c
src/libsystemd-network/test-ndisc-rs.c
src/network/networkd-ndisc.c
src/systemd/sd-ndisc.h

index ac31d212e39ad0dcbe909cae04deeb7b4ca0cea5..8991bdcd637bee45f8b71966c0076bbca7e5c60b 100644 (file)
@@ -31,7 +31,7 @@ static const char * const ndisc_event_table[_SD_NDISC_EVENT_MAX] = {
 
 DEFINE_STRING_TABLE_LOOKUP(ndisc_event, sd_ndisc_event_t);
 
-static void ndisc_callback(sd_ndisc *ndisc, sd_ndisc_event_t event, sd_ndisc_router *rt) {
+static void ndisc_callback(sd_ndisc *ndisc, sd_ndisc_event_t event, void *message) {
         assert(ndisc);
         assert(event >= 0 && event < _SD_NDISC_EVENT_MAX);
 
@@ -39,7 +39,7 @@ static void ndisc_callback(sd_ndisc *ndisc, sd_ndisc_event_t event, sd_ndisc_rou
                 return (void) log_ndisc(ndisc, "Received '%s' event.", ndisc_event_to_string(event));
 
         log_ndisc(ndisc, "Invoking callback for '%s' event.", ndisc_event_to_string(event));
-        ndisc->callback(ndisc, event, rt, ndisc->userdata);
+        ndisc->callback(ndisc, event, message, ndisc->userdata);
 }
 
 int sd_ndisc_is_running(sd_ndisc *nd) {
index 9c755ecbc64d9cb4fd6e94ff093e05e3d4c1767e..e37dfeededc669fc414b414b81704608737065f1 100644 (file)
@@ -202,7 +202,7 @@ static int send_ra(uint8_t flags) {
         return 0;
 }
 
-static void test_callback(sd_ndisc *nd, sd_ndisc_event_t event, sd_ndisc_router *rt, void *userdata) {
+static void test_callback(sd_ndisc *nd, sd_ndisc_event_t event, void *message, void *userdata) {
         sd_event *e = userdata;
         static unsigned idx = 0;
         uint64_t flags_array[] = {
@@ -219,6 +219,8 @@ static void test_callback(sd_ndisc *nd, sd_ndisc_event_t event, sd_ndisc_router
         if (event != SD_NDISC_EVENT_ROUTER)
                 return;
 
+        sd_ndisc_router *rt = ASSERT_PTR(message);
+
         router_dump(rt);
 
         assert_se(sd_ndisc_router_get_flags(rt, &flags) >= 0);
index 67f981121b0608fa94d8893d9e0bb94eb342d05b..04f3126337148be03ced5f8fe028839fd3adf43a 100644 (file)
@@ -1735,7 +1735,7 @@ static int ndisc_router_handler(Link *link, sd_ndisc_router *rt) {
         return 0;
 }
 
-static void ndisc_handler(sd_ndisc *nd, sd_ndisc_event_t event, sd_ndisc_router *rt, void *userdata) {
+static void ndisc_handler(sd_ndisc *nd, sd_ndisc_event_t event, void *message, void *userdata) {
         Link *link = ASSERT_PTR(userdata);
         int r;
 
@@ -1745,7 +1745,7 @@ static void ndisc_handler(sd_ndisc *nd, sd_ndisc_event_t event, sd_ndisc_router
         switch (event) {
 
         case SD_NDISC_EVENT_ROUTER:
-                r = ndisc_router_handler(link, rt);
+                r = ndisc_router_handler(link, ASSERT_PTR(message));
                 if (r < 0 && r != -EBADMSG) {
                         link_enter_failed(link);
                         return;
@@ -1759,8 +1759,9 @@ static void ndisc_handler(sd_ndisc *nd, sd_ndisc_event_t event, sd_ndisc_router
                         link_check_ready(link);
                 }
                 break;
+
         default:
-                assert_not_reached();
+                log_link_debug(link, "Received unsupported NDisc event, ignoring.");
         }
 }
 
index 1bc7c738894e26227c426c8b514477160ec55915..94f6da04879d25205d4fc636c19b214d0ff982e6 100644 (file)
@@ -43,7 +43,7 @@ __extension__ typedef enum sd_ndisc_event_t {
         _SD_ENUM_FORCE_S64(NDISC_EVENT)
 } sd_ndisc_event_t;
 
-typedef void (*sd_ndisc_callback_t)(sd_ndisc *nd, sd_ndisc_event_t event, sd_ndisc_router *rt, void *userdata);
+typedef void (*sd_ndisc_callback_t)(sd_ndisc *nd, sd_ndisc_event_t event, void *message, void *userdata);
 
 int sd_ndisc_new(sd_ndisc **ret);
 sd_ndisc *sd_ndisc_ref(sd_ndisc *nd);