Date: Wed, 13 Aug 2014 12:04:45 +0000 (UTC) From: "Alexander V. Chernikov" <melifaro@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r269926 - in projects/ipfw: sbin/ipfw sys/netpfil/ipfw Message-ID: <201408131204.s7DC4jxN086801@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: melifaro Date: Wed Aug 13 12:04:45 2014 New Revision: 269926 URL: http://svnweb.freebsd.org/changeset/base/269926 Log: * Pass proper table set numbers from userland side. * Ignore them, but honor V_fw_tables_sets value on kernel side. Modified: projects/ipfw/sbin/ipfw/ipfw2.c projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c Modified: projects/ipfw/sbin/ipfw/ipfw2.c ============================================================================== --- projects/ipfw/sbin/ipfw/ipfw2.c Wed Aug 13 11:11:27 2014 (r269925) +++ projects/ipfw/sbin/ipfw/ipfw2.c Wed Aug 13 12:04:45 2014 (r269926) @@ -2711,10 +2711,11 @@ struct tidx { uint32_t count; uint32_t size; uint16_t counter; + uint8_t set; }; static uint16_t -pack_table(struct tidx *tstate, char *name, uint32_t set) +pack_table(struct tidx *tstate, char *name) { int i; ipfw_obj_ntlv *ntlv; @@ -2725,7 +2726,7 @@ pack_table(struct tidx *tstate, char *na for (i = 0; i < tstate->count; i++) { if (strcmp(tstate->idx[i].name, name) != 0) continue; - if (tstate->idx[i].set != set) + if (tstate->idx[i].set != tstate->set) continue; return (tstate->idx[i].idx); @@ -2744,7 +2745,7 @@ pack_table(struct tidx *tstate, char *na strlcpy(ntlv->name, name, sizeof(ntlv->name)); ntlv->head.type = IPFW_TLV_TBL_NAME; ntlv->head.length = sizeof(ipfw_obj_ntlv); - ntlv->set = set; + ntlv->set = tstate->set; ntlv->idx = ++tstate->counter; tstate->count++; @@ -2765,7 +2766,7 @@ fill_table(ipfw_insn *cmd, char *av, uin if (p) *p++ = '\0'; - if ((uidx = pack_table(tstate, av + 6, 0)) == 0) + if ((uidx = pack_table(tstate, av + 6)) == 0) errx(EX_DATAERR, "Invalid table name: %s", av + 6); cmd->opcode = opcode; @@ -3091,7 +3092,7 @@ fill_iface(ipfw_insn_if *cmd, char *arg, p = strchr(arg + 6, ','); if (p) *p++ = '\0'; - if ((uidx = pack_table(tstate, arg + 6, 0)) == 0) + if ((uidx = pack_table(tstate, arg + 6)) == 0) errx(EX_DATAERR, "Invalid table name: %s", arg + 6); cmd->name[0] = '\1'; /* Special value indicating table */ @@ -3494,6 +3495,7 @@ compile_rule(char *av[], uint32_t *rbuf, if (set < 0 || set > RESVD_SET) errx(EX_DATAERR, "illegal set %s", av[1]); rule->set = set; + tstate->set = set; av += 2; } @@ -4496,7 +4498,7 @@ read_options: __PAST_END(c->d, 1) = j; // i converted to option av++; - if ((j = pack_table(tstate, *av, 0)) == 0) + if ((j = pack_table(tstate, *av)) == 0) errx(EX_DATAERR, "Invalid table name: %s", *av); cmd->arg1 = j; Modified: projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c ============================================================================== --- projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c Wed Aug 13 11:11:27 2014 (r269925) +++ projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c Wed Aug 13 12:04:45 2014 (r269926) @@ -2657,7 +2657,13 @@ find_table(struct namedobj_instance *ni, if (ntlv == NULL) return (NULL); name = ntlv->name; - set = ntlv->set; + + /* + * Use set provided by @ti instead of @ntlv one. + * This is needed due to different sets behavior + * controlled by V_fw_tables_sets. + */ + set = ti->set; } else { snprintf(bname, sizeof(bname), "%d", ti->uidx); name = bname;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201408131204.s7DC4jxN086801>