18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * net/sched/sch_blackhole.c	Black hole queue
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * Authors:	Thomas Graf <tgraf@suug.ch>
68c2ecf20Sopenharmony_ci *
78c2ecf20Sopenharmony_ci * Note: Quantum tunneling is not supported.
88c2ecf20Sopenharmony_ci */
98c2ecf20Sopenharmony_ci
108c2ecf20Sopenharmony_ci#include <linux/init.h>
118c2ecf20Sopenharmony_ci#include <linux/types.h>
128c2ecf20Sopenharmony_ci#include <linux/kernel.h>
138c2ecf20Sopenharmony_ci#include <linux/skbuff.h>
148c2ecf20Sopenharmony_ci#include <net/pkt_sched.h>
158c2ecf20Sopenharmony_ci
168c2ecf20Sopenharmony_cistatic int blackhole_enqueue(struct sk_buff *skb, struct Qdisc *sch,
178c2ecf20Sopenharmony_ci			     struct sk_buff **to_free)
188c2ecf20Sopenharmony_ci{
198c2ecf20Sopenharmony_ci	qdisc_drop(skb, sch, to_free);
208c2ecf20Sopenharmony_ci	return NET_XMIT_SUCCESS | __NET_XMIT_BYPASS;
218c2ecf20Sopenharmony_ci}
228c2ecf20Sopenharmony_ci
238c2ecf20Sopenharmony_cistatic struct sk_buff *blackhole_dequeue(struct Qdisc *sch)
248c2ecf20Sopenharmony_ci{
258c2ecf20Sopenharmony_ci	return NULL;
268c2ecf20Sopenharmony_ci}
278c2ecf20Sopenharmony_ci
288c2ecf20Sopenharmony_cistatic struct Qdisc_ops blackhole_qdisc_ops __read_mostly = {
298c2ecf20Sopenharmony_ci	.id		= "blackhole",
308c2ecf20Sopenharmony_ci	.priv_size	= 0,
318c2ecf20Sopenharmony_ci	.enqueue	= blackhole_enqueue,
328c2ecf20Sopenharmony_ci	.dequeue	= blackhole_dequeue,
338c2ecf20Sopenharmony_ci	.peek		= blackhole_dequeue,
348c2ecf20Sopenharmony_ci	.owner		= THIS_MODULE,
358c2ecf20Sopenharmony_ci};
368c2ecf20Sopenharmony_ci
378c2ecf20Sopenharmony_cistatic int __init blackhole_init(void)
388c2ecf20Sopenharmony_ci{
398c2ecf20Sopenharmony_ci	return register_qdisc(&blackhole_qdisc_ops);
408c2ecf20Sopenharmony_ci}
418c2ecf20Sopenharmony_cidevice_initcall(blackhole_init)
42