#include "version.h"
 #include "list.h"
 #include "mnlg.h"
+#include "mnl_utils.h"
 #include "json_print.h"
 #include "utils.h"
 #include "namespace.h"
        g_new_line_count++;
 }
 
-static int _mnlg_socket_recv_run(struct mnlg_socket *nlg,
-                                mnl_cb_t data_cb, void *data)
-{
-       int err;
-
-       err = mnlg_socket_recv_run(nlg, data_cb, data);
-       if (err < 0) {
-               pr_err("devlink answers: %s\n", strerror(errno));
-               return -errno;
-       }
-       return 0;
-}
-
 static void dummy_signal_handler(int signum)
 {
 }
 
-static int _mnlg_socket_recv_run_intr(struct mnlg_socket *nlg,
+static int _mnlg_socket_recv_run_intr(struct mnlu_gen_socket *nlg,
                                      mnl_cb_t data_cb, void *data)
 {
        struct sigaction act, oact;
        act.sa_flags = SA_NODEFER;
 
        sigaction(SIGINT, &act, &oact);
-       err = mnlg_socket_recv_run(nlg, data_cb, data);
+       err = mnlu_gen_socket_recv_run(nlg, data_cb, data);
        sigaction(SIGINT, &oact, NULL);
        if (err < 0 && errno != EINTR) {
                pr_err("devlink answers: %s\n", strerror(errno));
        return 0;
 }
 
-static int _mnlg_socket_send(struct mnlg_socket *nlg,
+static int _mnlg_socket_send(struct mnlu_gen_socket *nlg,
                             const struct nlmsghdr *nlh)
 {
        int err;
        return 0;
 }
 
-static int _mnlg_socket_sndrcv(struct mnlg_socket *nlg,
-                              const struct nlmsghdr *nlh,
-                              mnl_cb_t data_cb, void *data)
-{
-       int err;
-
-       err = _mnlg_socket_send(nlg, nlh);
-       if (err)
-               return err;
-       return _mnlg_socket_recv_run(nlg, data_cb, data);
-}
-
-static int _mnlg_socket_group_add(struct mnlg_socket *nlg,
+static int _mnlg_socket_group_add(struct mnlu_gen_socket *nlg,
                                  const char *group_name)
 {
        int err;
 };
 
 struct dl {
-       struct mnlg_socket *nlg;
+       struct mnlu_gen_socket nlg;
        struct list_head ifname_map_list;
        int argc;
        char **argv;
 
        INIT_LIST_HEAD(&dl->ifname_map_list);
 
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_PORT_GET,
+
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_PORT_GET,
                               NLM_F_REQUEST | NLM_F_ACK | NLM_F_DUMP);
 
-       err = _mnlg_socket_sndrcv(dl->nlg, nlh, ifname_map_cb, dl);
+       err = mnlu_gen_socket_sndrcv(&dl->nlg, nlh, ifname_map_cb, dl);
        if (err) {
                ifname_map_fini(dl);
                return err;
        struct nlmsghdr *nlh;
        int err;
 
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_ESWITCH_GET,
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_ESWITCH_GET,
                               NLM_F_REQUEST | NLM_F_ACK);
 
        err = dl_argv_parse_put(nlh, dl, DL_OPT_HANDLE, 0);
                return err;
 
        pr_out_section_start(dl, "dev");
-       err = _mnlg_socket_sndrcv(dl->nlg, nlh, cmd_dev_eswitch_show_cb, dl);
+       err = mnlu_gen_socket_sndrcv(&dl->nlg, nlh, cmd_dev_eswitch_show_cb, dl);
        pr_out_section_end(dl);
        return err;
 }
        struct nlmsghdr *nlh;
        int err;
 
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_ESWITCH_SET,
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_ESWITCH_SET,
                               NLM_F_REQUEST | NLM_F_ACK);
 
        err = dl_argv_parse_put(nlh, dl, DL_OPT_HANDLE,
                return -ENOENT;
        }
 
-       return _mnlg_socket_sndrcv(dl->nlg, nlh, NULL, NULL);
+       return mnlu_gen_socket_sndrcv(&dl->nlg, nlh, NULL, NULL);
 }
 
 static int cmd_dev_eswitch(struct dl *dl)
                return err;
 
        /* Get value type */
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_PARAM_GET,
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_PARAM_GET,
                               NLM_F_REQUEST | NLM_F_ACK);
        dl_opts_put(nlh, dl);
 
        ctx.dl = dl;
-       err = _mnlg_socket_sndrcv(dl->nlg, nlh, cmd_dev_param_set_cb, &ctx);
+       err = mnlu_gen_socket_sndrcv(&dl->nlg, nlh, cmd_dev_param_set_cb, &ctx);
        if (err)
                return err;
 
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_PARAM_SET,
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_PARAM_SET,
                               NLM_F_REQUEST | NLM_F_ACK);
        dl_opts_put(nlh, dl);
 
                printf("Value type not supported\n");
                return -ENOTSUP;
        }
