},
{
- MFF_ICMP_TYPE, "icmp_type", NULL,
+ MFF_ICMPV4_TYPE, "icmp_type", NULL,
MF_FIELD_SIZES(u8),
MFM_NONE, FWW_TP_SRC,
MFS_DECIMAL,
- MFP_ICMP_ANY,
+ MFP_ICMPV4,
NXM_OF_ICMP_TYPE,
}, {
- MFF_ICMP_CODE, "icmp_code", NULL,
+ MFF_ICMPV4_CODE, "icmp_code", NULL,
MF_FIELD_SIZES(u8),
MFM_NONE, FWW_TP_DST,
MFS_DECIMAL,
- MFP_ICMP_ANY,
+ MFP_ICMPV4,
NXM_OF_ICMP_CODE,
+ }, {
+ MFF_ICMPV6_TYPE, "icmpv6_type", NULL,
+ MF_FIELD_SIZES(u8),
+ MFM_NONE, FWW_TP_SRC,
+ MFS_DECIMAL,
+ MFP_ICMPV6,
+ NXM_NX_ICMPV6_TYPE,
+ }, {
+ MFF_ICMPV6_CODE, "icmpv6_code", NULL,
+ MF_FIELD_SIZES(u8),
+ MFM_NONE, FWW_TP_DST,
+ MFS_DECIMAL,
+ MFP_ICMPV6,
+ NXM_NX_ICMPV6_CODE,
},
/* ## ---- ## */
case MFF_TCP_DST:
case MFF_UDP_SRC:
case MFF_UDP_DST:
- case MFF_ICMP_TYPE:
- case MFF_ICMP_CODE:
+ case MFF_ICMPV4_TYPE:
+ case MFF_ICMPV4_CODE:
+ case MFF_ICMPV6_TYPE:
+ case MFF_ICMPV6_CODE:
case MFF_ND_TARGET:
case MFF_ND_SLL:
case MFF_ND_TLL:
case MFF_TCP_DST:
case MFF_UDP_SRC:
case MFF_UDP_DST:
- case MFF_ICMP_TYPE:
- case MFF_ICMP_CODE:
+ case MFF_ICMPV4_TYPE:
+ case MFF_ICMPV4_CODE:
+ case MFF_ICMPV6_TYPE:
+ case MFF_ICMPV6_CODE:
case MFF_ND_TARGET:
case MFF_ND_SLL:
case MFF_ND_TLL:
return is_ip_any(flow) && flow->nw_proto == IPPROTO_TCP;
case MFP_UDP:
return is_ip_any(flow) && flow->nw_proto == IPPROTO_UDP;
+ case MFP_ICMPV4:
+ return is_icmpv4(flow);
case MFP_ICMPV6:
return is_icmpv6(flow);
- case MFP_ICMP_ANY:
- return is_icmpv4(flow) || is_icmpv6(flow);
case MFP_ND:
return (is_icmpv6(flow)
case MFF_TCP_DST:
case MFF_UDP_SRC:
case MFF_UDP_DST:
- case MFF_ICMP_TYPE:
- case MFF_ICMP_CODE:
+ case MFF_ICMPV4_TYPE:
+ case MFF_ICMPV4_CODE:
+ case MFF_ICMPV6_TYPE:
+ case MFF_ICMPV6_CODE:
case MFF_ND_TARGET:
case MFF_ND_SLL:
case MFF_ND_TLL:
value->be16 = flow->tp_dst;
break;
- case MFF_ICMP_TYPE:
+ case MFF_ICMPV4_TYPE:
+ case MFF_ICMPV6_TYPE:
value->u8 = ntohs(flow->tp_src);
break;
- case MFF_ICMP_CODE:
+ case MFF_ICMPV4_CODE:
+ case MFF_ICMPV6_CODE:
value->u8 = ntohs(flow->tp_dst);
break;
cls_rule_set_tp_dst(rule, value->be16);
break;
- case MFF_ICMP_TYPE:
+ case MFF_ICMPV4_TYPE:
+ case MFF_ICMPV6_TYPE:
cls_rule_set_icmp_type(rule, value->u8);
break;
- case MFF_ICMP_CODE:
+ case MFF_ICMPV4_CODE:
+ case MFF_ICMPV6_CODE:
cls_rule_set_icmp_code(rule, value->u8);
break;
case MFF_TCP_SRC:
case MFF_UDP_SRC:
- case MFF_ICMP_TYPE:
+ case MFF_ICMPV4_TYPE:
+ case MFF_ICMPV6_TYPE:
rule->wc.wildcards |= FWW_TP_SRC;
rule->flow.tp_src = htons(0);
break;
case MFF_TCP_DST:
case MFF_UDP_DST:
- case MFF_ICMP_CODE:
+ case MFF_ICMPV4_CODE:
+ case MFF_ICMPV6_CODE:
rule->wc.wildcards |= FWW_TP_DST;
rule->flow.tp_dst = htons(0);
break;
case MFF_TCP_DST:
case MFF_UDP_SRC:
case MFF_UDP_DST:
- case MFF_ICMP_TYPE:
- case MFF_ICMP_CODE:
+ case MFF_ICMPV4_TYPE:
+ case MFF_ICMPV4_CODE:
+ case MFF_ICMPV6_TYPE:
+ case MFF_ICMPV6_CODE:
case MFF_ND_TARGET:
case MFF_ND_SLL:
case MFF_ND_TLL:
case MFF_TCP_DST:
case MFF_UDP_SRC:
case MFF_UDP_DST:
- case MFF_ICMP_TYPE:
- case MFF_ICMP_CODE:
+ case MFF_ICMPV4_TYPE:
+ case MFF_ICMPV4_CODE:
+ case MFF_ICMPV6_TYPE:
+ case MFF_ICMPV6_CODE:
case MFF_ND_TARGET:
case MFF_ND_SLL:
case MFF_ND_TLL:
MFF_UDP_SRC, /* be16 (used for IPv4 or IPv6) */
MFF_UDP_DST, /* be16 (used for IPv4 or IPv6) */
- MFF_ICMP_TYPE, /* u8 (used for IPv4 or IPv6) */
- MFF_ICMP_CODE, /* u8 (used for IPv4 or IPv6) */
+ MFF_ICMPV4_TYPE, /* u8 */
+ MFF_ICMPV4_CODE, /* u8 */
+
+ MFF_ICMPV6_TYPE, /* u8 */
+ MFF_ICMPV6_CODE, /* u8 */
/* ICMPv6 Neighbor Discovery. */
MFF_ND_TARGET, /* ipv6 */
/* L2+L3 requirements. */
MFP_TCP, /* On IPv4 or IPv6. */
MFP_UDP, /* On IPv4 or IPv6. */
+ MFP_ICMPV4,
MFP_ICMPV6,
- MFP_ICMP_ANY,
/* L2+L3+L4 requirements. */
MFP_ND,
DEFINE_FIELD (OF_TCP_DST, MFF_TCP_DST, true)
DEFINE_FIELD (OF_UDP_SRC, MFF_UDP_SRC, true)
DEFINE_FIELD (OF_UDP_DST, MFF_UDP_DST, true)
-DEFINE_FIELD (OF_ICMP_TYPE, MFF_ICMP_TYPE, false)
-DEFINE_FIELD (OF_ICMP_CODE, MFF_ICMP_CODE, false)
+DEFINE_FIELD (OF_ICMP_TYPE, MFF_ICMPV4_TYPE, false)
+DEFINE_FIELD (OF_ICMP_CODE, MFF_ICMPV4_CODE, false)
DEFINE_FIELD (OF_ARP_OP, MFF_ARP_OP, false)
DEFINE_FIELD_M(OF_ARP_SPA, MFF_ARP_SPA, false)
DEFINE_FIELD_M(OF_ARP_TPA, MFF_ARP_TPA, false)
DEFINE_FIELD (NX_IP_ECN, MFF_IP_ECN, true)
DEFINE_FIELD (NX_IP_TTL, MFF_IP_TTL, true)
/* XXX should we have MFF_ICMPV4_TYPE and MFF_ICMPV6_TYPE? */
-DEFINE_FIELD (NX_ICMPV6_TYPE,MFF_ICMP_TYPE, false)
-DEFINE_FIELD (NX_ICMPV6_CODE,MFF_ICMP_CODE, false)
+DEFINE_FIELD (NX_ICMPV6_TYPE,MFF_ICMPV6_TYPE, false)
+DEFINE_FIELD (NX_ICMPV6_CODE,MFF_ICMPV6_CODE, false)
DEFINE_FIELD (NX_ND_TARGET, MFF_ND_TARGET, false)
DEFINE_FIELD (NX_ND_SLL, MFF_ND_SLL, false)
DEFINE_FIELD (NX_ND_TLL, MFF_ND_TLL, false)