question related to /sbin/ipfw/ipfw2.c
Ganbold
ganbold at micom.mng.net
Tue Sep 23 08:26:07 UTC 2008
Hi,
What does following part of src/sbin/ipfw/ipfw2.c code?
...
static void
fill_ip(ipfw_insn_ip *cmd, char *av)
{
int len = 0;
uint32_t *d = ((ipfw_insn_u32 *)cmd)->d;
cmd->o.len &= ~F_LEN_MASK; /* zero len */
-----------------------------------
if (strncmp(av, "table(", 6) == 0) {
char *p = strchr(av + 6, ',');
if (p)
*p++ = '\0';
cmd->o.opcode = O_IP_DST_LOOKUP;
cmd->o.arg1 = strtoul(av + 6, NULL, 0);
if (p) {
cmd->o.len |= F_INSN_SIZE(ipfw_insn_u32);
d[0] = strtoul(p, NULL, 0);
} else
cmd->o.len |= F_INSN_SIZE(ipfw_insn);
return;
}
-----------------------------------
Specially, what does following code?
...
cmd->o.opcode = O_IP_DST_LOOKUP;
cmd->o.arg1 = strtoul(av + 6, NULL, 0);
if (p) {
cmd->o.len |= F_INSN_SIZE(ipfw_insn_u32);
d[0] = strtoul(p, NULL, 0);
} else
cmd->o.len |= F_INSN_SIZE(ipfw_insn);
...
thanks,
Ganbold
--
This is clearly another case of too many mad scientists, and not enough
hunchbacks.
More information about the freebsd-ipfw
mailing list