-diff -urN linux-2.4.25/drivers/atm/Makefile linux-2.4.25-atmdd/drivers/atm/Makefile
---- linux-2.4.25/drivers/atm/Makefile 2004-02-23 15:18:29.000000000 +0100
-+++ linux-2.4.25-atmdd/drivers/atm/Makefile 2004-02-29 22:51:26.000000000 +0100
-@@ -31,6 +31,7 @@
- endif
-
- obj-$(CONFIG_ATM_DUMMY) += adummy.o
-+obj-$(CONFIG_ATM_DD) += atmdd.o
- obj-$(CONFIG_ATM_TCP) += atmtcp.o
- obj-$(CONFIG_ATM_FIRESTREAM) += firestream.o
- obj-$(CONFIG_ATM_LANAI) += lanai.o
-diff -urN linux-2.4.25/drivers/atm/Kconfig linux-2.4.25-atmdd/drivers/atm/Kconfig
---- linux-2.4.25/drivers/atm/Kcnfig 2003-08-25 13:44:41.000000000 +0200
-+++ linux-2.4.25-atmdd/drivers/atm/Kconfig 2004-02-29 22:52:59.000000000 +0100
-@@ -4,6 +4,14 @@
- default y
-
- if ATM_DRIVERS && NETDEVICES && ATM
-+
-+config ATM_DD
-+ tristate "ATM loopback"
-+ depends on INET && ATM
-+ help
-+ This is an example atm driver. It does not require any actual ATM
-+ hardware. It supports AAL5 and AAL0. Frames are merely looped back
-+ to the sender on the same VC they were sent.
-
- config ATM_DUMMY
- tristate "Dummy ATM driver"
-diff -urN linux-2.4.25/drivers/atm/atmdd.c linux-2.4.25-atmdd/drivers/atm/atmdd.c
---- linux-2.4.25/drivers/atm/atmdd.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.25-atmdd/drivers/atm/atmdd.c 2004-02-29 22:58:11.000000000 +0100
-@@ -0,0 +1,921 @@
+diff -urN linux-5.9/drivers.org/atm/atmdd.c linux-5.9/drivers/atm/atmdd.c
+--- linux-5.9/drivers.org/atm/atmdd.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-5.9/drivers/atm/atmdd.c 2020-11-03 13:31:48.120071319 +0100
+@@ -0,0 +1,920 @@
+/*
+#######################################################################
+#
+static int myatmdd_open(struct atm_vcc *vcc);
+static void myatmdd_close(struct atm_vcc *vcc);
+static int myatmdd_ioctl(struct atm_dev *dev, unsigned int cmd,void *arg);
-+static int myatmdd_setsockopt(struct atm_vcc *vcc,int level,int optname, void __user *optval,unsigned int optlen);
-+static int myatmdd_getsockopt(struct atm_vcc *vcc,int level,int optname, void __user *optval,int optlen);
++
++
+static int myatmdd_send(struct atm_vcc *vcc,struct sk_buff *skb);
+static int myatmdd_change_qos(struct atm_vcc *vcc,struct atm_qos *qos,int flgs);
+static int myatmdd_proc_read(struct atm_dev *dev,loff_t *pos,char *page);
+ open: myatmdd_open,
+ close: myatmdd_close,
+ ioctl: myatmdd_ioctl,
-+ getsockopt: myatmdd_getsockopt,
-+ setsockopt: myatmdd_setsockopt,
++
++
+ send: myatmdd_send,
+ change_qos: myatmdd_change_qos,
+ proc_read: myatmdd_proc_read,
+ while ((skb = myatmdd_rxq_dequeue(&priv->rxqueue, &pkt_len)))
+ {
+ struct sk_buff *newskb;
-+ struct timeval stamp;
+
+ /* Get a new skb to replace the one just consumed */
+ if (!(newskb = dev_alloc_skb(AAL5_BUFLEN)))
+ atomic_inc(&vcc->stats->rx);
+
+ /* add timestamp for upper layers to use */
-+ do_gettimeofday(&stamp);
-+ skb->tstamp = timeval_to_ktime(stamp);
++ ktime_t kt = ktime_get_real();
++ skb->tstamp = kt;
+
+ /* Point socket buffer at the right VCC before giving to socket layer */
+ ATM_SKB(skb)->vcc = vcc;
+# myatmdd_open(),
+# myatmdd_close(),
+# myatmdd_ioctl(),
-+# myatmdd_getsockopt(),
-+# myatmdd_setsockopt(),
++
++
+# myatmdd_send(),
+# myatmdd_sg_send(),
+# myatmdd_change_qos(),
+ return -EINVAL;
+}
+
-+static int myatmdd_getsockopt(struct atm_vcc *vcc,int level,int optname, void __user *optval,int optlen)
-+{
-+ return -EINVAL;
-+}
+
-+static int myatmdd_setsockopt(struct atm_vcc *vcc,int level,int optname, void __user *optval,unsigned int optlen)
-+{
-+ return -EINVAL;
-+}
++
++
++
++
++
++
++
++
+
+/* Note may be called in either process or interrupt context! */
+static int myatmdd_send(struct atm_vcc *vcc,struct sk_buff *skb)
+module_exit(myatmdd_exit);
+
+#endif /* MODULE */
+diff -urN linux-5.9/drivers.org/atm/Kconfig linux-5.9/drivers/atm/Kconfig
+--- linux-5.9/drivers.org/atm/Kconfig 2020-10-11 23:15:50.000000000 +0200
++++ linux-5.9/drivers/atm/Kconfig 2020-11-03 13:31:48.120071319 +0100
+@@ -15,6 +15,14 @@
+
+ if ATM_DRIVERS && NETDEVICES && ATM
+
++config ATM_DD
++ tristate "ATM loopback"
++ depends on INET && ATM
++ help
++ This is an example atm driver. It does not require any actual ATM
++ hardware. It supports AAL5 and AAL0. Frames are merely looped back
++ to the sender on the same VC they were sent.
++
+ config ATM_DUMMY
+ tristate "Dummy ATM driver"
+ help
+diff -urN linux-5.9/drivers.org/atm/Makefile linux-5.9/drivers/atm/Makefile
+--- linux-5.9/drivers.org/atm/Makefile 2020-10-11 23:15:50.000000000 +0200
++++ linux-5.9/drivers/atm/Makefile 2020-11-03 13:31:48.120071319 +0100
+@@ -26,6 +26,7 @@
+ endif
+
+ obj-$(CONFIG_ATM_DUMMY) += adummy.o
++obj-$(CONFIG_ATM_DD) += atmdd.o
+ obj-$(CONFIG_ATM_TCP) += atmtcp.o
+ obj-$(CONFIG_ATM_LANAI) += lanai.o
+