o Make ipfw(8) show rules with mac/mac-type options correctly.
Before: $ ipfw -n add 100 count icmp from any to any mac-type 0x01 00100 count icmp 0x0001 $ ipfw -n add 100 count icmp from any to any mac any any 00100 count icmp MAC any any any After: $ ipfw -n add 100 count icmp from any to any mac-type 0x01 00100 count icmp from any to any mac-type 0x0001 $ ipfw -n add 100 count icmp from any to any mac any any 00100 count icmp from any to any MAC any any PR: bin/112244 Submitted by: Andrey V. Elsukov MFC after: 1 month
This commit is contained in:
parent
15fdb055e5
commit
5b41efdd54
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=169139
@ -1400,10 +1400,8 @@ print_ext6hdr( ipfw_insn *cmd )
|
|||||||
#define HAVE_PROTO 0x0001
|
#define HAVE_PROTO 0x0001
|
||||||
#define HAVE_SRCIP 0x0002
|
#define HAVE_SRCIP 0x0002
|
||||||
#define HAVE_DSTIP 0x0004
|
#define HAVE_DSTIP 0x0004
|
||||||
#define HAVE_MAC 0x0008
|
#define HAVE_PROTO4 0x0008
|
||||||
#define HAVE_MACTYPE 0x0010
|
#define HAVE_PROTO6 0x0010
|
||||||
#define HAVE_PROTO4 0x0040
|
|
||||||
#define HAVE_PROTO6 0x0080
|
|
||||||
#define HAVE_OPTIONS 0x8000
|
#define HAVE_OPTIONS 0x8000
|
||||||
|
|
||||||
#define HAVE_IP (HAVE_PROTO | HAVE_SRCIP | HAVE_DSTIP)
|
#define HAVE_IP (HAVE_PROTO | HAVE_SRCIP | HAVE_DSTIP)
|
||||||
@ -1415,16 +1413,6 @@ show_prerequisites(int *flags, int want, int cmd)
|
|||||||
if ( (*flags & HAVE_IP) == HAVE_IP)
|
if ( (*flags & HAVE_IP) == HAVE_IP)
|
||||||
*flags |= HAVE_OPTIONS;
|
*flags |= HAVE_OPTIONS;
|
||||||
|
|
||||||
if ( (*flags & (HAVE_MAC|HAVE_MACTYPE|HAVE_OPTIONS)) == HAVE_MAC &&
|
|
||||||
cmd != O_MAC_TYPE) {
|
|
||||||
/*
|
|
||||||
* mac-type was optimized out by the compiler,
|
|
||||||
* restore it
|
|
||||||
*/
|
|
||||||
printf(" any");
|
|
||||||
*flags |= HAVE_MACTYPE | HAVE_OPTIONS;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if ( !(*flags & HAVE_OPTIONS)) {
|
if ( !(*flags & HAVE_OPTIONS)) {
|
||||||
if ( !(*flags & HAVE_PROTO) && (want & HAVE_PROTO))
|
if ( !(*flags & HAVE_PROTO) && (want & HAVE_PROTO))
|
||||||
if ( (*flags & HAVE_PROTO4))
|
if ( (*flags & HAVE_PROTO4))
|
||||||
@ -1680,28 +1668,6 @@ show_ipfw(struct ip_fw *rule, int pcwidth, int bcwidth)
|
|||||||
case O_PROBE_STATE:
|
case O_PROBE_STATE:
|
||||||
break; /* no need to print anything here */
|
break; /* no need to print anything here */
|
||||||
|
|
||||||
case O_MACADDR2: {
|
|
||||||
ipfw_insn_mac *m = (ipfw_insn_mac *)cmd;
|
|
||||||
|
|
||||||
if ((cmd->len & F_OR) && !or_block)
|
|
||||||
printf(" {");
|
|
||||||
if (cmd->len & F_NOT)
|
|
||||||
printf(" not");
|
|
||||||
printf(" MAC");
|
|
||||||
flags |= HAVE_MAC;
|
|
||||||
print_mac(m->addr, m->mask);
|
|
||||||
print_mac(m->addr + 6, m->mask + 6);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case O_MAC_TYPE:
|
|
||||||
if ((cmd->len & F_OR) && !or_block)
|
|
||||||
printf(" {");
|
|
||||||
print_newports((ipfw_insn_u16 *)cmd, IPPROTO_ETHERTYPE,
|
|
||||||
(flags & HAVE_OPTIONS) ? cmd->opcode : 0);
|
|
||||||
flags |= HAVE_MAC | HAVE_MACTYPE | HAVE_OPTIONS;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case O_IP_SRC:
|
case O_IP_SRC:
|
||||||
case O_IP_SRC_LOOKUP:
|
case O_IP_SRC_LOOKUP:
|
||||||
case O_IP_SRC_MASK:
|
case O_IP_SRC_MASK:
|
||||||
@ -1809,6 +1775,21 @@ show_ipfw(struct ip_fw *rule, int pcwidth, int bcwidth)
|
|||||||
if (cmd->len & F_NOT && cmd->opcode != O_IN)
|
if (cmd->len & F_NOT && cmd->opcode != O_IN)
|
||||||
printf(" not");
|
printf(" not");
|
||||||
switch(cmd->opcode) {
|
switch(cmd->opcode) {
|
||||||
|
case O_MACADDR2: {
|
||||||
|
ipfw_insn_mac *m = (ipfw_insn_mac *)cmd;
|
||||||
|
|
||||||
|
printf(" MAC");
|
||||||
|
print_mac(m->addr, m->mask);
|
||||||
|
print_mac(m->addr + 6, m->mask + 6);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case O_MAC_TYPE:
|
||||||
|
print_newports((ipfw_insn_u16 *)cmd,
|
||||||
|
IPPROTO_ETHERTYPE, cmd->opcode);
|
||||||
|
break;
|
||||||
|
|
||||||
|
|
||||||
case O_FRAG:
|
case O_FRAG:
|
||||||
printf(" frag");
|
printf(" frag");
|
||||||
break;
|
break;
|
||||||
|
Loading…
Reference in New Issue
Block a user