-       return _mnlg_socket_sndrcv(dl->nlg, nlh, NULL, NULL);
+       return mnlu_gen_socket_sndrcv(&dl->nlg, nlh, NULL, NULL);
 
 err_param_value_parse:
        pr_err("Value \"%s\" is not a number or not within range\n",
        if (dl_argc(dl) == 0)
                flags |= NLM_F_DUMP;
 
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_PARAM_GET, flags);
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_PARAM_GET, flags);
 
        if (dl_argc(dl) > 0) {
                err = dl_argv_parse_put(nlh, dl, DL_OPT_HANDLE |
        }
 
        pr_out_section_start(dl, "param");
-       err = _mnlg_socket_sndrcv(dl->nlg, nlh, cmd_dev_param_show_cb, dl);
+       err = mnlu_gen_socket_sndrcv(&dl->nlg, nlh, cmd_dev_param_show_cb, dl);
        pr_out_section_end(dl);
        return err;
 }
        if (dl_argc(dl) == 0)
                flags |= NLM_F_DUMP;
 
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_GET, flags);
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_GET, flags);
 
        if (dl_argc(dl) > 0) {
                err = dl_argv_parse_put(nlh, dl, DL_OPT_HANDLE, 0);
        }
 
        pr_out_section_start(dl, "dev");
-       err = _mnlg_socket_sndrcv(dl->nlg, nlh, cmd_dev_show_cb, dl);
+       err = mnlu_gen_socket_sndrcv(&dl->nlg, nlh, cmd_dev_show_cb, dl);
        pr_out_section_end(dl);
        return err;
 }
                return 0;
        }
 
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_RELOAD,
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_RELOAD,
                               NLM_F_REQUEST | NLM_F_ACK);
 
        err = dl_argv_parse_put(nlh, dl, DL_OPT_HANDLE,
        if (err)
                return err;
 
-       return _mnlg_socket_sndrcv(dl->nlg, nlh, cmd_dev_reload_cb, dl);
+       return mnlu_gen_socket_sndrcv(&dl->nlg, nlh, cmd_dev_reload_cb, dl);
 }
 
 static void pr_out_versions_single(struct dl *dl, const struct nlmsghdr *nlh,
        if (dl_argc(dl) == 0)
                flags |= NLM_F_DUMP;
 
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_INFO_GET, flags);
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_INFO_GET, flags);
 
        if (dl_argc(dl) > 0) {
                err = dl_argv_parse_put(nlh, dl, DL_OPT_HANDLE, 0);
        }
 
        pr_out_section_start(dl, "info");
-       err = _mnlg_socket_sndrcv(dl->nlg, nlh, cmd_versions_show_cb, dl);
+       err = mnlu_gen_socket_sndrcv(&dl->nlg, nlh, cmd_versions_show_cb, dl);
        pr_out_section_end(dl);
        return err;
 }
 }
 
 static int cmd_dev_flash_fds_process(struct cmd_dev_flash_status_ctx *ctx,
-                                    struct mnlg_socket *nlg_ntf,
+                                    struct mnlu_gen_socket *nlg_ntf,
                                     int pipe_r)
 {
        int nlfd = mnlg_socket_get_fd(nlg_ntf);
                return -errno;
        }
        if (FD_ISSET(nlfd, &fds[0])) {
-               err = _mnlg_socket_recv_run(nlg_ntf,
-                                           cmd_dev_flash_status_cb, ctx);
+               err = mnlu_gen_socket_recv_run(nlg_ntf,
+                                              cmd_dev_flash_status_cb, ctx);
                if (err)
                        return err;
        }
 static int cmd_dev_flash(struct dl *dl)
 {
        struct cmd_dev_flash_status_ctx ctx = {.dl = dl,};
-       struct mnlg_socket *nlg_ntf;
+       struct mnlu_gen_socket nlg_ntf;
        struct nlmsghdr *nlh;
        int pipe_r, pipe_w;
        int pipe_fds[2];
                return 0;
        }
 
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_FLASH_UPDATE,
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_FLASH_UPDATE,
                               NLM_F_REQUEST | NLM_F_ACK);
 
        err = dl_argv_parse_put(nlh, dl, DL_OPT_HANDLE | DL_OPT_FLASH_FILE_NAME,
        if (err)
                return err;
 
-       nlg_ntf = mnlg_socket_open(DEVLINK_GENL_NAME, DEVLINK_GENL_VERSION);
-       if (!nlg_ntf)
+       err = mnlu_gen_socket_open(&nlg_ntf, DEVLINK_GENL_NAME,
+                                  DEVLINK_GENL_VERSION);
+       if (err)
                return err;
 
-       err = _mnlg_socket_group_add(nlg_ntf, DEVLINK_GENL_MCGRP_CONFIG_NAME);
+       err = _mnlg_socket_group_add(&nlg_ntf, DEVLINK_GENL_MCGRP_CONFIG_NAME);
        if (err)
                goto err_socket;
 
                int cc;
 
                close(pipe_r);
-               err = _mnlg_socket_send(dl->nlg, nlh);
+               err = _mnlg_socket_send(&dl->nlg, nlh);
                cc = write(pipe_w, &err, sizeof(err));
                close(pipe_w);
                exit(cc != sizeof(err));
        clock_gettime(CLOCK_MONOTONIC, &ctx.time_of_last_status);
 
        do {
-               err = cmd_dev_flash_fds_process(&ctx, nlg_ntf, pipe_r);
+               err = cmd_dev_flash_fds_process(&ctx, &nlg_ntf, pipe_r);
                if (err)
                        goto out;
        } while (!ctx.flash_done || (ctx.not_first && !ctx.received_end));
 
-       err = _mnlg_socket_recv_run(dl->nlg, NULL, NULL);
+       err = mnlu_gen_socket_recv_run(&dl->nlg, NULL, NULL);
+
 out:
        close(pipe_r);
 err_socket:
-       mnlg_socket_close(nlg_ntf);
+       mnlu_gen_socket_close(&nlg_ntf);
        return err;
 }
 
        if (dl_argc(dl) == 0)
                flags |= NLM_F_DUMP;
 
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_PORT_GET, flags);
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_PORT_GET, flags);
 
        if (dl_argc(dl) > 0) {
                err = dl_argv_parse_put(nlh, dl, DL_OPT_HANDLEP, 0);
        }
 
        pr_out_section_start(dl, "port");
