]> git.pld-linux.org Git - packages/kernel.git/blob - kernel-atm-vbr.patch
- up to 4.18.5
[packages/kernel.git] / kernel-atm-vbr.patch
1 Index: linux/include/linux/atm.h
2 ===================================================================
3 RCS file: /afs/cmf/project/cvsroot/linux/include/linux/atm.h,v
4 retrieving revision 1.2
5 diff -u -r1.2 atm.h
6 --- linux/include/uapi/linux/atm.h      12 Feb 2003 20:56:33 -0000      1.2
7 +++ linux/include/uapi/linux/atm.h      9 Apr 2003 12:08:38 -0000
8 @@ -72,7 +72,7 @@
9                             /* connection identifier range; socket must be
10                                bound or connected */
11  #define SO_ATMQOS      __SO_ENCODE(SOL_ATM,2,struct atm_qos)
12 -                           /* Quality of Service setting */
13 +                           /* Quality of Service setting (with vbr support) */
14  #define SO_ATMSAP      __SO_ENCODE(SOL_ATM,3,struct atm_sap)
15                             /* Service Access Point */
16  #define SO_ATMPVC      __SO_ENCODE(SOL_ATM,4,struct sockaddr_atmpvc)
17 @@ -127,9 +127,11 @@
18  #define ATM_NONE       0               /* no traffic */
19  #define ATM_UBR                1
20  #define ATM_CBR                2
21 -#define ATM_VBR                3
22 +#define ATM_VBR_NRT    3
23 +#define ATM_VBR                ATM_VBR_NRT     /* for backward compatibility */
24  #define ATM_ABR                4
25  #define ATM_ANYCLASS   5               /* compatible with everything */
26 +#define ATM_VBR_RT     6
27  
28  #define ATM_MAX_PCR    -1              /* maximum available PCR */
29  
30 @@ -140,6 +142,11 @@
31         int             min_pcr;        /* minimum PCR in cells per second */
32         int             max_cdv;        /* maximum CDV in microseconds */
33         int             max_sdu;        /* maximum SDU in bytes */
34 +
35 +       /* extra params for VBR */
36 +       int             scr;            /* sustained rate in cells per second */
37 +       int             mbs;            /* maximum burst size (MBS) in cells */
38 +
39          /* extra params for ABR */
40          unsigned int   icr;            /* Initial Cell Rate (24-bit) */
41          unsigned int   tbe;            /* Transient Buffer Exposure (24-bit) */ 
42 @@ -243,4 +251,37 @@
43  };
44  
45  typedef unsigned short atm_backend_t;
46 +struct atm_trafprm_compat {
47 +       unsigned char   traffic_class;  /* traffic class (ATM_UBR, ...) */
48 +       int             max_pcr;        /* maximum PCR in cells per second */
49 +       int             pcr;            /* desired PCR in cells per second */
50 +       int             min_pcr;        /* minimum PCR in cells per second */
51 +       int             max_cdv;        /* maximum CDV in microseconds */
52 +       int             max_sdu;        /* maximum SDU in bytes */
53 +        /* extra params for ABR */
54 +        unsigned int   icr;            /* Initial Cell Rate (24-bit) */
55 +        unsigned int   tbe;            /* Transient Buffer Exposure (24-bit) */ 
56 +        unsigned int   frtt : 24;      /* Fixed Round Trip Time (24-bit) */
57 +        unsigned int   rif  : 4;       /* Rate Increment Factor (4-bit) */
58 +        unsigned int   rdf  : 4;       /* Rate Decrease Factor (4-bit) */
59 +        unsigned int nrm_pres  :1;      /* nrm present bit */
60 +        unsigned int trm_pres  :1;             /* rm present bit */
61 +        unsigned int adtf_pres :1;             /* adtf present bit */
62 +        unsigned int cdf_pres  :1;     /* cdf present bit*/
63 +        unsigned int nrm       :3;             /* Max # of Cells for each forward RM cell (3-bit) */
64 +        unsigned int trm       :3;     /* Time between forward RM cells (3-bit) */    
65 +       unsigned int adtf      :10;     /* ACR Decrease Time Factor (10-bit) */
66 +       unsigned int cdf       :3;      /* Cutoff Decrease Factor (3-bit) */
67 +        unsigned int spare     :9;      /* spare bits */ 
68 +};
69 +
70 +struct atm_qos_compat {
71 +       struct atm_trafprm_compat txtp; /* parameters in TX direction */
72 +       struct atm_trafprm_compat rxtp __ATM_API_ALIGN;
73 +                                       /* parameters in RX direction */
74 +       unsigned char aal __ATM_API_ALIGN;
75 +};
76 +
77 +#define SO_ATMQOS_COMPAT __SO_ENCODE(SOL_ATM,2,struct atm_qos_compat)
78 +                           /* Quality of Service setting (no vbr support) */
79  #endif /* _UAPI_LINUX_ATM_H */
80 Index: linux/net/atm/common.c
81 ===================================================================
82 RCS file: /afs/cmf/project/cvsroot/linux/net/atm/common.c,v
83 retrieving revision 1.13
84 diff -u -r1.13 common.c
85 --- linux/net/atm/common.c      17 Mar 2003 16:13:12 -0000      1.13
86 +++ linux/net/atm/common.c      9 Apr 2003 12:10:28 -0000
87 @@ -1085,6 +1085,43 @@
88  
89         vcc = ATM_SD(sock);
90         switch (optname) {
91 +               case SO_ATMQOS_COMPAT:
92 +                       {
93 +                               struct atm_qos_compat qos_compat;
94 +                               struct atm_qos qos;
95 +
96 +                               if (copy_from_user(&qos_compat,optval,sizeof(qos_compat)))
97 +                                       return -EFAULT;
98 +
99 +                               /* convert old atm_qos to new atm_qos */
100 +                               qos.aal = qos_compat.aal;
101 +                               qos.rxtp.traffic_class = qos_compat.rxtp.traffic_class;
102 +                               qos.rxtp.max_pcr = qos_compat.rxtp.max_pcr;
103 +                               qos.rxtp.pcr = qos_compat.rxtp.pcr;
104 +                               qos.rxtp.min_pcr = qos_compat.rxtp.min_pcr;
105 +                               qos.rxtp.max_cdv = qos_compat.rxtp.max_cdv;
106 +                               qos.rxtp.max_sdu = qos_compat.rxtp.max_sdu;
107 +                               qos.rxtp.scr = 0;
108 +                               qos.rxtp.mbs = 0;
109 +                               qos.txtp.traffic_class = qos_compat.txtp.traffic_class;
110 +                               qos.txtp.max_pcr = qos_compat.txtp.max_pcr;
111 +                               qos.txtp.pcr = qos_compat.txtp.pcr;
112 +                               qos.txtp.min_pcr = qos_compat.txtp.min_pcr;
113 +                               qos.txtp.max_cdv = qos_compat.txtp.max_cdv;
114 +                               qos.txtp.max_sdu = qos_compat.txtp.max_sdu;
115 +                               qos.txtp.scr = 0;
116 +                               qos.txtp.mbs = 0;
117 +
118 +                               error = check_qos(&qos);
119 +                               if (error) return error;
120 +                               if (sock->state == SS_CONNECTED)
121 +                                       return atm_change_qos(vcc,&qos);
122 +                               if (sock->state != SS_UNCONNECTED)
123 +                                       return -EBADFD;
124 +                               vcc->qos = qos;
125 +                               set_bit(ATM_VF_HASQOS,&vcc->flags);
126 +                               return 0;
127 +                       }
128         case SO_ATMQOS:
129         {
130                 struct atm_qos qos;
131 @@ -1132,6 +1169,31 @@
132  
133         vcc = ATM_SD(sock);
134         switch (optname) {
135 +               case SO_ATMQOS_COMPAT:
136 +                       {
137 +                               struct atm_qos_compat qos_compat;
138 +
139 +                               if (!test_bit(ATM_VF_HASQOS,&vcc->flags))
140 +                                       return -EINVAL;
141 +
142 +                               /* convert new atm_qos to old atm_qos */
143 +                               qos_compat.aal = vcc->qos.aal;
144 +                               qos_compat.rxtp.traffic_class = vcc->qos.rxtp.traffic_class;
145 +                               qos_compat.rxtp.max_pcr = vcc->qos.rxtp.max_pcr;
146 +                               qos_compat.rxtp.pcr = vcc->qos.rxtp.pcr;
147 +                               qos_compat.rxtp.min_pcr = vcc->qos.rxtp.min_pcr;
148 +                               qos_compat.rxtp.max_cdv = vcc->qos.rxtp.max_cdv;
149 +                               qos_compat.rxtp.max_sdu = vcc->qos.rxtp.max_sdu;
150 +                               qos_compat.txtp.traffic_class = vcc->qos.txtp.traffic_class;
151 +                               qos_compat.txtp.max_pcr = vcc->qos.txtp.max_pcr;
152 +                               qos_compat.txtp.pcr = vcc->qos.txtp.pcr;
153 +                               qos_compat.txtp.min_pcr = vcc->qos.txtp.min_pcr;
154 +                               qos_compat.txtp.max_cdv = vcc->qos.txtp.max_cdv;
155 +                               qos_compat.txtp.max_sdu = vcc->qos.txtp.max_sdu;
156 +
157 +                               return copy_to_user(optval,&qos_compat,sizeof(qos_compat)) ?
158 +                                   -EFAULT : 0;
159 +                       }
160         case SO_ATMQOS:
161                 if (!test_bit(ATM_VF_HASQOS,&vcc->flags))
162                         return -EINVAL;
This page took 0.162799 seconds and 3 git commands to generate.