2 * Copyright (C) 2017 Netronome Systems, Inc.
4 * This software is licensed under the GNU General License Version 2,
5 * June 1991 as shown in the file COPYING in the top-level directory of this
8 * THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS"
9 * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
10 * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
11 * FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE
12 * OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME
13 * THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16 #include <linux/debugfs.h>
17 #include <linux/etherdevice.h>
18 #include <linux/kernel.h>
19 #include <linux/module.h>
20 #include <linux/netdevice.h>
21 #include <linux/slab.h>
22 #include <net/netdev_queues.h>
23 #include <net/page_pool/helpers.h>
24 #include <net/netlink.h>
25 #include <net/net_shaper.h>
26 #include <net/pkt_cls.h>
27 #include <net/rtnetlink.h>
28 #include <net/udp_tunnel.h>
30 #include "netdevsim.h"
32 #define NSIM_RING_SIZE 256
34 static int nsim_napi_rx(struct nsim_rq
*rq
, struct sk_buff
*skb
)
36 if (skb_queue_len(&rq
->skb_queue
) > NSIM_RING_SIZE
) {
37 dev_kfree_skb_any(skb
);
41 skb_queue_tail(&rq
->skb_queue
, skb
);
42 return NET_RX_SUCCESS
;
45 static int nsim_forward_skb(struct net_device
*dev
, struct sk_buff
*skb
,
48 return __dev_forward_skb(dev
, skb
) ?: nsim_napi_rx(rq
, skb
);
51 static netdev_tx_t
nsim_start_xmit(struct sk_buff
*skb
, struct net_device
*dev
)
53 struct netdevsim
*ns
= netdev_priv(dev
);
54 struct net_device
*peer_dev
;
55 unsigned int len
= skb
->len
;
56 struct netdevsim
*peer_ns
;
61 if (!nsim_ipsec_tx(ns
, skb
))
64 peer_ns
= rcu_dereference(ns
->peer
);
68 peer_dev
= peer_ns
->netdev
;
69 rxq
= skb_get_queue_mapping(skb
);
70 if (rxq
>= peer_dev
->num_rx_queues
)
71 rxq
= rxq
% peer_dev
->num_rx_queues
;
72 rq
= &peer_ns
->rq
[rxq
];
74 skb_tx_timestamp(skb
);
75 if (unlikely(nsim_forward_skb(peer_dev
, skb
, rq
) == NET_RX_DROP
))
78 napi_schedule(&rq
->napi
);
81 u64_stats_update_begin(&ns
->syncp
);
84 u64_stats_update_end(&ns
->syncp
);
91 u64_stats_update_begin(&ns
->syncp
);
93 u64_stats_update_end(&ns
->syncp
);
97 static void nsim_set_rx_mode(struct net_device
*dev
)
101 static int nsim_change_mtu(struct net_device
*dev
, int new_mtu
)
103 struct netdevsim
*ns
= netdev_priv(dev
);
105 if (ns
->xdp
.prog
&& new_mtu
> NSIM_XDP_MAX_MTU
)
108 WRITE_ONCE(dev
->mtu
, new_mtu
);
114 nsim_get_stats64(struct net_device
*dev
, struct rtnl_link_stats64
*stats
)
116 struct netdevsim
*ns
= netdev_priv(dev
);
120 start
= u64_stats_fetch_begin(&ns
->syncp
);
121 stats
->tx_bytes
= ns
->tx_bytes
;
122 stats
->tx_packets
= ns
->tx_packets
;
123 stats
->tx_dropped
= ns
->tx_dropped
;
124 } while (u64_stats_fetch_retry(&ns
->syncp
, start
));
128 nsim_setup_tc_block_cb(enum tc_setup_type type
, void *type_data
, void *cb_priv
)
130 return nsim_bpf_setup_tc_block_cb(type
, type_data
, cb_priv
);
133 static int nsim_set_vf_mac(struct net_device
*dev
, int vf
, u8
*mac
)
135 struct netdevsim
*ns
= netdev_priv(dev
);
136 struct nsim_dev
*nsim_dev
= ns
->nsim_dev
;
138 /* Only refuse multicast addresses, zero address can mean unset/any. */
139 if (vf
>= nsim_dev_get_vfs(nsim_dev
) || is_multicast_ether_addr(mac
))
141 memcpy(nsim_dev
->vfconfigs
[vf
].vf_mac
, mac
, ETH_ALEN
);
146 static int nsim_set_vf_vlan(struct net_device
*dev
, int vf
,
147 u16 vlan
, u8 qos
, __be16 vlan_proto
)
149 struct netdevsim
*ns
= netdev_priv(dev
);
150 struct nsim_dev
*nsim_dev
= ns
->nsim_dev
;
152 if (vf
>= nsim_dev_get_vfs(nsim_dev
) || vlan
> 4095 || qos
> 7)
155 nsim_dev
->vfconfigs
[vf
].vlan
= vlan
;
156 nsim_dev
->vfconfigs
[vf
].qos
= qos
;
157 nsim_dev
->vfconfigs
[vf
].vlan_proto
= vlan_proto
;
162 static int nsim_set_vf_rate(struct net_device
*dev
, int vf
, int min
, int max
)
164 struct netdevsim
*ns
= netdev_priv(dev
);
165 struct nsim_dev
*nsim_dev
= ns
->nsim_dev
;
167 if (nsim_esw_mode_is_switchdev(ns
->nsim_dev
)) {
168 pr_err("Not supported in switchdev mode. Please use devlink API.\n");
172 if (vf
>= nsim_dev_get_vfs(nsim_dev
))
175 nsim_dev
->vfconfigs
[vf
].min_tx_rate
= min
;
176 nsim_dev
->vfconfigs
[vf
].max_tx_rate
= max
;
181 static int nsim_set_vf_spoofchk(struct net_device
*dev
, int vf
, bool val
)
183 struct netdevsim
*ns
= netdev_priv(dev
);
184 struct nsim_dev
*nsim_dev
= ns
->nsim_dev
;
186 if (vf
>= nsim_dev_get_vfs(nsim_dev
))
188 nsim_dev
->vfconfigs
[vf
].spoofchk_enabled
= val
;
193 static int nsim_set_vf_rss_query_en(struct net_device
*dev
, int vf
, bool val
)
195 struct netdevsim
*ns
= netdev_priv(dev
);
196 struct nsim_dev
*nsim_dev
= ns
->nsim_dev
;
198 if (vf
>= nsim_dev_get_vfs(nsim_dev
))
200 nsim_dev
->vfconfigs
[vf
].rss_query_enabled
= val
;
205 static int nsim_set_vf_trust(struct net_device
*dev
, int vf
, bool val
)
207 struct netdevsim
*ns
= netdev_priv(dev
);
208 struct nsim_dev
*nsim_dev
= ns
->nsim_dev
;
210 if (vf
>= nsim_dev_get_vfs(nsim_dev
))
212 nsim_dev
->vfconfigs
[vf
].trusted
= val
;
218 nsim_get_vf_config(struct net_device
*dev
, int vf
, struct ifla_vf_info
*ivi
)
220 struct netdevsim
*ns
= netdev_priv(dev
);
221 struct nsim_dev
*nsim_dev
= ns
->nsim_dev
;
223 if (vf
>= nsim_dev_get_vfs(nsim_dev
))
227 ivi
->linkstate
= nsim_dev
->vfconfigs
[vf
].link_state
;
228 ivi
->min_tx_rate
= nsim_dev
->vfconfigs
[vf
].min_tx_rate
;
229 ivi
->max_tx_rate
= nsim_dev
->vfconfigs
[vf
].max_tx_rate
;
230 ivi
->vlan
= nsim_dev
->vfconfigs
[vf
].vlan
;
231 ivi
->vlan_proto
= nsim_dev
->vfconfigs
[vf
].vlan_proto
;
232 ivi
->qos
= nsim_dev
->vfconfigs
[vf
].qos
;
233 memcpy(&ivi
->mac
, nsim_dev
->vfconfigs
[vf
].vf_mac
, ETH_ALEN
);
234 ivi
->spoofchk
= nsim_dev
->vfconfigs
[vf
].spoofchk_enabled
;
235 ivi
->trusted
= nsim_dev
->vfconfigs
[vf
].trusted
;
236 ivi
->rss_query_en
= nsim_dev
->vfconfigs
[vf
].rss_query_enabled
;
241 static int nsim_set_vf_link_state(struct net_device
*dev
, int vf
, int state
)
243 struct netdevsim
*ns
= netdev_priv(dev
);
244 struct nsim_dev
*nsim_dev
= ns
->nsim_dev
;
246 if (vf
>= nsim_dev_get_vfs(nsim_dev
))
250 case IFLA_VF_LINK_STATE_AUTO
:
251 case IFLA_VF_LINK_STATE_ENABLE
:
252 case IFLA_VF_LINK_STATE_DISABLE
:
258 nsim_dev
->vfconfigs
[vf
].link_state
= state
;
263 static void nsim_taprio_stats(struct tc_taprio_qopt_stats
*stats
)
265 stats
->window_drops
= 0;
266 stats
->tx_overruns
= 0;
269 static int nsim_setup_tc_taprio(struct net_device
*dev
,
270 struct tc_taprio_qopt_offload
*offload
)
274 switch (offload
->cmd
) {
275 case TAPRIO_CMD_REPLACE
:
276 case TAPRIO_CMD_DESTROY
:
278 case TAPRIO_CMD_STATS
:
279 nsim_taprio_stats(&offload
->stats
);
288 static LIST_HEAD(nsim_block_cb_list
);
291 nsim_setup_tc(struct net_device
*dev
, enum tc_setup_type type
, void *type_data
)
293 struct netdevsim
*ns
= netdev_priv(dev
);
296 case TC_SETUP_QDISC_TAPRIO
:
297 return nsim_setup_tc_taprio(dev
, type_data
);
299 return flow_block_cb_setup_simple(type_data
,
301 nsim_setup_tc_block_cb
,
309 nsim_set_features(struct net_device
*dev
, netdev_features_t features
)
311 struct netdevsim
*ns
= netdev_priv(dev
);
313 if ((dev
->features
& NETIF_F_HW_TC
) > (features
& NETIF_F_HW_TC
))
314 return nsim_bpf_disable_tc(ns
);
319 static int nsim_get_iflink(const struct net_device
*dev
)
321 struct netdevsim
*nsim
, *peer
;
324 nsim
= netdev_priv(dev
);
327 peer
= rcu_dereference(nsim
->peer
);
328 iflink
= peer
? READ_ONCE(peer
->netdev
->ifindex
) :
329 READ_ONCE(dev
->ifindex
);
335 static int nsim_rcv(struct nsim_rq
*rq
, int budget
)
340 for (i
= 0; i
< budget
; i
++) {
341 if (skb_queue_empty(&rq
->skb_queue
))
344 skb
= skb_dequeue(&rq
->skb_queue
);
345 netif_receive_skb(skb
);
351 static int nsim_poll(struct napi_struct
*napi
, int budget
)
353 struct nsim_rq
*rq
= container_of(napi
, struct nsim_rq
, napi
);
356 done
= nsim_rcv(rq
, budget
);
362 static int nsim_create_page_pool(struct nsim_rq
*rq
)
364 struct page_pool_params p
= {
366 .pool_size
= NSIM_RING_SIZE
,
368 .dev
= &rq
->napi
.dev
->dev
,
370 .dma_dir
= DMA_BIDIRECTIONAL
,
371 .netdev
= rq
->napi
.dev
,
374 rq
->page_pool
= page_pool_create(&p
);
375 if (IS_ERR(rq
->page_pool
)) {
376 int err
= PTR_ERR(rq
->page_pool
);
378 rq
->page_pool
= NULL
;
384 static int nsim_init_napi(struct netdevsim
*ns
)
386 struct net_device
*dev
= ns
->netdev
;
390 for (i
= 0; i
< dev
->num_rx_queues
; i
++) {
393 netif_napi_add(dev
, &rq
->napi
, nsim_poll
);
396 for (i
= 0; i
< dev
->num_rx_queues
; i
++) {
399 err
= nsim_create_page_pool(rq
);
408 page_pool_destroy(ns
->rq
[i
].page_pool
);
409 ns
->rq
[i
].page_pool
= NULL
;
412 for (i
= 0; i
< dev
->num_rx_queues
; i
++)
413 __netif_napi_del(&ns
->rq
[i
].napi
);
418 static void nsim_enable_napi(struct netdevsim
*ns
)
420 struct net_device
*dev
= ns
->netdev
;
423 for (i
= 0; i
< dev
->num_rx_queues
; i
++) {
424 struct nsim_rq
*rq
= &ns
->rq
[i
];
426 netif_queue_set_napi(dev
, i
, NETDEV_QUEUE_TYPE_RX
, &rq
->napi
);
427 napi_enable(&rq
->napi
);
431 static int nsim_open(struct net_device
*dev
)
433 struct netdevsim
*ns
= netdev_priv(dev
);
436 err
= nsim_init_napi(ns
);
440 nsim_enable_napi(ns
);
445 static void nsim_del_napi(struct netdevsim
*ns
)
447 struct net_device
*dev
= ns
->netdev
;
450 for (i
= 0; i
< dev
->num_rx_queues
; i
++) {
451 struct nsim_rq
*rq
= &ns
->rq
[i
];
453 napi_disable(&rq
->napi
);
454 __netif_napi_del(&rq
->napi
);
458 for (i
= 0; i
< dev
->num_rx_queues
; i
++) {
459 page_pool_destroy(ns
->rq
[i
].page_pool
);
460 ns
->rq
[i
].page_pool
= NULL
;
464 static int nsim_stop(struct net_device
*dev
)
466 struct netdevsim
*ns
= netdev_priv(dev
);
467 struct netdevsim
*peer
;
469 netif_carrier_off(dev
);
470 peer
= rtnl_dereference(ns
->peer
);
472 netif_carrier_off(peer
->netdev
);
479 static int nsim_shaper_set(struct net_shaper_binding
*binding
,
480 const struct net_shaper
*shaper
,
481 struct netlink_ext_ack
*extack
)
486 static int nsim_shaper_del(struct net_shaper_binding
*binding
,
487 const struct net_shaper_handle
*handle
,
488 struct netlink_ext_ack
*extack
)
493 static int nsim_shaper_group(struct net_shaper_binding
*binding
,
495 const struct net_shaper
*leaves
,
496 const struct net_shaper
*root
,
497 struct netlink_ext_ack
*extack
)
502 static void nsim_shaper_cap(struct net_shaper_binding
*binding
,
503 enum net_shaper_scope scope
,
504 unsigned long *flags
)
509 static const struct net_shaper_ops nsim_shaper_ops
= {
510 .set
= nsim_shaper_set
,
511 .delete = nsim_shaper_del
,
512 .group
= nsim_shaper_group
,
513 .capabilities
= nsim_shaper_cap
,
516 static const struct net_device_ops nsim_netdev_ops
= {
517 .ndo_start_xmit
= nsim_start_xmit
,
518 .ndo_set_rx_mode
= nsim_set_rx_mode
,
519 .ndo_set_mac_address
= eth_mac_addr
,
520 .ndo_validate_addr
= eth_validate_addr
,
521 .ndo_change_mtu
= nsim_change_mtu
,
522 .ndo_get_stats64
= nsim_get_stats64
,
523 .ndo_set_vf_mac
= nsim_set_vf_mac
,
524 .ndo_set_vf_vlan
= nsim_set_vf_vlan
,
525 .ndo_set_vf_rate
= nsim_set_vf_rate
,
526 .ndo_set_vf_spoofchk
= nsim_set_vf_spoofchk
,
527 .ndo_set_vf_trust
= nsim_set_vf_trust
,
528 .ndo_get_vf_config
= nsim_get_vf_config
,
529 .ndo_set_vf_link_state
= nsim_set_vf_link_state
,
530 .ndo_set_vf_rss_query_en
= nsim_set_vf_rss_query_en
,
531 .ndo_setup_tc
= nsim_setup_tc
,
532 .ndo_set_features
= nsim_set_features
,
533 .ndo_get_iflink
= nsim_get_iflink
,
535 .ndo_open
= nsim_open
,
536 .ndo_stop
= nsim_stop
,
537 .net_shaper_ops
= &nsim_shaper_ops
,
540 static const struct net_device_ops nsim_vf_netdev_ops
= {
541 .ndo_start_xmit
= nsim_start_xmit
,
542 .ndo_set_rx_mode
= nsim_set_rx_mode
,
543 .ndo_set_mac_address
= eth_mac_addr
,
544 .ndo_validate_addr
= eth_validate_addr
,
545 .ndo_change_mtu
= nsim_change_mtu
,
546 .ndo_get_stats64
= nsim_get_stats64
,
547 .ndo_setup_tc
= nsim_setup_tc
,
548 .ndo_set_features
= nsim_set_features
,
551 /* We don't have true per-queue stats, yet, so do some random fakery here.
552 * Only report stuff for queue 0.
554 static void nsim_get_queue_stats_rx(struct net_device
*dev
, int idx
,
555 struct netdev_queue_stats_rx
*stats
)
557 struct rtnl_link_stats64 rtstats
= {};
560 nsim_get_stats64(dev
, &rtstats
);
562 stats
->packets
= rtstats
.rx_packets
- !!rtstats
.rx_packets
;
563 stats
->bytes
= rtstats
.rx_bytes
;
566 static void nsim_get_queue_stats_tx(struct net_device
*dev
, int idx
,
567 struct netdev_queue_stats_tx
*stats
)
569 struct rtnl_link_stats64 rtstats
= {};
572 nsim_get_stats64(dev
, &rtstats
);
574 stats
->packets
= rtstats
.tx_packets
- !!rtstats
.tx_packets
;
575 stats
->bytes
= rtstats
.tx_bytes
;
578 static void nsim_get_base_stats(struct net_device
*dev
,
579 struct netdev_queue_stats_rx
*rx
,
580 struct netdev_queue_stats_tx
*tx
)
582 struct rtnl_link_stats64 rtstats
= {};
584 nsim_get_stats64(dev
, &rtstats
);
586 rx
->packets
= !!rtstats
.rx_packets
;
588 tx
->packets
= !!rtstats
.tx_packets
;
592 static const struct netdev_stat_ops nsim_stat_ops
= {
593 .get_queue_stats_tx
= nsim_get_queue_stats_tx
,
594 .get_queue_stats_rx
= nsim_get_queue_stats_rx
,
595 .get_base_stats
= nsim_get_base_stats
,
599 nsim_pp_hold_read(struct file
*file
, char __user
*data
,
600 size_t count
, loff_t
*ppos
)
602 struct netdevsim
*ns
= file
->private_data
;
608 return simple_read_from_buffer(data
, count
, ppos
, buf
, 2);
612 nsim_pp_hold_write(struct file
*file
, const char __user
*data
,
613 size_t count
, loff_t
*ppos
)
615 struct netdevsim
*ns
= file
->private_data
;
619 ret
= kstrtobool_from_user(data
, count
, &val
);
625 if (val
== !!ns
->page
)
628 if (!netif_running(ns
->netdev
) && val
) {
631 ns
->page
= page_pool_dev_alloc_pages(ns
->rq
[0].page_pool
);
635 page_pool_put_full_page(ns
->page
->pp
, ns
->page
, false);
644 static const struct file_operations nsim_pp_hold_fops
= {
646 .read
= nsim_pp_hold_read
,
647 .write
= nsim_pp_hold_write
,
648 .llseek
= generic_file_llseek
,
649 .owner
= THIS_MODULE
,
652 static void nsim_setup(struct net_device
*dev
)
655 eth_hw_addr_random(dev
);
657 dev
->tx_queue_len
= 0;
658 dev
->flags
&= ~IFF_MULTICAST
;
659 dev
->priv_flags
|= IFF_LIVE_ADDR_CHANGE
|
661 dev
->features
|= NETIF_F_HIGHDMA
|
666 dev
->hw_features
|= NETIF_F_HW_TC
|
671 dev
->max_mtu
= ETH_MAX_MTU
;
672 dev
->xdp_features
= NETDEV_XDP_ACT_HW_OFFLOAD
;
675 static int nsim_queue_init(struct netdevsim
*ns
)
677 struct net_device
*dev
= ns
->netdev
;
680 ns
->rq
= kvcalloc(dev
->num_rx_queues
, sizeof(*ns
->rq
),
681 GFP_KERNEL_ACCOUNT
| __GFP_RETRY_MAYFAIL
);
685 for (i
= 0; i
< dev
->num_rx_queues
; i
++)
686 skb_queue_head_init(&ns
->rq
[i
].skb_queue
);
691 static void nsim_queue_free(struct netdevsim
*ns
)
693 struct net_device
*dev
= ns
->netdev
;
696 for (i
= 0; i
< dev
->num_rx_queues
; i
++)
697 skb_queue_purge_reason(&ns
->rq
[i
].skb_queue
,
698 SKB_DROP_REASON_QUEUE_PURGE
);
704 static int nsim_init_netdevsim(struct netdevsim
*ns
)
706 struct mock_phc
*phc
;
709 phc
= mock_phc_create(&ns
->nsim_bus_dev
->dev
);
714 ns
->netdev
->netdev_ops
= &nsim_netdev_ops
;
715 ns
->netdev
->stat_ops
= &nsim_stat_ops
;
717 err
= nsim_udp_tunnels_info_create(ns
->nsim_dev
, ns
->netdev
);
719 goto err_phc_destroy
;
722 err
= nsim_queue_init(ns
);
724 goto err_utn_destroy
;
726 err
= nsim_bpf_init(ns
);
730 nsim_macsec_init(ns
);
733 err
= register_netdevice(ns
->netdev
);
735 goto err_ipsec_teardown
;
740 nsim_ipsec_teardown(ns
);
741 nsim_macsec_teardown(ns
);
747 nsim_udp_tunnels_info_destroy(ns
->netdev
);
749 mock_phc_destroy(ns
->phc
);
753 static int nsim_init_netdevsim_vf(struct netdevsim
*ns
)
757 ns
->netdev
->netdev_ops
= &nsim_vf_netdev_ops
;
759 err
= register_netdevice(ns
->netdev
);
764 static void nsim_exit_netdevsim(struct netdevsim
*ns
)
766 nsim_udp_tunnels_info_destroy(ns
->netdev
);
767 mock_phc_destroy(ns
->phc
);
771 nsim_create(struct nsim_dev
*nsim_dev
, struct nsim_dev_port
*nsim_dev_port
)
773 struct net_device
*dev
;
774 struct netdevsim
*ns
;
777 dev
= alloc_netdev_mq(sizeof(*ns
), "eth%d", NET_NAME_UNKNOWN
, nsim_setup
,
778 nsim_dev
->nsim_bus_dev
->num_queues
);
780 return ERR_PTR(-ENOMEM
);
782 dev_net_set(dev
, nsim_dev_net(nsim_dev
));
783 ns
= netdev_priv(dev
);
785 u64_stats_init(&ns
->syncp
);
786 ns
->nsim_dev
= nsim_dev
;
787 ns
->nsim_dev_port
= nsim_dev_port
;
788 ns
->nsim_bus_dev
= nsim_dev
->nsim_bus_dev
;
789 SET_NETDEV_DEV(dev
, &ns
->nsim_bus_dev
->dev
);
790 SET_NETDEV_DEVLINK_PORT(dev
, &nsim_dev_port
->devlink_port
);
791 nsim_ethtool_init(ns
);
792 if (nsim_dev_port_is_pf(nsim_dev_port
))
793 err
= nsim_init_netdevsim(ns
);
795 err
= nsim_init_netdevsim_vf(ns
);
797 goto err_free_netdev
;
799 ns
->pp_dfs
= debugfs_create_file("pp_hold", 0600, nsim_dev_port
->ddir
,
800 ns
, &nsim_pp_hold_fops
);
809 void nsim_destroy(struct netdevsim
*ns
)
811 struct net_device
*dev
= ns
->netdev
;
812 struct netdevsim
*peer
;
814 debugfs_remove(ns
->pp_dfs
);
817 peer
= rtnl_dereference(ns
->peer
);
819 RCU_INIT_POINTER(peer
->peer
, NULL
);
820 RCU_INIT_POINTER(ns
->peer
, NULL
);
821 unregister_netdevice(dev
);
822 if (nsim_dev_port_is_pf(ns
->nsim_dev_port
)) {
823 nsim_macsec_teardown(ns
);
824 nsim_ipsec_teardown(ns
);
829 if (nsim_dev_port_is_pf(ns
->nsim_dev_port
))
830 nsim_exit_netdevsim(ns
);
832 /* Put this intentionally late to exercise the orphaning path */
834 page_pool_put_full_page(ns
->page
->pp
, ns
->page
, false);
841 bool netdev_is_nsim(struct net_device
*dev
)
843 return dev
->netdev_ops
== &nsim_netdev_ops
;
846 static int nsim_validate(struct nlattr
*tb
[], struct nlattr
*data
[],
847 struct netlink_ext_ack
*extack
)
849 NL_SET_ERR_MSG_MOD(extack
,
850 "Please use: echo \"[ID] [PORT_COUNT] [NUM_QUEUES]\" > /sys/bus/netdevsim/new_device");
854 static struct rtnl_link_ops nsim_link_ops __read_mostly
= {
856 .validate
= nsim_validate
,
859 static int __init
nsim_module_init(void)
863 err
= nsim_dev_init();
867 err
= nsim_bus_init();
871 err
= rtnl_link_register(&nsim_link_ops
);
884 static void __exit
nsim_module_exit(void)
886 rtnl_link_unregister(&nsim_link_ops
);
891 module_init(nsim_module_init
);
892 module_exit(nsim_module_exit
);
893 MODULE_LICENSE("GPL");
894 MODULE_DESCRIPTION("Simulated networking device for testing");
895 MODULE_ALIAS_RTNL_LINK(DRV_NAME
);