]>
Commit | Line | Data |
---|---|---|
2380c486 JR |
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 | |
537831f9 AM |
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 | |
2380c486 JR |
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) */ | |
537831f9 | 79 | #endif /* _UAPI_LINUX_ATM_H */ |
2380c486 JR |
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 | + } | |
d031c9d6 | 128 | case SO_ATMQOS: |
129 | { | |
130 | struct atm_qos qos; | |
2380c486 JR |
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 | + } | |
d031c9d6 | 160 | case SO_ATMQOS: |
161 | if (!test_bit(ATM_VF_HASQOS,&vcc->flags)) | |
162 | return -EINVAL; |