]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
libgenl: introduce genl_init_handle
authorSabrina Dubroca <sd@queasysnail.net>
Tue, 16 Aug 2016 14:26:55 +0000 (16:26 +0200)
committerStephen Hemminger <sthemmin@microsoft.com>
Wed, 17 Aug 2016 20:59:21 +0000 (13:59 -0700)
All users of genl have the same code to open a genl socket and resolve
the family for their specific protocol.  Introduce a helper to initialize
the handle, and use it in all the genl code.

Signed-off-by: Sabrina Dubroca <sd@queasysnail.net>
include/libgenl.h
ip/ipfou.c
ip/ipila.c
ip/ipl2tp.c
ip/ipmacsec.c
ip/tcp_metrics.c
lib/libgenl.c

index 9db4bafd511bee29747e96b3d84c8ed7ea8a3815..2dbb4b36adcbfc9083eced4f3ac2f1e2142ce1a1 100644 (file)
@@ -21,5 +21,7 @@ struct {                                                              \
 }
 
 extern int genl_resolve_family(struct rtnl_handle *grth, const char *family);
+extern int genl_init_handle(struct rtnl_handle *grth, const char *family,
+                           int *genl_family);
 
 #endif /* __LIBGENL_H__ */
index 0673d11ff6f9fec0ec664094806b1fb30d66db71..9f0911215749b976db94556a08f36451d32d4e7f 100644 (file)
@@ -136,16 +136,8 @@ static int do_del(int argc, char **argv)
 
 int do_ipfou(int argc, char **argv)
 {
-       if (genl_family < 0) {
-               if (rtnl_open_byproto(&genl_rth, 0, NETLINK_GENERIC) < 0) {
-                       fprintf(stderr, "Cannot open generic netlink socket\n");
-                       exit(1);
-               }
-
-               genl_family = genl_resolve_family(&genl_rth, FOU_GENL_NAME);
-               if (genl_family < 0)
-                       exit(1);
-       }
+       if (genl_init_handle(&genl_rth, FOU_GENL_NAME, &genl_family))
+               exit(1);
 
        if (argc < 1)
                usage();
index 57f8c79ba2f4006daafe8d16b2a9d37408a189f1..d75c4629778bb80d07cea9fe8a81b458db1c8ea4 100644 (file)
@@ -240,16 +240,8 @@ static int do_del(int argc, char **argv)
 
 int do_ipila(int argc, char **argv)
 {
-       if (genl_family < 0) {
-               if (rtnl_open_byproto(&genl_rth, 0, NETLINK_GENERIC) < 0) {
-                       fprintf(stderr, "Cannot open generic netlink socket\n");
-                       exit(1);
-               }
-
-               genl_family = genl_resolve_family(&genl_rth, ILA_GENL_NAME);
-               if (genl_family < 0)
-                       exit(1);
-       }
+       if (genl_init_handle(&genl_rth, ILA_GENL_NAME, &genl_family))
+               exit(1);
 
        if (argc < 1)
                usage();
index 9ebda135e5d689c34d3146b751a3f73ef50b0b88..d3338acecc9c50c61900fe0b19517c6498a2676b 100644 (file)
@@ -767,16 +767,8 @@ int do_ipl2tp(int argc, char **argv)
        if (argc < 1 || !matches(*argv, "help"))
                usage();
 
-       if (genl_family < 0) {
-               if (rtnl_open_byproto(&genl_rth, 0, NETLINK_GENERIC) < 0) {
-                       fprintf(stderr, "Cannot open generic netlink socket\n");
-                       exit(1);
-               }
-
-               genl_family = genl_resolve_family(&genl_rth, L2TP_GENL_NAME);
-               if (genl_family < 0)
-                       exit(1);
-       }
+       if (genl_init_handle(&genl_rth, L2TP_GENL_NAME, &genl_family))
+               exit(1);
 
        if (matches(*argv, "add") == 0)
                return do_add(argc-1, argv+1);
index 329be00fb32b4f4d02df1452fc0c5446a0c5d6cf..9eabfe2419807f498f23fbaf2ddcac89c58510e3 100644 (file)
@@ -79,21 +79,6 @@ static int genl_family = -1;
                     _cmd, _flags)
 
 
-static void init_genl(void)
-{
-       if (genl_family >= 0)
-               return;
-
-       if (rtnl_open_byproto(&genl_rth, 0, NETLINK_GENERIC) < 0) {
-               fprintf(stderr, "Cannot open generic netlink socket\n");
-               exit(1);
-       }
-
-       genl_family = genl_resolve_family(&genl_rth, MACSEC_GENL_NAME);
-       if (genl_family < 0)
-               exit(1);
-}
-
 static void ipmacsec_usage(void)
 {
        fprintf(stderr, "Usage: ip macsec add DEV tx sa { 0..3 } [ OPTS ] key ID KEY\n");
@@ -1001,7 +986,8 @@ static int do_show(int argc, char **argv)
 
 int do_ipmacsec(int argc, char **argv)
 {
-       init_genl();
+       if (genl_init_handle(&genl_rth, MACSEC_GENL_NAME, &genl_family))
+               exit(1);
 
        if (argc < 1)
                ipmacsec_usage();
index ac2613a0a880e81b99c8dfe2f2f21f971ba43fcb..8972acd05fb28fd91d052c89a8ae9e90eb80c8b0 100644 (file)
@@ -398,17 +398,9 @@ static int tcpm_do_cmd(int cmd, int argc, char **argv)
                ack = 0;
        }
 
-       if (genl_family < 0) {
-               if (rtnl_open_byproto(&grth, 0, NETLINK_GENERIC) < 0) {
-                       fprintf(stderr, "Cannot open generic netlink socket\n");
-                       exit(1);
-               }
-               genl_family = genl_resolve_family(&grth,
-                                                 TCP_METRICS_GENL_NAME);
-               if (genl_family < 0)
-                       exit(1);
-               req.n.nlmsg_type = genl_family;
-       }
+       if (genl_init_handle(&grth, TCP_METRICS_GENL_NAME, &genl_family))
+               exit(1);
+       req.n.nlmsg_type = genl_family;
 
        if (!(cmd & CMD_FLUSH) && (atype >= 0 || (cmd & CMD_DEL))) {
                if (ack)
index a1a37a440f64f2418fed9dce537b7629869553a0..50d2d9217dcbc7dd7f1d22618e69eac84f44571d 100644 (file)
@@ -60,3 +60,21 @@ int genl_resolve_family(struct rtnl_handle *grth, const char *family)
 
        return genl_parse_getfamily(&req.n);
 }
+
+int genl_init_handle(struct rtnl_handle *grth, const char *family,
+                    int *genl_family)
+{
+       if (*genl_family >= 0)
+               return 0;
+
+       if (rtnl_open_byproto(grth, 0, NETLINK_GENERIC) < 0) {
+               fprintf(stderr, "Cannot open generic netlink socket\n");
+               return -1;
+       }
+
+       *genl_family = genl_resolve_family(grth, family);
+       if (*genl_family < 0)
+               return -1;
+
+       return 0;
+}