From 7e823f7c19181927f20294b9de9bba016e875332 Mon Sep 17 00:00:00 2001
From: Sebastian Sumpf <sebastian.sumpf@genode-labs.com>
Date: Fri, 18 Aug 2023 19:55:09 +0200
Subject: [PATCH] dde_linux: remove legacy_usb_net

issue #4958
---
 .../lib/import/import-usb_net_include.mk      |   13 -
 repos/dde_linux/lib/mk/usb_net_include.mk     |   37 -
 .../recipes/src/legacy_usb_net_drv/content.mk |   38 -
 .../recipes/src/legacy_usb_net_drv/hash       |    1 -
 .../recipes/src/legacy_usb_net_drv/used_apis  |    8 -
 repos/dde_linux/run/usb_net.run               |    2 +-
 .../src/drivers/legacy_usb_net/README         |   20 -
 .../src/drivers/legacy_usb_net/driver.h       |  172 ---
 .../src/drivers/legacy_usb_net/dummies.c      |  465 ------
 .../src/drivers/legacy_usb_net/lx_emul.cc     |  622 --------
 .../src/drivers/legacy_usb_net/lx_emul.h      | 1304 -----------------
 .../src/drivers/legacy_usb_net/lxc.c          |  424 ------
 .../src/drivers/legacy_usb_net/lxc.h          |   40 -
 .../src/drivers/legacy_usb_net/main.cc        |  235 ---
 .../src/drivers/legacy_usb_net/target.mk      |   40 -
 .../drivers/legacy_usb_net/uplink_client.cc   |   93 --
 .../drivers/legacy_usb_net/uplink_client.h    |   58 -
 17 files changed, 1 insertion(+), 3571 deletions(-)
 delete mode 100644 repos/dde_linux/lib/import/import-usb_net_include.mk
 delete mode 100644 repos/dde_linux/lib/mk/usb_net_include.mk
 delete mode 100644 repos/dde_linux/recipes/src/legacy_usb_net_drv/content.mk
 delete mode 100644 repos/dde_linux/recipes/src/legacy_usb_net_drv/hash
 delete mode 100644 repos/dde_linux/recipes/src/legacy_usb_net_drv/used_apis
 delete mode 100644 repos/dde_linux/src/drivers/legacy_usb_net/README
 delete mode 100644 repos/dde_linux/src/drivers/legacy_usb_net/driver.h
 delete mode 100644 repos/dde_linux/src/drivers/legacy_usb_net/dummies.c
 delete mode 100644 repos/dde_linux/src/drivers/legacy_usb_net/lx_emul.cc
 delete mode 100644 repos/dde_linux/src/drivers/legacy_usb_net/lx_emul.h
 delete mode 100644 repos/dde_linux/src/drivers/legacy_usb_net/lxc.c
 delete mode 100644 repos/dde_linux/src/drivers/legacy_usb_net/lxc.h
 delete mode 100644 repos/dde_linux/src/drivers/legacy_usb_net/main.cc
 delete mode 100644 repos/dde_linux/src/drivers/legacy_usb_net/target.mk
 delete mode 100644 repos/dde_linux/src/drivers/legacy_usb_net/uplink_client.cc
 delete mode 100644 repos/dde_linux/src/drivers/legacy_usb_net/uplink_client.h

diff --git a/repos/dde_linux/lib/import/import-usb_net_include.mk b/repos/dde_linux/lib/import/import-usb_net_include.mk
deleted file mode 100644
index a40775d001..0000000000
--- a/repos/dde_linux/lib/import/import-usb_net_include.mk
+++ /dev/null
@@ -1,13 +0,0 @@
-USB_NET_CONTRIB_DIR := $(call select_from_ports,dde_linux)/src/drivers/usb_net
-
-include $(call select_from_repositories,lib/import/import-usb_arch_include.mk)
-
-#
-# The order of include-search directories is important, we need to look into
-# 'contrib' before falling back to our custom 'lx_emul.h' header.
-#
-INC_DIR += $(ARCH_SRC_INC_DIR)
-INC_DIR += $(USB_NET_CONTRIB_DIR)/include
-#INC_DIR += $(USB_NET_CONTRIB_DIR)/drivers/hid
-#INC_DIR += $(USB_NET_CONTRIB_DIR)/drivers/input
-INC_DIR += $(LIB_CACHE_DIR)/usb_net_include/include/include/include
diff --git a/repos/dde_linux/lib/mk/usb_net_include.mk b/repos/dde_linux/lib/mk/usb_net_include.mk
deleted file mode 100644
index e42cd53a82..0000000000
--- a/repos/dde_linux/lib/mk/usb_net_include.mk
+++ /dev/null
@@ -1,37 +0,0 @@
-ifeq ($(called_from_lib_mk),yes)
-
-USB_NET_CONTRIB_DIR := $(call select_from_ports,dde_linux)/src/drivers/usb_net
-LX_EMUL_H           := $(REP_DIR)/src/drivers/legacy_usb_net/lx_emul.h
-
-#
-# Determine the header files included by the contrib code. For each
-# of these header files we create a symlink to 'lx_emul.h'.
-#
-SCAN_DIRS := $(addprefix $(USB_NET_CONTRIB_DIR)/include/, asm-generic linux uapi net) \
-             $(addprefix $(USB_NET_CONTRIB_DIR)/,         drivers net lib)
-GEN_INCLUDES := $(shell grep -rIh "^\#include .*\/" $(SCAN_DIRS) |\
-                        sed "s/^\#include [^<\"]*[<\"]\([^>\"]*\)[>\"].*/\1/" |\
-                        sort | uniq)
-#
-# Filter out original Linux headers that exist in the contrib directory
-#
-NO_GEN_INCLUDES := $(shell cd $(USB_NET_CONTRIB_DIR)/; find include  -name "*.h" |\
-                           sed "s/.\///" | sed "s/.*include\///")
-GEN_INCLUDES    := $(filter-out $(NO_GEN_INCLUDES),$(GEN_INCLUDES))
-
-#
-# Put Linux headers in 'GEN_INC' dir, since some include use "../../" paths use
-# three level include hierarchy
-#
-GEN_INC         := $(shell pwd)/include/include/include
-GEN_INCLUDES    := $(addprefix $(GEN_INC)/,$(GEN_INCLUDES))
-
-all: $(GEN_INCLUDES)
-
-$(GEN_INCLUDES):
-	$(VERBOSE)mkdir -p $(dir $@)
-	$(VERBOSE)ln -s $(LX_EMUL_H) $@
-
-endif
-
-CC_CXX_WARN_STRICT =
diff --git a/repos/dde_linux/recipes/src/legacy_usb_net_drv/content.mk b/repos/dde_linux/recipes/src/legacy_usb_net_drv/content.mk
deleted file mode 100644
index a49f1476dd..0000000000
--- a/repos/dde_linux/recipes/src/legacy_usb_net_drv/content.mk
+++ /dev/null
@@ -1,38 +0,0 @@
-PORT_DIR := $(call port_dir,$(REP_DIR)/ports/dde_linux)
-
-MIRROR_FROM_REP_DIR := src/drivers/legacy_usb_net \
-                       src/drivers/nic/linux_network_session_base.cc \
-                       src/drivers/nic/linux_network_session_base.h \
-                       src/lib/legacy/lx_kit \
-                       src/lib/lx_kit/spec \
-                       src/include/legacy \
-                       lib/import/import-usb_net_include.mk \
-                       lib/import/import-usb_arch_include.mk \
-                       lib/mk/usb_net_include.mk \
-                       $(foreach SPEC, \
-                                 arm arm_64 arm_v6 arm_v7 x86 x86_32 x86_64, \
-                                 src/include/spec/$(SPEC)) \
-                       $(foreach SPEC, \
-                                 arm arm_64 x86_32 x86_64, \
-                                 lib/mk/spec/$(SPEC)/lx_kit_setjmp.mk)
-
-MIRROR_FROM_PORT_DIR := $(shell cd $(PORT_DIR); \
-                                find src/drivers/usb_net -type f | \
-                                     grep -v ".git")
-
-MIRROR_FROM_PORT_DIR := $(filter-out $(MIRROR_FROM_REP_DIR), \
-                                     $(MIRROR_FROM_PORT_DIR))
-
-content: $(MIRROR_FROM_REP_DIR) $(MIRROR_FROM_PORT_DIR)
-
-$(MIRROR_FROM_REP_DIR):
-	$(mirror_from_rep_dir)
-
-$(MIRROR_FROM_PORT_DIR):
-	mkdir -p $(dir $@)
-	cp $(PORT_DIR)/$@ $@
-
-content: LICENSE
-LICENSE:
-	( echo "GNU General Public License version 2, see:"; \
-	  echo "https://www.kernel.org/pub/linux/kernel/COPYING" ) > $@
diff --git a/repos/dde_linux/recipes/src/legacy_usb_net_drv/hash b/repos/dde_linux/recipes/src/legacy_usb_net_drv/hash
deleted file mode 100644
index 43ee45ba37..0000000000
--- a/repos/dde_linux/recipes/src/legacy_usb_net_drv/hash
+++ /dev/null
@@ -1 +0,0 @@
-2023-08-21 1a1be9d8df290e48fdb5539bef1c23367b596955
diff --git a/repos/dde_linux/recipes/src/legacy_usb_net_drv/used_apis b/repos/dde_linux/recipes/src/legacy_usb_net_drv/used_apis
deleted file mode 100644
index 2baca72d78..0000000000
--- a/repos/dde_linux/recipes/src/legacy_usb_net_drv/used_apis
+++ /dev/null
@@ -1,8 +0,0 @@
-base
-os
-format
-nic_session
-uplink_session
-usb_session
-timer_session
-nic_driver
diff --git a/repos/dde_linux/run/usb_net.run b/repos/dde_linux/run/usb_net.run
index d9869902de..1b5cd03df3 100644
--- a/repos/dde_linux/run/usb_net.run
+++ b/repos/dde_linux/run/usb_net.run
@@ -10,7 +10,7 @@
 create_boot_directory
 import_from_depot [depot_user]/src/[base_src] \
                   [depot_user]/pkg/test_usb_host_drv-[board] \
-                  [depot_user]/src/legacy_usb_net_drv \
+                  [depot_user]/src/usb_net_drv \
                   [depot_user]/src/nic_router \
                   [depot_user]/src/libc \
                   [depot_user]/src/vfs \
