diff options
Diffstat (limited to 'net/ipv6/ip6_flowlabel.c')
| -rw-r--r-- | net/ipv6/ip6_flowlabel.c | 24 |
1 files changed, 11 insertions, 13 deletions
diff --git a/net/ipv6/ip6_flowlabel.c b/net/ipv6/ip6_flowlabel.c index 1d672b0547f2..6d4533b58dca 100644 --- a/net/ipv6/ip6_flowlabel.c +++ b/net/ipv6/ip6_flowlabel.c | |||
| @@ -330,8 +330,10 @@ fl_create(struct in6_flowlabel_req *freq, char __user *optval, int optlen, int * | |||
| 330 | fl->share = freq->flr_share; | 330 | fl->share = freq->flr_share; |
| 331 | addr_type = ipv6_addr_type(&freq->flr_dst); | 331 | addr_type = ipv6_addr_type(&freq->flr_dst); |
| 332 | if ((addr_type&IPV6_ADDR_MAPPED) | 332 | if ((addr_type&IPV6_ADDR_MAPPED) |
| 333 | || addr_type == IPV6_ADDR_ANY) | 333 | || addr_type == IPV6_ADDR_ANY) { |
| 334 | err = -EINVAL; | ||
| 334 | goto done; | 335 | goto done; |
| 336 | } | ||
| 335 | ipv6_addr_copy(&fl->dst, &freq->flr_dst); | 337 | ipv6_addr_copy(&fl->dst, &freq->flr_dst); |
| 336 | atomic_set(&fl->users, 1); | 338 | atomic_set(&fl->users, 1); |
| 337 | switch (fl->share) { | 339 | switch (fl->share) { |
| @@ -587,6 +589,8 @@ static struct ip6_flowlabel *ip6fl_get_next(struct seq_file *seq, struct ip6_flo | |||
| 587 | while (!fl) { | 589 | while (!fl) { |
| 588 | if (++state->bucket <= FL_HASH_MASK) | 590 | if (++state->bucket <= FL_HASH_MASK) |
| 589 | fl = fl_ht[state->bucket]; | 591 | fl = fl_ht[state->bucket]; |
| 592 | else | ||
| 593 | break; | ||
| 590 | } | 594 | } |
| 591 | return fl; | 595 | return fl; |
| 592 | } | 596 | } |
| @@ -623,9 +627,13 @@ static void ip6fl_seq_stop(struct seq_file *seq, void *v) | |||
| 623 | read_unlock_bh(&ip6_fl_lock); | 627 | read_unlock_bh(&ip6_fl_lock); |
| 624 | } | 628 | } |
| 625 | 629 | ||
| 626 | static void ip6fl_fl_seq_show(struct seq_file *seq, struct ip6_flowlabel *fl) | 630 | static int ip6fl_seq_show(struct seq_file *seq, void *v) |
| 627 | { | 631 | { |
| 628 | while(fl) { | 632 | if (v == SEQ_START_TOKEN) |
| 633 | seq_printf(seq, "%-5s %-1s %-6s %-6s %-6s %-8s %-32s %s\n", | ||
| 634 | "Label", "S", "Owner", "Users", "Linger", "Expires", "Dst", "Opt"); | ||
| 635 | else { | ||
| 636 | struct ip6_flowlabel *fl = v; | ||
| 629 | seq_printf(seq, | 637 | seq_printf(seq, |
| 630 | "%05X %-1d %-6d %-6d %-6ld %-8ld " NIP6_SEQFMT " %-4d\n", | 638 | "%05X %-1d %-6d %-6d %-6ld %-8ld " NIP6_SEQFMT " %-4d\n", |
| 631 | (unsigned)ntohl(fl->label), | 639 | (unsigned)ntohl(fl->label), |
| @@ -636,17 +644,7 @@ static void ip6fl_fl_seq_show(struct seq_file *seq, struct ip6_flowlabel *fl) | |||
| 636 | (long)(fl->expires - jiffies)/HZ, | 644 | (long)(fl->expires - jiffies)/HZ, |
| 637 | NIP6(fl->dst), | 645 | NIP6(fl->dst), |
| 638 | fl->opt ? fl->opt->opt_nflen : 0); | 646 | fl->opt ? fl->opt->opt_nflen : 0); |
| 639 | fl = fl->next; | ||
| 640 | } | 647 | } |
| 641 | } | ||
| 642 | |||
| 643 | static int ip6fl_seq_show(struct seq_file *seq, void *v) | ||
| 644 | { | ||
| 645 | if (v == SEQ_START_TOKEN) | ||
| 646 | seq_printf(seq, "%-5s %-1s %-6s %-6s %-6s %-8s %-32s %s\n", | ||
| 647 | "Label", "S", "Owner", "Users", "Linger", "Expires", "Dst", "Opt"); | ||
| 648 | else | ||
| 649 | ip6fl_fl_seq_show(seq, v); | ||
| 650 | return 0; | 648 | return 0; |
| 651 | } | 649 | } |
| 652 | 650 | ||
