Date: Fri, 15 Aug 2014 12:58:32 +0000 (UTC) From: "Alexander V. Chernikov" <melifaro@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r270021 - in projects/ipfw: sbin/ipfw sys/netinet sys/netpfil/ipfw Message-ID: <201408151258.s7FCwWY4046785@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: melifaro Date: Fri Aug 15 12:58:32 2014 New Revision: 270021 URL: http://svnweb.freebsd.org/changeset/base/270021 Log: Make room for multi-type values in struct tentry. Modified: projects/ipfw/sbin/ipfw/tables.c projects/ipfw/sys/netinet/ip_fw.h projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c projects/ipfw/sys/netpfil/ipfw/ip_fw_table_algo.c Modified: projects/ipfw/sbin/ipfw/tables.c ============================================================================== --- projects/ipfw/sbin/ipfw/tables.c Fri Aug 15 11:07:08 2014 (r270020) +++ projects/ipfw/sbin/ipfw/tables.c Fri Aug 15 12:58:32 2014 (r270021) @@ -1387,15 +1387,15 @@ tentry_fill_value(ipfw_obj_header *oh, i char *p; /* Try to interpret as number first */ - tent->value = strtoul(arg, &p, 0); + tent->v.value = strtoul(arg, &p, 0); if (*p == '\0') return; if (inet_pton(AF_INET, arg, &val) == 1) { - tent->value = ntohl(val); + tent->v.value = ntohl(val); return; } /* Try hostname */ - if (lookup_host(arg, (struct in_addr *)&tent->value) == 0) + if (lookup_host(arg, (struct in_addr *)&tent->v.value) == 0) return; errx(EX_OSERR, "Unable to parse value %s", arg); #if 0 @@ -1565,7 +1565,7 @@ table_show_entry(ipfw_xtable_info *i, ip uint32_t tval; struct tflow_entry *tfe; - tval = tent->value; + tval = tent->v.value; if (co.do_value_as_ip || i->vftype == IPFW_VFTYPE_IP) { tval = htonl(tval); Modified: projects/ipfw/sys/netinet/ip_fw.h ============================================================================== --- projects/ipfw/sys/netinet/ip_fw.h Fri Aug 15 11:07:08 2014 (r270020) +++ projects/ipfw/sys/netinet/ip_fw.h Fri Aug 15 12:58:32 2014 (r270021) @@ -756,12 +756,10 @@ typedef struct _ipfw_obj_tentry { ipfw_obj_tlv head; /* TLV header */ uint8_t subtype; /* subtype (IPv4,IPv6) */ uint8_t masklen; /* mask length */ - uint16_t idx; /* Table name index */ - uint32_t value; /* value */ uint8_t result; /* request result */ uint8_t spare0; + uint16_t idx; /* Table name index */ uint16_t spare1; - uint32_t spare2; union { /* Longest field needs to be aligned by 8-byte boundary */ struct in_addr addr; /* IPv4 address */ @@ -770,6 +768,10 @@ typedef struct _ipfw_obj_tentry { char iface[IF_NAMESIZE]; /* interface name */ struct tflow_entry flow; } k; + union { + uint32_t value; /* 32-bit value */ + char storage[64]; /* Future needs */ + } v; } ipfw_obj_tentry; #define IPFW_TF_UPDATE 0x01 /* Update record if exists */ /* Container TLV */ Modified: projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c ============================================================================== --- projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c Fri Aug 15 11:07:08 2014 (r270020) +++ projects/ipfw/sys/netpfil/ipfw/ip_fw_table.c Fri Aug 15 12:58:32 2014 (r270021) @@ -888,7 +888,7 @@ ipfw_manage_table_ent_v1(struct ip_fw_ch ptei->masklen = ptent->masklen; if (ptent->head.flags & IPFW_TF_UPDATE) ptei->flags |= TEI_FLAGS_UPDATE; - ptei->value = ptent->value; + ptei->value = ptent->v.value; } error = (oh->opheader.opcode == IP_FW_TABLE_XADD) ? @@ -2244,7 +2244,7 @@ dump_table_entry(void *e, void *arg) ent->addr = da->tent.k.addr.s_addr; ent->masklen = da->tent.masklen; - ent->value = da->tent.value; + ent->value = da->tent.v.value; return (0); } @@ -2345,7 +2345,7 @@ dump_table_xentry(void *e, void *arg) /* Convert current format to previous one */ xent->masklen = tent->masklen; - xent->value = tent->value; + xent->value = tent->v.value; /* Apply some hacks */ if (tc->no.type == IPFW_TABLE_ADDR && tent->subtype == AF_INET) { xent->k.addr6.s6_addr32[3] = tent->k.addr.s_addr; Modified: projects/ipfw/sys/netpfil/ipfw/ip_fw_table_algo.c ============================================================================== --- projects/ipfw/sys/netpfil/ipfw/ip_fw_table_algo.c Fri Aug 15 11:07:08 2014 (r270020) +++ projects/ipfw/sys/netpfil/ipfw/ip_fw_table_algo.c Fri Aug 15 12:58:32 2014 (r270021) @@ -482,14 +482,14 @@ ta_dump_radix_tentry(void *ta_state, str tent->k.addr.s_addr = n->addr.sin_addr.s_addr; tent->masklen = n->masklen; tent->subtype = AF_INET; - tent->value = n->value; + tent->v.value = n->value; #ifdef INET6 } else { xn = (struct radix_addr_xentry *)e; memcpy(&tent->k, &xn->addr6.sin6_addr, sizeof(struct in6_addr)); tent->masklen = xn->masklen; tent->subtype = AF_INET6; - tent->value = xn->value; + tent->v.value = xn->value; #endif } @@ -1257,13 +1257,13 @@ ta_dump_chash_tentry(void *ta_state, str tent->k.addr.s_addr = htonl(ent->a.a4 << (32 - cfg->mask4)); tent->masklen = cfg->mask4; tent->subtype = AF_INET; - tent->value = ent->value; + tent->v.value = ent->value; #ifdef INET6 } else { memcpy(&tent->k, &ent->a.a6, sizeof(struct in6_addr)); tent->masklen = cfg->mask6; tent->subtype = AF_INET6; - tent->value = ent->value; + tent->v.value = ent->value; #endif } @@ -2354,7 +2354,7 @@ ta_dump_ifidx_tentry(void *ta_state, str tent->masklen = 8 * IF_NAMESIZE; memcpy(&tent->k, ife->no.name, IF_NAMESIZE); - tent->value = ife->value; + tent->v.value = ife->value; return (0); } @@ -2778,7 +2778,7 @@ ta_dump_numarray_tentry(void *ta_state, na = (struct numarray *)e; tent->k.key = na->number; - tent->value = na->value; + tent->v.value = na->value; return (0); } @@ -3124,7 +3124,7 @@ ta_dump_fhash_tentry(void *ta_state, str tfe->proto = ent->proto; tfe->dport = htons(ent->dport); tfe->sport = htons(ent->sport); - tent->value = ent->value; + tent->v.value = ent->value; tent->subtype = ent->af; if (ent->af == AF_INET) { @@ -3693,7 +3693,7 @@ ta_dump_kfib_tentry(void *ta_state, stru len = 0; tent->masklen = len; tent->subtype = AF_INET; - tent->value = 0; /* Do we need to put GW here? */ + tent->v.value = 0; /* Do we need to put GW here? */ #ifdef INET6 } else if (addr->sin_family == AF_INET6) { addr6 = (struct sockaddr_in6 *)addr; @@ -3706,7 +3706,7 @@ ta_dump_kfib_tentry(void *ta_state, stru len = 0; tent->masklen = len; tent->subtype = AF_INET6; - tent->value = 0; + tent->v.value = 0; #endif }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201408151258.s7FCwWY4046785>