aboutsummaryrefslogtreecommitdiffstats
path: root/net/sched/sch_netem.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/sched/sch_netem.c')
-rw-r--r--net/sched/sch_netem.c100
1 files changed, 50 insertions, 50 deletions
diff --git a/net/sched/sch_netem.c b/net/sched/sch_netem.c
index 6c344ade33c2..a7b58df4546d 100644
--- a/net/sched/sch_netem.c
+++ b/net/sched/sch_netem.c
@@ -313,21 +313,21 @@ static void netem_reset(struct Qdisc *sch)
313/* Pass size change message down to embedded FIFO */ 313/* Pass size change message down to embedded FIFO */
314static int set_fifo_limit(struct Qdisc *q, int limit) 314static int set_fifo_limit(struct Qdisc *q, int limit)
315{ 315{
316 struct rtattr *rta; 316 struct nlattr *nla;
317 int ret = -ENOMEM; 317 int ret = -ENOMEM;
318 318
319 /* Hack to avoid sending change message to non-FIFO */ 319 /* Hack to avoid sending change message to non-FIFO */
320 if (strncmp(q->ops->id + 1, "fifo", 4) != 0) 320 if (strncmp(q->ops->id + 1, "fifo", 4) != 0)
321 return 0; 321 return 0;
322 322
323 rta = kmalloc(RTA_LENGTH(sizeof(struct tc_fifo_qopt)), GFP_KERNEL); 323 nla = kmalloc(nla_attr_size(sizeof(struct tc_fifo_qopt)), GFP_KERNEL);
324 if (rta) { 324 if (nla) {
325 rta->rta_type = RTM_NEWQDISC; 325 nla->nla_type = RTM_NEWQDISC;
326 rta->rta_len = RTA_LENGTH(sizeof(struct tc_fifo_qopt)); 326 nla->nla_len = nla_attr_size(sizeof(struct tc_fifo_qopt));
327 ((struct tc_fifo_qopt *)RTA_DATA(rta))->limit = limit; 327 ((struct tc_fifo_qopt *)nla_data(nla))->limit = limit;
328 328
329 ret = q->ops->change(q, rta); 329 ret = q->ops->change(q, nla);
330 kfree(rta); 330 kfree(nla);
331 } 331 }
332 return ret; 332 return ret;
333} 333}
@@ -336,11 +336,11 @@ static int set_fifo_limit(struct Qdisc *q, int limit)
336 * Distribution data is a variable size payload containing 336 * Distribution data is a variable size payload containing
337 * signed 16 bit values. 337 * signed 16 bit values.
338 */ 338 */
339static int get_dist_table(struct Qdisc *sch, const struct rtattr *attr) 339static int get_dist_table(struct Qdisc *sch, const struct nlattr *attr)
340{ 340{
341 struct netem_sched_data *q = qdisc_priv(sch); 341 struct netem_sched_data *q = qdisc_priv(sch);
342 unsigned long n = RTA_PAYLOAD(attr)/sizeof(__s16); 342 unsigned long n = nla_len(attr)/sizeof(__s16);
343 const __s16 *data = RTA_DATA(attr); 343 const __s16 *data = nla_data(attr);
344 struct disttable *d; 344 struct disttable *d;
345 int i; 345 int i;
346 346
@@ -363,12 +363,12 @@ static int get_dist_table(struct Qdisc *sch, const struct rtattr *attr)
363 return 0; 363 return 0;
364} 364}
365 365
366static int get_correlation(struct Qdisc *sch, const struct rtattr *attr) 366static int get_correlation(struct Qdisc *sch, const struct nlattr *attr)
367{ 367{
368 struct netem_sched_data *q = qdisc_priv(sch); 368 struct netem_sched_data *q = qdisc_priv(sch);
369 const struct tc_netem_corr *c = RTA_DATA(attr); 369 const struct tc_netem_corr *c = nla_data(attr);
370 370
371 if (RTA_PAYLOAD(attr) != sizeof(*c)) 371 if (nla_len(attr) != sizeof(*c))
372 return -EINVAL; 372 return -EINVAL;
373 373
374 init_crandom(&q->delay_cor, c->delay_corr); 374 init_crandom(&q->delay_cor, c->delay_corr);
@@ -377,12 +377,12 @@ static int get_correlation(struct Qdisc *sch, const struct rtattr *attr)
377 return 0; 377 return 0;
378} 378}
379 379
380static int get_reorder(struct Qdisc *sch, const struct rtattr *attr) 380static int get_reorder(struct Qdisc *sch, const struct nlattr *attr)
381{ 381{
382 struct netem_sched_data *q = qdisc_priv(sch); 382 struct netem_sched_data *q = qdisc_priv(sch);
383 const struct tc_netem_reorder *r = RTA_DATA(attr); 383 const struct tc_netem_reorder *r = nla_data(attr);
384 384
385 if (RTA_PAYLOAD(attr) != sizeof(*r)) 385 if (nla_len(attr) != sizeof(*r))
386 return -EINVAL; 386 return -EINVAL;
387 387
388 q->reorder = r->probability; 388 q->reorder = r->probability;
@@ -390,12 +390,12 @@ static int get_reorder(struct Qdisc *sch, const struct rtattr *attr)
390 return 0; 390 return 0;
391} 391}
392 392
393static int get_corrupt(struct Qdisc *sch, const struct rtattr *attr) 393static int get_corrupt(struct Qdisc *sch, const struct nlattr *attr)
394{ 394{
395 struct netem_sched_data *q = qdisc_priv(sch); 395 struct netem_sched_data *q = qdisc_priv(sch);
396 const struct tc_netem_corrupt *r = RTA_DATA(attr); 396 const struct tc_netem_corrupt *r = nla_data(attr);
397 397
398 if (RTA_PAYLOAD(attr) != sizeof(*r)) 398 if (nla_len(attr) != sizeof(*r))
399 return -EINVAL; 399 return -EINVAL;
400 400
401 q->corrupt = r->probability; 401 q->corrupt = r->probability;
@@ -404,16 +404,16 @@ static int get_corrupt(struct Qdisc *sch, const struct rtattr *attr)
404} 404}
405 405
406/* Parse netlink message to set options */ 406/* Parse netlink message to set options */
407static int netem_change(struct Qdisc *sch, struct rtattr *opt) 407static int netem_change(struct Qdisc *sch, struct nlattr *opt)
408{ 408{
409 struct netem_sched_data *q = qdisc_priv(sch); 409 struct netem_sched_data *q = qdisc_priv(sch);
410 struct tc_netem_qopt *qopt; 410 struct tc_netem_qopt *qopt;
411 int ret; 411 int ret;
412 412
413 if (opt == NULL || RTA_PAYLOAD(opt) < sizeof(*qopt)) 413 if (opt == NULL || nla_len(opt) < sizeof(*qopt))
414 return -EINVAL; 414 return -EINVAL;
415 415
416 qopt = RTA_DATA(opt); 416 qopt = nla_data(opt);
417 ret = set_fifo_limit(q->qdisc, qopt->limit); 417 ret = set_fifo_limit(q->qdisc, qopt->limit);
418 if (ret) { 418 if (ret) {
419 pr_debug("netem: can't set fifo limit\n"); 419 pr_debug("netem: can't set fifo limit\n");
@@ -437,33 +437,33 @@ static int netem_change(struct Qdisc *sch, struct rtattr *opt)
437 /* Handle nested options after initial queue options. 437 /* Handle nested options after initial queue options.
438 * Should have put all options in nested format but too late now. 438 * Should have put all options in nested format but too late now.
439 */ 439 */
440 if (RTA_PAYLOAD(opt) > sizeof(*qopt)) { 440 if (nla_len(opt) > sizeof(*qopt)) {
441 struct rtattr *tb[TCA_NETEM_MAX]; 441 struct nlattr *tb[TCA_NETEM_MAX + 1];
442 if (rtattr_parse(tb, TCA_NETEM_MAX, 442 if (nla_parse(tb, TCA_NETEM_MAX,
443 RTA_DATA(opt) + sizeof(*qopt), 443 nla_data(opt) + sizeof(*qopt),
444 RTA_PAYLOAD(opt) - sizeof(*qopt))) 444 nla_len(opt) - sizeof(*qopt), NULL))
445 return -EINVAL; 445 return -EINVAL;
446 446
447 if (tb[TCA_NETEM_CORR-1]) { 447 if (tb[TCA_NETEM_CORR]) {
448 ret = get_correlation(sch, tb[TCA_NETEM_CORR-1]); 448 ret = get_correlation(sch, tb[TCA_NETEM_CORR]);
449 if (ret) 449 if (ret)
450 return ret; 450 return ret;
451 } 451 }
452 452
453 if (tb[TCA_NETEM_DELAY_DIST-1]) { 453 if (tb[TCA_NETEM_DELAY_DIST]) {
454 ret = get_dist_table(sch, tb[TCA_NETEM_DELAY_DIST-1]); 454 ret = get_dist_table(sch, tb[TCA_NETEM_DELAY_DIST]);
455 if (ret) 455 if (ret)
456 return ret; 456 return ret;
457 } 457 }
458 458
459 if (tb[TCA_NETEM_REORDER-1]) { 459 if (tb[TCA_NETEM_REORDER]) {
460 ret = get_reorder(sch, tb[TCA_NETEM_REORDER-1]); 460 ret = get_reorder(sch, tb[TCA_NETEM_REORDER]);
461 if (ret) 461 if (ret)
462 return ret; 462 return ret;
463 } 463 }
464 464
465 if (tb[TCA_NETEM_CORRUPT-1]) { 465 if (tb[TCA_NETEM_CORRUPT]) {
466 ret = get_corrupt(sch, tb[TCA_NETEM_CORRUPT-1]); 466 ret = get_corrupt(sch, tb[TCA_NETEM_CORRUPT]);
467 if (ret) 467 if (ret)
468 return ret; 468 return ret;
469 } 469 }
@@ -515,13 +515,13 @@ static int tfifo_enqueue(struct sk_buff *nskb, struct Qdisc *sch)
515 return qdisc_reshape_fail(nskb, sch); 515 return qdisc_reshape_fail(nskb, sch);
516} 516}
517 517
518static int tfifo_init(struct Qdisc *sch, struct rtattr *opt) 518static int tfifo_init(struct Qdisc *sch, struct nlattr *opt)
519{ 519{
520 struct fifo_sched_data *q = qdisc_priv(sch); 520 struct fifo_sched_data *q = qdisc_priv(sch);
521 521
522 if (opt) { 522 if (opt) {
523 struct tc_fifo_qopt *ctl = RTA_DATA(opt); 523 struct tc_fifo_qopt *ctl = nla_data(opt);
524 if (RTA_PAYLOAD(opt) < sizeof(*ctl)) 524 if (nla_len(opt) < sizeof(*ctl))
525 return -EINVAL; 525 return -EINVAL;
526 526
527 q->limit = ctl->limit; 527 q->limit = ctl->limit;
@@ -537,10 +537,10 @@ static int tfifo_dump(struct Qdisc *sch, struct sk_buff *skb)
537 struct fifo_sched_data *q = qdisc_priv(sch); 537 struct fifo_sched_data *q = qdisc_priv(sch);
538 struct tc_fifo_qopt opt = { .limit = q->limit }; 538 struct tc_fifo_qopt opt = { .limit = q->limit };
539 539
540 RTA_PUT(skb, TCA_OPTIONS, sizeof(opt), &opt); 540 NLA_PUT(skb, TCA_OPTIONS, sizeof(opt), &opt);
541 return skb->len; 541 return skb->len;
542 542
543rtattr_failure: 543nla_put_failure:
544 return -1; 544 return -1;
545} 545}
546 546
@@ -557,7 +557,7 @@ static struct Qdisc_ops tfifo_qdisc_ops __read_mostly = {
557 .dump = tfifo_dump, 557 .dump = tfifo_dump,
558}; 558};
559 559
560static int netem_init(struct Qdisc *sch, struct rtattr *opt) 560static int netem_init(struct Qdisc *sch, struct nlattr *opt)
561{ 561{
562 struct netem_sched_data *q = qdisc_priv(sch); 562 struct netem_sched_data *q = qdisc_priv(sch);
563 int ret; 563 int ret;
@@ -595,7 +595,7 @@ static int netem_dump(struct Qdisc *sch, struct sk_buff *skb)
595{ 595{
596 const struct netem_sched_data *q = qdisc_priv(sch); 596 const struct netem_sched_data *q = qdisc_priv(sch);
597 unsigned char *b = skb_tail_pointer(skb); 597 unsigned char *b = skb_tail_pointer(skb);
598 struct rtattr *rta = (struct rtattr *) b; 598 struct nlattr *nla = (struct nlattr *) b;
599 struct tc_netem_qopt qopt; 599 struct tc_netem_qopt qopt;
600 struct tc_netem_corr cor; 600 struct tc_netem_corr cor;
601 struct tc_netem_reorder reorder; 601 struct tc_netem_reorder reorder;
@@ -607,26 +607,26 @@ static int netem_dump(struct Qdisc *sch, struct sk_buff *skb)
607 qopt.loss = q->loss; 607 qopt.loss = q->loss;
608 qopt.gap = q->gap; 608 qopt.gap = q->gap;
609 qopt.duplicate = q->duplicate; 609 qopt.duplicate = q->duplicate;
610 RTA_PUT(skb, TCA_OPTIONS, sizeof(qopt), &qopt); 610 NLA_PUT(skb, TCA_OPTIONS, sizeof(qopt), &qopt);
611 611
612 cor.delay_corr = q->delay_cor.rho; 612 cor.delay_corr = q->delay_cor.rho;
613 cor.loss_corr = q->loss_cor.rho; 613 cor.loss_corr = q->loss_cor.rho;
614 cor.dup_corr = q->dup_cor.rho; 614 cor.dup_corr = q->dup_cor.rho;
615 RTA_PUT(skb, TCA_NETEM_CORR, sizeof(cor), &cor); 615 NLA_PUT(skb, TCA_NETEM_CORR, sizeof(cor), &cor);
616 616
617 reorder.probability = q->reorder; 617 reorder.probability = q->reorder;
618 reorder.correlation = q->reorder_cor.rho; 618 reorder.correlation = q->reorder_cor.rho;
619 RTA_PUT(skb, TCA_NETEM_REORDER, sizeof(reorder), &reorder); 619 NLA_PUT(skb, TCA_NETEM_REORDER, sizeof(reorder), &reorder);
620 620
621 corrupt.probability = q->corrupt; 621 corrupt.probability = q->corrupt;
622 corrupt.correlation = q->corrupt_cor.rho; 622 corrupt.correlation = q->corrupt_cor.rho;
623 RTA_PUT(skb, TCA_NETEM_CORRUPT, sizeof(corrupt), &corrupt); 623 NLA_PUT(skb, TCA_NETEM_CORRUPT, sizeof(corrupt), &corrupt);
624 624
625 rta->rta_len = skb_tail_pointer(skb) - b; 625 nla->nla_len = skb_tail_pointer(skb) - b;
626 626
627 return skb->len; 627 return skb->len;
628 628
629rtattr_failure: 629nla_put_failure:
630 nlmsg_trim(skb, b); 630 nlmsg_trim(skb, b);
631 return -1; 631 return -1;
632} 632}
@@ -678,7 +678,7 @@ static void netem_put(struct Qdisc *sch, unsigned long arg)
678} 678}
679 679
680static int netem_change_class(struct Qdisc *sch, u32 classid, u32 parentid, 680static int netem_change_class(struct Qdisc *sch, u32 classid, u32 parentid,
681 struct rtattr **tca, unsigned long *arg) 681 struct nlattr **tca, unsigned long *arg)
682{ 682{
683 return -ENOSYS; 683 return -ENOSYS;
684} 684}