-Index: linux/include/linux/atm.h
-===================================================================
-RCS file: /afs/cmf/project/cvsroot/linux/include/linux/atm.h,v
-retrieving revision 1.2
-diff -u -r1.2 atm.h
---- linux/include/linux/atm.h 12 Feb 2003 20:56:33 -0000 1.2
-+++ linux/include/linux/atm.h 9 Apr 2003 12:08:38 -0000
-@@ -72,7 +72,7 @@
+diff -urN linux-5.9/net.org/atm/common.c linux-5.9/net/atm/common.c
+--- linux-5.9/net.org/atm/common.c 2020-10-11 23:15:50.000000000 +0200
++++ linux-5.9/net/atm/common.c 2020-11-03 13:27:25.545142305 +0100
+@@ -756,6 +756,43 @@
+
+ vcc = ATM_SD(sock);
+ switch (optname) {
++ case SO_ATMQOS_COMPAT:
++ {
++ struct atm_qos_compat qos_compat;
++ struct atm_qos qos;
++
++ if (copy_from_sockptr(&qos_compat,optval,sizeof(qos_compat)))
++ return -EFAULT;
++
++ /* convert old atm_qos to new atm_qos */
++ qos.aal = qos_compat.aal;
++ qos.rxtp.traffic_class = qos_compat.rxtp.traffic_class;
++ qos.rxtp.max_pcr = qos_compat.rxtp.max_pcr;
++ qos.rxtp.pcr = qos_compat.rxtp.pcr;
++ qos.rxtp.min_pcr = qos_compat.rxtp.min_pcr;
++ qos.rxtp.max_cdv = qos_compat.rxtp.max_cdv;
++ qos.rxtp.max_sdu = qos_compat.rxtp.max_sdu;
++ qos.rxtp.scr = 0;
++ qos.rxtp.mbs = 0;
++ qos.txtp.traffic_class = qos_compat.txtp.traffic_class;
++ qos.txtp.max_pcr = qos_compat.txtp.max_pcr;
++ qos.txtp.pcr = qos_compat.txtp.pcr;
++ qos.txtp.min_pcr = qos_compat.txtp.min_pcr;
++ qos.txtp.max_cdv = qos_compat.txtp.max_cdv;
++ qos.txtp.max_sdu = qos_compat.txtp.max_sdu;
++ qos.txtp.scr = 0;
++ qos.txtp.mbs = 0;
++
++ error = check_qos(&qos);
++ if (error) return error;
++ if (sock->state == SS_CONNECTED)
++ return atm_change_qos(vcc,&qos);
++ if (sock->state != SS_UNCONNECTED)
++ return -EBADFD;
++ vcc->qos = qos;
++ set_bit(ATM_VF_HASQOS,&vcc->flags);
++ return 0;
++ }
+ case SO_ATMQOS:
+ {
+ struct atm_qos qos;
+@@ -799,6 +836,31 @@
+
+ vcc = ATM_SD(sock);
+ switch (optname) {
++ case SO_ATMQOS_COMPAT:
++ {
++ struct atm_qos_compat qos_compat;
++
++ if (!test_bit(ATM_VF_HASQOS,&vcc->flags))
++ return -EINVAL;
++
++ /* convert new atm_qos to old atm_qos */
++ qos_compat.aal = vcc->qos.aal;
++ qos_compat.rxtp.traffic_class = vcc->qos.rxtp.traffic_class;
++ qos_compat.rxtp.max_pcr = vcc->qos.rxtp.max_pcr;
++ qos_compat.rxtp.pcr = vcc->qos.rxtp.pcr;
++ qos_compat.rxtp.min_pcr = vcc->qos.rxtp.min_pcr;
++ qos_compat.rxtp.max_cdv = vcc->qos.rxtp.max_cdv;
++ qos_compat.rxtp.max_sdu = vcc->qos.rxtp.max_sdu;
++ qos_compat.txtp.traffic_class = vcc->qos.txtp.traffic_class;
++ qos_compat.txtp.max_pcr = vcc->qos.txtp.max_pcr;
++ qos_compat.txtp.pcr = vcc->qos.txtp.pcr;
++ qos_compat.txtp.min_pcr = vcc->qos.txtp.min_pcr;
++ qos_compat.txtp.max_cdv = vcc->qos.txtp.max_cdv;
++ qos_compat.txtp.max_sdu = vcc->qos.txtp.max_sdu;
++
++ return copy_to_user(optval,&qos_compat,sizeof(qos_compat)) ?
++ -EFAULT : 0;
++ }
+ case SO_ATMQOS:
+ if (!test_bit(ATM_VF_HASQOS, &vcc->flags))
+ return -EINVAL;
+diff -urN linux-5.9/include.org/uapi/linux/atm.h linux-5.9/include/uapi/linux/atm.h
+--- linux-5.9/include.org/uapi/linux/atm.h 2020-10-11 23:15:50.000000000 +0200
++++ linux-5.9/include/uapi/linux/atm.h 2020-11-03 13:27:25.545142305 +0100
+@@ -71,7 +71,7 @@
/* connection identifier range; socket must be
bound or connected */
#define SO_ATMQOS __SO_ENCODE(SOL_ATM,2,struct atm_qos)
/* extra params for ABR */
unsigned int icr; /* Initial Cell Rate (24-bit) */
unsigned int tbe; /* Transient Buffer Exposure (24-bit) */
-@@ -243,4 +251,37 @@
- };
+@@ -239,4 +246,37 @@
+
typedef unsigned short atm_backend_t;
+struct atm_trafprm_compat {
+
+#define SO_ATMQOS_COMPAT __SO_ENCODE(SOL_ATM,2,struct atm_qos_compat)
+ /* Quality of Service setting (no vbr support) */
- #endif
-Index: linux/net/atm/common.c
-===================================================================
-RCS file: /afs/cmf/project/cvsroot/linux/net/atm/common.c,v
-retrieving revision 1.13
-diff -u -r1.13 common.c
---- linux/net/atm/common.c 17 Mar 2003 16:13:12 -0000 1.13
-+++ linux/net/atm/common.c 9 Apr 2003 12:10:28 -0000
-@@ -1085,6 +1085,43 @@
-
- vcc = ATM_SD(sock);
- switch (optname) {
-+ case SO_ATMQOS_COMPAT:
-+ {
-+ struct atm_qos_compat qos_compat;
-+ struct atm_qos qos;
-+
-+ if (copy_from_user(&qos_compat,optval,sizeof(qos_compat)))
-+ return -EFAULT;
-+
-+ /* convert old atm_qos to new atm_qos */
-+ qos.aal = qos_compat.aal;
-+ qos.rxtp.traffic_class = qos_compat.rxtp.traffic_class;
-+ qos.rxtp.max_pcr = qos_compat.rxtp.max_pcr;
-+ qos.rxtp.pcr = qos_compat.rxtp.pcr;
-+ qos.rxtp.min_pcr = qos_compat.rxtp.min_pcr;
-+ qos.rxtp.max_cdv = qos_compat.rxtp.max_cdv;
-+ qos.rxtp.max_sdu = qos_compat.rxtp.max_sdu;
-+ qos.rxtp.scr = 0;
-+ qos.rxtp.mbs = 0;
-+ qos.txtp.traffic_class = qos_compat.txtp.traffic_class;
-+ qos.txtp.max_pcr = qos_compat.txtp.max_pcr;
-+ qos.txtp.pcr = qos_compat.txtp.pcr;
-+ qos.txtp.min_pcr = qos_compat.txtp.min_pcr;
-+ qos.txtp.max_cdv = qos_compat.txtp.max_cdv;
-+ qos.txtp.max_sdu = qos_compat.txtp.max_sdu;
-+ qos.txtp.scr = 0;
-+ qos.txtp.mbs = 0;
-+
-+ error = check_qos(&qos);
-+ if (error) return error;
-+ if (sock->state == SS_CONNECTED)
-+ return atm_change_qos(vcc,&qos);
-+ if (sock->state != SS_UNCONNECTED)
-+ return -EBADFD;
-+ vcc->qos = qos;
-+ set_bit(ATM_VF_HASQOS,&vcc->flags);
-+ return 0;
-+ }
- case SO_ATMQOS:
- {
- struct atm_qos qos;
-@@ -1132,6 +1169,31 @@
-
- vcc = ATM_SD(sock);
- switch (optname) {
-+ case SO_ATMQOS_COMPAT:
-+ {
-+ struct atm_qos_compat qos_compat;
-+
-+ if (!test_bit(ATM_VF_HASQOS,&vcc->flags))
-+ return -EINVAL;
-+
-+ /* convert new atm_qos to old atm_qos */
-+ qos_compat.aal = vcc->qos.aal;
-+ qos_compat.rxtp.traffic_class = vcc->qos.rxtp.traffic_class;
-+ qos_compat.rxtp.max_pcr = vcc->qos.rxtp.max_pcr;
-+ qos_compat.rxtp.pcr = vcc->qos.rxtp.pcr;
-+ qos_compat.rxtp.min_pcr = vcc->qos.rxtp.min_pcr;
-+ qos_compat.rxtp.max_cdv = vcc->qos.rxtp.max_cdv;
-+ qos_compat.rxtp.max_sdu = vcc->qos.rxtp.max_sdu;
-+ qos_compat.txtp.traffic_class = vcc->qos.txtp.traffic_class;
-+ qos_compat.txtp.max_pcr = vcc->qos.txtp.max_pcr;
-+ qos_compat.txtp.pcr = vcc->qos.txtp.pcr;
-+ qos_compat.txtp.min_pcr = vcc->qos.txtp.min_pcr;
-+ qos_compat.txtp.max_cdv = vcc->qos.txtp.max_cdv;
-+ qos_compat.txtp.max_sdu = vcc->qos.txtp.max_sdu;
-+
-+ return copy_to_user(optval,&qos_compat,sizeof(qos_compat)) ?
-+ -EFAULT : 0;
-+ }
- case SO_ATMQOS:
- if (!test_bit(ATM_VF_HASQOS,&vcc->flags))
- return -EINVAL;
+ #endif /* _UAPI_LINUX_ATM_H */