Loading net/core/rtnetlink.c +23 −31 Original line number Original line Diff line number Diff line Loading @@ -38,7 +38,6 @@ #include <asm/uaccess.h> #include <asm/uaccess.h> #include <asm/system.h> #include <asm/system.h> #include <asm/string.h> #include <linux/inet.h> #include <linux/inet.h> #include <linux/netdevice.h> #include <linux/netdevice.h> Loading @@ -53,8 +52,7 @@ #include <net/rtnetlink.h> #include <net/rtnetlink.h> #include <net/net_namespace.h> #include <net/net_namespace.h> struct rtnl_link struct rtnl_link { { rtnl_doit_func doit; rtnl_doit_func doit; rtnl_dumpit_func dumpit; rtnl_dumpit_func dumpit; }; }; Loading @@ -65,6 +63,7 @@ void rtnl_lock(void) { { mutex_lock(&rtnl_mutex); mutex_lock(&rtnl_mutex); } } EXPORT_SYMBOL(rtnl_lock); void __rtnl_unlock(void) void __rtnl_unlock(void) { { Loading @@ -76,16 +75,19 @@ void rtnl_unlock(void) /* This fellow will unlock it for us. */ /* This fellow will unlock it for us. */ netdev_run_todo(); netdev_run_todo(); } } EXPORT_SYMBOL(rtnl_unlock); int rtnl_trylock(void) int rtnl_trylock(void) { { return mutex_trylock(&rtnl_mutex); return mutex_trylock(&rtnl_mutex); } } EXPORT_SYMBOL(rtnl_trylock); int rtnl_is_locked(void) int rtnl_is_locked(void) { { return mutex_is_locked(&rtnl_mutex); return mutex_is_locked(&rtnl_mutex); } } EXPORT_SYMBOL(rtnl_is_locked); static struct rtnl_link *rtnl_msg_handlers[NPROTO]; static struct rtnl_link *rtnl_msg_handlers[NPROTO]; Loading Loading @@ -168,7 +170,6 @@ int __rtnl_register(int protocol, int msgtype, return 0; return 0; } } EXPORT_SYMBOL_GPL(__rtnl_register); EXPORT_SYMBOL_GPL(__rtnl_register); /** /** Loading @@ -188,7 +189,6 @@ void rtnl_register(int protocol, int msgtype, "protocol = %d, message type = %d\n", "protocol = %d, message type = %d\n", protocol, msgtype); protocol, msgtype); } } EXPORT_SYMBOL_GPL(rtnl_register); EXPORT_SYMBOL_GPL(rtnl_register); /** /** Loading @@ -213,7 +213,6 @@ int rtnl_unregister(int protocol, int msgtype) return 0; return 0; } } EXPORT_SYMBOL_GPL(rtnl_unregister); EXPORT_SYMBOL_GPL(rtnl_unregister); /** /** Loading @@ -230,7 +229,6 @@ void rtnl_unregister_all(int protocol) kfree(rtnl_msg_handlers[protocol]); kfree(rtnl_msg_handlers[protocol]); rtnl_msg_handlers[protocol] = NULL; rtnl_msg_handlers[protocol] = NULL; } } EXPORT_SYMBOL_GPL(rtnl_unregister_all); EXPORT_SYMBOL_GPL(rtnl_unregister_all); static LIST_HEAD(link_ops); static LIST_HEAD(link_ops); Loading @@ -253,7 +251,6 @@ int __rtnl_link_register(struct rtnl_link_ops *ops) list_add_tail(&ops->list, &link_ops); list_add_tail(&ops->list, &link_ops); return 0; return 0; } } EXPORT_SYMBOL_GPL(__rtnl_link_register); EXPORT_SYMBOL_GPL(__rtnl_link_register); /** /** Loading @@ -271,7 +268,6 @@ int rtnl_link_register(struct rtnl_link_ops *ops) rtnl_unlock(); rtnl_unlock(); return err; return err; } } EXPORT_SYMBOL_GPL(rtnl_link_register); EXPORT_SYMBOL_GPL(rtnl_link_register); static void __rtnl_kill_links(struct net *net, struct rtnl_link_ops *ops) static void __rtnl_kill_links(struct net *net, struct rtnl_link_ops *ops) Loading Loading @@ -309,7 +305,6 @@ void __rtnl_link_unregister(struct rtnl_link_ops *ops) } } list_del(&ops->list); list_del(&ops->list); } } EXPORT_SYMBOL_GPL(__rtnl_link_unregister); EXPORT_SYMBOL_GPL(__rtnl_link_unregister); /** /** Loading @@ -322,7 +317,6 @@ void rtnl_link_unregister(struct rtnl_link_ops *ops) __rtnl_link_unregister(ops); __rtnl_link_unregister(ops); rtnl_unlock(); rtnl_unlock(); } } EXPORT_SYMBOL_GPL(rtnl_link_unregister); EXPORT_SYMBOL_GPL(rtnl_link_unregister); static const struct rtnl_link_ops *rtnl_link_ops_get(const char *kind) static const struct rtnl_link_ops *rtnl_link_ops_get(const char *kind) Loading Loading @@ -433,6 +427,7 @@ void __rta_fill(struct sk_buff *skb, int attrtype, int attrlen, const void *data memcpy(RTA_DATA(rta), data, attrlen); memcpy(RTA_DATA(rta), data, attrlen); memset(RTA_DATA(rta) + attrlen, 0, RTA_ALIGN(size) - size); memset(RTA_DATA(rta) + attrlen, 0, RTA_ALIGN(size) - size); } } EXPORT_SYMBOL(__rta_fill); int rtnetlink_send(struct sk_buff *skb, struct net *net, u32 pid, unsigned group, int echo) int rtnetlink_send(struct sk_buff *skb, struct net *net, u32 pid, unsigned group, int echo) { { Loading @@ -454,6 +449,7 @@ int rtnl_unicast(struct sk_buff *skb, struct net *net, u32 pid) return nlmsg_unicast(rtnl, skb, pid); return nlmsg_unicast(rtnl, skb, pid); } } EXPORT_SYMBOL(rtnl_unicast); void rtnl_notify(struct sk_buff *skb, struct net *net, u32 pid, u32 group, void rtnl_notify(struct sk_buff *skb, struct net *net, u32 pid, u32 group, struct nlmsghdr *nlh, gfp_t flags) struct nlmsghdr *nlh, gfp_t flags) Loading @@ -466,6 +462,7 @@ void rtnl_notify(struct sk_buff *skb, struct net *net, u32 pid, u32 group, nlmsg_notify(rtnl, skb, pid, group, report, flags); nlmsg_notify(rtnl, skb, pid, group, report, flags); } } EXPORT_SYMBOL(rtnl_notify); void rtnl_set_sk_err(struct net *net, u32 group, int error) void rtnl_set_sk_err(struct net *net, u32 group, int error) { { Loading @@ -473,6 +470,7 @@ void rtnl_set_sk_err(struct net *net, u32 group, int error) netlink_set_err(rtnl, 0, group, error); netlink_set_err(rtnl, 0, group, error); } } EXPORT_SYMBOL(rtnl_set_sk_err); int rtnetlink_put_metrics(struct sk_buff *skb, u32 *metrics) int rtnetlink_put_metrics(struct sk_buff *skb, u32 *metrics) { { Loading Loading @@ -501,6 +499,7 @@ int rtnetlink_put_metrics(struct sk_buff *skb, u32 *metrics) nla_nest_cancel(skb, mx); nla_nest_cancel(skb, mx); return -EMSGSIZE; return -EMSGSIZE; } } EXPORT_SYMBOL(rtnetlink_put_metrics); int rtnl_put_cacheinfo(struct sk_buff *skb, struct dst_entry *dst, u32 id, int rtnl_put_cacheinfo(struct sk_buff *skb, struct dst_entry *dst, u32 id, u32 ts, u32 tsage, long expires, u32 error) u32 ts, u32 tsage, long expires, u32 error) Loading @@ -520,7 +519,6 @@ int rtnl_put_cacheinfo(struct sk_buff *skb, struct dst_entry *dst, u32 id, return nla_put(skb, RTA_CACHEINFO, sizeof(ci), &ci); return nla_put(skb, RTA_CACHEINFO, sizeof(ci), &ci); } } EXPORT_SYMBOL_GPL(rtnl_put_cacheinfo); EXPORT_SYMBOL_GPL(rtnl_put_cacheinfo); static void set_operstate(struct net_device *dev, unsigned char transition) static void set_operstate(struct net_device *dev, unsigned char transition) Loading Loading @@ -728,6 +726,7 @@ const struct nla_policy ifla_policy[IFLA_MAX+1] = { [IFLA_NET_NS_PID] = { .type = NLA_U32 }, [IFLA_NET_NS_PID] = { .type = NLA_U32 }, [IFLA_IFALIAS] = { .type = NLA_STRING, .len = IFALIASZ-1 }, [IFLA_IFALIAS] = { .type = NLA_STRING, .len = IFALIASZ-1 }, }; }; EXPORT_SYMBOL(ifla_policy); static const struct nla_policy ifla_info_policy[IFLA_INFO_MAX+1] = { static const struct nla_policy ifla_info_policy[IFLA_INFO_MAX+1] = { [IFLA_INFO_KIND] = { .type = NLA_STRING }, [IFLA_INFO_KIND] = { .type = NLA_STRING }, Loading Loading @@ -932,7 +931,8 @@ static int rtnl_setlink(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg) goto errout; goto errout; } } if ((err = validate_linkmsg(dev, tb)) < 0) err = validate_linkmsg(dev, tb); if (err < 0) goto errout; goto errout; err = do_setlink(dev, ifm, tb, ifname, 0); err = do_setlink(dev, ifm, tb, ifname, 0); Loading Loading @@ -985,7 +985,8 @@ struct net_device *rtnl_create_link(struct net *net, char *ifname, unsigned int real_num_queues = 1; unsigned int real_num_queues = 1; if (ops->get_tx_queues) { if (ops->get_tx_queues) { err = ops->get_tx_queues(net, tb, &num_queues, &real_num_queues); err = ops->get_tx_queues(net, tb, &num_queues, &real_num_queues); if (err) if (err) goto err; goto err; } } Loading Loading @@ -1026,6 +1027,7 @@ struct net_device *rtnl_create_link(struct net *net, char *ifname, err: err: return ERR_PTR(err); return ERR_PTR(err); } } EXPORT_SYMBOL(rtnl_create_link); static int rtnl_newlink(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg) static int rtnl_newlink(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg) { { Loading Loading @@ -1059,7 +1061,8 @@ static int rtnl_newlink(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg) else else dev = NULL; dev = NULL; if ((err = validate_linkmsg(dev, tb)) < 0) err = validate_linkmsg(dev, tb); if (err < 0) return err; return err; if (tb[IFLA_LINKINFO]) { if (tb[IFLA_LINKINFO]) { Loading Loading @@ -1416,14 +1419,3 @@ void __init rtnetlink_init(void) rtnl_register(PF_UNSPEC, RTM_GETROUTE, NULL, rtnl_dump_all); rtnl_register(PF_UNSPEC, RTM_GETROUTE, NULL, rtnl_dump_all); } } EXPORT_SYMBOL(__rta_fill); EXPORT_SYMBOL(rtnetlink_put_metrics); EXPORT_SYMBOL(rtnl_lock); EXPORT_SYMBOL(rtnl_trylock); EXPORT_SYMBOL(rtnl_unlock); EXPORT_SYMBOL(rtnl_is_locked); EXPORT_SYMBOL(rtnl_unicast); EXPORT_SYMBOL(rtnl_notify); EXPORT_SYMBOL(rtnl_set_sk_err); EXPORT_SYMBOL(rtnl_create_link); EXPORT_SYMBOL(ifla_policy); Loading
net/core/rtnetlink.c +23 −31 Original line number Original line Diff line number Diff line Loading @@ -38,7 +38,6 @@ #include <asm/uaccess.h> #include <asm/uaccess.h> #include <asm/system.h> #include <asm/system.h> #include <asm/string.h> #include <linux/inet.h> #include <linux/inet.h> #include <linux/netdevice.h> #include <linux/netdevice.h> Loading @@ -53,8 +52,7 @@ #include <net/rtnetlink.h> #include <net/rtnetlink.h> #include <net/net_namespace.h> #include <net/net_namespace.h> struct rtnl_link struct rtnl_link { { rtnl_doit_func doit; rtnl_doit_func doit; rtnl_dumpit_func dumpit; rtnl_dumpit_func dumpit; }; }; Loading @@ -65,6 +63,7 @@ void rtnl_lock(void) { { mutex_lock(&rtnl_mutex); mutex_lock(&rtnl_mutex); } } EXPORT_SYMBOL(rtnl_lock); void __rtnl_unlock(void) void __rtnl_unlock(void) { { Loading @@ -76,16 +75,19 @@ void rtnl_unlock(void) /* This fellow will unlock it for us. */ /* This fellow will unlock it for us. */ netdev_run_todo(); netdev_run_todo(); } } EXPORT_SYMBOL(rtnl_unlock); int rtnl_trylock(void) int rtnl_trylock(void) { { return mutex_trylock(&rtnl_mutex); return mutex_trylock(&rtnl_mutex); } } EXPORT_SYMBOL(rtnl_trylock); int rtnl_is_locked(void) int rtnl_is_locked(void) { { return mutex_is_locked(&rtnl_mutex); return mutex_is_locked(&rtnl_mutex); } } EXPORT_SYMBOL(rtnl_is_locked); static struct rtnl_link *rtnl_msg_handlers[NPROTO]; static struct rtnl_link *rtnl_msg_handlers[NPROTO]; Loading Loading @@ -168,7 +170,6 @@ int __rtnl_register(int protocol, int msgtype, return 0; return 0; } } EXPORT_SYMBOL_GPL(__rtnl_register); EXPORT_SYMBOL_GPL(__rtnl_register); /** /** Loading @@ -188,7 +189,6 @@ void rtnl_register(int protocol, int msgtype, "protocol = %d, message type = %d\n", "protocol = %d, message type = %d\n", protocol, msgtype); protocol, msgtype); } } EXPORT_SYMBOL_GPL(rtnl_register); EXPORT_SYMBOL_GPL(rtnl_register); /** /** Loading @@ -213,7 +213,6 @@ int rtnl_unregister(int protocol, int msgtype) return 0; return 0; } } EXPORT_SYMBOL_GPL(rtnl_unregister); EXPORT_SYMBOL_GPL(rtnl_unregister); /** /** Loading @@ -230,7 +229,6 @@ void rtnl_unregister_all(int protocol) kfree(rtnl_msg_handlers[protocol]); kfree(rtnl_msg_handlers[protocol]); rtnl_msg_handlers[protocol] = NULL; rtnl_msg_handlers[protocol] = NULL; } } EXPORT_SYMBOL_GPL(rtnl_unregister_all); EXPORT_SYMBOL_GPL(rtnl_unregister_all); static LIST_HEAD(link_ops); static LIST_HEAD(link_ops); Loading @@ -253,7 +251,6 @@ int __rtnl_link_register(struct rtnl_link_ops *ops) list_add_tail(&ops->list, &link_ops); list_add_tail(&ops->list, &link_ops); return 0; return 0; } } EXPORT_SYMBOL_GPL(__rtnl_link_register); EXPORT_SYMBOL_GPL(__rtnl_link_register); /** /** Loading @@ -271,7 +268,6 @@ int rtnl_link_register(struct rtnl_link_ops *ops) rtnl_unlock(); rtnl_unlock(); return err; return err; } } EXPORT_SYMBOL_GPL(rtnl_link_register); EXPORT_SYMBOL_GPL(rtnl_link_register); static void __rtnl_kill_links(struct net *net, struct rtnl_link_ops *ops) static void __rtnl_kill_links(struct net *net, struct rtnl_link_ops *ops) Loading Loading @@ -309,7 +305,6 @@ void __rtnl_link_unregister(struct rtnl_link_ops *ops) } } list_del(&ops->list); list_del(&ops->list); } } EXPORT_SYMBOL_GPL(__rtnl_link_unregister); EXPORT_SYMBOL_GPL(__rtnl_link_unregister); /** /** Loading @@ -322,7 +317,6 @@ void rtnl_link_unregister(struct rtnl_link_ops *ops) __rtnl_link_unregister(ops); __rtnl_link_unregister(ops); rtnl_unlock(); rtnl_unlock(); } } EXPORT_SYMBOL_GPL(rtnl_link_unregister); EXPORT_SYMBOL_GPL(rtnl_link_unregister); static const struct rtnl_link_ops *rtnl_link_ops_get(const char *kind) static const struct rtnl_link_ops *rtnl_link_ops_get(const char *kind) Loading Loading @@ -433,6 +427,7 @@ void __rta_fill(struct sk_buff *skb, int attrtype, int attrlen, const void *data memcpy(RTA_DATA(rta), data, attrlen); memcpy(RTA_DATA(rta), data, attrlen); memset(RTA_DATA(rta) + attrlen, 0, RTA_ALIGN(size) - size); memset(RTA_DATA(rta) + attrlen, 0, RTA_ALIGN(size) - size); } } EXPORT_SYMBOL(__rta_fill); int rtnetlink_send(struct sk_buff *skb, struct net *net, u32 pid, unsigned group, int echo) int rtnetlink_send(struct sk_buff *skb, struct net *net, u32 pid, unsigned group, int echo) { { Loading @@ -454,6 +449,7 @@ int rtnl_unicast(struct sk_buff *skb, struct net *net, u32 pid) return nlmsg_unicast(rtnl, skb, pid); return nlmsg_unicast(rtnl, skb, pid); } } EXPORT_SYMBOL(rtnl_unicast); void rtnl_notify(struct sk_buff *skb, struct net *net, u32 pid, u32 group, void rtnl_notify(struct sk_buff *skb, struct net *net, u32 pid, u32 group, struct nlmsghdr *nlh, gfp_t flags) struct nlmsghdr *nlh, gfp_t flags) Loading @@ -466,6 +462,7 @@ void rtnl_notify(struct sk_buff *skb, struct net *net, u32 pid, u32 group, nlmsg_notify(rtnl, skb, pid, group, report, flags); nlmsg_notify(rtnl, skb, pid, group, report, flags); } } EXPORT_SYMBOL(rtnl_notify); void rtnl_set_sk_err(struct net *net, u32 group, int error) void rtnl_set_sk_err(struct net *net, u32 group, int error) { { Loading @@ -473,6 +470,7 @@ void rtnl_set_sk_err(struct net *net, u32 group, int error) netlink_set_err(rtnl, 0, group, error); netlink_set_err(rtnl, 0, group, error); } } EXPORT_SYMBOL(rtnl_set_sk_err); int rtnetlink_put_metrics(struct sk_buff *skb, u32 *metrics) int rtnetlink_put_metrics(struct sk_buff *skb, u32 *metrics) { { Loading Loading @@ -501,6 +499,7 @@ int rtnetlink_put_metrics(struct sk_buff *skb, u32 *metrics) nla_nest_cancel(skb, mx); nla_nest_cancel(skb, mx); return -EMSGSIZE; return -EMSGSIZE; } } EXPORT_SYMBOL(rtnetlink_put_metrics); int rtnl_put_cacheinfo(struct sk_buff *skb, struct dst_entry *dst, u32 id, int rtnl_put_cacheinfo(struct sk_buff *skb, struct dst_entry *dst, u32 id, u32 ts, u32 tsage, long expires, u32 error) u32 ts, u32 tsage, long expires, u32 error) Loading @@ -520,7 +519,6 @@ int rtnl_put_cacheinfo(struct sk_buff *skb, struct dst_entry *dst, u32 id, return nla_put(skb, RTA_CACHEINFO, sizeof(ci), &ci); return nla_put(skb, RTA_CACHEINFO, sizeof(ci), &ci); } } EXPORT_SYMBOL_GPL(rtnl_put_cacheinfo); EXPORT_SYMBOL_GPL(rtnl_put_cacheinfo); static void set_operstate(struct net_device *dev, unsigned char transition) static void set_operstate(struct net_device *dev, unsigned char transition) Loading Loading @@ -728,6 +726,7 @@ const struct nla_policy ifla_policy[IFLA_MAX+1] = { [IFLA_NET_NS_PID] = { .type = NLA_U32 }, [IFLA_NET_NS_PID] = { .type = NLA_U32 }, [IFLA_IFALIAS] = { .type = NLA_STRING, .len = IFALIASZ-1 }, [IFLA_IFALIAS] = { .type = NLA_STRING, .len = IFALIASZ-1 }, }; }; EXPORT_SYMBOL(ifla_policy); static const struct nla_policy ifla_info_policy[IFLA_INFO_MAX+1] = { static const struct nla_policy ifla_info_policy[IFLA_INFO_MAX+1] = { [IFLA_INFO_KIND] = { .type = NLA_STRING }, [IFLA_INFO_KIND] = { .type = NLA_STRING }, Loading Loading @@ -932,7 +931,8 @@ static int rtnl_setlink(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg) goto errout; goto errout; } } if ((err = validate_linkmsg(dev, tb)) < 0) err = validate_linkmsg(dev, tb); if (err < 0) goto errout; goto errout; err = do_setlink(dev, ifm, tb, ifname, 0); err = do_setlink(dev, ifm, tb, ifname, 0); Loading Loading @@ -985,7 +985,8 @@ struct net_device *rtnl_create_link(struct net *net, char *ifname, unsigned int real_num_queues = 1; unsigned int real_num_queues = 1; if (ops->get_tx_queues) { if (ops->get_tx_queues) { err = ops->get_tx_queues(net, tb, &num_queues, &real_num_queues); err = ops->get_tx_queues(net, tb, &num_queues, &real_num_queues); if (err) if (err) goto err; goto err; } } Loading Loading @@ -1026,6 +1027,7 @@ struct net_device *rtnl_create_link(struct net *net, char *ifname, err: err: return ERR_PTR(err); return ERR_PTR(err); } } EXPORT_SYMBOL(rtnl_create_link); static int rtnl_newlink(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg) static int rtnl_newlink(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg) { { Loading Loading @@ -1059,7 +1061,8 @@ static int rtnl_newlink(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg) else else dev = NULL; dev = NULL; if ((err = validate_linkmsg(dev, tb)) < 0) err = validate_linkmsg(dev, tb); if (err < 0) return err; return err; if (tb[IFLA_LINKINFO]) { if (tb[IFLA_LINKINFO]) { Loading Loading @@ -1416,14 +1419,3 @@ void __init rtnetlink_init(void) rtnl_register(PF_UNSPEC, RTM_GETROUTE, NULL, rtnl_dump_all); rtnl_register(PF_UNSPEC, RTM_GETROUTE, NULL, rtnl_dump_all); } } EXPORT_SYMBOL(__rta_fill); EXPORT_SYMBOL(rtnetlink_put_metrics); EXPORT_SYMBOL(rtnl_lock); EXPORT_SYMBOL(rtnl_trylock); EXPORT_SYMBOL(rtnl_unlock); EXPORT_SYMBOL(rtnl_is_locked); EXPORT_SYMBOL(rtnl_unicast); EXPORT_SYMBOL(rtnl_notify); EXPORT_SYMBOL(rtnl_set_sk_err); EXPORT_SYMBOL(rtnl_create_link); EXPORT_SYMBOL(ifla_policy);