diff options
Diffstat (limited to 'sbin')
-rw-r--r-- | sbin/pfctl/parse.y | 9 | ||||
-rw-r--r-- | sbin/pfctl/pfctl_parser.c | 16 |
2 files changed, 18 insertions, 7 deletions
diff --git a/sbin/pfctl/parse.y b/sbin/pfctl/parse.y index bf2e7923f2c..359d1a97b63 100644 --- a/sbin/pfctl/parse.y +++ b/sbin/pfctl/parse.y @@ -1,4 +1,4 @@ -/* $OpenBSD: parse.y,v 1.620 2012/10/18 15:18:57 reyk Exp $ */ +/* $OpenBSD: parse.y,v 1.621 2013/01/16 01:49:20 henning Exp $ */ /* * Copyright (c) 2001 Markus Friedl. All rights reserved. @@ -2372,6 +2372,13 @@ filter_set : prio { filter_opts.set_prio[0] = $1.b1; filter_opts.set_prio[1] = $1.b2; } + | QUEUE qname { + if (filter_opts.queues.qname) { + yyerror("queue cannot be redefined"); + YYERROR; + } + filter_opts.queues = $2; + } | TOS tos { if (filter_opts.marker & FOM_SETTOS) { yyerror("tos cannot be respecified"); diff --git a/sbin/pfctl/pfctl_parser.c b/sbin/pfctl/pfctl_parser.c index c21dec4ac43..f7c46661789 100644 --- a/sbin/pfctl/pfctl_parser.c +++ b/sbin/pfctl/pfctl_parser.c @@ -1,4 +1,4 @@ -/* $OpenBSD: pfctl_parser.c,v 1.291 2012/12/04 02:24:46 deraadt Exp $ */ +/* $OpenBSD: pfctl_parser.c,v 1.292 2013/01/16 01:49:20 henning Exp $ */ /* * Copyright (c) 2001 Daniel Hartmeier @@ -841,7 +841,7 @@ print_rule(struct pf_rule *r, const char *anchor_call, int opts) if (r->tos) printf(" tos 0x%2.2x", r->tos); - if (r->scrub_flags & PFSTATE_SETMASK) { + if (r->scrub_flags & PFSTATE_SETMASK || r->qname[0]) { char *comma = ""; printf(" set ("); if (r->scrub_flags & PFSTATE_SETPRIO) { @@ -852,6 +852,14 @@ print_rule(struct pf_rule *r, const char *anchor_call, int opts) r->set_prio[1]); comma = ","; } + if (r->qname[0]) { + if (r->pqname[0]) + printf("%s queue(%s, %s)", comma, r->qname, + r->pqname); + else + printf("%s queue %s", comma, r->qname); + comma = ","; + } if (r->scrub_flags & PFSTATE_SETTOS) { printf("%s tos 0x%2.2x", comma, r->set_tos); comma = ","; @@ -1035,10 +1043,6 @@ print_rule(struct pf_rule *r, const char *anchor_call, int opts) printf(" label \"%s\"", r->label); if (r->rule_flag & PFRULE_ONCE) printf(" once"); - if (r->qname[0] && r->pqname[0]) - printf(" queue(%s, %s)", r->qname, r->pqname); - else if (r->qname[0]) - printf(" queue %s", r->qname); if (r->tagname[0]) printf(" tag %s", r->tagname); if (r->match_tagname[0]) { |