Rework how protocol number is tracked in rule. Save it when O_PROTO
opcode will be printed. This should solve the problem, when protocol name is not printed in `ipfw -N show`. Reported by: Claudio Eichenberger <cei at yourshop.com> MFC after: 1 week
This commit is contained in:
parent
5f9c94c592
commit
a895c1c28a
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=341799
@ -1511,6 +1511,7 @@ print_instruction(struct buf_pr *bp, const struct format_opts *fo,
|
|||||||
bprintf(bp, " %s", pe->p_name);
|
bprintf(bp, " %s", pe->p_name);
|
||||||
else
|
else
|
||||||
bprintf(bp, " %u", cmd->arg1);
|
bprintf(bp, " %u", cmd->arg1);
|
||||||
|
state->proto = cmd->arg1;
|
||||||
break;
|
break;
|
||||||
case O_MACADDR2:
|
case O_MACADDR2:
|
||||||
print_mac(bp, insntod(cmd, mac));
|
print_mac(bp, insntod(cmd, mac));
|
||||||
@ -1992,10 +1993,10 @@ print_proto(struct buf_pr *bp, struct format_opts *fo,
|
|||||||
struct show_state *state)
|
struct show_state *state)
|
||||||
{
|
{
|
||||||
ipfw_insn *cmd;
|
ipfw_insn *cmd;
|
||||||
int l, proto, ip4, ip6, tmp;
|
int l, proto, ip4, ip6;
|
||||||
|
|
||||||
/* Count all O_PROTO, O_IP4, O_IP6 instructions. */
|
/* Count all O_PROTO, O_IP4, O_IP6 instructions. */
|
||||||
proto = tmp = ip4 = ip6 = 0;
|
proto = ip4 = ip6 = 0;
|
||||||
for (l = state->rule->act_ofs, cmd = state->rule->cmd;
|
for (l = state->rule->act_ofs, cmd = state->rule->cmd;
|
||||||
l > 0; l -= F_LEN(cmd), cmd += F_LEN(cmd)) {
|
l > 0; l -= F_LEN(cmd), cmd += F_LEN(cmd)) {
|
||||||
switch (cmd->opcode) {
|
switch (cmd->opcode) {
|
||||||
@ -2031,18 +2032,13 @@ print_proto(struct buf_pr *bp, struct format_opts *fo,
|
|||||||
if (cmd == NULL || (cmd->len & F_OR))
|
if (cmd == NULL || (cmd->len & F_OR))
|
||||||
for (l = proto; l > 0; l--) {
|
for (l = proto; l > 0; l--) {
|
||||||
cmd = print_opcode(bp, fo, state, O_PROTO);
|
cmd = print_opcode(bp, fo, state, O_PROTO);
|
||||||
if (cmd != NULL && (cmd->len & F_OR) == 0)
|
if (cmd == NULL || (cmd->len & F_OR) == 0)
|
||||||
break;
|
break;
|
||||||
tmp = cmd->arg1;
|
|
||||||
}
|
}
|
||||||
/* Initialize proto, it is used by print_newports() */
|
/* Initialize proto, it is used by print_newports() */
|
||||||
if (tmp != 0)
|
|
||||||
state->proto = tmp;
|
|
||||||
else if (ip6 != 0)
|
|
||||||
state->proto = IPPROTO_IPV6;
|
|
||||||
else
|
|
||||||
state->proto = IPPROTO_IP;
|
|
||||||
state->flags |= HAVE_PROTO;
|
state->flags |= HAVE_PROTO;
|
||||||
|
if (state->proto == 0 && ip6 != 0)
|
||||||
|
state->proto = IPPROTO_IPV6;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
Loading…
Reference in New Issue
Block a user