aboutsummaryrefslogtreecommitdiffstats
path: root/net/dccp/options.c
diff options
context:
space:
mode:
authorGerrit Renker <gerrit@erg.abdn.ac.uk>2010-09-19 14:06:50 -0400
committerGerrit Renker <gerrit@erg.abdn.ac.uk>2010-09-21 06:14:25 -0400
commit4874c131d79695e3d372042781a408a1a8a762d8 (patch)
treee3c6bf89f191b47e019f063d16c3e5d6c4fc0623 /net/dccp/options.c
parent462fb2af9788a82a534f8184abfde31574e1cfa0 (diff)
dccp: Add packet type information to CCID-specific option parsing
This 1. adds packet type information to ccid_hc_{rx,tx}_parse_options(). This is necessary, since table 3 in RFC 4340, 5.8 leaves it to the CCIDs to state which options may (not) appear on what packet type. 2. adds such a check for CCID-3's {Loss Event, Receive} Rate as specified in RFC 4340 8.3 ("Receive Rate options MUST NOT be sent on DCCP-Data packets") and 8.5 ("Loss Event Rate options MUST NOT be sent on DCCP-Data packets"). 3. removes an unused argument `idx' from ccid_hc_{rx,tx}_parse_options(). This is also no longer necessary, since the CCID-specific option-parsing routines are passed every single parameter of the type-length-value option encoding. Signed-off-by: Gerrit Renker <gerrit@erg.abdn.ac.uk>
Diffstat (limited to 'net/dccp/options.c')
-rw-r--r--net/dccp/options.c16
1 files changed, 4 insertions, 12 deletions
diff --git a/net/dccp/options.c b/net/dccp/options.c
index bfda087bd90d..e4983e3d2616 100644
--- a/net/dccp/options.c
+++ b/net/dccp/options.c
@@ -226,23 +226,15 @@ int dccp_parse_options(struct sock *sk, struct dccp_request_sock *dreq,
226 dccp_pr_debug("%s rx opt: ELAPSED_TIME=%d\n", 226 dccp_pr_debug("%s rx opt: ELAPSED_TIME=%d\n",
227 dccp_role(sk), elapsed_time); 227 dccp_role(sk), elapsed_time);
228 break; 228 break;
229 case 128 ... 191: { 229 case 128 ... 191:
230 const u16 idx = value - options;
231
232 if (ccid_hc_rx_parse_options(dp->dccps_hc_rx_ccid, sk, 230 if (ccid_hc_rx_parse_options(dp->dccps_hc_rx_ccid, sk,
233 opt, len, idx, 231 pkt_type, opt, value, len))
234 value) != 0)
235 goto out_invalid_option; 232 goto out_invalid_option;
236 }
237 break; 233 break;
238 case 192 ... 255: { 234 case 192 ... 255:
239 const u16 idx = value - options;
240
241 if (ccid_hc_tx_parse_options(dp->dccps_hc_tx_ccid, sk, 235 if (ccid_hc_tx_parse_options(dp->dccps_hc_tx_ccid, sk,
242 opt, len, idx, 236 pkt_type, opt, value, len))
243 value) != 0)
244 goto out_invalid_option; 237 goto out_invalid_option;
245 }
246 break; 238 break;
247 default: 239 default:
248 DCCP_CRIT("DCCP(%p): option %d(len=%d) not " 240 DCCP_CRIT("DCCP(%p): option %d(len=%d) not "