OK florian@
On Wed, Jan 25, 2017 at 07:12:14PM -0500, Bertrand Provost wrote:
> Hi,
>
> Based on feedback from jmc and florian here a new version of the patch
> - Add -V in usage() && __dead usage()
> - Change man
>
> (I hope this time my mail client is well configure)
>
> Regards,
>
> --
> Bertrand Provost
>
> Index: pfctl.8
> ===================================================================
> RCS file: /cvs/src/sbin/pfctl/pfctl.8,v
> retrieving revision 1.165
> diff -u -p -r1.165 pfctl.8
> --- pfctl.8 15 Jun 2015 08:48:23 -0000 1.165
> +++ pfctl.8 25 Jan 2017 23:55:10 -0000
> @@ -47,6 +47,7 @@
> .Op Fl S Ar statefile
> .Op Fl s Ar modifier Op Fl R Ar id
> .Op Fl t Ar table Fl T Ar command Op Ar address ...
> +.Op Fl V Ar rdomain
> .Op Fl x Ar level
> .Ek
> .Sh DESCRIPTION
> @@ -644,6 +645,10 @@ This flag is set when per-address counte
> .El
> .It Fl t Ar table
> Specify the name of the table.
> +.It Fl V Ar rdomain
> +Select the routing domain to be used for kill states by host or by label.
> +The rdomain of a state is displayed in parentheses before the host by
> +.Fl s Cm states .
> .It Fl v
> Produce more verbose output.
> A second use of
> Index: pfctl.c
> ===================================================================
> RCS file: /cvs/src/sbin/pfctl/pfctl.c,v
> retrieving revision 1.334
> diff -u -p -r1.334 pfctl.c
> --- pfctl.c 14 Jan 2016 12:05:51 -0000 1.334
> +++ pfctl.c 25 Jan 2017 23:55:10 -0000
> @@ -69,9 +69,9 @@ int pfctl_clear_src_nodes(int, int);
> int pfctl_clear_states(int, const char *, int);
> void pfctl_addrprefix(char *, struct pf_addr *);
> int pfctl_kill_src_nodes(int, const char *, int);
> -int pfctl_net_kill_states(int, const char *, int);
> -int pfctl_label_kill_states(int, const char *, int);
> -int pfctl_id_kill_states(int, const char *, int);
> +int pfctl_net_kill_states(int, const char *, int, int);
> +int pfctl_label_kill_states(int, const char *, int, int);
> +int pfctl_id_kill_states(int, int);
> void pfctl_init_options(struct pfctl *);
> int pfctl_load_options(struct pfctl *);
> int pfctl_load_limit(struct pfctl *, unsigned int, unsigned int);
> @@ -231,7 +231,7 @@ struct pf_qihead qspecs = TAILQ_HEAD_INI
> struct pf_qihead rootqs = TAILQ_HEAD_INITIALIZER(rootqs);
>
>
> -void
> +__dead void
> usage(void)
> {
> extern char *__progname;
> @@ -243,7 +243,7 @@ usage(void)
> fprintf(stderr, "[-L statefile] [-o level] [-p device]\n");
> fprintf(stderr, "\t[-S statefile] [-s modifier [-R id]] ");
> fprintf(stderr, "[-t table -T command [address ...]]\n");
> - fprintf(stderr, "\t[-x level]\n");
> + fprintf(stderr, "\t[-V rdomain] [-x level]\n");
> exit(1);
> }
>
> @@ -512,7 +512,7 @@ pfctl_kill_src_nodes(int dev, const char
> }
>
> int
> -pfctl_net_kill_states(int dev, const char *iface, int opts)
> +pfctl_net_kill_states(int dev, const char *iface, int opts, int rdomain)
> {
> struct pfioc_state_kill psk;
> struct addrinfo *res[2], *resp[2];
> @@ -531,6 +531,8 @@ pfctl_net_kill_states(int dev, const cha
> sizeof(psk.psk_ifname)) >= sizeof(psk.psk_ifname))
> errx(1, "invalid interface: %s", iface);
>
> + psk.psk_rdomain = rdomain;
> +
> pfctl_addrprefix(state_kill[0], &psk.psk_src.addr.v.a.mask);
>
> if ((ret_ga = getaddrinfo(state_kill[0], NULL, NULL, &res[0]))) {
> @@ -618,7 +620,7 @@ pfctl_net_kill_states(int dev, const cha
> }
>
> int
> -pfctl_label_kill_states(int dev, const char *iface, int opts)
> +pfctl_label_kill_states(int dev, const char *iface, int opts, int rdomain)
> {
> struct pfioc_state_kill psk;
>
> @@ -635,6 +637,8 @@ pfctl_label_kill_states(int dev, const c
> sizeof(psk.psk_label))
> errx(1, "label too long: %s", state_kill[1]);
>
> + psk.psk_rdomain = rdomain;
> +
> if (ioctl(dev, DIOCKILLSTATES, &psk))
> err(1, "DIOCKILLSTATES");
>
> @@ -645,7 +649,7 @@ pfctl_label_kill_states(int dev, const c
> }
>
> int
> -pfctl_id_kill_states(int dev, const char *iface, int opts)
> +pfctl_id_kill_states(int dev, int opts)
> {
> struct pfioc_state_kill psk;
>
> @@ -2098,6 +2102,7 @@ main(int argc, char *argv[])
> int opts = 0;
> int optimize = PF_OPTIMIZE_BASIC;
> int level;
> + int rdomain = 0;
> char anchorname[PATH_MAX];
> int anchor_wildcard = 0;
> char *path;
> @@ -2109,7 +2114,7 @@ main(int argc, char *argv[])
> usage();
>
> while ((ch = getopt(argc, argv,
> - "a:dD:eqf:F:ghi:k:K:L:no:Pp:R:rS:s:t:T:vx:z")) != -1) {
> + "a:dD:eqf:F:ghi:k:K:L:no:Pp:R:rS:s:t:T:vV:x:z")) != -1) {
> switch (ch) {
> case 'a':
> anchoropt = optarg;
> @@ -2215,6 +2220,13 @@ main(int argc, char *argv[])
> opts |= PF_OPT_VERBOSE2;
> opts |= PF_OPT_VERBOSE;
> break;
> + case 'V':
> + rdomain = strtonum(optarg, 0, RT_TABLEID_MAX, &errstr);
> + if (errstr) {
> + warnx("Invalid rdomain: %s", errstr);
> + usage();
> + }
> + break;
> case 'x':
> debugopt = pfctl_lookup_option(optarg, debugopt_list);
> if (debugopt == NULL) {
> @@ -2403,11 +2415,11 @@ main(int argc, char *argv[])
> }
> if (state_killers) {
> if (!strcmp(state_kill[0], "label"))
> - pfctl_label_kill_states(dev, ifaceopt, opts);
> + pfctl_label_kill_states(dev, ifaceopt, opts, rdomain);
> else if (!strcmp(state_kill[0], "id"))
> - pfctl_id_kill_states(dev, ifaceopt, opts);
> + pfctl_id_kill_states(dev, opts);
> else
> - pfctl_net_kill_states(dev, ifaceopt, opts);
> + pfctl_net_kill_states(dev, ifaceopt, opts, rdomain);
> }
>
> if (src_node_killers)
>
>
> Index: pfctl.8
> ===================================================================
> RCS file: /cvs/src/sbin/pfctl/pfctl.8,v
> retrieving revision 1.165
> diff -u -p -r1.165 pfctl.8
> --- pfctl.8 15 Jun 2015 08:48:23 -0000 1.165
> +++ pfctl.8 25 Jan 2017 23:55:10 -0000
> @@ -47,6 +47,7 @@
> .Op Fl S Ar statefile
> .Op Fl s Ar modifier Op Fl R Ar id
> .Op Fl t Ar table Fl T Ar command Op Ar address ...
> +.Op Fl V Ar rdomain
> .Op Fl x Ar level
> .Ek
> .Sh DESCRIPTION
> @@ -644,6 +645,10 @@ This flag is set when per-address counte
> .El
> .It Fl t Ar table
> Specify the name of the table.
> +.It Fl V Ar rdomain
> +Select the routing domain to be used for kill states by host or by label.
> +The rdomain of a state is displayed in parentheses before the host by
> +.Fl s Cm states .
> .It Fl v
> Produce more verbose output.
> A second use of
> Index: pfctl.c
> ===================================================================
> RCS file: /cvs/src/sbin/pfctl/pfctl.c,v
> retrieving revision 1.334
> diff -u -p -r1.334 pfctl.c
> --- pfctl.c 14 Jan 2016 12:05:51 -0000 1.334
> +++ pfctl.c 25 Jan 2017 23:55:10 -0000
> @@ -69,9 +69,9 @@ int pfctl_clear_src_nodes(int, int);
> int pfctl_clear_states(int, const char *, int);
> void pfctl_addrprefix(char *, struct pf_addr *);
> int pfctl_kill_src_nodes(int, const char *, int);
> -int pfctl_net_kill_states(int, const char *, int);
> -int pfctl_label_kill_states(int, const char *, int);
> -int pfctl_id_kill_states(int, const char *, int);
> +int pfctl_net_kill_states(int, const char *, int, int);
> +int pfctl_label_kill_states(int, const char *, int, int);
> +int pfctl_id_kill_states(int, int);
> void pfctl_init_options(struct pfctl *);
> int pfctl_load_options(struct pfctl *);
> int pfctl_load_limit(struct pfctl *, unsigned int, unsigned int);
> @@ -231,7 +231,7 @@ struct pf_qihead qspecs = TAILQ_HEAD_INI
> struct pf_qihead rootqs = TAILQ_HEAD_INITIALIZER(rootqs);
>
>
> -void
> +__dead void
> usage(void)
> {
> extern char *__progname;
> @@ -243,7 +243,7 @@ usage(void)
> fprintf(stderr, "[-L statefile] [-o level] [-p device]\n");
> fprintf(stderr, "\t[-S statefile] [-s modifier [-R id]] ");
> fprintf(stderr, "[-t table -T command [address ...]]\n");
> - fprintf(stderr, "\t[-x level]\n");
> + fprintf(stderr, "\t[-V rdomain] [-x level]\n");
> exit(1);
> }
>
> @@ -512,7 +512,7 @@ pfctl_kill_src_nodes(int dev, const char
> }
>
> int
> -pfctl_net_kill_states(int dev, const char *iface, int opts)
> +pfctl_net_kill_states(int dev, const char *iface, int opts, int rdomain)
> {
> struct pfioc_state_kill psk;
> struct addrinfo *res[2], *resp[2];
> @@ -531,6 +531,8 @@ pfctl_net_kill_states(int dev, const cha
> sizeof(psk.psk_ifname)) >= sizeof(psk.psk_ifname))
> errx(1, "invalid interface: %s", iface);
>
> + psk.psk_rdomain = rdomain;
> +
> pfctl_addrprefix(state_kill[0], &psk.psk_src.addr.v.a.mask);
>
> if ((ret_ga = getaddrinfo(state_kill[0], NULL, NULL, &res[0]))) {
> @@ -618,7 +620,7 @@ pfctl_net_kill_states(int dev, const cha
> }
>
> int
> -pfctl_label_kill_states(int dev, const char *iface, int opts)
> +pfctl_label_kill_states(int dev, const char *iface, int opts, int rdomain)
> {
> struct pfioc_state_kill psk;
>
> @@ -635,6 +637,8 @@ pfctl_label_kill_states(int dev, const c
> sizeof(psk.psk_label))
> errx(1, "label too long: %s", state_kill[1]);
>
> + psk.psk_rdomain = rdomain;
> +
> if (ioctl(dev, DIOCKILLSTATES, &psk))
> err(1, "DIOCKILLSTATES");
>
> @@ -645,7 +649,7 @@ pfctl_label_kill_states(int dev, const c
> }
>
> int
> -pfctl_id_kill_states(int dev, const char *iface, int opts)
> +pfctl_id_kill_states(int dev, int opts)
> {
> struct pfioc_state_kill psk;
>
> @@ -2098,6 +2102,7 @@ main(int argc, char *argv[])
> int opts = 0;
> int optimize = PF_OPTIMIZE_BASIC;
> int level;
> + int rdomain = 0;
> char anchorname[PATH_MAX];
> int anchor_wildcard = 0;
> char *path;
> @@ -2109,7 +2114,7 @@ main(int argc, char *argv[])
> usage();
>
> while ((ch = getopt(argc, argv,
> - "a:dD:eqf:F:ghi:k:K:L:no:Pp:R:rS:s:t:T:vx:z")) != -1) {
> + "a:dD:eqf:F:ghi:k:K:L:no:Pp:R:rS:s:t:T:vV:x:z")) != -1) {
> switch (ch) {
> case 'a':
> anchoropt = optarg;
> @@ -2215,6 +2220,13 @@ main(int argc, char *argv[])
> opts |= PF_OPT_VERBOSE2;
> opts |= PF_OPT_VERBOSE;
> break;
> + case 'V':
> + rdomain = strtonum(optarg, 0, RT_TABLEID_MAX, &errstr);
> + if (errstr) {
> + warnx("Invalid rdomain: %s", errstr);
> + usage();
> + }
> + break;
> case 'x':
> debugopt = pfctl_lookup_option(optarg, debugopt_list);
> if (debugopt == NULL) {
> @@ -2403,11 +2415,11 @@ main(int argc, char *argv[])
> }
> if (state_killers) {
> if (!strcmp(state_kill[0], "label"))
> - pfctl_label_kill_states(dev, ifaceopt, opts);
> + pfctl_label_kill_states(dev, ifaceopt, opts, rdomain);
> else if (!strcmp(state_kill[0], "id"))
> - pfctl_id_kill_states(dev, ifaceopt, opts);
> + pfctl_id_kill_states(dev, opts);
> else
> - pfctl_net_kill_states(dev, ifaceopt, opts);
> + pfctl_net_kill_states(dev, ifaceopt, opts, rdomain);
> }
>
> if (src_node_killers)
--
I'm not entirely sure you are real.