-       err = _mnlg_socket_sndrcv(dl->nlg, nlh, cmd_port_show_cb, dl);
+       err = mnlu_gen_socket_sndrcv(&dl->nlg, nlh, cmd_port_show_cb, dl);
        pr_out_section_end(dl);
        return err;
 }
        struct nlmsghdr *nlh;
        int err;
 
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_PORT_SET,
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_PORT_SET,
                               NLM_F_REQUEST | NLM_F_ACK);
 
        err = dl_argv_parse_put(nlh, dl, DL_OPT_HANDLEP | DL_OPT_PORT_TYPE, 0);
        if (err)
                return err;
 
-       return _mnlg_socket_sndrcv(dl->nlg, nlh, NULL, NULL);
+       return mnlu_gen_socket_sndrcv(&dl->nlg, nlh, NULL, NULL);
 }
 
 static int cmd_port_split(struct dl *dl)
        struct nlmsghdr *nlh;
        int err;
 
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_PORT_SPLIT,
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_PORT_SPLIT,
                               NLM_F_REQUEST | NLM_F_ACK);
 
        err = dl_argv_parse_put(nlh, dl, DL_OPT_HANDLEP | DL_OPT_PORT_COUNT, 0);
        if (err)
                return err;
 
-       return _mnlg_socket_sndrcv(dl->nlg, nlh, NULL, NULL);
+       return mnlu_gen_socket_sndrcv(&dl->nlg, nlh, NULL, NULL);
 }
 
 static int cmd_port_unsplit(struct dl *dl)
        struct nlmsghdr *nlh;
        int err;
 
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_PORT_UNSPLIT,
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_PORT_UNSPLIT,
                               NLM_F_REQUEST | NLM_F_ACK);
 
        err = dl_argv_parse_put(nlh, dl, DL_OPT_HANDLEP, 0);
        if (err)
                return err;
 
-       return _mnlg_socket_sndrcv(dl->nlg, nlh, NULL, NULL);
+       return mnlu_gen_socket_sndrcv(&dl->nlg, nlh, NULL, NULL);
 }
 
 static int cmd_port_param_show(struct dl *dl)
        if (dl_argc(dl) == 0)
                flags |= NLM_F_DUMP;
 
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_PORT_PARAM_GET, flags);
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_PORT_PARAM_GET,
+                                         flags);
 
        if (dl_argc(dl) > 0) {
                err = dl_argv_parse_put(nlh, dl, DL_OPT_HANDLEP |
        }
 
        pr_out_section_start(dl, "param");
-       err = _mnlg_socket_sndrcv(dl->nlg, nlh, cmd_port_param_show_cb, dl);
+       err = mnlu_gen_socket_sndrcv(&dl->nlg, nlh, cmd_port_param_show_cb, dl);
        pr_out_section_end(dl);
 
        return err;
                cmd_port_function_help();
                return 0;
        }
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_PORT_SET, NLM_F_REQUEST | NLM_F_ACK);
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_PORT_SET,
+                                         NLM_F_REQUEST | NLM_F_ACK);
 
        err = dl_argv_parse_put(nlh, dl, DL_OPT_HANDLEP,
                                DL_OPT_PORT_FUNCTION_HW_ADDR | DL_OPT_PORT_FUNCTION_STATE);
        if (err)
                return err;
 
-       return _mnlg_socket_sndrcv(dl->nlg, nlh, NULL, NULL);
+       return mnlu_gen_socket_sndrcv(&dl->nlg, nlh, NULL, NULL);
 }
 
 static int cmd_port_param_set_cb(const struct nlmsghdr *nlh, void *data)
                return err;
 
        /* Get value type */
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_PORT_PARAM_GET,
-                              NLM_F_REQUEST | NLM_F_ACK);
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_PORT_PARAM_GET,
+                                         NLM_F_REQUEST | NLM_F_ACK);
        dl_opts_put(nlh, dl);
 
        ctx.dl = dl;
-       err = _mnlg_socket_sndrcv(dl->nlg, nlh, cmd_port_param_set_cb, &ctx);
+       err = mnlu_gen_socket_sndrcv(&dl->nlg, nlh, cmd_port_param_set_cb, &ctx);
        if (err)
                return err;
 
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_PORT_PARAM_SET,
-                              NLM_F_REQUEST | NLM_F_ACK);
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_PORT_PARAM_SET,
+                                         NLM_F_REQUEST | NLM_F_ACK);
        dl_opts_put(nlh, dl);
 
        conv_exists = param_val_conv_exists(param_val_conv, PARAM_VAL_CONV_LEN,
                printf("Value type not supported\n");
                return -ENOTSUP;
        }