diff --git a/repos/dde_linux/src/drivers/legacy_usb_net/README b/repos/dde_linux/src/drivers/legacy_usb_net/README
deleted file mode 100644
index 7e3aee4391..0000000000
--- a/repos/dde_linux/src/drivers/legacy_usb_net/README
+++ /dev/null
@@ -1,20 +0,0 @@
-USB NIC driver
-##############
-
-Driver for network interface cards connected via USB.
-
-Configuration snippet:
-
-!<start name="usb_net_drv">
-!  <resource name="RAM" quantum="10M"/>
-!  <provides> <service name="Nic"/> </provides>
-!  <config mac="2e:60:90:0c:4e:01" />
-!</start>
-
-There is the 'mac' attribute where one can specify the hardware address of
-the network interface. This is necessary in case the EEPROM of the network card
-cannot be accessed via the host controller making it impossible to retrieve the
-devices hardware address. If this is the case and no 'mac' attribute is given a
-fallback address will be assigned to the network device. Note that the fallback
-address will always be the same.
-
diff --git a/repos/dde_linux/src/drivers/legacy_usb_net/driver.h b/repos/dde_linux/src/drivers/legacy_usb_net/driver.h
deleted file mode 100644
index 3afb931fb7..0000000000
--- a/repos/dde_linux/src/drivers/legacy_usb_net/driver.h
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * \brief  USB net driver
- * \author Stefan Kalkowski
- * \date   2018-06-27
- */
-
-/*
- * Copyright (C) 2018 Genode Labs GmbH
- *
- * This file is distributed under the terms of the GNU General Public License
- * version 2.
- */
-
-#ifndef _SRC__DRIVERS__USB_NET__DRIVER_H_
-#define _SRC__DRIVERS__USB_NET__DRIVER_H_
-
-/* Genode includes */
-#include <base/allocator_avl.h>
-#include <base/attached_rom_dataspace.h>
-#include <base/heap.h>
-#include <usb_session/connection.h>
-#include <util/reconstructible.h>
-
-/* local includes */
-#include <uplink_client.h>
-
-/* Linux emulation environment includes */
-#include <legacy/lx_kit/scheduler.h>
-#include <lx_emul.h>
-#include <legacy/lx_emul/extern_c_begin.h>
-#include <linux/usb.h>
-#include <legacy/lx_emul/extern_c_end.h>
-
-struct usb_device_id;
-struct usb_interface;
-struct usb_device;
-
-struct Driver
-{
-	using Label = Genode::String<64>;
-
-	struct Task
-	{
-		Lx::Task                     task;
-		Genode::Signal_handler<Task> handler;
-	
-		void handle_signal()
-		{
-			task.unblock();
-			Lx::scheduler().schedule();
-		}
-	
-		template <typename... ARGS>
-		Task(Genode::Entrypoint & ep, ARGS &&... args)
-		: task(args...), handler(ep, *this, &Task::handle_signal) {}
-	};
-
-	struct Device
-	{
-		using Le = Genode::List_element<Device>;
-
-		Le                             le { this };
-		Label                          label;
-		Driver                        &driver;
-		Genode::Env                   &env;
-		Genode::Allocator_avl         &alloc;
-		Task                           state_task;
-		Task                           urb_task;
-		Usb::Connection                usb { env, &alloc, label.string(),
-		                                     512 * 1024, state_task.handler };
-		usb_device                   * udev = nullptr;
-		bool                           updated = true;
-
-		Device(Driver & drv, Label label);
-		~Device();
-
-		static void state_task_entry(void *);
-		static void urb_task_entry(void *);
-		void register_device();
-		void unregister_device();
-		void scan_interfaces(unsigned iface_idx);
-		void scan_altsettings(usb_interface * iface,
-		                      unsigned iface_idx, unsigned alt_idx);
-		void probe_interface(usb_interface *, usb_device_id *);
-		void remove_interface(usb_interface *);
-	};
-
-	struct Devices : Genode::List<Device::Le>
-	{
-		template <typename FN>
-		void for_each(FN const & fn)
-		{
-			Device::Le * cur = first();
-			for (Device::Le * next = cur ? cur->next() : nullptr; cur;
-			     cur = next, next = cur ? cur->next() : nullptr)
-				fn(*cur->object());
-		}
-	};
-
-
-	class Sync_packet : public Usb::Completion
-	{
-		private:
-
-			Usb::Session_client  & _usb;
-			Usb::Packet_descriptor _packet { _usb.alloc_packet(0) };
-			completion             _comp;
-
-		public:
-
-			Sync_packet(Usb::Session_client &usb) : _usb(usb)
-			{
-				init_completion(&_comp);
-			}
-
-			virtual ~Sync_packet()
-			{
-				_usb.source()->release_packet(_packet);
-			}
-
-			void complete(Usb::Packet_descriptor &p) override
-			{
-				::complete(&_comp);
-			}
-
-			void send()
-			{
-				_packet.completion = this;
-				_usb.source()->submit_packet(_packet);
-				wait_for_completion(&_comp);
-			}
-
-			void config(int configuration)
-			{
-				_packet.type   = Usb::Packet_descriptor::CONFIG;
-				_packet.number = configuration;
-				send();
-			}
-
-			void alt_setting(int interface, int alt_setting)
-			{
-				_packet.type = Usb::Packet_descriptor::ALT_SETTING;
-				_packet.interface.number      = interface;
-				_packet.interface.alt_setting = alt_setting;
-				send();
-			}
-	};
-
-	Devices                                                devices;
-	Genode::Env                                           &env;
-	Genode::Entrypoint                                    &ep             { env.ep() };
-	Genode::Attached_rom_dataspace                         config_rom     { env, "config" };
-	Genode::Heap                                           heap           { env.ram(), env.rm() };
-	Genode::Allocator_avl                                  alloc          { &heap };
-	Genode::Constructible<Genode::Uplink_client>           uplink_client  { };
-	Genode::Constructible<Task>                            main_task;
-	Genode::Constructible<Genode::Attached_rom_dataspace>  report_rom;
-
-	Driver(Genode::Env &env);
-
-	void activate_network_session()
-	{
-		uplink_client.construct(
-			env, heap,
-			config_rom.xml().attribute_value(
-				"uplink_label", Genode::Session_label::String { "" }));
-	}
-
-	static void main_task_entry(void *);
-};
-
-#endif /* _SRC__DRIVERS__USB_HID__DRIVER_H_ */
diff --git a/repos/dde_linux/src/drivers/legacy_usb_net/dummies.c b/repos/dde_linux/src/drivers/legacy_usb_net/dummies.c
deleted file mode 100644
index a17d52d16f..0000000000
--- a/repos/dde_linux/src/drivers/legacy_usb_net/dummies.c
+++ /dev/null
@@ -1,465 +0,0 @@
-#include <lx_emul.h>
-
-#if 0
-#define TRACE \
-	do { \
-		lx_printf("%s not implemented\n", __func__); \
-	} while (0)
-#else
-#define TRACE do { ; } while (0)
-#endif
-
-#define TRACE_AND_STOP \
-	do { \
-		lx_printf("%s not implemented\n", __func__); \
-		BUG(); \
-	} while (0)
-
-struct page *alloc_pages(gfp_t gfp_mask, unsigned int order)
-{
-	TRACE_AND_STOP;
-	return NULL;
-}
-
-u16 bitrev16(u16 in)
-{
-	TRACE_AND_STOP;
-	return -1;
-}
-
-u16 crc16(u16 crc, const u8 *buffer, size_t len)
-{
-	TRACE_AND_STOP;
-	return -1;
-}
-
-__sum16 csum_fold(__wsum csum)
-{
-	TRACE_AND_STOP;
-	return -1;
-}
-
-__wsum csum_partial(const void *buff, int len, __wsum sum)
-{
-	TRACE_AND_STOP;
-	return -1;
-}
-
-int device_set_wakeup_enable(struct device *dev, bool enable)
-{
-	TRACE_AND_STOP;
-	return -1;
-}
-
-void dst_release(struct dst_entry *dst)
-{
-	TRACE_AND_STOP;
-}
-
-struct net_device;
-u32 ethtool_op_get_link(struct net_device *dev)
-{
-	TRACE_AND_STOP;
-	return -1;
-}
-
-int ethtool_op_get_ts_info(struct net_device *dev, struct ethtool_ts_info *eti)
-{
-	TRACE_AND_STOP;
-	return -1;
-}
-
-bool file_ns_capable(const struct file *file, struct user_namespace *ns, int cap)
-{
-	TRACE_AND_STOP;
-	return -1;
-}
-
-void free_uid(struct user_struct * user)
-{
-	TRACE_AND_STOP;
-}
-
-struct mii_if_info;
-int generic_mii_ioctl(struct mii_if_info *mii_if, struct mii_ioctl_data *mii_data, int cmd, unsigned int *duplex_changed)
-{
-	TRACE_AND_STOP;
-	return -1;
-}
-
-void get_page(struct page *page)
-{
-	TRACE_AND_STOP;
-}
-
-bool gfpflags_allow_blocking(const gfp_t gfp_flags)
-{
-	TRACE_AND_STOP;
-	return -1;
-}
-
-bool gfp_pfmemalloc_allowed(gfp_t gfp_flags)
-{
-	TRACE_AND_STOP;
-	return -1;
-}
-
-int in_irq()
-{
-	TRACE_AND_STOP;
-	return -1;
-}
-
-void *kmap_atomic(struct page *page)
-{
-	TRACE_AND_STOP;
-	return NULL;
-}
-
-int memcmp(const void *s1, const void *s2, size_t size)
-{
-	TRACE_AND_STOP;
-	return -1;
-}
-
-void mii_ethtool_get_link_ksettings( struct mii_if_info *mii, struct ethtool_link_ksettings *cmd)
-{
-	TRACE_AND_STOP;
-}
-
-int mii_ethtool_set_link_ksettings( struct mii_if_info *mii, const struct ethtool_link_ksettings *cmd)
-{
-	TRACE_AND_STOP;
-	return -1;
-}
-
-unsigned netdev_mc_count(struct net_device * dev)
-{
-	TRACE;
-	return 1;
-}
-
-int netdev_mc_empty(struct net_device * ndev)
-{
-	TRACE;
-	return 1;
-}
-
-void netdev_stats_to_stats64(struct rtnl_link_stats64 *stats64, const struct net_device_stats *netdev_stats)
-{
-	TRACE_AND_STOP;
-}
-
-bool netdev_uses_dsa(struct net_device *dev)
-{
-	TRACE;
-	return false;
-}
-
-void netif_device_attach(struct net_device *dev)
-{
-	TRACE;
-}
-
-void netif_device_detach(struct net_device *dev)
-{
-	TRACE_AND_STOP;
-}
-
-int  netif_device_present(struct net_device * d)
-{
-	TRACE;
-	return 1;
-}
-
-u32 netif_msg_init(int arg0, int arg1)
-{
-	TRACE;
-	return 0;
-}
-
-void netif_start_queue(struct net_device *dev)
-{
-	TRACE;
-}
-
-void netif_stop_queue(struct net_device *dev)
-{
-	TRACE;
-}
-
-void netif_trans_update(struct net_device *dev)
-{
-	TRACE;
-}
-
-void netif_tx_wake_all_queues(struct net_device *dev)
-{
-	TRACE_AND_STOP;
-}
-
-void netif_wake_queue(struct net_device * d)
-{
-	TRACE;
-}
-
-const void *of_get_mac_address(struct device_node *np)
-{
-	TRACE;
-	return NULL;
-}
-
-void pm_runtime_enable(struct device *dev)
-{
-	TRACE;
-}
-
-void read_lock_bh(rwlock_t * l)
-{
-	TRACE_AND_STOP;
-}
-
-void read_unlock_bh(rwlock_t * l)
-{
-	TRACE_AND_STOP;
-}
-
-void secpath_reset(struct sk_buff * skb)
-{
-	TRACE;
-}
-
-void __set_current_state(int state)
-{
-	TRACE;
-}
-
-void sg_init_table(struct scatterlist *sg, unsigned int arg)
-{
-	TRACE_AND_STOP;
-}
-
-void sg_set_buf(struct scatterlist *sg, const void *buf, unsigned int buflen)
-{
-	TRACE_AND_STOP;
-}
-
-void sg_set_page(struct scatterlist *sg, struct page *page, unsigned int len, unsigned int offset)
-{
-	TRACE_AND_STOP;
-}
-
-void sk_free(struct sock *sk)
-{
-	TRACE_AND_STOP;
-}
-
-void sock_efree(struct sk_buff *skb)
-{
-	TRACE_AND_STOP;
-}
-
-void spin_lock_irq(spinlock_t *lock)
-{
-	TRACE_AND_STOP;
-}
-
-void spin_lock_nested(spinlock_t *lock, int subclass)
-{
-	TRACE;
-}
-
-void spin_unlock_irq(spinlock_t *lock)
-{
-	TRACE_AND_STOP;
-}
-
-size_t strlcpy(char *dest, const char *src, size_t size)
-{
-	TRACE_AND_STOP;
-	return -1;
-}
-
-void tasklet_kill(struct tasklet_struct *t)
-{
-	TRACE;
-}
-
-void trace_consume_skb(struct sk_buff *skb)
-{
-	TRACE;
-}
-
-void trace_kfree_skb(struct sk_buff *skb, void *arg)
-{
-	TRACE;
-}
-
-unsigned int u64_stats_fetch_begin_irq(const struct u64_stats_sync *p)
-{
-	TRACE_AND_STOP;
-	return -1;
-}
-
-bool u64_stats_fetch_retry_irq(const struct u64_stats_sync *p, unsigned int s)
-{
-	TRACE_AND_STOP;
-	return -1;
-}
-
-struct usb_device;
-int usb_clear_halt(struct usb_device *dev, int pipe)
-{
-	TRACE_AND_STOP;
-	return -1;
-}
-
-struct usb_driver;
-struct usb_interface;
-void usb_driver_release_interface(struct usb_driver *driver, struct usb_interface *iface)
-{
-	TRACE;
-}
-
-
-/* only called to kill interrupt urb in usbnet.c */
-struct urb;
-void usb_kill_urb(struct urb *urb)
-{
-	TRACE;
-}
-
-
-struct usb_anchor;
-struct urb *usb_get_from_anchor(struct usb_anchor *anchor)
-{
-	TRACE_AND_STOP;
-	return NULL;
-}
-
-int usb_interrupt_msg(struct usb_device *usb_dev, unsigned int pipe, void *data, int len, int *actual_length, int timeout)
-{
-	TRACE_AND_STOP;
-	return -1;
-}
-
-void usb_scuttle_anchored_urbs(struct usb_anchor *anchor)
-{
-	TRACE;
-}
-
-ktime_t ktime_get_real(void)
-{
-	TRACE_AND_STOP;
-	return -1;
-}
-
-void kunmap_atomic(void *addr)
-{
-	TRACE_AND_STOP;
-}
-
-void might_sleep()
-{
-	TRACE_AND_STOP;
-}
-
-bool page_is_pfmemalloc(struct page *page)
-{
-	TRACE_AND_STOP;
-	return -1;
-}
-
-void put_page(struct page *page)
-{
-	TRACE_AND_STOP;
-}
-
-int usb_unlink_urb(struct urb *urb)
-{
-	TRACE;
-	return 0;
-}
-
-
-struct urb *usb_get_urb(struct urb *urb)
-{
-	TRACE;
-	return NULL;
-}
-
-
-void usleep_range(unsigned long min, unsigned long max)
-{
-	TRACE;
-}
-
-void phy_stop(struct phy_device *phydev)
-{
-	TRACE;
-}
-
-void phy_disconnect(struct phy_device *phydev)
-{
-	TRACE;
-}
-
-void phy_print_status(struct phy_device *phydev)
-{
-	TRACE;
-}
-
-int phy_mii_ioctl(struct phy_device *phydev, struct ifreq *ifr, int cmd)
-{
-	TRACE;
-	return 0;
-}
-
-typedef int phy_interface_t;
-struct phy_device * phy_connect(struct net_device *dev, const char *bus_id, void (*handler)(struct net_device *), phy_interface_t interface)
-{
-	TRACE;
-	return 0;
-}
-
-int  genphy_resume(struct phy_device *phydev) { TRACE; return 0; }
-
-void phy_start(struct phy_device *phydev) { TRACE; }
-
-struct mii_bus;
-void mdiobus_free(struct mii_bus *bus) { TRACE; }
-
-void mdiobus_unregister(struct mii_bus *bus) { TRACE; }
-
-struct mii_bus *mdiobus_alloc_size(size_t size)
-{
-	TRACE_AND_STOP;
-	return NULL;
-}
-
-int __mdiobus_register(struct mii_bus *bus, struct module *owner)
-{
-	TRACE_AND_STOP;
-	return -1;
-}
-
-int phy_ethtool_get_link_ksettings(struct net_device *ndev, struct ethtool_link_ksettings *cmd)
-{
-	TRACE_AND_STOP;
-	return -1;
-}
-
-int phy_ethtool_set_link_ksettings(struct net_device *ndev, const struct ethtool_link_ksettings *cmd)
-{
-	TRACE_AND_STOP;
-	return -1;
-}
-
-int phy_ethtool_nway_reset(struct net_device *ndev)
-{
-	TRACE_AND_STOP;
-	return -1;
-}
-
-int sysctl_tstamp_allow_data;
-struct user_namespace init_user_ns;
diff --git a/repos/dde_linux/src/drivers/legacy_usb_net/lx_emul.cc b/repos/dde_linux/src/drivers/legacy_usb_net/lx_emul.cc
deleted file mode 100644
index e361514a0c..0000000000
--- a/repos/dde_linux/src/drivers/legacy_usb_net/lx_emul.cc
+++ /dev/null
@@ -1,622 +0,0 @@
-#include <base/env.h>
-#include <usb_session/client.h>
-#include <format/snprintf.h>
-#include <nic_session/nic_session.h>
-#include <util/xml_node.h>
-
-#include <driver.h>
-#include <lx_emul.h>
-
-#include <legacy/lx_emul/extern_c_begin.h>
-#include <linux/usb.h>
-#include <legacy/lx_emul/extern_c_end.h>
-
-#define TRACE do { ; } while (0)
-
-#include <legacy/lx_emul/impl/kernel.h>
-#include <legacy/lx_emul/impl/delay.h>
-#include <legacy/lx_emul/impl/slab.h>
-#include <legacy/lx_emul/impl/work.h>
-#include <legacy/lx_emul/impl/spinlock.h>
-#include <legacy/lx_emul/impl/mutex.h>
-#include <legacy/lx_emul/impl/sched.h>
-#include <legacy/lx_emul/impl/timer.h>
-#include <legacy/lx_emul/impl/completion.h>
-#include <legacy/lx_emul/impl/wait.h>
-#include <legacy/lx_emul/impl/usb.h>
-
-#include <legacy/lx_kit/backend_alloc.h>
-
-#include <legacy/lx_emul/extern_c_begin.h>
-
-#include <linux/mii.h>
-#include <linux/usb/usbnet.h>
-
-
-static int usb_match_device(struct usb_device *dev,
-                            const struct usb_device_id *id)
-{
-	if ((id->match_flags & USB_DEVICE_ID_MATCH_VENDOR) &&
-	     id->idVendor != le16_to_cpu(dev->descriptor.idVendor))
-		return 0;
-
-	if ((id->match_flags & USB_DEVICE_ID_MATCH_PRODUCT) &&
-	     id->idProduct != le16_to_cpu(dev->descriptor.idProduct))
-		return 0;
-
-	if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_LO) &&
-	    (id->bcdDevice_lo > le16_to_cpu(dev->descriptor.bcdDevice)))
-		return 0;
-
-	if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_HI) &&
-	    (id->bcdDevice_hi < le16_to_cpu(dev->descriptor.bcdDevice)))
-		return 0;
-
-	if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_CLASS) &&
-	    (id->bDeviceClass != dev->descriptor.bDeviceClass))
-		return 0;
-
-	if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_SUBCLASS) &&
-	    (id->bDeviceSubClass != dev->descriptor.bDeviceSubClass))
-		return 0;
-
-	if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_PROTOCOL) &&
-	    (id->bDeviceProtocol != dev->descriptor.bDeviceProtocol))
-		return 0;
-
-	return 1;
-}
-
-
-static int usb_match_one_id_intf(struct usb_device *dev,
-                                 struct usb_host_interface *intf,
-                                 const struct usb_device_id *id)
-{
-	if (dev->descriptor.bDeviceClass == USB_CLASS_VENDOR_SPEC &&
-	    !(id->match_flags & USB_DEVICE_ID_MATCH_VENDOR) &&
-	    (id->match_flags & (USB_DEVICE_ID_MATCH_INT_CLASS |
-	                        USB_DEVICE_ID_MATCH_INT_SUBCLASS |
-	                        USB_DEVICE_ID_MATCH_INT_PROTOCOL |
-	                        USB_DEVICE_ID_MATCH_INT_NUMBER)))
-		return 0;
-
-	if ((id->match_flags & USB_DEVICE_ID_MATCH_INT_CLASS) &&
-	    (id->bInterfaceClass != intf->desc.bInterfaceClass))
-		return 0;
-
-	if ((id->match_flags & USB_DEVICE_ID_MATCH_INT_SUBCLASS) &&
-	    (id->bInterfaceSubClass != intf->desc.bInterfaceSubClass))
-		return 0;
-
-	if ((id->match_flags & USB_DEVICE_ID_MATCH_INT_PROTOCOL) &&
-	    (id->bInterfaceProtocol != intf->desc.bInterfaceProtocol))
-		return 0;
-
-	if ((id->match_flags & USB_DEVICE_ID_MATCH_INT_NUMBER) &&
-	    (id->bInterfaceNumber != intf->desc.bInterfaceNumber))
-		return 0;
-
-	return 1;
-}
-
-
-int usb_match_one_id(struct usb_interface *interface,
-                     const struct usb_device_id *id)
-{
-	struct usb_host_interface *intf;
-	struct usb_device *dev;
-
-	if (id == NULL)
-		return 0;
-
-	intf = interface->cur_altsetting;
-	dev = interface_to_usbdev(interface);
-
-	if (!usb_match_device(dev, id))
-		return 0;
-
-	return usb_match_one_id_intf(dev, intf, id);
-}
-
-#include <legacy/lx_emul/extern_c_end.h>
-
-
-class Addr_to_page_mapping : public Genode::List<Addr_to_page_mapping>::Element
-{
-	private:
-
-		struct page  *_page { nullptr };
-
-		static Genode::List<Addr_to_page_mapping> & _list()
-		{
-			static Genode::List<Addr_to_page_mapping> _l;
-			return _l;
-		}
-
-	public:
-
-		Addr_to_page_mapping(struct page *page)
-			: _page(page) { }
-
-		static void insert(struct page * page)
-		{
-			Addr_to_page_mapping *m = (Addr_to_page_mapping*)
-				Lx::Malloc::mem().alloc(sizeof (Addr_to_page_mapping));
-			m->_page = page;
-			_list().insert(m);
-		}
-
-		static struct page * remove(unsigned long addr)
-		{
-			for (Addr_to_page_mapping *m = _list().first(); m; m = m->next())
-				if ((unsigned long)m->_page->addr == addr) {
-					struct page * ret = m->_page;
-					_list().remove(m);
-					Lx::Malloc::mem().free(m);
-					return ret;
-				}
-
-			return nullptr;
-		}
-};
-
-struct Lx_driver
-{
-	using Element = Genode::List_element<Lx_driver>;
-	using List    = Genode::List<Element>;
-
-	usb_driver & drv;
-	Element      le { this };
-
-	Lx_driver(usb_driver & drv) : drv(drv) { list().insert(&le); }
-
-	usb_device_id * match(usb_interface * iface)
-	{
-		struct usb_device_id * id = const_cast<usb_device_id*>(drv.id_table);
-		for (; id->idVendor || id->idProduct || id->bDeviceClass ||
-		       id->bInterfaceClass || id->driver_info; id++)
-			if (usb_match_one_id(iface, id)) return id;
-		return nullptr;
-	}
-
-	int probe(usb_interface * iface, usb_device_id * id)
-	{
-		iface->dev.driver = &drv.drvwrap.driver;
-		if (drv.probe) return drv.probe(iface, id);
-		return 0;
-	}
-
-	static List & list()
-	{
-		static List _list;
-		return _list;
-	}
-};
-
-struct task_struct *current;
-struct workqueue_struct *system_wq;
-unsigned long jiffies;
-
-
-Genode::Ram_dataspace_capability Lx::backend_alloc(Genode::addr_t size,
-                                                   Genode::Cache cache)
-{
-	return Lx_kit::env().env().ram().alloc(size, cache);
-}
-
-
-int usb_register_driver(struct usb_driver * driver, struct module *, const char *)
-{
-	INIT_LIST_HEAD(&driver->dynids.list);
-	if (driver) new (Lx::Malloc::mem()) Lx_driver(*driver);
-	return 0;
-}
-
-
-Genode::addr_t Lx::backend_dma_addr(Genode::Ram_dataspace_capability)
-{
-	return 0;
-}
-
-
-int usb_driver_claim_interface(struct usb_driver *driver, struct usb_interface *iface, void *priv)
-{
-	usb_device      *udev = interface_to_usbdev(iface);
-	Usb::Connection *usb = reinterpret_cast<Usb::Connection *>(udev->bus->controller);
-	try {
-		usb->claim_interface(iface->cur_altsetting->desc.bInterfaceNumber);
-	} catch (...) {
-		return -1;
-	}
-	return 0;
-}
-
-
-int usb_set_interface(struct usb_device *udev, int ifnum, int alternate)
-{
-	Usb::Connection *usb = reinterpret_cast<Usb::Connection *>(udev->bus->controller);
-	Driver::Sync_packet packet { *usb };
-	packet.alt_setting(ifnum, alternate);
-	usb_interface *iface = udev->config->interface[ifnum];
-	iface->cur_altsetting = &iface->altsetting[alternate];
-
-	return 0;
-}
-
-void Driver::Device::probe_interface(usb_interface * iface, usb_device_id * id)
-{
-	using Le = Genode::List_element<Lx_driver>;
-	for (Le *le = Lx_driver::list().first(); le; le = le->next()) {
-		usb_device_id * id = le->object()->match(iface);
-
-		if (id) {
-			int ret = le->object()->probe(iface, id);
-			if (ret == 0) return;
-		}
-	}
-}
-
-
-void Driver::Device::remove_interface(usb_interface * iface)
-{
-	/* we might not drive this interface */
-	if (iface->dev.driver) {
-		usbnet *dev =(usbnet* )usb_get_intfdata(iface);
-		usbnet_link_change(dev, 0, 0);
-		to_usb_driver(iface->dev.driver)->disconnect(iface);
-	}
-
-	for (unsigned i = 0; i < iface->num_altsetting; i++) {
-		if (iface->altsetting[i].extra)
-			kfree(iface->altsetting[i].extra);
-		kfree(iface->altsetting[i].endpoint);
-	}
-
-	kfree(iface->altsetting);
-	kfree(iface);
-}
-
-
-long __wait_completion(struct completion *work, unsigned long timeout)
-{
-	Lx::timer_update_jiffies();
-	struct process_timer timer { *Lx::scheduler().current() };
-	unsigned long        expire = timeout + jiffies;
-
-	if (timeout) {
-		timer_setup(&timer.timer, process_timeout, 0);
-		mod_timer(&timer.timer, expire);
-	}
-
-	while (!work->done) {
-
-		if (timeout && expire <= jiffies) return 0;
-
-		Lx::Task * task = Lx::scheduler().current();
-		work->task = (void *)task;
-		task->block_and_schedule();
-	}
-
-	if (timeout) del_timer(&timer.timer);
-
-	work->done = 0;
-	return (expire > jiffies) ? (expire - jiffies) : 1;
-}
-
-
-u16 get_unaligned_le16(const void *p)
-{
-	const struct __una_u16 *ptr = (const struct __una_u16 *)p;
-	return ptr->x;
-}
-
-
-u32 get_unaligned_le32(const void *p)
-{
-	const struct __una_u32 *ptr = (const struct __una_u32 *)p;
-	return ptr->x;
-}
-
-
-enum { MAC_LEN = 17 };
-
-
-static void snprint_mac(char *buf, u8 *mac)
-{
-	for (int i = 0; i < ETH_ALEN; i++) {
-		Format::snprintf((char *)&buf[i * 3], 3, "%02x", mac[i]);
-		if ((i * 3) < MAC_LEN)
-			buf[(i * 3) + 2] = ':';
-	}
-
-	buf[MAC_LEN] = 0;
-}
-
-
-static void random_ether_addr(u8 *addr)
-{
-	using namespace Genode;
-
-	char str[MAC_LEN + 1];
-	u8 fallback[] = { 0x2e, 0x60, 0x90, 0x0c, 0x4e, 0x01 };
-	Nic::Mac_address mac;
-
-	Xml_node config_node = Lx_kit::env().config_rom().xml();
-
-	/* try using configured mac */
-	try {
-		Xml_node::Attribute mac_node = config_node.attribute("mac");
-		mac_node.value(mac);
-	} catch (...) {
-		/* use fallback mac */
-		snprint_mac(str, fallback);
-		Genode::warning("No mac address or wrong format attribute in <nic> - using fallback (", Genode::Cstring(str), ")");
-
-		Genode::memcpy(addr, fallback, ETH_ALEN);
-		return;
-	}
-
-	/* use configured mac*/
-	Genode::memcpy(addr, mac.addr, ETH_ALEN);
-	snprint_mac(str, (u8 *)mac.addr);
-	Genode::log("Using configured mac: ", Genode::Cstring(str));
-}
-
-
-void eth_hw_addr_random(struct net_device *dev)
-{
-	random_ether_addr(dev->dev_addr);
-}
-
-
-void eth_random_addr(u8 *addr)
-{
-	random_ether_addr(addr);
-}
-
-
-struct net_device *alloc_etherdev(int sizeof_priv)
-{
-	net_device *dev      = (net_device*) kzalloc(sizeof(net_device), 0);
-	dev->mtu             = 1500;
-	dev->hard_header_len = 0;
-	dev->priv            = kzalloc(sizeof_priv, 0);
-	dev->dev_addr        = (unsigned char*) kzalloc(ETH_ALEN, 0);
-	//memset(dev->_dev_addr, 0, sizeof(dev->_dev_addr));
-	return dev;
-}
-
-
-void free_netdev(struct net_device * ndev)
-{
-	if (!ndev) return;
-
-	kfree(ndev->priv);
-	kfree(ndev->dev_addr);
-	kfree(ndev);
-}
-
-
-void *__alloc_percpu(size_t size, size_t align)
-{
-	return kmalloc(size, 0);
-}
-
-
-int mii_nway_restart(struct mii_if_info *mii)
-{
-	/* if autoneg is off, it's an error */
-	int bmcr = mii->mdio_read(mii->dev, mii->phy_id, MII_BMCR);
-
-	if (bmcr & BMCR_ANENABLE) {
-		printk("Reenable\n");
-		bmcr |= BMCR_ANRESTART;
-		mii->mdio_write(mii->dev, mii->phy_id, MII_BMCR, bmcr);
-		return 0;
-	}
-
-	return -EINVAL;
-}
-
-
-static net_device * single_net_device = nullptr;
-
-int register_netdev(struct net_device *dev)
-{
-	dev->state |= 1 << __LINK_STATE_START;
-
-	int err = dev->netdev_ops->ndo_open(dev);
-
-	if (err) return err;
-
-	if (dev->netdev_ops->ndo_set_rx_mode)
-		dev->netdev_ops->ndo_set_rx_mode(dev);
-	single_net_device = dev;
-	return 0;
-};
-
-
-void unregister_netdev(struct net_device * dev)
-{
-	if (dev->netdev_ops->ndo_stop)
-		dev->netdev_ops->ndo_stop(dev);
-
-	single_net_device = NULL;
-}
-
-
-net_device *
-Linux_network_session_base::
-_register_session(Linux_network_session_base &session,
-                  Genode::Session_label       policy)
-{
-	if (single_net_device) single_net_device->session_component = &session;
-	return single_net_device;
-}
-
-
-void tasklet_schedule(struct tasklet_struct *t)
-{
-	Lx::Work *lx_work = (Lx::Work *)tasklet_wq->task;
-	lx_work->schedule_tasklet(t);
-	lx_work->unblock();
-}
-
-
-struct workqueue_struct *create_singlethread_workqueue(char const *name)
-{
-	workqueue_struct *wq = (workqueue_struct *)kzalloc(sizeof(workqueue_struct), 0);
-	Lx::Work *work = Lx::Work::alloc_work_queue(&Lx::Malloc::mem(), name);
-	wq->task       = (void *)work;
-
-	return wq;
-}
-
-
-struct workqueue_struct *alloc_workqueue(const char *fmt, unsigned int flags,
-                                         int max_active, ...)
-{
-	return create_singlethread_workqueue(fmt);
-}
-
-
-int dev_set_drvdata(struct device *dev, void *data)
-{
-	dev->driver_data = data;
-	return 0;
-}
-
-
-void * dev_get_drvdata(const struct device *dev)
-{
-	return dev->driver_data;
-}
-
-
-int netif_running(const struct net_device *dev)
-{
-	return dev->state & (1 << __LINK_STATE_START);
-}
-
-
-void netif_carrier_off(struct net_device *dev)
-{
-	dev->state |= 1 << __LINK_STATE_NOCARRIER;
-	if (dev->session_component)
-		reinterpret_cast<Linux_network_session_base*>(dev->session_component)->
-			link_state(false);
-}
-
-
-int netif_carrier_ok(const struct net_device *dev)
-{
-	return !(dev->state & (1 << __LINK_STATE_NOCARRIER));
-}
-
-
-void *kmem_cache_alloc_node(struct kmem_cache *cache, gfp_t gfp_flags, int arg)
-{
-	return (void*)cache->alloc_element();
-}
-
-
-int mii_ethtool_gset(struct mii_if_info *mii, struct ethtool_cmd *ecmd)
-{
-	ecmd->duplex = DUPLEX_FULL;
-	return 0;
-}
-
-
-void netif_carrier_on(struct net_device *dev)
-{
-	dev->state &= ~(1 << __LINK_STATE_NOCARRIER);
-	if (dev->session_component)
-		reinterpret_cast<Linux_network_session_base*>(dev->session_component)->
-			link_state(true);
-}
-
-
-int netif_rx(struct sk_buff * skb)
-{
-	if (skb->dev->session_component)
-		reinterpret_cast<Linux_network_session_base*>(skb->dev->session_component)->
-			receive(skb);
-
-	dev_kfree_skb(skb);
-	return NET_RX_SUCCESS;
-}
-
-
-void dev_kfree_skb_any(struct sk_buff *skb)
-{
-	dev_kfree_skb(skb);
-}
-
-int is_valid_ether_addr(const u8 * a)
-{
-	for (unsigned i = 0; i < ETH_ALEN; i++)
-		if (a[i] != 0 && a[i] != 255) return 1;
-	return 0;
-}
-
-
-unsigned int mii_check_media (struct mii_if_info *mii, unsigned int ok_to_print, unsigned int init_media)
-{
-	if (mii_link_ok(mii)) netif_carrier_on(mii->dev);
-	else                  netif_carrier_off(mii->dev);
-	return 0;
-}
-
-
-int mii_link_ok (struct mii_if_info *mii)
-{
-	/* first, a dummy read, needed to latch some MII phys */
-	mii->mdio_read(mii->dev, mii->phy_id, MII_BMSR);
-	if (mii->mdio_read(mii->dev, mii->phy_id, MII_BMSR) & BMSR_LSTATUS)
-		return 1;
-	return 0;
-}
-
-
-static struct page *allocate_pages(gfp_t gfp_mask, unsigned int size)
-{
-	struct page *page = (struct page *)kzalloc(sizeof(struct page), 0);
-
-	page->addr = Lx::Malloc::dma().alloc_large(size);
-	page->size = size;
-
-	if (!page->addr) {
-		Genode::error("alloc_pages: ", size, " failed");
-		kfree(page);
-		return 0;
-	}
-
-	Addr_to_page_mapping::insert(page);
-
-	atomic_set(&page->_count, 1);
-
-	return page;
-}
-
-
-void *page_frag_alloc(struct page_frag_cache *nc, unsigned int fragsz, gfp_t gfp_mask)
-{
-	struct page *page = allocate_pages(gfp_mask, fragsz);
-	if (!page) return nullptr;
-
-	return page->addr;
-}
-
-
-void page_frag_free(void *addr)
-{
-	struct page *page = Addr_to_page_mapping::remove((unsigned long)addr);
-
-	if (!atomic_dec_and_test(&page->_count))
-		Genode::error("page reference count != 0");
-
-	Lx::Malloc::dma().free_large(page->addr);
-	kfree(page);
-}
-
-
diff --git a/repos/dde_linux/src/drivers/legacy_usb_net/lx_emul.h b/repos/dde_linux/src/drivers/legacy_usb_net/lx_emul.h
deleted file mode 100644
index e26d349da1..0000000000
--- a/repos/dde_linux/src/drivers/legacy_usb_net/lx_emul.h
+++ /dev/null
@@ -1,1304 +0,0 @@
-/*
- * \brief  USB net driver Linux emulation environment
- * \author Stefan Kalkowski
- * \date   2018-06-13
- */
-
-/*
- * Copyright (C) 2018 Genode Labs GmbH
- *
- * This file is distributed under the terms of the GNU General Public License
- * version 2.
- */
-
-#ifndef _SRC__DRIVERS__USB_NET__LX_EMUL_H_
-#define _SRC__DRIVERS__USB_NET__LX_EMUL_H_
-
-#include <base/fixed_stdint.h>
-#include <stdarg.h>
-
-#include <legacy/lx_emul/extern_c_begin.h>
-
-#define __KERNEL__ 1
-
-#include <legacy/lx_emul/compiler.h>
-#include <legacy/lx_emul/printf.h>
-#include <legacy/lx_emul/types.h>
-#include <legacy/lx_emul/kernel.h>
-
-#define __KERNEL_DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d))
-
-enum { HZ = 100UL };
-
-#include <legacy/lx_emul/jiffies.h>
-#include <legacy/lx_emul/time.h>
-#include <legacy/lx_emul/bitops.h>
-
-typedef int clockid_t;
-
-#include <legacy/lx_emul/timer.h>
-#include <legacy/lx_emul/spinlock.h>
-#include <legacy/lx_emul/mutex.h>
-
-typedef __u16 __le16;
-typedef __u32 __le32;
-typedef __u64 __le64;
-typedef __u64 __be64;
-
-#define __aligned_u64 __u64 __attribute__((aligned(8)))
-
-#include <legacy/lx_emul/byteorder.h>
-#include <legacy/lx_emul/atomic.h>
-#include <legacy/lx_emul/work.h>
-#include <legacy/lx_emul/bug.h>
-#include <legacy/lx_emul/errno.h>
-#include <legacy/lx_emul/module.h>
-//#define __init
-//#define __exit
-//#define THIS_MODULE 0
-//struct module;
-//#define module_init(fn) int module_##fn(void) { return fn(); }
-//#define module_exit(fn) void module_exit_##fn(void) { fn(); }
-//#define EXPORT_SYMBOL_GPL(x)
-//#define MODULE_AUTHOR(name)
-//#define MODULE_DESCRIPTION(desc)
-//#define MODULE_LICENSE(x)
-//#define MODULE_VERSION(x)
-//#define MODULE_PARM_DESC(_parm, desc)
-//#define module_param(name, type, perm)
-#include <legacy/lx_emul/gfp.h>
-#include <legacy/lx_emul/barrier.h>
-
-#define READ_ONCE(x) x
-
-#include <legacy/lx_emul/list.h>
-#include <legacy/lx_emul/string.h>
-#include <legacy/lx_emul/kobject.h>
-#include <legacy/lx_emul/completion.h>
-#include <legacy/lx_emul/pm.h>
-#include <legacy/lx_emul/scatterlist.h>
-
-struct user_namespace {};
-
-struct cred {
-	struct user_namespace * user_ns;
-};
-
-struct file
-{
-	unsigned int f_flags;
-	void * private_data;
-	const struct cred * f_cred;
-};
-
-struct device;
-struct device_driver;
-
-typedef struct { __u8 b[16]; } uuid_le;
-void * dev_get_drvdata(const struct device *dev);
-int    dev_set_drvdata(struct device *dev, void *data);
-
-#define netdev_dbg(dev, fmt, args...)
-#define netdev_warn(dev, fmt, args...)  lx_printf("netdev_warn: " fmt, ##args)
-#define netdev_err(dev, fmt, args...)   lx_printf("netdev_err:  " fmt, ##args)
-#define netdev_info(dev, fmt, args...)  lx_printf("netdev_info: " fmt, ##args)
-
-#define dev_info(dev, format, arg...) lx_printf("dev_info: " format , ## arg)
-#define dev_warn(dev, format, arg...) lx_printf("dev_warn: " format , ## arg)
-#define dev_err( dev, format, arg...) lx_printf("dev_err: "  format , ## arg)
-#define dev_dbg( dev, format, arg...)
-
-#define netif_info(priv, type, dev, fmt, args...) lx_printf("netif_info: " fmt, ## args);
-#define netif_dbg(priv, type, dev, fmt, args...)
-#define netif_err(priv, type, dev, fmt, args...)  lx_printf("netif_err: "  fmt, ## args);
-
-#define pr_debug(fmt, ...)
-#define pr_info(fmt, ...)       printk(KERN_INFO fmt,   ##__VA_ARGS__)
-#define pr_err(fmt, ...)        printk(KERN_ERR fmt,    ##__VA_ARGS__)
-#define pr_warn(fmt, ...)       printk(KERN_ERR fmt,    ##__VA_ARGS__)
-#define pr_info_once(fmt, ...)  printk(KERN_INFO fmt,   ##__VA_ARGS__)
-#define pr_notice(fmt, ...)     printk(KERN_NOTICE fmt, ##__VA_ARGS__)
-#define pr_emerg(fmt, ...)      printk(KERN_INFO fmt,   ##__VA_ARGS__)
-
-#define try_then_request_module(x, mod...) (x)
-
-struct bus_type
-{
-	int (*match)(struct device *dev, struct device_driver *drv);
-	int (*probe)(struct device *dev);
-};
-
-struct device_driver
-{
-	char const      *name;
-	struct bus_type *bus;
-	struct module   *owner;
-	const char      *mod_name;
-};
-
-typedef int devt;
-
- struct device_type {
-	const char *name;
-};
-
-struct class
-{
-	const char *name;
-	char *(*devnode)(struct device *dev, mode_t *mode);
-};
-
-struct device_node;
-
-struct device
-{
-	char const               * name;
-	struct device            * parent;
-	struct kobject           * kobj;
-	struct device_driver     * driver;
-	struct bus_type          * bus;
-	dev_t                      devt;
-	struct class             * class;
-	const struct device_type * type;
-	void (*release)(struct device *dev);
-	void                     * driver_data;
-	struct device_node       * of_node;
-};
-
-#define module_driver(__driver, __register, __unregister, ...) \
-	static int __init __driver##_init(void)                    \
-	{                                                          \
-		return __register(&(__driver) , ##__VA_ARGS__);        \
-	}                                                          \
-	module_init(__driver##_init);                              \
-	static void __exit __driver##_exit(void)                   \
-	{                                                          \
-		__unregister(&(__driver) , ##__VA_ARGS__);             \
-	}                                                          \
-	module_exit(__driver##_exit);
-
-#define KBUILD_MODNAME ""
-
-void kfree(const void *);
-
-#define from_timer(var, callback_timer, timer_fieldname) \
-	container_of(callback_timer, typeof(*var), timer_fieldname)
-
-void *kmalloc(size_t size, gfp_t flags);
-void *kzalloc(size_t size, gfp_t flags);
-int snprintf(char *buf, size_t size, const char *fmt, ...);
-const char *dev_name(const struct device *dev);
-
-struct __una_u16 { u16 x; } __attribute__((packed));
-struct __una_u32 { u32 x; } __attribute__((packed));
-
-#define get_unaligned(ptr) (*ptr)
-u16 get_unaligned_le16(const void *p);
-u32  get_unaligned_le32(const void *p);
-
-struct completion
-{
-	unsigned int done;
-	void * task;
-};
-
-struct notifier_block;
-
-enum {
-	ESHUTDOWN   = 58,
-};
-
-void msleep(unsigned int);
-
-#define PAGE_SIZE 4096
-
-#define rcu_assign_pointer(p,v) p = v
-
-signed long schedule_timeout(signed long timeout);
-
-int device_set_wakeup_enable(struct device *dev, bool enable);
-
-struct tasklet_struct
-{
-	void (*func)(unsigned long);
-	unsigned long data;
-};
-
-struct net_device;
-struct ifreq;
-struct sk_buff;
-struct rtnl_link_stats64;
-
-enum netdev_tx {
-	NETDEV_TX_OK = 0x00,
-	NETDEV_TX_BUSY = 0x10,
-	NETDEV_TX_LOCKED = 0x20,
-};
-typedef enum netdev_tx netdev_tx_t;
-
-#include <linux/netdev_features.h>
-
-struct net_device_ops {
-	int (*ndo_open) (struct net_device *dev);
-	int (*ndo_stop) (struct net_device *dev);
-	netdev_tx_t (*ndo_start_xmit) (struct sk_buff *skb, struct net_device *dev);
-	void (*ndo_set_rx_mode) (struct net_device *dev);
-	int (*ndo_change_mtu) (struct net_device *dev, int new_mtu);
-	int (*ndo_validate_addr) (struct net_device *dev);
-	void (*ndo_tx_timeout) (struct net_device *dev);
-	int (*ndo_set_mac_address)(struct net_device *dev, void *addr);
-	int (*ndo_do_ioctl)(struct net_device *dev, struct ifreq *ifr, int cmd);
-	int (*ndo_set_features)(struct net_device *dev, netdev_features_t features);
-	void (*ndo_get_stats64)(struct net_device *dev, struct rtnl_link_stats64 *storage);
-};
-
-struct net_device_stats
-{
-	unsigned long rx_packets;
-	unsigned long tx_packets;
-	unsigned long rx_bytes;
-	unsigned long tx_bytes;
-	unsigned long rx_errors;
-	unsigned long tx_errors;
-	unsigned long rx_dropped;
-	unsigned long tx_dropped;
-	unsigned long rx_length_errors;
-	unsigned long rx_over_errors;
-	unsigned long rx_crc_errors;
-	unsigned long rx_frame_errors;
-};
-
-enum netdev_state_t {
-	__LINK_STATE_START,
-	__LINK_STATE_PRESENT,
-	__LINK_STATE_NOCARRIER,
-	__LINK_STATE_LINKWATCH_PENDING,
-	__LINK_STATE_DORMANT,
-};
-
-enum { MAX_ADDR_LEN = 32, IFNAMESZ = 16 };
-
-struct net_device
-{
-	char                         name[IFNAMESZ];
-	unsigned long                state;
-	netdev_features_t            features;
-	struct net_device_stats      stats;
-	netdev_features_t            hw_features;
-	const struct net_device_ops *netdev_ops;
-	const struct ethtool_ops    *ethtool_ops;
-	const struct header_ops     *header_ops;
-	unsigned int                 flags;
-	unsigned int                 priv_flags;
-	unsigned short               hard_header_len;
-	unsigned char                min_header_len;
-	unsigned long                mtu;
-	unsigned long                min_mtu;
-	unsigned long                max_mtu;
-	unsigned short               type;
-	unsigned char                addr_len;
-	unsigned char               *dev_addr;
-	unsigned char                broadcast[MAX_ADDR_LEN];
-	unsigned long                tx_queue_len;
-	int                          watchdog_timeo;
-	struct timer_list            watchdog_timer;
-	struct                       device dev;
-	u16                          gso_max_segs;
-	struct phy_device           *phydev;
-	unsigned short               needed_headroom;
-	unsigned short               needed_tailroom;
-	void                        *priv;
-	unsigned char                perm_addr[MAX_ADDR_LEN];
-	unsigned char                addr_assign_type;
-	int                          ifindex;
-	void                        *session_component;
-};
-
-struct usbnet;
-
-struct ethtool_eeprom;
-struct ethtool_drvinfo;
-
-struct sock;
-
-struct kvec
-{
-	void  *iov_base;
-	size_t iov_len;
-};
-
-struct iov_iter {};
-size_t iov_iter_count(struct iov_iter *i);
-
-typedef int raw_hdlc_proto;
-typedef int cisco_proto;
-typedef int fr_proto;
-typedef int fr_proto_pvc;
-typedef int fr_proto_pvc_info;
-typedef int sync_serial_settings;
-typedef int te1_settings;
-
-struct rndis_indicate;
-
-enum { ETH_ALEN = 6 };
-
-int netif_running(const struct net_device *dev);
-int phy_mii_ioctl(struct phy_device *phydev, struct ifreq *ifr, int cmd);
-static inline void *netdev_priv(const struct net_device *dev) { return dev->priv; }
-
-int usbnet_read_cmd(struct usbnet *dev, u8 cmd, u8 reqtype, u16 value, u16 index, void *data, u16 size);
-int usbnet_read_cmd_nopm(struct usbnet *dev, u8 cmd, u8 reqtype, u16 value, u16 index, void *data, u16 size);
-
-typedef __u32 __wsum;
-
-static inline int rcu_read_lock_held(void) { return 1; }
-static inline int rcu_read_lock_bh_held(void) { return 1; }
-
-enum { NUMA_NO_NODE = -1 };
-
-struct ts_state
-{
-	char cb[40];
-};
-
-struct ts_config
-{
-	unsigned int  (*get_next_block)(unsigned int consumed,
-	                                const u8 **dst,
-	                                struct ts_config *conf,
-	                                struct ts_state *state);
-	void          (*finish)(struct ts_config *conf,
-	                        struct ts_state *state);
-};
-
-struct flow_dissector_key_control
-{
-	u16 thoff;
-	u16 addr_type;
-	u32 flags;
-};
-
-struct flow_keys
-{
-	struct flow_dissector_key_control control;
-};
-
-struct flow_dissector_key {};
-
-struct flow_dissector {};
-
-extern struct flow_dissector flow_keys_dissector;
-extern struct flow_dissector flow_keys_buf_dissector;
-
-struct flowi4 {};
-struct flowi6 {};
-
-__u32 __get_hash_from_flowi6(const struct flowi6 *fl6, struct flow_keys *keys);
-
-bool flow_keys_have_l4(struct flow_keys *keys);
-
-__u32 __get_hash_from_flowi4(const struct flowi4 *fl4, struct flow_keys *keys);
-
-bool gfpflags_allow_blocking(const gfp_t gfp_flags);
-
-struct lock_class_key { };
-
-#define lockdep_set_class(lock, key)
-
-struct page
-{
-	atomic_t _count;
-	void *addr;
-	dma_addr_t paddr;
-	unsigned long private;
-	unsigned long size;
-} __attribute((packed));
-
-static inline struct page *compound_head(struct page *page) { return page; }
-
-bool page_is_pfmemalloc(struct page *page);
-
-void __free_page_frag(void *addr);
-
-struct page *alloc_pages_node(int nid, gfp_t gfp_mask, unsigned int order);
-
-void get_page(struct page *page);
-void put_page(struct page *page);
-
-static inline void *page_address(struct page *page) { return page->addr; };
-
-struct page_frag
-{
-	struct page *page;
-	__u16        offset;
-	__u16        size;
-};
-
-enum dma_data_direction { DMA_FROM_DEVICE = 2 };
-
-dma_addr_t dma_map_page(struct device *dev, struct page *page, size_t offset, size_t size, enum dma_data_direction      dir);
-
-void dma_sync_single_for_cpu(struct device *dev, dma_addr_t addr, size_t size, enum dma_data_direction dir);
-
-#define L1_CACHE_BYTES  32
-
-size_t csum_and_copy_from_iter(void *addr, size_t bytes, __wsum *csum, struct iov_iter *i);
-
-__wsum csum_block_add(__wsum csum, __wsum csum2, int offset);
-__wsum csum_sub(__wsum csum, __wsum addend);
-__wsum csum_partial(const void *buff, int len, __wsum sum);
-
-bool csum_and_copy_from_iter_full(void *addr, size_t bytes, __wsum *csum, struct iov_iter *i);
-bool copy_from_iter_full(void *addr, size_t bytes, struct iov_iter *i);
-__wsum csum_block_sub(__wsum, __wsum, int);
-typedef unsigned __poll_t;
-
-typedef struct poll_table_struct { } poll_table;
-size_t copy_to_iter(void *addr, size_t bytes, struct iov_iter *i);
-struct timespec ktime_to_timespec(const ktime_t kt);
-
-struct socket;
-typedef u64 netdev_features_t;
-typedef __u16 __sum16;
-
-__sum16 csum_fold(__wsum csum);
-__wsum csum_unfold(__sum16 n);
-__wsum csum_add(__wsum csum, __wsum addend);
-__wsum remcsum_adjust(void *ptr, __wsum csum, int start, int offset);
-
-struct sk_buff;
-
-void dev_kfree_skb_any(struct sk_buff *);
-
-
-extern void page_frag_free(void *addr);
-
-#define DECLARE_BITMAP(name,bits) unsigned long name[BITS_TO_LONGS(bits)]
-
-struct rtnl_link_stats64;
-struct ethtool_link_ksettings;
-int netif_carrier_ok(const struct net_device *dev);
-
-int is_valid_ether_addr(const u8 *);
-
-void phy_print_status(struct phy_device *phydev);
-
-enum {
-	MII_BMCR      = 0x0,
-	MII_BMSR      = 0x1,
-	MII_PHYSID1   = 0x2,
-	MII_PHYSID2   = 0x3,
-	MII_ADVERTISE = 0x4,
-	MII_LPA       = 0x5,
-	MII_CTRL1000  = 0x9,
-	MII_MMD_CTRL  = 0xd,
-	MII_MMD_DATA  = 0xe,
-	MII_PHYADDR   = 0x19,
-	MII_MMD_CTRL_NOINCR = 0x4000,
-};
-
-enum { VLAN_HLEN = 4 };
-
-void udelay(unsigned long usecs);
-
-int eth_validate_addr(struct net_device *);
-
-int netdev_mc_empty(struct net_device *);
-unsigned netdev_mc_count(struct net_device * dev);
-
-#define netdev_for_each_mc_addr(a, b) if (0)
-
-void usleep_range(unsigned long min, unsigned long max);
-
-void eth_hw_addr_random(struct net_device *dev);
-
-static inline void ether_addr_copy(u8 *dst, const u8 *src)
-{
-	*(u32 *)dst      = *(const u32 *)src;
-	*(u16 *)(dst+ 4) = *(const u16 *)(src + 4);
-}
-
-u32 ether_crc(int, unsigned char *);
-
-struct netdev_hw_addr
-{
-	unsigned char addr[MAX_ADDR_LEN];
-};
-
-void mdelay(unsigned long usecs);
-
-int eth_mac_addr(struct net_device *, void *);
-
-void netif_carrier_on(struct net_device *dev);
-void netif_carrier_off(struct net_device *dev);
-
-const void *of_get_mac_address(struct device_node *np);
-
-u16 bitrev16(u16 in);
-u16 crc16(u16 crc, const u8 *buffer, size_t len);
-int hex2bin(u8 *dst, const char *src, size_t count);
-char *hex_byte_pack(char *buf, u8 byte);
-
-#define hex_asc_upper_lo(x)	hex_asc_upper[((x) & 0x0f)]
-#define hex_asc_lo(x)	hex_asc[((x) & 0x0f)]
-#define hex_asc_hi(x)	hex_asc[((x) & 0xf0) >> 4]
-
-
-#define this_cpu_ptr(ptr) ptr
-
-__be16 eth_type_trans(struct sk_buff *, struct net_device *);
-
-struct u64_stats_sync {};
-
-static inline unsigned long u64_stats_update_begin_irqsave(struct u64_stats_sync *syncp) {
-	return 0; }
-
-static inline void u64_stats_update_end_irqrestore(struct u64_stats_sync *syncp, unsigned long flags) { }
-
-struct pcpu_sw_netstats
-{
-	u64                   rx_packets;
-	u64                   rx_bytes;
-	u64                   tx_packets;
-	u64                   tx_bytes;
-	struct u64_stats_sync syncp;
-};
-
-int netif_rx(struct sk_buff *);
-
-enum { NET_RX_SUCCESS = 0 };
-enum { SINGLE_DEPTH_NESTING = 1 };
-
-void tasklet_schedule(struct tasklet_struct *t);
-void tasklet_kill(struct tasklet_struct *t);
-
-int  netif_device_present(struct net_device * d);
-void netif_device_detach(struct net_device *dev);
-void netif_stop_queue(struct net_device *);
-void netif_start_queue(struct net_device *);
-void netif_wake_queue(struct net_device * d);
-
-void netdev_stats_to_stats64(struct rtnl_link_stats64 *stats64, const struct net_device_stats *netdev_stats);
-
-enum { TASK_RUNNING = 0, TASK_INTERRUPTIBLE = 1, TASK_UNINTERRUPTIBLE = 2, TASK_NORMAL = 3 };
-
-void __set_current_state(int state);
-#define set_current_state(state) __set_current_state(state)
-
-extern const struct cpumask *const cpu_possible_mask;
-
-#define for_each_cpu(cpu, mask)                 \
-	for ((cpu) = 0; (cpu) < 1; (cpu)++, (void)mask)
-
-#define for_each_possible_cpu(cpu) for_each_cpu((cpu), cpu_possible_mask)
-
-#define per_cpu_ptr(ptr, cpu)   ({ (void)(cpu);(typeof(*(ptr)) *)(ptr); })
-
-u32 netif_msg_init(int, int);
-#define netif_msg_tx_err(p) ({ printk("netif_msg_tx_err called not implemented\n"); 0; })
-#define netif_msg_rx_err(p) ({ printk("netif_msg_rx_err called not implemented\n"); 0; })
-
-unsigned int u64_stats_fetch_begin_irq(const struct u64_stats_sync *p);
-bool u64_stats_fetch_retry_irq(const struct u64_stats_sync *p, unsigned int s);
-
-void unregister_netdev(struct net_device *);
-
-#define free_percpu(pdata) kfree(pdata)
-
-void free_netdev(struct net_device *);
-
-void netif_trans_update(struct net_device *dev);
-
-void pm_runtime_enable(struct device *dev);
-
-struct net_device *alloc_etherdev(int);
-
-#define SET_NETDEV_DEV(net, pdev)        ((net)->dev.parent = (pdev))
-
-void *__alloc_percpu(size_t size, size_t align);
-
-#define alloc_percpu(type) \
-	(typeof(type) __percpu *)__alloc_percpu(sizeof(type), __alignof__(type))
-
-
-#define netdev_alloc_pcpu_stats(type) alloc_percpu(type)
-
-enum {
-	NETIF_MSG_DRV   = 0x1,
-	NETIF_MSG_PROBE = 0x2,
-	NETIF_MSG_LINK  = 0x4,
-};
-
-static inline bool ether_addr_equal(const u8 *addr1, const u8 *addr2)
-{
-	const u16 *a = (const u16 *)addr1;
-	const u16 *b = (const u16 *)addr2;
-
-	return ((a[0] ^ b[0]) | (a[1] ^ b[1]) | (a[2] ^ b[2])) == 0;
-}
-
-enum { NET_ADDR_RANDOM = 1 };
-
-#define SET_NETDEV_DEVTYPE(net, devtype) ((net)->dev.type = (devtype))
-
-int register_netdev(struct net_device *);
-
-void netif_device_attach(struct net_device *dev);
-
-enum { GFP_NOIO = GFP_LX_DMA };
-
-void netif_tx_wake_all_queues(struct net_device *dev);
-
-void eth_random_addr(u8 *addr);
-
-long  __wait_completion(struct completion *work, unsigned long timeout);
-
-struct mii_ioctl_data;
-
-typedef int possible_net_t;
-
-void *kmalloc_node_track_caller(size_t size, gfp_t flags, int node);
-bool gfp_pfmemalloc_allowed(gfp_t);
-
-struct callback_head {
-	struct callback_head *next;
-	void (*func)(struct callback_head *head);
-};
-#define rcu_head callback_head
-
-typedef int rwlock_t;
-
-struct task_struct;
-
-typedef struct { } read_descriptor_t;
-
-#define SMP_CACHE_BYTES L1_CACHE_BYTES
-#define ____cacheline_aligned        __attribute__((aligned(SMP_CACHE_BYTES)))
-#define ____cacheline_aligned_in_smp __attribute__((aligned(SMP_CACHE_BYTES)))
-
-struct percpu_counter {
-	s64 count;
-};
-
-static inline int percpu_counter_init(struct percpu_counter *fbc, s64 amount, gfp_t gfp)
-{
-	fbc->count = amount;
-	return 0;
-}
-
-static inline s64 percpu_counter_read(struct percpu_counter *fbc)
-{
-	return fbc->count;
-}
-
-static inline
-void percpu_counter_add(struct percpu_counter *fbc, s64 amount)
-{
-	fbc->count += amount;
-}
-
-static inline
-void __percpu_counter_add(struct percpu_counter *fbc, s64 amount, s32 batch)
-{
-	percpu_counter_add(fbc, amount);
-}
-
-s64 percpu_counter_sum_positive(struct percpu_counter *fbc);
-
-static inline void percpu_counter_inc(struct percpu_counter *fbc)
-{
-	percpu_counter_add(fbc, 1);
-}
-
-static inline void percpu_counter_dec(struct percpu_counter *fbc)
-{
-	percpu_counter_add(fbc, -1);
-}
-
-static inline
-s64 percpu_counter_read_positive(struct percpu_counter *fbc)
-{
-	return fbc->count;
-}
-
-void percpu_counter_destroy(struct percpu_counter *fbc);
-
-s64 percpu_counter_sum(struct percpu_counter *fbc);
-
-void bitmap_fill(unsigned long *dst, int nbits);
-void bitmap_zero(unsigned long *dst, int nbits);
-
-typedef unsigned seqlock_t;
-
-enum { LL_MAX_HEADER  = 96 };
-
-struct hh_cache
-{
-	u16         hh_len;
-	u16       __pad;
-	seqlock_t   hh_lock;
-
-#define HH_DATA_MOD 16
-#define HH_DATA_OFF(__len) \
-	(HH_DATA_MOD - (((__len - 1) & (HH_DATA_MOD - 1)) + 1))
-#define HH_DATA_ALIGN(__len) \
-	(((__len)+(HH_DATA_MOD-1))&~(HH_DATA_MOD - 1))
-	unsigned long   hh_data[HH_DATA_ALIGN(LL_MAX_HEADER) / sizeof(long)];
-};
-
-struct seq_net_private {
-	struct net *net;
-};
-
-struct seq_file;
-struct ctl_table;
-
-typedef int proc_handler (struct ctl_table *ctl, int write, void __user *buffer, size_t *lenp, loff_t *ppos);
-
-unsigned read_seqbegin(const seqlock_t *sl);
-unsigned read_seqretry(const seqlock_t *sl, unsigned start);
-
-int dev_queue_xmit(struct sk_buff *skb);
-
-#define raw_smp_processor_id() 0
-
-#define rcu_dereference_bh(p) p
-#define rcu_dereference_raw(p) p
-#define rcu_dereference_check(p, c) p
-#define rcu_dereference(p) p
-
-#define read_pnet(pnet) (&init_net)
-
-static inline int net_eq(const struct net *net1, const struct net *net2) {
-	return net1 == net2; }
-
-extern struct net init_net;
-
-struct net *dev_net(const struct net_device *dev);
-
-#define __randomize_layout
-
-struct cgroup;
-
-#define mem_cgroup_sockets_enabled 0
-
-struct mem_cgroup;
-
-static inline bool mem_cgroup_under_socket_pressure(struct mem_cgroup *memcg) {
-	return false; }
-
-struct inode
-{
-//umode_t       i_mode;
-	kuid_t        i_uid;
-//unsigned long i_ino;
-};
-
-#define mutex_release(l, n, i)
-
-int spin_is_locked(spinlock_t *lock);
-
-void write_lock_bh(rwlock_t *);
-void write_unlock_bh(rwlock_t *);
-
-void security_sock_graft(struct sock *, struct socket *);
-
-typedef unsigned  kgid_t;
-kuid_t make_kuid(struct user_namespace *from, uid_t uid);
-
-struct net
-{
-	struct user_namespace * user_ns;
-};
-
-u32 prandom_u32(void);
-void rcu_read_lock(void);
-void rcu_read_unlock(void);
-#define rcu_dereference_protected(p, c) p
-bool net_gso_ok(netdev_features_t features, int gso_type);
-bool copy_from_iter_full_nocache(void *addr, size_t bytes, struct iov_iter *i);
-bool lockdep_is_held(void *l);
-
-extern int debug_locks;
-bool wq_has_sleeper(struct wait_queue_head *wq_head);
-bool poll_does_not_wait(const poll_table *p);
-void poll_wait(struct file *f, wait_queue_head_t *w, poll_table *p);
-
-struct task_struct
-{
-	unsigned int flags;
-	struct page_frag task_frag;
-};
-
-extern struct task_struct *current;
-int in_softirq(void);
-
-enum { MAX_SCHEDULE_TIMEOUT = 1000 };
-
-#define FIELD_SIZEOF(t, f) (sizeof(((t*)0)->f))
-
-#define write_pnet(pnet, net) do { (void)(net);} while (0)
-
-int l3mdev_master_ifindex_by_index(struct net *net, int ifindex);
-
-struct kmem_cache;
-void *kmem_cache_alloc_node(struct kmem_cache *cache, gfp_t, int);
-void  kmem_cache_free(struct kmem_cache *, void *);
-void  *kmem_cache_alloc(struct kmem_cache *, gfp_t);
-struct page *virt_to_head_page(const void *x);
-
-struct page_frag_cache
-{
-	bool pfmemalloc;
-};
-
-#define prefetchw(x) __builtin_prefetch(x,1)
-
-size_t ksize(void *);
-
-#define DEFINE_PER_CPU(type, name) \
-	typeof(type) name
-
-static inline unsigned long local_irq_save(unsigned long flags) { return flags; }
-static inline void local_irq_restore(unsigned long f) { }
-
-void *page_frag_alloc(struct page_frag_cache *nc, unsigned int fragsz, gfp_t gfp_mask);
-
-enum {
-	NAPI_STATE_SCHED,
-	NAPI_STATE_DISABLE,
-	NAPI_STATE_NPSVC,
-	NAPI_STATE_HASHED,
-};
-
-struct napi_struct
-{
-	struct net_device * dev;
-	int (*poll)(struct napi_struct *, int);
-	unsigned long state;
-	int weight;
-};
-
-void secpath_reset(struct sk_buff *);
-int in_irq();
-
-void trace_kfree_skb(struct sk_buff *, void *);
-void trace_consume_skb(struct sk_buff *);
-
-void kmem_cache_free_bulk(struct kmem_cache *, size_t, void **);
-
-void dev_consume_skb_any(struct sk_buff *skb);
-
-bool capable(int);
-
-enum { PAGE_SHIFT = 12 };
-
-unsigned long rlimit(unsigned int limit);
-
-enum { RLIMIT_MEMLOCK = 8 };
-
-struct user_struct
-{
-	atomic_long_t locked_vm;
-};
-
-struct user_struct *current_user();
-
-static inline int atomic_long_cmpxchg(atomic_long_t *v, long old, long n) {
-	return cmpxchg(&v->counter, old, n); }
-
-struct user_struct *get_uid(struct user_struct *u);
-void free_uid(struct user_struct *);
-
-#define in_task() (1)
-
-struct inet_skb_parm
-{
-	int iif;
-};
-
-struct page *alloc_pages(gfp_t gfp_mask, unsigned int order);
-#define alloc_page(gfp_mask) alloc_pages(gfp_mask, 0)
-
-#define page_private(page)      ((page)->private)
-#define set_page_private(page, v)  ((page)->private = (v))
-
-void *kmap_atomic(struct page *page);
-void kunmap_atomic(void *addr);
-
-#define CONFIG_LOCKDEP 1
-#define CONFIG_NLS_DEFAULT "iso8859-1"
-
-struct partial_page
-{
-	unsigned int offset;
-	unsigned int len;
-};
-
-struct splice_pipe_desc
-{
-	struct page        **pages;
-	struct partial_page *partial;
-	int                  nr_pages;
-	unsigned int         nr_pages_max;
-	//unsigned int         flags;
-	const struct pipe_buf_operations *ops;
-	void (*spd_release)(struct splice_pipe_desc *, unsigned int);
-};
-
-struct page *virt_to_page(const void *x);
-
-extern const struct pipe_buf_operations nosteal_pipe_buf_ops;
-
-struct pipe_inode_info;
-ssize_t splice_to_pipe(struct pipe_inode_info *, struct splice_pipe_desc *);
-
-bool check_copy_size(const void *addr, size_t bytes, bool is_source);
-
-__wsum csum_partial_ext(const void *buff, int len, __wsum sum);
-__wsum csum_block_add_ext(__wsum csum, __wsum csum2, int offset, int len);
-__wsum csum_partial_copy(const void *src, void *dst, int len, __wsum      sum);
-#define csum_partial_copy_nocheck(src, dst, len, sum)   \
-	csum_partial_copy((src), (dst), (len), (sum))
-
-unsigned int textsearch_find(struct ts_config *, struct ts_state *);
-
-__be16 skb_network_protocol(struct sk_buff *skb, int *depth);
-
-bool can_checksum_protocol(netdev_features_t features, __be16 protocol);
-
-unsigned int skb_gro_offset(const struct sk_buff *skb);
-
-unsigned int skb_gro_len(const struct sk_buff *skb);
-
-#define NAPI_GRO_CB(skb) ((struct napi_gro_cb *)(skb)->cb)
-
-enum { NAPI_GRO_FREE = 1, NAPI_GRO_FREE_STOLEN_HEAD = 2, };
-
-struct napi_gro_cb
-{
-	u16 flush;
-	u16 count;
-	u8  same_flow;
-	u8 free;
-	struct sk_buff *last;
-};
-
-enum {
-	SLAB_HWCACHE_ALIGN = 0x00002000ul,
-	SLAB_CACHE_DMA     = 0x00004000ul,
-	SLAB_PANIC         = 0x00040000ul,
-	SLAB_LX_DMA        = 0x80000000ul,
-};
-
-#define sizeof_field(TYPE, MEMBER) sizeof((((TYPE *)0)->MEMBER))
-
-struct kmem_cache *kmem_cache_create_usercopy(const char *name, size_t size, size_t align, slab_flags_t flags, size_t useroffset, size_t usersize, void (*ctor)(void *));
-struct kmem_cache *kmem_cache_create(const char *, size_t, size_t, unsigned long, void (*)(void *));
-
-#define sg_is_last(sg)   ((sg)->page_link & 0x02)
-void sg_mark_end(struct scatterlist *sg);
-//void sg_set_buf(struct scatterlist *, const void *, unsigned int);
-//void sg_set_page(struct scatterlist *, struct page *, unsigned int, unsigned int);
-
-enum {
-	IPPROTO_IP  = 0,
-	IPPROTO_TCP = 6,
-	IPPROTO_UDP = 17,
-	IPPROTO_AH  = 51,
-};
-
-enum {
-	IPPROTO_HOPOPTS  = 0,
-	IPPROTO_ROUTING  = 43,
-	IPPROTO_FRAGMENT = 44,
-	IPPROTO_DSTOPTS  = 60,
-};
-
-void read_lock_bh(rwlock_t *);
-void read_unlock_bh(rwlock_t *);
-
-bool file_ns_capable(const struct file *file, struct user_namespace *ns, int cap);
-
-extern struct user_namespace init_user_ns;
-
-struct tcphdr
-{
-	__be16  source;
-	__be16  dest;
-	__be32  seq;
-	__be32  ack_seq;
-	__u16   res1:4,
-	        doff:4,
-	        fin:1,
-	        syn:1,
-	        rst:1,
-	        psh:1,
-	        ack:1,
-	        urg:1,
-	        ece:1,
-	        cwr:1;
-	__be16  window;
-	__sum16 check;
-};
-
-struct tcphdr *tcp_hdr(const struct sk_buff *skb);
-
-unsigned int tcp_hdrlen(const struct sk_buff *skb);
-
-struct udphdr
-{
-	__sum16 check;
-};
-
-struct udphdr *udp_hdr(const struct sk_buff *skb);
-
-struct iphdr {
-	__u8 ihl:4;
-	__u8 version:4;
-	__u8    tos;
-	__be16  tot_len;
-	__be16  frag_off;
-	__u8    ttl;
-	__u8    protocol;
-	__sum16 check;
-	__be32  saddr;
-	__be32  daddr;
-};
-
-struct iphdr *ip_hdr(const struct sk_buff *skb);
-
-struct in6_addr {};
-
-struct ipv6hdr
-{
-	__be16          payload_len;
-	__u8            nexthdr;
-	struct in6_addr saddr;
-	struct in6_addr daddr;
-};
-
-struct ipv6hdr *ipv6_hdr(const struct sk_buff *skb);
-
-struct ipv6_opt_hdr
-{
-	__u8 nexthdr;
-	__u8 hdrlen;
-} __attribute__((packed));
-
-struct ip_auth_hdr
-{
-	__u8 nexthdr;
-	__u8 hdrlen;
-};
-
-struct frag_hdr
-{
-	__u8    nexthdr;
-	__be16  frag_off;
-};
-
-#define ipv6_optlen(p)  (((p)->hdrlen+1) << 3)
-#define ipv6_authlen(p) (((p)->hdrlen+2) << 2)
-
-enum { IP_OFFSET = 0x1FFF, IP_MF = 0x2000 };
-
-enum { IP6_MF = 0x0001, IP6_OFFSET = 0xfff8 };
-
-unsigned int ip_hdrlen(const struct sk_buff *skb);
-
-__sum16 csum_tcpudp_magic(__be32 saddr, __be32 daddr, unsigned short len, unsigned short proto, __wsum sum);
-
-__sum16 csum_ipv6_magic(const struct in6_addr *saddr, const struct in6_addr *daddr, __u32 len, unsigned short proto, __wsum csum);
-
-void secpath_reset(struct sk_buff *);
-
-struct tcphdr *inner_tcp_hdr(const struct sk_buff *skb);
-unsigned int inner_tcp_hdrlen(const struct sk_buff *skb);
-
-#define htons(x) __cpu_to_be16(x)
-#define ntohs(x) __be16_to_cpu(x)
-
-struct sctphdr
-{
-	unsigned unused;
-};
-
-enum {
-	VLAN_CFI_MASK    = 0x1000,
-	VLAN_TAG_PRESENT = VLAN_CFI_MASK
-};
-
-struct vlan_hdr
-{
-	__be16 h_vlan_TCI;
-};
-
-#define skb_vlan_tag_present(__skb)  ((__skb)->vlan_tci & VLAN_TAG_PRESENT)
-
-void __vlan_hwaccel_put_tag(struct sk_buff *skb, __be16 vlan_proto, u16 vlan_tci);
-
-void vlan_set_encap_proto(struct sk_buff *skb, struct vlan_hdr *vhdr);
-
-enum { VLAN_ETH_HLEN = 18 };
-
-static inline bool eth_type_vlan(__be16 ethertype) { return false; }
-
-static inline int __vlan_insert_tag(struct sk_buff *skb, __be16 vlan_proto, u16 vlan_tci) {
-	return 1; }
-
-#define skb_vlan_tag_get(__skb)      ((__skb)->vlan_tci & ~VLAN_TAG_PRESENT)
-
-extern struct workqueue_struct *tasklet_wq;
-
-int __init netdev_boot_setup(char *str);
-
-static inline void eth_zero_addr(u8 *addr) {
-	memset(addr, 0x00, ETH_ALEN); }
-
-#define FLOW_DISSECTOR_F_PARSE_1ST_FRAG     BIT(0)
-
-static inline void eth_broadcast_addr(u8 *addr) {
-	memset(addr, 0xff, ETH_ALEN); }
-
-static inline bool is_multicast_ether_addr(const u8 *addr)
-{
-	return 0x01 & addr[0];
-}
-
-static inline bool is_multicast_ether_addr_64bits(const u8 addr[6+2])
-{
-	return is_multicast_ether_addr(addr);
-}
-
-static inline bool ether_addr_equal_64bits(const u8 addr1[6+2], const u8 addr2[6+2])
-{
-	const u16 *a = (const u16 *)addr1;
-	const u16 *b = (const u16 *)addr2;
-
-	return ((a[0] ^ b[0]) | (a[1] ^ b[1]) | (a[2] ^ b[2])) == 0;
-}
-
-bool netdev_uses_dsa(struct net_device *dev);
-
-#include <uapi/linux/if_ether.h>
-
-static inline bool eth_proto_is_802_3(__be16 proto)
-{
-	proto &= htons(0xFF00);
-	return (u16)proto >= (u16)htons(ETH_P_802_3_MIN);
-}
-
-enum {
-	IFF_LIVE_ADDR_CHANGE = 0x100000,
-	IFF_TX_SKB_SHARING   = 0x10000,
-};
-
-enum { ARPHRD_ETHER = 1, };
-
-struct neighbour;
-
-struct header_ops
-{
-	int  (*create) (struct sk_buff *skb, struct net_device *dev,
-	                unsigned short type, const void *daddr,
-	                const void *saddr, unsigned int len);
-	int  (*parse)(const struct sk_buff *skb, unsigned char *haddr);
-	int  (*rebuild)(struct sk_buff *skb);
-	int  (*cache)(const struct neighbour *neigh, struct hh_cache *hh, __be16 type);
-	void (*cache_update)(struct hh_cache *hh,
-	                     const struct net_device *dev,
-	                     const unsigned char *haddr);
-};
-
-#define DEFAULT_TX_QUEUE_LEN 1000
-
-struct net_device *alloc_netdev_mqs(int sizeof_priv, const char *name, unsigned char name_assign_type, void (*setup)(struct net_device *), unsigned int txqs, unsigned int rxqs);
-
-enum { NET_NAME_UNKNOWN = 0 };
-
-typedef void (*dr_release_t)(struct device *dev, void *res);
-void *devres_alloc(dr_release_t release, size_t size, gfp_t gfp);
-void  devres_free(void *res);
-void  devres_add(struct device *dev, void *res);
-
-int scnprintf(char *buf, size_t size, const char *fmt, ...);
-
-void *skb_gro_header_fast(struct sk_buff *skb, unsigned int offset);
-void *skb_gro_header_hard(struct sk_buff *skb, unsigned int hlen);
-void *skb_gro_header_slow(struct sk_buff *skb, unsigned int hlen, unsigned int offset);
-
-static inline unsigned long compare_ether_header(const void *a, const void *b)
-{
-	u32 *a32 = (u32 *)((u8 *)a + 2);
-	u32 *b32 = (u32 *)((u8 *)b + 2);
-
-	return (*(u16 *)a ^ *(u16 *)b) | (a32[0] ^ b32[0]) |
-		(a32[1] ^ b32[1]) | (a32[2] ^ b32[2]);
-
-}
-
-typedef struct sk_buff **(*gro_receive_t)(struct sk_buff **, struct sk_buff *);
-
-struct offload_callbacks
-{
-	struct sk_buff **(*gro_receive)(struct sk_buff **head, struct sk_buff *skb);
-	int              (*gro_complete)(struct sk_buff *skb, int nhoff);
-};
-
-struct packet_offload
-{
-	__be16                   type;
-	u16                      priority;
-	struct offload_callbacks callbacks;
-};
-
-struct packet_offload *gro_find_receive_by_type(__be16 type);
-
-void skb_gro_pull(struct sk_buff *skb, unsigned int len);
-void skb_gro_postpull_rcsum(struct sk_buff *skb, const void *start, unsigned int len);
-
-struct sk_buff **call_gro_receive(gro_receive_t cb, struct sk_buff **head, struct sk_buff *skb);
-
-void skb_gro_flush_final(struct sk_buff *skb, struct sk_buff **pp, int flush);
-
-struct packet_offload *gro_find_complete_by_type(__be16 type);
-
-void dev_add_offload(struct packet_offload *po);
-
-#define fs_initcall(x)
-
-#define __weak            __attribute__((weak))
-
-unsigned char *arch_get_platform_mac_address(void);
-
-#define to_pci_dev(n) NULL
-struct pci_dev;
-struct device_node * pci_device_to_OF_node(const struct pci_dev *pdev);
-
-int dev_is_pci(struct device *dev);
-
-void skb_init();
-int module_usbnet_init();
-int module_smsc95xx_driver_init();
-int module_asix_driver_init();
-int module_ax88179_178a_driver_init();
-int module_cdc_driver_init();
-int module_rndis_driver_init();
-
-#include <uapi/linux/capability.h>
-#include <uapi/linux/libc-compat.h>
-#include <uapi/linux/if.h>
-#include <uapi/linux/usb/cdc.h>
-#include <uapi/linux/if_link.h>
-#include <uapi/linux/if_packet.h>
-#include <uapi/linux/ethtool.h>
-#include <uapi/linux/rtnetlink.h>
-#include <uapi/linux/neighbour.h>
-#include <uapi/linux/net_tstamp.h>
-#include <linux/skbuff.h>
-#include <linux/rculist.h>
-
-#include <legacy/lx_emul/extern_c_end.h>
-
-#endif /* _SRC__DRIVERS__USB_HID__LX_EMUL_H_ */
diff --git a/repos/dde_linux/src/drivers/legacy_usb_net/lxc.c b/repos/dde_linux/src/drivers/legacy_usb_net/lxc.c
deleted file mode 100644
index 42a59f5234..0000000000
--- a/repos/dde_linux/src/drivers/legacy_usb_net/lxc.c
+++ /dev/null
@@ -1,424 +0,0 @@
-/*
- * \brief  Linux emulation code
- * \author Josef Soentgen
- * \date   2014-03-07
- */
-
-/*
- * Copyright (C) 2014-2017 Genode Labs GmbH
- *
- * This file is distributed under the terms of the GNU General Public License
- * version 2.
- */
-
-/* linux includes */
-#include <lx_emul.h>
-#include <linux/ctype.h>
-#include <linux/nls.h>
-#include <linux/skbuff.h>
-#include <linux/usb.h>
-#include <linux/usb/ch9.h>
-#include <linux/usb/cdc.h>
-#include <linux/usb/quirks.h>
-
-/* local includes */
-#include <lxc.h>
-
-
-struct Skb skb_helper(struct sk_buff *skb)
-{
-	struct Skb helper;
-
-	skb_push(skb, ETH_HLEN);
-
-	helper.packet      = skb->data;
-	helper.packet_size = skb->len;
-	helper.frag        = 0;
-	helper.frag_size   = 0;
-
-	/**
-	 * If received packets are too large (as of now 128 bytes) the actually
-	 * payload is put into a fragment. Otherwise the payload is stored directly
-	 * in the sk_buff.
-	 */
-	if (skb_shinfo(skb)->nr_frags) {
-		if (skb_shinfo(skb)->nr_frags > 1)
-			printk("more than 1 fragment in skb: %p nr_frags: %d", skb,
-			       skb_shinfo(skb)->nr_frags);
-
-		skb_frag_t *f    = &skb_shinfo(skb)->frags[0];
-		helper.frag      = skb_frag_address(f);
-		helper.frag_size = skb_frag_size(f);
-		/* fragment contains payload but header is still found in packet */
-		helper.packet_size = ETH_HLEN;
-	}
-
-	return helper;
-}
-
-
-struct sk_buff *lxc_alloc_skb(size_t len, size_t headroom)
-{
-	struct sk_buff *skb = alloc_skb(len + headroom, GFP_KERNEL | GFP_LX_DMA);
-	skb_reserve(skb, headroom);
-	return skb;
-}
-
-
-unsigned char *lxc_skb_put(struct sk_buff *skb, size_t len)
-{
-	return skb_put(skb, len);
-}
-
-
-/**
- * cdc_parse_cdc_header - parse the extra headers present in CDC devices
- * @hdr: the place to put the results of the parsing
- * @intf: the interface for which parsing is requested
- * @buffer: pointer to the extra headers to be parsed
- * @buflen: length of the extra headers
- *
- * This evaluates the extra headers present in CDC devices which
- * bind the interfaces for data and control and provide details
- * about the capabilities of the device.
- *
- * Return: number of descriptors parsed or -EINVAL
- * if the header is contradictory beyond salvage
- */
-
-int cdc_parse_cdc_header(struct usb_cdc_parsed_header *hdr,
-				struct usb_interface *intf,
-				u8 *buffer,
-				int buflen)
-{
-	/* duplicates are ignored */
-	struct usb_cdc_union_desc *union_header = NULL;
-
-	/* duplicates are not tolerated */
-	struct usb_cdc_header_desc *header = NULL;
-	struct usb_cdc_ether_desc *ether = NULL;
-	struct usb_cdc_mdlm_detail_desc *detail = NULL;
-	struct usb_cdc_mdlm_desc *desc = NULL;
-
-	unsigned int elength;
-	int cnt = 0;
-
-	memset(hdr, 0x00, sizeof(struct usb_cdc_parsed_header));
-	hdr->phonet_magic_present = false;
-	while (buflen > 0) {
-		elength = buffer[0];
-		if (!elength) {
-			dev_err(&intf->dev, "skipping garbage byte\n");
-			elength = 1;
-			goto next_desc;
-		}
-		if ((buflen < elength) || (elength < 3)) {
-			dev_err(&intf->dev, "invalid descriptor buffer length\n");
-			break;
-		}
-		if (buffer[1] != USB_DT_CS_INTERFACE) {
-			dev_err(&intf->dev, "skipping garbage\n");
-			goto next_desc;
-		}
-
-		switch (buffer[2]) {
-		case USB_CDC_UNION_TYPE: /* we've found it */
-			if (elength < sizeof(struct usb_cdc_union_desc))
-				goto next_desc;
-			if (union_header) {
-				dev_err(&intf->dev, "More than one union descriptor, skipping ...\n");
-				goto next_desc;
-			}
-			union_header = (struct usb_cdc_union_desc *)buffer;
-			break;
-		case USB_CDC_COUNTRY_TYPE:
-			if (elength < sizeof(struct usb_cdc_country_functional_desc))
-				goto next_desc;
-			hdr->usb_cdc_country_functional_desc =
-				(struct usb_cdc_country_functional_desc *)buffer;
-			break;
-		case USB_CDC_HEADER_TYPE:
-			if (elength != sizeof(struct usb_cdc_header_desc))
-				goto next_desc;
-			if (header)
-				return -EINVAL;
-			header = (struct usb_cdc_header_desc *)buffer;
-			break;
-		case USB_CDC_ACM_TYPE:
-			if (elength < sizeof(struct usb_cdc_acm_descriptor))
-				goto next_desc;
-			hdr->usb_cdc_acm_descriptor =
-				(struct usb_cdc_acm_descriptor *)buffer;
-			break;
-		case USB_CDC_ETHERNET_TYPE:
-			if (elength != sizeof(struct usb_cdc_ether_desc))
-				goto next_desc;
-			if (ether)
-				return -EINVAL;
-			ether = (struct usb_cdc_ether_desc *)buffer;
-			break;
-		case USB_CDC_CALL_MANAGEMENT_TYPE:
-			if (elength < sizeof(struct usb_cdc_call_mgmt_descriptor))
-				goto next_desc;
-			hdr->usb_cdc_call_mgmt_descriptor =
-				(struct usb_cdc_call_mgmt_descriptor *)buffer;
-			break;
-		case USB_CDC_DMM_TYPE:
-			if (elength < sizeof(struct usb_cdc_dmm_desc))
-				goto next_desc;
-			hdr->usb_cdc_dmm_desc =
-				(struct usb_cdc_dmm_desc *)buffer;
-			break;
-		case USB_CDC_MDLM_TYPE:
-			if (elength < sizeof(struct usb_cdc_mdlm_desc *))
-				goto next_desc;
-			if (desc)
-				return -EINVAL;
-			desc = (struct usb_cdc_mdlm_desc *)buffer;
-			break;
-		case USB_CDC_MDLM_DETAIL_TYPE:
-			if (elength < sizeof(struct usb_cdc_mdlm_detail_desc *))
-				goto next_desc;
-			if (detail)
-				return -EINVAL;
-			detail = (struct usb_cdc_mdlm_detail_desc *)buffer;
-			break;
-		case USB_CDC_NCM_TYPE:
-			if (elength < sizeof(struct usb_cdc_ncm_desc))
-				goto next_desc;
-			hdr->usb_cdc_ncm_desc = (struct usb_cdc_ncm_desc *)buffer;
-			break;
-		case USB_CDC_MBIM_TYPE:
-			if (elength < sizeof(struct usb_cdc_mbim_desc))
-				goto next_desc;
-
-			hdr->usb_cdc_mbim_desc = (struct usb_cdc_mbim_desc *)buffer;
-			break;
-		case USB_CDC_MBIM_EXTENDED_TYPE:
-			if (elength < sizeof(struct usb_cdc_mbim_extended_desc))
-				break;
-			hdr->usb_cdc_mbim_extended_desc =
-				(struct usb_cdc_mbim_extended_desc *)buffer;
-			break;
-		case CDC_PHONET_MAGIC_NUMBER:
-			hdr->phonet_magic_present = true;
-			break;
-		default:
-			/*
-			 * there are LOTS more CDC descriptors that
-			 * could legitimately be found here.
-			 */
-			dev_dbg(&intf->dev, "Ignoring descriptor: type %02x, length %ud\n",
-					buffer[2], elength);
-			goto next_desc;
-		}
-		cnt++;
-next_desc:
-		buflen -= elength;
-		buffer += elength;
-	}
-	hdr->usb_cdc_union_desc = union_header;
-	hdr->usb_cdc_header_desc = header;
-	hdr->usb_cdc_mdlm_detail_desc = detail;
-	hdr->usb_cdc_mdlm_desc = desc;
-	hdr->usb_cdc_ether_desc = ether;
-	return cnt;
-}
-
-EXPORT_SYMBOL(cdc_parse_cdc_header);
-
-struct usb_interface *usb_ifnum_to_if(const struct usb_device *dev,
-                                      unsigned ifnum)
-{
-	struct usb_host_config *config = dev->actconfig;
-	int i;
-
-	if (!config) {
-		lx_printf("No config for %u\n", ifnum);
-		return NULL;
-	}
-
-	for (i = 0; i < config->desc.bNumInterfaces; i++) {
-		if (config->interface[i]->altsetting[0]
-				.desc.bInterfaceNumber == ifnum) {
-			return config->interface[i];
-		}
-	}
-
-	lx_printf("No interface for %u\n");
-	return NULL;
-}
-
-static int usb_get_string(struct usb_device *dev, unsigned short langid,
-			  unsigned char index, void *buf, int size)
-{
-	int i;
-	int result;
-
-	if (size <= 0)		/* No point in asking for no data */
-		return -EINVAL;
-
-	for (i = 0; i < 3; ++i) {
-		/* retry on length 0 or stall; some devices are flakey */
-		result = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0),
-			USB_REQ_GET_DESCRIPTOR, USB_DIR_IN,
-			(USB_DT_STRING << 8) + index, langid, buf, size,
-			USB_CTRL_GET_TIMEOUT);
-		if (result == 0 || result == -EPIPE)
-			continue;
-		if (result > 1 && ((u8 *) buf)[1] != USB_DT_STRING) {
-			result = -ENODATA;
-			continue;
-		}
-		break;
-	}
-	return result;
-}
-
-
-static void usb_try_string_workarounds(unsigned char *buf, int *length)
-{
-	int newlength, oldlength = *length;
-
-	for (newlength = 2; newlength + 1 < oldlength; newlength += 2)
-		if (!isprint(buf[newlength]) || buf[newlength + 1])
-			break;
-
-	if (newlength > 2) {
-		buf[0] = newlength;
-		*length = newlength;
-	}
-}
-
-static int usb_string_sub(struct usb_device *dev, unsigned int langid,
-			  unsigned int index, unsigned char *buf)
-{
-	int rc;
-
-	/* Try to read the string descriptor by asking for the maximum
-	 * possible number of bytes */
-	if (dev->quirks & USB_QUIRK_STRING_FETCH_255)
-		rc = -EIO;
-	else
-		rc = usb_get_string(dev, langid, index, buf, 255);
-
-	/* If that failed try to read the descriptor length, then
-	 * ask for just that many bytes */
-	if (rc < 2) {
-		rc = usb_get_string(dev, langid, index, buf, 2);
-		if (rc == 2)
-			rc = usb_get_string(dev, langid, index, buf, buf[0]);
-	}
-
-	if (rc >= 2) {
-		if (!buf[0] && !buf[1])
-			usb_try_string_workarounds(buf, &rc);
-
-		/* There might be extra junk at the end of the descriptor */
-		if (buf[0] < rc)
-			rc = buf[0];
-
-		rc = rc - (rc & 1); /* force a multiple of two */
-	}
-
-	if (rc < 2)
-		rc = (rc < 0 ? rc : -EINVAL);
-
-	return rc;
-}
-
-static int usb_get_langid(struct usb_device *dev, unsigned char *tbuf)
-{
-	int err;
-
-	if (dev->have_langid)
-		return 0;
-
-	if (dev->string_langid < 0)
-		return -EPIPE;
-
-	err = usb_string_sub(dev, 0, 0, tbuf);
-
-	/* If the string was reported but is malformed, default to english
-	 * (0x0409) */
-	if (err == -ENODATA || (err > 0 && err < 4)) {
-		dev->string_langid = 0x0409;
-		dev->have_langid = 1;
-		dev_err(&dev->dev,
-			"language id specifier not provided by device, defaulting to English\n");
-		return 0;
-	}
-
-	/* In case of all other errors, we assume the device is not able to
-	 * deal with strings at all. Set string_langid to -1 in order to
-	 * prevent any string to be retrieved from the device */
-	if (err < 0) {
-		dev_info(&dev->dev, "string descriptor 0 read error: %d\n",
-					err);
-		dev->string_langid = -1;
-		return -EPIPE;
-	}
-
-	/* always use the first langid listed */
-	dev->string_langid = tbuf[2] | (tbuf[3] << 8);
-	dev->have_langid = 1;
-	dev_dbg(&dev->dev, "default language 0x%04x\n",
-				dev->string_langid);
-	return 0;
-}
-
-/**
- * usb_string - returns UTF-8 version of a string descriptor
- * @dev: the device whose string descriptor is being retrieved
- * @index: the number of the descriptor
- * @buf: where to put the string
- * @size: how big is "buf"?
- * Context: !in_interrupt ()
- *
- * This converts the UTF-16LE encoded strings returned by devices, from
- * usb_get_string_descriptor(), to null-terminated UTF-8 encoded ones
- * that are more usable in most kernel contexts.  Note that this function
- * chooses strings in the first language supported by the device.
- *
- * This call is synchronous, and may not be used in an interrupt context.
- *
- * Return: length of the string (>= 0) or usb_control_msg status (< 0).
- */
-int usb_string(struct usb_device *dev, int index, char *buf, size_t size)
-{
-	unsigned char *tbuf;
-	int err;
-
-	if (dev->state == USB_STATE_SUSPENDED)
-		return -EHOSTUNREACH;
-	if (size <= 0 || !buf || !index)
-		return -EINVAL;
-	buf[0] = 0;
-	tbuf = kmalloc(256, GFP_NOIO);
-	if (!tbuf)
-		return -ENOMEM;
-
-	err = usb_get_langid(dev, tbuf);
-	if (err < 0)
-		goto errout;
-
-	err = usb_string_sub(dev, dev->string_langid, index, tbuf);
-	if (err < 0)
-		goto errout;
-
-	size--;		/* leave room for trailing NULL char in output buffer */
-	err = utf16s_to_utf8s((wchar_t *) &tbuf[2], (err - 2) / 2,
-			UTF16_LITTLE_ENDIAN, buf, size);
-	buf[err] = 0;
-
-	if (tbuf[1] != USB_DT_STRING)
-		dev_dbg(&dev->dev,
-			"wrong descriptor type %02x for string %d (\"%s\")\n",
-			tbuf[1], index, buf);
-
- errout:
-	kfree(tbuf);
-	return err;
-}
-EXPORT_SYMBOL_GPL(usb_string);
-
diff --git a/repos/dde_linux/src/drivers/legacy_usb_net/lxc.h b/repos/dde_linux/src/drivers/legacy_usb_net/lxc.h
deleted file mode 100644
index 0bdad76ab7..0000000000
--- a/repos/dde_linux/src/drivers/legacy_usb_net/lxc.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * \brief  Lx C env
- * \author Josef Soentgen
- * \date   2016-03-04
- */
-
-/*
- * Copyright (C) 2016-2017 Genode Labs GmbH
- *
- * This file is distributed under the terms of the GNU General Public License
- * version 2.
- */
-
-#ifndef _LXC_H_
-#define _LXC_H_
-
-/*
- * The sk_buff struct contains empty array members whose
- * size differs between C and C++. Since we want to access
- * certain members of the sk_buff from C++ we have to use
- * a uniform format useable from both languages.W
- *
- * Note: we pull struct skb_buff as well as size_t from
- * headers included before this one.
- */
-struct Skb
-{
-	void   *packet;
-	size_t  packet_size;
-	void   *frag;
-	size_t  frag_size;
-};
-
-struct Skb skb_helper(struct sk_buff *skb);
-bool is_eapol(struct sk_buff *skb);
-
-struct sk_buff *lxc_alloc_skb(size_t len, size_t headroom);
-unsigned char *lxc_skb_put(struct sk_buff *skb, size_t len);
-
-#endif /* _LXC_H_ */
diff --git a/repos/dde_linux/src/drivers/legacy_usb_net/main.cc b/repos/dde_linux/src/drivers/legacy_usb_net/main.cc
deleted file mode 100644
index f83f2f1e60..0000000000
--- a/repos/dde_linux/src/drivers/legacy_usb_net/main.cc
+++ /dev/null
@@ -1,235 +0,0 @@
-/*
- * \brief  USB net driver
- * \author Stefan Kalkowski
- * \date   2018-06-07
- */
-
-/*
- * Copyright (C) 2018 Genode Labs GmbH
- *
- * This file is distributed under the terms of the GNU General Public License
- * version 2.
- */
-
-#include <base/component.h>
-
-#include <driver.h>
-#include <lx_emul.h>
-
-#include <legacy/lx_kit/env.h>
-#include <legacy/lx_kit/malloc.h>
-#include <legacy/lx_kit/scheduler.h>
-#include <legacy/lx_kit/timer.h>
-#include <legacy/lx_kit/work.h>
-
-#include <legacy/lx_emul/extern_c_begin.h>
-#include <linux/usb.h>
-#include <legacy/lx_emul/extern_c_end.h>
-
-struct workqueue_struct *tasklet_wq;
-
-
-void Driver::Device::scan_altsettings(usb_interface * iface,
-                                      unsigned iface_idx, unsigned alt_idx)
-{
-	Usb::Interface_descriptor iface_desc;
-	usb.interface_descriptor(iface_idx, alt_idx, &iface_desc);
-	Genode::memcpy(&iface->altsetting[alt_idx].desc, &iface_desc,
-	               sizeof(usb_interface_descriptor));
-	if (iface_desc.active)
-		iface->cur_altsetting = &iface->altsetting[alt_idx];
-
-	Usb::Interface_extra iface_extra;
-	if (usb.interface_extra(iface_idx, alt_idx, &iface_extra)) {
-		iface->altsetting[alt_idx].extra = (unsigned char *)kzalloc(iface_extra.length, 0);
-		Genode::memcpy(iface->altsetting[alt_idx].extra, iface_extra.data,
-		               iface_extra.length);
-		iface->altsetting[alt_idx].extralen = iface_extra.length;
-	}
-
-	iface->altsetting[alt_idx].endpoint = (usb_host_endpoint*)
-		kzalloc(sizeof(usb_host_endpoint)*iface->altsetting[alt_idx].desc.bNumEndpoints, GFP_KERNEL);
-
-	for (unsigned i = 0; i < iface->altsetting[alt_idx].desc.bNumEndpoints; i++) {
-		Usb::Endpoint_descriptor ep_desc[7];
-		usb.endpoint_descriptor(iface_idx, alt_idx, i, ep_desc);
-		Genode::memcpy(&iface->altsetting[alt_idx].endpoint[i].desc,
-		               ep_desc, sizeof(usb_endpoint_descriptor));
-		int epnum = usb_endpoint_num(&iface->altsetting[alt_idx].endpoint[i].desc);
-		if (usb_endpoint_dir_out(&iface->altsetting[alt_idx].endpoint[i].desc))
-			udev->ep_out[epnum] = &iface->altsetting[alt_idx].endpoint[i];
-		else
-			udev->ep_in[epnum]  = &iface->altsetting[alt_idx].endpoint[i];
-	}
-}
-
-
-void Driver::Device::scan_interfaces(unsigned iface_idx)
-{
-	struct usb_interface * iface =
-		(usb_interface*) kzalloc(sizeof(usb_interface), GFP_KERNEL);
-	iface->num_altsetting = usb.alt_settings(iface_idx);
-	iface->altsetting     = (usb_host_interface*)
-		kzalloc(sizeof(usb_host_interface)*iface->num_altsetting, GFP_KERNEL);
-	iface->dev.parent = &udev->dev;
-	iface->dev.bus    = (bus_type*) 0xdeadbeef;
-
-	for (unsigned i = 0; i < iface->num_altsetting; i++)
-		scan_altsettings(iface, iface_idx, i);
-
-	udev->config->interface[iface_idx] = iface;
-};
-
-
-void Driver::Device::register_device()
-{
-	if (udev) {
-		Genode::error("device already registered!");
-		return;
-	}
-
-	Usb::Device_descriptor dev_desc;
-	Usb::Config_descriptor config_desc;
-	usb.config_descriptor(&dev_desc, &config_desc);
-
-	udev = (usb_device*) kzalloc(sizeof(usb_device), GFP_KERNEL);
-	udev->bus = (usb_bus*) kzalloc(sizeof(usb_bus), GFP_KERNEL);
-	udev->config = (usb_host_config*) kzalloc(sizeof(usb_host_config), GFP_KERNEL);
-	udev->bus->bus_name = "usbbus";
-	udev->bus->controller = (device*) (&usb);
-
-	udev->descriptor.idVendor  = dev_desc.vendor_id;
-	udev->descriptor.idProduct = dev_desc.product_id;
-	udev->descriptor.bcdDevice = dev_desc.device_release;
-
-	for (unsigned i = 0; i < config_desc.num_interfaces; i++)
-		scan_interfaces(i);
-
-	udev->actconfig = udev->config;
-	udev->config->desc.bNumInterfaces = config_desc.num_interfaces;
-
-	/* probe */
-	for (unsigned i = 0; i < config_desc.num_interfaces; i++) {
-		struct usb_device_id id;
-		probe_interface(udev->config->interface[i], &id);
-	}
-
-	driver.activate_network_session();
-}
-
-
-void Driver::Device::unregister_device()
-{
-	for (unsigned i = 0; i < USB_MAXINTERFACES; i++) {
-		if (!udev->config->interface[i]) break;
-		else remove_interface(udev->config->interface[i]);
-	}
-	kfree(udev->bus);
-	kfree(udev->config);
-	kfree(udev);
-	udev = nullptr;
-}
-
-
-void Driver::Device::state_task_entry(void * arg)
-{
-	Device & dev = *reinterpret_cast<Device*>(arg);
-
-	for (;;) {
-		if (dev.usb.plugged() && !dev.udev)
-			dev.register_device();
-
-		if (!dev.usb.plugged() && dev.udev)
-			dev.unregister_device();
-
-		Lx::scheduler().current()->block_and_schedule();
-	}
-}
-
-
-void Driver::Device::urb_task_entry(void * arg)
-{
-	Device & dev = *reinterpret_cast<Device*>(arg);
-
-	for (;;) {
-		while (dev.udev && dev.usb.source()->ack_avail()) {
-			Usb::Packet_descriptor p = dev.usb.source()->get_acked_packet();
-			if (p.completion) p.completion->complete(p);
-			dev.usb.source()->release_packet(p);
-		}
-
-		Lx::scheduler().current()->block_and_schedule();
-	}
-}
-
-
-Driver::Device::Device(Driver & driver, Label label)
-: label(label),
-  driver(driver),
-  env(driver.env),
-  alloc(driver.alloc),
-  state_task(env.ep(), state_task_entry, reinterpret_cast<void*>(this),
-             "usb_state", Lx::Task::PRIORITY_0, Lx::scheduler()),
-  urb_task(env.ep(), urb_task_entry, reinterpret_cast<void*>(this),
-             "usb_urb", Lx::Task::PRIORITY_0, Lx::scheduler())
-{
-	usb.tx_channel()->sigh_ack_avail(urb_task.handler);
-	driver.devices.insert(&le);
-}
-
-
-Driver::Device::~Device()
-{
-	driver.devices.remove(&le);
-	if (udev) unregister_device();
-
-	while (usb.source()->ack_avail()) {
-		Usb::Packet_descriptor p = usb.source()->get_acked_packet();
-		usb.source()->release_packet(p);
-	}
-}
-
-
-void Driver::main_task_entry(void * arg)
-{
-	Driver * driver = reinterpret_cast<Driver*>(arg);
-
-	tasklet_wq = alloc_workqueue("tasklet_wq", 0, 0);
-
-	skb_init();
-	module_usbnet_init();
-	module_smsc95xx_driver_init();
-	module_asix_driver_init();
-	module_ax88179_178a_driver_init();
-	module_cdc_driver_init();
-	module_rndis_driver_init();
-
-	static Device dev(*driver, Label(""));
-
-	for (;;) Lx::scheduler().current()->block_and_schedule();
-}
-
-
-Driver::Driver(Genode::Env &env) : env(env)
-{
-	Genode::log("--- USB net driver ---");
-
-	Lx_kit::construct_env(env);
-	Lx::scheduler(&env);
-	Lx::malloc_init(env, heap);
-	Lx::timer(&env, &ep, &heap, &jiffies);
-	Lx::Work::work_queue(&heap);
-
-	main_task.construct(env.ep(), main_task_entry, reinterpret_cast<void*>(this),
-	                    "main", Lx::Task::PRIORITY_0, Lx::scheduler());
-
-	/* give all task a first kick before returning */
-	Lx::scheduler().schedule();
-}
-
-
-void Component::construct(Genode::Env &env)
-{
-	env.exec_static_constructors();
-	static Driver driver(env);
-}
diff --git a/repos/dde_linux/src/drivers/legacy_usb_net/target.mk b/repos/dde_linux/src/drivers/legacy_usb_net/target.mk
deleted file mode 100644
index 6f6039c08b..0000000000
--- a/repos/dde_linux/src/drivers/legacy_usb_net/target.mk
+++ /dev/null
@@ -1,40 +0,0 @@
-TARGET  := usb_net_drv
-SRC_C   := dummies.c lxc.c
-SRC_CC  := main.cc lx_emul.cc linux_network_session_base.cc
-SRC_CC  += printf.cc bug.cc timer.cc scheduler.cc malloc.cc env.cc work.cc
-SRC_CC  += uplink_client.cc
-
-LIBS    := base usb_net_include lx_kit_setjmp nic_driver format
-
-USB_CONTRIB_DIR := $(call select_from_ports,dde_linux)/src/drivers/usb_net
-
-INC_DIR += $(PRG_DIR)
-INC_DIR += $(REP_DIR)/src/include
-INC_DIR += $(REP_DIR)/src/drivers/nic
-
-SRC_C += drivers/net/usb/asix_common.c
-SRC_C += drivers/net/usb/asix_devices.c
-SRC_C += drivers/net/usb/ax88172a.c
-SRC_C += drivers/net/usb/ax88179_178a.c
-SRC_C += drivers/net/usb/cdc_ether.c
-SRC_C += drivers/net/usb/rndis_host.c
-SRC_C += drivers/net/usb/smsc95xx.c
-SRC_C += drivers/net/usb/usbnet.c
-SRC_C += fs/nls/nls_base.c
-SRC_C += lib/ctype.c
-SRC_C += lib/hexdump.c
-SRC_C += net/core/skbuff.c
-SRC_C += net/ethernet/eth.c
-
-CC_OPT += -Wno-address-of-packed-member
-
-CC_C_OPT += -Wno-comment -Wno-int-conversion -Wno-incompatible-pointer-types \
-            -Wno-unused-variable -Wno-pointer-sign -Wno-uninitialized \
-            -Wno-maybe-uninitialized -Wno-format -Wno-discarded-qualifiers \
-            -Wno-unused-function -Wno-unused-but-set-variable
-
-CC_CXX_WARN_STRICT =
-
-vpath linux_network_session_base.cc $(REP_DIR)/src/drivers/nic
-vpath %.c  $(USB_CONTRIB_DIR)
-vpath %.cc $(REP_DIR)/src/lib/legacy/lx_kit
diff --git a/repos/dde_linux/src/drivers/legacy_usb_net/uplink_client.cc b/repos/dde_linux/src/drivers/legacy_usb_net/uplink_client.cc
deleted file mode 100644
index af6d1206de..0000000000
--- a/repos/dde_linux/src/drivers/legacy_usb_net/uplink_client.cc
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * \brief  Uplink session client role of the driver
- * \author Martin Stein
- * \date   2020-12-10
- */
-
-/*
- * Copyright (C) 2020 Genode Labs GmbH
- *
- * This file is part of the Genode OS framework, which is distributed
- * under the terms of the GNU Affero General Public License version 3.
- */
-
-/* local include */
-#include <uplink_client.h>
-
-#include <lx_emul.h>
-
-extern "C" {
-#include <lxc.h>
-};
-
-
-Genode::Uplink_client::Transmit_result
-Genode::Uplink_client::_drv_transmit_pkt(const char *conn_rx_pkt_base,
-                                         size_t      conn_rx_pkt_size)
-{
-	/*
-	 * We must not be called from another task, just from the
-	 * packet stream dispatcher.
-	 */
-	if (Lx::scheduler().active()) {
-		warning("scheduler active");
-		return Transmit_result::RETRY;
-	}
-
-	struct sk_buff *skb {
-		lxc_alloc_skb(conn_rx_pkt_size +
-		              HEAD_ROOM, HEAD_ROOM) };
-
-	unsigned char *data = lxc_skb_put(skb, conn_rx_pkt_size);
-	memcpy(data, conn_rx_pkt_base, conn_rx_pkt_size);
-
-	_tx_data.ndev = _ndev;
-	_tx_data.skb  = skb;
-
-	_tx_task.unblock();
-	Lx::scheduler().schedule();
-	return Transmit_result::ACCEPTED;
-}
-
-
-Genode::Uplink_client::Uplink_client(Env                 &env,
-                                     Allocator           &alloc,
-                                     Session_label const &label)
-:
-	Linux_network_session_base { label },
-	Uplink_client_base         { env, alloc,
-	                             Net::Mac_address(_ndev->dev_addr) }
-{
-	_drv_handle_link_state(_read_link_state_from_ndev());
-}
-
-
-void Genode::Uplink_client::link_state(bool state)
-{
-	_drv_handle_link_state(state);
-}
-
-
-void Genode::Uplink_client::receive(struct sk_buff *skb)
-{
-	Skb skb_helpr { skb_helper(skb) };
-	_drv_rx_handle_pkt(
-		skb_helpr.packet_size + skb_helpr.frag_size,
-		[&] (void   *conn_tx_pkt_base,
-		     size_t &)
-	{
-		memcpy(
-			conn_tx_pkt_base,
-			skb_helpr.packet,
-			skb_helpr.packet_size);
-
-		if (skb_helpr.frag_size) {
-
-			memcpy(
-				(char *)conn_tx_pkt_base + skb_helpr.packet_size,
-				skb_helpr.frag,
-				skb_helpr.frag_size);
-		}
-		return Write_result::WRITE_SUCCEEDED;
-	});
-}
diff --git a/repos/dde_linux/src/drivers/legacy_usb_net/uplink_client.h b/repos/dde_linux/src/drivers/legacy_usb_net/uplink_client.h
deleted file mode 100644
index 96e44aabe3..0000000000
--- a/repos/dde_linux/src/drivers/legacy_usb_net/uplink_client.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * \brief  Uplink session client role of the driver
- * \author Martin Stein
- * \date   2020-12-10
- */
-
-/*
- * Copyright (C) 2020 Genode Labs GmbH
- *
- * This file is part of the Genode OS framework, which is distributed
- * under the terms of the GNU Affero General Public License version 3.
- */
-
-#ifndef _SRC__DRIVERS__NIC__FEC__UPLINK_CLIENT_H_
-#define _SRC__DRIVERS__NIC__FEC__UPLINK_CLIENT_H_
-
-/* NIC driver includes */
-#include <drivers/nic/uplink_client_base.h>
-
-/* local include */
-#include <linux_network_session_base.h>
-
-namespace Genode {
-
-	class Uplink_client;
-}
-
-
-class Genode::Uplink_client : public Linux_network_session_base,
-                              public Uplink_client_base
-{
-	private:
-
-		/************************
-		 ** Uplink_client_base **
-		 ************************/
-
-		Transmit_result
-		_drv_transmit_pkt(const char *conn_rx_pkt_base,
-		                  size_t      conn_rx_pkt_size) override;
-
-	public:
-
-		Uplink_client(Env                 &env,
-		              Allocator           &alloc,
-		              Session_label const &label);
-
-
-		/********************************
-		 ** Linux_network_session_base **
-		 ********************************/
-
-		void link_state(bool state) override;
-
-		void receive(struct sk_buff *skb) override;
-};
-
-#endif /* _SRC__DRIVERS__NIC__FEC__UPLINK_CLIENT_H_ */