Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 23 Sep 2008 13:37:52 +0400
From:      Roman Kurakin <rik@inse.ru>
To:        Ganbold <ganbold@micom.mng.net>
Cc:        Roman Kurakin <rik@FreeBSD.org>, freebsd-ipfw@freebsd.org, rizzo@iet.unipi.it, julian@elischer.org
Subject:   Re: question related to /sbin/ipfw/ipfw2.c
Message-ID:  <48D8B8F0.8020900@localhost.inse.ru>
In-Reply-To: <48D8A814.7030607@micom.mng.net>
References:  <48D8A814.7030607@micom.mng.net>

next in thread | previous in thread | raw e-mail | index | archive | help
Ganbold wrote:
> 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) {
match the beginning of the "table(entry,value)"
>        char *p = strchr(av + 6, ',');
find the ',' if any
>
>        if (p)
>            *p++ = '\0';
and replace it with '\0' eq "table(entry\0value)" so as a string it is 
now "table(entry"
and make p point to 'value', eq p = 'value' now
>        cmd->o.opcode = O_IP_DST_LOOKUP;
>        cmd->o.arg1 = strtoul(av + 6, NULL, 0);
av+6 is the "entry" string
arg1=(unsigned long)entry
>
>        if (p) {
if we have a 'value ' part
>            cmd->o.len |= F_INSN_SIZE(ipfw_insn_u32);
>            d[0] = strtoul(p, NULL, 0);
d[0] = (unsigned long)value
>        } else
>            cmd->o.len |= F_INSN_SIZE(ipfw_insn);
>        return;
>    }
Is that what you need?

rik
> -----------------------------------
>
> 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
>




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?48D8B8F0.8020900>