-       return _mnlg_socket_sndrcv(dl->nlg, nlh, NULL, NULL);
+       return mnlu_gen_socket_sndrcv(&dl->nlg, nlh, NULL, NULL);
 
 err_param_value_parse:
        pr_err("Value \"%s\" is not a number or not within range\n",
                return 0;
        }
 
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_PORT_NEW,
-                              NLM_F_REQUEST | NLM_F_ACK);
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_PORT_NEW,
+                                         NLM_F_REQUEST | NLM_F_ACK);
 
        err = dl_argv_parse_put(nlh, dl, DL_OPT_HANDLE | DL_OPT_HANDLEP |
                                DL_OPT_PORT_FLAVOUR | DL_OPT_PORT_PFNUMBER,
        if (err)
                return err;
 
-       return _mnlg_socket_sndrcv(dl->nlg, nlh, cmd_port_show_cb, dl);
+       return mnlu_gen_socket_sndrcv(&dl->nlg, nlh, cmd_port_show_cb, dl);
 }
 
 static void cmd_port_del_help(void)
                return 0;
        }
 
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_PORT_DEL,
-                              NLM_F_REQUEST | NLM_F_ACK);
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_PORT_DEL,
+                                         NLM_F_REQUEST | NLM_F_ACK);
 
        err = dl_argv_parse_put(nlh, dl, DL_OPT_HANDLEP, 0);
        if (err)
                return err;
 
-       return _mnlg_socket_sndrcv(dl->nlg, nlh, NULL, NULL);
+       return mnlu_gen_socket_sndrcv(&dl->nlg, nlh, NULL, NULL);
 }
 
 static int cmd_port(struct dl *dl)
        if (dl_argc(dl) == 0)
                flags |= NLM_F_DUMP;
 
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_SB_GET, flags);
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_SB_GET, flags);
 
        if (dl_argc(dl) > 0) {
                err = dl_argv_parse_put(nlh, dl, DL_OPT_HANDLE, DL_OPT_SB);
        }
 
        pr_out_section_start(dl, "sb");
-       err = _mnlg_socket_sndrcv(dl->nlg, nlh, cmd_sb_show_cb, dl);
+       err = mnlu_gen_socket_sndrcv(&dl->nlg, nlh, cmd_sb_show_cb, dl);
        pr_out_section_end(dl);
        return err;
 }
        if (dl_argc(dl) == 0)
                flags |= NLM_F_DUMP;
 
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_SB_POOL_GET, flags);
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_SB_POOL_GET, flags);
 
        if (dl_argc(dl) > 0) {
                err = dl_argv_parse_put(nlh, dl, DL_OPT_HANDLE | DL_OPT_SB_POOL,
        }
 
        pr_out_section_start(dl, "pool");
-       err = _mnlg_socket_sndrcv(dl->nlg, nlh, cmd_sb_pool_show_cb, dl);
+       err = mnlu_gen_socket_sndrcv(&dl->nlg, nlh, cmd_sb_pool_show_cb, dl);
        pr_out_section_end(dl);
        return err;
 }
        struct nlmsghdr *nlh;
        int err;
 
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_SB_POOL_SET,
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_SB_POOL_SET,
                               NLM_F_REQUEST | NLM_F_ACK);
 
        err = dl_argv_parse_put(nlh, dl, DL_OPT_HANDLE | DL_OPT_SB_POOL |
        if (err)
                return err;
 
-       return _mnlg_socket_sndrcv(dl->nlg, nlh, NULL, NULL);
+       return mnlu_gen_socket_sndrcv(&dl->nlg, nlh, NULL, NULL);
 }
 
 static int cmd_sb_pool(struct dl *dl)
        if (dl_argc(dl) == 0)
                flags |= NLM_F_DUMP;
 
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_SB_PORT_POOL_GET, flags);
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_SB_PORT_POOL_GET, flags);
 
        if (dl_argc(dl) > 0) {
                err = dl_argv_parse_put(nlh, dl,
        }
 
        pr_out_section_start(dl, "port_pool");
-       err = _mnlg_socket_sndrcv(dl->nlg, nlh, cmd_sb_port_pool_show_cb, dl);
+       err = mnlu_gen_socket_sndrcv(&dl->nlg, nlh, cmd_sb_port_pool_show_cb, dl);
        pr_out_section_end(dl);
        return 0;
 }
        struct nlmsghdr *nlh;
        int err;
 
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_SB_PORT_POOL_SET,
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_SB_PORT_POOL_SET,
                               NLM_F_REQUEST | NLM_F_ACK);
 
        err = dl_argv_parse_put(nlh, dl, DL_OPT_HANDLEP | DL_OPT_SB_POOL |
        if (err)
                return err;
 
-       return _mnlg_socket_sndrcv(dl->nlg, nlh, NULL, NULL);
+       return mnlu_gen_socket_sndrcv(&dl->nlg, nlh, NULL, NULL);
 }
 
 static int cmd_sb_port_pool(struct dl *dl)
        if (dl_argc(dl) == 0)
                flags |= NLM_F_DUMP;
 
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_SB_TC_POOL_BIND_GET, flags);
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_SB_TC_POOL_BIND_GET, flags);
 
        if (dl_argc(dl) > 0) {
                err = dl_argv_parse_put(nlh, dl, DL_OPT_HANDLEP | DL_OPT_SB_TC |
        }
 
        pr_out_section_start(dl, "tc_bind");
-       err = _mnlg_socket_sndrcv(dl->nlg, nlh, cmd_sb_tc_bind_show_cb, dl);
+       err = mnlu_gen_socket_sndrcv(&dl->nlg, nlh, cmd_sb_tc_bind_show_cb, dl);
        pr_out_section_end(dl);
        return err;
 }
        struct nlmsghdr *nlh;
        int err;
 
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_SB_TC_POOL_BIND_SET,
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_SB_TC_POOL_BIND_SET,
                               NLM_F_REQUEST | NLM_F_ACK);
 
        err = dl_argv_parse_put(nlh, dl, DL_OPT_HANDLEP | DL_OPT_SB_TC |
        if (err)
                return err;
 
-       return _mnlg_socket_sndrcv(dl->nlg, nlh, NULL, NULL);
+       return mnlu_gen_socket_sndrcv(&dl->nlg, nlh, NULL, NULL);
 }
 
 static int cmd_sb_tc_bind(struct dl *dl)
        if (!occ_show)
                return -ENOMEM;
 
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_SB_PORT_POOL_GET, flags);
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_SB_PORT_POOL_GET, flags);
 
