diff options
author | Gerrit Renker <gerrit@erg.abdn.ac.uk> | 2010-09-19 14:06:50 -0400 |
---|---|---|
committer | Gerrit Renker <gerrit@erg.abdn.ac.uk> | 2010-09-21 06:14:25 -0400 |
commit | 4874c131d79695e3d372042781a408a1a8a762d8 (patch) | |
tree | e3c6bf89f191b47e019f063d16c3e5d6c4fc0623 /net/dccp/options.c | |
parent | 462fb2af9788a82a534f8184abfde31574e1cfa0 (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.c | 16 |
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 " |