1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * INET An implementation of the TCP/IP protocol suite for the LINUX
4 * operating system. INET is implemented using the BSD Socket
5 * interface as the means of communication with the user level.
7 * Routing netlink socket interface: protocol independent part.
9 * Authors: Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>
12 * Vitaly E. Lavrov RTA_OK arithmetic was wrong.
15 #include <linux/bitops.h>
16 #include <linux/errno.h>
17 #include <linux/module.h>
18 #include <linux/types.h>
19 #include <linux/socket.h>
20 #include <linux/kernel.h>
21 #include <linux/timer.h>
22 #include <linux/string.h>
23 #include <linux/sockios.h>
24 #include <linux/net.h>
25 #include <linux/fcntl.h>
27 #include <linux/slab.h>
28 #include <linux/interrupt.h>
29 #include <linux/capability.h>
30 #include <linux/skbuff.h>
31 #include <linux/init.h>
32 #include <linux/security.h>
33 #include <linux/mutex.h>
34 #include <linux/if_addr.h>
35 #include <linux/if_bridge.h>
36 #include <linux/if_vlan.h>
37 #include <linux/pci.h>
38 #include <linux/etherdevice.h>
39 #include <linux/bpf.h>
41 #include <linux/uaccess.h>
43 #include <linux/inet.h>
44 #include <linux/netdevice.h>
46 #include <net/protocol.h>
48 #include <net/route.h>
52 #include <net/pkt_sched.h>
53 #include <net/fib_rules.h>
54 #include <net/rtnetlink.h>
55 #include <net/net_namespace.h>
56 #include <net/devlink.h>
57 #if IS_ENABLED(CONFIG_IPV6)
58 #include <net/addrconf.h>
60 #include <linux/dpll.h>
64 #define RTNL_MAX_TYPE 50
65 #define RTNL_SLAVE_MAX_TYPE 44
69 rtnl_dumpit_func dumpit
;
75 static DEFINE_MUTEX(rtnl_mutex
);
79 mutex_lock(&rtnl_mutex
);
81 EXPORT_SYMBOL(rtnl_lock
);
83 int rtnl_lock_killable(void)
85 return mutex_lock_killable(&rtnl_mutex
);
88 static struct sk_buff
*defer_kfree_skb_list
;
89 void rtnl_kfree_skbs(struct sk_buff
*head
, struct sk_buff
*tail
)
92 tail
->next
= defer_kfree_skb_list
;
93 defer_kfree_skb_list
= head
;
96 EXPORT_SYMBOL(rtnl_kfree_skbs
);
98 void __rtnl_unlock(void)
100 struct sk_buff
*head
= defer_kfree_skb_list
;
102 defer_kfree_skb_list
= NULL
;
104 /* Ensure that we didn't actually add any TODO item when __rtnl_unlock()
105 * is used. In some places, e.g. in cfg80211, we have code that will do
112 * and because netdev_run_todo() acquires the RTNL for items on the list
113 * we could cause a situation such as this:
116 * unregister_netdevice()
124 * // list not empty now
125 * // because of thread 2
127 * while (!list_empty(...))
132 * However, usage of __rtnl_unlock() is rare, and so we can ensure that
133 * it's not used in cases where something is added to do the list.
135 WARN_ON(!list_empty(&net_todo_list
));
137 mutex_unlock(&rtnl_mutex
);
140 struct sk_buff
*next
= head
->next
;
148 void rtnl_unlock(void)
150 /* This fellow will unlock it for us. */
153 EXPORT_SYMBOL(rtnl_unlock
);
155 int rtnl_trylock(void)
157 return mutex_trylock(&rtnl_mutex
);
159 EXPORT_SYMBOL(rtnl_trylock
);
161 int rtnl_is_locked(void)
163 return mutex_is_locked(&rtnl_mutex
);
165 EXPORT_SYMBOL(rtnl_is_locked
);
167 bool refcount_dec_and_rtnl_lock(refcount_t
*r
)
169 return refcount_dec_and_mutex_lock(r
, &rtnl_mutex
);
171 EXPORT_SYMBOL(refcount_dec_and_rtnl_lock
);
173 #ifdef CONFIG_PROVE_LOCKING
174 bool lockdep_rtnl_is_held(void)
176 return lockdep_is_held(&rtnl_mutex
);
178 EXPORT_SYMBOL(lockdep_rtnl_is_held
);
179 #endif /* #ifdef CONFIG_PROVE_LOCKING */
181 #ifdef CONFIG_DEBUG_NET_SMALL_RTNL
182 void __rtnl_net_lock(struct net
*net
)
186 mutex_lock(&net
->rtnl_mutex
);
188 EXPORT_SYMBOL(__rtnl_net_lock
);
190 void __rtnl_net_unlock(struct net
*net
)
194 mutex_unlock(&net
->rtnl_mutex
);
196 EXPORT_SYMBOL(__rtnl_net_unlock
);
198 void rtnl_net_lock(struct net
*net
)
201 __rtnl_net_lock(net
);
203 EXPORT_SYMBOL(rtnl_net_lock
);
205 void rtnl_net_unlock(struct net
*net
)
207 __rtnl_net_unlock(net
);
210 EXPORT_SYMBOL(rtnl_net_unlock
);
212 int rtnl_net_trylock(struct net
*net
)
214 int ret
= rtnl_trylock();
217 __rtnl_net_lock(net
);
221 EXPORT_SYMBOL(rtnl_net_trylock
);
223 int rtnl_net_lock_killable(struct net
*net
)
225 int ret
= rtnl_lock_killable();
228 __rtnl_net_lock(net
);
233 static int rtnl_net_cmp_locks(const struct net
*net_a
, const struct net
*net_b
)
235 if (net_eq(net_a
, net_b
))
238 /* always init_net first */
239 if (net_eq(net_a
, &init_net
))
242 if (net_eq(net_b
, &init_net
))
245 /* otherwise lock in ascending order */
246 return net_a
< net_b
? -1 : 1;
249 int rtnl_net_lock_cmp_fn(const struct lockdep_map
*a
, const struct lockdep_map
*b
)
251 const struct net
*net_a
, *net_b
;
253 net_a
= container_of(a
, struct net
, rtnl_mutex
.dep_map
);
254 net_b
= container_of(b
, struct net
, rtnl_mutex
.dep_map
);
256 return rtnl_net_cmp_locks(net_a
, net_b
);
259 bool rtnl_net_is_locked(struct net
*net
)
261 return rtnl_is_locked() && mutex_is_locked(&net
->rtnl_mutex
);
263 EXPORT_SYMBOL(rtnl_net_is_locked
);
265 bool lockdep_rtnl_net_is_held(struct net
*net
)
267 return lockdep_rtnl_is_held() && lockdep_is_held(&net
->rtnl_mutex
);
269 EXPORT_SYMBOL(lockdep_rtnl_net_is_held
);
271 static int rtnl_net_cmp_locks(const struct net
*net_a
, const struct net
*net_b
)
273 /* No need to swap */
279 /* ->newlink() needs to freeze 3 netns at most;
280 * 2 for the new device, 1 for its peer.
286 static void rtnl_nets_init(struct rtnl_nets
*rtnl_nets
)
288 memset(rtnl_nets
, 0, sizeof(*rtnl_nets
));
291 static void rtnl_nets_destroy(struct rtnl_nets
*rtnl_nets
)
295 for (i
= 0; i
< rtnl_nets
->len
; i
++) {
296 put_net(rtnl_nets
->net
[i
]);
297 rtnl_nets
->net
[i
] = NULL
;
304 * rtnl_nets_add - Add netns to be locked before ->newlink().
306 * @rtnl_nets: rtnl_nets pointer passed to ->get_peer_net().
307 * @net: netns pointer with an extra refcnt held.
309 * The extra refcnt is released in rtnl_nets_destroy().
311 static void rtnl_nets_add(struct rtnl_nets
*rtnl_nets
, struct net
*net
)
315 DEBUG_NET_WARN_ON_ONCE(rtnl_nets
->len
== ARRAY_SIZE(rtnl_nets
->net
));
317 for (i
= 0; i
< rtnl_nets
->len
; i
++) {
318 switch (rtnl_net_cmp_locks(rtnl_nets
->net
[i
], net
)) {
323 swap(rtnl_nets
->net
[i
], net
);
327 rtnl_nets
->net
[i
] = net
;
331 static void rtnl_nets_lock(struct rtnl_nets
*rtnl_nets
)
337 for (i
= 0; i
< rtnl_nets
->len
; i
++)
338 __rtnl_net_lock(rtnl_nets
->net
[i
]);
341 static void rtnl_nets_unlock(struct rtnl_nets
*rtnl_nets
)
345 for (i
= 0; i
< rtnl_nets
->len
; i
++)
346 __rtnl_net_unlock(rtnl_nets
->net
[i
]);
351 static struct rtnl_link __rcu
*__rcu
*rtnl_msg_handlers
[RTNL_FAMILY_MAX
+ 1];
353 static inline int rtm_msgindex(int msgtype
)
355 int msgindex
= msgtype
- RTM_BASE
;
358 * msgindex < 0 implies someone tried to register a netlink
359 * control code. msgindex >= RTM_NR_MSGTYPES may indicate that
360 * the message type has not been added to linux/rtnetlink.h
362 BUG_ON(msgindex
< 0 || msgindex
>= RTM_NR_MSGTYPES
);
367 static struct rtnl_link
*rtnl_get_link(int protocol
, int msgtype
)
369 struct rtnl_link __rcu
**tab
;
371 if (protocol
>= ARRAY_SIZE(rtnl_msg_handlers
))
372 protocol
= PF_UNSPEC
;
374 tab
= rcu_dereference_rtnl(rtnl_msg_handlers
[protocol
]);
376 tab
= rcu_dereference_rtnl(rtnl_msg_handlers
[PF_UNSPEC
]);
378 return rcu_dereference_rtnl(tab
[msgtype
]);
381 static int rtnl_register_internal(struct module
*owner
,
382 int protocol
, int msgtype
,
383 rtnl_doit_func doit
, rtnl_dumpit_func dumpit
,
386 struct rtnl_link
*link
, *old
;
387 struct rtnl_link __rcu
**tab
;
391 BUG_ON(protocol
< 0 || protocol
> RTNL_FAMILY_MAX
);
392 msgindex
= rtm_msgindex(msgtype
);
395 tab
= rtnl_dereference(rtnl_msg_handlers
[protocol
]);
397 tab
= kcalloc(RTM_NR_MSGTYPES
, sizeof(void *), GFP_KERNEL
);
401 /* ensures we see the 0 stores */
402 rcu_assign_pointer(rtnl_msg_handlers
[protocol
], tab
);
405 old
= rtnl_dereference(tab
[msgindex
]);
407 link
= kmemdup(old
, sizeof(*old
), GFP_KERNEL
);
411 link
= kzalloc(sizeof(*link
), GFP_KERNEL
);
416 WARN_ON(link
->owner
&& link
->owner
!= owner
);
419 WARN_ON(doit
&& link
->doit
&& link
->doit
!= doit
);
422 WARN_ON(dumpit
&& link
->dumpit
&& link
->dumpit
!= dumpit
);
424 link
->dumpit
= dumpit
;
426 WARN_ON(rtnl_msgtype_kind(msgtype
) != RTNL_KIND_DEL
&&
427 (flags
& RTNL_FLAG_BULK_DEL_SUPPORTED
));
428 link
->flags
|= flags
;
430 /* publish protocol:msgtype */
431 rcu_assign_pointer(tab
[msgindex
], link
);
441 * rtnl_unregister - Unregister a rtnetlink message type
442 * @protocol: Protocol family or PF_UNSPEC
443 * @msgtype: rtnetlink message type
445 * Returns 0 on success or a negative error code.
447 static int rtnl_unregister(int protocol
, int msgtype
)
449 struct rtnl_link __rcu
**tab
;
450 struct rtnl_link
*link
;
453 BUG_ON(protocol
< 0 || protocol
> RTNL_FAMILY_MAX
);
454 msgindex
= rtm_msgindex(msgtype
);
457 tab
= rtnl_dereference(rtnl_msg_handlers
[protocol
]);
463 link
= rcu_replace_pointer_rtnl(tab
[msgindex
], NULL
);
466 kfree_rcu(link
, rcu
);
472 * rtnl_unregister_all - Unregister all rtnetlink message type of a protocol
473 * @protocol : Protocol family or PF_UNSPEC
475 * Identical to calling rtnl_unregster() for all registered message types
476 * of a certain protocol family.
478 void rtnl_unregister_all(int protocol
)
480 struct rtnl_link __rcu
**tab
;
481 struct rtnl_link
*link
;
484 BUG_ON(protocol
< 0 || protocol
> RTNL_FAMILY_MAX
);
487 tab
= rcu_replace_pointer_rtnl(rtnl_msg_handlers
[protocol
], NULL
);
492 for (msgindex
= 0; msgindex
< RTM_NR_MSGTYPES
; msgindex
++) {
493 link
= rcu_replace_pointer_rtnl(tab
[msgindex
], NULL
);
494 kfree_rcu(link
, rcu
);
502 EXPORT_SYMBOL_GPL(rtnl_unregister_all
);
505 * __rtnl_register_many - Register rtnetlink message types
506 * @handlers: Array of struct rtnl_msg_handlers
507 * @n: The length of @handlers
509 * Registers the specified function pointers (at least one of them has
510 * to be non-NULL) to be called whenever a request message for the
511 * specified protocol family and message type is received.
513 * The special protocol family PF_UNSPEC may be used to define fallback
514 * function pointers for the case when no entry for the specific protocol
517 * When one element of @handlers fails to register,
518 * 1) built-in: panics.
519 * 2) modules : the previous successful registrations are unwinded
520 * and an error is returned.
522 * Use rtnl_register_many().
524 int __rtnl_register_many(const struct rtnl_msg_handler
*handlers
, int n
)
526 const struct rtnl_msg_handler
*handler
;
529 for (i
= 0, handler
= handlers
; i
< n
; i
++, handler
++) {
530 err
= rtnl_register_internal(handler
->owner
, handler
->protocol
,
531 handler
->msgtype
, handler
->doit
,
532 handler
->dumpit
, handler
->flags
);
535 panic("Unable to register rtnetlink message "
536 "handlers, %pS\n", handlers
);
538 __rtnl_unregister_many(handlers
, i
);
545 EXPORT_SYMBOL_GPL(__rtnl_register_many
);
547 void __rtnl_unregister_many(const struct rtnl_msg_handler
*handlers
, int n
)
549 const struct rtnl_msg_handler
*handler
;
552 for (i
= n
- 1, handler
= handlers
+ n
- 1; i
>= 0; i
--, handler
--)
553 rtnl_unregister(handler
->protocol
, handler
->msgtype
);
555 EXPORT_SYMBOL_GPL(__rtnl_unregister_many
);
557 static DEFINE_MUTEX(link_ops_mutex
);
558 static LIST_HEAD(link_ops
);
560 static struct rtnl_link_ops
*rtnl_link_ops_get(const char *kind
, int *srcu_index
)
562 struct rtnl_link_ops
*ops
;
566 list_for_each_entry_rcu(ops
, &link_ops
, list
) {
567 if (!strcmp(ops
->kind
, kind
)) {
568 *srcu_index
= srcu_read_lock(&ops
->srcu
);
580 static void rtnl_link_ops_put(struct rtnl_link_ops
*ops
, int srcu_index
)
582 srcu_read_unlock(&ops
->srcu
, srcu_index
);
586 * rtnl_link_register - Register rtnl_link_ops with rtnetlink.
587 * @ops: struct rtnl_link_ops * to register
589 * Returns 0 on success or a negative error code.
591 int rtnl_link_register(struct rtnl_link_ops
*ops
)
593 struct rtnl_link_ops
*tmp
;
596 /* Sanity-check max sizes to avoid stack buffer overflow. */
597 if (WARN_ON(ops
->maxtype
> RTNL_MAX_TYPE
||
598 ops
->slave_maxtype
> RTNL_SLAVE_MAX_TYPE
))
601 /* The check for alloc/setup is here because if ops
602 * does not have that filled up, it is not possible
603 * to use the ops for creating device. So do not
604 * fill up dellink as well. That disables rtnl_dellink.
606 if ((ops
->alloc
|| ops
->setup
) && !ops
->dellink
)
607 ops
->dellink
= unregister_netdevice_queue
;
609 err
= init_srcu_struct(&ops
->srcu
);
613 mutex_lock(&link_ops_mutex
);
615 list_for_each_entry(tmp
, &link_ops
, list
) {
616 if (!strcmp(ops
->kind
, tmp
->kind
)) {
622 list_add_tail_rcu(&ops
->list
, &link_ops
);
624 mutex_unlock(&link_ops_mutex
);
628 EXPORT_SYMBOL_GPL(rtnl_link_register
);
630 static void __rtnl_kill_links(struct net
*net
, struct rtnl_link_ops
*ops
)
632 struct net_device
*dev
;
633 LIST_HEAD(list_kill
);
635 for_each_netdev(net
, dev
) {
636 if (dev
->rtnl_link_ops
== ops
)
637 ops
->dellink(dev
, &list_kill
);
639 unregister_netdevice_many(&list_kill
);
642 /* Return with the rtnl_lock held when there are no network
643 * devices unregistering in any network namespace.
645 static void rtnl_lock_unregistering_all(void)
647 DEFINE_WAIT_FUNC(wait
, woken_wake_function
);
649 add_wait_queue(&netdev_unregistering_wq
, &wait
);
652 /* We held write locked pernet_ops_rwsem, and parallel
653 * setup_net() and cleanup_net() are not possible.
655 if (!atomic_read(&dev_unreg_count
))
659 wait_woken(&wait
, TASK_UNINTERRUPTIBLE
, MAX_SCHEDULE_TIMEOUT
);
661 remove_wait_queue(&netdev_unregistering_wq
, &wait
);
665 * rtnl_link_unregister - Unregister rtnl_link_ops from rtnetlink.
666 * @ops: struct rtnl_link_ops * to unregister
668 void rtnl_link_unregister(struct rtnl_link_ops
*ops
)
672 mutex_lock(&link_ops_mutex
);
673 list_del_rcu(&ops
->list
);
674 mutex_unlock(&link_ops_mutex
);
676 synchronize_srcu(&ops
->srcu
);
677 cleanup_srcu_struct(&ops
->srcu
);
679 /* Close the race with setup_net() and cleanup_net() */
680 down_write(&pernet_ops_rwsem
);
681 rtnl_lock_unregistering_all();
684 __rtnl_kill_links(net
, ops
);
687 up_write(&pernet_ops_rwsem
);
689 EXPORT_SYMBOL_GPL(rtnl_link_unregister
);
691 static size_t rtnl_link_get_slave_info_data_size(const struct net_device
*dev
)
693 struct net_device
*master_dev
;
694 const struct rtnl_link_ops
*ops
;
699 master_dev
= netdev_master_upper_dev_get_rcu((struct net_device
*)dev
);
703 ops
= master_dev
->rtnl_link_ops
;
704 if (!ops
|| !ops
->get_slave_size
)
706 /* IFLA_INFO_SLAVE_DATA + nested data */
707 size
= nla_total_size(sizeof(struct nlattr
)) +
708 ops
->get_slave_size(master_dev
, dev
);
715 static size_t rtnl_link_get_size(const struct net_device
*dev
)
717 const struct rtnl_link_ops
*ops
= dev
->rtnl_link_ops
;
723 size
= nla_total_size(sizeof(struct nlattr
)) + /* IFLA_LINKINFO */
724 nla_total_size(strlen(ops
->kind
) + 1); /* IFLA_INFO_KIND */
727 /* IFLA_INFO_DATA + nested data */
728 size
+= nla_total_size(sizeof(struct nlattr
)) +
731 if (ops
->get_xstats_size
)
732 /* IFLA_INFO_XSTATS */
733 size
+= nla_total_size(ops
->get_xstats_size(dev
));
735 size
+= rtnl_link_get_slave_info_data_size(dev
);
740 static LIST_HEAD(rtnl_af_ops
);
742 static struct rtnl_af_ops
*rtnl_af_lookup(const int family
, int *srcu_index
)
744 struct rtnl_af_ops
*ops
;
750 list_for_each_entry_rcu(ops
, &rtnl_af_ops
, list
) {
751 if (ops
->family
== family
) {
752 *srcu_index
= srcu_read_lock(&ops
->srcu
);
764 static void rtnl_af_put(struct rtnl_af_ops
*ops
, int srcu_index
)
766 srcu_read_unlock(&ops
->srcu
, srcu_index
);
770 * rtnl_af_register - Register rtnl_af_ops with rtnetlink.
771 * @ops: struct rtnl_af_ops * to register
773 * Return: 0 on success or a negative error code.
775 int rtnl_af_register(struct rtnl_af_ops
*ops
)
777 int err
= init_srcu_struct(&ops
->srcu
);
783 list_add_tail_rcu(&ops
->list
, &rtnl_af_ops
);
788 EXPORT_SYMBOL_GPL(rtnl_af_register
);
791 * rtnl_af_unregister - Unregister rtnl_af_ops from rtnetlink.
792 * @ops: struct rtnl_af_ops * to unregister
794 void rtnl_af_unregister(struct rtnl_af_ops
*ops
)
797 list_del_rcu(&ops
->list
);
801 synchronize_srcu(&ops
->srcu
);
802 cleanup_srcu_struct(&ops
->srcu
);
804 EXPORT_SYMBOL_GPL(rtnl_af_unregister
);
806 static size_t rtnl_link_get_af_size(const struct net_device
*dev
,
809 struct rtnl_af_ops
*af_ops
;
813 size
= nla_total_size(sizeof(struct nlattr
));
816 list_for_each_entry_rcu(af_ops
, &rtnl_af_ops
, list
) {
817 if (af_ops
->get_link_af_size
) {
818 /* AF_* + nested data */
819 size
+= nla_total_size(sizeof(struct nlattr
)) +
820 af_ops
->get_link_af_size(dev
, ext_filter_mask
);
828 static bool rtnl_have_link_slave_info(const struct net_device
*dev
)
830 struct net_device
*master_dev
;
835 master_dev
= netdev_master_upper_dev_get_rcu((struct net_device
*)dev
);
836 if (master_dev
&& master_dev
->rtnl_link_ops
)
842 static int rtnl_link_slave_info_fill(struct sk_buff
*skb
,
843 const struct net_device
*dev
)
845 struct net_device
*master_dev
;
846 const struct rtnl_link_ops
*ops
;
847 struct nlattr
*slave_data
;
850 master_dev
= netdev_master_upper_dev_get((struct net_device
*) dev
);
853 ops
= master_dev
->rtnl_link_ops
;
856 if (nla_put_string(skb
, IFLA_INFO_SLAVE_KIND
, ops
->kind
) < 0)
858 if (ops
->fill_slave_info
) {
859 slave_data
= nla_nest_start_noflag(skb
, IFLA_INFO_SLAVE_DATA
);
862 err
= ops
->fill_slave_info(skb
, master_dev
, dev
);
864 goto err_cancel_slave_data
;
865 nla_nest_end(skb
, slave_data
);
869 err_cancel_slave_data
:
870 nla_nest_cancel(skb
, slave_data
);
874 static int rtnl_link_info_fill(struct sk_buff
*skb
,
875 const struct net_device
*dev
)
877 const struct rtnl_link_ops
*ops
= dev
->rtnl_link_ops
;
883 if (nla_put_string(skb
, IFLA_INFO_KIND
, ops
->kind
) < 0)
885 if (ops
->fill_xstats
) {
886 err
= ops
->fill_xstats(skb
, dev
);
890 if (ops
->fill_info
) {
891 data
= nla_nest_start_noflag(skb
, IFLA_INFO_DATA
);
894 err
= ops
->fill_info(skb
, dev
);
896 goto err_cancel_data
;
897 nla_nest_end(skb
, data
);
902 nla_nest_cancel(skb
, data
);
906 static int rtnl_link_fill(struct sk_buff
*skb
, const struct net_device
*dev
)
908 struct nlattr
*linkinfo
;
911 linkinfo
= nla_nest_start_noflag(skb
, IFLA_LINKINFO
);
912 if (linkinfo
== NULL
)
915 err
= rtnl_link_info_fill(skb
, dev
);
917 goto err_cancel_link
;
919 err
= rtnl_link_slave_info_fill(skb
, dev
);
921 goto err_cancel_link
;
923 nla_nest_end(skb
, linkinfo
);
927 nla_nest_cancel(skb
, linkinfo
);
932 int rtnetlink_send(struct sk_buff
*skb
, struct net
*net
, u32 pid
, unsigned int group
, int echo
)
934 struct sock
*rtnl
= net
->rtnl
;
936 return nlmsg_notify(rtnl
, skb
, pid
, group
, echo
, GFP_KERNEL
);
939 int rtnl_unicast(struct sk_buff
*skb
, struct net
*net
, u32 pid
)
941 struct sock
*rtnl
= net
->rtnl
;
943 return nlmsg_unicast(rtnl
, skb
, pid
);
945 EXPORT_SYMBOL(rtnl_unicast
);
947 void rtnl_notify(struct sk_buff
*skb
, struct net
*net
, u32 pid
, u32 group
,
948 const struct nlmsghdr
*nlh
, gfp_t flags
)
950 struct sock
*rtnl
= net
->rtnl
;
952 nlmsg_notify(rtnl
, skb
, pid
, group
, nlmsg_report(nlh
), flags
);
954 EXPORT_SYMBOL(rtnl_notify
);
956 void rtnl_set_sk_err(struct net
*net
, u32 group
, int error
)
958 struct sock
*rtnl
= net
->rtnl
;
960 netlink_set_err(rtnl
, 0, group
, error
);
962 EXPORT_SYMBOL(rtnl_set_sk_err
);
964 int rtnetlink_put_metrics(struct sk_buff
*skb
, u32
*metrics
)
969 /* nothing is dumped for dst_default_metrics, so just skip the loop */
970 if (metrics
== dst_default_metrics
.metrics
)
973 mx
= nla_nest_start_noflag(skb
, RTA_METRICS
);
977 for (i
= 0; i
< RTAX_MAX
; i
++) {
979 if (i
== RTAX_CC_ALGO
- 1) {
980 char tmp
[TCP_CA_NAME_MAX
], *name
;
982 name
= tcp_ca_get_name_by_key(metrics
[i
], tmp
);
985 if (nla_put_string(skb
, i
+ 1, name
))
986 goto nla_put_failure
;
987 } else if (i
== RTAX_FEATURES
- 1) {
988 u32 user_features
= metrics
[i
] & RTAX_FEATURE_MASK
;
992 BUILD_BUG_ON(RTAX_FEATURE_MASK
& DST_FEATURE_MASK
);
993 if (nla_put_u32(skb
, i
+ 1, user_features
))
994 goto nla_put_failure
;
996 if (nla_put_u32(skb
, i
+ 1, metrics
[i
]))
997 goto nla_put_failure
;
1004 nla_nest_cancel(skb
, mx
);
1008 return nla_nest_end(skb
, mx
);
1011 nla_nest_cancel(skb
, mx
);
1014 EXPORT_SYMBOL(rtnetlink_put_metrics
);
1016 int rtnl_put_cacheinfo(struct sk_buff
*skb
, struct dst_entry
*dst
, u32 id
,
1017 long expires
, u32 error
)
1019 struct rta_cacheinfo ci
= {
1025 ci
.rta_lastuse
= jiffies_delta_to_clock_t(jiffies
- dst
->lastuse
);
1026 ci
.rta_used
= dst
->__use
;
1027 ci
.rta_clntref
= rcuref_read(&dst
->__rcuref
);
1030 unsigned long clock
;
1032 clock
= jiffies_to_clock_t(abs(expires
));
1033 clock
= min_t(unsigned long, clock
, INT_MAX
);
1034 ci
.rta_expires
= (expires
> 0) ? clock
: -clock
;
1036 return nla_put(skb
, RTA_CACHEINFO
, sizeof(ci
), &ci
);
1038 EXPORT_SYMBOL_GPL(rtnl_put_cacheinfo
);
1040 void netdev_set_operstate(struct net_device
*dev
, int newstate
)
1042 unsigned int old
= READ_ONCE(dev
->operstate
);
1045 if (old
== newstate
)
1047 } while (!try_cmpxchg(&dev
->operstate
, &old
, newstate
));
1049 netdev_state_change(dev
);
1051 EXPORT_SYMBOL(netdev_set_operstate
);
1053 static void set_operstate(struct net_device
*dev
, unsigned char transition
)
1055 unsigned char operstate
= READ_ONCE(dev
->operstate
);
1057 switch (transition
) {
1059 if ((operstate
== IF_OPER_DORMANT
||
1060 operstate
== IF_OPER_TESTING
||
1061 operstate
== IF_OPER_UNKNOWN
) &&
1062 !netif_dormant(dev
) && !netif_testing(dev
))
1063 operstate
= IF_OPER_UP
;
1066 case IF_OPER_TESTING
:
1067 if (netif_oper_up(dev
))
1068 operstate
= IF_OPER_TESTING
;
1071 case IF_OPER_DORMANT
:
1072 if (netif_oper_up(dev
))
1073 operstate
= IF_OPER_DORMANT
;
1077 netdev_set_operstate(dev
, operstate
);
1080 static unsigned int rtnl_dev_get_flags(const struct net_device
*dev
)
1082 return (dev
->flags
& ~(IFF_PROMISC
| IFF_ALLMULTI
)) |
1083 (dev
->gflags
& (IFF_PROMISC
| IFF_ALLMULTI
));
1086 static unsigned int rtnl_dev_combine_flags(const struct net_device
*dev
,
1087 const struct ifinfomsg
*ifm
)
1089 unsigned int flags
= ifm
->ifi_flags
;
1091 /* bugwards compatibility: ifi_change == 0 is treated as ~0 */
1092 if (ifm
->ifi_change
)
1093 flags
= (flags
& ifm
->ifi_change
) |
1094 (rtnl_dev_get_flags(dev
) & ~ifm
->ifi_change
);
1099 static void copy_rtnl_link_stats(struct rtnl_link_stats
*a
,
1100 const struct rtnl_link_stats64
*b
)
1102 a
->rx_packets
= b
->rx_packets
;
1103 a
->tx_packets
= b
->tx_packets
;
1104 a
->rx_bytes
= b
->rx_bytes
;
1105 a
->tx_bytes
= b
->tx_bytes
;
1106 a
->rx_errors
= b
->rx_errors
;
1107 a
->tx_errors
= b
->tx_errors
;
1108 a
->rx_dropped
= b
->rx_dropped
;
1109 a
->tx_dropped
= b
->tx_dropped
;
1111 a
->multicast
= b
->multicast
;
1112 a
->collisions
= b
->collisions
;
1114 a
->rx_length_errors
= b
->rx_length_errors
;
1115 a
->rx_over_errors
= b
->rx_over_errors
;
1116 a
->rx_crc_errors
= b
->rx_crc_errors
;
1117 a
->rx_frame_errors
= b
->rx_frame_errors
;
1118 a
->rx_fifo_errors
= b
->rx_fifo_errors
;
1119 a
->rx_missed_errors
= b
->rx_missed_errors
;
1121 a
->tx_aborted_errors
= b
->tx_aborted_errors
;
1122 a
->tx_carrier_errors
= b
->tx_carrier_errors
;
1123 a
->tx_fifo_errors
= b
->tx_fifo_errors
;
1124 a
->tx_heartbeat_errors
= b
->tx_heartbeat_errors
;
1125 a
->tx_window_errors
= b
->tx_window_errors
;
1127 a
->rx_compressed
= b
->rx_compressed
;
1128 a
->tx_compressed
= b
->tx_compressed
;
1130 a
->rx_nohandler
= b
->rx_nohandler
;
1134 static inline int rtnl_vfinfo_size(const struct net_device
*dev
,
1135 u32 ext_filter_mask
)
1137 if (dev
->dev
.parent
&& (ext_filter_mask
& RTEXT_FILTER_VF
)) {
1138 int num_vfs
= dev_num_vf(dev
->dev
.parent
);
1139 size_t size
= nla_total_size(0);
1141 (nla_total_size(0) +
1142 nla_total_size(sizeof(struct ifla_vf_mac
)) +
1143 nla_total_size(sizeof(struct ifla_vf_broadcast
)) +
1144 nla_total_size(sizeof(struct ifla_vf_vlan
)) +
1145 nla_total_size(0) + /* nest IFLA_VF_VLAN_LIST */
1146 nla_total_size(MAX_VLAN_LIST_LEN
*
1147 sizeof(struct ifla_vf_vlan_info
)) +
1148 nla_total_size(sizeof(struct ifla_vf_spoofchk
)) +
1149 nla_total_size(sizeof(struct ifla_vf_tx_rate
)) +
1150 nla_total_size(sizeof(struct ifla_vf_rate
)) +
1151 nla_total_size(sizeof(struct ifla_vf_link_state
)) +
1152 nla_total_size(sizeof(struct ifla_vf_rss_query_en
)) +
1153 nla_total_size(sizeof(struct ifla_vf_trust
)));
1154 if (~ext_filter_mask
& RTEXT_FILTER_SKIP_STATS
) {
1156 (nla_total_size(0) + /* nest IFLA_VF_STATS */
1157 /* IFLA_VF_STATS_RX_PACKETS */
1158 nla_total_size_64bit(sizeof(__u64
)) +
1159 /* IFLA_VF_STATS_TX_PACKETS */
1160 nla_total_size_64bit(sizeof(__u64
)) +
1161 /* IFLA_VF_STATS_RX_BYTES */
1162 nla_total_size_64bit(sizeof(__u64
)) +
1163 /* IFLA_VF_STATS_TX_BYTES */
1164 nla_total_size_64bit(sizeof(__u64
)) +
1165 /* IFLA_VF_STATS_BROADCAST */
1166 nla_total_size_64bit(sizeof(__u64
)) +
1167 /* IFLA_VF_STATS_MULTICAST */
1168 nla_total_size_64bit(sizeof(__u64
)) +
1169 /* IFLA_VF_STATS_RX_DROPPED */
1170 nla_total_size_64bit(sizeof(__u64
)) +
1171 /* IFLA_VF_STATS_TX_DROPPED */
1172 nla_total_size_64bit(sizeof(__u64
)));
1179 static size_t rtnl_port_size(const struct net_device
*dev
,
1180 u32 ext_filter_mask
)
1182 size_t port_size
= nla_total_size(4) /* PORT_VF */
1183 + nla_total_size(PORT_PROFILE_MAX
) /* PORT_PROFILE */
1184 + nla_total_size(PORT_UUID_MAX
) /* PORT_INSTANCE_UUID */
1185 + nla_total_size(PORT_UUID_MAX
) /* PORT_HOST_UUID */
1186 + nla_total_size(1) /* PROT_VDP_REQUEST */
1187 + nla_total_size(2); /* PORT_VDP_RESPONSE */
1188 size_t vf_ports_size
= nla_total_size(sizeof(struct nlattr
));
1189 size_t vf_port_size
= nla_total_size(sizeof(struct nlattr
))
1191 size_t port_self_size
= nla_total_size(sizeof(struct nlattr
))
1194 if (!dev
->netdev_ops
->ndo_get_vf_port
|| !dev
->dev
.parent
||
1195 !(ext_filter_mask
& RTEXT_FILTER_VF
))
1197 if (dev_num_vf(dev
->dev
.parent
))
1198 return port_self_size
+ vf_ports_size
+
1199 vf_port_size
* dev_num_vf(dev
->dev
.parent
);
1201 return port_self_size
;
1204 static size_t rtnl_xdp_size(void)
1206 size_t xdp_size
= nla_total_size(0) + /* nest IFLA_XDP */
1207 nla_total_size(1) + /* XDP_ATTACHED */
1208 nla_total_size(4) + /* XDP_PROG_ID (or 1st mode) */
1209 nla_total_size(4); /* XDP_<mode>_PROG_ID */
1214 static size_t rtnl_prop_list_size(const struct net_device
*dev
)
1216 struct netdev_name_node
*name_node
;
1217 unsigned int cnt
= 0;
1220 list_for_each_entry_rcu(name_node
, &dev
->name_node
->list
, list
)
1227 return nla_total_size(0) + cnt
* nla_total_size(ALTIFNAMSIZ
);
1230 static size_t rtnl_proto_down_size(const struct net_device
*dev
)
1232 size_t size
= nla_total_size(1);
1234 /* Assume dev->proto_down_reason is not zero. */
1235 size
+= nla_total_size(0) + nla_total_size(4);
1240 static size_t rtnl_devlink_port_size(const struct net_device
*dev
)
1242 size_t size
= nla_total_size(0); /* nest IFLA_DEVLINK_PORT */
1244 if (dev
->devlink_port
)
1245 size
+= devlink_nl_port_handle_size(dev
->devlink_port
);
1250 static size_t rtnl_dpll_pin_size(const struct net_device
*dev
)
1252 size_t size
= nla_total_size(0); /* nest IFLA_DPLL_PIN */
1254 size
+= dpll_netdev_pin_handle_size(dev
);
1259 static noinline
size_t if_nlmsg_size(const struct net_device
*dev
,
1260 u32 ext_filter_mask
)
1262 return NLMSG_ALIGN(sizeof(struct ifinfomsg
))
1263 + nla_total_size(IFNAMSIZ
) /* IFLA_IFNAME */
1264 + nla_total_size(IFALIASZ
) /* IFLA_IFALIAS */
1265 + nla_total_size(IFNAMSIZ
) /* IFLA_QDISC */
1266 + nla_total_size_64bit(sizeof(struct rtnl_link_ifmap
))
1267 + nla_total_size(sizeof(struct rtnl_link_stats
))
1268 + nla_total_size_64bit(sizeof(struct rtnl_link_stats64
))
1269 + nla_total_size(MAX_ADDR_LEN
) /* IFLA_ADDRESS */
1270 + nla_total_size(MAX_ADDR_LEN
) /* IFLA_BROADCAST */
1271 + nla_total_size(4) /* IFLA_TXQLEN */
1272 + nla_total_size(4) /* IFLA_WEIGHT */
1273 + nla_total_size(4) /* IFLA_MTU */
1274 + nla_total_size(4) /* IFLA_LINK */
1275 + nla_total_size(4) /* IFLA_MASTER */
1276 + nla_total_size(1) /* IFLA_CARRIER */
1277 + nla_total_size(4) /* IFLA_PROMISCUITY */
1278 + nla_total_size(4) /* IFLA_ALLMULTI */
1279 + nla_total_size(4) /* IFLA_NUM_TX_QUEUES */
1280 + nla_total_size(4) /* IFLA_NUM_RX_QUEUES */
1281 + nla_total_size(4) /* IFLA_GSO_MAX_SEGS */
1282 + nla_total_size(4) /* IFLA_GSO_MAX_SIZE */
1283 + nla_total_size(4) /* IFLA_GRO_MAX_SIZE */
1284 + nla_total_size(4) /* IFLA_GSO_IPV4_MAX_SIZE */
1285 + nla_total_size(4) /* IFLA_GRO_IPV4_MAX_SIZE */
1286 + nla_total_size(4) /* IFLA_TSO_MAX_SIZE */
1287 + nla_total_size(4) /* IFLA_TSO_MAX_SEGS */
1288 + nla_total_size(1) /* IFLA_OPERSTATE */
1289 + nla_total_size(1) /* IFLA_LINKMODE */
1290 + nla_total_size(4) /* IFLA_CARRIER_CHANGES */
1291 + nla_total_size(4) /* IFLA_LINK_NETNSID */
1292 + nla_total_size(4) /* IFLA_GROUP */
1293 + nla_total_size(ext_filter_mask
1294 & RTEXT_FILTER_VF
? 4 : 0) /* IFLA_NUM_VF */
1295 + rtnl_vfinfo_size(dev
, ext_filter_mask
) /* IFLA_VFINFO_LIST */
1296 + rtnl_port_size(dev
, ext_filter_mask
) /* IFLA_VF_PORTS + IFLA_PORT_SELF */
1297 + rtnl_link_get_size(dev
) /* IFLA_LINKINFO */
1298 + rtnl_link_get_af_size(dev
, ext_filter_mask
) /* IFLA_AF_SPEC */
1299 + nla_total_size(MAX_PHYS_ITEM_ID_LEN
) /* IFLA_PHYS_PORT_ID */
1300 + nla_total_size(MAX_PHYS_ITEM_ID_LEN
) /* IFLA_PHYS_SWITCH_ID */
1301 + nla_total_size(IFNAMSIZ
) /* IFLA_PHYS_PORT_NAME */
1302 + rtnl_xdp_size() /* IFLA_XDP */
1303 + nla_total_size(4) /* IFLA_EVENT */
1304 + nla_total_size(4) /* IFLA_NEW_NETNSID */
1305 + nla_total_size(4) /* IFLA_NEW_IFINDEX */
1306 + rtnl_proto_down_size(dev
) /* proto down */
1307 + nla_total_size(4) /* IFLA_TARGET_NETNSID */
1308 + nla_total_size(4) /* IFLA_CARRIER_UP_COUNT */
1309 + nla_total_size(4) /* IFLA_CARRIER_DOWN_COUNT */
1310 + nla_total_size(4) /* IFLA_MIN_MTU */
1311 + nla_total_size(4) /* IFLA_MAX_MTU */
1312 + rtnl_prop_list_size(dev
)
1313 + nla_total_size(MAX_ADDR_LEN
) /* IFLA_PERM_ADDRESS */
1314 + rtnl_devlink_port_size(dev
)
1315 + rtnl_dpll_pin_size(dev
)
1316 + nla_total_size(8) /* IFLA_MAX_PACING_OFFLOAD_HORIZON */
1320 static int rtnl_vf_ports_fill(struct sk_buff
*skb
, struct net_device
*dev
)
1322 struct nlattr
*vf_ports
;
1323 struct nlattr
*vf_port
;
1327 vf_ports
= nla_nest_start_noflag(skb
, IFLA_VF_PORTS
);
1331 for (vf
= 0; vf
< dev_num_vf(dev
->dev
.parent
); vf
++) {
1332 vf_port
= nla_nest_start_noflag(skb
, IFLA_VF_PORT
);
1334 goto nla_put_failure
;
1335 if (nla_put_u32(skb
, IFLA_PORT_VF
, vf
))
1336 goto nla_put_failure
;
1337 err
= dev
->netdev_ops
->ndo_get_vf_port(dev
, vf
, skb
);
1338 if (err
== -EMSGSIZE
)
1339 goto nla_put_failure
;
1341 nla_nest_cancel(skb
, vf_port
);
1344 nla_nest_end(skb
, vf_port
);
1347 nla_nest_end(skb
, vf_ports
);
1352 nla_nest_cancel(skb
, vf_ports
);
1356 static int rtnl_port_self_fill(struct sk_buff
*skb
, struct net_device
*dev
)
1358 struct nlattr
*port_self
;
1361 port_self
= nla_nest_start_noflag(skb
, IFLA_PORT_SELF
);
1365 err
= dev
->netdev_ops
->ndo_get_vf_port(dev
, PORT_SELF_VF
, skb
);
1367 nla_nest_cancel(skb
, port_self
);
1368 return (err
== -EMSGSIZE
) ? err
: 0;
1371 nla_nest_end(skb
, port_self
);
1376 static int rtnl_port_fill(struct sk_buff
*skb
, struct net_device
*dev
,
1377 u32 ext_filter_mask
)
1381 if (!dev
->netdev_ops
->ndo_get_vf_port
|| !dev
->dev
.parent
||
1382 !(ext_filter_mask
& RTEXT_FILTER_VF
))
1385 err
= rtnl_port_self_fill(skb
, dev
);
1389 if (dev_num_vf(dev
->dev
.parent
)) {
1390 err
= rtnl_vf_ports_fill(skb
, dev
);
1398 static int rtnl_phys_port_id_fill(struct sk_buff
*skb
, struct net_device
*dev
)
1401 struct netdev_phys_item_id ppid
;
1403 err
= dev_get_phys_port_id(dev
, &ppid
);
1405 if (err
== -EOPNOTSUPP
)
1410 if (nla_put(skb
, IFLA_PHYS_PORT_ID
, ppid
.id_len
, ppid
.id
))
1416 static int rtnl_phys_port_name_fill(struct sk_buff
*skb
, struct net_device
*dev
)
1418 char name
[IFNAMSIZ
];
1421 err
= dev_get_phys_port_name(dev
, name
, sizeof(name
));
1423 if (err
== -EOPNOTSUPP
)
1428 if (nla_put_string(skb
, IFLA_PHYS_PORT_NAME
, name
))
1434 static int rtnl_phys_switch_id_fill(struct sk_buff
*skb
, struct net_device
*dev
)
1436 struct netdev_phys_item_id ppid
= { };
1439 err
= dev_get_port_parent_id(dev
, &ppid
, false);
1441 if (err
== -EOPNOTSUPP
)
1446 if (nla_put(skb
, IFLA_PHYS_SWITCH_ID
, ppid
.id_len
, ppid
.id
))
1452 static noinline_for_stack
int rtnl_fill_stats(struct sk_buff
*skb
,
1453 struct net_device
*dev
)
1455 struct rtnl_link_stats64
*sp
;
1456 struct nlattr
*attr
;
1458 attr
= nla_reserve_64bit(skb
, IFLA_STATS64
,
1459 sizeof(struct rtnl_link_stats64
), IFLA_PAD
);
1463 sp
= nla_data(attr
);
1464 dev_get_stats(dev
, sp
);
1466 attr
= nla_reserve(skb
, IFLA_STATS
,
1467 sizeof(struct rtnl_link_stats
));
1471 copy_rtnl_link_stats(nla_data(attr
), sp
);
1476 static noinline_for_stack
int rtnl_fill_vfinfo(struct sk_buff
*skb
,
1477 struct net_device
*dev
,
1479 u32 ext_filter_mask
)
1481 struct ifla_vf_rss_query_en vf_rss_query_en
;
1482 struct nlattr
*vf
, *vfstats
, *vfvlanlist
;
1483 struct ifla_vf_link_state vf_linkstate
;
1484 struct ifla_vf_vlan_info vf_vlan_info
;
1485 struct ifla_vf_spoofchk vf_spoofchk
;
1486 struct ifla_vf_tx_rate vf_tx_rate
;
1487 struct ifla_vf_stats vf_stats
;
1488 struct ifla_vf_trust vf_trust
;
1489 struct ifla_vf_vlan vf_vlan
;
1490 struct ifla_vf_rate vf_rate
;
1491 struct ifla_vf_mac vf_mac
;
1492 struct ifla_vf_broadcast vf_broadcast
;
1493 struct ifla_vf_info ivi
;
1494 struct ifla_vf_guid node_guid
;
1495 struct ifla_vf_guid port_guid
;
1497 memset(&ivi
, 0, sizeof(ivi
));
1499 /* Not all SR-IOV capable drivers support the
1500 * spoofcheck and "RSS query enable" query. Preset to
1501 * -1 so the user space tool can detect that the driver
1502 * didn't report anything.
1505 ivi
.rss_query_en
= -1;
1507 /* The default value for VF link state is "auto"
1508 * IFLA_VF_LINK_STATE_AUTO which equals zero
1511 /* VLAN Protocol by default is 802.1Q */
1512 ivi
.vlan_proto
= htons(ETH_P_8021Q
);
1513 if (dev
->netdev_ops
->ndo_get_vf_config(dev
, vfs_num
, &ivi
))
1516 memset(&vf_vlan_info
, 0, sizeof(vf_vlan_info
));
1517 memset(&node_guid
, 0, sizeof(node_guid
));
1518 memset(&port_guid
, 0, sizeof(port_guid
));
1527 vf_rss_query_en
.vf
=
1530 port_guid
.vf
= ivi
.vf
;
1532 memcpy(vf_mac
.mac
, ivi
.mac
, sizeof(ivi
.mac
));
1533 memcpy(vf_broadcast
.broadcast
, dev
->broadcast
, dev
->addr_len
);
1534 vf_vlan
.vlan
= ivi
.vlan
;
1535 vf_vlan
.qos
= ivi
.qos
;
1536 vf_vlan_info
.vlan
= ivi
.vlan
;
1537 vf_vlan_info
.qos
= ivi
.qos
;
1538 vf_vlan_info
.vlan_proto
= ivi
.vlan_proto
;
1539 vf_tx_rate
.rate
= ivi
.max_tx_rate
;
1540 vf_rate
.min_tx_rate
= ivi
.min_tx_rate
;
1541 vf_rate
.max_tx_rate
= ivi
.max_tx_rate
;
1542 vf_spoofchk
.setting
= ivi
.spoofchk
;
1543 vf_linkstate
.link_state
= ivi
.linkstate
;
1544 vf_rss_query_en
.setting
= ivi
.rss_query_en
;
1545 vf_trust
.setting
= ivi
.trusted
;
1546 vf
= nla_nest_start_noflag(skb
, IFLA_VF_INFO
);
1549 if (nla_put(skb
, IFLA_VF_MAC
, sizeof(vf_mac
), &vf_mac
) ||
1550 nla_put(skb
, IFLA_VF_BROADCAST
, sizeof(vf_broadcast
), &vf_broadcast
) ||
1551 nla_put(skb
, IFLA_VF_VLAN
, sizeof(vf_vlan
), &vf_vlan
) ||
1552 nla_put(skb
, IFLA_VF_RATE
, sizeof(vf_rate
),
1554 nla_put(skb
, IFLA_VF_TX_RATE
, sizeof(vf_tx_rate
),
1556 nla_put(skb
, IFLA_VF_SPOOFCHK
, sizeof(vf_spoofchk
),
1558 nla_put(skb
, IFLA_VF_LINK_STATE
, sizeof(vf_linkstate
),
1560 nla_put(skb
, IFLA_VF_RSS_QUERY_EN
,
1561 sizeof(vf_rss_query_en
),
1562 &vf_rss_query_en
) ||
1563 nla_put(skb
, IFLA_VF_TRUST
,
1564 sizeof(vf_trust
), &vf_trust
))
1565 goto nla_put_vf_failure
;
1567 if (dev
->netdev_ops
->ndo_get_vf_guid
&&
1568 !dev
->netdev_ops
->ndo_get_vf_guid(dev
, vfs_num
, &node_guid
,
1570 if (nla_put(skb
, IFLA_VF_IB_NODE_GUID
, sizeof(node_guid
),
1572 nla_put(skb
, IFLA_VF_IB_PORT_GUID
, sizeof(port_guid
),
1574 goto nla_put_vf_failure
;
1576 vfvlanlist
= nla_nest_start_noflag(skb
, IFLA_VF_VLAN_LIST
);
1578 goto nla_put_vf_failure
;
1579 if (nla_put(skb
, IFLA_VF_VLAN_INFO
, sizeof(vf_vlan_info
),
1581 nla_nest_cancel(skb
, vfvlanlist
);
1582 goto nla_put_vf_failure
;
1584 nla_nest_end(skb
, vfvlanlist
);
1585 if (~ext_filter_mask
& RTEXT_FILTER_SKIP_STATS
) {
1586 memset(&vf_stats
, 0, sizeof(vf_stats
));
1587 if (dev
->netdev_ops
->ndo_get_vf_stats
)
1588 dev
->netdev_ops
->ndo_get_vf_stats(dev
, vfs_num
,
1590 vfstats
= nla_nest_start_noflag(skb
, IFLA_VF_STATS
);
1592 goto nla_put_vf_failure
;
1593 if (nla_put_u64_64bit(skb
, IFLA_VF_STATS_RX_PACKETS
,
1594 vf_stats
.rx_packets
, IFLA_VF_STATS_PAD
) ||
1595 nla_put_u64_64bit(skb
, IFLA_VF_STATS_TX_PACKETS
,
1596 vf_stats
.tx_packets
, IFLA_VF_STATS_PAD
) ||
1597 nla_put_u64_64bit(skb
, IFLA_VF_STATS_RX_BYTES
,
1598 vf_stats
.rx_bytes
, IFLA_VF_STATS_PAD
) ||
1599 nla_put_u64_64bit(skb
, IFLA_VF_STATS_TX_BYTES
,
1600 vf_stats
.tx_bytes
, IFLA_VF_STATS_PAD
) ||
1601 nla_put_u64_64bit(skb
, IFLA_VF_STATS_BROADCAST
,
1602 vf_stats
.broadcast
, IFLA_VF_STATS_PAD
) ||
1603 nla_put_u64_64bit(skb
, IFLA_VF_STATS_MULTICAST
,
1604 vf_stats
.multicast
, IFLA_VF_STATS_PAD
) ||
1605 nla_put_u64_64bit(skb
, IFLA_VF_STATS_RX_DROPPED
,
1606 vf_stats
.rx_dropped
, IFLA_VF_STATS_PAD
) ||
1607 nla_put_u64_64bit(skb
, IFLA_VF_STATS_TX_DROPPED
,
1608 vf_stats
.tx_dropped
, IFLA_VF_STATS_PAD
)) {
1609 nla_nest_cancel(skb
, vfstats
);
1610 goto nla_put_vf_failure
;
1612 nla_nest_end(skb
, vfstats
);
1614 nla_nest_end(skb
, vf
);
1618 nla_nest_cancel(skb
, vf
);
1622 static noinline_for_stack
int rtnl_fill_vf(struct sk_buff
*skb
,
1623 struct net_device
*dev
,
1624 u32 ext_filter_mask
)
1626 struct nlattr
*vfinfo
;
1629 if (!dev
->dev
.parent
|| ((ext_filter_mask
& RTEXT_FILTER_VF
) == 0))
1632 num_vfs
= dev_num_vf(dev
->dev
.parent
);
1633 if (nla_put_u32(skb
, IFLA_NUM_VF
, num_vfs
))
1636 if (!dev
->netdev_ops
->ndo_get_vf_config
)
1639 vfinfo
= nla_nest_start_noflag(skb
, IFLA_VFINFO_LIST
);
1643 for (i
= 0; i
< num_vfs
; i
++) {
1644 if (rtnl_fill_vfinfo(skb
, dev
, i
, ext_filter_mask
)) {
1645 nla_nest_cancel(skb
, vfinfo
);
1650 nla_nest_end(skb
, vfinfo
);
1654 static int rtnl_fill_link_ifmap(struct sk_buff
*skb
,
1655 const struct net_device
*dev
)
1657 struct rtnl_link_ifmap map
;
1659 memset(&map
, 0, sizeof(map
));
1660 map
.mem_start
= READ_ONCE(dev
->mem_start
);
1661 map
.mem_end
= READ_ONCE(dev
->mem_end
);
1662 map
.base_addr
= READ_ONCE(dev
->base_addr
);
1663 map
.irq
= READ_ONCE(dev
->irq
);
1664 map
.dma
= READ_ONCE(dev
->dma
);
1665 map
.port
= READ_ONCE(dev
->if_port
);
1667 if (nla_put_64bit(skb
, IFLA_MAP
, sizeof(map
), &map
, IFLA_PAD
))
1673 static u32
rtnl_xdp_prog_skb(struct net_device
*dev
)
1675 const struct bpf_prog
*generic_xdp_prog
;
1679 generic_xdp_prog
= rcu_dereference(dev
->xdp_prog
);
1680 if (generic_xdp_prog
)
1681 res
= generic_xdp_prog
->aux
->id
;
1687 static u32
rtnl_xdp_prog_drv(struct net_device
*dev
)
1689 return dev_xdp_prog_id(dev
, XDP_MODE_DRV
);
1692 static u32
rtnl_xdp_prog_hw(struct net_device
*dev
)
1694 return dev_xdp_prog_id(dev
, XDP_MODE_HW
);
1697 static int rtnl_xdp_report_one(struct sk_buff
*skb
, struct net_device
*dev
,
1698 u32
*prog_id
, u8
*mode
, u8 tgt_mode
, u32 attr
,
1699 u32 (*get_prog_id
)(struct net_device
*dev
))
1704 curr_id
= get_prog_id(dev
);
1709 err
= nla_put_u32(skb
, attr
, curr_id
);
1713 if (*mode
!= XDP_ATTACHED_NONE
)
1714 *mode
= XDP_ATTACHED_MULTI
;
1721 static int rtnl_xdp_fill(struct sk_buff
*skb
, struct net_device
*dev
)
1728 xdp
= nla_nest_start_noflag(skb
, IFLA_XDP
);
1733 mode
= XDP_ATTACHED_NONE
;
1734 err
= rtnl_xdp_report_one(skb
, dev
, &prog_id
, &mode
, XDP_ATTACHED_SKB
,
1735 IFLA_XDP_SKB_PROG_ID
, rtnl_xdp_prog_skb
);
1738 err
= rtnl_xdp_report_one(skb
, dev
, &prog_id
, &mode
, XDP_ATTACHED_DRV
,
1739 IFLA_XDP_DRV_PROG_ID
, rtnl_xdp_prog_drv
);
1742 err
= rtnl_xdp_report_one(skb
, dev
, &prog_id
, &mode
, XDP_ATTACHED_HW
,
1743 IFLA_XDP_HW_PROG_ID
, rtnl_xdp_prog_hw
);
1747 err
= nla_put_u8(skb
, IFLA_XDP_ATTACHED
, mode
);
1751 if (prog_id
&& mode
!= XDP_ATTACHED_MULTI
) {
1752 err
= nla_put_u32(skb
, IFLA_XDP_PROG_ID
, prog_id
);
1757 nla_nest_end(skb
, xdp
);
1761 nla_nest_cancel(skb
, xdp
);
1765 static u32
rtnl_get_event(unsigned long event
)
1767 u32 rtnl_event_type
= IFLA_EVENT_NONE
;
1771 rtnl_event_type
= IFLA_EVENT_REBOOT
;
1773 case NETDEV_FEAT_CHANGE
:
1774 rtnl_event_type
= IFLA_EVENT_FEATURES
;
1776 case NETDEV_BONDING_FAILOVER
:
1777 rtnl_event_type
= IFLA_EVENT_BONDING_FAILOVER
;
1779 case NETDEV_NOTIFY_PEERS
:
1780 rtnl_event_type
= IFLA_EVENT_NOTIFY_PEERS
;
1782 case NETDEV_RESEND_IGMP
:
1783 rtnl_event_type
= IFLA_EVENT_IGMP_RESEND
;
1785 case NETDEV_CHANGEINFODATA
:
1786 rtnl_event_type
= IFLA_EVENT_BONDING_OPTIONS
;
1792 return rtnl_event_type
;
1795 static int put_master_ifindex(struct sk_buff
*skb
, struct net_device
*dev
)
1797 const struct net_device
*upper_dev
;
1802 upper_dev
= netdev_master_upper_dev_get_rcu(dev
);
1804 ret
= nla_put_u32(skb
, IFLA_MASTER
,
1805 READ_ONCE(upper_dev
->ifindex
));
1811 static int nla_put_iflink(struct sk_buff
*skb
, const struct net_device
*dev
,
1814 int iflink
= dev_get_iflink(dev
);
1816 if (force
|| READ_ONCE(dev
->ifindex
) != iflink
)
1817 return nla_put_u32(skb
, IFLA_LINK
, iflink
);
1822 static noinline_for_stack
int nla_put_ifalias(struct sk_buff
*skb
,
1823 struct net_device
*dev
)
1828 ret
= dev_get_alias(dev
, buf
, sizeof(buf
));
1829 return ret
> 0 ? nla_put_string(skb
, IFLA_IFALIAS
, buf
) : 0;
1832 static int rtnl_fill_link_netnsid(struct sk_buff
*skb
,
1833 const struct net_device
*dev
,
1834 struct net
*src_net
, gfp_t gfp
)
1836 bool put_iflink
= false;
1838 if (dev
->rtnl_link_ops
&& dev
->rtnl_link_ops
->get_link_net
) {
1839 struct net
*link_net
= dev
->rtnl_link_ops
->get_link_net(dev
);
1841 if (!net_eq(dev_net(dev
), link_net
)) {
1842 int id
= peernet2id_alloc(src_net
, link_net
, gfp
);
1844 if (nla_put_s32(skb
, IFLA_LINK_NETNSID
, id
))
1851 return nla_put_iflink(skb
, dev
, put_iflink
);
1854 static int rtnl_fill_link_af(struct sk_buff
*skb
,
1855 const struct net_device
*dev
,
1856 u32 ext_filter_mask
)
1858 const struct rtnl_af_ops
*af_ops
;
1859 struct nlattr
*af_spec
;
1861 af_spec
= nla_nest_start_noflag(skb
, IFLA_AF_SPEC
);
1865 list_for_each_entry_rcu(af_ops
, &rtnl_af_ops
, list
) {
1869 if (!af_ops
->fill_link_af
)
1872 af
= nla_nest_start_noflag(skb
, af_ops
->family
);
1876 err
= af_ops
->fill_link_af(skb
, dev
, ext_filter_mask
);
1878 * Caller may return ENODATA to indicate that there
1879 * was no data to be dumped. This is not an error, it
1880 * means we should trim the attribute header and
1883 if (err
== -ENODATA
)
1884 nla_nest_cancel(skb
, af
);
1888 nla_nest_end(skb
, af
);
1891 nla_nest_end(skb
, af_spec
);
1895 static int rtnl_fill_alt_ifnames(struct sk_buff
*skb
,
1896 const struct net_device
*dev
)
1898 struct netdev_name_node
*name_node
;
1901 list_for_each_entry_rcu(name_node
, &dev
->name_node
->list
, list
) {
1902 if (nla_put_string(skb
, IFLA_ALT_IFNAME
, name_node
->name
))
1909 /* RCU protected. */
1910 static int rtnl_fill_prop_list(struct sk_buff
*skb
,
1911 const struct net_device
*dev
)
1913 struct nlattr
*prop_list
;
1916 prop_list
= nla_nest_start(skb
, IFLA_PROP_LIST
);
1920 ret
= rtnl_fill_alt_ifnames(skb
, dev
);
1924 nla_nest_end(skb
, prop_list
);
1928 nla_nest_cancel(skb
, prop_list
);
1932 static int rtnl_fill_proto_down(struct sk_buff
*skb
,
1933 const struct net_device
*dev
)
1938 if (nla_put_u8(skb
, IFLA_PROTO_DOWN
, READ_ONCE(dev
->proto_down
)))
1939 goto nla_put_failure
;
1941 preason
= READ_ONCE(dev
->proto_down_reason
);
1945 pr
= nla_nest_start(skb
, IFLA_PROTO_DOWN_REASON
);
1949 if (nla_put_u32(skb
, IFLA_PROTO_DOWN_REASON_VALUE
, preason
)) {
1950 nla_nest_cancel(skb
, pr
);
1951 goto nla_put_failure
;
1954 nla_nest_end(skb
, pr
);
1961 static int rtnl_fill_devlink_port(struct sk_buff
*skb
,
1962 const struct net_device
*dev
)
1964 struct nlattr
*devlink_port_nest
;
1967 devlink_port_nest
= nla_nest_start(skb
, IFLA_DEVLINK_PORT
);
1968 if (!devlink_port_nest
)
1971 if (dev
->devlink_port
) {
1972 ret
= devlink_nl_port_handle_fill(skb
, dev
->devlink_port
);
1977 nla_nest_end(skb
, devlink_port_nest
);
1981 nla_nest_cancel(skb
, devlink_port_nest
);
1985 static int rtnl_fill_dpll_pin(struct sk_buff
*skb
,
1986 const struct net_device
*dev
)
1988 struct nlattr
*dpll_pin_nest
;
1991 dpll_pin_nest
= nla_nest_start(skb
, IFLA_DPLL_PIN
);
1995 ret
= dpll_netdev_add_pin_handle(skb
, dev
);
1999 nla_nest_end(skb
, dpll_pin_nest
);
2003 nla_nest_cancel(skb
, dpll_pin_nest
);
2007 static int rtnl_fill_ifinfo(struct sk_buff
*skb
,
2008 struct net_device
*dev
, struct net
*src_net
,
2009 int type
, u32 pid
, u32 seq
, u32 change
,
2010 unsigned int flags
, u32 ext_filter_mask
,
2011 u32 event
, int *new_nsid
, int new_ifindex
,
2012 int tgt_netnsid
, gfp_t gfp
)
2014 char devname
[IFNAMSIZ
];
2015 struct ifinfomsg
*ifm
;
2016 struct nlmsghdr
*nlh
;
2017 struct Qdisc
*qdisc
;
2020 nlh
= nlmsg_put(skb
, pid
, seq
, type
, sizeof(*ifm
), flags
);
2024 ifm
= nlmsg_data(nlh
);
2025 ifm
->ifi_family
= AF_UNSPEC
;
2027 ifm
->ifi_type
= READ_ONCE(dev
->type
);
2028 ifm
->ifi_index
= READ_ONCE(dev
->ifindex
);
2029 ifm
->ifi_flags
= dev_get_flags(dev
);
2030 ifm
->ifi_change
= change
;
2032 if (tgt_netnsid
>= 0 && nla_put_s32(skb
, IFLA_TARGET_NETNSID
, tgt_netnsid
))
2033 goto nla_put_failure
;
2035 netdev_copy_name(dev
, devname
);
2036 if (nla_put_string(skb
, IFLA_IFNAME
, devname
))
2037 goto nla_put_failure
;
2039 if (nla_put_u32(skb
, IFLA_TXQLEN
, READ_ONCE(dev
->tx_queue_len
)) ||
2040 nla_put_u8(skb
, IFLA_OPERSTATE
,
2041 netif_running(dev
) ? READ_ONCE(dev
->operstate
) :
2043 nla_put_u8(skb
, IFLA_LINKMODE
, READ_ONCE(dev
->link_mode
)) ||
2044 nla_put_u32(skb
, IFLA_MTU
, READ_ONCE(dev
->mtu
)) ||
2045 nla_put_u32(skb
, IFLA_MIN_MTU
, READ_ONCE(dev
->min_mtu
)) ||
2046 nla_put_u32(skb
, IFLA_MAX_MTU
, READ_ONCE(dev
->max_mtu
)) ||
2047 nla_put_u32(skb
, IFLA_GROUP
, READ_ONCE(dev
->group
)) ||
2048 nla_put_u32(skb
, IFLA_PROMISCUITY
, READ_ONCE(dev
->promiscuity
)) ||
2049 nla_put_u32(skb
, IFLA_ALLMULTI
, READ_ONCE(dev
->allmulti
)) ||
2050 nla_put_u32(skb
, IFLA_NUM_TX_QUEUES
,
2051 READ_ONCE(dev
->num_tx_queues
)) ||
2052 nla_put_u32(skb
, IFLA_GSO_MAX_SEGS
,
2053 READ_ONCE(dev
->gso_max_segs
)) ||
2054 nla_put_u32(skb
, IFLA_GSO_MAX_SIZE
,
2055 READ_ONCE(dev
->gso_max_size
)) ||
2056 nla_put_u32(skb
, IFLA_GRO_MAX_SIZE
,
2057 READ_ONCE(dev
->gro_max_size
)) ||
2058 nla_put_u32(skb
, IFLA_GSO_IPV4_MAX_SIZE
,
2059 READ_ONCE(dev
->gso_ipv4_max_size
)) ||
2060 nla_put_u32(skb
, IFLA_GRO_IPV4_MAX_SIZE
,
2061 READ_ONCE(dev
->gro_ipv4_max_size
)) ||
2062 nla_put_u32(skb
, IFLA_TSO_MAX_SIZE
,
2063 READ_ONCE(dev
->tso_max_size
)) ||
2064 nla_put_u32(skb
, IFLA_TSO_MAX_SEGS
,
2065 READ_ONCE(dev
->tso_max_segs
)) ||
2066 nla_put_uint(skb
, IFLA_MAX_PACING_OFFLOAD_HORIZON
,
2067 READ_ONCE(dev
->max_pacing_offload_horizon
)) ||
2069 nla_put_u32(skb
, IFLA_NUM_RX_QUEUES
,
2070 READ_ONCE(dev
->num_rx_queues
)) ||
2072 put_master_ifindex(skb
, dev
) ||
2073 nla_put_u8(skb
, IFLA_CARRIER
, netif_carrier_ok(dev
)) ||
2074 nla_put_ifalias(skb
, dev
) ||
2075 nla_put_u32(skb
, IFLA_CARRIER_CHANGES
,
2076 atomic_read(&dev
->carrier_up_count
) +
2077 atomic_read(&dev
->carrier_down_count
)) ||
2078 nla_put_u32(skb
, IFLA_CARRIER_UP_COUNT
,
2079 atomic_read(&dev
->carrier_up_count
)) ||
2080 nla_put_u32(skb
, IFLA_CARRIER_DOWN_COUNT
,
2081 atomic_read(&dev
->carrier_down_count
)))
2082 goto nla_put_failure
;
2084 if (rtnl_fill_proto_down(skb
, dev
))
2085 goto nla_put_failure
;
2087 if (event
!= IFLA_EVENT_NONE
) {
2088 if (nla_put_u32(skb
, IFLA_EVENT
, event
))
2089 goto nla_put_failure
;
2092 if (dev
->addr_len
) {
2093 if (nla_put(skb
, IFLA_ADDRESS
, dev
->addr_len
, dev
->dev_addr
) ||
2094 nla_put(skb
, IFLA_BROADCAST
, dev
->addr_len
, dev
->broadcast
))
2095 goto nla_put_failure
;
2098 if (rtnl_phys_port_id_fill(skb
, dev
))
2099 goto nla_put_failure
;
2101 if (rtnl_phys_port_name_fill(skb
, dev
))
2102 goto nla_put_failure
;
2104 if (rtnl_phys_switch_id_fill(skb
, dev
))
2105 goto nla_put_failure
;
2107 if (rtnl_fill_stats(skb
, dev
))
2108 goto nla_put_failure
;
2110 if (rtnl_fill_vf(skb
, dev
, ext_filter_mask
))
2111 goto nla_put_failure
;
2113 if (rtnl_port_fill(skb
, dev
, ext_filter_mask
))
2114 goto nla_put_failure
;
2116 if (rtnl_xdp_fill(skb
, dev
))
2117 goto nla_put_failure
;
2119 if (dev
->rtnl_link_ops
|| rtnl_have_link_slave_info(dev
)) {
2120 if (rtnl_link_fill(skb
, dev
) < 0)
2121 goto nla_put_failure
;
2125 nla_put_s32(skb
, IFLA_NEW_NETNSID
, *new_nsid
) < 0)
2126 goto nla_put_failure
;
2128 nla_put_s32(skb
, IFLA_NEW_IFINDEX
, new_ifindex
) < 0)
2129 goto nla_put_failure
;
2131 if (memchr_inv(dev
->perm_addr
, '\0', dev
->addr_len
) &&
2132 nla_put(skb
, IFLA_PERM_ADDRESS
, dev
->addr_len
, dev
->perm_addr
))
2133 goto nla_put_failure
;
2136 if (rtnl_fill_link_netnsid(skb
, dev
, src_net
, GFP_ATOMIC
))
2137 goto nla_put_failure_rcu
;
2138 qdisc
= rcu_dereference(dev
->qdisc
);
2139 if (qdisc
&& nla_put_string(skb
, IFLA_QDISC
, qdisc
->ops
->id
))
2140 goto nla_put_failure_rcu
;
2141 if (rtnl_fill_link_af(skb
, dev
, ext_filter_mask
))
2142 goto nla_put_failure_rcu
;
2143 if (rtnl_fill_link_ifmap(skb
, dev
))
2144 goto nla_put_failure_rcu
;
2145 if (rtnl_fill_prop_list(skb
, dev
))
2146 goto nla_put_failure_rcu
;
2149 if (dev
->dev
.parent
&&
2150 nla_put_string(skb
, IFLA_PARENT_DEV_NAME
,
2151 dev_name(dev
->dev
.parent
)))
2152 goto nla_put_failure
;
2154 if (dev
->dev
.parent
&& dev
->dev
.parent
->bus
&&
2155 nla_put_string(skb
, IFLA_PARENT_DEV_BUS_NAME
,
2156 dev
->dev
.parent
->bus
->name
))
2157 goto nla_put_failure
;
2159 if (rtnl_fill_devlink_port(skb
, dev
))
2160 goto nla_put_failure
;
2162 if (rtnl_fill_dpll_pin(skb
, dev
))
2163 goto nla_put_failure
;
2165 nlmsg_end(skb
, nlh
);
2168 nla_put_failure_rcu
:
2171 nlmsg_cancel(skb
, nlh
);
2175 static const struct nla_policy ifla_policy
[IFLA_MAX
+1] = {
2176 [IFLA_UNSPEC
] = { .strict_start_type
= IFLA_DPLL_PIN
},
2177 [IFLA_IFNAME
] = { .type
= NLA_STRING
, .len
= IFNAMSIZ
-1 },
2178 [IFLA_ADDRESS
] = { .type
= NLA_BINARY
, .len
= MAX_ADDR_LEN
},
2179 [IFLA_BROADCAST
] = { .type
= NLA_BINARY
, .len
= MAX_ADDR_LEN
},
2180 [IFLA_MAP
] = { .len
= sizeof(struct rtnl_link_ifmap
) },
2181 [IFLA_MTU
] = { .type
= NLA_U32
},
2182 [IFLA_LINK
] = { .type
= NLA_U32
},
2183 [IFLA_MASTER
] = { .type
= NLA_U32
},
2184 [IFLA_CARRIER
] = { .type
= NLA_U8
},
2185 [IFLA_TXQLEN
] = { .type
= NLA_U32
},
2186 [IFLA_WEIGHT
] = { .type
= NLA_U32
},
2187 [IFLA_OPERSTATE
] = { .type
= NLA_U8
},
2188 [IFLA_LINKMODE
] = { .type
= NLA_U8
},
2189 [IFLA_LINKINFO
] = { .type
= NLA_NESTED
},
2190 [IFLA_NET_NS_PID
] = { .type
= NLA_U32
},
2191 [IFLA_NET_NS_FD
] = { .type
= NLA_U32
},
2192 /* IFLA_IFALIAS is a string, but policy is set to NLA_BINARY to
2193 * allow 0-length string (needed to remove an alias).
2195 [IFLA_IFALIAS
] = { .type
= NLA_BINARY
, .len
= IFALIASZ
- 1 },
2196 [IFLA_VFINFO_LIST
] = {. type
= NLA_NESTED
},
2197 [IFLA_VF_PORTS
] = { .type
= NLA_NESTED
},
2198 [IFLA_PORT_SELF
] = { .type
= NLA_NESTED
},
2199 [IFLA_AF_SPEC
] = { .type
= NLA_NESTED
},
2200 [IFLA_EXT_MASK
] = { .type
= NLA_U32
},
2201 [IFLA_PROMISCUITY
] = { .type
= NLA_U32
},
2202 [IFLA_NUM_TX_QUEUES
] = { .type
= NLA_U32
},
2203 [IFLA_NUM_RX_QUEUES
] = { .type
= NLA_U32
},
2204 [IFLA_GSO_MAX_SEGS
] = { .type
= NLA_U32
},
2205 [IFLA_GSO_MAX_SIZE
] = NLA_POLICY_MIN(NLA_U32
, MAX_TCP_HEADER
+ 1),
2206 [IFLA_PHYS_PORT_ID
] = { .type
= NLA_BINARY
, .len
= MAX_PHYS_ITEM_ID_LEN
},
2207 [IFLA_CARRIER_CHANGES
] = { .type
= NLA_U32
}, /* ignored */
2208 [IFLA_PHYS_SWITCH_ID
] = { .type
= NLA_BINARY
, .len
= MAX_PHYS_ITEM_ID_LEN
},
2209 [IFLA_LINK_NETNSID
] = { .type
= NLA_S32
},
2210 [IFLA_PROTO_DOWN
] = { .type
= NLA_U8
},
2211 [IFLA_XDP
] = { .type
= NLA_NESTED
},
2212 [IFLA_EVENT
] = { .type
= NLA_U32
},
2213 [IFLA_GROUP
] = { .type
= NLA_U32
},
2214 [IFLA_TARGET_NETNSID
] = { .type
= NLA_S32
},
2215 [IFLA_CARRIER_UP_COUNT
] = { .type
= NLA_U32
},
2216 [IFLA_CARRIER_DOWN_COUNT
] = { .type
= NLA_U32
},
2217 [IFLA_MIN_MTU
] = { .type
= NLA_U32
},
2218 [IFLA_MAX_MTU
] = { .type
= NLA_U32
},
2219 [IFLA_PROP_LIST
] = { .type
= NLA_NESTED
},
2220 [IFLA_ALT_IFNAME
] = { .type
= NLA_STRING
,
2221 .len
= ALTIFNAMSIZ
- 1 },
2222 [IFLA_PERM_ADDRESS
] = { .type
= NLA_REJECT
},
2223 [IFLA_PROTO_DOWN_REASON
] = { .type
= NLA_NESTED
},
2224 [IFLA_NEW_IFINDEX
] = NLA_POLICY_MIN(NLA_S32
, 1),
2225 [IFLA_PARENT_DEV_NAME
] = { .type
= NLA_NUL_STRING
},
2226 [IFLA_GRO_MAX_SIZE
] = { .type
= NLA_U32
},
2227 [IFLA_TSO_MAX_SIZE
] = { .type
= NLA_REJECT
},
2228 [IFLA_TSO_MAX_SEGS
] = { .type
= NLA_REJECT
},
2229 [IFLA_ALLMULTI
] = { .type
= NLA_REJECT
},
2230 [IFLA_GSO_IPV4_MAX_SIZE
] = NLA_POLICY_MIN(NLA_U32
, MAX_TCP_HEADER
+ 1),
2231 [IFLA_GRO_IPV4_MAX_SIZE
] = { .type
= NLA_U32
},
2234 static const struct nla_policy ifla_info_policy
[IFLA_INFO_MAX
+1] = {
2235 [IFLA_INFO_KIND
] = { .type
= NLA_STRING
},
2236 [IFLA_INFO_DATA
] = { .type
= NLA_NESTED
},
2237 [IFLA_INFO_SLAVE_KIND
] = { .type
= NLA_STRING
},
2238 [IFLA_INFO_SLAVE_DATA
] = { .type
= NLA_NESTED
},
2241 static const struct nla_policy ifla_vf_policy
[IFLA_VF_MAX
+1] = {
2242 [IFLA_VF_MAC
] = { .len
= sizeof(struct ifla_vf_mac
) },
2243 [IFLA_VF_BROADCAST
] = { .type
= NLA_REJECT
},
2244 [IFLA_VF_VLAN
] = { .len
= sizeof(struct ifla_vf_vlan
) },
2245 [IFLA_VF_VLAN_LIST
] = { .type
= NLA_NESTED
},
2246 [IFLA_VF_TX_RATE
] = { .len
= sizeof(struct ifla_vf_tx_rate
) },
2247 [IFLA_VF_SPOOFCHK
] = { .len
= sizeof(struct ifla_vf_spoofchk
) },
2248 [IFLA_VF_RATE
] = { .len
= sizeof(struct ifla_vf_rate
) },
2249 [IFLA_VF_LINK_STATE
] = { .len
= sizeof(struct ifla_vf_link_state
) },
2250 [IFLA_VF_RSS_QUERY_EN
] = { .len
= sizeof(struct ifla_vf_rss_query_en
) },
2251 [IFLA_VF_STATS
] = { .type
= NLA_NESTED
},
2252 [IFLA_VF_TRUST
] = { .len
= sizeof(struct ifla_vf_trust
) },
2253 [IFLA_VF_IB_NODE_GUID
] = { .len
= sizeof(struct ifla_vf_guid
) },
2254 [IFLA_VF_IB_PORT_GUID
] = { .len
= sizeof(struct ifla_vf_guid
) },
2257 static const struct nla_policy ifla_port_policy
[IFLA_PORT_MAX
+1] = {
2258 [IFLA_PORT_VF
] = { .type
= NLA_U32
},
2259 [IFLA_PORT_PROFILE
] = { .type
= NLA_STRING
,
2260 .len
= PORT_PROFILE_MAX
},
2261 [IFLA_PORT_INSTANCE_UUID
] = { .type
= NLA_BINARY
,
2262 .len
= PORT_UUID_MAX
},
2263 [IFLA_PORT_HOST_UUID
] = { .type
= NLA_STRING
,
2264 .len
= PORT_UUID_MAX
},
2265 [IFLA_PORT_REQUEST
] = { .type
= NLA_U8
, },
2266 [IFLA_PORT_RESPONSE
] = { .type
= NLA_U16
, },
2268 /* Unused, but we need to keep it here since user space could
2269 * fill it. It's also broken with regard to NLA_BINARY use in
2270 * combination with structs.
2272 [IFLA_PORT_VSI_TYPE
] = { .type
= NLA_BINARY
,
2273 .len
= sizeof(struct ifla_port_vsi
) },
2276 static const struct nla_policy ifla_xdp_policy
[IFLA_XDP_MAX
+ 1] = {
2277 [IFLA_XDP_UNSPEC
] = { .strict_start_type
= IFLA_XDP_EXPECTED_FD
},
2278 [IFLA_XDP_FD
] = { .type
= NLA_S32
},
2279 [IFLA_XDP_EXPECTED_FD
] = { .type
= NLA_S32
},
2280 [IFLA_XDP_ATTACHED
] = { .type
= NLA_U8
},
2281 [IFLA_XDP_FLAGS
] = { .type
= NLA_U32
},
2282 [IFLA_XDP_PROG_ID
] = { .type
= NLA_U32
},
2285 static struct rtnl_link_ops
*linkinfo_to_kind_ops(const struct nlattr
*nla
,
2286 int *ops_srcu_index
)
2288 struct nlattr
*linfo
[IFLA_INFO_MAX
+ 1];
2289 struct rtnl_link_ops
*ops
= NULL
;
2291 if (nla_parse_nested_deprecated(linfo
, IFLA_INFO_MAX
, nla
, ifla_info_policy
, NULL
) < 0)
2294 if (linfo
[IFLA_INFO_KIND
]) {
2295 char kind
[MODULE_NAME_LEN
];
2297 nla_strscpy(kind
, linfo
[IFLA_INFO_KIND
], sizeof(kind
));
2298 ops
= rtnl_link_ops_get(kind
, ops_srcu_index
);
2304 static bool link_master_filtered(struct net_device
*dev
, int master_idx
)
2306 struct net_device
*master
;
2311 master
= netdev_master_upper_dev_get(dev
);
2313 /* 0 is already used to denote IFLA_MASTER wasn't passed, therefore need
2314 * another invalid value for ifindex to denote "no master".
2316 if (master_idx
== -1)
2319 if (!master
|| master
->ifindex
!= master_idx
)
2325 static bool link_kind_filtered(const struct net_device
*dev
,
2326 const struct rtnl_link_ops
*kind_ops
)
2328 if (kind_ops
&& dev
->rtnl_link_ops
!= kind_ops
)
2334 static bool link_dump_filtered(struct net_device
*dev
,
2336 const struct rtnl_link_ops
*kind_ops
)
2338 if (link_master_filtered(dev
, master_idx
) ||
2339 link_kind_filtered(dev
, kind_ops
))
2346 * rtnl_get_net_ns_capable - Get netns if sufficiently privileged.
2347 * @sk: netlink socket
2348 * @netnsid: network namespace identifier
2350 * Returns the network namespace identified by netnsid on success or an error
2351 * pointer on failure.
2353 struct net
*rtnl_get_net_ns_capable(struct sock
*sk
, int netnsid
)
2357 net
= get_net_ns_by_id(sock_net(sk
), netnsid
);
2359 return ERR_PTR(-EINVAL
);
2361 /* For now, the caller is required to have CAP_NET_ADMIN in
2362 * the user namespace owning the target net ns.
2364 if (!sk_ns_capable(sk
, net
->user_ns
, CAP_NET_ADMIN
)) {
2366 return ERR_PTR(-EACCES
);
2370 EXPORT_SYMBOL_GPL(rtnl_get_net_ns_capable
);
2372 static int rtnl_valid_dump_ifinfo_req(const struct nlmsghdr
*nlh
,
2373 bool strict_check
, struct nlattr
**tb
,
2374 struct netlink_ext_ack
*extack
)
2379 struct ifinfomsg
*ifm
;
2381 if (nlh
->nlmsg_len
< nlmsg_msg_size(sizeof(*ifm
))) {
2382 NL_SET_ERR_MSG(extack
, "Invalid header for link dump");
2386 ifm
= nlmsg_data(nlh
);
2387 if (ifm
->__ifi_pad
|| ifm
->ifi_type
|| ifm
->ifi_flags
||
2389 NL_SET_ERR_MSG(extack
, "Invalid values in header for link dump request");
2392 if (ifm
->ifi_index
) {
2393 NL_SET_ERR_MSG(extack
, "Filter by device index not supported for link dumps");
2397 return nlmsg_parse_deprecated_strict(nlh
, sizeof(*ifm
), tb
,
2398 IFLA_MAX
, ifla_policy
,
2402 /* A hack to preserve kernel<->userspace interface.
2403 * The correct header is ifinfomsg. It is consistent with rtnl_getlink.
2404 * However, before Linux v3.9 the code here assumed rtgenmsg and that's
2405 * what iproute2 < v3.9.0 used.
2406 * We can detect the old iproute2. Even including the IFLA_EXT_MASK
2407 * attribute, its netlink message is shorter than struct ifinfomsg.
2409 hdrlen
= nlmsg_len(nlh
) < sizeof(struct ifinfomsg
) ?
2410 sizeof(struct rtgenmsg
) : sizeof(struct ifinfomsg
);
2412 return nlmsg_parse_deprecated(nlh
, hdrlen
, tb
, IFLA_MAX
, ifla_policy
,
2416 static int rtnl_dump_ifinfo(struct sk_buff
*skb
, struct netlink_callback
*cb
)
2418 struct netlink_ext_ack
*extack
= cb
->extack
;
2419 struct rtnl_link_ops
*kind_ops
= NULL
;
2420 const struct nlmsghdr
*nlh
= cb
->nlh
;
2421 struct net
*net
= sock_net(skb
->sk
);
2422 unsigned int flags
= NLM_F_MULTI
;
2423 struct nlattr
*tb
[IFLA_MAX
+1];
2425 unsigned long ifindex
;
2426 } *ctx
= (void *)cb
->ctx
;
2427 struct net
*tgt_net
= net
;
2428 u32 ext_filter_mask
= 0;
2429 struct net_device
*dev
;
2435 err
= rtnl_valid_dump_ifinfo_req(nlh
, cb
->strict_check
, tb
, extack
);
2437 if (cb
->strict_check
)
2443 for (i
= 0; i
<= IFLA_MAX
; ++i
) {
2447 /* new attributes should only be added with strict checking */
2449 case IFLA_TARGET_NETNSID
:
2450 netnsid
= nla_get_s32(tb
[i
]);
2451 tgt_net
= rtnl_get_net_ns_capable(skb
->sk
, netnsid
);
2452 if (IS_ERR(tgt_net
)) {
2453 NL_SET_ERR_MSG(extack
, "Invalid target network namespace id");
2454 err
= PTR_ERR(tgt_net
);
2460 ext_filter_mask
= nla_get_u32(tb
[i
]);
2463 master_idx
= nla_get_u32(tb
[i
]);
2466 kind_ops
= linkinfo_to_kind_ops(tb
[i
], &ops_srcu_index
);
2469 if (cb
->strict_check
) {
2470 NL_SET_ERR_MSG(extack
, "Unsupported attribute in link dump request");
2477 if (master_idx
|| kind_ops
)
2478 flags
|= NLM_F_DUMP_FILTERED
;
2482 for_each_netdev_dump(tgt_net
, dev
, ctx
->ifindex
) {
2483 if (link_dump_filtered(dev
, master_idx
, kind_ops
))
2485 err
= rtnl_fill_ifinfo(skb
, dev
, net
, RTM_NEWLINK
,
2486 NETLINK_CB(cb
->skb
).portid
,
2487 nlh
->nlmsg_seq
, 0, flags
,
2488 ext_filter_mask
, 0, NULL
, 0,
2489 netnsid
, GFP_KERNEL
);
2495 cb
->seq
= tgt_net
->dev_base_seq
;
2496 nl_dump_check_consistent(cb
, nlmsg_hdr(skb
));
2501 rtnl_link_ops_put(kind_ops
, ops_srcu_index
);
2508 int rtnl_nla_parse_ifinfomsg(struct nlattr
**tb
, const struct nlattr
*nla_peer
,
2509 struct netlink_ext_ack
*exterr
)
2511 const struct ifinfomsg
*ifmp
;
2512 const struct nlattr
*attrs
;
2515 ifmp
= nla_data(nla_peer
);
2516 attrs
= nla_data(nla_peer
) + sizeof(struct ifinfomsg
);
2517 len
= nla_len(nla_peer
) - sizeof(struct ifinfomsg
);
2519 if (ifmp
->ifi_index
< 0) {
2520 NL_SET_ERR_MSG_ATTR(exterr
, nla_peer
,
2521 "ifindex can't be negative");
2525 return nla_parse_deprecated(tb
, IFLA_MAX
, attrs
, len
, ifla_policy
,
2528 EXPORT_SYMBOL(rtnl_nla_parse_ifinfomsg
);
2530 static struct net
*rtnl_link_get_net_ifla(struct nlattr
*tb
[])
2532 struct net
*net
= NULL
;
2534 /* Examine the link attributes and figure out which
2535 * network namespace we are talking about.
2537 if (tb
[IFLA_NET_NS_PID
])
2538 net
= get_net_ns_by_pid(nla_get_u32(tb
[IFLA_NET_NS_PID
]));
2539 else if (tb
[IFLA_NET_NS_FD
])
2540 net
= get_net_ns_by_fd(nla_get_u32(tb
[IFLA_NET_NS_FD
]));
2545 struct net
*rtnl_link_get_net(struct net
*src_net
, struct nlattr
*tb
[])
2547 struct net
*net
= rtnl_link_get_net_ifla(tb
);
2550 net
= get_net(src_net
);
2554 EXPORT_SYMBOL(rtnl_link_get_net
);
2556 /* Figure out which network namespace we are talking about by
2557 * examining the link attributes in the following order:
2559 * 1. IFLA_NET_NS_PID
2561 * 3. IFLA_TARGET_NETNSID
2563 static struct net
*rtnl_link_get_net_by_nlattr(struct net
*src_net
,
2564 struct nlattr
*tb
[])
2568 if (tb
[IFLA_NET_NS_PID
] || tb
[IFLA_NET_NS_FD
])
2569 return rtnl_link_get_net(src_net
, tb
);
2571 if (!tb
[IFLA_TARGET_NETNSID
])
2572 return get_net(src_net
);
2574 net
= get_net_ns_by_id(src_net
, nla_get_u32(tb
[IFLA_TARGET_NETNSID
]));
2576 return ERR_PTR(-EINVAL
);
2581 static struct net
*rtnl_link_get_net_capable(const struct sk_buff
*skb
,
2582 struct net
*src_net
,
2583 struct nlattr
*tb
[], int cap
)
2587 net
= rtnl_link_get_net_by_nlattr(src_net
, tb
);
2591 if (!netlink_ns_capable(skb
, net
->user_ns
, cap
)) {
2593 return ERR_PTR(-EPERM
);
2599 /* Verify that rtnetlink requests do not pass additional properties
2600 * potentially referring to different network namespaces.
2602 static int rtnl_ensure_unique_netns(struct nlattr
*tb
[],
2603 struct netlink_ext_ack
*extack
,
2607 if (netns_id_only
) {
2608 if (!tb
[IFLA_NET_NS_PID
] && !tb
[IFLA_NET_NS_FD
])
2611 NL_SET_ERR_MSG(extack
, "specified netns attribute not supported");
2615 if (tb
[IFLA_TARGET_NETNSID
] && (tb
[IFLA_NET_NS_PID
] || tb
[IFLA_NET_NS_FD
]))
2618 if (tb
[IFLA_NET_NS_PID
] && (tb
[IFLA_TARGET_NETNSID
] || tb
[IFLA_NET_NS_FD
]))
2621 if (tb
[IFLA_NET_NS_FD
] && (tb
[IFLA_TARGET_NETNSID
] || tb
[IFLA_NET_NS_PID
]))
2627 NL_SET_ERR_MSG(extack
, "multiple netns identifying attributes specified");
2631 static int rtnl_set_vf_rate(struct net_device
*dev
, int vf
, int min_tx_rate
,
2634 const struct net_device_ops
*ops
= dev
->netdev_ops
;
2636 if (!ops
->ndo_set_vf_rate
)
2638 if (max_tx_rate
&& max_tx_rate
< min_tx_rate
)
2641 return ops
->ndo_set_vf_rate(dev
, vf
, min_tx_rate
, max_tx_rate
);
2644 static int validate_linkmsg(struct net_device
*dev
, struct nlattr
*tb
[],
2645 struct netlink_ext_ack
*extack
)
2647 if (tb
[IFLA_ADDRESS
] &&
2648 nla_len(tb
[IFLA_ADDRESS
]) < dev
->addr_len
)
2651 if (tb
[IFLA_BROADCAST
] &&
2652 nla_len(tb
[IFLA_BROADCAST
]) < dev
->addr_len
)
2655 if (tb
[IFLA_GSO_MAX_SIZE
] &&
2656 nla_get_u32(tb
[IFLA_GSO_MAX_SIZE
]) > dev
->tso_max_size
) {
2657 NL_SET_ERR_MSG(extack
, "too big gso_max_size");
2661 if (tb
[IFLA_GSO_MAX_SEGS
] &&
2662 (nla_get_u32(tb
[IFLA_GSO_MAX_SEGS
]) > GSO_MAX_SEGS
||
2663 nla_get_u32(tb
[IFLA_GSO_MAX_SEGS
]) > dev
->tso_max_segs
)) {
2664 NL_SET_ERR_MSG(extack
, "too big gso_max_segs");
2668 if (tb
[IFLA_GRO_MAX_SIZE
] &&
2669 nla_get_u32(tb
[IFLA_GRO_MAX_SIZE
]) > GRO_MAX_SIZE
) {
2670 NL_SET_ERR_MSG(extack
, "too big gro_max_size");
2674 if (tb
[IFLA_GSO_IPV4_MAX_SIZE
] &&
2675 nla_get_u32(tb
[IFLA_GSO_IPV4_MAX_SIZE
]) > dev
->tso_max_size
) {
2676 NL_SET_ERR_MSG(extack
, "too big gso_ipv4_max_size");
2680 if (tb
[IFLA_GRO_IPV4_MAX_SIZE
] &&
2681 nla_get_u32(tb
[IFLA_GRO_IPV4_MAX_SIZE
]) > GRO_MAX_SIZE
) {
2682 NL_SET_ERR_MSG(extack
, "too big gro_ipv4_max_size");
2686 if (tb
[IFLA_AF_SPEC
]) {
2690 nla_for_each_nested(af
, tb
[IFLA_AF_SPEC
], rem
) {
2691 struct rtnl_af_ops
*af_ops
;
2692 int af_ops_srcu_index
;
2694 af_ops
= rtnl_af_lookup(nla_type(af
), &af_ops_srcu_index
);
2696 return -EAFNOSUPPORT
;
2698 if (!af_ops
->set_link_af
)
2700 else if (af_ops
->validate_link_af
)
2701 err
= af_ops
->validate_link_af(dev
, af
, extack
);
2705 rtnl_af_put(af_ops
, af_ops_srcu_index
);
2715 static int handle_infiniband_guid(struct net_device
*dev
, struct ifla_vf_guid
*ivt
,
2718 const struct net_device_ops
*ops
= dev
->netdev_ops
;
2720 return ops
->ndo_set_vf_guid(dev
, ivt
->vf
, ivt
->guid
, guid_type
);
2723 static int handle_vf_guid(struct net_device
*dev
, struct ifla_vf_guid
*ivt
, int guid_type
)
2725 if (dev
->type
!= ARPHRD_INFINIBAND
)
2728 return handle_infiniband_guid(dev
, ivt
, guid_type
);
2731 static int do_setvfinfo(struct net_device
*dev
, struct nlattr
**tb
)
2733 const struct net_device_ops
*ops
= dev
->netdev_ops
;
2736 if (tb
[IFLA_VF_MAC
]) {
2737 struct ifla_vf_mac
*ivm
= nla_data(tb
[IFLA_VF_MAC
]);
2739 if (ivm
->vf
>= INT_MAX
)
2742 if (ops
->ndo_set_vf_mac
)
2743 err
= ops
->ndo_set_vf_mac(dev
, ivm
->vf
,
2749 if (tb
[IFLA_VF_VLAN
]) {
2750 struct ifla_vf_vlan
*ivv
= nla_data(tb
[IFLA_VF_VLAN
]);
2752 if (ivv
->vf
>= INT_MAX
)
2755 if (ops
->ndo_set_vf_vlan
)
2756 err
= ops
->ndo_set_vf_vlan(dev
, ivv
->vf
, ivv
->vlan
,
2758 htons(ETH_P_8021Q
));
2763 if (tb
[IFLA_VF_VLAN_LIST
]) {
2764 struct ifla_vf_vlan_info
*ivvl
[MAX_VLAN_LIST_LEN
];
2765 struct nlattr
*attr
;
2769 if (!ops
->ndo_set_vf_vlan
)
2772 nla_for_each_nested(attr
, tb
[IFLA_VF_VLAN_LIST
], rem
) {
2773 if (nla_type(attr
) != IFLA_VF_VLAN_INFO
||
2774 nla_len(attr
) < sizeof(struct ifla_vf_vlan_info
)) {
2777 if (len
>= MAX_VLAN_LIST_LEN
)
2779 ivvl
[len
] = nla_data(attr
);
2786 if (ivvl
[0]->vf
>= INT_MAX
)
2788 err
= ops
->ndo_set_vf_vlan(dev
, ivvl
[0]->vf
, ivvl
[0]->vlan
,
2789 ivvl
[0]->qos
, ivvl
[0]->vlan_proto
);
2794 if (tb
[IFLA_VF_TX_RATE
]) {
2795 struct ifla_vf_tx_rate
*ivt
= nla_data(tb
[IFLA_VF_TX_RATE
]);
2796 struct ifla_vf_info ivf
;
2798 if (ivt
->vf
>= INT_MAX
)
2801 if (ops
->ndo_get_vf_config
)
2802 err
= ops
->ndo_get_vf_config(dev
, ivt
->vf
, &ivf
);
2806 err
= rtnl_set_vf_rate(dev
, ivt
->vf
,
2807 ivf
.min_tx_rate
, ivt
->rate
);
2812 if (tb
[IFLA_VF_RATE
]) {
2813 struct ifla_vf_rate
*ivt
= nla_data(tb
[IFLA_VF_RATE
]);
2815 if (ivt
->vf
>= INT_MAX
)
2818 err
= rtnl_set_vf_rate(dev
, ivt
->vf
,
2819 ivt
->min_tx_rate
, ivt
->max_tx_rate
);
2824 if (tb
[IFLA_VF_SPOOFCHK
]) {
2825 struct ifla_vf_spoofchk
*ivs
= nla_data(tb
[IFLA_VF_SPOOFCHK
]);
2827 if (ivs
->vf
>= INT_MAX
)
2830 if (ops
->ndo_set_vf_spoofchk
)
2831 err
= ops
->ndo_set_vf_spoofchk(dev
, ivs
->vf
,
2837 if (tb
[IFLA_VF_LINK_STATE
]) {
2838 struct ifla_vf_link_state
*ivl
= nla_data(tb
[IFLA_VF_LINK_STATE
]);
2840 if (ivl
->vf
>= INT_MAX
)
2843 if (ops
->ndo_set_vf_link_state
)
2844 err
= ops
->ndo_set_vf_link_state(dev
, ivl
->vf
,
2850 if (tb
[IFLA_VF_RSS_QUERY_EN
]) {
2851 struct ifla_vf_rss_query_en
*ivrssq_en
;
2854 ivrssq_en
= nla_data(tb
[IFLA_VF_RSS_QUERY_EN
]);
2855 if (ivrssq_en
->vf
>= INT_MAX
)
2857 if (ops
->ndo_set_vf_rss_query_en
)
2858 err
= ops
->ndo_set_vf_rss_query_en(dev
, ivrssq_en
->vf
,
2859 ivrssq_en
->setting
);
2864 if (tb
[IFLA_VF_TRUST
]) {
2865 struct ifla_vf_trust
*ivt
= nla_data(tb
[IFLA_VF_TRUST
]);
2867 if (ivt
->vf
>= INT_MAX
)
2870 if (ops
->ndo_set_vf_trust
)
2871 err
= ops
->ndo_set_vf_trust(dev
, ivt
->vf
, ivt
->setting
);
2876 if (tb
[IFLA_VF_IB_NODE_GUID
]) {
2877 struct ifla_vf_guid
*ivt
= nla_data(tb
[IFLA_VF_IB_NODE_GUID
]);
2879 if (ivt
->vf
>= INT_MAX
)
2881 if (!ops
->ndo_set_vf_guid
)
2883 return handle_vf_guid(dev
, ivt
, IFLA_VF_IB_NODE_GUID
);
2886 if (tb
[IFLA_VF_IB_PORT_GUID
]) {
2887 struct ifla_vf_guid
*ivt
= nla_data(tb
[IFLA_VF_IB_PORT_GUID
]);
2889 if (ivt
->vf
>= INT_MAX
)
2891 if (!ops
->ndo_set_vf_guid
)
2894 return handle_vf_guid(dev
, ivt
, IFLA_VF_IB_PORT_GUID
);
2900 static int do_set_master(struct net_device
*dev
, int ifindex
,
2901 struct netlink_ext_ack
*extack
)
2903 struct net_device
*upper_dev
= netdev_master_upper_dev_get(dev
);
2904 const struct net_device_ops
*ops
;
2908 if (upper_dev
->ifindex
== ifindex
)
2910 ops
= upper_dev
->netdev_ops
;
2911 if (ops
->ndo_del_slave
) {
2912 err
= ops
->ndo_del_slave(upper_dev
, dev
);
2921 upper_dev
= __dev_get_by_index(dev_net(dev
), ifindex
);
2924 ops
= upper_dev
->netdev_ops
;
2925 if (ops
->ndo_add_slave
) {
2926 err
= ops
->ndo_add_slave(upper_dev
, dev
, extack
);
2936 static const struct nla_policy ifla_proto_down_reason_policy
[IFLA_PROTO_DOWN_REASON_VALUE
+ 1] = {
2937 [IFLA_PROTO_DOWN_REASON_MASK
] = { .type
= NLA_U32
},
2938 [IFLA_PROTO_DOWN_REASON_VALUE
] = { .type
= NLA_U32
},
2941 static int do_set_proto_down(struct net_device
*dev
,
2942 struct nlattr
*nl_proto_down
,
2943 struct nlattr
*nl_proto_down_reason
,
2944 struct netlink_ext_ack
*extack
)
2946 struct nlattr
*pdreason
[IFLA_PROTO_DOWN_REASON_MAX
+ 1];
2947 unsigned long mask
= 0;
2952 if (!dev
->change_proto_down
) {
2953 NL_SET_ERR_MSG(extack
, "Protodown not supported by device");
2957 if (nl_proto_down_reason
) {
2958 err
= nla_parse_nested_deprecated(pdreason
,
2959 IFLA_PROTO_DOWN_REASON_MAX
,
2960 nl_proto_down_reason
,
2961 ifla_proto_down_reason_policy
,
2966 if (!pdreason
[IFLA_PROTO_DOWN_REASON_VALUE
]) {
2967 NL_SET_ERR_MSG(extack
, "Invalid protodown reason value");
2971 value
= nla_get_u32(pdreason
[IFLA_PROTO_DOWN_REASON_VALUE
]);
2973 if (pdreason
[IFLA_PROTO_DOWN_REASON_MASK
])
2974 mask
= nla_get_u32(pdreason
[IFLA_PROTO_DOWN_REASON_MASK
]);
2976 dev_change_proto_down_reason(dev
, mask
, value
);
2979 if (nl_proto_down
) {
2980 proto_down
= nla_get_u8(nl_proto_down
);
2982 /* Don't turn off protodown if there are active reasons */
2983 if (!proto_down
&& dev
->proto_down_reason
) {
2984 NL_SET_ERR_MSG(extack
, "Cannot clear protodown, active reasons");
2987 err
= dev_change_proto_down(dev
,
2996 #define DO_SETLINK_MODIFIED 0x01
2997 /* notify flag means notify + modified. */
2998 #define DO_SETLINK_NOTIFY 0x03
2999 static int do_setlink(const struct sk_buff
*skb
, struct net_device
*dev
,
3000 struct net
*tgt_net
, struct ifinfomsg
*ifm
,
3001 struct netlink_ext_ack
*extack
,
3002 struct nlattr
**tb
, int status
)
3004 const struct net_device_ops
*ops
= dev
->netdev_ops
;
3005 char ifname
[IFNAMSIZ
];
3008 err
= validate_linkmsg(dev
, tb
, extack
);
3012 if (tb
[IFLA_IFNAME
])
3013 nla_strscpy(ifname
, tb
[IFLA_IFNAME
], IFNAMSIZ
);
3017 if (!net_eq(tgt_net
, dev_net(dev
))) {
3018 const char *pat
= ifname
[0] ? ifname
: NULL
;
3021 new_ifindex
= nla_get_s32_default(tb
[IFLA_NEW_IFINDEX
], 0);
3023 err
= __dev_change_net_namespace(dev
, tgt_net
, pat
, new_ifindex
);
3027 status
|= DO_SETLINK_MODIFIED
;
3031 struct rtnl_link_ifmap
*u_map
;
3034 if (!ops
->ndo_set_config
) {
3039 if (!netif_device_present(dev
)) {
3044 u_map
= nla_data(tb
[IFLA_MAP
]);
3045 k_map
.mem_start
= (unsigned long) u_map
->mem_start
;
3046 k_map
.mem_end
= (unsigned long) u_map
->mem_end
;
3047 k_map
.base_addr
= (unsigned short) u_map
->base_addr
;
3048 k_map
.irq
= (unsigned char) u_map
->irq
;
3049 k_map
.dma
= (unsigned char) u_map
->dma
;
3050 k_map
.port
= (unsigned char) u_map
->port
;
3052 err
= ops
->ndo_set_config(dev
, &k_map
);
3056 status
|= DO_SETLINK_NOTIFY
;
3059 if (tb
[IFLA_ADDRESS
]) {
3060 struct sockaddr
*sa
;
3063 len
= sizeof(sa_family_t
) + max_t(size_t, dev
->addr_len
,
3065 sa
= kmalloc(len
, GFP_KERNEL
);
3070 sa
->sa_family
= dev
->type
;
3071 memcpy(sa
->sa_data
, nla_data(tb
[IFLA_ADDRESS
]),
3073 err
= dev_set_mac_address_user(dev
, sa
, extack
);
3077 status
|= DO_SETLINK_MODIFIED
;
3081 err
= dev_set_mtu_ext(dev
, nla_get_u32(tb
[IFLA_MTU
]), extack
);
3084 status
|= DO_SETLINK_MODIFIED
;
3087 if (tb
[IFLA_GROUP
]) {
3088 dev_set_group(dev
, nla_get_u32(tb
[IFLA_GROUP
]));
3089 status
|= DO_SETLINK_NOTIFY
;
3093 * Interface selected by interface index but interface
3094 * name provided implies that a name change has been
3097 if (ifm
->ifi_index
> 0 && ifname
[0]) {
3098 err
= dev_change_name(dev
, ifname
);
3101 status
|= DO_SETLINK_MODIFIED
;
3104 if (tb
[IFLA_IFALIAS
]) {
3105 err
= dev_set_alias(dev
, nla_data(tb
[IFLA_IFALIAS
]),
3106 nla_len(tb
[IFLA_IFALIAS
]));
3109 status
|= DO_SETLINK_NOTIFY
;
3112 if (tb
[IFLA_BROADCAST
]) {
3113 nla_memcpy(dev
->broadcast
, tb
[IFLA_BROADCAST
], dev
->addr_len
);
3114 call_netdevice_notifiers(NETDEV_CHANGEADDR
, dev
);
3117 if (ifm
->ifi_flags
|| ifm
->ifi_change
) {
3118 err
= dev_change_flags(dev
, rtnl_dev_combine_flags(dev
, ifm
),
3124 if (tb
[IFLA_MASTER
]) {
3125 err
= do_set_master(dev
, nla_get_u32(tb
[IFLA_MASTER
]), extack
);
3128 status
|= DO_SETLINK_MODIFIED
;
3131 if (tb
[IFLA_CARRIER
]) {
3132 err
= dev_change_carrier(dev
, nla_get_u8(tb
[IFLA_CARRIER
]));
3135 status
|= DO_SETLINK_MODIFIED
;
3138 if (tb
[IFLA_TXQLEN
]) {
3139 unsigned int value
= nla_get_u32(tb
[IFLA_TXQLEN
]);
3141 err
= dev_change_tx_queue_len(dev
, value
);
3144 status
|= DO_SETLINK_MODIFIED
;
3147 if (tb
[IFLA_GSO_MAX_SIZE
]) {
3148 u32 max_size
= nla_get_u32(tb
[IFLA_GSO_MAX_SIZE
]);
3150 if (dev
->gso_max_size
^ max_size
) {
3151 netif_set_gso_max_size(dev
, max_size
);
3152 status
|= DO_SETLINK_MODIFIED
;
3156 if (tb
[IFLA_GSO_MAX_SEGS
]) {
3157 u32 max_segs
= nla_get_u32(tb
[IFLA_GSO_MAX_SEGS
]);
3159 if (dev
->gso_max_segs
^ max_segs
) {
3160 netif_set_gso_max_segs(dev
, max_segs
);
3161 status
|= DO_SETLINK_MODIFIED
;
3165 if (tb
[IFLA_GRO_MAX_SIZE
]) {
3166 u32 gro_max_size
= nla_get_u32(tb
[IFLA_GRO_MAX_SIZE
]);
3168 if (dev
->gro_max_size
^ gro_max_size
) {
3169 netif_set_gro_max_size(dev
, gro_max_size
);
3170 status
|= DO_SETLINK_MODIFIED
;
3174 if (tb
[IFLA_GSO_IPV4_MAX_SIZE
]) {
3175 u32 max_size
= nla_get_u32(tb
[IFLA_GSO_IPV4_MAX_SIZE
]);
3177 if (dev
->gso_ipv4_max_size
^ max_size
) {
3178 netif_set_gso_ipv4_max_size(dev
, max_size
);
3179 status
|= DO_SETLINK_MODIFIED
;
3183 if (tb
[IFLA_GRO_IPV4_MAX_SIZE
]) {
3184 u32 gro_max_size
= nla_get_u32(tb
[IFLA_GRO_IPV4_MAX_SIZE
]);
3186 if (dev
->gro_ipv4_max_size
^ gro_max_size
) {
3187 netif_set_gro_ipv4_max_size(dev
, gro_max_size
);
3188 status
|= DO_SETLINK_MODIFIED
;
3192 if (tb
[IFLA_OPERSTATE
])
3193 set_operstate(dev
, nla_get_u8(tb
[IFLA_OPERSTATE
]));
3195 if (tb
[IFLA_LINKMODE
]) {
3196 unsigned char value
= nla_get_u8(tb
[IFLA_LINKMODE
]);
3198 if (dev
->link_mode
^ value
)
3199 status
|= DO_SETLINK_NOTIFY
;
3200 WRITE_ONCE(dev
->link_mode
, value
);
3203 if (tb
[IFLA_VFINFO_LIST
]) {
3204 struct nlattr
*vfinfo
[IFLA_VF_MAX
+ 1];
3205 struct nlattr
*attr
;
3208 nla_for_each_nested(attr
, tb
[IFLA_VFINFO_LIST
], rem
) {
3209 if (nla_type(attr
) != IFLA_VF_INFO
||
3210 nla_len(attr
) < NLA_HDRLEN
) {
3214 err
= nla_parse_nested_deprecated(vfinfo
, IFLA_VF_MAX
,
3220 err
= do_setvfinfo(dev
, vfinfo
);
3223 status
|= DO_SETLINK_NOTIFY
;
3228 if (tb
[IFLA_VF_PORTS
]) {
3229 struct nlattr
*port
[IFLA_PORT_MAX
+1];
3230 struct nlattr
*attr
;
3235 if (!ops
->ndo_set_vf_port
)
3238 nla_for_each_nested(attr
, tb
[IFLA_VF_PORTS
], rem
) {
3239 if (nla_type(attr
) != IFLA_VF_PORT
||
3240 nla_len(attr
) < NLA_HDRLEN
) {
3244 err
= nla_parse_nested_deprecated(port
, IFLA_PORT_MAX
,
3250 if (!port
[IFLA_PORT_VF
]) {
3254 vf
= nla_get_u32(port
[IFLA_PORT_VF
]);
3255 err
= ops
->ndo_set_vf_port(dev
, vf
, port
);
3258 status
|= DO_SETLINK_NOTIFY
;
3263 if (tb
[IFLA_PORT_SELF
]) {
3264 struct nlattr
*port
[IFLA_PORT_MAX
+1];
3266 err
= nla_parse_nested_deprecated(port
, IFLA_PORT_MAX
,
3268 ifla_port_policy
, NULL
);
3273 if (ops
->ndo_set_vf_port
)
3274 err
= ops
->ndo_set_vf_port(dev
, PORT_SELF_VF
, port
);
3277 status
|= DO_SETLINK_NOTIFY
;
3280 if (tb
[IFLA_AF_SPEC
]) {
3284 nla_for_each_nested(af
, tb
[IFLA_AF_SPEC
], rem
) {
3285 struct rtnl_af_ops
*af_ops
;
3286 int af_ops_srcu_index
;
3288 af_ops
= rtnl_af_lookup(nla_type(af
), &af_ops_srcu_index
);
3290 err
= -EAFNOSUPPORT
;
3294 err
= af_ops
->set_link_af(dev
, af
, extack
);
3295 rtnl_af_put(af_ops
, af_ops_srcu_index
);
3300 status
|= DO_SETLINK_NOTIFY
;
3305 if (tb
[IFLA_PROTO_DOWN
] || tb
[IFLA_PROTO_DOWN_REASON
]) {
3306 err
= do_set_proto_down(dev
, tb
[IFLA_PROTO_DOWN
],
3307 tb
[IFLA_PROTO_DOWN_REASON
], extack
);
3310 status
|= DO_SETLINK_NOTIFY
;
3314 struct nlattr
*xdp
[IFLA_XDP_MAX
+ 1];
3317 err
= nla_parse_nested_deprecated(xdp
, IFLA_XDP_MAX
,
3319 ifla_xdp_policy
, NULL
);
3323 if (xdp
[IFLA_XDP_ATTACHED
] || xdp
[IFLA_XDP_PROG_ID
]) {
3328 if (xdp
[IFLA_XDP_FLAGS
]) {
3329 xdp_flags
= nla_get_u32(xdp
[IFLA_XDP_FLAGS
]);
3330 if (xdp_flags
& ~XDP_FLAGS_MASK
) {
3334 if (hweight32(xdp_flags
& XDP_FLAGS_MODES
) > 1) {
3340 if (xdp
[IFLA_XDP_FD
]) {
3341 int expected_fd
= -1;
3343 if (xdp_flags
& XDP_FLAGS_REPLACE
) {
3344 if (!xdp
[IFLA_XDP_EXPECTED_FD
]) {
3349 nla_get_s32(xdp
[IFLA_XDP_EXPECTED_FD
]);
3352 err
= dev_change_xdp_fd(dev
, extack
,
3353 nla_get_s32(xdp
[IFLA_XDP_FD
]),
3358 status
|= DO_SETLINK_NOTIFY
;
3363 if (status
& DO_SETLINK_MODIFIED
) {
3364 if ((status
& DO_SETLINK_NOTIFY
) == DO_SETLINK_NOTIFY
)
3365 netdev_state_change(dev
);
3368 net_warn_ratelimited("A link change request failed with some changes committed already. Interface %s may have been left with an inconsistent configuration, please check.\n",
3375 static struct net_device
*rtnl_dev_get(struct net
*net
,
3376 struct nlattr
*tb
[])
3378 char ifname
[ALTIFNAMSIZ
];
3380 if (tb
[IFLA_IFNAME
])
3381 nla_strscpy(ifname
, tb
[IFLA_IFNAME
], IFNAMSIZ
);
3382 else if (tb
[IFLA_ALT_IFNAME
])
3383 nla_strscpy(ifname
, tb
[IFLA_ALT_IFNAME
], ALTIFNAMSIZ
);
3387 return __dev_get_by_name(net
, ifname
);
3390 static int rtnl_setlink(struct sk_buff
*skb
, struct nlmsghdr
*nlh
,
3391 struct netlink_ext_ack
*extack
)
3393 struct ifinfomsg
*ifm
= nlmsg_data(nlh
);
3394 struct net
*net
= sock_net(skb
->sk
);
3395 struct nlattr
*tb
[IFLA_MAX
+1];
3396 struct net_device
*dev
= NULL
;
3397 struct rtnl_nets rtnl_nets
;
3398 struct net
*tgt_net
;
3401 err
= nlmsg_parse_deprecated(nlh
, sizeof(*ifm
), tb
, IFLA_MAX
,
3402 ifla_policy
, extack
);
3406 err
= rtnl_ensure_unique_netns(tb
, extack
, false);
3410 tgt_net
= rtnl_link_get_net_capable(skb
, net
, tb
, CAP_NET_ADMIN
);
3411 if (IS_ERR(tgt_net
)) {
3412 err
= PTR_ERR(tgt_net
);
3416 rtnl_nets_init(&rtnl_nets
);
3417 rtnl_nets_add(&rtnl_nets
, get_net(net
));
3418 rtnl_nets_add(&rtnl_nets
, tgt_net
);
3420 rtnl_nets_lock(&rtnl_nets
);
3422 if (ifm
->ifi_index
> 0)
3423 dev
= __dev_get_by_index(net
, ifm
->ifi_index
);
3424 else if (tb
[IFLA_IFNAME
] || tb
[IFLA_ALT_IFNAME
])
3425 dev
= rtnl_dev_get(net
, tb
);
3430 err
= do_setlink(skb
, dev
, tgt_net
, ifm
, extack
, tb
, 0);
3434 rtnl_nets_unlock(&rtnl_nets
);
3439 static int rtnl_group_dellink(const struct net
*net
, int group
)
3441 struct net_device
*dev
, *aux
;
3442 LIST_HEAD(list_kill
);
3448 for_each_netdev(net
, dev
) {
3449 if (dev
->group
== group
) {
3450 const struct rtnl_link_ops
*ops
;
3453 ops
= dev
->rtnl_link_ops
;
3454 if (!ops
|| !ops
->dellink
)
3462 for_each_netdev_safe(net
, dev
, aux
) {
3463 if (dev
->group
== group
) {
3464 const struct rtnl_link_ops
*ops
;
3466 ops
= dev
->rtnl_link_ops
;
3467 ops
->dellink(dev
, &list_kill
);
3470 unregister_netdevice_many(&list_kill
);
3475 int rtnl_delete_link(struct net_device
*dev
, u32 portid
, const struct nlmsghdr
*nlh
)
3477 const struct rtnl_link_ops
*ops
;
3478 LIST_HEAD(list_kill
);
3480 ops
= dev
->rtnl_link_ops
;
3481 if (!ops
|| !ops
->dellink
)
3484 ops
->dellink(dev
, &list_kill
);
3485 unregister_netdevice_many_notify(&list_kill
, portid
, nlh
);
3489 EXPORT_SYMBOL_GPL(rtnl_delete_link
);
3491 static int rtnl_dellink(struct sk_buff
*skb
, struct nlmsghdr
*nlh
,
3492 struct netlink_ext_ack
*extack
)
3494 struct ifinfomsg
*ifm
= nlmsg_data(nlh
);
3495 struct net
*net
= sock_net(skb
->sk
);
3496 u32 portid
= NETLINK_CB(skb
).portid
;
3497 struct nlattr
*tb
[IFLA_MAX
+1];
3498 struct net_device
*dev
= NULL
;
3499 struct net
*tgt_net
= net
;
3503 err
= nlmsg_parse_deprecated(nlh
, sizeof(*ifm
), tb
, IFLA_MAX
,
3504 ifla_policy
, extack
);
3508 err
= rtnl_ensure_unique_netns(tb
, extack
, true);
3512 if (tb
[IFLA_TARGET_NETNSID
]) {
3513 netnsid
= nla_get_s32(tb
[IFLA_TARGET_NETNSID
]);
3514 tgt_net
= rtnl_get_net_ns_capable(NETLINK_CB(skb
).sk
, netnsid
);
3515 if (IS_ERR(tgt_net
))
3516 return PTR_ERR(tgt_net
);
3519 rtnl_net_lock(tgt_net
);
3521 if (ifm
->ifi_index
> 0)
3522 dev
= __dev_get_by_index(tgt_net
, ifm
->ifi_index
);
3523 else if (tb
[IFLA_IFNAME
] || tb
[IFLA_ALT_IFNAME
])
3524 dev
= rtnl_dev_get(tgt_net
, tb
);
3527 err
= rtnl_delete_link(dev
, portid
, nlh
);
3528 else if (ifm
->ifi_index
> 0 || tb
[IFLA_IFNAME
] || tb
[IFLA_ALT_IFNAME
])
3530 else if (tb
[IFLA_GROUP
])
3531 err
= rtnl_group_dellink(tgt_net
, nla_get_u32(tb
[IFLA_GROUP
]));
3535 rtnl_net_unlock(tgt_net
);
3543 int rtnl_configure_link(struct net_device
*dev
, const struct ifinfomsg
*ifm
,
3544 u32 portid
, const struct nlmsghdr
*nlh
)
3546 unsigned int old_flags
;
3549 old_flags
= dev
->flags
;
3550 if (ifm
&& (ifm
->ifi_flags
|| ifm
->ifi_change
)) {
3551 err
= __dev_change_flags(dev
, rtnl_dev_combine_flags(dev
, ifm
),
3557 if (dev
->rtnl_link_state
== RTNL_LINK_INITIALIZED
) {
3558 __dev_notify_flags(dev
, old_flags
, (old_flags
^ dev
->flags
), portid
, nlh
);
3560 dev
->rtnl_link_state
= RTNL_LINK_INITIALIZED
;
3561 __dev_notify_flags(dev
, old_flags
, ~0U, portid
, nlh
);
3565 EXPORT_SYMBOL(rtnl_configure_link
);
3567 struct net_device
*rtnl_create_link(struct net
*net
, const char *ifname
,
3568 unsigned char name_assign_type
,
3569 const struct rtnl_link_ops
*ops
,
3570 struct nlattr
*tb
[],
3571 struct netlink_ext_ack
*extack
)
3573 struct net_device
*dev
;
3574 unsigned int num_tx_queues
= 1;
3575 unsigned int num_rx_queues
= 1;
3578 if (tb
[IFLA_NUM_TX_QUEUES
])
3579 num_tx_queues
= nla_get_u32(tb
[IFLA_NUM_TX_QUEUES
]);
3580 else if (ops
->get_num_tx_queues
)
3581 num_tx_queues
= ops
->get_num_tx_queues();
3583 if (tb
[IFLA_NUM_RX_QUEUES
])
3584 num_rx_queues
= nla_get_u32(tb
[IFLA_NUM_RX_QUEUES
]);
3585 else if (ops
->get_num_rx_queues
)
3586 num_rx_queues
= ops
->get_num_rx_queues();
3588 if (num_tx_queues
< 1 || num_tx_queues
> 4096) {
3589 NL_SET_ERR_MSG(extack
, "Invalid number of transmit queues");
3590 return ERR_PTR(-EINVAL
);
3593 if (num_rx_queues
< 1 || num_rx_queues
> 4096) {
3594 NL_SET_ERR_MSG(extack
, "Invalid number of receive queues");
3595 return ERR_PTR(-EINVAL
);
3599 dev
= ops
->alloc(tb
, ifname
, name_assign_type
,
3600 num_tx_queues
, num_rx_queues
);
3604 dev
= alloc_netdev_mqs(ops
->priv_size
, ifname
,
3605 name_assign_type
, ops
->setup
,
3606 num_tx_queues
, num_rx_queues
);
3610 return ERR_PTR(-ENOMEM
);
3612 err
= validate_linkmsg(dev
, tb
, extack
);
3615 return ERR_PTR(err
);
3618 dev_net_set(dev
, net
);
3619 dev
->rtnl_link_ops
= ops
;
3620 dev
->rtnl_link_state
= RTNL_LINK_INITIALIZING
;
3623 u32 mtu
= nla_get_u32(tb
[IFLA_MTU
]);
3625 err
= dev_validate_mtu(dev
, mtu
, extack
);
3628 return ERR_PTR(err
);
3632 if (tb
[IFLA_ADDRESS
]) {
3633 __dev_addr_set(dev
, nla_data(tb
[IFLA_ADDRESS
]),
3634 nla_len(tb
[IFLA_ADDRESS
]));
3635 dev
->addr_assign_type
= NET_ADDR_SET
;
3637 if (tb
[IFLA_BROADCAST
])
3638 memcpy(dev
->broadcast
, nla_data(tb
[IFLA_BROADCAST
]),
3639 nla_len(tb
[IFLA_BROADCAST
]));
3640 if (tb
[IFLA_TXQLEN
])
3641 dev
->tx_queue_len
= nla_get_u32(tb
[IFLA_TXQLEN
]);
3642 if (tb
[IFLA_OPERSTATE
])
3643 set_operstate(dev
, nla_get_u8(tb
[IFLA_OPERSTATE
]));
3644 if (tb
[IFLA_LINKMODE
])
3645 dev
->link_mode
= nla_get_u8(tb
[IFLA_LINKMODE
]);
3647 dev_set_group(dev
, nla_get_u32(tb
[IFLA_GROUP
]));
3648 if (tb
[IFLA_GSO_MAX_SIZE
])
3649 netif_set_gso_max_size(dev
, nla_get_u32(tb
[IFLA_GSO_MAX_SIZE
]));
3650 if (tb
[IFLA_GSO_MAX_SEGS
])
3651 netif_set_gso_max_segs(dev
, nla_get_u32(tb
[IFLA_GSO_MAX_SEGS
]));
3652 if (tb
[IFLA_GRO_MAX_SIZE
])
3653 netif_set_gro_max_size(dev
, nla_get_u32(tb
[IFLA_GRO_MAX_SIZE
]));
3654 if (tb
[IFLA_GSO_IPV4_MAX_SIZE
])
3655 netif_set_gso_ipv4_max_size(dev
, nla_get_u32(tb
[IFLA_GSO_IPV4_MAX_SIZE
]));
3656 if (tb
[IFLA_GRO_IPV4_MAX_SIZE
])
3657 netif_set_gro_ipv4_max_size(dev
, nla_get_u32(tb
[IFLA_GRO_IPV4_MAX_SIZE
]));
3661 EXPORT_SYMBOL(rtnl_create_link
);
3663 struct rtnl_newlink_tbs
{
3664 struct nlattr
*tb
[IFLA_MAX
+ 1];
3665 struct nlattr
*linkinfo
[IFLA_INFO_MAX
+ 1];
3666 struct nlattr
*attr
[RTNL_MAX_TYPE
+ 1];
3667 struct nlattr
*slave_attr
[RTNL_SLAVE_MAX_TYPE
+ 1];
3670 static int rtnl_changelink(const struct sk_buff
*skb
, struct nlmsghdr
*nlh
,
3671 const struct rtnl_link_ops
*ops
,
3672 struct net_device
*dev
, struct net
*tgt_net
,
3673 struct rtnl_newlink_tbs
*tbs
,
3674 struct nlattr
**data
,
3675 struct netlink_ext_ack
*extack
)
3677 struct nlattr
** const linkinfo
= tbs
->linkinfo
;
3678 struct nlattr
** const tb
= tbs
->tb
;
3682 if (nlh
->nlmsg_flags
& NLM_F_EXCL
)
3685 if (nlh
->nlmsg_flags
& NLM_F_REPLACE
)
3688 if (linkinfo
[IFLA_INFO_DATA
]) {
3689 if (!ops
|| ops
!= dev
->rtnl_link_ops
|| !ops
->changelink
)
3692 err
= ops
->changelink(dev
, tb
, data
, extack
);
3696 status
|= DO_SETLINK_NOTIFY
;
3699 if (linkinfo
[IFLA_INFO_SLAVE_DATA
]) {
3700 const struct rtnl_link_ops
*m_ops
= NULL
;
3701 struct nlattr
**slave_data
= NULL
;
3702 struct net_device
*master_dev
;
3704 master_dev
= netdev_master_upper_dev_get(dev
);
3706 m_ops
= master_dev
->rtnl_link_ops
;
3708 if (!m_ops
|| !m_ops
->slave_changelink
)
3711 if (m_ops
->slave_maxtype
> RTNL_SLAVE_MAX_TYPE
)
3714 if (m_ops
->slave_maxtype
) {
3715 err
= nla_parse_nested_deprecated(tbs
->slave_attr
,
3716 m_ops
->slave_maxtype
,
3717 linkinfo
[IFLA_INFO_SLAVE_DATA
],
3718 m_ops
->slave_policy
, extack
);
3722 slave_data
= tbs
->slave_attr
;
3725 err
= m_ops
->slave_changelink(master_dev
, dev
, tb
, slave_data
, extack
);
3729 status
|= DO_SETLINK_NOTIFY
;
3732 return do_setlink(skb
, dev
, tgt_net
, nlmsg_data(nlh
), extack
, tb
, status
);
3735 static int rtnl_group_changelink(const struct sk_buff
*skb
,
3736 struct net
*net
, struct net
*tgt_net
,
3737 int group
, struct ifinfomsg
*ifm
,
3738 struct netlink_ext_ack
*extack
,
3741 struct net_device
*dev
, *aux
;
3744 for_each_netdev_safe(net
, dev
, aux
) {
3745 if (dev
->group
== group
) {
3746 err
= do_setlink(skb
, dev
, tgt_net
, ifm
, extack
, tb
, 0);
3755 static int rtnl_newlink_create(struct sk_buff
*skb
, struct ifinfomsg
*ifm
,
3756 const struct rtnl_link_ops
*ops
,
3757 struct net
*tgt_net
, struct net
*link_net
,
3758 struct net
*peer_net
,
3759 const struct nlmsghdr
*nlh
,
3760 struct nlattr
**tb
, struct nlattr
**data
,
3761 struct netlink_ext_ack
*extack
)
3763 unsigned char name_assign_type
= NET_NAME_USER
;
3764 struct net
*net
= sock_net(skb
->sk
);
3765 u32 portid
= NETLINK_CB(skb
).portid
;
3766 struct net_device
*dev
;
3767 char ifname
[IFNAMSIZ
];
3770 if (!ops
->alloc
&& !ops
->setup
)
3773 if (tb
[IFLA_IFNAME
]) {
3774 nla_strscpy(ifname
, tb
[IFLA_IFNAME
], IFNAMSIZ
);
3776 snprintf(ifname
, IFNAMSIZ
, "%s%%d", ops
->kind
);
3777 name_assign_type
= NET_NAME_ENUM
;
3780 dev
= rtnl_create_link(link_net
? : tgt_net
, ifname
,
3781 name_assign_type
, ops
, tb
, extack
);
3787 dev
->ifindex
= ifm
->ifi_index
;
3795 err
= ops
->newlink(net
, dev
, tb
, data
, extack
);
3797 err
= register_netdevice(dev
);
3803 err
= rtnl_configure_link(dev
, ifm
, portid
, nlh
);
3805 goto out_unregister
;
3807 err
= dev_change_net_namespace(dev
, tgt_net
, ifname
);
3809 goto out_unregister
;
3811 if (tb
[IFLA_MASTER
]) {
3812 err
= do_set_master(dev
, nla_get_u32(tb
[IFLA_MASTER
]), extack
);
3814 goto out_unregister
;
3820 LIST_HEAD(list_kill
);
3822 ops
->dellink(dev
, &list_kill
);
3823 unregister_netdevice_many(&list_kill
);
3825 unregister_netdevice(dev
);
3830 static struct net
*rtnl_get_peer_net(const struct rtnl_link_ops
*ops
,
3831 struct nlattr
*tbp
[],
3832 struct nlattr
*data
[],
3833 struct netlink_ext_ack
*extack
)
3835 struct nlattr
*tb
[IFLA_MAX
+ 1];
3838 if (!data
|| !data
[ops
->peer_type
])
3839 return rtnl_link_get_net_ifla(tbp
);
3841 err
= rtnl_nla_parse_ifinfomsg(tb
, data
[ops
->peer_type
], extack
);
3843 return ERR_PTR(err
);
3845 if (ops
->validate
) {
3846 err
= ops
->validate(tb
, NULL
, extack
);
3848 return ERR_PTR(err
);
3851 return rtnl_link_get_net_ifla(tb
);
3854 static int __rtnl_newlink(struct sk_buff
*skb
, struct nlmsghdr
*nlh
,
3855 const struct rtnl_link_ops
*ops
,
3856 struct net
*tgt_net
, struct net
*link_net
,
3857 struct net
*peer_net
,
3858 struct rtnl_newlink_tbs
*tbs
,
3859 struct nlattr
**data
,
3860 struct netlink_ext_ack
*extack
)
3862 struct nlattr
** const tb
= tbs
->tb
;
3863 struct net
*net
= sock_net(skb
->sk
);
3864 struct net_device
*dev
;
3865 struct ifinfomsg
*ifm
;
3866 bool link_specified
;
3868 ifm
= nlmsg_data(nlh
);
3869 if (ifm
->ifi_index
> 0) {
3870 link_specified
= true;
3871 dev
= __dev_get_by_index(net
, ifm
->ifi_index
);
3872 } else if (ifm
->ifi_index
< 0) {
3873 NL_SET_ERR_MSG(extack
, "ifindex can't be negative");
3875 } else if (tb
[IFLA_IFNAME
] || tb
[IFLA_ALT_IFNAME
]) {
3876 link_specified
= true;
3877 dev
= rtnl_dev_get(net
, tb
);
3879 link_specified
= false;
3884 return rtnl_changelink(skb
, nlh
, ops
, dev
, tgt_net
, tbs
, data
, extack
);
3886 if (!(nlh
->nlmsg_flags
& NLM_F_CREATE
)) {
3887 /* No dev found and NLM_F_CREATE not set. Requested dev does not exist,
3888 * or it's for a group
3890 if (link_specified
|| !tb
[IFLA_GROUP
])
3893 return rtnl_group_changelink(skb
, net
, tgt_net
,
3894 nla_get_u32(tb
[IFLA_GROUP
]),
3898 if (tb
[IFLA_MAP
] || tb
[IFLA_PROTINFO
])
3902 NL_SET_ERR_MSG(extack
, "Unknown device type");
3906 return rtnl_newlink_create(skb
, ifm
, ops
, tgt_net
, link_net
, peer_net
, nlh
,
3910 static int rtnl_newlink(struct sk_buff
*skb
, struct nlmsghdr
*nlh
,
3911 struct netlink_ext_ack
*extack
)
3913 struct net
*tgt_net
, *link_net
= NULL
, *peer_net
= NULL
;
3914 struct nlattr
**tb
, **linkinfo
, **data
= NULL
;
3915 struct rtnl_link_ops
*ops
= NULL
;
3916 struct rtnl_newlink_tbs
*tbs
;
3917 struct rtnl_nets rtnl_nets
;
3921 tbs
= kmalloc(sizeof(*tbs
), GFP_KERNEL
);
3926 ret
= nlmsg_parse_deprecated(nlh
, sizeof(struct ifinfomsg
), tb
,
3927 IFLA_MAX
, ifla_policy
, extack
);
3931 ret
= rtnl_ensure_unique_netns(tb
, extack
, false);
3935 linkinfo
= tbs
->linkinfo
;
3936 if (tb
[IFLA_LINKINFO
]) {
3937 ret
= nla_parse_nested_deprecated(linkinfo
, IFLA_INFO_MAX
,
3939 ifla_info_policy
, NULL
);
3943 memset(linkinfo
, 0, sizeof(tbs
->linkinfo
));
3946 if (linkinfo
[IFLA_INFO_KIND
]) {
3947 char kind
[MODULE_NAME_LEN
];
3949 nla_strscpy(kind
, linkinfo
[IFLA_INFO_KIND
], sizeof(kind
));
3950 ops
= rtnl_link_ops_get(kind
, &ops_srcu_index
);
3951 #ifdef CONFIG_MODULES
3953 request_module("rtnl-link-%s", kind
);
3954 ops
= rtnl_link_ops_get(kind
, &ops_srcu_index
);
3959 rtnl_nets_init(&rtnl_nets
);
3962 if (ops
->maxtype
> RTNL_MAX_TYPE
) {
3967 if (ops
->maxtype
&& linkinfo
[IFLA_INFO_DATA
]) {
3968 ret
= nla_parse_nested_deprecated(tbs
->attr
, ops
->maxtype
,
3969 linkinfo
[IFLA_INFO_DATA
],
3970 ops
->policy
, extack
);
3977 if (ops
->validate
) {
3978 ret
= ops
->validate(tb
, data
, extack
);
3983 if (ops
->peer_type
) {
3984 peer_net
= rtnl_get_peer_net(ops
, tb
, data
, extack
);
3985 if (IS_ERR(peer_net
)) {
3986 ret
= PTR_ERR(peer_net
);
3990 rtnl_nets_add(&rtnl_nets
, peer_net
);
3994 tgt_net
= rtnl_link_get_net_capable(skb
, sock_net(skb
->sk
), tb
, CAP_NET_ADMIN
);
3995 if (IS_ERR(tgt_net
)) {
3996 ret
= PTR_ERR(tgt_net
);
4000 rtnl_nets_add(&rtnl_nets
, tgt_net
);
4002 if (tb
[IFLA_LINK_NETNSID
]) {
4003 int id
= nla_get_s32(tb
[IFLA_LINK_NETNSID
]);
4005 link_net
= get_net_ns_by_id(tgt_net
, id
);
4007 NL_SET_ERR_MSG(extack
, "Unknown network namespace id");
4012 rtnl_nets_add(&rtnl_nets
, link_net
);
4014 if (!netlink_ns_capable(skb
, link_net
->user_ns
, CAP_NET_ADMIN
)) {
4020 rtnl_nets_lock(&rtnl_nets
);
4021 ret
= __rtnl_newlink(skb
, nlh
, ops
, tgt_net
, link_net
, peer_net
, tbs
, data
, extack
);
4022 rtnl_nets_unlock(&rtnl_nets
);
4025 rtnl_nets_destroy(&rtnl_nets
);
4028 rtnl_link_ops_put(ops
, ops_srcu_index
);
4034 static int rtnl_valid_getlink_req(struct sk_buff
*skb
,
4035 const struct nlmsghdr
*nlh
,
4037 struct netlink_ext_ack
*extack
)
4039 struct ifinfomsg
*ifm
;
4042 if (nlh
->nlmsg_len
< nlmsg_msg_size(sizeof(*ifm
))) {
4043 NL_SET_ERR_MSG(extack
, "Invalid header for get link");
4047 if (!netlink_strict_get_check(skb
))
4048 return nlmsg_parse_deprecated(nlh
, sizeof(*ifm
), tb
, IFLA_MAX
,
4049 ifla_policy
, extack
);
4051 ifm
= nlmsg_data(nlh
);
4052 if (ifm
->__ifi_pad
|| ifm
->ifi_type
|| ifm
->ifi_flags
||
4054 NL_SET_ERR_MSG(extack
, "Invalid values in header for get link request");
4058 err
= nlmsg_parse_deprecated_strict(nlh
, sizeof(*ifm
), tb
, IFLA_MAX
,
4059 ifla_policy
, extack
);
4063 for (i
= 0; i
<= IFLA_MAX
; i
++) {
4069 case IFLA_ALT_IFNAME
:
4071 case IFLA_TARGET_NETNSID
:
4074 NL_SET_ERR_MSG(extack
, "Unsupported attribute in get link request");
4082 static int rtnl_getlink(struct sk_buff
*skb
, struct nlmsghdr
*nlh
,
4083 struct netlink_ext_ack
*extack
)
4085 struct net
*net
= sock_net(skb
->sk
);
4086 struct net
*tgt_net
= net
;
4087 struct ifinfomsg
*ifm
;
4088 struct nlattr
*tb
[IFLA_MAX
+1];
4089 struct net_device
*dev
= NULL
;
4090 struct sk_buff
*nskb
;
4093 u32 ext_filter_mask
= 0;
4095 err
= rtnl_valid_getlink_req(skb
, nlh
, tb
, extack
);
4099 err
= rtnl_ensure_unique_netns(tb
, extack
, true);
4103 if (tb
[IFLA_TARGET_NETNSID
]) {
4104 netnsid
= nla_get_s32(tb
[IFLA_TARGET_NETNSID
]);
4105 tgt_net
= rtnl_get_net_ns_capable(NETLINK_CB(skb
).sk
, netnsid
);
4106 if (IS_ERR(tgt_net
))
4107 return PTR_ERR(tgt_net
);
4110 if (tb
[IFLA_EXT_MASK
])
4111 ext_filter_mask
= nla_get_u32(tb
[IFLA_EXT_MASK
]);
4114 ifm
= nlmsg_data(nlh
);
4115 if (ifm
->ifi_index
> 0)
4116 dev
= __dev_get_by_index(tgt_net
, ifm
->ifi_index
);
4117 else if (tb
[IFLA_IFNAME
] || tb
[IFLA_ALT_IFNAME
])
4118 dev
= rtnl_dev_get(tgt_net
, tb
);
4127 nskb
= nlmsg_new_large(if_nlmsg_size(dev
, ext_filter_mask
));
4131 /* Synchronize the carrier state so we don't report a state
4132 * that we're not actually going to honour immediately; if
4133 * the driver just did a carrier off->on transition, we can
4134 * only TX if link watch work has run, but without this we'd
4135 * already report carrier on, even if it doesn't work yet.
4137 linkwatch_sync_dev(dev
);
4139 err
= rtnl_fill_ifinfo(nskb
, dev
, net
,
4140 RTM_NEWLINK
, NETLINK_CB(skb
).portid
,
4141 nlh
->nlmsg_seq
, 0, 0, ext_filter_mask
,
4142 0, NULL
, 0, netnsid
, GFP_KERNEL
);
4144 /* -EMSGSIZE implies BUG in if_nlmsg_size */
4145 WARN_ON(err
== -EMSGSIZE
);
4148 err
= rtnl_unicast(nskb
, net
, NETLINK_CB(skb
).portid
);
4156 static int rtnl_alt_ifname(int cmd
, struct net_device
*dev
, struct nlattr
*attr
,
4157 bool *changed
, struct netlink_ext_ack
*extack
)
4163 err
= nla_validate(attr
, attr
->nla_len
, IFLA_MAX
, ifla_policy
, extack
);
4167 if (cmd
== RTM_NEWLINKPROP
) {
4168 size
= rtnl_prop_list_size(dev
);
4169 size
+= nla_total_size(ALTIFNAMSIZ
);
4170 if (size
>= U16_MAX
) {
4171 NL_SET_ERR_MSG(extack
,
4172 "effective property list too long");
4177 alt_ifname
= nla_strdup(attr
, GFP_KERNEL_ACCOUNT
);
4181 if (cmd
== RTM_NEWLINKPROP
) {
4182 err
= netdev_name_node_alt_create(dev
, alt_ifname
);
4185 } else if (cmd
== RTM_DELLINKPROP
) {
4186 err
= netdev_name_node_alt_destroy(dev
, alt_ifname
);
4198 static int rtnl_linkprop(int cmd
, struct sk_buff
*skb
, struct nlmsghdr
*nlh
,
4199 struct netlink_ext_ack
*extack
)
4201 struct net
*net
= sock_net(skb
->sk
);
4202 struct nlattr
*tb
[IFLA_MAX
+ 1];
4203 struct net_device
*dev
;
4204 struct ifinfomsg
*ifm
;
4205 bool changed
= false;
4206 struct nlattr
*attr
;
4209 err
= nlmsg_parse(nlh
, sizeof(*ifm
), tb
, IFLA_MAX
, ifla_policy
, extack
);
4213 err
= rtnl_ensure_unique_netns(tb
, extack
, true);
4217 ifm
= nlmsg_data(nlh
);
4218 if (ifm
->ifi_index
> 0)
4219 dev
= __dev_get_by_index(net
, ifm
->ifi_index
);
4220 else if (tb
[IFLA_IFNAME
] || tb
[IFLA_ALT_IFNAME
])
4221 dev
= rtnl_dev_get(net
, tb
);
4228 if (!tb
[IFLA_PROP_LIST
])
4231 nla_for_each_nested(attr
, tb
[IFLA_PROP_LIST
], rem
) {
4232 switch (nla_type(attr
)) {
4233 case IFLA_ALT_IFNAME
:
4234 err
= rtnl_alt_ifname(cmd
, dev
, attr
, &changed
, extack
);
4242 netdev_state_change(dev
);
4246 static int rtnl_newlinkprop(struct sk_buff
*skb
, struct nlmsghdr
*nlh
,
4247 struct netlink_ext_ack
*extack
)
4249 return rtnl_linkprop(RTM_NEWLINKPROP
, skb
, nlh
, extack
);
4252 static int rtnl_dellinkprop(struct sk_buff
*skb
, struct nlmsghdr
*nlh
,
4253 struct netlink_ext_ack
*extack
)
4255 return rtnl_linkprop(RTM_DELLINKPROP
, skb
, nlh
, extack
);
4258 static noinline_for_stack u32
rtnl_calcit(struct sk_buff
*skb
,
4259 struct nlmsghdr
*nlh
)
4261 struct net
*net
= sock_net(skb
->sk
);
4262 size_t min_ifinfo_dump_size
= 0;
4263 u32 ext_filter_mask
= 0;
4264 struct net_device
*dev
;
4268 /* Same kernel<->userspace interface hack as in rtnl_dump_ifinfo. */
4269 hdrlen
= nlmsg_len(nlh
) < sizeof(struct ifinfomsg
) ?
4270 sizeof(struct rtgenmsg
) : sizeof(struct ifinfomsg
);
4272 if (nlh
->nlmsg_len
< nlmsg_msg_size(hdrlen
))
4273 return NLMSG_GOODSIZE
;
4275 nla_for_each_attr_type(nla
, IFLA_EXT_MASK
,
4276 nlmsg_attrdata(nlh
, hdrlen
),
4277 nlmsg_attrlen(nlh
, hdrlen
), rem
) {
4278 if (nla_len(nla
) == sizeof(u32
))
4279 ext_filter_mask
= nla_get_u32(nla
);
4282 if (!ext_filter_mask
)
4283 return NLMSG_GOODSIZE
;
4285 * traverse the list of net devices and compute the minimum
4286 * buffer size based upon the filter mask.
4289 for_each_netdev_rcu(net
, dev
) {
4290 min_ifinfo_dump_size
= max(min_ifinfo_dump_size
,
4291 if_nlmsg_size(dev
, ext_filter_mask
));
4295 return nlmsg_total_size(min_ifinfo_dump_size
);
4298 static int rtnl_dump_all(struct sk_buff
*skb
, struct netlink_callback
*cb
)
4301 int s_idx
= cb
->family
;
4302 int type
= cb
->nlh
->nlmsg_type
- RTM_BASE
;
4308 for (idx
= 1; idx
<= RTNL_FAMILY_MAX
; idx
++) {
4309 struct rtnl_link __rcu
**tab
;
4310 struct rtnl_link
*link
;
4311 rtnl_dumpit_func dumpit
;
4313 if (idx
< s_idx
|| idx
== PF_PACKET
)
4316 if (type
< 0 || type
>= RTM_NR_MSGTYPES
)
4319 tab
= rcu_dereference_rtnl(rtnl_msg_handlers
[idx
]);
4323 link
= rcu_dereference_rtnl(tab
[type
]);
4327 dumpit
= link
->dumpit
;
4332 memset(&cb
->args
[0], 0, sizeof(cb
->args
));
4336 ret
= dumpit(skb
, cb
);
4342 return skb
->len
? : ret
;
4345 struct sk_buff
*rtmsg_ifinfo_build_skb(int type
, struct net_device
*dev
,
4346 unsigned int change
,
4347 u32 event
, gfp_t flags
, int *new_nsid
,
4348 int new_ifindex
, u32 portid
,
4349 const struct nlmsghdr
*nlh
)
4351 struct net
*net
= dev_net(dev
);
4352 struct sk_buff
*skb
;
4356 skb
= nlmsg_new(if_nlmsg_size(dev
, 0), flags
);
4360 if (nlmsg_report(nlh
))
4361 seq
= nlmsg_seq(nlh
);
4365 err
= rtnl_fill_ifinfo(skb
, dev
, dev_net(dev
),
4366 type
, portid
, seq
, change
, 0, 0, event
,
4367 new_nsid
, new_ifindex
, -1, flags
);
4369 /* -EMSGSIZE implies BUG in if_nlmsg_size() */
4370 WARN_ON(err
== -EMSGSIZE
);
4376 rtnl_set_sk_err(net
, RTNLGRP_LINK
, err
);
4380 void rtmsg_ifinfo_send(struct sk_buff
*skb
, struct net_device
*dev
, gfp_t flags
,
4381 u32 portid
, const struct nlmsghdr
*nlh
)
4383 struct net
*net
= dev_net(dev
);
4385 rtnl_notify(skb
, net
, portid
, RTNLGRP_LINK
, nlh
, flags
);
4388 static void rtmsg_ifinfo_event(int type
, struct net_device
*dev
,
4389 unsigned int change
, u32 event
,
4390 gfp_t flags
, int *new_nsid
, int new_ifindex
,
4391 u32 portid
, const struct nlmsghdr
*nlh
)
4393 struct sk_buff
*skb
;
4395 if (dev
->reg_state
!= NETREG_REGISTERED
)
4398 skb
= rtmsg_ifinfo_build_skb(type
, dev
, change
, event
, flags
, new_nsid
,
4399 new_ifindex
, portid
, nlh
);
4401 rtmsg_ifinfo_send(skb
, dev
, flags
, portid
, nlh
);
4404 void rtmsg_ifinfo(int type
, struct net_device
*dev
, unsigned int change
,
4405 gfp_t flags
, u32 portid
, const struct nlmsghdr
*nlh
)
4407 rtmsg_ifinfo_event(type
, dev
, change
, rtnl_get_event(0), flags
,
4408 NULL
, 0, portid
, nlh
);
4411 void rtmsg_ifinfo_newnet(int type
, struct net_device
*dev
, unsigned int change
,
4412 gfp_t flags
, int *new_nsid
, int new_ifindex
)
4414 rtmsg_ifinfo_event(type
, dev
, change
, rtnl_get_event(0), flags
,
4415 new_nsid
, new_ifindex
, 0, NULL
);
4418 static int nlmsg_populate_fdb_fill(struct sk_buff
*skb
,
4419 struct net_device
*dev
,
4420 u8
*addr
, u16 vid
, u32 pid
, u32 seq
,
4421 int type
, unsigned int flags
,
4422 int nlflags
, u16 ndm_state
)
4424 struct nlmsghdr
*nlh
;
4427 nlh
= nlmsg_put(skb
, pid
, seq
, type
, sizeof(*ndm
), nlflags
);
4431 ndm
= nlmsg_data(nlh
);
4432 ndm
->ndm_family
= AF_BRIDGE
;
4435 ndm
->ndm_flags
= flags
;
4437 ndm
->ndm_ifindex
= dev
->ifindex
;
4438 ndm
->ndm_state
= ndm_state
;
4440 if (nla_put(skb
, NDA_LLADDR
, dev
->addr_len
, addr
))
4441 goto nla_put_failure
;
4443 if (nla_put(skb
, NDA_VLAN
, sizeof(u16
), &vid
))
4444 goto nla_put_failure
;
4446 nlmsg_end(skb
, nlh
);
4450 nlmsg_cancel(skb
, nlh
);
4454 static inline size_t rtnl_fdb_nlmsg_size(const struct net_device
*dev
)
4456 return NLMSG_ALIGN(sizeof(struct ndmsg
)) +
4457 nla_total_size(dev
->addr_len
) + /* NDA_LLADDR */
4458 nla_total_size(sizeof(u16
)) + /* NDA_VLAN */
4462 static void rtnl_fdb_notify(struct net_device
*dev
, u8
*addr
, u16 vid
, int type
,
4465 struct net
*net
= dev_net(dev
);
4466 struct sk_buff
*skb
;
4469 skb
= nlmsg_new(rtnl_fdb_nlmsg_size(dev
), GFP_ATOMIC
);
4473 err
= nlmsg_populate_fdb_fill(skb
, dev
, addr
, vid
,
4474 0, 0, type
, NTF_SELF
, 0, ndm_state
);
4480 rtnl_notify(skb
, net
, 0, RTNLGRP_NEIGH
, NULL
, GFP_ATOMIC
);
4483 rtnl_set_sk_err(net
, RTNLGRP_NEIGH
, err
);
4487 * ndo_dflt_fdb_add - default netdevice operation to add an FDB entry
4489 int ndo_dflt_fdb_add(struct ndmsg
*ndm
,
4490 struct nlattr
*tb
[],
4491 struct net_device
*dev
,
4492 const unsigned char *addr
, u16 vid
,
4497 /* If aging addresses are supported device will need to
4498 * implement its own handler for this.
4500 if (ndm
->ndm_state
&& !(ndm
->ndm_state
& NUD_PERMANENT
)) {
4501 netdev_info(dev
, "default FDB implementation only supports local addresses\n");
4505 if (tb
[NDA_FLAGS_EXT
]) {
4506 netdev_info(dev
, "invalid flags given to default FDB implementation\n");
4511 netdev_info(dev
, "vlans aren't supported yet for dev_uc|mc_add()\n");
4515 if (is_unicast_ether_addr(addr
) || is_link_local_ether_addr(addr
))
4516 err
= dev_uc_add_excl(dev
, addr
);
4517 else if (is_multicast_ether_addr(addr
))
4518 err
= dev_mc_add_excl(dev
, addr
);
4520 /* Only return duplicate errors if NLM_F_EXCL is set */
4521 if (err
== -EEXIST
&& !(flags
& NLM_F_EXCL
))
4526 EXPORT_SYMBOL(ndo_dflt_fdb_add
);
4528 static int fdb_vid_parse(struct nlattr
*vlan_attr
, u16
*p_vid
,
4529 struct netlink_ext_ack
*extack
)
4534 if (nla_len(vlan_attr
) != sizeof(u16
)) {
4535 NL_SET_ERR_MSG(extack
, "invalid vlan attribute size");
4539 vid
= nla_get_u16(vlan_attr
);
4541 if (!vid
|| vid
>= VLAN_VID_MASK
) {
4542 NL_SET_ERR_MSG(extack
, "invalid vlan id");
4550 static int rtnl_fdb_add(struct sk_buff
*skb
, struct nlmsghdr
*nlh
,
4551 struct netlink_ext_ack
*extack
)
4553 struct net
*net
= sock_net(skb
->sk
);
4555 struct nlattr
*tb
[NDA_MAX
+1];
4556 struct net_device
*dev
;
4561 err
= nlmsg_parse_deprecated(nlh
, sizeof(*ndm
), tb
, NDA_MAX
, NULL
,
4566 ndm
= nlmsg_data(nlh
);
4567 if (ndm
->ndm_ifindex
== 0) {
4568 NL_SET_ERR_MSG(extack
, "invalid ifindex");
4572 dev
= __dev_get_by_index(net
, ndm
->ndm_ifindex
);
4574 NL_SET_ERR_MSG(extack
, "unknown ifindex");
4578 if (!tb
[NDA_LLADDR
] || nla_len(tb
[NDA_LLADDR
]) != ETH_ALEN
) {
4579 NL_SET_ERR_MSG(extack
, "invalid address");
4583 if (dev
->type
!= ARPHRD_ETHER
) {
4584 NL_SET_ERR_MSG(extack
, "FDB add only supported for Ethernet devices");
4588 addr
= nla_data(tb
[NDA_LLADDR
]);
4590 err
= fdb_vid_parse(tb
[NDA_VLAN
], &vid
, extack
);
4596 /* Support fdb on master device the net/bridge default case */
4597 if ((!ndm
->ndm_flags
|| ndm
->ndm_flags
& NTF_MASTER
) &&
4598 netif_is_bridge_port(dev
)) {
4599 struct net_device
*br_dev
= netdev_master_upper_dev_get(dev
);
4600 const struct net_device_ops
*ops
= br_dev
->netdev_ops
;
4601 bool notified
= false;
4603 err
= ops
->ndo_fdb_add(ndm
, tb
, dev
, addr
, vid
,
4604 nlh
->nlmsg_flags
, ¬ified
, extack
);
4608 ndm
->ndm_flags
&= ~NTF_MASTER
;
4611 /* Embedded bridge, macvlan, and any other device support */
4612 if ((ndm
->ndm_flags
& NTF_SELF
)) {
4613 bool notified
= false;
4615 if (dev
->netdev_ops
->ndo_fdb_add
)
4616 err
= dev
->netdev_ops
->ndo_fdb_add(ndm
, tb
, dev
, addr
,
4621 err
= ndo_dflt_fdb_add(ndm
, tb
, dev
, addr
, vid
,
4624 if (!err
&& !notified
) {
4625 rtnl_fdb_notify(dev
, addr
, vid
, RTM_NEWNEIGH
,
4627 ndm
->ndm_flags
&= ~NTF_SELF
;
4635 * ndo_dflt_fdb_del - default netdevice operation to delete an FDB entry
4637 int ndo_dflt_fdb_del(struct ndmsg
*ndm
,
4638 struct nlattr
*tb
[],
4639 struct net_device
*dev
,
4640 const unsigned char *addr
, u16 vid
)
4644 /* If aging addresses are supported device will need to
4645 * implement its own handler for this.
4647 if (!(ndm
->ndm_state
& NUD_PERMANENT
)) {
4648 netdev_info(dev
, "default FDB implementation only supports local addresses\n");
4652 if (is_unicast_ether_addr(addr
) || is_link_local_ether_addr(addr
))
4653 err
= dev_uc_del(dev
, addr
);
4654 else if (is_multicast_ether_addr(addr
))
4655 err
= dev_mc_del(dev
, addr
);
4659 EXPORT_SYMBOL(ndo_dflt_fdb_del
);
4661 static int rtnl_fdb_del(struct sk_buff
*skb
, struct nlmsghdr
*nlh
,
4662 struct netlink_ext_ack
*extack
)
4664 bool del_bulk
= !!(nlh
->nlmsg_flags
& NLM_F_BULK
);
4665 struct net
*net
= sock_net(skb
->sk
);
4666 const struct net_device_ops
*ops
;
4668 struct nlattr
*tb
[NDA_MAX
+1];
4669 struct net_device
*dev
;
4674 if (!netlink_capable(skb
, CAP_NET_ADMIN
))
4678 err
= nlmsg_parse_deprecated(nlh
, sizeof(*ndm
), tb
, NDA_MAX
,
4681 /* For bulk delete, the drivers will parse the message with
4684 err
= nlmsg_parse(nlh
, sizeof(*ndm
), tb
, NDA_MAX
, NULL
, extack
);
4689 ndm
= nlmsg_data(nlh
);
4690 if (ndm
->ndm_ifindex
== 0) {
4691 NL_SET_ERR_MSG(extack
, "invalid ifindex");
4695 dev
= __dev_get_by_index(net
, ndm
->ndm_ifindex
);
4697 NL_SET_ERR_MSG(extack
, "unknown ifindex");
4702 if (!tb
[NDA_LLADDR
] || nla_len(tb
[NDA_LLADDR
]) != ETH_ALEN
) {
4703 NL_SET_ERR_MSG(extack
, "invalid address");
4706 addr
= nla_data(tb
[NDA_LLADDR
]);
4708 err
= fdb_vid_parse(tb
[NDA_VLAN
], &vid
, extack
);
4713 if (dev
->type
!= ARPHRD_ETHER
) {
4714 NL_SET_ERR_MSG(extack
, "FDB delete only supported for Ethernet devices");
4720 /* Support fdb on master device the net/bridge default case */
4721 if ((!ndm
->ndm_flags
|| ndm
->ndm_flags
& NTF_MASTER
) &&
4722 netif_is_bridge_port(dev
)) {
4723 struct net_device
*br_dev
= netdev_master_upper_dev_get(dev
);
4724 bool notified
= false;
4726 ops
= br_dev
->netdev_ops
;
4728 if (ops
->ndo_fdb_del
)
4729 err
= ops
->ndo_fdb_del(ndm
, tb
, dev
, addr
, vid
,
4732 if (ops
->ndo_fdb_del_bulk
)
4733 err
= ops
->ndo_fdb_del_bulk(nlh
, dev
, extack
);
4739 ndm
->ndm_flags
&= ~NTF_MASTER
;
4742 /* Embedded bridge, macvlan, and any other device support */
4743 if (ndm
->ndm_flags
& NTF_SELF
) {
4744 bool notified
= false;
4746 ops
= dev
->netdev_ops
;
4748 if (ops
->ndo_fdb_del
)
4749 err
= ops
->ndo_fdb_del(ndm
, tb
, dev
, addr
, vid
,
4752 err
= ndo_dflt_fdb_del(ndm
, tb
, dev
, addr
, vid
);
4754 /* in case err was cleared by NTF_MASTER call */
4756 if (ops
->ndo_fdb_del_bulk
)
4757 err
= ops
->ndo_fdb_del_bulk(nlh
, dev
, extack
);
4761 if (!del_bulk
&& !notified
)
4762 rtnl_fdb_notify(dev
, addr
, vid
, RTM_DELNEIGH
,
4764 ndm
->ndm_flags
&= ~NTF_SELF
;
4771 static int nlmsg_populate_fdb(struct sk_buff
*skb
,
4772 struct netlink_callback
*cb
,
4773 struct net_device
*dev
,
4775 struct netdev_hw_addr_list
*list
)
4777 struct ndo_fdb_dump_context
*ctx
= (void *)cb
->ctx
;
4778 struct netdev_hw_addr
*ha
;
4782 portid
= NETLINK_CB(cb
->skb
).portid
;
4783 seq
= cb
->nlh
->nlmsg_seq
;
4785 list_for_each_entry(ha
, &list
->list
, list
) {
4786 if (*idx
< ctx
->fdb_idx
)
4789 err
= nlmsg_populate_fdb_fill(skb
, dev
, ha
->addr
, 0,
4791 RTM_NEWNEIGH
, NTF_SELF
,
4792 NLM_F_MULTI
, NUD_PERMANENT
);
4802 * ndo_dflt_fdb_dump - default netdevice operation to dump an FDB table.
4803 * @skb: socket buffer to store message in
4804 * @cb: netlink callback
4806 * @filter_dev: ignored
4807 * @idx: the number of FDB table entries dumped is added to *@idx
4809 * Default netdevice operation to dump the existing unicast address list.
4810 * Returns number of addresses from list put in skb.
4812 int ndo_dflt_fdb_dump(struct sk_buff
*skb
,
4813 struct netlink_callback
*cb
,
4814 struct net_device
*dev
,
4815 struct net_device
*filter_dev
,
4820 if (dev
->type
!= ARPHRD_ETHER
)
4823 netif_addr_lock_bh(dev
);
4824 err
= nlmsg_populate_fdb(skb
, cb
, dev
, idx
, &dev
->uc
);
4827 err
= nlmsg_populate_fdb(skb
, cb
, dev
, idx
, &dev
->mc
);
4829 netif_addr_unlock_bh(dev
);
4832 EXPORT_SYMBOL(ndo_dflt_fdb_dump
);
4834 static int valid_fdb_dump_strict(const struct nlmsghdr
*nlh
,
4835 int *br_idx
, int *brport_idx
,
4836 struct netlink_ext_ack
*extack
)
4838 struct nlattr
*tb
[NDA_MAX
+ 1];
4842 if (nlh
->nlmsg_len
< nlmsg_msg_size(sizeof(*ndm
))) {
4843 NL_SET_ERR_MSG(extack
, "Invalid header for fdb dump request");
4847 ndm
= nlmsg_data(nlh
);
4848 if (ndm
->ndm_pad1
|| ndm
->ndm_pad2
|| ndm
->ndm_state
||
4849 ndm
->ndm_flags
|| ndm
->ndm_type
) {
4850 NL_SET_ERR_MSG(extack
, "Invalid values in header for fdb dump request");
4854 err
= nlmsg_parse_deprecated_strict(nlh
, sizeof(struct ndmsg
), tb
,
4855 NDA_MAX
, NULL
, extack
);
4859 *brport_idx
= ndm
->ndm_ifindex
;
4860 for (i
= 0; i
<= NDA_MAX
; ++i
) {
4866 if (nla_len(tb
[i
]) != sizeof(u32
)) {
4867 NL_SET_ERR_MSG(extack
, "Invalid IFINDEX attribute in fdb dump request");
4870 *brport_idx
= nla_get_u32(tb
[NDA_IFINDEX
]);
4873 if (nla_len(tb
[i
]) != sizeof(u32
)) {
4874 NL_SET_ERR_MSG(extack
, "Invalid MASTER attribute in fdb dump request");
4877 *br_idx
= nla_get_u32(tb
[NDA_MASTER
]);
4880 NL_SET_ERR_MSG(extack
, "Unsupported attribute in fdb dump request");
4888 static int valid_fdb_dump_legacy(const struct nlmsghdr
*nlh
,
4889 int *br_idx
, int *brport_idx
,
4890 struct netlink_ext_ack
*extack
)
4892 struct nlattr
*tb
[IFLA_MAX
+1];
4895 /* A hack to preserve kernel<->userspace interface.
4896 * Before Linux v4.12 this code accepted ndmsg since iproute2 v3.3.0.
4897 * However, ndmsg is shorter than ifinfomsg thus nlmsg_parse() bails.
4898 * So, check for ndmsg with an optional u32 attribute (not used here).
4899 * Fortunately these sizes don't conflict with the size of ifinfomsg
4900 * with an optional attribute.
4902 if (nlmsg_len(nlh
) != sizeof(struct ndmsg
) &&
4903 (nlmsg_len(nlh
) != sizeof(struct ndmsg
) +
4904 nla_attr_size(sizeof(u32
)))) {
4905 struct ifinfomsg
*ifm
;
4907 err
= nlmsg_parse_deprecated(nlh
, sizeof(struct ifinfomsg
),
4908 tb
, IFLA_MAX
, ifla_policy
,
4912 } else if (err
== 0) {
4913 if (tb
[IFLA_MASTER
])
4914 *br_idx
= nla_get_u32(tb
[IFLA_MASTER
]);
4917 ifm
= nlmsg_data(nlh
);
4918 *brport_idx
= ifm
->ifi_index
;
4923 static int rtnl_fdb_dump(struct sk_buff
*skb
, struct netlink_callback
*cb
)
4925 const struct net_device_ops
*ops
= NULL
, *cops
= NULL
;
4926 struct ndo_fdb_dump_context
*ctx
= (void *)cb
->ctx
;
4927 struct net_device
*dev
, *br_dev
= NULL
;
4928 struct net
*net
= sock_net(skb
->sk
);
4934 NL_ASSERT_CTX_FITS(struct ndo_fdb_dump_context
);
4936 if (cb
->strict_check
)
4937 err
= valid_fdb_dump_strict(cb
->nlh
, &br_idx
, &brport_idx
,
4940 err
= valid_fdb_dump_legacy(cb
->nlh
, &br_idx
, &brport_idx
,
4946 br_dev
= __dev_get_by_index(net
, br_idx
);
4950 ops
= br_dev
->netdev_ops
;
4953 for_each_netdev_dump(net
, dev
, ctx
->ifindex
) {
4954 if (brport_idx
&& (dev
->ifindex
!= brport_idx
))
4957 if (!br_idx
) { /* user did not specify a specific bridge */
4958 if (netif_is_bridge_port(dev
)) {
4959 br_dev
= netdev_master_upper_dev_get(dev
);
4960 cops
= br_dev
->netdev_ops
;
4963 if (dev
!= br_dev
&&
4964 !netif_is_bridge_port(dev
))
4967 if (br_dev
!= netdev_master_upper_dev_get(dev
) &&
4968 !netif_is_bridge_master(dev
))
4973 if (netif_is_bridge_port(dev
)) {
4974 if (cops
&& cops
->ndo_fdb_dump
) {
4975 err
= cops
->ndo_fdb_dump(skb
, cb
, br_dev
, dev
,
4977 if (err
== -EMSGSIZE
)
4982 if (dev
->netdev_ops
->ndo_fdb_dump
)
4983 err
= dev
->netdev_ops
->ndo_fdb_dump(skb
, cb
, dev
, NULL
,
4986 err
= ndo_dflt_fdb_dump(skb
, cb
, dev
, NULL
, &fidx
);
4987 if (err
== -EMSGSIZE
)
4992 /* reset fdb offset to 0 for rest of the interfaces */
4997 ctx
->fdb_idx
= fidx
;
5002 static int valid_fdb_get_strict(const struct nlmsghdr
*nlh
,
5003 struct nlattr
**tb
, u8
*ndm_flags
,
5004 int *br_idx
, int *brport_idx
, u8
**addr
,
5005 u16
*vid
, struct netlink_ext_ack
*extack
)
5010 if (nlh
->nlmsg_len
< nlmsg_msg_size(sizeof(*ndm
))) {
5011 NL_SET_ERR_MSG(extack
, "Invalid header for fdb get request");
5015 ndm
= nlmsg_data(nlh
);
5016 if (ndm
->ndm_pad1
|| ndm
->ndm_pad2
|| ndm
->ndm_state
||
5018 NL_SET_ERR_MSG(extack
, "Invalid values in header for fdb get request");
5022 if (ndm
->ndm_flags
& ~(NTF_MASTER
| NTF_SELF
)) {
5023 NL_SET_ERR_MSG(extack
, "Invalid flags in header for fdb get request");
5027 err
= nlmsg_parse_deprecated_strict(nlh
, sizeof(struct ndmsg
), tb
,
5028 NDA_MAX
, nda_policy
, extack
);
5032 *ndm_flags
= ndm
->ndm_flags
;
5033 *brport_idx
= ndm
->ndm_ifindex
;
5034 for (i
= 0; i
<= NDA_MAX
; ++i
) {
5040 *br_idx
= nla_get_u32(tb
[i
]);
5043 if (nla_len(tb
[i
]) != ETH_ALEN
) {
5044 NL_SET_ERR_MSG(extack
, "Invalid address in fdb get request");
5047 *addr
= nla_data(tb
[i
]);
5050 err
= fdb_vid_parse(tb
[i
], vid
, extack
);
5057 NL_SET_ERR_MSG(extack
, "Unsupported attribute in fdb get request");
5065 static int rtnl_fdb_get(struct sk_buff
*in_skb
, struct nlmsghdr
*nlh
,
5066 struct netlink_ext_ack
*extack
)
5068 struct net_device
*dev
= NULL
, *br_dev
= NULL
;
5069 const struct net_device_ops
*ops
= NULL
;
5070 struct net
*net
= sock_net(in_skb
->sk
);
5071 struct nlattr
*tb
[NDA_MAX
+ 1];
5072 struct sk_buff
*skb
;
5080 err
= valid_fdb_get_strict(nlh
, tb
, &ndm_flags
, &br_idx
,
5081 &brport_idx
, &addr
, &vid
, extack
);
5086 NL_SET_ERR_MSG(extack
, "Missing lookup address for fdb get request");
5091 dev
= __dev_get_by_index(net
, brport_idx
);
5093 NL_SET_ERR_MSG(extack
, "Unknown device ifindex");
5100 NL_SET_ERR_MSG(extack
, "Master and device are mutually exclusive");
5104 br_dev
= __dev_get_by_index(net
, br_idx
);
5106 NL_SET_ERR_MSG(extack
, "Invalid master ifindex");
5109 ops
= br_dev
->netdev_ops
;
5113 if (!ndm_flags
|| (ndm_flags
& NTF_MASTER
)) {
5114 if (!netif_is_bridge_port(dev
)) {
5115 NL_SET_ERR_MSG(extack
, "Device is not a bridge port");
5118 br_dev
= netdev_master_upper_dev_get(dev
);
5120 NL_SET_ERR_MSG(extack
, "Master of device not found");
5123 ops
= br_dev
->netdev_ops
;
5125 if (!(ndm_flags
& NTF_SELF
)) {
5126 NL_SET_ERR_MSG(extack
, "Missing NTF_SELF");
5129 ops
= dev
->netdev_ops
;
5133 if (!br_dev
&& !dev
) {
5134 NL_SET_ERR_MSG(extack
, "No device specified");
5138 if (!ops
|| !ops
->ndo_fdb_get
) {
5139 NL_SET_ERR_MSG(extack
, "Fdb get operation not supported by device");
5143 skb
= nlmsg_new(NLMSG_GOODSIZE
, GFP_KERNEL
);
5149 err
= ops
->ndo_fdb_get(skb
, tb
, dev
, addr
, vid
,
5150 NETLINK_CB(in_skb
).portid
,
5151 nlh
->nlmsg_seq
, extack
);
5155 return rtnl_unicast(skb
, net
, NETLINK_CB(in_skb
).portid
);
5161 static int brport_nla_put_flag(struct sk_buff
*skb
, u32 flags
, u32 mask
,
5162 unsigned int attrnum
, unsigned int flag
)
5165 return nla_put_u8(skb
, attrnum
, !!(flags
& flag
));
5169 int ndo_dflt_bridge_getlink(struct sk_buff
*skb
, u32 pid
, u32 seq
,
5170 struct net_device
*dev
, u16 mode
,
5171 u32 flags
, u32 mask
, int nlflags
,
5173 int (*vlan_fill
)(struct sk_buff
*skb
,
5174 struct net_device
*dev
,
5177 struct nlmsghdr
*nlh
;
5178 struct ifinfomsg
*ifm
;
5179 struct nlattr
*br_afspec
;
5180 struct nlattr
*protinfo
;
5181 u8 operstate
= netif_running(dev
) ? dev
->operstate
: IF_OPER_DOWN
;
5182 struct net_device
*br_dev
= netdev_master_upper_dev_get(dev
);
5185 nlh
= nlmsg_put(skb
, pid
, seq
, RTM_NEWLINK
, sizeof(*ifm
), nlflags
);
5189 ifm
= nlmsg_data(nlh
);
5190 ifm
->ifi_family
= AF_BRIDGE
;
5192 ifm
->ifi_type
= dev
->type
;
5193 ifm
->ifi_index
= dev
->ifindex
;
5194 ifm
->ifi_flags
= dev_get_flags(dev
);
5195 ifm
->ifi_change
= 0;
5198 if (nla_put_string(skb
, IFLA_IFNAME
, dev
->name
) ||
5199 nla_put_u32(skb
, IFLA_MTU
, dev
->mtu
) ||
5200 nla_put_u8(skb
, IFLA_OPERSTATE
, operstate
) ||
5202 nla_put_u32(skb
, IFLA_MASTER
, br_dev
->ifindex
)) ||
5204 nla_put(skb
, IFLA_ADDRESS
, dev
->addr_len
, dev
->dev_addr
)) ||
5205 (dev
->ifindex
!= dev_get_iflink(dev
) &&
5206 nla_put_u32(skb
, IFLA_LINK
, dev_get_iflink(dev
))))
5207 goto nla_put_failure
;
5209 br_afspec
= nla_nest_start_noflag(skb
, IFLA_AF_SPEC
);
5211 goto nla_put_failure
;
5213 if (nla_put_u16(skb
, IFLA_BRIDGE_FLAGS
, BRIDGE_FLAGS_SELF
)) {
5214 nla_nest_cancel(skb
, br_afspec
);
5215 goto nla_put_failure
;
5218 if (mode
!= BRIDGE_MODE_UNDEF
) {
5219 if (nla_put_u16(skb
, IFLA_BRIDGE_MODE
, mode
)) {
5220 nla_nest_cancel(skb
, br_afspec
);
5221 goto nla_put_failure
;
5225 err
= vlan_fill(skb
, dev
, filter_mask
);
5227 nla_nest_cancel(skb
, br_afspec
);
5228 goto nla_put_failure
;
5231 nla_nest_end(skb
, br_afspec
);
5233 protinfo
= nla_nest_start(skb
, IFLA_PROTINFO
);
5235 goto nla_put_failure
;
5237 if (brport_nla_put_flag(skb
, flags
, mask
,
5238 IFLA_BRPORT_MODE
, BR_HAIRPIN_MODE
) ||
5239 brport_nla_put_flag(skb
, flags
, mask
,
5240 IFLA_BRPORT_GUARD
, BR_BPDU_GUARD
) ||
5241 brport_nla_put_flag(skb
, flags
, mask
,
5242 IFLA_BRPORT_FAST_LEAVE
,
5243 BR_MULTICAST_FAST_LEAVE
) ||
5244 brport_nla_put_flag(skb
, flags
, mask
,
5245 IFLA_BRPORT_PROTECT
, BR_ROOT_BLOCK
) ||
5246 brport_nla_put_flag(skb
, flags
, mask
,
5247 IFLA_BRPORT_LEARNING
, BR_LEARNING
) ||
5248 brport_nla_put_flag(skb
, flags
, mask
,
5249 IFLA_BRPORT_LEARNING_SYNC
, BR_LEARNING_SYNC
) ||
5250 brport_nla_put_flag(skb
, flags
, mask
,
5251 IFLA_BRPORT_UNICAST_FLOOD
, BR_FLOOD
) ||
5252 brport_nla_put_flag(skb
, flags
, mask
,
5253 IFLA_BRPORT_PROXYARP
, BR_PROXYARP
) ||
5254 brport_nla_put_flag(skb
, flags
, mask
,
5255 IFLA_BRPORT_MCAST_FLOOD
, BR_MCAST_FLOOD
) ||
5256 brport_nla_put_flag(skb
, flags
, mask
,
5257 IFLA_BRPORT_BCAST_FLOOD
, BR_BCAST_FLOOD
)) {
5258 nla_nest_cancel(skb
, protinfo
);
5259 goto nla_put_failure
;
5262 nla_nest_end(skb
, protinfo
);
5264 nlmsg_end(skb
, nlh
);
5267 nlmsg_cancel(skb
, nlh
);
5268 return err
? err
: -EMSGSIZE
;
5270 EXPORT_SYMBOL_GPL(ndo_dflt_bridge_getlink
);
5272 static int valid_bridge_getlink_req(const struct nlmsghdr
*nlh
,
5273 bool strict_check
, u32
*filter_mask
,
5274 struct netlink_ext_ack
*extack
)
5276 struct nlattr
*tb
[IFLA_MAX
+1];
5280 struct ifinfomsg
*ifm
;
5282 if (nlh
->nlmsg_len
< nlmsg_msg_size(sizeof(*ifm
))) {
5283 NL_SET_ERR_MSG(extack
, "Invalid header for bridge link dump");
5287 ifm
= nlmsg_data(nlh
);
5288 if (ifm
->__ifi_pad
|| ifm
->ifi_type
|| ifm
->ifi_flags
||
5289 ifm
->ifi_change
|| ifm
->ifi_index
) {
5290 NL_SET_ERR_MSG(extack
, "Invalid values in header for bridge link dump request");
5294 err
= nlmsg_parse_deprecated_strict(nlh
,
5295 sizeof(struct ifinfomsg
),
5296 tb
, IFLA_MAX
, ifla_policy
,
5299 err
= nlmsg_parse_deprecated(nlh
, sizeof(struct ifinfomsg
),
5300 tb
, IFLA_MAX
, ifla_policy
,
5306 /* new attributes should only be added with strict checking */
5307 for (i
= 0; i
<= IFLA_MAX
; ++i
) {
5313 *filter_mask
= nla_get_u32(tb
[i
]);
5317 NL_SET_ERR_MSG(extack
, "Unsupported attribute in bridge link dump request");
5326 static int rtnl_bridge_getlink(struct sk_buff
*skb
, struct netlink_callback
*cb
)
5328 const struct nlmsghdr
*nlh
= cb
->nlh
;
5329 struct net
*net
= sock_net(skb
->sk
);
5330 struct net_device
*dev
;
5332 u32 portid
= NETLINK_CB(cb
->skb
).portid
;
5333 u32 seq
= nlh
->nlmsg_seq
;
5334 u32 filter_mask
= 0;
5337 err
= valid_bridge_getlink_req(nlh
, cb
->strict_check
, &filter_mask
,
5339 if (err
< 0 && cb
->strict_check
)
5343 for_each_netdev_rcu(net
, dev
) {
5344 const struct net_device_ops
*ops
= dev
->netdev_ops
;
5345 struct net_device
*br_dev
= netdev_master_upper_dev_get(dev
);
5347 if (br_dev
&& br_dev
->netdev_ops
->ndo_bridge_getlink
) {
5348 if (idx
>= cb
->args
[0]) {
5349 err
= br_dev
->netdev_ops
->ndo_bridge_getlink(
5350 skb
, portid
, seq
, dev
,
5351 filter_mask
, NLM_F_MULTI
);
5352 if (err
< 0 && err
!= -EOPNOTSUPP
) {
5353 if (likely(skb
->len
))
5362 if (ops
->ndo_bridge_getlink
) {
5363 if (idx
>= cb
->args
[0]) {
5364 err
= ops
->ndo_bridge_getlink(skb
, portid
,
5368 if (err
< 0 && err
!= -EOPNOTSUPP
) {
5369 if (likely(skb
->len
))
5386 static inline size_t bridge_nlmsg_size(void)
5388 return NLMSG_ALIGN(sizeof(struct ifinfomsg
))
5389 + nla_total_size(IFNAMSIZ
) /* IFLA_IFNAME */
5390 + nla_total_size(MAX_ADDR_LEN
) /* IFLA_ADDRESS */
5391 + nla_total_size(sizeof(u32
)) /* IFLA_MASTER */
5392 + nla_total_size(sizeof(u32
)) /* IFLA_MTU */
5393 + nla_total_size(sizeof(u32
)) /* IFLA_LINK */
5394 + nla_total_size(sizeof(u32
)) /* IFLA_OPERSTATE */
5395 + nla_total_size(sizeof(u8
)) /* IFLA_PROTINFO */
5396 + nla_total_size(sizeof(struct nlattr
)) /* IFLA_AF_SPEC */
5397 + nla_total_size(sizeof(u16
)) /* IFLA_BRIDGE_FLAGS */
5398 + nla_total_size(sizeof(u16
)); /* IFLA_BRIDGE_MODE */
5401 static int rtnl_bridge_notify(struct net_device
*dev
)
5403 struct net
*net
= dev_net(dev
);
5404 struct sk_buff
*skb
;
5405 int err
= -EOPNOTSUPP
;
5407 if (!dev
->netdev_ops
->ndo_bridge_getlink
)
5410 skb
= nlmsg_new(bridge_nlmsg_size(), GFP_ATOMIC
);
5416 err
= dev
->netdev_ops
->ndo_bridge_getlink(skb
, 0, 0, dev
, 0, 0);
5420 /* Notification info is only filled for bridge ports, not the bridge
5421 * device itself. Therefore, a zero notification length is valid and
5422 * should not result in an error.
5427 rtnl_notify(skb
, net
, 0, RTNLGRP_LINK
, NULL
, GFP_ATOMIC
);
5430 WARN_ON(err
== -EMSGSIZE
);
5433 rtnl_set_sk_err(net
, RTNLGRP_LINK
, err
);
5437 static int rtnl_bridge_setlink(struct sk_buff
*skb
, struct nlmsghdr
*nlh
,
5438 struct netlink_ext_ack
*extack
)
5440 struct net
*net
= sock_net(skb
->sk
);
5441 struct ifinfomsg
*ifm
;
5442 struct net_device
*dev
;
5443 struct nlattr
*br_spec
, *attr
, *br_flags_attr
= NULL
;
5444 int rem
, err
= -EOPNOTSUPP
;
5447 if (nlmsg_len(nlh
) < sizeof(*ifm
))
5450 ifm
= nlmsg_data(nlh
);
5451 if (ifm
->ifi_family
!= AF_BRIDGE
)
5452 return -EPFNOSUPPORT
;
5454 dev
= __dev_get_by_index(net
, ifm
->ifi_index
);
5456 NL_SET_ERR_MSG(extack
, "unknown ifindex");
5460 br_spec
= nlmsg_find_attr(nlh
, sizeof(struct ifinfomsg
), IFLA_AF_SPEC
);
5462 nla_for_each_nested(attr
, br_spec
, rem
) {
5463 if (nla_type(attr
) == IFLA_BRIDGE_FLAGS
&& !br_flags_attr
) {
5464 if (nla_len(attr
) < sizeof(flags
))
5467 br_flags_attr
= attr
;
5468 flags
= nla_get_u16(attr
);
5471 if (nla_type(attr
) == IFLA_BRIDGE_MODE
) {
5472 if (nla_len(attr
) < sizeof(u16
))
5478 if (!flags
|| (flags
& BRIDGE_FLAGS_MASTER
)) {
5479 struct net_device
*br_dev
= netdev_master_upper_dev_get(dev
);
5481 if (!br_dev
|| !br_dev
->netdev_ops
->ndo_bridge_setlink
) {
5486 err
= br_dev
->netdev_ops
->ndo_bridge_setlink(dev
, nlh
, flags
,
5491 flags
&= ~BRIDGE_FLAGS_MASTER
;
5494 if ((flags
& BRIDGE_FLAGS_SELF
)) {
5495 if (!dev
->netdev_ops
->ndo_bridge_setlink
)
5498 err
= dev
->netdev_ops
->ndo_bridge_setlink(dev
, nlh
,
5502 flags
&= ~BRIDGE_FLAGS_SELF
;
5504 /* Generate event to notify upper layer of bridge
5507 err
= rtnl_bridge_notify(dev
);
5512 memcpy(nla_data(br_flags_attr
), &flags
, sizeof(flags
));
5517 static int rtnl_bridge_dellink(struct sk_buff
*skb
, struct nlmsghdr
*nlh
,
5518 struct netlink_ext_ack
*extack
)
5520 struct net
*net
= sock_net(skb
->sk
);
5521 struct ifinfomsg
*ifm
;
5522 struct net_device
*dev
;
5523 struct nlattr
*br_spec
, *attr
= NULL
;
5524 int rem
, err
= -EOPNOTSUPP
;
5526 bool have_flags
= false;
5528 if (nlmsg_len(nlh
) < sizeof(*ifm
))
5531 ifm
= nlmsg_data(nlh
);
5532 if (ifm
->ifi_family
!= AF_BRIDGE
)
5533 return -EPFNOSUPPORT
;
5535 dev
= __dev_get_by_index(net
, ifm
->ifi_index
);
5537 NL_SET_ERR_MSG(extack
, "unknown ifindex");
5541 br_spec
= nlmsg_find_attr(nlh
, sizeof(struct ifinfomsg
), IFLA_AF_SPEC
);
5543 nla_for_each_nested_type(attr
, IFLA_BRIDGE_FLAGS
, br_spec
,
5545 if (nla_len(attr
) < sizeof(flags
))
5549 flags
= nla_get_u16(attr
);
5554 if (!flags
|| (flags
& BRIDGE_FLAGS_MASTER
)) {
5555 struct net_device
*br_dev
= netdev_master_upper_dev_get(dev
);
5557 if (!br_dev
|| !br_dev
->netdev_ops
->ndo_bridge_dellink
) {
5562 err
= br_dev
->netdev_ops
->ndo_bridge_dellink(dev
, nlh
, flags
);
5566 flags
&= ~BRIDGE_FLAGS_MASTER
;
5569 if ((flags
& BRIDGE_FLAGS_SELF
)) {
5570 if (!dev
->netdev_ops
->ndo_bridge_dellink
)
5573 err
= dev
->netdev_ops
->ndo_bridge_dellink(dev
, nlh
,
5577 flags
&= ~BRIDGE_FLAGS_SELF
;
5579 /* Generate event to notify upper layer of bridge
5582 err
= rtnl_bridge_notify(dev
);
5587 memcpy(nla_data(attr
), &flags
, sizeof(flags
));
5592 static bool stats_attr_valid(unsigned int mask
, int attrid
, int idxattr
)
5594 return (mask
& IFLA_STATS_FILTER_BIT(attrid
)) &&
5595 (!idxattr
|| idxattr
== attrid
);
5599 rtnl_offload_xstats_have_ndo(const struct net_device
*dev
, int attr_id
)
5601 return dev
->netdev_ops
&&
5602 dev
->netdev_ops
->ndo_has_offload_stats
&&
5603 dev
->netdev_ops
->ndo_get_offload_stats
&&
5604 dev
->netdev_ops
->ndo_has_offload_stats(dev
, attr_id
);
5608 rtnl_offload_xstats_get_size_ndo(const struct net_device
*dev
, int attr_id
)
5610 return rtnl_offload_xstats_have_ndo(dev
, attr_id
) ?
5611 sizeof(struct rtnl_link_stats64
) : 0;
5615 rtnl_offload_xstats_fill_ndo(struct net_device
*dev
, int attr_id
,
5616 struct sk_buff
*skb
)
5618 unsigned int size
= rtnl_offload_xstats_get_size_ndo(dev
, attr_id
);
5619 struct nlattr
*attr
= NULL
;
5626 attr
= nla_reserve_64bit(skb
, attr_id
, size
,
5627 IFLA_OFFLOAD_XSTATS_UNSPEC
);
5631 attr_data
= nla_data(attr
);
5632 memset(attr_data
, 0, size
);
5634 err
= dev
->netdev_ops
->ndo_get_offload_stats(attr_id
, dev
, attr_data
);
5642 rtnl_offload_xstats_get_size_stats(const struct net_device
*dev
,
5643 enum netdev_offload_xstats_type type
)
5645 bool enabled
= netdev_offload_xstats_enabled(dev
, type
);
5647 return enabled
? sizeof(struct rtnl_hw_stats64
) : 0;
5650 struct rtnl_offload_xstats_request_used
{
5656 rtnl_offload_xstats_get_stats(struct net_device
*dev
,
5657 enum netdev_offload_xstats_type type
,
5658 struct rtnl_offload_xstats_request_used
*ru
,
5659 struct rtnl_hw_stats64
*stats
,
5660 struct netlink_ext_ack
*extack
)
5666 request
= netdev_offload_xstats_enabled(dev
, type
);
5672 err
= netdev_offload_xstats_get(dev
, type
, stats
, &used
, extack
);
5678 ru
->request
= request
;
5685 rtnl_offload_xstats_fill_hw_s_info_one(struct sk_buff
*skb
, int attr_id
,
5686 struct rtnl_offload_xstats_request_used
*ru
)
5688 struct nlattr
*nest
;
5690 nest
= nla_nest_start(skb
, attr_id
);
5694 if (nla_put_u8(skb
, IFLA_OFFLOAD_XSTATS_HW_S_INFO_REQUEST
, ru
->request
))
5695 goto nla_put_failure
;
5697 if (nla_put_u8(skb
, IFLA_OFFLOAD_XSTATS_HW_S_INFO_USED
, ru
->used
))
5698 goto nla_put_failure
;
5700 nla_nest_end(skb
, nest
);
5704 nla_nest_cancel(skb
, nest
);
5709 rtnl_offload_xstats_fill_hw_s_info(struct sk_buff
*skb
, struct net_device
*dev
,
5710 struct netlink_ext_ack
*extack
)
5712 enum netdev_offload_xstats_type t_l3
= NETDEV_OFFLOAD_XSTATS_TYPE_L3
;
5713 struct rtnl_offload_xstats_request_used ru_l3
;
5714 struct nlattr
*nest
;
5717 err
= rtnl_offload_xstats_get_stats(dev
, t_l3
, &ru_l3
, NULL
, extack
);
5721 nest
= nla_nest_start(skb
, IFLA_OFFLOAD_XSTATS_HW_S_INFO
);
5725 if (rtnl_offload_xstats_fill_hw_s_info_one(skb
,
5726 IFLA_OFFLOAD_XSTATS_L3_STATS
,
5728 goto nla_put_failure
;
5730 nla_nest_end(skb
, nest
);
5734 nla_nest_cancel(skb
, nest
);
5738 static int rtnl_offload_xstats_fill(struct sk_buff
*skb
, struct net_device
*dev
,
5739 int *prividx
, u32 off_filter_mask
,
5740 struct netlink_ext_ack
*extack
)
5742 enum netdev_offload_xstats_type t_l3
= NETDEV_OFFLOAD_XSTATS_TYPE_L3
;
5743 int attr_id_hw_s_info
= IFLA_OFFLOAD_XSTATS_HW_S_INFO
;
5744 int attr_id_l3_stats
= IFLA_OFFLOAD_XSTATS_L3_STATS
;
5745 int attr_id_cpu_hit
= IFLA_OFFLOAD_XSTATS_CPU_HIT
;
5746 bool have_data
= false;
5749 if (*prividx
<= attr_id_cpu_hit
&&
5751 IFLA_STATS_FILTER_BIT(attr_id_cpu_hit
))) {
5752 err
= rtnl_offload_xstats_fill_ndo(dev
, attr_id_cpu_hit
, skb
);
5755 } else if (err
!= -ENODATA
) {
5756 *prividx
= attr_id_cpu_hit
;
5761 if (*prividx
<= attr_id_hw_s_info
&&
5762 (off_filter_mask
& IFLA_STATS_FILTER_BIT(attr_id_hw_s_info
))) {
5763 *prividx
= attr_id_hw_s_info
;
5765 err
= rtnl_offload_xstats_fill_hw_s_info(skb
, dev
, extack
);
5773 if (*prividx
<= attr_id_l3_stats
&&
5774 (off_filter_mask
& IFLA_STATS_FILTER_BIT(attr_id_l3_stats
))) {
5775 unsigned int size_l3
;
5776 struct nlattr
*attr
;
5778 *prividx
= attr_id_l3_stats
;
5780 size_l3
= rtnl_offload_xstats_get_size_stats(dev
, t_l3
);
5783 attr
= nla_reserve_64bit(skb
, attr_id_l3_stats
, size_l3
,
5784 IFLA_OFFLOAD_XSTATS_UNSPEC
);
5788 err
= rtnl_offload_xstats_get_stats(dev
, t_l3
, NULL
,
5789 nla_data(attr
), extack
);
5806 rtnl_offload_xstats_get_size_hw_s_info_one(const struct net_device
*dev
,
5807 enum netdev_offload_xstats_type type
)
5809 return nla_total_size(0) +
5810 /* IFLA_OFFLOAD_XSTATS_HW_S_INFO_REQUEST */
5811 nla_total_size(sizeof(u8
)) +
5812 /* IFLA_OFFLOAD_XSTATS_HW_S_INFO_USED */
5813 nla_total_size(sizeof(u8
)) +
5818 rtnl_offload_xstats_get_size_hw_s_info(const struct net_device
*dev
)
5820 enum netdev_offload_xstats_type t_l3
= NETDEV_OFFLOAD_XSTATS_TYPE_L3
;
5822 return nla_total_size(0) +
5823 /* IFLA_OFFLOAD_XSTATS_L3_STATS */
5824 rtnl_offload_xstats_get_size_hw_s_info_one(dev
, t_l3
) +
5828 static int rtnl_offload_xstats_get_size(const struct net_device
*dev
,
5829 u32 off_filter_mask
)
5831 enum netdev_offload_xstats_type t_l3
= NETDEV_OFFLOAD_XSTATS_TYPE_L3
;
5832 int attr_id_cpu_hit
= IFLA_OFFLOAD_XSTATS_CPU_HIT
;
5836 if (off_filter_mask
&
5837 IFLA_STATS_FILTER_BIT(attr_id_cpu_hit
)) {
5838 size
= rtnl_offload_xstats_get_size_ndo(dev
, attr_id_cpu_hit
);
5839 nla_size
+= nla_total_size_64bit(size
);
5842 if (off_filter_mask
&
5843 IFLA_STATS_FILTER_BIT(IFLA_OFFLOAD_XSTATS_HW_S_INFO
))
5844 nla_size
+= rtnl_offload_xstats_get_size_hw_s_info(dev
);
5846 if (off_filter_mask
&
5847 IFLA_STATS_FILTER_BIT(IFLA_OFFLOAD_XSTATS_L3_STATS
)) {
5848 size
= rtnl_offload_xstats_get_size_stats(dev
, t_l3
);
5849 nla_size
+= nla_total_size_64bit(size
);
5853 nla_size
+= nla_total_size(0);
5858 struct rtnl_stats_dump_filters
{
5859 /* mask[0] filters outer attributes. Then individual nests have their
5860 * filtering mask at the index of the nested attribute.
5862 u32 mask
[IFLA_STATS_MAX
+ 1];
5865 static int rtnl_fill_statsinfo(struct sk_buff
*skb
, struct net_device
*dev
,
5866 int type
, u32 pid
, u32 seq
, u32 change
,
5868 const struct rtnl_stats_dump_filters
*filters
,
5869 int *idxattr
, int *prividx
,
5870 struct netlink_ext_ack
*extack
)
5872 unsigned int filter_mask
= filters
->mask
[0];
5873 struct if_stats_msg
*ifsm
;
5874 struct nlmsghdr
*nlh
;
5875 struct nlattr
*attr
;
5876 int s_prividx
= *prividx
;
5881 nlh
= nlmsg_put(skb
, pid
, seq
, type
, sizeof(*ifsm
), flags
);
5885 ifsm
= nlmsg_data(nlh
);
5886 ifsm
->family
= PF_UNSPEC
;
5889 ifsm
->ifindex
= dev
->ifindex
;
5890 ifsm
->filter_mask
= filter_mask
;
5892 if (stats_attr_valid(filter_mask
, IFLA_STATS_LINK_64
, *idxattr
)) {
5893 struct rtnl_link_stats64
*sp
;
5895 attr
= nla_reserve_64bit(skb
, IFLA_STATS_LINK_64
,
5896 sizeof(struct rtnl_link_stats64
),
5900 goto nla_put_failure
;
5903 sp
= nla_data(attr
);
5904 dev_get_stats(dev
, sp
);
5907 if (stats_attr_valid(filter_mask
, IFLA_STATS_LINK_XSTATS
, *idxattr
)) {
5908 const struct rtnl_link_ops
*ops
= dev
->rtnl_link_ops
;
5910 if (ops
&& ops
->fill_linkxstats
) {
5911 *idxattr
= IFLA_STATS_LINK_XSTATS
;
5912 attr
= nla_nest_start_noflag(skb
,
5913 IFLA_STATS_LINK_XSTATS
);
5916 goto nla_put_failure
;
5919 err
= ops
->fill_linkxstats(skb
, dev
, prividx
, *idxattr
);
5920 nla_nest_end(skb
, attr
);
5922 goto nla_put_failure
;
5927 if (stats_attr_valid(filter_mask
, IFLA_STATS_LINK_XSTATS_SLAVE
,
5929 const struct rtnl_link_ops
*ops
= NULL
;
5930 const struct net_device
*master
;
5932 master
= netdev_master_upper_dev_get(dev
);
5934 ops
= master
->rtnl_link_ops
;
5935 if (ops
&& ops
->fill_linkxstats
) {
5936 *idxattr
= IFLA_STATS_LINK_XSTATS_SLAVE
;
5937 attr
= nla_nest_start_noflag(skb
,
5938 IFLA_STATS_LINK_XSTATS_SLAVE
);
5941 goto nla_put_failure
;
5944 err
= ops
->fill_linkxstats(skb
, dev
, prividx
, *idxattr
);
5945 nla_nest_end(skb
, attr
);
5947 goto nla_put_failure
;
5952 if (stats_attr_valid(filter_mask
, IFLA_STATS_LINK_OFFLOAD_XSTATS
,
5954 u32 off_filter_mask
;
5956 off_filter_mask
= filters
->mask
[IFLA_STATS_LINK_OFFLOAD_XSTATS
];
5957 *idxattr
= IFLA_STATS_LINK_OFFLOAD_XSTATS
;
5958 attr
= nla_nest_start_noflag(skb
,
5959 IFLA_STATS_LINK_OFFLOAD_XSTATS
);
5962 goto nla_put_failure
;
5965 err
= rtnl_offload_xstats_fill(skb
, dev
, prividx
,
5966 off_filter_mask
, extack
);
5967 if (err
== -ENODATA
)
5968 nla_nest_cancel(skb
, attr
);
5970 nla_nest_end(skb
, attr
);
5972 if (err
&& err
!= -ENODATA
)
5973 goto nla_put_failure
;
5977 if (stats_attr_valid(filter_mask
, IFLA_STATS_AF_SPEC
, *idxattr
)) {
5978 struct rtnl_af_ops
*af_ops
;
5980 *idxattr
= IFLA_STATS_AF_SPEC
;
5981 attr
= nla_nest_start_noflag(skb
, IFLA_STATS_AF_SPEC
);
5984 goto nla_put_failure
;
5988 list_for_each_entry_rcu(af_ops
, &rtnl_af_ops
, list
) {
5989 if (af_ops
->fill_stats_af
) {
5992 af
= nla_nest_start_noflag(skb
,
5997 goto nla_put_failure
;
5999 err
= af_ops
->fill_stats_af(skb
, dev
);
6001 if (err
== -ENODATA
) {
6002 nla_nest_cancel(skb
, af
);
6003 } else if (err
< 0) {
6005 goto nla_put_failure
;
6008 nla_nest_end(skb
, af
);
6013 nla_nest_end(skb
, attr
);
6018 nlmsg_end(skb
, nlh
);
6023 /* not a multi message or no progress mean a real error */
6024 if (!(flags
& NLM_F_MULTI
) || s_prividx
== *prividx
)
6025 nlmsg_cancel(skb
, nlh
);
6027 nlmsg_end(skb
, nlh
);
6032 static size_t if_nlmsg_stats_size(const struct net_device
*dev
,
6033 const struct rtnl_stats_dump_filters
*filters
)
6035 size_t size
= NLMSG_ALIGN(sizeof(struct if_stats_msg
));
6036 unsigned int filter_mask
= filters
->mask
[0];
6038 if (stats_attr_valid(filter_mask
, IFLA_STATS_LINK_64
, 0))
6039 size
+= nla_total_size_64bit(sizeof(struct rtnl_link_stats64
));
6041 if (stats_attr_valid(filter_mask
, IFLA_STATS_LINK_XSTATS
, 0)) {
6042 const struct rtnl_link_ops
*ops
= dev
->rtnl_link_ops
;
6043 int attr
= IFLA_STATS_LINK_XSTATS
;
6045 if (ops
&& ops
->get_linkxstats_size
) {
6046 size
+= nla_total_size(ops
->get_linkxstats_size(dev
,
6048 /* for IFLA_STATS_LINK_XSTATS */
6049 size
+= nla_total_size(0);
6053 if (stats_attr_valid(filter_mask
, IFLA_STATS_LINK_XSTATS_SLAVE
, 0)) {
6054 struct net_device
*_dev
= (struct net_device
*)dev
;
6055 const struct rtnl_link_ops
*ops
= NULL
;
6056 const struct net_device
*master
;
6058 /* netdev_master_upper_dev_get can't take const */
6059 master
= netdev_master_upper_dev_get(_dev
);
6061 ops
= master
->rtnl_link_ops
;
6062 if (ops
&& ops
->get_linkxstats_size
) {
6063 int attr
= IFLA_STATS_LINK_XSTATS_SLAVE
;
6065 size
+= nla_total_size(ops
->get_linkxstats_size(dev
,
6067 /* for IFLA_STATS_LINK_XSTATS_SLAVE */
6068 size
+= nla_total_size(0);
6072 if (stats_attr_valid(filter_mask
, IFLA_STATS_LINK_OFFLOAD_XSTATS
, 0)) {
6073 u32 off_filter_mask
;
6075 off_filter_mask
= filters
->mask
[IFLA_STATS_LINK_OFFLOAD_XSTATS
];
6076 size
+= rtnl_offload_xstats_get_size(dev
, off_filter_mask
);
6079 if (stats_attr_valid(filter_mask
, IFLA_STATS_AF_SPEC
, 0)) {
6080 struct rtnl_af_ops
*af_ops
;
6082 /* for IFLA_STATS_AF_SPEC */
6083 size
+= nla_total_size(0);
6086 list_for_each_entry_rcu(af_ops
, &rtnl_af_ops
, list
) {
6087 if (af_ops
->get_stats_af_size
) {
6088 size
+= nla_total_size(
6089 af_ops
->get_stats_af_size(dev
));
6092 size
+= nla_total_size(0);
6101 #define RTNL_STATS_OFFLOAD_XSTATS_VALID ((1 << __IFLA_OFFLOAD_XSTATS_MAX) - 1)
6103 static const struct nla_policy
6104 rtnl_stats_get_policy_filters
[IFLA_STATS_MAX
+ 1] = {
6105 [IFLA_STATS_LINK_OFFLOAD_XSTATS
] =
6106 NLA_POLICY_MASK(NLA_U32
, RTNL_STATS_OFFLOAD_XSTATS_VALID
),
6109 static const struct nla_policy
6110 rtnl_stats_get_policy
[IFLA_STATS_GETSET_MAX
+ 1] = {
6111 [IFLA_STATS_GET_FILTERS
] =
6112 NLA_POLICY_NESTED(rtnl_stats_get_policy_filters
),
6115 static const struct nla_policy
6116 ifla_stats_set_policy
[IFLA_STATS_GETSET_MAX
+ 1] = {
6117 [IFLA_STATS_SET_OFFLOAD_XSTATS_L3_STATS
] = NLA_POLICY_MAX(NLA_U8
, 1),
6120 static int rtnl_stats_get_parse_filters(struct nlattr
*ifla_filters
,
6121 struct rtnl_stats_dump_filters
*filters
,
6122 struct netlink_ext_ack
*extack
)
6124 struct nlattr
*tb
[IFLA_STATS_MAX
+ 1];
6128 err
= nla_parse_nested(tb
, IFLA_STATS_MAX
, ifla_filters
,
6129 rtnl_stats_get_policy_filters
, extack
);
6133 for (at
= 1; at
<= IFLA_STATS_MAX
; at
++) {
6135 if (!(filters
->mask
[0] & IFLA_STATS_FILTER_BIT(at
))) {
6136 NL_SET_ERR_MSG(extack
, "Filtered attribute not enabled in filter_mask");
6139 filters
->mask
[at
] = nla_get_u32(tb
[at
]);
6146 static int rtnl_stats_get_parse(const struct nlmsghdr
*nlh
,
6148 struct rtnl_stats_dump_filters
*filters
,
6149 struct netlink_ext_ack
*extack
)
6151 struct nlattr
*tb
[IFLA_STATS_GETSET_MAX
+ 1];
6155 filters
->mask
[0] = filter_mask
;
6156 for (i
= 1; i
< ARRAY_SIZE(filters
->mask
); i
++)
6157 filters
->mask
[i
] = -1U;
6159 err
= nlmsg_parse(nlh
, sizeof(struct if_stats_msg
), tb
,
6160 IFLA_STATS_GETSET_MAX
, rtnl_stats_get_policy
, extack
);
6164 if (tb
[IFLA_STATS_GET_FILTERS
]) {
6165 err
= rtnl_stats_get_parse_filters(tb
[IFLA_STATS_GET_FILTERS
],
6174 static int rtnl_valid_stats_req(const struct nlmsghdr
*nlh
, bool strict_check
,
6175 bool is_dump
, struct netlink_ext_ack
*extack
)
6177 struct if_stats_msg
*ifsm
;
6179 if (nlh
->nlmsg_len
< nlmsg_msg_size(sizeof(*ifsm
))) {
6180 NL_SET_ERR_MSG(extack
, "Invalid header for stats dump");
6187 ifsm
= nlmsg_data(nlh
);
6189 /* only requests using strict checks can pass data to influence
6190 * the dump. The legacy exception is filter_mask.
6192 if (ifsm
->pad1
|| ifsm
->pad2
|| (is_dump
&& ifsm
->ifindex
)) {
6193 NL_SET_ERR_MSG(extack
, "Invalid values in header for stats dump request");
6196 if (ifsm
->filter_mask
>= IFLA_STATS_FILTER_BIT(IFLA_STATS_MAX
+ 1)) {
6197 NL_SET_ERR_MSG(extack
, "Invalid stats requested through filter mask");
6204 static int rtnl_stats_get(struct sk_buff
*skb
, struct nlmsghdr
*nlh
,
6205 struct netlink_ext_ack
*extack
)
6207 struct rtnl_stats_dump_filters filters
;
6208 struct net
*net
= sock_net(skb
->sk
);
6209 struct net_device
*dev
= NULL
;
6210 int idxattr
= 0, prividx
= 0;
6211 struct if_stats_msg
*ifsm
;
6212 struct sk_buff
*nskb
;
6215 err
= rtnl_valid_stats_req(nlh
, netlink_strict_get_check(skb
),
6220 ifsm
= nlmsg_data(nlh
);
6221 if (ifsm
->ifindex
> 0)
6222 dev
= __dev_get_by_index(net
, ifsm
->ifindex
);
6229 if (!ifsm
->filter_mask
) {
6230 NL_SET_ERR_MSG(extack
, "Filter mask must be set for stats get");
6234 err
= rtnl_stats_get_parse(nlh
, ifsm
->filter_mask
, &filters
, extack
);
6238 nskb
= nlmsg_new(if_nlmsg_stats_size(dev
, &filters
), GFP_KERNEL
);
6242 err
= rtnl_fill_statsinfo(nskb
, dev
, RTM_NEWSTATS
,
6243 NETLINK_CB(skb
).portid
, nlh
->nlmsg_seq
, 0,
6244 0, &filters
, &idxattr
, &prividx
, extack
);
6246 /* -EMSGSIZE implies BUG in if_nlmsg_stats_size */
6247 WARN_ON(err
== -EMSGSIZE
);
6250 err
= rtnl_unicast(nskb
, net
, NETLINK_CB(skb
).portid
);
6256 static int rtnl_stats_dump(struct sk_buff
*skb
, struct netlink_callback
*cb
)
6258 struct netlink_ext_ack
*extack
= cb
->extack
;
6259 struct rtnl_stats_dump_filters filters
;
6260 struct net
*net
= sock_net(skb
->sk
);
6261 unsigned int flags
= NLM_F_MULTI
;
6262 struct if_stats_msg
*ifsm
;
6264 unsigned long ifindex
;
6267 } *ctx
= (void *)cb
->ctx
;
6268 struct net_device
*dev
;
6271 cb
->seq
= net
->dev_base_seq
;
6273 err
= rtnl_valid_stats_req(cb
->nlh
, cb
->strict_check
, true, extack
);
6277 ifsm
= nlmsg_data(cb
->nlh
);
6278 if (!ifsm
->filter_mask
) {
6279 NL_SET_ERR_MSG(extack
, "Filter mask must be set for stats dump");
6283 err
= rtnl_stats_get_parse(cb
->nlh
, ifsm
->filter_mask
, &filters
,
6288 for_each_netdev_dump(net
, dev
, ctx
->ifindex
) {
6289 err
= rtnl_fill_statsinfo(skb
, dev
, RTM_NEWSTATS
,
6290 NETLINK_CB(cb
->skb
).portid
,
6291 cb
->nlh
->nlmsg_seq
, 0,
6293 &ctx
->idxattr
, &ctx
->prividx
,
6295 /* If we ran out of room on the first message,
6298 WARN_ON((err
== -EMSGSIZE
) && (skb
->len
== 0));
6304 nl_dump_check_consistent(cb
, nlmsg_hdr(skb
));
6310 void rtnl_offload_xstats_notify(struct net_device
*dev
)
6312 struct rtnl_stats_dump_filters response_filters
= {};
6313 struct net
*net
= dev_net(dev
);
6314 int idxattr
= 0, prividx
= 0;
6315 struct sk_buff
*skb
;
6320 response_filters
.mask
[0] |=
6321 IFLA_STATS_FILTER_BIT(IFLA_STATS_LINK_OFFLOAD_XSTATS
);
6322 response_filters
.mask
[IFLA_STATS_LINK_OFFLOAD_XSTATS
] |=
6323 IFLA_STATS_FILTER_BIT(IFLA_OFFLOAD_XSTATS_HW_S_INFO
);
6325 skb
= nlmsg_new(if_nlmsg_stats_size(dev
, &response_filters
),
6330 err
= rtnl_fill_statsinfo(skb
, dev
, RTM_NEWSTATS
, 0, 0, 0, 0,
6331 &response_filters
, &idxattr
, &prividx
, NULL
);
6337 rtnl_notify(skb
, net
, 0, RTNLGRP_STATS
, NULL
, GFP_KERNEL
);
6341 rtnl_set_sk_err(net
, RTNLGRP_STATS
, err
);
6343 EXPORT_SYMBOL(rtnl_offload_xstats_notify
);
6345 static int rtnl_stats_set(struct sk_buff
*skb
, struct nlmsghdr
*nlh
,
6346 struct netlink_ext_ack
*extack
)
6348 enum netdev_offload_xstats_type t_l3
= NETDEV_OFFLOAD_XSTATS_TYPE_L3
;
6349 struct rtnl_stats_dump_filters response_filters
= {};
6350 struct nlattr
*tb
[IFLA_STATS_GETSET_MAX
+ 1];
6351 struct net
*net
= sock_net(skb
->sk
);
6352 struct net_device
*dev
= NULL
;
6353 struct if_stats_msg
*ifsm
;
6354 bool notify
= false;
6357 err
= rtnl_valid_stats_req(nlh
, netlink_strict_get_check(skb
),
6362 ifsm
= nlmsg_data(nlh
);
6363 if (ifsm
->family
!= AF_UNSPEC
) {
6364 NL_SET_ERR_MSG(extack
, "Address family should be AF_UNSPEC");
6368 if (ifsm
->ifindex
> 0)
6369 dev
= __dev_get_by_index(net
, ifsm
->ifindex
);
6376 if (ifsm
->filter_mask
) {
6377 NL_SET_ERR_MSG(extack
, "Filter mask must be 0 for stats set");
6381 err
= nlmsg_parse(nlh
, sizeof(*ifsm
), tb
, IFLA_STATS_GETSET_MAX
,
6382 ifla_stats_set_policy
, extack
);
6386 if (tb
[IFLA_STATS_SET_OFFLOAD_XSTATS_L3_STATS
]) {
6387 u8 req
= nla_get_u8(tb
[IFLA_STATS_SET_OFFLOAD_XSTATS_L3_STATS
]);
6390 err
= netdev_offload_xstats_enable(dev
, t_l3
, extack
);
6392 err
= netdev_offload_xstats_disable(dev
, t_l3
);
6396 else if (err
!= -EALREADY
)
6399 response_filters
.mask
[0] |=
6400 IFLA_STATS_FILTER_BIT(IFLA_STATS_LINK_OFFLOAD_XSTATS
);
6401 response_filters
.mask
[IFLA_STATS_LINK_OFFLOAD_XSTATS
] |=
6402 IFLA_STATS_FILTER_BIT(IFLA_OFFLOAD_XSTATS_HW_S_INFO
);
6406 rtnl_offload_xstats_notify(dev
);
6411 static int rtnl_mdb_valid_dump_req(const struct nlmsghdr
*nlh
,
6412 struct netlink_ext_ack
*extack
)
6414 struct br_port_msg
*bpm
;
6416 if (nlh
->nlmsg_len
< nlmsg_msg_size(sizeof(*bpm
))) {
6417 NL_SET_ERR_MSG(extack
, "Invalid header for mdb dump request");
6421 bpm
= nlmsg_data(nlh
);
6423 NL_SET_ERR_MSG(extack
, "Filtering by device index is not supported for mdb dump request");
6426 if (nlmsg_attrlen(nlh
, sizeof(*bpm
))) {
6427 NL_SET_ERR_MSG(extack
, "Invalid data after header in mdb dump request");
6434 struct rtnl_mdb_dump_ctx
{
6438 static int rtnl_mdb_dump(struct sk_buff
*skb
, struct netlink_callback
*cb
)
6440 struct rtnl_mdb_dump_ctx
*ctx
= (void *)cb
->ctx
;
6441 struct net
*net
= sock_net(skb
->sk
);
6442 struct net_device
*dev
;
6446 NL_ASSERT_CTX_FITS(struct rtnl_mdb_dump_ctx
);
6448 if (cb
->strict_check
) {
6449 err
= rtnl_mdb_valid_dump_req(cb
->nlh
, cb
->extack
);
6457 for_each_netdev(net
, dev
) {
6460 if (!dev
->netdev_ops
->ndo_mdb_dump
)
6463 err
= dev
->netdev_ops
->ndo_mdb_dump(dev
, skb
, cb
);
6464 if (err
== -EMSGSIZE
)
6466 /* Moving on to next device, reset markers and sequence
6467 * counters since they are all maintained per-device.
6469 memset(cb
->ctx
, 0, sizeof(cb
->ctx
));
6481 static int rtnl_validate_mdb_entry_get(const struct nlattr
*attr
,
6482 struct netlink_ext_ack
*extack
)
6484 struct br_mdb_entry
*entry
= nla_data(attr
);
6486 if (nla_len(attr
) != sizeof(struct br_mdb_entry
)) {
6487 NL_SET_ERR_MSG_ATTR(extack
, attr
, "Invalid attribute length");
6491 if (entry
->ifindex
) {
6492 NL_SET_ERR_MSG(extack
, "Entry ifindex cannot be specified");
6497 NL_SET_ERR_MSG(extack
, "Entry state cannot be specified");
6502 NL_SET_ERR_MSG(extack
, "Entry flags cannot be specified");
6506 if (entry
->vid
>= VLAN_VID_MASK
) {
6507 NL_SET_ERR_MSG(extack
, "Invalid entry VLAN id");
6511 if (entry
->addr
.proto
!= htons(ETH_P_IP
) &&
6512 entry
->addr
.proto
!= htons(ETH_P_IPV6
) &&
6513 entry
->addr
.proto
!= 0) {
6514 NL_SET_ERR_MSG(extack
, "Unknown entry protocol");
6521 static const struct nla_policy mdba_get_policy
[MDBA_GET_ENTRY_MAX
+ 1] = {
6522 [MDBA_GET_ENTRY
] = NLA_POLICY_VALIDATE_FN(NLA_BINARY
,
6523 rtnl_validate_mdb_entry_get
,
6524 sizeof(struct br_mdb_entry
)),
6525 [MDBA_GET_ENTRY_ATTRS
] = { .type
= NLA_NESTED
},
6528 static int rtnl_mdb_get(struct sk_buff
*in_skb
, struct nlmsghdr
*nlh
,
6529 struct netlink_ext_ack
*extack
)
6531 struct nlattr
*tb
[MDBA_GET_ENTRY_MAX
+ 1];
6532 struct net
*net
= sock_net(in_skb
->sk
);
6533 struct br_port_msg
*bpm
;
6534 struct net_device
*dev
;
6537 err
= nlmsg_parse(nlh
, sizeof(struct br_port_msg
), tb
,
6538 MDBA_GET_ENTRY_MAX
, mdba_get_policy
, extack
);
6542 bpm
= nlmsg_data(nlh
);
6543 if (!bpm
->ifindex
) {
6544 NL_SET_ERR_MSG(extack
, "Invalid ifindex");
6548 dev
= __dev_get_by_index(net
, bpm
->ifindex
);
6550 NL_SET_ERR_MSG(extack
, "Device doesn't exist");
6554 if (NL_REQ_ATTR_CHECK(extack
, NULL
, tb
, MDBA_GET_ENTRY
)) {
6555 NL_SET_ERR_MSG(extack
, "Missing MDBA_GET_ENTRY attribute");
6559 if (!dev
->netdev_ops
->ndo_mdb_get
) {
6560 NL_SET_ERR_MSG(extack
, "Device does not support MDB operations");
6564 return dev
->netdev_ops
->ndo_mdb_get(dev
, tb
, NETLINK_CB(in_skb
).portid
,
6565 nlh
->nlmsg_seq
, extack
);
6568 static int rtnl_validate_mdb_entry(const struct nlattr
*attr
,
6569 struct netlink_ext_ack
*extack
)
6571 struct br_mdb_entry
*entry
= nla_data(attr
);
6573 if (nla_len(attr
) != sizeof(struct br_mdb_entry
)) {
6574 NL_SET_ERR_MSG_ATTR(extack
, attr
, "Invalid attribute length");
6578 if (entry
->ifindex
== 0) {
6579 NL_SET_ERR_MSG(extack
, "Zero entry ifindex is not allowed");
6583 if (entry
->addr
.proto
== htons(ETH_P_IP
)) {
6584 if (!ipv4_is_multicast(entry
->addr
.u
.ip4
) &&
6585 !ipv4_is_zeronet(entry
->addr
.u
.ip4
)) {
6586 NL_SET_ERR_MSG(extack
, "IPv4 entry group address is not multicast or 0.0.0.0");
6589 if (ipv4_is_local_multicast(entry
->addr
.u
.ip4
)) {
6590 NL_SET_ERR_MSG(extack
, "IPv4 entry group address is local multicast");
6593 #if IS_ENABLED(CONFIG_IPV6)
6594 } else if (entry
->addr
.proto
== htons(ETH_P_IPV6
)) {
6595 if (ipv6_addr_is_ll_all_nodes(&entry
->addr
.u
.ip6
)) {
6596 NL_SET_ERR_MSG(extack
, "IPv6 entry group address is link-local all nodes");
6600 } else if (entry
->addr
.proto
== 0) {
6602 if (!is_multicast_ether_addr(entry
->addr
.u
.mac_addr
)) {
6603 NL_SET_ERR_MSG(extack
, "L2 entry group is not multicast");
6607 NL_SET_ERR_MSG(extack
, "Unknown entry protocol");
6611 if (entry
->state
!= MDB_PERMANENT
&& entry
->state
!= MDB_TEMPORARY
) {
6612 NL_SET_ERR_MSG(extack
, "Unknown entry state");
6615 if (entry
->vid
>= VLAN_VID_MASK
) {
6616 NL_SET_ERR_MSG(extack
, "Invalid entry VLAN id");
6623 static const struct nla_policy mdba_policy
[MDBA_SET_ENTRY_MAX
+ 1] = {
6624 [MDBA_SET_ENTRY_UNSPEC
] = { .strict_start_type
= MDBA_SET_ENTRY_ATTRS
+ 1 },
6625 [MDBA_SET_ENTRY
] = NLA_POLICY_VALIDATE_FN(NLA_BINARY
,
6626 rtnl_validate_mdb_entry
,
6627 sizeof(struct br_mdb_entry
)),
6628 [MDBA_SET_ENTRY_ATTRS
] = { .type
= NLA_NESTED
},
6631 static int rtnl_mdb_add(struct sk_buff
*skb
, struct nlmsghdr
*nlh
,
6632 struct netlink_ext_ack
*extack
)
6634 struct nlattr
*tb
[MDBA_SET_ENTRY_MAX
+ 1];
6635 struct net
*net
= sock_net(skb
->sk
);
6636 struct br_port_msg
*bpm
;
6637 struct net_device
*dev
;
6640 err
= nlmsg_parse_deprecated(nlh
, sizeof(*bpm
), tb
,
6641 MDBA_SET_ENTRY_MAX
, mdba_policy
, extack
);
6645 bpm
= nlmsg_data(nlh
);
6646 if (!bpm
->ifindex
) {
6647 NL_SET_ERR_MSG(extack
, "Invalid ifindex");
6651 dev
= __dev_get_by_index(net
, bpm
->ifindex
);
6653 NL_SET_ERR_MSG(extack
, "Device doesn't exist");
6657 if (NL_REQ_ATTR_CHECK(extack
, NULL
, tb
, MDBA_SET_ENTRY
)) {
6658 NL_SET_ERR_MSG(extack
, "Missing MDBA_SET_ENTRY attribute");
6662 if (!dev
->netdev_ops
->ndo_mdb_add
) {
6663 NL_SET_ERR_MSG(extack
, "Device does not support MDB operations");
6667 return dev
->netdev_ops
->ndo_mdb_add(dev
, tb
, nlh
->nlmsg_flags
, extack
);
6670 static int rtnl_validate_mdb_entry_del_bulk(const struct nlattr
*attr
,
6671 struct netlink_ext_ack
*extack
)
6673 struct br_mdb_entry
*entry
= nla_data(attr
);
6674 struct br_mdb_entry zero_entry
= {};
6676 if (nla_len(attr
) != sizeof(struct br_mdb_entry
)) {
6677 NL_SET_ERR_MSG_ATTR(extack
, attr
, "Invalid attribute length");
6681 if (entry
->state
!= MDB_PERMANENT
&& entry
->state
!= MDB_TEMPORARY
) {
6682 NL_SET_ERR_MSG(extack
, "Unknown entry state");
6687 NL_SET_ERR_MSG(extack
, "Entry flags cannot be set");
6691 if (entry
->vid
>= VLAN_N_VID
- 1) {
6692 NL_SET_ERR_MSG(extack
, "Invalid entry VLAN id");
6696 if (memcmp(&entry
->addr
, &zero_entry
.addr
, sizeof(entry
->addr
))) {
6697 NL_SET_ERR_MSG(extack
, "Entry address cannot be set");
6704 static const struct nla_policy mdba_del_bulk_policy
[MDBA_SET_ENTRY_MAX
+ 1] = {
6705 [MDBA_SET_ENTRY
] = NLA_POLICY_VALIDATE_FN(NLA_BINARY
,
6706 rtnl_validate_mdb_entry_del_bulk
,
6707 sizeof(struct br_mdb_entry
)),
6708 [MDBA_SET_ENTRY_ATTRS
] = { .type
= NLA_NESTED
},
6711 static int rtnl_mdb_del(struct sk_buff
*skb
, struct nlmsghdr
*nlh
,
6712 struct netlink_ext_ack
*extack
)
6714 bool del_bulk
= !!(nlh
->nlmsg_flags
& NLM_F_BULK
);
6715 struct nlattr
*tb
[MDBA_SET_ENTRY_MAX
+ 1];
6716 struct net
*net
= sock_net(skb
->sk
);
6717 struct br_port_msg
*bpm
;
6718 struct net_device
*dev
;
6722 err
= nlmsg_parse_deprecated(nlh
, sizeof(*bpm
), tb
,
6723 MDBA_SET_ENTRY_MAX
, mdba_policy
,
6726 err
= nlmsg_parse(nlh
, sizeof(*bpm
), tb
, MDBA_SET_ENTRY_MAX
,
6727 mdba_del_bulk_policy
, extack
);
6731 bpm
= nlmsg_data(nlh
);
6732 if (!bpm
->ifindex
) {
6733 NL_SET_ERR_MSG(extack
, "Invalid ifindex");
6737 dev
= __dev_get_by_index(net
, bpm
->ifindex
);
6739 NL_SET_ERR_MSG(extack
, "Device doesn't exist");
6743 if (NL_REQ_ATTR_CHECK(extack
, NULL
, tb
, MDBA_SET_ENTRY
)) {
6744 NL_SET_ERR_MSG(extack
, "Missing MDBA_SET_ENTRY attribute");
6749 if (!dev
->netdev_ops
->ndo_mdb_del_bulk
) {
6750 NL_SET_ERR_MSG(extack
, "Device does not support MDB bulk deletion");
6753 return dev
->netdev_ops
->ndo_mdb_del_bulk(dev
, tb
, extack
);
6756 if (!dev
->netdev_ops
->ndo_mdb_del
) {
6757 NL_SET_ERR_MSG(extack
, "Device does not support MDB operations");
6761 return dev
->netdev_ops
->ndo_mdb_del(dev
, tb
, extack
);
6764 /* Process one rtnetlink message. */
6766 static int rtnl_dumpit(struct sk_buff
*skb
, struct netlink_callback
*cb
)
6768 const bool needs_lock
= !(cb
->flags
& RTNL_FLAG_DUMP_UNLOCKED
);
6769 rtnl_dumpit_func dumpit
= cb
->data
;
6772 /* Previous iteration have already finished, avoid calling->dumpit()
6773 * again, it may not expect to be called after it reached the end.
6780 err
= dumpit(skb
, cb
);
6784 /* Old dump handlers used to send NLM_DONE as in a separate recvmsg().
6785 * Some applications which parse netlink manually depend on this.
6787 if (cb
->flags
& RTNL_FLAG_DUMP_SPLIT_NLM_DONE
) {
6788 if (err
< 0 && err
!= -EMSGSIZE
)
6798 static int rtnetlink_dump_start(struct sock
*ssk
, struct sk_buff
*skb
,
6799 const struct nlmsghdr
*nlh
,
6800 struct netlink_dump_control
*control
)
6802 if (control
->flags
& RTNL_FLAG_DUMP_SPLIT_NLM_DONE
||
6803 !(control
->flags
& RTNL_FLAG_DUMP_UNLOCKED
)) {
6804 WARN_ON(control
->data
);
6805 control
->data
= control
->dump
;
6806 control
->dump
= rtnl_dumpit
;
6809 return netlink_dump_start(ssk
, skb
, nlh
, control
);
6812 static int rtnetlink_rcv_msg(struct sk_buff
*skb
, struct nlmsghdr
*nlh
,
6813 struct netlink_ext_ack
*extack
)
6815 struct net
*net
= sock_net(skb
->sk
);
6816 struct rtnl_link
*link
;
6817 enum rtnl_kinds kind
;
6818 struct module
*owner
;
6819 int err
= -EOPNOTSUPP
;
6820 rtnl_doit_func doit
;
6825 type
= nlh
->nlmsg_type
;
6831 /* All the messages must have at least 1 byte length */
6832 if (nlmsg_len(nlh
) < sizeof(struct rtgenmsg
))
6835 family
= ((struct rtgenmsg
*)nlmsg_data(nlh
))->rtgen_family
;
6836 kind
= rtnl_msgtype_kind(type
);
6838 if (kind
!= RTNL_KIND_GET
&& !netlink_net_capable(skb
, CAP_NET_ADMIN
))
6842 if (kind
== RTNL_KIND_GET
&& (nlh
->nlmsg_flags
& NLM_F_DUMP
)) {
6844 rtnl_dumpit_func dumpit
;
6845 u32 min_dump_alloc
= 0;
6847 link
= rtnl_get_link(family
, type
);
6848 if (!link
|| !link
->dumpit
) {
6850 link
= rtnl_get_link(family
, type
);
6851 if (!link
|| !link
->dumpit
)
6854 owner
= link
->owner
;
6855 dumpit
= link
->dumpit
;
6856 flags
= link
->flags
;
6858 if (type
== RTM_GETLINK
- RTM_BASE
)
6859 min_dump_alloc
= rtnl_calcit(skb
, nlh
);
6862 /* need to do this before rcu_read_unlock() */
6863 if (!try_module_get(owner
))
6864 err
= -EPROTONOSUPPORT
;
6870 struct netlink_dump_control c
= {
6872 .min_dump_alloc
= min_dump_alloc
,
6876 err
= rtnetlink_dump_start(rtnl
, skb
, nlh
, &c
);
6877 /* netlink_dump_start() will keep a reference on
6878 * module if dump is still in progress.
6885 link
= rtnl_get_link(family
, type
);
6886 if (!link
|| !link
->doit
) {
6888 link
= rtnl_get_link(PF_UNSPEC
, type
);
6889 if (!link
|| !link
->doit
)
6893 owner
= link
->owner
;
6894 if (!try_module_get(owner
)) {
6895 err
= -EPROTONOSUPPORT
;
6899 flags
= link
->flags
;
6900 if (kind
== RTNL_KIND_DEL
&& (nlh
->nlmsg_flags
& NLM_F_BULK
) &&
6901 !(flags
& RTNL_FLAG_BULK_DEL_SUPPORTED
)) {
6902 NL_SET_ERR_MSG(extack
, "Bulk delete is not supported");
6907 if (flags
& RTNL_FLAG_DOIT_UNLOCKED
) {
6911 err
= doit(skb
, nlh
, extack
);
6918 link
= rtnl_get_link(family
, type
);
6919 if (link
&& link
->doit
)
6920 err
= link
->doit(skb
, nlh
, extack
);
6936 static void rtnetlink_rcv(struct sk_buff
*skb
)
6938 netlink_rcv_skb(skb
, &rtnetlink_rcv_msg
);
6941 static int rtnetlink_bind(struct net
*net
, int group
)
6944 case RTNLGRP_IPV4_MROUTE_R
:
6945 case RTNLGRP_IPV6_MROUTE_R
:
6946 if (!ns_capable(net
->user_ns
, CAP_NET_ADMIN
))
6953 static int rtnetlink_event(struct notifier_block
*this, unsigned long event
, void *ptr
)
6955 struct net_device
*dev
= netdev_notifier_info_to_dev(ptr
);
6959 case NETDEV_CHANGEMTU
:
6960 case NETDEV_CHANGEADDR
:
6961 case NETDEV_CHANGENAME
:
6962 case NETDEV_FEAT_CHANGE
:
6963 case NETDEV_BONDING_FAILOVER
:
6964 case NETDEV_POST_TYPE_CHANGE
:
6965 case NETDEV_NOTIFY_PEERS
:
6966 case NETDEV_CHANGEUPPER
:
6967 case NETDEV_RESEND_IGMP
:
6968 case NETDEV_CHANGEINFODATA
:
6969 case NETDEV_CHANGELOWERSTATE
:
6970 case NETDEV_CHANGE_TX_QUEUE_LEN
:
6971 rtmsg_ifinfo_event(RTM_NEWLINK
, dev
, 0, rtnl_get_event(event
),
6972 GFP_KERNEL
, NULL
, 0, 0, NULL
);
6980 static struct notifier_block rtnetlink_dev_notifier
= {
6981 .notifier_call
= rtnetlink_event
,
6985 static int __net_init
rtnetlink_net_init(struct net
*net
)
6988 struct netlink_kernel_cfg cfg
= {
6989 .groups
= RTNLGRP_MAX
,
6990 .input
= rtnetlink_rcv
,
6991 .flags
= NL_CFG_F_NONROOT_RECV
,
6992 .bind
= rtnetlink_bind
,
6995 sk
= netlink_kernel_create(net
, NETLINK_ROUTE
, &cfg
);
7002 static void __net_exit
rtnetlink_net_exit(struct net
*net
)
7004 netlink_kernel_release(net
->rtnl
);
7008 static struct pernet_operations rtnetlink_net_ops
= {
7009 .init
= rtnetlink_net_init
,
7010 .exit
= rtnetlink_net_exit
,
7013 static const struct rtnl_msg_handler rtnetlink_rtnl_msg_handlers
[] __initconst
= {
7014 {.msgtype
= RTM_NEWLINK
, .doit
= rtnl_newlink
,
7015 .flags
= RTNL_FLAG_DOIT_PERNET
},
7016 {.msgtype
= RTM_DELLINK
, .doit
= rtnl_dellink
,
7017 .flags
= RTNL_FLAG_DOIT_PERNET_WIP
},
7018 {.msgtype
= RTM_GETLINK
, .doit
= rtnl_getlink
,
7019 .dumpit
= rtnl_dump_ifinfo
, .flags
= RTNL_FLAG_DUMP_SPLIT_NLM_DONE
},
7020 {.msgtype
= RTM_SETLINK
, .doit
= rtnl_setlink
,
7021 .flags
= RTNL_FLAG_DOIT_PERNET_WIP
},
7022 {.msgtype
= RTM_GETADDR
, .dumpit
= rtnl_dump_all
},
7023 {.msgtype
= RTM_GETROUTE
, .dumpit
= rtnl_dump_all
},
7024 {.msgtype
= RTM_GETNETCONF
, .dumpit
= rtnl_dump_all
},
7025 {.msgtype
= RTM_GETSTATS
, .doit
= rtnl_stats_get
,
7026 .dumpit
= rtnl_stats_dump
},
7027 {.msgtype
= RTM_SETSTATS
, .doit
= rtnl_stats_set
},
7028 {.msgtype
= RTM_NEWLINKPROP
, .doit
= rtnl_newlinkprop
},
7029 {.msgtype
= RTM_DELLINKPROP
, .doit
= rtnl_dellinkprop
},
7030 {.protocol
= PF_BRIDGE
, .msgtype
= RTM_GETLINK
,
7031 .dumpit
= rtnl_bridge_getlink
},
7032 {.protocol
= PF_BRIDGE
, .msgtype
= RTM_DELLINK
,
7033 .doit
= rtnl_bridge_dellink
},
7034 {.protocol
= PF_BRIDGE
, .msgtype
= RTM_SETLINK
,
7035 .doit
= rtnl_bridge_setlink
},
7036 {.protocol
= PF_BRIDGE
, .msgtype
= RTM_NEWNEIGH
, .doit
= rtnl_fdb_add
},
7037 {.protocol
= PF_BRIDGE
, .msgtype
= RTM_DELNEIGH
, .doit
= rtnl_fdb_del
,
7038 .flags
= RTNL_FLAG_BULK_DEL_SUPPORTED
},
7039 {.protocol
= PF_BRIDGE
, .msgtype
= RTM_GETNEIGH
, .doit
= rtnl_fdb_get
,
7040 .dumpit
= rtnl_fdb_dump
},
7041 {.protocol
= PF_BRIDGE
, .msgtype
= RTM_NEWMDB
, .doit
= rtnl_mdb_add
},
7042 {.protocol
= PF_BRIDGE
, .msgtype
= RTM_DELMDB
, .doit
= rtnl_mdb_del
,
7043 .flags
= RTNL_FLAG_BULK_DEL_SUPPORTED
},
7044 {.protocol
= PF_BRIDGE
, .msgtype
= RTM_GETMDB
, .doit
= rtnl_mdb_get
,
7045 .dumpit
= rtnl_mdb_dump
},
7048 void __init
rtnetlink_init(void)
7050 if (register_pernet_subsys(&rtnetlink_net_ops
))
7051 panic("rtnetlink_init: cannot initialize rtnetlink\n");
7053 register_netdevice_notifier(&rtnetlink_dev_notifier
);
7055 rtnl_register_many(rtnetlink_rtnl_msg_handlers
);