-       err = _mnlg_socket_sndrcv(dl->nlg, nlh,
+       err = mnlu_gen_socket_sndrcv(&dl->nlg, nlh,
                                  cmd_sb_occ_port_pool_process_cb, occ_show);
        if (err)
                goto out;
 
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_SB_TC_POOL_BIND_GET, flags);
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_SB_TC_POOL_BIND_GET, flags);
 
-       err = _mnlg_socket_sndrcv(dl->nlg, nlh,
+       err = mnlu_gen_socket_sndrcv(&dl->nlg, nlh,
                                  cmd_sb_occ_tc_pool_process_cb, occ_show);
        if (err)
                goto out;
        struct nlmsghdr *nlh;
        int err;
 
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_SB_OCC_SNAPSHOT,
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_SB_OCC_SNAPSHOT,
                               NLM_F_REQUEST | NLM_F_ACK);
 
        err = dl_argv_parse_put(nlh, dl, DL_OPT_HANDLE, DL_OPT_SB);
        if (err)
                return err;
 
-       return _mnlg_socket_sndrcv(dl->nlg, nlh, NULL, NULL);
+       return mnlu_gen_socket_sndrcv(&dl->nlg, nlh, NULL, NULL);
 }
 
 static int cmd_sb_occ_clearmax(struct dl *dl)
        struct nlmsghdr *nlh;
        int err;
 
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_SB_OCC_MAX_CLEAR,
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_SB_OCC_MAX_CLEAR,
                               NLM_F_REQUEST | NLM_F_ACK);
 
        err = dl_argv_parse_put(nlh, dl, DL_OPT_HANDLE, DL_OPT_SB);
        if (err)
                return err;
 
-       return _mnlg_socket_sndrcv(dl->nlg, nlh, NULL, NULL);
+       return mnlu_gen_socket_sndrcv(&dl->nlg, nlh, NULL, NULL);
 }
 
 static int cmd_sb_occ(struct dl *dl)
                        return -EINVAL;
                }
        }
-       err = _mnlg_socket_group_add(dl->nlg, DEVLINK_GENL_MCGRP_CONFIG_NAME);
+       err = _mnlg_socket_group_add(&dl->nlg, DEVLINK_GENL_MCGRP_CONFIG_NAME);
        if (err)
                return err;
        open_json_object(NULL);
        open_json_array(PRINT_JSON, "mon");
-       err = _mnlg_socket_recv_run_intr(dl->nlg, cmd_mon_show_cb, dl);
+       err = _mnlg_socket_recv_run_intr(&dl->nlg, cmd_mon_show_cb, dl);
        close_json_array(PRINT_JSON, NULL);
        close_json_object();
        if (err)
        uint16_t flags = NLM_F_REQUEST | NLM_F_ACK;
        int err;
 
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_DPIPE_HEADERS_GET, flags);
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_DPIPE_HEADERS_GET, flags);
 
        err = dl_argv_parse_put(nlh, dl, DL_OPT_HANDLE, 0);
        if (err)
        ctx.print_headers = true;
 
        pr_out_section_start(dl, "header");
-       err = _mnlg_socket_sndrcv(dl->nlg, nlh, cmd_dpipe_header_cb, &ctx);
+       err = mnlu_gen_socket_sndrcv(&dl->nlg, nlh, cmd_dpipe_header_cb, &ctx);
        if (err)
                pr_err("error get headers %s\n", strerror(ctx.err));
        pr_out_section_end(dl);
        if (err)
                return err;
 
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_DPIPE_HEADERS_GET, flags);
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_DPIPE_HEADERS_GET, flags);
 
        err = dpipe_ctx_init(&dpipe_ctx, dl);
        if (err)
        dpipe_ctx.print_tables = true;
 
        dl_opts_put(nlh, dl);
-       err = _mnlg_socket_sndrcv(dl->nlg, nlh, cmd_dpipe_header_cb,
+       err = mnlu_gen_socket_sndrcv(&dl->nlg, nlh, cmd_dpipe_header_cb,
                                  &dpipe_ctx);
        if (err) {
                pr_err("error get headers %s\n", strerror(dpipe_ctx.err));
                goto err_resource_ctx_init;
 
        resource_ctx.print_resources = false;
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_RESOURCE_DUMP, flags);
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_RESOURCE_DUMP, flags);
        dl_opts_put(nlh, dl);
