return msgtype & RTNL_KIND_MASK;
 }
 
+struct rtnl_msg_handler {
+       struct module *owner;
+       int protocol;
+       int msgtype;
+       rtnl_doit_func doit;
+       rtnl_dumpit_func dumpit;
+       int flags;
+};
+
 void rtnl_register(int protocol, int msgtype,
                   rtnl_doit_func, rtnl_dumpit_func, unsigned int flags);
 int rtnl_register_module(struct module *owner, int protocol, int msgtype,
 int rtnl_unregister(int protocol, int msgtype);
 void rtnl_unregister_all(int protocol);
 
+int __rtnl_register_many(const struct rtnl_msg_handler *handlers, int n);
+void __rtnl_unregister_many(const struct rtnl_msg_handler *handlers, int n);
+
+#define rtnl_register_many(handlers)                           \
+       __rtnl_register_many(handlers, ARRAY_SIZE(handlers))
+#define rtnl_unregister_many(handlers)                         \
+       __rtnl_unregister_many(handlers, ARRAY_SIZE(handlers))
+
 static inline int rtnl_msg_family(const struct nlmsghdr *nlh)
 {
        if (nlmsg_len(nlh) >= sizeof(struct rtgenmsg))
 
 }
 EXPORT_SYMBOL_GPL(rtnl_unregister_all);
 
+int __rtnl_register_many(const struct rtnl_msg_handler *handlers, int n)
+{
+       const struct rtnl_msg_handler *handler;
+       int i, err;
+
+       for (i = 0, handler = handlers; i < n; i++, handler++) {
+               err = rtnl_register_internal(handler->owner, handler->protocol,
+                                            handler->msgtype, handler->doit,
+                                            handler->dumpit, handler->flags);
+               if (err) {
+                       __rtnl_unregister_many(handlers, i);
+                       break;
+               }
+       }
+
+       return err;
+}
+EXPORT_SYMBOL_GPL(__rtnl_register_many);
+
+void __rtnl_unregister_many(const struct rtnl_msg_handler *handlers, int n)
+{
+       const struct rtnl_msg_handler *handler;
+       int i;
+
+       for (i = n - 1, handler = handlers + n - 1; i >= 0; i--, handler--)
+               rtnl_unregister(handler->protocol, handler->msgtype);
+}
+EXPORT_SYMBOL_GPL(__rtnl_unregister_many);
+
 static LIST_HEAD(link_ops);
 
 static const struct rtnl_link_ops *rtnl_link_ops_get(const char *kind)