ntlv
ipfw_obj_ntlv *ntlv;
ntlv = &tstate->idx[i];
memset(ntlv, 0, sizeof(ipfw_obj_ntlv));
strlcpy(ntlv->name, name, sizeof(ntlv->name));
ntlv->head.type = otype;
ntlv->head.length = sizeof(ipfw_obj_ntlv);
ntlv->set = tstate->set;
ntlv->idx = ++tstate->counter;
return (ntlv->idx);
const ipfw_obj_ntlv *ntlv;
ntlv = (const ipfw_obj_ntlv *)v;
if (key.uidx < ntlv->idx)
else if (key.uidx > ntlv->idx)
if (key.type < ntlv->head.type)
else if (key.type > ntlv->head.type)
ipfw_obj_ntlv *ntlv;
ntlv = bsearch(&key, (ctlv + 1), ctlv->count, ctlv->objsize,
if (ntlv != NULL)
return (ntlv->name);
lookup_eaction_name(ipfw_obj_ntlv *ntlv, int cnt, uint16_t type)
if (ntlv[i].head.type != IPFW_TLV_EACTION)
if (IPFW_TLV_EACTION_NAME(ntlv[i].idx) != type)
name = ntlv[i].name;
ipfw_obj_ntlv *ntlv;
ntlv = (ipfw_obj_ntlv *)(olh + 1);
name = match_value(otypes, ntlv->head.type);
ntlv->head.type);
ntlv->idx, ntlv->head.type, ntlv->name);
ntlv->idx, name, ntlv->name);
ntlv++;
void table_fill_ntlv(struct _ipfw_obj_ntlv *ntlv, const char *name,
ntlv->set = 0; /* not yet */
snprintf(ntlv->name, sizeof(ntlv->name), "%d", i);
nat_fill_ntlv(&oh.ntlv, i);
oh->ntlv.head.length = sizeof(oh->ntlv);
strlcpy(oh->ntlv.name, name, sizeof(oh->ntlv.name));
oh->ntlv.head.length = sizeof(oh->ntlv);
snprintf(oh->ntlv.name, sizeof(oh->ntlv.name), "%d", i);
nat_fill_ntlv(ipfw_obj_ntlv *ntlv, int i)
ntlv->head.type = IPFW_TLV_EACTION_NAME(1); /* it doesn't matter */
ntlv->head.length = sizeof(ipfw_obj_ntlv);
ntlv->idx = 1;
nat64clat_fill_ntlv(ipfw_obj_ntlv *ntlv, const char *name, uint8_t set)
ntlv->head.type = IPFW_TLV_EACTION_NAME(1); /* it doesn't matter */
ntlv->head.length = sizeof(ipfw_obj_ntlv);
ntlv->idx = 1;
ntlv->set = set;
strlcpy(ntlv->name, name, sizeof(ntlv->name));
nat64clat_fill_ntlv(&oh->ntlv, name, set);
nat64clat_fill_ntlv(&oh.ntlv, name, set);
nat64clat_fill_ntlv(&oh->ntlv, name, set);
nat64clat_fill_ntlv(&oh.ntlv, name, set);
nat64lsn_fill_ntlv(&oh->ntlv, cfg->name, set);
nat64lsn_fill_ntlv(ipfw_obj_ntlv *ntlv, const char *name, uint8_t set)
ntlv->head.type = IPFW_TLV_EACTION_NAME(1); /* it doesn't matter */
ntlv->head.length = sizeof(ipfw_obj_ntlv);
ntlv->idx = 1;
ntlv->set = set;
strlcpy(ntlv->name, name, sizeof(ntlv->name));
static void nat64lsn_fill_ntlv(ipfw_obj_ntlv *ntlv, const char *name,
nat64lsn_fill_ntlv(&oh->ntlv, name, set);
nat64lsn_fill_ntlv(&oh.ntlv, name, set);
nat64lsn_fill_ntlv(&oh.ntlv, name, set);
nat64lsn_fill_ntlv(&oh->ntlv, name, set);
nat64stl_fill_ntlv(ipfw_obj_ntlv *ntlv, const char *name, uint8_t set)
ntlv->head.type = IPFW_TLV_EACTION_NAME(1); /* it doesn't matter */
ntlv->head.length = sizeof(ipfw_obj_ntlv);
ntlv->idx = 1;
ntlv->set = set;
strlcpy(ntlv->name, name, sizeof(ntlv->name));
nat64stl_fill_ntlv(&oh->ntlv, name, set);
nat64stl_fill_ntlv(&oh.ntlv, name, set);
nat64stl_fill_ntlv(&oh->ntlv, name, set);
nat64stl_fill_ntlv(&oh.ntlv, name, set);
nptv6_fill_ntlv(ipfw_obj_ntlv *ntlv, const char *name, uint8_t set)
ntlv->head.type = IPFW_TLV_EACTION_NAME(1); /* it doesn't matter */
ntlv->head.length = sizeof(ipfw_obj_ntlv);
ntlv->idx = 1;
ntlv->set = set;
strlcpy(ntlv->name, name, sizeof(ntlv->name));
nptv6_fill_ntlv(&oh.ntlv, name, set);
nptv6_fill_ntlv(&oh->ntlv, name, set);
nptv6_fill_ntlv(&oh.ntlv, name, set);
strlcpy(xi.tablename, oh->ntlv.name,
oh->ntlv.type = type;
oh->ntlv.type = type;
errx(EX_UNAVAILABLE, "Table %s not found", oh->ntlv.name);
"\"lookup\" method", oh->ntlv.name);
oh->ntlv.name);
oh->ntlv.name);
"key '%s' type", oh->ntlv.name, key);
table_fill_ntlv(&oh.ntlv, *av, set, 1);
table_fill_ntlv(ipfw_obj_ntlv *ntlv, const char *name, uint8_t set,
ntlv->head.type = IPFW_TLV_TBL_NAME;
ntlv->head.length = sizeof(ipfw_obj_ntlv);
ntlv->idx = uidx;
ntlv->set = set;
strlcpy(ntlv->name, name, sizeof(ntlv->name));
table_fill_ntlv(&oh->ntlv, i->tablename, i->set, 1);
table_fill_ntlv(&oh->ntlv, i->tablename, i->set, 1);
table_fill_ntlv((ipfw_obj_ntlv *)(oh + 1), second, oh->ntlv.set, 1);
table_fill_ntlv(&oh->ntlv, i->tablename, i->set, 1);
ipfw_obj_ntlv ntlv; /* object name tlv */
ipfw_obj_ntlv_v0 *ntlv;
count = (ctlv->head.length - sizeof(*ctlv)) / sizeof(*ntlv);
if (ctlv->count != count || ctlv->objsize != sizeof(*ntlv))
ntlv = (ipfw_obj_ntlv_v0 *)(ctlv + 1);
if (ntlv->head.length != sizeof(ipfw_obj_ntlv_v0))
error = ipfw_check_object_name_generic(ntlv->name);
if (ntlv->idx <= idx)
idx = ntlv->idx;
ntlv++;
ipfw_obj_ntlv *ntlv;
ntlv = ipfw_find_name_tlv_type(ti->tlvs, ti->tlen, ti->uidx,
if (ntlv == NULL)
name = ntlv->name;
ipfw_obj_ntlv *ntlv;
ntlv = ipfw_find_name_tlv_type(ti->tlvs, ti->tlen, ti->uidx,
if (ntlv == NULL)
name = ntlv->name;
ipfw_obj_ntlv *ntlv;
ntlv = ipfw_find_name_tlv_type(ti->tlvs, ti->tlen, ti->uidx,
if (ntlv == NULL)
EACTION_DEBUG("name %s, uidx %u, type %u", ntlv->name,
0, IPFW_TLV_EACTION, ntlv->name);
if (oh->ntlv.head.length != sizeof(oh->ntlv))
ipfw_obj_ntlv *ntlv;
if (oh->ntlv.head.length != sizeof(oh->ntlv))
ntlv = &oh->ntlv;
if (strnlen(ntlv->name, sizeof(ntlv->name)) == sizeof(ntlv->name))
ptr = lookup_nat_name(&chain->nat, ntlv->name);
if (oh->ntlv.head.length != sizeof(oh->ntlv))
if (oh->ntlv.head.length != sizeof(oh->ntlv))
ipfw_export_obj_ntlv(struct named_object *no, ipfw_obj_ntlv *ntlv)
ntlv->head.type = no->etlv;
ntlv->head.length = sizeof(*ntlv);
ntlv->idx = no->kidx;
strlcpy(ntlv->name, no->name, sizeof(ntlv->name));
ipfw_obj_ntlv *ntlv;
ntlv = (ipfw_obj_ntlv *)ipfw_get_sopt_space(sd, sizeof(*ntlv));
if (ntlv == NULL)
ipfw_export_obj_ntlv(no, ntlv);
ipfw_obj_ntlv *ntlv;
count = (ctlv->head.length - sizeof(*ctlv)) / sizeof(*ntlv);
if (ctlv->count != count || ctlv->objsize != sizeof(*ntlv))
ntlv = (ipfw_obj_ntlv *)(ctlv + 1);
if (ntlv->head.length != sizeof(ipfw_obj_ntlv))
error = ipfw_check_object_name_generic(ntlv->name);
if (ntlv->idx <= idx)
idx = ntlv->idx;
ntlv++;
ipfw_obj_ntlv *ntlv;
ntlv = (ipfw_obj_ntlv *)ipfw_get_sopt_space(sd, sizeof(*ntlv));
if (ntlv == NULL)
ipfw_export_obj_ntlv(no, ntlv);
ipfw_obj_ntlv *ntlv;
ntlv = (ipfw_obj_ntlv *)pa;
l = ntlv->head.length;
if (l != sizeof(*ntlv))
if (ntlv->idx != uidx)
if (ntlv->head.type != 0 &&
ntlv->head.type != (uint16_t)etlv)
if (ipfw_check_object_name_generic(ntlv->name) != 0)
return (ntlv);
ipfw_obj_ntlv *ntlv;
ntlv = ipfw_find_name_tlv_type(ti->tlvs, ti->tlen, ti->uidx, etlv);
if (ntlv == NULL)
name = ntlv->name;
ntlv_to_ti(&oh->ntlv, &ti_a);
ipfw_ref_table(struct ip_fw_chain *ch, ipfw_obj_ntlv *ntlv, uint32_t *kidx)
ntlv_to_ti(ntlv, &ti);
tname = oh->ntlv.name;
tname = oh->ntlv.name;
ntlv_to_ti(ipfw_obj_ntlv *ntlv, struct tid_info *ti)
ti->set = ntlv->set;
ti->uidx = ntlv->idx;
ti->tlvs = ntlv;
ti->tlen = ntlv->head.length;
ntlv_to_ti(&oh->ntlv, ti);
ipfw_obj_ntlv *ntlv;
ntlv = (ipfw_obj_ntlv *)ipfw_get_sopt_space(sd, sizeof(*ntlv));
if (ntlv == NULL)
ntlv->head.type = IPFW_TLV_TBL_NAME;
ntlv->head.length = sizeof(*ntlv);
ntlv->idx = no->kidx;
strlcpy(ntlv->name, no->name, sizeof(ntlv->name));
ipfw_obj_ntlv *ntlv;
ntlv = ipfw_find_name_tlv_type(ti->tlvs, ti->tlen, ti->uidx,
if (ntlv == NULL)
name = ntlv->name;
ipfw_obj_ntlv *ntlv;
ntlv = ipfw_find_name_tlv_type(ti->tlvs, ti->tlen, ti->uidx,
if (ntlv == NULL)
name = ntlv->name;
set = (V_fw_tables_sets == 0) ? 0 : ntlv->set;
if (oh->ntlv.head.length != sizeof(oh->ntlv))
ti.type = oh->ntlv.type;
if (oh->ntlv.head.length != sizeof(oh->ntlv))
ti.type = oh->ntlv.type;
static void ntlv_to_ti(struct _ipfw_obj_ntlv *ntlv, struct tid_info *ti);
if (ipfw_check_object_name_generic(oh->ntlv.name) != 0 ||
oh->ntlv.set >= IPFW_MAX_SETS)
cfg = nat64clat_find(ni, oh->ntlv.name, oh->ntlv.set);
cfg = nat64clat_find(ni, oh->ntlv.name, oh->ntlv.set);
if (ipfw_check_object_name_generic(oh->ntlv.name) != 0)
cfg = nat64clat_find(CHAIN_TO_SRV(ch), oh->ntlv.name, oh->ntlv.set);
cfg = nat64clat_find(CHAIN_TO_SRV(ch), oh->ntlv.name, oh->ntlv.set);
if (ipfw_check_object_name_generic(oh->ntlv.name) != 0 ||
oh->ntlv.set >= IPFW_MAX_SETS)
cfg = nat64clat_find(CHAIN_TO_SRV(ch), oh->ntlv.name, oh->ntlv.set);
i = nat64lsn_find(CHAIN_TO_SRV(ch), oh->ntlv.name, oh->ntlv.set);
if (ipfw_check_object_name_generic(oh->ntlv.name) != 0 ||
oh->ntlv.set >= IPFW_MAX_SETS)
i = nat64lsn_find(ni, oh->ntlv.name, oh->ntlv.set);
i = nat64lsn_find(ni, oh->ntlv.name, oh->ntlv.set);
i = nat64lsn_find(CHAIN_TO_SRV(ch), oh->ntlv.name, oh->ntlv.set);
if (ipfw_check_object_name_generic(oh->ntlv.name) != 0 ||
oh->ntlv.set >= IPFW_MAX_SETS)
i = nat64lsn_find(CHAIN_TO_SRV(ch), oh->ntlv.name, oh->ntlv.set);
i = nat64lsn_find(CHAIN_TO_SRV(ch), oh->ntlv.name, oh->ntlv.set);
if (ipfw_check_object_name_generic(oh->ntlv.name) != 0 ||
oh->ntlv.set >= IPFW_MAX_SETS)
cfg = nat64stl_find(ni, oh->ntlv.name, oh->ntlv.set);
cfg = nat64stl_find(ni, oh->ntlv.name, oh->ntlv.set);
if (ipfw_check_object_name_generic(oh->ntlv.name) != 0)
cfg = nat64stl_find(CHAIN_TO_SRV(ch), oh->ntlv.name, oh->ntlv.set);
cfg = nat64stl_find(CHAIN_TO_SRV(ch), oh->ntlv.name, oh->ntlv.set);
if (ipfw_check_object_name_generic(oh->ntlv.name) != 0 ||
oh->ntlv.set >= IPFW_MAX_SETS)
cfg = nat64stl_find(CHAIN_TO_SRV(ch), oh->ntlv.name, oh->ntlv.set);
if (ipfw_check_object_name_generic(oh->ntlv.name) != 0)
cfg = nptv6_find(CHAIN_TO_SRV(ch), oh->ntlv.name, oh->ntlv.set);
if (ipfw_check_object_name_generic(oh->ntlv.name) != 0 ||
oh->ntlv.set >= IPFW_MAX_SETS)
cfg = nptv6_find(CHAIN_TO_SRV(ch), oh->ntlv.name, oh->ntlv.set);
if (ipfw_check_object_name_generic(oh->ntlv.name) != 0 ||
oh->ntlv.set >= IPFW_MAX_SETS)
cfg = nptv6_find(CHAIN_TO_SRV(ch), oh->ntlv.name, oh->ntlv.set);