-       err = _mnlg_socket_sndrcv(dl->nlg, nlh, cmd_resource_dump_cb,
+       err = mnlu_gen_socket_sndrcv(&dl->nlg, nlh, cmd_resource_dump_cb,
                                  &resource_ctx);
        if (!err)
                dpipe_ctx.resources = resource_ctx.resources;
 
        flags = NLM_F_REQUEST | NLM_F_ACK;
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_DPIPE_TABLE_GET, flags);
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_DPIPE_TABLE_GET, flags);
        dl_opts_put(nlh, dl);
 
        pr_out_section_start(dl, "table");
-       _mnlg_socket_sndrcv(dl->nlg, nlh, cmd_dpipe_table_show_cb, &dpipe_ctx);
+       mnlu_gen_socket_sndrcv(&dl->nlg, nlh, cmd_dpipe_table_show_cb, &dpipe_ctx);
        pr_out_section_end(dl);
 
        resource_ctx_fini(&resource_ctx);
        struct nlmsghdr *nlh;
        int err;
 
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_DPIPE_TABLE_COUNTERS_SET,
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_DPIPE_TABLE_COUNTERS_SET,
                               NLM_F_REQUEST | NLM_F_ACK);
 
        err = dl_argv_parse_put(nlh, dl,
        if (err)
                return err;
 
-       return _mnlg_socket_sndrcv(dl->nlg, nlh, NULL, NULL);
+       return mnlu_gen_socket_sndrcv(&dl->nlg, nlh, NULL, NULL);
 }
 
 enum dpipe_value_type {
        if (err)
                goto out;
 
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_DPIPE_HEADERS_GET, flags);
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_DPIPE_HEADERS_GET, flags);
        dl_opts_put(nlh, dl);
-       err = _mnlg_socket_sndrcv(dl->nlg, nlh, cmd_dpipe_header_cb, &ctx);
+       err = mnlu_gen_socket_sndrcv(&dl->nlg, nlh, cmd_dpipe_header_cb, &ctx);
        if (err) {
                pr_err("error get headers %s\n", strerror(ctx.err));
                goto out;
        }
 
        flags = NLM_F_REQUEST | NLM_F_ACK;
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_DPIPE_ENTRIES_GET, flags);
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_DPIPE_ENTRIES_GET, flags);
        dl_opts_put(nlh, dl);
 
        pr_out_section_start(dl, "table_entry");
-       _mnlg_socket_sndrcv(dl->nlg, nlh, cmd_dpipe_table_entry_dump_cb, &ctx);
+       mnlu_gen_socket_sndrcv(&dl->nlg, nlh, cmd_dpipe_table_entry_dump_cb, &ctx);
        pr_out_section_end(dl);
 out:
        dpipe_ctx_fini(&ctx);
        if (err)
                return err;
 
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_DPIPE_TABLE_GET,
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_DPIPE_TABLE_GET,
                               NLM_F_REQUEST);
        dl_opts_put(nlh, dl);
 
        if (err)
                return err;
 
-       err = _mnlg_socket_sndrcv(dl->nlg, nlh, cmd_dpipe_table_show_cb,
+       err = mnlu_gen_socket_sndrcv(&dl->nlg, nlh, cmd_dpipe_table_show_cb,
                                  &dpipe_ctx);
        if (err) {
                pr_err("error get tables %s\n", strerror(dpipe_ctx.err));
 
        resource_ctx.print_resources = true;
        resource_ctx.tables = dpipe_ctx.tables;
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_RESOURCE_DUMP,
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_RESOURCE_DUMP,
                               NLM_F_REQUEST | NLM_F_ACK);
        dl_opts_put(nlh, dl);
        pr_out_section_start(dl, "resources");
-       err = _mnlg_socket_sndrcv(dl->nlg, nlh, cmd_resource_dump_cb,
+       err = mnlu_gen_socket_sndrcv(&dl->nlg, nlh, cmd_resource_dump_cb,
                                  &resource_ctx);
        pr_out_section_end(dl);
        resource_ctx_fini(&resource_ctx);
        if (err)
                goto out;
 
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_RESOURCE_DUMP,
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_RESOURCE_DUMP,
                               NLM_F_REQUEST);
        dl_opts_put(nlh, dl);
-       err = _mnlg_socket_sndrcv(dl->nlg, nlh, cmd_resource_dump_cb, &ctx);
+       err = mnlu_gen_socket_sndrcv(&dl->nlg, nlh, cmd_resource_dump_cb, &ctx);
        if (err) {
                pr_err("error getting resources %s\n", strerror(ctx.err));
                goto out;
                goto out;
        }
 
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_RESOURCE_SET,
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_RESOURCE_SET,
                               NLM_F_REQUEST | NLM_F_ACK);
 
        dl_opts_put(nlh, dl);
-       err = _mnlg_socket_sndrcv(dl->nlg, nlh, NULL, NULL);
+       err = mnlu_gen_socket_sndrcv(&dl->nlg, nlh, NULL, NULL);
 out:
        resource_ctx_fini(&ctx);
        return err;
        if (dl_argc(dl) == 0)
                flags |= NLM_F_DUMP;
 
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_REGION_GET, flags);
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_REGION_GET, flags);
 
        if (dl_argc(dl) > 0) {
                err = dl_argv_parse_put(nlh, dl, DL_OPT_HANDLE_REGION, 0);
        }
 
        pr_out_section_start(dl, "regions");
