|| (nexthdr == IPPROTO_DSTOPTS)) {
/* These headers, while different, have the fields we care about
* in the same location and with the same interpretation. */
- const struct ip6_ext *ext_hdr = (struct ip6_ext *)packet->data;
+ const struct ip6_ext *ext_hdr = packet->data;
nexthdr = ext_hdr->ip6e_nxt;
if (!ofpbuf_try_pull(packet, (ext_hdr->ip6e_len + 1) * 8)) {
return EINVAL;
* we care about are in the same location as the generic
* option header--only the header length is calculated
* differently. */
- const struct ip6_ext *ext_hdr = (struct ip6_ext *)packet->data;
+ const struct ip6_ext *ext_hdr = packet->data;
nexthdr = ext_hdr->ip6e_nxt;
if (!ofpbuf_try_pull(packet, (ext_hdr->ip6e_len + 2) * 4)) {
return EINVAL;
}
} else if (nexthdr == IPPROTO_FRAGMENT) {
- const struct ip6_frag *frag_hdr = (struct ip6_frag *)packet->data;
+ const struct ip6_frag *frag_hdr = packet->data;
nexthdr = frag_hdr->ip6f_nxt;
if (!ofpbuf_try_pull(packet, sizeof *frag_hdr)) {
BUILD_ASSERT_DECL(FLOW_WC_SEQ == 14);
fmd->tun_id = flow->tun_id;
- fmd->tun_id_mask = htonll(UINT64_MAX);
-
fmd->metadata = flow->metadata;
- fmd->metadata_mask = htonll(UINT64_MAX);
-
memcpy(fmd->regs, flow->regs, sizeof fmd->regs);
- memset(fmd->reg_masks, 0xff, sizeof fmd->reg_masks);
-
fmd->in_port = flow->in_port;
}
dst->vlan_tci_mask = src1->vlan_tci_mask & src2->vlan_tci_mask;
dst->tp_src_mask = src1->tp_src_mask & src2->tp_src_mask;
dst->tp_dst_mask = src1->tp_dst_mask & src2->tp_dst_mask;
+ dst->nw_frag_mask = src1->nw_frag_mask & src2->nw_frag_mask;
eth_addr_bitand(src1->dl_src_mask, src2->dl_src_mask, dst->dl_src_mask);
eth_addr_bitand(src1->dl_dst_mask, src2->dl_dst_mask, dst->dl_dst_mask);
eth_addr_bitand(src1->arp_sha_mask, src2->arp_sha_mask, dst->arp_sha_mask);
|| !ipv6_addr_equals(&a->nd_target_mask, &b->nd_target_mask)
|| a->tp_src_mask != b->tp_src_mask
|| a->tp_dst_mask != b->tp_dst_mask
+ || a->nw_frag_mask != b->nw_frag_mask
|| !eth_addr_equals(a->dl_src_mask, b->dl_src_mask)
|| !eth_addr_equals(a->dl_dst_mask, b->dl_dst_mask)
|| !eth_addr_equals(a->arp_sha_mask, b->arp_sha_mask)
|| (a->vlan_tci_mask & b->vlan_tci_mask) != b->vlan_tci_mask
|| (a->metadata_mask & b->metadata_mask) != b->metadata_mask
|| (a->tp_src_mask & b->tp_src_mask) != b->tp_src_mask
- || (a->tp_dst_mask & b->tp_dst_mask) != b->tp_dst_mask);
+ || (a->tp_dst_mask & b->tp_dst_mask) != b->tp_dst_mask
+ || (a->nw_frag_mask & b->nw_frag_mask) != b->nw_frag_mask);
}
/* Sets the wildcard mask for register 'idx' in 'wc' to 'mask'.
b->l4 = icmp = ofpbuf_put_zeros(b, sizeof *icmp);
icmp->icmp_type = ntohs(flow->tp_src);
icmp->icmp_code = ntohs(flow->tp_dst);
+ icmp->icmp_csum = csum(icmp, ICMP_HEADER_LEN);
}
}