]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
libnetlink: introduce rtnl_listen_filter_t
authorNicolas Dichtel <nicolas.dichtel@6wind.com>
Wed, 20 May 2015 14:19:58 +0000 (16:19 +0200)
committerStephen Hemminger <shemming@brocade.com>
Thu, 21 May 2015 22:28:56 +0000 (15:28 -0700)
There is no functional change with this commit. It only prepares the next one.

Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
15 files changed:
bridge/monitor.c
genl/ctrl.c
include/libnetlink.h
ip/ip_common.h
ip/ipaddress.c
ip/iplink.c
ip/ipmonitor.c
ip/ipnetconf.c
ip/ipnetns.c
ip/iproute.c
ip/rtmon.c
ip/xfrm_monitor.c
lib/libnetlink.c
man/man3/libnetlink.3
tc/tc_monitor.c

index 9e1ed48c51419250f300759520aab1fe6f15eb81..d8341ec5fbf183450b923245b315957005effc86 100644 (file)
@@ -36,6 +36,7 @@ static void usage(void)
 }
 
 static int accept_msg(const struct sockaddr_nl *who,
+                     struct rtnl_ctrl_data *ctrl,
                      struct nlmsghdr *n, void *arg)
 {
        FILE *fp = arg;
index 3546129087ece91332146e511bb6d16334775b9d..87d2334a084c5990328e605f587359786dd82709 100644 (file)
@@ -177,8 +177,9 @@ static int print_ctrl_grp(FILE *fp, struct rtattr *arg, __u32 ctrl_ver)
 /*
  * The controller sends one nlmsg per family
 */
-static int print_ctrl(const struct sockaddr_nl *who, struct nlmsghdr *n,
-                     void *arg)
+static int print_ctrl(const struct sockaddr_nl *who,
+                     struct rtnl_ctrl_data *ctrl,
+                     struct nlmsghdr *n, void *arg)
 {
        struct rtattr *tb[CTRL_ATTR_MAX + 1];
        struct genlmsghdr *ghdr = NLMSG_DATA(n);
@@ -281,6 +282,12 @@ static int print_ctrl(const struct sockaddr_nl *who, struct nlmsghdr *n,
        return 0;
 }
 
+static int print_ctrl2(const struct sockaddr_nl *who,
+                     struct nlmsghdr *n, void *arg)
+{
+       return print_ctrl(who, NULL, n, arg);
+}
+
 static int ctrl_list(int cmd, int argc, char **argv)
 {
        struct rtnl_handle rth;
@@ -339,7 +346,7 @@ static int ctrl_list(int cmd, int argc, char **argv)
                        goto ctrl_done;
                }
 
-               if (print_ctrl(NULL, nlh, (void *) stdout) < 0) {
+               if (print_ctrl2(NULL, nlh, (void *) stdout) < 0) {
                        fprintf(stderr, "Dump terminated\n");
                        goto ctrl_done;
                }
@@ -355,7 +362,7 @@ static int ctrl_list(int cmd, int argc, char **argv)
                        goto ctrl_done;
                }
 
-               rtnl_dump_filter(&rth, print_ctrl, stdout);
+               rtnl_dump_filter(&rth, print_ctrl2, stdout);
 
         }
 
@@ -408,5 +415,5 @@ static int parse_ctrl(struct genl_util *a, int argc, char **argv)
 struct genl_util ctrl_genl_util = {
        .name = "ctrl",
        .parse_genlopt = parse_ctrl,
-       .print_genlopt = print_ctrl,
+       .print_genlopt = print_ctrl2,
 };
index 898275b824d4976fe088d582ff7eeba8df7dc96c..1b9c9255ce1d592a8a52ac7ea8a926503cd75b4b 100644 (file)
@@ -41,9 +41,16 @@ extern int rtnl_dump_request(struct rtnl_handle *rth, int type, void *req,
                             int len)
        __attribute__((warn_unused_result));
 
+struct rtnl_ctrl_data {
+};
+
 typedef int (*rtnl_filter_t)(const struct sockaddr_nl *,
                             struct nlmsghdr *n, void *);
 
+typedef int (*rtnl_listen_filter_t)(const struct sockaddr_nl *,
+                                   struct rtnl_ctrl_data *,
+                                   struct nlmsghdr *n, void *);
+
 struct rtnl_dump_filter_arg
 {
        rtnl_filter_t filter;
@@ -118,9 +125,9 @@ static inline const char *rta_getattr_str(const struct rtattr *rta)
        return (const char *)RTA_DATA(rta);
 }
 
-extern int rtnl_listen(struct rtnl_handle *, rtnl_filter_t handler,
+extern int rtnl_listen(struct rtnl_handle *, rtnl_listen_filter_t handler,
                       void *jarg);
-extern int rtnl_from_file(FILE *, rtnl_filter_t handler,
+extern int rtnl_from_file(FILE *, rtnl_listen_filter_t handler,
                       void *jarg);
 
 #define NLMSG_TAIL(nmsg) \
index b082734d9e0ccb67854982010ad81c0da7991936..f120f5b9714381e1a660557529db9180aef08eaf 100644 (file)
@@ -33,6 +33,7 @@ extern int print_prefix(const struct sockaddr_nl *who,
 extern int print_rule(const struct sockaddr_nl *who,
                      struct nlmsghdr *n, void *arg);
 extern int print_netconf(const struct sockaddr_nl *who,
+                        struct rtnl_ctrl_data *ctrl,
                         struct nlmsghdr *n, void *arg);
 extern void netns_map_init(void);
 extern int print_nsid(const struct sockaddr_nl *who,
index 92afa4904917928fc0d4061dc5646527d3892af8..f36ccfb0d0fa78520c0a36c5539216272c6b7325 100644 (file)
@@ -1111,7 +1111,9 @@ static int save_nlmsg(const struct sockaddr_nl *who, struct nlmsghdr *n,
        return ret == n->nlmsg_len ? 0 : ret;
 }
 
-static int show_handler(const struct sockaddr_nl *nl, struct nlmsghdr *n, void *arg)
+static int show_handler(const struct sockaddr_nl *nl,
+                       struct rtnl_ctrl_data *ctrl,
+                       struct nlmsghdr *n, void *arg)
 {
        struct ifaddrmsg *ifa = NLMSG_DATA(n);
 
@@ -1128,7 +1130,9 @@ static int ipaddr_showdump(void)
        exit(rtnl_from_file(stdin, &show_handler, NULL));
 }
 
-static int restore_handler(const struct sockaddr_nl *nl, struct nlmsghdr *n, void *arg)
+static int restore_handler(const struct sockaddr_nl *nl,
+                          struct rtnl_ctrl_data *ctrl,
+                          struct nlmsghdr *n, void *arg)
 {
        int ret;
 
index 39c76e778020f4e1f7a98ab6c06828c81d79017b..b00bf75037d4c88d1a49738bd7f62be87b3acc95 100644 (file)
@@ -180,6 +180,7 @@ static int get_addr_gen_mode(const char *mode)
 static int have_rtnl_newlink = -1;
 
 static int accept_msg(const struct sockaddr_nl *who,
+                     struct rtnl_ctrl_data *ctrl,
                      struct nlmsghdr *n, void *arg)
 {
        struct nlmsgerr *err = (struct nlmsgerr *)NLMSG_DATA(n);
index 1205ee1c703922a31a5626bf02ea18897cc087a7..27bbe441064494b475e71443bb0219d2d8e7b66c 100644 (file)
@@ -38,6 +38,7 @@ static void usage(void)
 }
 
 static int accept_msg(const struct sockaddr_nl *who,
+                     struct rtnl_ctrl_data *ctrl,
                      struct nlmsghdr *n, void *arg)
 {
        FILE *fp = (FILE*)arg;
@@ -122,7 +123,7 @@ static int accept_msg(const struct sockaddr_nl *who,
        if (n->nlmsg_type == RTM_NEWNETCONF) {
                if (prefix_banner)
                        fprintf(fp, "[NETCONF]");
-               print_netconf(who, n, arg);
+               print_netconf(who, ctrl, n, arg);
                return 0;
        }
        if (n->nlmsg_type == NLMSG_TSTAMP) {
index aa31ead0686311a7db127b1bdb4e05f9f1fddaee..eca6eeee834ddf7b2a5d72c1529fe91f513ba1dd 100644 (file)
@@ -40,7 +40,8 @@ static void usage(void)
 
 #define NETCONF_RTA(r) ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct netconfmsg))))
 
-int print_netconf(const struct sockaddr_nl *who, struct nlmsghdr *n, void *arg)
+int print_netconf(const struct sockaddr_nl *who, struct rtnl_ctrl_data *ctrl,
+                 struct nlmsghdr *n, void *arg)
 {
        FILE *fp = (FILE*)arg;
        struct netconfmsg *ncm = NLMSG_DATA(n);
@@ -123,6 +124,12 @@ int print_netconf(const struct sockaddr_nl *who, struct nlmsghdr *n, void *arg)
        return 0;
 }
 
+static int print_netconf2(const struct sockaddr_nl *who,
+                         struct nlmsghdr *n, void *arg)
+{
+       return print_netconf(who, NULL, n, arg);
+}
+
 void ipnetconf_reset_filter(int ifindex)
 {
        memset(&filter, 0, sizeof(filter));
@@ -177,7 +184,7 @@ dump:
                        perror("Cannot send dump request");
                        exit(1);
                }
-               if (rtnl_dump_filter(&rth, print_netconf, stdout) < 0) {
+               if (rtnl_dump_filter(&rth, print_netconf2, stdout) < 0) {
                        fprintf(stderr, "Dump terminated\n");
                        exit(1);
                }
index 438d59bc222e39b4e58331bec4680648bf251d44..019f954cc6f2a527b40ac4e4626dd5fea14c150c 100644 (file)
@@ -43,6 +43,7 @@ static struct rtnl_handle rtnsh = { .fd = -1 };
 static int have_rtnl_getnsid = -1;
 
 static int ipnetns_accept_msg(const struct sockaddr_nl *who,
+                             struct rtnl_ctrl_data *ctrl,
                              struct nlmsghdr *n, void *arg)
 {
        struct nlmsgerr *err = (struct nlmsgerr *)NLMSG_DATA(n);
index 670a4c64d235263bc60b50f003cc7ce8b67b07cc..8bca11a8132a72339a75c591ad36127687c2b7d1 100644 (file)
@@ -1681,8 +1681,9 @@ static int iproute_get(int argc, char **argv)
        exit(0);
 }
 
-static int restore_handler(const struct sockaddr_nl *nl, struct nlmsghdr *n,
-                          void *arg)
+static int restore_handler(const struct sockaddr_nl *nl,
+                          struct rtnl_ctrl_data *ctrl,
+                          struct nlmsghdr *n, void *arg)
 {
        int ret;
 
@@ -1724,7 +1725,9 @@ static int iproute_restore(void)
        exit(rtnl_from_file(stdin, &restore_handler, NULL));
 }
 
-static int show_handler(const struct sockaddr_nl *nl, struct nlmsghdr *n, void *arg)
+static int show_handler(const struct sockaddr_nl *nl,
+                       struct rtnl_ctrl_data *ctrl,
+                       struct nlmsghdr *n, void *arg)
 {
        print_route(nl, n, stdout);
        return 0;
index ff685e530d95db1af3566b7b7887e78deb9bc721..42b24fb5fd385db1a778038c7249bb0fafc1fded 100644 (file)
@@ -45,8 +45,8 @@ static void write_stamp(FILE *fp)
        fwrite((void*)n1, 1, NLMSG_ALIGN(n1->nlmsg_len), fp);
 }
 
-static int dump_msg(const struct sockaddr_nl *who, struct nlmsghdr *n,
-                   void *arg)
+static int dump_msg(const struct sockaddr_nl *who, struct rtnl_ctrl_data *ctrl,
+                   struct nlmsghdr *n, void *arg)
 {
        FILE *fp = (FILE*)arg;
        if (!init_phase)
@@ -56,6 +56,12 @@ static int dump_msg(const struct sockaddr_nl *who, struct nlmsghdr *n,
        return 0;
 }
 
+static int dump_msg2(const struct sockaddr_nl *who,
+                    struct nlmsghdr *n, void *arg)
+{
+       return dump_msg(who, NULL, n, arg);
+}
+
 static void usage(void)
 {
        fprintf(stderr, "Usage: rtmon file FILE [ all | LISTofOBJECTS]\n");
@@ -163,7 +169,7 @@ main(int argc, char **argv)
 
        write_stamp(fp);
 
-       if (rtnl_dump_filter(&rth, dump_msg, fp) < 0) {
+       if (rtnl_dump_filter(&rth, dump_msg2, fp) < 0) {
                fprintf(stderr, "Dump terminated\n");
                return 1;
        }
index 58c7d7f46b44a908934af48c5dec733faa9ba392..2119c51d92ac6debd1359691023294ff4150ae52 100644 (file)
@@ -290,6 +290,7 @@ static int xfrm_mapping_print(const struct sockaddr_nl *who,
 }
 
 static int xfrm_accept_msg(const struct sockaddr_nl *who,
+                          struct rtnl_ctrl_data *ctrl,
                           struct nlmsghdr *n, void *arg)
 {
        FILE *fp = (FILE*)arg;
index 77e07ef7cf602dd2b18e78e3702da9358088a868..01b65cf806c0243cfbb386374d7ff6f108ee772a 100644 (file)
@@ -419,7 +419,7 @@ int rtnl_talk(struct rtnl_handle *rtnl, struct nlmsghdr *n, pid_t peer,
 }
 
 int rtnl_listen(struct rtnl_handle *rtnl,
-               rtnl_filter_t handler,
+               rtnl_listen_filter_t handler,
                void *jarg)
 {
        int status;
@@ -475,7 +475,7 @@ int rtnl_listen(struct rtnl_handle *rtnl,
                                exit(1);
                        }
 
-                       err = handler(&nladdr, h, jarg);
+                       err = handler(&nladdr, NULL, h, jarg);
                        if (err < 0)
                                return err;
 
@@ -493,7 +493,7 @@ int rtnl_listen(struct rtnl_handle *rtnl,
        }
 }
 
-int rtnl_from_file(FILE *rtnl, rtnl_filter_t handler,
+int rtnl_from_file(FILE *rtnl, rtnl_listen_filter_t handler,
                   void *jarg)
 {
        int status;
@@ -541,7 +541,7 @@ int rtnl_from_file(FILE *rtnl, rtnl_filter_t handler,
                        return -1;
                }
 
-               err = handler(&nladdr, h, jarg);
+               err = handler(&nladdr, NULL, h, jarg);
                if (err < 0)
                        return err;
        }
index e999bd68237a1dff0a776429854c49c4c14a213f..99be9cc9f533fac13e3ce953d28d17aec328ae16 100644 (file)
@@ -33,7 +33,8 @@ int rtnl_talk(struct rtnl_handle *rtnl, struct nlmsghdr *n, pid_t peer,
              void *jarg)
 .sp
 int rtnl_listen(struct rtnl_handle *rtnl, 
-             int (*handler)(struct sockaddr_nl *,struct nlmsghdr *n, void *),
+             int (*handler)(struct sockaddr_nl *, struct rtnl_ctrl_data *,
+                            struct nlmsghdr *n, void *),
              void *jarg)
 .sp
 int rtnl_from_file(FILE *rtnl, 
@@ -108,8 +109,8 @@ rtnl_listen
 Receive netlink data after a request and pass it to 
 .I handler.
 .B handler
-is a callback that gets the message source address, the message itself,
-and the
+is a callback that gets the message source address, anscillary data, the message
+itself, and the
 .B jarg
 cookie as arguments. It will get called for all received messages.
 Only one message bundle is received. If there is a message
index 0efe0343db0becd181bb2d5376d8f9d0f0ca1b6a..cae3616145c8c5ce3a75c4c854e7381c86ab56e0 100644 (file)
@@ -36,6 +36,7 @@ static void usage(void)
 
 
 static int accept_tcmsg(const struct sockaddr_nl *who,
+                       struct rtnl_ctrl_data *ctrl,
                        struct nlmsghdr *n, void *arg)
 {
        FILE *fp = (FILE*)arg;