-       err = _mnlg_socket_sndrcv(dl->nlg, nlh, cmd_region_show_cb, dl);
+       err = mnlu_gen_socket_sndrcv(&dl->nlg, nlh, cmd_region_show_cb, dl);
        pr_out_section_end(dl);
        return err;
 }
        struct nlmsghdr *nlh;
        int err;
 
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_REGION_DEL,
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_REGION_DEL,
                               NLM_F_REQUEST | NLM_F_ACK);
 
        err = dl_argv_parse_put(nlh, dl, DL_OPT_HANDLE_REGION |
        if (err)
                return err;
 
-       return _mnlg_socket_sndrcv(dl->nlg, nlh, NULL, NULL);
+       return mnlu_gen_socket_sndrcv(&dl->nlg, nlh, NULL, NULL);
 }
 
 static int cmd_region_read_cb(const struct nlmsghdr *nlh, void *data)
        struct nlmsghdr *nlh;
        int err;
 
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_REGION_READ,
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_REGION_READ,
                               NLM_F_REQUEST | NLM_F_ACK | NLM_F_DUMP);
 
        err = dl_argv_parse_put(nlh, dl, DL_OPT_HANDLE_REGION |
                return err;
 
        pr_out_section_start(dl, "dump");
-       err = _mnlg_socket_sndrcv(dl->nlg, nlh, cmd_region_read_cb, dl);
+       err = mnlu_gen_socket_sndrcv(&dl->nlg, nlh, cmd_region_read_cb, dl);
        pr_out_section_end(dl);
        if (!dl->json_output)
                pr_out("\n");
        struct nlmsghdr *nlh;
        int err;
 
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_REGION_READ,
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_REGION_READ,
                               NLM_F_REQUEST | NLM_F_ACK | NLM_F_DUMP);
 
        err = dl_argv_parse_put(nlh, dl, DL_OPT_HANDLE_REGION |
                return err;
 
        pr_out_section_start(dl, "read");
-       err = _mnlg_socket_sndrcv(dl->nlg, nlh, cmd_region_read_cb, dl);
+       err = mnlu_gen_socket_sndrcv(&dl->nlg, nlh, cmd_region_read_cb, dl);
        pr_out_section_end(dl);
        if (!dl->json_output)
                pr_out("\n");
        struct nlmsghdr *nlh;
        int err;
 
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_REGION_NEW,
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_REGION_NEW,
                               NLM_F_REQUEST | NLM_F_ACK);
 
        err = dl_argv_parse_put(nlh, dl, DL_OPT_HANDLE_REGION,
                return err;
 
        pr_out_section_start(dl, "regions");
-       err = _mnlg_socket_sndrcv(dl->nlg, nlh, cmd_region_snapshot_new_cb, dl);
+       err = mnlu_gen_socket_sndrcv(&dl->nlg, nlh, cmd_region_snapshot_new_cb, dl);
        pr_out_section_end(dl);
        return err;
 }
        struct nlmsghdr *nlh;
        int err;
 
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_HEALTH_REPORTER_SET,
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_HEALTH_REPORTER_SET,
                               NLM_F_REQUEST | NLM_F_ACK);
        err = dl_argv_parse(dl, DL_OPT_HANDLE | DL_OPT_HANDLEP | DL_OPT_HEALTH_REPORTER_NAME,
                            DL_OPT_HEALTH_REPORTER_GRACEFUL_PERIOD |
                return err;
 
        dl_opts_put(nlh, dl);
-       return _mnlg_socket_sndrcv(dl->nlg, nlh, NULL, NULL);
+       return mnlu_gen_socket_sndrcv(&dl->nlg, nlh, NULL, NULL);
 }
 
 static int cmd_health_dump_clear(struct dl *dl)
        struct nlmsghdr *nlh;
        int err;
 
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_HEALTH_REPORTER_DUMP_CLEAR,
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_HEALTH_REPORTER_DUMP_CLEAR,
                               NLM_F_REQUEST | NLM_F_ACK);
 
        err = dl_argv_parse_put(nlh, dl,
                return err;
 
        dl_opts_put(nlh, dl);
-       return _mnlg_socket_sndrcv(dl->nlg, nlh, NULL, NULL);
+       return mnlu_gen_socket_sndrcv(&dl->nlg, nlh, NULL, NULL);
 }
 
 static int fmsg_value_show(struct dl *dl, int type, struct nlattr *nl_data)
        struct nlmsghdr *nlh;
        int err;
 
-       nlh = mnlg_msg_prepare(dl->nlg, cmd, flags | NLM_F_REQUEST | NLM_F_ACK);
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, cmd, flags | NLM_F_REQUEST | NLM_F_ACK);
 
        err = dl_argv_parse_put(nlh, dl,
                                DL_OPT_HANDLE | DL_OPT_HANDLEP |
                return err;
 
        cmd_fmsg_init(dl, &data);
-       err = _mnlg_socket_sndrcv(dl->nlg, nlh, cmd_fmsg_object_cb, &data);
+       err = mnlu_gen_socket_sndrcv(&dl->nlg, nlh, cmd_fmsg_object_cb, &data);
        free(data.name);
        return err;
 }
        struct nlmsghdr *nlh;
        int err;
 
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_HEALTH_REPORTER_RECOVER,
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_HEALTH_REPORTER_RECOVER,
                               NLM_F_REQUEST | NLM_F_ACK);
 
        err = dl_argv_parse_put(nlh, dl,
                return err;
 
        dl_opts_put(nlh, dl);
-       return _mnlg_socket_sndrcv(dl->nlg, nlh, NULL, NULL);
+       return mnlu_gen_socket_sndrcv(&dl->nlg, nlh, NULL, NULL);
 }
 
 enum devlink_health_reporter_state {
 
        if (dl_argc(dl) == 0)
                flags |= NLM_F_DUMP;
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_HEALTH_REPORTER_GET,
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_HEALTH_REPORTER_GET,
                               flags);
 
        if (dl_argc(dl) > 0) {
        }
        pr_out_section_start(dl, "health");
 
-       err = _mnlg_socket_sndrcv(dl->nlg, nlh, cmd_health_show_cb, &ctx);
+       err = mnlu_gen_socket_sndrcv(&dl->nlg, nlh, cmd_health_show_cb, &ctx);
        pr_out_section_end(dl);
        return err;
 }
        if (dl_argc(dl) == 0)
                flags |= NLM_F_DUMP;
 
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_TRAP_GET, flags);
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_TRAP_GET, flags);
 
        if (dl_argc(dl) > 0) {
                err = dl_argv_parse_put(nlh, dl,
        }
 
        pr_out_section_start(dl, "trap");
-       err = _mnlg_socket_sndrcv(dl->nlg, nlh, cmd_trap_show_cb, dl);
+       err = mnlu_gen_socket_sndrcv(&dl->nlg, nlh, cmd_trap_show_cb, dl);
        pr_out_section_end(dl);
 
        return err;
        struct nlmsghdr *nlh;
        int err;
 
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_TRAP_SET,
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_TRAP_SET,
                               NLM_F_REQUEST | NLM_F_ACK);
 
        err = dl_argv_parse_put(nlh, dl, DL_OPT_HANDLE | DL_OPT_TRAP_NAME,
        if (err)
                return err;
 
-       return _mnlg_socket_sndrcv(dl->nlg, nlh, NULL, NULL);
+       return mnlu_gen_socket_sndrcv(&dl->nlg, nlh, NULL, NULL);
 }
 
 static void pr_out_trap_group(struct dl *dl, struct nlattr **tb, bool array)
        if (dl_argc(dl) == 0)
                flags |= NLM_F_DUMP;
 
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_TRAP_GROUP_GET, flags);
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_TRAP_GROUP_GET, flags);
 
        if (dl_argc(dl) > 0) {
                err = dl_argv_parse_put(nlh, dl,
        }
 
        pr_out_section_start(dl, "trap_group");
-       err = _mnlg_socket_sndrcv(dl->nlg, nlh, cmd_trap_group_show_cb, dl);
+       err = mnlu_gen_socket_sndrcv(&dl->nlg, nlh, cmd_trap_group_show_cb, dl);
        pr_out_section_end(dl);
 
        return err;
        struct nlmsghdr *nlh;
        int err;
 
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_TRAP_GROUP_SET,
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_TRAP_GROUP_SET,
                               NLM_F_REQUEST | NLM_F_ACK);
 
        err = dl_argv_parse_put(nlh, dl,
        if (err)
                return err;
 
-       return _mnlg_socket_sndrcv(dl->nlg, nlh, NULL, NULL);
+       return mnlu_gen_socket_sndrcv(&dl->nlg, nlh, NULL, NULL);
 }
 
 static int cmd_trap_group(struct dl *dl)
        if (dl_argc(dl) == 0)
                flags |= NLM_F_DUMP;
 
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_TRAP_POLICER_GET, flags);
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_TRAP_POLICER_GET, flags);
 
        if (dl_argc(dl) > 0) {
                err = dl_argv_parse_put(nlh, dl,
        }
 
        pr_out_section_start(dl, "trap_policer");
-       err = _mnlg_socket_sndrcv(dl->nlg, nlh, cmd_trap_policer_show_cb, dl);
+       err = mnlu_gen_socket_sndrcv(&dl->nlg, nlh, cmd_trap_policer_show_cb, dl);
        pr_out_section_end(dl);
 
        return err;
        struct nlmsghdr *nlh;
        int err;
 
-       nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_TRAP_POLICER_SET,
+       nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_TRAP_POLICER_SET,
                               NLM_F_REQUEST | NLM_F_ACK);
 
        err = dl_argv_parse_put(nlh, dl,
        if (err)
                return err;
 
-       return _mnlg_socket_sndrcv(dl->nlg, nlh, NULL, NULL);
+       return mnlu_gen_socket_sndrcv(&dl->nlg, nlh, NULL, NULL);
 }
 
 static int cmd_trap_policer(struct dl *dl)
 {
        int err;
 
-       dl->nlg = mnlg_socket_open(DEVLINK_GENL_NAME, DEVLINK_GENL_VERSION);
-       if (!dl->nlg) {
+       err = mnlu_gen_socket_open(&dl->nlg, DEVLINK_GENL_NAME,
+                                  DEVLINK_GENL_VERSION);
+       if (err) {
                pr_err("Failed to connect to devlink Netlink\n");
                return -errno;
        }
        return 0;
 
 err_ifname_map_create:
-       mnlg_socket_close(dl->nlg);
+       mnlu_gen_socket_close(&dl->nlg);
        return err;
 }
 
 {
        delete_json_obj_plain();
        ifname_map_fini(dl);
-       mnlg_socket_close(dl->nlg);
+       mnlu_gen_socket_close(&dl->nlg);
 }
 
 static struct dl *dl_alloc(void)