flow: add miniflow_pad_from_64
[cascardo/ovs.git] / lib / flow.c
1 /*
2  * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015 Nicira, Inc.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at:
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 #include <config.h>
17 #include <sys/types.h>
18 #include "flow.h"
19 #include <errno.h>
20 #include <inttypes.h>
21 #include <limits.h>
22 #include <netinet/in.h>
23 #include <netinet/icmp6.h>
24 #include <netinet/ip6.h>
25 #include <stdint.h>
26 #include <stdlib.h>
27 #include <string.h>
28 #include "byte-order.h"
29 #include "coverage.h"
30 #include "csum.h"
31 #include "dynamic-string.h"
32 #include "hash.h"
33 #include "jhash.h"
34 #include "match.h"
35 #include "dp-packet.h"
36 #include "openflow/openflow.h"
37 #include "packets.h"
38 #include "odp-util.h"
39 #include "random.h"
40 #include "unaligned.h"
41
42 COVERAGE_DEFINE(flow_extract);
43 COVERAGE_DEFINE(miniflow_malloc);
44
45 /* U64 indices for segmented flow classification. */
46 const uint8_t flow_segment_u64s[4] = {
47     FLOW_SEGMENT_1_ENDS_AT / sizeof(uint64_t),
48     FLOW_SEGMENT_2_ENDS_AT / sizeof(uint64_t),
49     FLOW_SEGMENT_3_ENDS_AT / sizeof(uint64_t),
50     FLOW_U64S
51 };
52
53 /* Asserts that field 'f1' follows immediately after 'f0' in struct flow,
54  * without any intervening padding. */
55 #define ASSERT_SEQUENTIAL(f0, f1)                       \
56     BUILD_ASSERT_DECL(offsetof(struct flow, f0)         \
57                       + MEMBER_SIZEOF(struct flow, f0)  \
58                       == offsetof(struct flow, f1))
59
60 /* Asserts that fields 'f0' and 'f1' are in the same 32-bit aligned word within
61  * struct flow. */
62 #define ASSERT_SAME_WORD(f0, f1)                        \
63     BUILD_ASSERT_DECL(offsetof(struct flow, f0) / 4     \
64                       == offsetof(struct flow, f1) / 4)
65
66 /* Asserts that 'f0' and 'f1' are both sequential and within the same 32-bit
67  * aligned word in struct flow. */
68 #define ASSERT_SEQUENTIAL_SAME_WORD(f0, f1)     \
69     ASSERT_SEQUENTIAL(f0, f1);                  \
70     ASSERT_SAME_WORD(f0, f1)
71
72 /* miniflow_extract() assumes the following to be true to optimize the
73  * extraction process. */
74 ASSERT_SEQUENTIAL_SAME_WORD(dl_type, vlan_tci);
75
76 ASSERT_SEQUENTIAL_SAME_WORD(nw_frag, nw_tos);
77 ASSERT_SEQUENTIAL_SAME_WORD(nw_tos, nw_ttl);
78 ASSERT_SEQUENTIAL_SAME_WORD(nw_ttl, nw_proto);
79
80 /* TCP flags in the middle of a BE64, zeroes in the other half. */
81 BUILD_ASSERT_DECL(offsetof(struct flow, tcp_flags) % 8 == 4);
82
83 #if WORDS_BIGENDIAN
84 #define TCP_FLAGS_BE32(tcp_ctl) ((OVS_FORCE ovs_be32)TCP_FLAGS_BE16(tcp_ctl) \
85                                  << 16)
86 #else
87 #define TCP_FLAGS_BE32(tcp_ctl) ((OVS_FORCE ovs_be32)TCP_FLAGS_BE16(tcp_ctl))
88 #endif
89
90 ASSERT_SEQUENTIAL_SAME_WORD(tp_src, tp_dst);
91
92 /* Removes 'size' bytes from the head end of '*datap', of size '*sizep', which
93  * must contain at least 'size' bytes of data.  Returns the first byte of data
94  * removed. */
95 static inline const void *
96 data_pull(const void **datap, size_t *sizep, size_t size)
97 {
98     const char *data = *datap;
99     *datap = data + size;
100     *sizep -= size;
101     return data;
102 }
103
104 /* If '*datap' has at least 'size' bytes of data, removes that many bytes from
105  * the head end of '*datap' and returns the first byte removed.  Otherwise,
106  * returns a null pointer without modifying '*datap'. */
107 static inline const void *
108 data_try_pull(const void **datap, size_t *sizep, size_t size)
109 {
110     return OVS_LIKELY(*sizep >= size) ? data_pull(datap, sizep, size) : NULL;
111 }
112
113 /* Context for pushing data to a miniflow. */
114 struct mf_ctx {
115     struct flowmap map;
116     uint64_t *data;
117     uint64_t * const end;
118 };
119
120 /* miniflow_push_* macros allow filling in a miniflow data values in order.
121  * Assertions are needed only when the layout of the struct flow is modified.
122  * 'ofs' is a compile-time constant, which allows most of the code be optimized
123  * away.  Some GCC versions gave warnings on ALWAYS_INLINE, so these are
124  * defined as macros. */
125
126 #if (FLOW_WC_SEQ != 35)
127 #define MINIFLOW_ASSERT(X) ovs_assert(X)
128 BUILD_MESSAGE("FLOW_WC_SEQ changed: miniflow_extract() will have runtime "
129                "assertions enabled. Consider updating FLOW_WC_SEQ after "
130                "testing")
131 #else
132 #define MINIFLOW_ASSERT(X)
133 #endif
134
135 /* True if 'IDX' and higher bits are not set. */
136 #define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
137 {                                                                       \
138     MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
139                       (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
140     for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
141         MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
142     }                                                                   \
143 }
144
145 #define miniflow_set_map(MF, OFS)            \
146     {                                        \
147     ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
148     flowmap_set(&MF.map, (OFS), 1);          \
149 }
150
151 #define miniflow_assert_in_map(MF, OFS)              \
152     MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
153     ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
154
155 #define miniflow_push_uint64_(MF, OFS, VALUE)              \
156 {                                                          \
157     MINIFLOW_ASSERT(MF.data < MF.end && (OFS) % 8 == 0);   \
158     *MF.data++ = VALUE;                                    \
159     miniflow_set_map(MF, OFS / 8);                         \
160 }
161
162 #define miniflow_push_be64_(MF, OFS, VALUE)                     \
163     miniflow_push_uint64_(MF, OFS, (OVS_FORCE uint64_t)(VALUE))
164
165 #define miniflow_push_uint32_(MF, OFS, VALUE)   \
166     {                                           \
167     MINIFLOW_ASSERT(MF.data < MF.end);          \
168                                                 \
169     if ((OFS) % 8 == 0) {                       \
170         miniflow_set_map(MF, OFS / 8);          \
171         *(uint32_t *)MF.data = VALUE;           \
172     } else if ((OFS) % 8 == 4) {                \
173         miniflow_assert_in_map(MF, OFS / 8);    \
174         *((uint32_t *)MF.data + 1) = VALUE;     \
175         MF.data++;                              \
176     }                                           \
177 }
178
179 #define miniflow_push_be32_(MF, OFS, VALUE)                     \
180     miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
181
182 #define miniflow_push_uint16_(MF, OFS, VALUE)   \
183 {                                               \
184     MINIFLOW_ASSERT(MF.data < MF.end);          \
185                                                 \
186     if ((OFS) % 8 == 0) {                       \
187         miniflow_set_map(MF, OFS / 8);          \
188         *(uint16_t *)MF.data = VALUE;           \
189     } else if ((OFS) % 8 == 2) {                \
190         miniflow_assert_in_map(MF, OFS / 8);    \
191         *((uint16_t *)MF.data + 1) = VALUE;     \
192     } else if ((OFS) % 8 == 4) {                \
193         miniflow_assert_in_map(MF, OFS / 8);    \
194         *((uint16_t *)MF.data + 2) = VALUE;     \
195     } else if ((OFS) % 8 == 6) {                \
196         miniflow_assert_in_map(MF, OFS / 8);    \
197         *((uint16_t *)MF.data + 3) = VALUE;     \
198         MF.data++;                              \
199     }                                           \
200 }
201
202 #define miniflow_push_uint8_(MF, OFS, VALUE)            \
203 {                                                       \
204     MINIFLOW_ASSERT(MF.data < MF.end);                  \
205                                                         \
206     if ((OFS) % 8 == 0) {                               \
207         miniflow_set_map(MF, OFS / 8);                  \
208         *(uint8_t *)MF.data = VALUE;                    \
209     } else if ((OFS) % 8 == 7) {                        \
210         miniflow_assert_in_map(MF, OFS / 8);            \
211         *((uint8_t *)MF.data + 7) = VALUE;              \
212         MF.data++;                                      \
213     } else {                                            \
214         miniflow_assert_in_map(MF, OFS / 8);            \
215         *((uint8_t *)MF.data + ((OFS) % 8)) = VALUE;    \
216     }                                                   \
217 }
218
219 #define miniflow_pad_to_64_(MF, OFS)                            \
220 {                                                               \
221     MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
222     miniflow_assert_in_map(MF, OFS / 8);                        \
223                                                                 \
224     memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
225     MF.data++;                                                  \
226 }
227
228 #define miniflow_pad_from_64_(MF, OFS)                          \
229 {                                                               \
230     MINIFLOW_ASSERT(MF.data < MF.end);                          \
231                                                                 \
232     MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
233     miniflow_set_map(MF, OFS / 8);                              \
234                                                                 \
235     memset((uint8_t *)MF.data, 0, (OFS) % 8);                   \
236 }
237
238 #define miniflow_push_be16_(MF, OFS, VALUE)                     \
239     miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
240
241 #define miniflow_push_be8_(MF, OFS, VALUE)                     \
242     miniflow_push_uint8_(MF, OFS, (OVS_FORCE uint8_t)VALUE);
243
244 #define miniflow_set_maps(MF, OFS, N_WORDS)                     \
245 {                                                               \
246     size_t ofs = (OFS);                                         \
247     size_t n_words = (N_WORDS);                                 \
248                                                                 \
249     MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
250     ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
251     flowmap_set(&MF.map, ofs, n_words);                         \
252 }
253
254 /* Data at 'valuep' may be unaligned. */
255 #define miniflow_push_words_(MF, OFS, VALUEP, N_WORDS)          \
256 {                                                               \
257     MINIFLOW_ASSERT((OFS) % 8 == 0);                            \
258     miniflow_set_maps(MF, (OFS) / 8, (N_WORDS));                \
259     memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof *MF.data);     \
260     MF.data += (N_WORDS);                                       \
261 }
262
263 /* Push 32-bit words padded to 64-bits. */
264 #define miniflow_push_words_32_(MF, OFS, VALUEP, N_WORDS)               \
265 {                                                                       \
266     miniflow_set_maps(MF, (OFS) / 8, DIV_ROUND_UP(N_WORDS, 2));         \
267     memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof(uint32_t));            \
268     MF.data += DIV_ROUND_UP(N_WORDS, 2);                                \
269     if ((N_WORDS) & 1) {                                                \
270         *((uint32_t *)MF.data - 1) = 0;                                 \
271     }                                                                   \
272 }
273
274 /* Data at 'valuep' may be unaligned. */
275 /* MACs start 64-aligned, and must be followed by other data or padding. */
276 #define miniflow_push_macs_(MF, OFS, VALUEP)                    \
277 {                                                               \
278     miniflow_set_maps(MF, (OFS) / 8, 2);                        \
279     memcpy(MF.data, (VALUEP), 2 * ETH_ADDR_LEN);                \
280     MF.data += 1;                   /* First word only. */      \
281 }
282
283 #define miniflow_push_uint32(MF, FIELD, VALUE)                      \
284     miniflow_push_uint32_(MF, offsetof(struct flow, FIELD), VALUE)
285
286 #define miniflow_push_be32(MF, FIELD, VALUE)                        \
287     miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
288
289 #define miniflow_push_uint16(MF, FIELD, VALUE)                      \
290     miniflow_push_uint16_(MF, offsetof(struct flow, FIELD), VALUE)
291
292 #define miniflow_push_be16(MF, FIELD, VALUE)                        \
293     miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
294
295 #define miniflow_push_uint8(MF, FIELD, VALUE)                      \
296     miniflow_push_uint8_(MF, offsetof(struct flow, FIELD), VALUE)
297
298 #define miniflow_pad_to_64(MF, FIELD)                       \
299     miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
300
301 #define miniflow_pad_from_64(MF, FIELD)                       \
302     miniflow_pad_from_64_(MF, offsetof(struct flow, FIELD))
303
304 #define miniflow_push_words(MF, FIELD, VALUEP, N_WORDS)                 \
305     miniflow_push_words_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
306
307 #define miniflow_push_words_32(MF, FIELD, VALUEP, N_WORDS)              \
308     miniflow_push_words_32_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
309
310 #define miniflow_push_macs(MF, FIELD, VALUEP)                       \
311     miniflow_push_macs_(MF, offsetof(struct flow, FIELD), VALUEP)
312
313 /* Pulls the MPLS headers at '*datap' and returns the count of them. */
314 static inline int
315 parse_mpls(const void **datap, size_t *sizep)
316 {
317     const struct mpls_hdr *mh;
318     int count = 0;
319
320     while ((mh = data_try_pull(datap, sizep, sizeof *mh))) {
321         count++;
322         if (mh->mpls_lse.lo & htons(1 << MPLS_BOS_SHIFT)) {
323             break;
324         }
325     }
326     return MIN(count, FLOW_MAX_MPLS_LABELS);
327 }
328
329 static inline ovs_be16
330 parse_vlan(const void **datap, size_t *sizep)
331 {
332     const struct eth_header *eth = *datap;
333
334     struct qtag_prefix {
335         ovs_be16 eth_type;      /* ETH_TYPE_VLAN */
336         ovs_be16 tci;
337     };
338
339     data_pull(datap, sizep, ETH_ADDR_LEN * 2);
340
341     if (eth->eth_type == htons(ETH_TYPE_VLAN)) {
342         if (OVS_LIKELY(*sizep
343                        >= sizeof(struct qtag_prefix) + sizeof(ovs_be16))) {
344             const struct qtag_prefix *qp = data_pull(datap, sizep, sizeof *qp);
345             return qp->tci | htons(VLAN_CFI);
346         }
347     }
348     return 0;
349 }
350
351 static inline ovs_be16
352 parse_ethertype(const void **datap, size_t *sizep)
353 {
354     const struct llc_snap_header *llc;
355     ovs_be16 proto;
356
357     proto = *(ovs_be16 *) data_pull(datap, sizep, sizeof proto);
358     if (OVS_LIKELY(ntohs(proto) >= ETH_TYPE_MIN)) {
359         return proto;
360     }
361
362     if (OVS_UNLIKELY(*sizep < sizeof *llc)) {
363         return htons(FLOW_DL_TYPE_NONE);
364     }
365
366     llc = *datap;
367     if (OVS_UNLIKELY(llc->llc.llc_dsap != LLC_DSAP_SNAP
368                      || llc->llc.llc_ssap != LLC_SSAP_SNAP
369                      || llc->llc.llc_cntl != LLC_CNTL_SNAP
370                      || memcmp(llc->snap.snap_org, SNAP_ORG_ETHERNET,
371                                sizeof llc->snap.snap_org))) {
372         return htons(FLOW_DL_TYPE_NONE);
373     }
374
375     data_pull(datap, sizep, sizeof *llc);
376
377     if (OVS_LIKELY(ntohs(llc->snap.snap_type) >= ETH_TYPE_MIN)) {
378         return llc->snap.snap_type;
379     }
380
381     return htons(FLOW_DL_TYPE_NONE);
382 }
383
384 static inline void
385 parse_icmpv6(const void **datap, size_t *sizep, const struct icmp6_hdr *icmp,
386              const struct in6_addr **nd_target,
387              struct eth_addr arp_buf[2])
388 {
389     if (icmp->icmp6_code == 0 &&
390         (icmp->icmp6_type == ND_NEIGHBOR_SOLICIT ||
391          icmp->icmp6_type == ND_NEIGHBOR_ADVERT)) {
392
393         *nd_target = data_try_pull(datap, sizep, sizeof **nd_target);
394         if (OVS_UNLIKELY(!*nd_target)) {
395             return;
396         }
397
398         while (*sizep >= 8) {
399             /* The minimum size of an option is 8 bytes, which also is
400              * the size of Ethernet link-layer options. */
401             const struct ovs_nd_opt *nd_opt = *datap;
402             int opt_len = nd_opt->nd_opt_len * ND_OPT_LEN;
403
404             if (!opt_len || opt_len > *sizep) {
405                 return;
406             }
407
408             /* Store the link layer address if the appropriate option is
409              * provided.  It is considered an error if the same link
410              * layer option is specified twice. */
411             if (nd_opt->nd_opt_type == ND_OPT_SOURCE_LINKADDR
412                 && opt_len == 8) {
413                 if (OVS_LIKELY(eth_addr_is_zero(arp_buf[0]))) {
414                     arp_buf[0] = nd_opt->nd_opt_mac;
415                 } else {
416                     goto invalid;
417                 }
418             } else if (nd_opt->nd_opt_type == ND_OPT_TARGET_LINKADDR
419                        && opt_len == 8) {
420                 if (OVS_LIKELY(eth_addr_is_zero(arp_buf[1]))) {
421                     arp_buf[1] = nd_opt->nd_opt_mac;
422                 } else {
423                     goto invalid;
424                 }
425             }
426
427             if (OVS_UNLIKELY(!data_try_pull(datap, sizep, opt_len))) {
428                 return;
429             }
430         }
431     }
432
433     return;
434
435 invalid:
436     *nd_target = NULL;
437     arp_buf[0] = eth_addr_zero;
438     arp_buf[1] = eth_addr_zero;
439 }
440
441 /* Initializes 'flow' members from 'packet' and 'md'
442  *
443  * Initializes 'packet' header l2 pointer to the start of the Ethernet
444  * header, and the layer offsets as follows:
445  *
446  *    - packet->l2_5_ofs to the start of the MPLS shim header, or UINT16_MAX
447  *      when there is no MPLS shim header.
448  *
449  *    - packet->l3_ofs to just past the Ethernet header, or just past the
450  *      vlan_header if one is present, to the first byte of the payload of the
451  *      Ethernet frame.  UINT16_MAX if the frame is too short to contain an
452  *      Ethernet header.
453  *
454  *    - packet->l4_ofs to just past the IPv4 header, if one is present and
455  *      has at least the content used for the fields of interest for the flow,
456  *      otherwise UINT16_MAX.
457  */
458 void
459 flow_extract(struct dp_packet *packet, struct flow *flow)
460 {
461     struct {
462         struct miniflow mf;
463         uint64_t buf[FLOW_U64S];
464     } m;
465
466     COVERAGE_INC(flow_extract);
467
468     miniflow_extract(packet, &m.mf);
469     miniflow_expand(&m.mf, flow);
470 }
471
472 /* Caller is responsible for initializing 'dst' with enough storage for
473  * FLOW_U64S * 8 bytes. */
474 void
475 miniflow_extract(struct dp_packet *packet, struct miniflow *dst)
476 {
477     const struct pkt_metadata *md = &packet->md;
478     const void *data = dp_packet_data(packet);
479     size_t size = dp_packet_size(packet);
480     uint64_t *values = miniflow_values(dst);
481     struct mf_ctx mf = { FLOWMAP_EMPTY_INITIALIZER, values,
482                          values + FLOW_U64S };
483     const char *l2;
484     ovs_be16 dl_type;
485     uint8_t nw_frag, nw_tos, nw_ttl, nw_proto;
486
487     /* Metadata. */
488     if (flow_tnl_dst_is_set(&md->tunnel)) {
489         miniflow_push_words(mf, tunnel, &md->tunnel,
490                             offsetof(struct flow_tnl, metadata) /
491                             sizeof(uint64_t));
492
493         if (!(md->tunnel.flags & FLOW_TNL_F_UDPIF)) {
494             if (md->tunnel.metadata.present.map) {
495                 miniflow_push_words(mf, tunnel.metadata, &md->tunnel.metadata,
496                                     sizeof md->tunnel.metadata /
497                                     sizeof(uint64_t));
498             }
499         } else {
500             if (md->tunnel.metadata.present.len) {
501                 miniflow_push_words(mf, tunnel.metadata.present,
502                                     &md->tunnel.metadata.present, 1);
503                 miniflow_push_words(mf, tunnel.metadata.opts.gnv,
504                                     md->tunnel.metadata.opts.gnv,
505                                     DIV_ROUND_UP(md->tunnel.metadata.present.len,
506                                                  sizeof(uint64_t)));
507             }
508         }
509     }
510     if (md->skb_priority || md->pkt_mark) {
511         miniflow_push_uint32(mf, skb_priority, md->skb_priority);
512         miniflow_push_uint32(mf, pkt_mark, md->pkt_mark);
513     }
514     miniflow_push_uint32(mf, dp_hash, md->dp_hash);
515     miniflow_push_uint32(mf, in_port, odp_to_u32(md->in_port.odp_port));
516     if (md->recirc_id || md->ct_state) {
517         miniflow_push_uint32(mf, recirc_id, md->recirc_id);
518         miniflow_push_uint16(mf, ct_state, md->ct_state);
519         miniflow_push_uint16(mf, ct_zone, md->ct_zone);
520     }
521
522     if (md->ct_state) {
523         miniflow_push_uint32(mf, ct_mark, md->ct_mark);
524         miniflow_pad_to_64(mf, ct_mark);
525
526         if (!ovs_u128_is_zero(&md->ct_label)) {
527             miniflow_push_words(mf, ct_label, &md->ct_label,
528                                 sizeof md->ct_label / sizeof(uint64_t));
529         }
530     }
531
532     /* Initialize packet's layer pointer and offsets. */
533     l2 = data;
534     dp_packet_reset_offsets(packet);
535
536     /* Must have full Ethernet header to proceed. */
537     if (OVS_UNLIKELY(size < sizeof(struct eth_header))) {
538         goto out;
539     } else {
540         ovs_be16 vlan_tci;
541
542         /* Link layer. */
543         ASSERT_SEQUENTIAL(dl_dst, dl_src);
544         miniflow_push_macs(mf, dl_dst, data);
545         /* dl_type, vlan_tci. */
546         vlan_tci = parse_vlan(&data, &size);
547         dl_type = parse_ethertype(&data, &size);
548         miniflow_push_be16(mf, dl_type, dl_type);
549         miniflow_push_be16(mf, vlan_tci, vlan_tci);
550     }
551
552     /* Parse mpls. */
553     if (OVS_UNLIKELY(eth_type_mpls(dl_type))) {
554         int count;
555         const void *mpls = data;
556
557         packet->l2_5_ofs = (char *)data - l2;
558         count = parse_mpls(&data, &size);
559         miniflow_push_words_32(mf, mpls_lse, mpls, count);
560     }
561
562     /* Network layer. */
563     packet->l3_ofs = (char *)data - l2;
564
565     nw_frag = 0;
566     if (OVS_LIKELY(dl_type == htons(ETH_TYPE_IP))) {
567         const struct ip_header *nh = data;
568         int ip_len;
569         uint16_t tot_len;
570
571         if (OVS_UNLIKELY(size < IP_HEADER_LEN)) {
572             goto out;
573         }
574         ip_len = IP_IHL(nh->ip_ihl_ver) * 4;
575
576         if (OVS_UNLIKELY(ip_len < IP_HEADER_LEN)) {
577             goto out;
578         }
579         if (OVS_UNLIKELY(size < ip_len)) {
580             goto out;
581         }
582         tot_len = ntohs(nh->ip_tot_len);
583         if (OVS_UNLIKELY(tot_len > size)) {
584             goto out;
585         }
586         if (OVS_UNLIKELY(size - tot_len > UINT8_MAX)) {
587             goto out;
588         }
589         dp_packet_set_l2_pad_size(packet, size - tot_len);
590         size = tot_len;   /* Never pull padding. */
591
592         /* Push both source and destination address at once. */
593         miniflow_push_words(mf, nw_src, &nh->ip_src, 1);
594
595         miniflow_push_be32(mf, ipv6_label, 0); /* Padding for IPv4. */
596
597         nw_tos = nh->ip_tos;
598         nw_ttl = nh->ip_ttl;
599         nw_proto = nh->ip_proto;
600         if (OVS_UNLIKELY(IP_IS_FRAGMENT(nh->ip_frag_off))) {
601             nw_frag = FLOW_NW_FRAG_ANY;
602             if (nh->ip_frag_off & htons(IP_FRAG_OFF_MASK)) {
603                 nw_frag |= FLOW_NW_FRAG_LATER;
604             }
605         }
606         data_pull(&data, &size, ip_len);
607     } else if (dl_type == htons(ETH_TYPE_IPV6)) {
608         const struct ovs_16aligned_ip6_hdr *nh;
609         ovs_be32 tc_flow;
610         uint16_t plen;
611
612         if (OVS_UNLIKELY(size < sizeof *nh)) {
613             goto out;
614         }
615         nh = data_pull(&data, &size, sizeof *nh);
616
617         plen = ntohs(nh->ip6_plen);
618         if (OVS_UNLIKELY(plen > size)) {
619             goto out;
620         }
621         /* Jumbo Payload option not supported yet. */
622         if (OVS_UNLIKELY(size - plen > UINT8_MAX)) {
623             goto out;
624         }
625         dp_packet_set_l2_pad_size(packet, size - plen);
626         size = plen;   /* Never pull padding. */
627
628         miniflow_push_words(mf, ipv6_src, &nh->ip6_src,
629                             sizeof nh->ip6_src / 8);
630         miniflow_push_words(mf, ipv6_dst, &nh->ip6_dst,
631                             sizeof nh->ip6_dst / 8);
632
633         tc_flow = get_16aligned_be32(&nh->ip6_flow);
634         {
635             ovs_be32 label = tc_flow & htonl(IPV6_LABEL_MASK);
636             miniflow_push_be32(mf, ipv6_label, label);
637         }
638
639         nw_tos = ntohl(tc_flow) >> 20;
640         nw_ttl = nh->ip6_hlim;
641         nw_proto = nh->ip6_nxt;
642
643         while (1) {
644             if (OVS_LIKELY((nw_proto != IPPROTO_HOPOPTS)
645                            && (nw_proto != IPPROTO_ROUTING)
646                            && (nw_proto != IPPROTO_DSTOPTS)
647                            && (nw_proto != IPPROTO_AH)
648                            && (nw_proto != IPPROTO_FRAGMENT))) {
649                 /* It's either a terminal header (e.g., TCP, UDP) or one we
650                  * don't understand.  In either case, we're done with the
651                  * packet, so use it to fill in 'nw_proto'. */
652                 break;
653             }
654
655             /* We only verify that at least 8 bytes of the next header are
656              * available, but many of these headers are longer.  Ensure that
657              * accesses within the extension header are within those first 8
658              * bytes. All extension headers are required to be at least 8
659              * bytes. */
660             if (OVS_UNLIKELY(size < 8)) {
661                 goto out;
662             }
663
664             if ((nw_proto == IPPROTO_HOPOPTS)
665                 || (nw_proto == IPPROTO_ROUTING)
666                 || (nw_proto == IPPROTO_DSTOPTS)) {
667                 /* These headers, while different, have the fields we care
668                  * about in the same location and with the same
669                  * interpretation. */
670                 const struct ip6_ext *ext_hdr = data;
671                 nw_proto = ext_hdr->ip6e_nxt;
672                 if (OVS_UNLIKELY(!data_try_pull(&data, &size,
673                                                 (ext_hdr->ip6e_len + 1) * 8))) {
674                     goto out;
675                 }
676             } else if (nw_proto == IPPROTO_AH) {
677                 /* A standard AH definition isn't available, but the fields
678                  * we care about are in the same location as the generic
679                  * option header--only the header length is calculated
680                  * differently. */
681                 const struct ip6_ext *ext_hdr = data;
682                 nw_proto = ext_hdr->ip6e_nxt;
683                 if (OVS_UNLIKELY(!data_try_pull(&data, &size,
684                                                 (ext_hdr->ip6e_len + 2) * 4))) {
685                     goto out;
686                 }
687             } else if (nw_proto == IPPROTO_FRAGMENT) {
688                 const struct ovs_16aligned_ip6_frag *frag_hdr = data;
689
690                 nw_proto = frag_hdr->ip6f_nxt;
691                 if (!data_try_pull(&data, &size, sizeof *frag_hdr)) {
692                     goto out;
693                 }
694
695                 /* We only process the first fragment. */
696                 if (frag_hdr->ip6f_offlg != htons(0)) {
697                     nw_frag = FLOW_NW_FRAG_ANY;
698                     if ((frag_hdr->ip6f_offlg & IP6F_OFF_MASK) != htons(0)) {
699                         nw_frag |= FLOW_NW_FRAG_LATER;
700                         nw_proto = IPPROTO_FRAGMENT;
701                         break;
702                     }
703                 }
704             }
705         }
706     } else {
707         if (dl_type == htons(ETH_TYPE_ARP) ||
708             dl_type == htons(ETH_TYPE_RARP)) {
709             struct eth_addr arp_buf[2];
710             const struct arp_eth_header *arp = (const struct arp_eth_header *)
711                 data_try_pull(&data, &size, ARP_ETH_HEADER_LEN);
712
713             if (OVS_LIKELY(arp) && OVS_LIKELY(arp->ar_hrd == htons(1))
714                 && OVS_LIKELY(arp->ar_pro == htons(ETH_TYPE_IP))
715                 && OVS_LIKELY(arp->ar_hln == ETH_ADDR_LEN)
716                 && OVS_LIKELY(arp->ar_pln == 4)) {
717                 miniflow_push_be32(mf, nw_src,
718                                    get_16aligned_be32(&arp->ar_spa));
719                 miniflow_push_be32(mf, nw_dst,
720                                    get_16aligned_be32(&arp->ar_tpa));
721
722                 /* We only match on the lower 8 bits of the opcode. */
723                 if (OVS_LIKELY(ntohs(arp->ar_op) <= 0xff)) {
724                     miniflow_push_be32(mf, ipv6_label, 0); /* Pad with ARP. */
725                     miniflow_push_be32(mf, nw_frag, htonl(ntohs(arp->ar_op)));
726                 }
727
728                 /* Must be adjacent. */
729                 ASSERT_SEQUENTIAL(arp_sha, arp_tha);
730
731                 arp_buf[0] = arp->ar_sha;
732                 arp_buf[1] = arp->ar_tha;
733                 miniflow_push_macs(mf, arp_sha, arp_buf);
734                 miniflow_pad_to_64(mf, arp_tha);
735             }
736         }
737         goto out;
738     }
739
740     packet->l4_ofs = (char *)data - l2;
741     miniflow_push_be32(mf, nw_frag,
742                        BYTES_TO_BE32(nw_frag, nw_tos, nw_ttl, nw_proto));
743
744     if (OVS_LIKELY(!(nw_frag & FLOW_NW_FRAG_LATER))) {
745         if (OVS_LIKELY(nw_proto == IPPROTO_TCP)) {
746             if (OVS_LIKELY(size >= TCP_HEADER_LEN)) {
747                 const struct tcp_header *tcp = data;
748
749                 miniflow_push_be32(mf, arp_tha.ea[2], 0);
750                 miniflow_push_be32(mf, tcp_flags,
751                                    TCP_FLAGS_BE32(tcp->tcp_ctl));
752                 miniflow_push_be16(mf, tp_src, tcp->tcp_src);
753                 miniflow_push_be16(mf, tp_dst, tcp->tcp_dst);
754                 miniflow_pad_to_64(mf, tp_dst);
755             }
756         } else if (OVS_LIKELY(nw_proto == IPPROTO_UDP)) {
757             if (OVS_LIKELY(size >= UDP_HEADER_LEN)) {
758                 const struct udp_header *udp = data;
759
760                 miniflow_push_be16(mf, tp_src, udp->udp_src);
761                 miniflow_push_be16(mf, tp_dst, udp->udp_dst);
762                 miniflow_pad_to_64(mf, tp_dst);
763             }
764         } else if (OVS_LIKELY(nw_proto == IPPROTO_SCTP)) {
765             if (OVS_LIKELY(size >= SCTP_HEADER_LEN)) {
766                 const struct sctp_header *sctp = data;
767
768                 miniflow_push_be16(mf, tp_src, sctp->sctp_src);
769                 miniflow_push_be16(mf, tp_dst, sctp->sctp_dst);
770                 miniflow_pad_to_64(mf, tp_dst);
771             }
772         } else if (OVS_LIKELY(nw_proto == IPPROTO_ICMP)) {
773             if (OVS_LIKELY(size >= ICMP_HEADER_LEN)) {
774                 const struct icmp_header *icmp = data;
775
776                 miniflow_push_be16(mf, tp_src, htons(icmp->icmp_type));
777                 miniflow_push_be16(mf, tp_dst, htons(icmp->icmp_code));
778                 miniflow_pad_to_64(mf, tp_dst);
779             }
780         } else if (OVS_LIKELY(nw_proto == IPPROTO_IGMP)) {
781             if (OVS_LIKELY(size >= IGMP_HEADER_LEN)) {
782                 const struct igmp_header *igmp = data;
783
784                 miniflow_push_be16(mf, tp_src, htons(igmp->igmp_type));
785                 miniflow_push_be16(mf, tp_dst, htons(igmp->igmp_code));
786                 miniflow_push_be32(mf, igmp_group_ip4,
787                                    get_16aligned_be32(&igmp->group));
788             }
789         } else if (OVS_LIKELY(nw_proto == IPPROTO_ICMPV6)) {
790             if (OVS_LIKELY(size >= sizeof(struct icmp6_hdr))) {
791                 const struct in6_addr *nd_target = NULL;
792                 struct eth_addr arp_buf[2] = { { { { 0 } } } };
793                 const struct icmp6_hdr *icmp = data_pull(&data, &size,
794                                                          sizeof *icmp);
795                 parse_icmpv6(&data, &size, icmp, &nd_target, arp_buf);
796                 if (nd_target) {
797                     miniflow_push_words(mf, nd_target, nd_target,
798                                         sizeof *nd_target / sizeof(uint64_t));
799                 }
800                 miniflow_push_macs(mf, arp_sha, arp_buf);
801                 miniflow_pad_to_64(mf, arp_tha);
802                 miniflow_push_be16(mf, tp_src, htons(icmp->icmp6_type));
803                 miniflow_push_be16(mf, tp_dst, htons(icmp->icmp6_code));
804                 miniflow_pad_to_64(mf, tp_dst);
805             }
806         }
807     }
808  out:
809     dst->map = mf.map;
810 }
811
812 /* For every bit of a field that is wildcarded in 'wildcards', sets the
813  * corresponding bit in 'flow' to zero. */
814 void
815 flow_zero_wildcards(struct flow *flow, const struct flow_wildcards *wildcards)
816 {
817     uint64_t *flow_u64 = (uint64_t *) flow;
818     const uint64_t *wc_u64 = (const uint64_t *) &wildcards->masks;
819     size_t i;
820
821     for (i = 0; i < FLOW_U64S; i++) {
822         flow_u64[i] &= wc_u64[i];
823     }
824 }
825
826 void
827 flow_unwildcard_tp_ports(const struct flow *flow, struct flow_wildcards *wc)
828 {
829     if (flow->nw_proto != IPPROTO_ICMP) {
830         memset(&wc->masks.tp_src, 0xff, sizeof wc->masks.tp_src);
831         memset(&wc->masks.tp_dst, 0xff, sizeof wc->masks.tp_dst);
832     } else {
833         wc->masks.tp_src = htons(0xff);
834         wc->masks.tp_dst = htons(0xff);
835     }
836 }
837
838 /* Initializes 'flow_metadata' with the metadata found in 'flow'. */
839 void
840 flow_get_metadata(const struct flow *flow, struct match *flow_metadata)
841 {
842     int i;
843
844     BUILD_ASSERT_DECL(FLOW_WC_SEQ == 35);
845
846     match_init_catchall(flow_metadata);
847     if (flow->tunnel.tun_id != htonll(0)) {
848         match_set_tun_id(flow_metadata, flow->tunnel.tun_id);
849     }
850     if (flow->tunnel.flags & FLOW_TNL_PUB_F_MASK) {
851         match_set_tun_flags(flow_metadata,
852                             flow->tunnel.flags & FLOW_TNL_PUB_F_MASK);
853     }
854     if (flow->tunnel.ip_src) {
855         match_set_tun_src(flow_metadata, flow->tunnel.ip_src);
856     }
857     if (flow->tunnel.ip_dst) {
858         match_set_tun_dst(flow_metadata, flow->tunnel.ip_dst);
859     }
860     if (ipv6_addr_is_set(&flow->tunnel.ipv6_src)) {
861         match_set_tun_ipv6_src(flow_metadata, &flow->tunnel.ipv6_src);
862     }
863     if (ipv6_addr_is_set(&flow->tunnel.ipv6_dst)) {
864         match_set_tun_ipv6_dst(flow_metadata, &flow->tunnel.ipv6_dst);
865     }
866     if (flow->tunnel.gbp_id != htons(0)) {
867         match_set_tun_gbp_id(flow_metadata, flow->tunnel.gbp_id);
868     }
869     if (flow->tunnel.gbp_flags) {
870         match_set_tun_gbp_flags(flow_metadata, flow->tunnel.gbp_flags);
871     }
872     tun_metadata_get_fmd(&flow->tunnel, flow_metadata);
873     if (flow->metadata != htonll(0)) {
874         match_set_metadata(flow_metadata, flow->metadata);
875     }
876
877     for (i = 0; i < FLOW_N_REGS; i++) {
878         if (flow->regs[i]) {
879             match_set_reg(flow_metadata, i, flow->regs[i]);
880         }
881     }
882
883     if (flow->pkt_mark != 0) {
884         match_set_pkt_mark(flow_metadata, flow->pkt_mark);
885     }
886
887     match_set_in_port(flow_metadata, flow->in_port.ofp_port);
888     if (flow->ct_state != 0) {
889         match_set_ct_state(flow_metadata, flow->ct_state);
890     }
891     if (flow->ct_zone != 0) {
892         match_set_ct_zone(flow_metadata, flow->ct_zone);
893     }
894     if (flow->ct_mark != 0) {
895         match_set_ct_mark(flow_metadata, flow->ct_mark);
896     }
897     if (!ovs_u128_is_zero(&flow->ct_label)) {
898         match_set_ct_label(flow_metadata, flow->ct_label);
899     }
900 }
901
902 const char *ct_state_to_string(uint32_t state)
903 {
904     switch (state) {
905     case CS_REPLY_DIR:
906         return "rpl";
907     case CS_TRACKED:
908         return "trk";
909     case CS_NEW:
910         return "new";
911     case CS_ESTABLISHED:
912         return "est";
913     case CS_RELATED:
914         return "rel";
915     case CS_INVALID:
916         return "inv";
917     case CS_SRC_NAT:
918         return "snat";
919     case CS_DST_NAT:
920         return "dnat";
921     default:
922         return NULL;
923     }
924 }
925
926 char *
927 flow_to_string(const struct flow *flow)
928 {
929     struct ds ds = DS_EMPTY_INITIALIZER;
930     flow_format(&ds, flow);
931     return ds_cstr(&ds);
932 }
933
934 const char *
935 flow_tun_flag_to_string(uint32_t flags)
936 {
937     switch (flags) {
938     case FLOW_TNL_F_DONT_FRAGMENT:
939         return "df";
940     case FLOW_TNL_F_CSUM:
941         return "csum";
942     case FLOW_TNL_F_KEY:
943         return "key";
944     case FLOW_TNL_F_OAM:
945         return "oam";
946     default:
947         return NULL;
948     }
949 }
950
951 void
952 format_flags(struct ds *ds, const char *(*bit_to_string)(uint32_t),
953              uint32_t flags, char del)
954 {
955     uint32_t bad = 0;
956
957     if (!flags) {
958         ds_put_char(ds, '0');
959         return;
960     }
961     while (flags) {
962         uint32_t bit = rightmost_1bit(flags);
963         const char *s;
964
965         s = bit_to_string(bit);
966         if (s) {
967             ds_put_format(ds, "%s%c", s, del);
968         } else {
969             bad |= bit;
970         }
971
972         flags &= ~bit;
973     }
974
975     if (bad) {
976         ds_put_format(ds, "0x%"PRIx32"%c", bad, del);
977     }
978     ds_chomp(ds, del);
979 }
980
981 void
982 format_flags_masked(struct ds *ds, const char *name,
983                     const char *(*bit_to_string)(uint32_t), uint32_t flags,
984                     uint32_t mask, uint32_t max_mask)
985 {
986     if (name) {
987         ds_put_format(ds, "%s=", name);
988     }
989
990     if (mask == max_mask) {
991         format_flags(ds, bit_to_string, flags, '|');
992         return;
993     }
994
995     if (!mask) {
996         ds_put_cstr(ds, "0/0");
997         return;
998     }
999
1000     while (mask) {
1001         uint32_t bit = rightmost_1bit(mask);
1002         const char *s = bit_to_string(bit);
1003
1004         ds_put_format(ds, "%s%s", (flags & bit) ? "+" : "-",
1005                       s ? s : "[Unknown]");
1006         mask &= ~bit;
1007     }
1008 }
1009
1010 /* Scans a string 's' of flags to determine their numerical value and
1011  * returns the number of characters parsed using 'bit_to_string' to
1012  * lookup flag names. Scanning continues until the character 'end' is
1013  * reached.
1014  *
1015  * In the event of a failure, a negative error code will be returned. In
1016  * addition, if 'res_string' is non-NULL then a descriptive string will
1017  * be returned incorporating the identifying string 'field_name'. This
1018  * error string must be freed by the caller.
1019  *
1020  * Upon success, the flag values will be stored in 'res_flags' and
1021  * optionally 'res_mask', if it is non-NULL (if it is NULL then any masks
1022  * present in the original string will be considered an error). The
1023  * caller may restrict the acceptable set of values through the mask
1024  * 'allowed'. */
1025 int
1026 parse_flags(const char *s, const char *(*bit_to_string)(uint32_t),
1027             char end, const char *field_name, char **res_string,
1028             uint32_t *res_flags, uint32_t allowed, uint32_t *res_mask)
1029 {
1030     uint32_t result = 0;
1031     int n;
1032
1033     /* Parse masked flags in numeric format? */
1034     if (res_mask && ovs_scan(s, "%"SCNi32"/%"SCNi32"%n",
1035                              res_flags, res_mask, &n) && n > 0) {
1036         if (*res_flags & ~allowed || *res_mask & ~allowed) {
1037             goto unknown;
1038         }
1039         return n;
1040     }
1041
1042     n = 0;
1043
1044     if (res_mask && (*s == '+' || *s == '-')) {
1045         uint32_t flags = 0, mask = 0;
1046
1047         /* Parse masked flags. */
1048         while (s[0] != end) {
1049             bool set;
1050             uint32_t bit;
1051             size_t len;
1052
1053             if (s[0] == '+') {
1054                 set = true;
1055             } else if (s[0] == '-') {
1056                 set = false;
1057             } else {
1058                 if (res_string) {
1059                     *res_string = xasprintf("%s: %s must be preceded by '+' "
1060                                             "(for SET) or '-' (NOT SET)", s,
1061                                             field_name);
1062                 }
1063                 return -EINVAL;
1064             }
1065             s++;
1066             n++;
1067
1068             for (bit = 1; bit; bit <<= 1) {
1069                 const char *fname = bit_to_string(bit);
1070
1071                 if (!fname) {
1072                     continue;
1073                 }
1074
1075                 len = strlen(fname);
1076                 if (strncmp(s, fname, len) ||
1077                     (s[len] != '+' && s[len] != '-' && s[len] != end)) {
1078                     continue;
1079                 }
1080
1081                 if (mask & bit) {
1082                     /* bit already set. */
1083                     if (res_string) {
1084                         *res_string = xasprintf("%s: Each %s flag can be "
1085                                                 "specified only once", s,
1086                                                 field_name);
1087                     }
1088                     return -EINVAL;
1089                 }
1090                 if (!(bit & allowed)) {
1091                     goto unknown;
1092                 }
1093                 if (set) {
1094                    flags |= bit;
1095                 }
1096                 mask |= bit;
1097                 break;
1098             }
1099
1100             if (!bit) {
1101                 goto unknown;
1102             }
1103             s += len;
1104             n += len;
1105         }
1106
1107         *res_flags = flags;
1108         *res_mask = mask;
1109         return n;
1110     }
1111
1112     /* Parse unmasked flags.  If a flag is present, it is set, otherwise
1113      * it is not set. */
1114     while (s[n] != end) {
1115         unsigned long long int flags;
1116         uint32_t bit;
1117         int n0;
1118
1119         if (ovs_scan(&s[n], "%lli%n", &flags, &n0)) {
1120             if (flags & ~allowed) {
1121                 goto unknown;
1122             }
1123             n += n0 + (s[n + n0] == '|');
1124             result |= flags;
1125             continue;
1126         }
1127
1128         for (bit = 1; bit; bit <<= 1) {
1129             const char *name = bit_to_string(bit);
1130             size_t len;
1131
1132             if (!name) {
1133                 continue;
1134             }
1135
1136             len = strlen(name);
1137             if (!strncmp(s + n, name, len) &&
1138                 (s[n + len] == '|' || s[n + len] == end)) {
1139                 if (!(bit & allowed)) {
1140                     goto unknown;
1141                 }
1142                 result |= bit;
1143                 n += len + (s[n + len] == '|');
1144                 break;
1145             }
1146         }
1147
1148         if (!bit) {
1149             goto unknown;
1150         }
1151     }
1152
1153     *res_flags = result;
1154     if (res_mask) {
1155         *res_mask = UINT32_MAX;
1156     }
1157     if (res_string) {
1158         *res_string = NULL;
1159     }
1160     return n;
1161
1162 unknown:
1163     if (res_string) {
1164         *res_string = xasprintf("%s: unknown %s flag(s)", s, field_name);
1165     }
1166     return -EINVAL;
1167 }
1168
1169 void
1170 flow_format(struct ds *ds, const struct flow *flow)
1171 {
1172     struct match match;
1173     struct flow_wildcards *wc = &match.wc;
1174
1175     match_wc_init(&match, flow);
1176
1177     /* As this function is most often used for formatting a packet in a
1178      * packet-in message, skip formatting the packet context fields that are
1179      * all-zeroes to make the print-out easier on the eyes.  This means that a
1180      * missing context field implies a zero value for that field.  This is
1181      * similar to OpenFlow encoding of these fields, as the specification
1182      * states that all-zeroes context fields should not be encoded in the
1183      * packet-in messages. */
1184     if (!flow->in_port.ofp_port) {
1185         WC_UNMASK_FIELD(wc, in_port);
1186     }
1187     if (!flow->skb_priority) {
1188         WC_UNMASK_FIELD(wc, skb_priority);
1189     }
1190     if (!flow->pkt_mark) {
1191         WC_UNMASK_FIELD(wc, pkt_mark);
1192     }
1193     if (!flow->recirc_id) {
1194         WC_UNMASK_FIELD(wc, recirc_id);
1195     }
1196     if (!flow->dp_hash) {
1197         WC_UNMASK_FIELD(wc, dp_hash);
1198     }
1199     if (!flow->ct_state) {
1200         WC_UNMASK_FIELD(wc, ct_state);
1201     }
1202     if (!flow->ct_zone) {
1203         WC_UNMASK_FIELD(wc, ct_zone);
1204     }
1205     if (!flow->ct_mark) {
1206         WC_UNMASK_FIELD(wc, ct_mark);
1207     }
1208     if (ovs_u128_is_zero(&flow->ct_label)) {
1209         WC_UNMASK_FIELD(wc, ct_label);
1210     }
1211     for (int i = 0; i < FLOW_N_REGS; i++) {
1212         if (!flow->regs[i]) {
1213             WC_UNMASK_FIELD(wc, regs[i]);
1214         }
1215     }
1216     if (!flow->metadata) {
1217         WC_UNMASK_FIELD(wc, metadata);
1218     }
1219
1220     match_format(&match, ds, OFP_DEFAULT_PRIORITY);
1221 }
1222
1223 void
1224 flow_print(FILE *stream, const struct flow *flow)
1225 {
1226     char *s = flow_to_string(flow);
1227     fputs(s, stream);
1228     free(s);
1229 }
1230 \f
1231 /* flow_wildcards functions. */
1232
1233 /* Initializes 'wc' as a set of wildcards that matches every packet. */
1234 void
1235 flow_wildcards_init_catchall(struct flow_wildcards *wc)
1236 {
1237     memset(&wc->masks, 0, sizeof wc->masks);
1238 }
1239
1240 /* Converts a flow into flow wildcards.  It sets the wildcard masks based on
1241  * the packet headers extracted to 'flow'.  It will not set the mask for fields
1242  * that do not make sense for the packet type.  OpenFlow-only metadata is
1243  * wildcarded, but other metadata is unconditionally exact-matched. */
1244 void flow_wildcards_init_for_packet(struct flow_wildcards *wc,
1245                                     const struct flow *flow)
1246 {
1247     memset(&wc->masks, 0x0, sizeof wc->masks);
1248
1249     /* Update this function whenever struct flow changes. */
1250     BUILD_ASSERT_DECL(FLOW_WC_SEQ == 35);
1251
1252     if (flow_tnl_dst_is_set(&flow->tunnel)) {
1253         if (flow->tunnel.flags & FLOW_TNL_F_KEY) {
1254             WC_MASK_FIELD(wc, tunnel.tun_id);
1255         }
1256         WC_MASK_FIELD(wc, tunnel.ip_src);
1257         WC_MASK_FIELD(wc, tunnel.ip_dst);
1258         WC_MASK_FIELD(wc, tunnel.ipv6_src);
1259         WC_MASK_FIELD(wc, tunnel.ipv6_dst);
1260         WC_MASK_FIELD(wc, tunnel.flags);
1261         WC_MASK_FIELD(wc, tunnel.ip_tos);
1262         WC_MASK_FIELD(wc, tunnel.ip_ttl);
1263         WC_MASK_FIELD(wc, tunnel.tp_src);
1264         WC_MASK_FIELD(wc, tunnel.tp_dst);
1265         WC_MASK_FIELD(wc, tunnel.gbp_id);
1266         WC_MASK_FIELD(wc, tunnel.gbp_flags);
1267
1268         if (!(flow->tunnel.flags & FLOW_TNL_F_UDPIF)) {
1269             if (flow->tunnel.metadata.present.map) {
1270                 wc->masks.tunnel.metadata.present.map =
1271                                               flow->tunnel.metadata.present.map;
1272                 WC_MASK_FIELD(wc, tunnel.metadata.opts.u8);
1273             }
1274         } else {
1275             WC_MASK_FIELD(wc, tunnel.metadata.present.len);
1276             memset(wc->masks.tunnel.metadata.opts.gnv, 0xff,
1277                    flow->tunnel.metadata.present.len);
1278         }
1279     } else if (flow->tunnel.tun_id) {
1280         WC_MASK_FIELD(wc, tunnel.tun_id);
1281     }
1282
1283     /* metadata, regs, and conj_id wildcarded. */
1284
1285     WC_MASK_FIELD(wc, skb_priority);
1286     WC_MASK_FIELD(wc, pkt_mark);
1287     WC_MASK_FIELD(wc, ct_state);
1288     WC_MASK_FIELD(wc, ct_zone);
1289     WC_MASK_FIELD(wc, ct_mark);
1290     WC_MASK_FIELD(wc, ct_label);
1291     WC_MASK_FIELD(wc, recirc_id);
1292     WC_MASK_FIELD(wc, dp_hash);
1293     WC_MASK_FIELD(wc, in_port);
1294
1295     /* actset_output wildcarded. */
1296
1297     WC_MASK_FIELD(wc, dl_dst);
1298     WC_MASK_FIELD(wc, dl_src);
1299     WC_MASK_FIELD(wc, dl_type);
1300     WC_MASK_FIELD(wc, vlan_tci);
1301
1302     if (flow->dl_type == htons(ETH_TYPE_IP)) {
1303         WC_MASK_FIELD(wc, nw_src);
1304         WC_MASK_FIELD(wc, nw_dst);
1305     } else if (flow->dl_type == htons(ETH_TYPE_IPV6)) {
1306         WC_MASK_FIELD(wc, ipv6_src);
1307         WC_MASK_FIELD(wc, ipv6_dst);
1308         WC_MASK_FIELD(wc, ipv6_label);
1309     } else if (flow->dl_type == htons(ETH_TYPE_ARP) ||
1310                flow->dl_type == htons(ETH_TYPE_RARP)) {
1311         WC_MASK_FIELD(wc, nw_src);
1312         WC_MASK_FIELD(wc, nw_dst);
1313         WC_MASK_FIELD(wc, nw_proto);
1314         WC_MASK_FIELD(wc, arp_sha);
1315         WC_MASK_FIELD(wc, arp_tha);
1316         return;
1317     } else if (eth_type_mpls(flow->dl_type)) {
1318         for (int i = 0; i < FLOW_MAX_MPLS_LABELS; i++) {
1319             WC_MASK_FIELD(wc, mpls_lse[i]);
1320             if (flow->mpls_lse[i] & htonl(MPLS_BOS_MASK)) {
1321                 break;
1322             }
1323         }
1324         return;
1325     } else {
1326         return; /* Unknown ethertype. */
1327     }
1328
1329     /* IPv4 or IPv6. */
1330     WC_MASK_FIELD(wc, nw_frag);
1331     WC_MASK_FIELD(wc, nw_tos);
1332     WC_MASK_FIELD(wc, nw_ttl);
1333     WC_MASK_FIELD(wc, nw_proto);
1334
1335     /* No transport layer header in later fragments. */
1336     if (!(flow->nw_frag & FLOW_NW_FRAG_LATER) &&
1337         (flow->nw_proto == IPPROTO_ICMP ||
1338          flow->nw_proto == IPPROTO_ICMPV6 ||
1339          flow->nw_proto == IPPROTO_TCP ||
1340          flow->nw_proto == IPPROTO_UDP ||
1341          flow->nw_proto == IPPROTO_SCTP ||
1342          flow->nw_proto == IPPROTO_IGMP)) {
1343         WC_MASK_FIELD(wc, tp_src);
1344         WC_MASK_FIELD(wc, tp_dst);
1345
1346         if (flow->nw_proto == IPPROTO_TCP) {
1347             WC_MASK_FIELD(wc, tcp_flags);
1348         } else if (flow->nw_proto == IPPROTO_ICMPV6) {
1349             WC_MASK_FIELD(wc, arp_sha);
1350             WC_MASK_FIELD(wc, arp_tha);
1351             WC_MASK_FIELD(wc, nd_target);
1352         } else if (flow->nw_proto == IPPROTO_IGMP) {
1353             WC_MASK_FIELD(wc, igmp_group_ip4);
1354         }
1355     }
1356 }
1357
1358 /* Return a map of possible fields for a packet of the same type as 'flow'.
1359  * Including extra bits in the returned mask is not wrong, it is just less
1360  * optimal.
1361  *
1362  * This is a less precise version of flow_wildcards_init_for_packet() above. */
1363 void
1364 flow_wc_map(const struct flow *flow, struct flowmap *map)
1365 {
1366     /* Update this function whenever struct flow changes. */
1367     BUILD_ASSERT_DECL(FLOW_WC_SEQ == 35);
1368
1369     flowmap_init(map);
1370
1371     if (flow_tnl_dst_is_set(&flow->tunnel)) {
1372         FLOWMAP_SET__(map, tunnel, offsetof(struct flow_tnl, metadata));
1373         if (!(flow->tunnel.flags & FLOW_TNL_F_UDPIF)) {
1374             if (flow->tunnel.metadata.present.map) {
1375                 FLOWMAP_SET(map, tunnel.metadata);
1376             }
1377         } else {
1378             FLOWMAP_SET(map, tunnel.metadata.present.len);
1379             FLOWMAP_SET__(map, tunnel.metadata.opts.gnv,
1380                           flow->tunnel.metadata.present.len);
1381         }
1382     }
1383
1384     /* Metadata fields that can appear on packet input. */
1385     FLOWMAP_SET(map, skb_priority);
1386     FLOWMAP_SET(map, pkt_mark);
1387     FLOWMAP_SET(map, recirc_id);
1388     FLOWMAP_SET(map, dp_hash);
1389     FLOWMAP_SET(map, in_port);
1390     FLOWMAP_SET(map, dl_dst);
1391     FLOWMAP_SET(map, dl_src);
1392     FLOWMAP_SET(map, dl_type);
1393     FLOWMAP_SET(map, vlan_tci);
1394     FLOWMAP_SET(map, ct_state);
1395     FLOWMAP_SET(map, ct_zone);
1396     FLOWMAP_SET(map, ct_mark);
1397     FLOWMAP_SET(map, ct_label);
1398
1399     /* Ethertype-dependent fields. */
1400     if (OVS_LIKELY(flow->dl_type == htons(ETH_TYPE_IP))) {
1401         FLOWMAP_SET(map, nw_src);
1402         FLOWMAP_SET(map, nw_dst);
1403         FLOWMAP_SET(map, nw_proto);
1404         FLOWMAP_SET(map, nw_frag);
1405         FLOWMAP_SET(map, nw_tos);
1406         FLOWMAP_SET(map, nw_ttl);
1407
1408         if (OVS_UNLIKELY(flow->nw_proto == IPPROTO_IGMP)) {
1409             FLOWMAP_SET(map, igmp_group_ip4);
1410         } else {
1411             FLOWMAP_SET(map, tcp_flags);
1412             FLOWMAP_SET(map, tp_src);
1413             FLOWMAP_SET(map, tp_dst);
1414         }
1415     } else if (flow->dl_type == htons(ETH_TYPE_IPV6)) {
1416         FLOWMAP_SET(map, ipv6_src);
1417         FLOWMAP_SET(map, ipv6_dst);
1418         FLOWMAP_SET(map, ipv6_label);
1419         FLOWMAP_SET(map, nw_proto);
1420         FLOWMAP_SET(map, nw_frag);
1421         FLOWMAP_SET(map, nw_tos);
1422         FLOWMAP_SET(map, nw_ttl);
1423
1424         if (OVS_UNLIKELY(flow->nw_proto == IPPROTO_ICMPV6)) {
1425             FLOWMAP_SET(map, nd_target);
1426             FLOWMAP_SET(map, arp_sha);
1427             FLOWMAP_SET(map, arp_tha);
1428         } else {
1429             FLOWMAP_SET(map, tcp_flags);
1430             FLOWMAP_SET(map, tp_src);
1431             FLOWMAP_SET(map, tp_dst);
1432         }
1433     } else if (eth_type_mpls(flow->dl_type)) {
1434         FLOWMAP_SET(map, mpls_lse);
1435     } else if (flow->dl_type == htons(ETH_TYPE_ARP) ||
1436                flow->dl_type == htons(ETH_TYPE_RARP)) {
1437         FLOWMAP_SET(map, nw_src);
1438         FLOWMAP_SET(map, nw_dst);
1439         FLOWMAP_SET(map, nw_proto);
1440         FLOWMAP_SET(map, arp_sha);
1441         FLOWMAP_SET(map, arp_tha);
1442     }
1443 }
1444
1445 /* Clear the metadata and register wildcard masks. They are not packet
1446  * header fields. */
1447 void
1448 flow_wildcards_clear_non_packet_fields(struct flow_wildcards *wc)
1449 {
1450     /* Update this function whenever struct flow changes. */
1451     BUILD_ASSERT_DECL(FLOW_WC_SEQ == 35);
1452
1453     memset(&wc->masks.metadata, 0, sizeof wc->masks.metadata);
1454     memset(&wc->masks.regs, 0, sizeof wc->masks.regs);
1455     wc->masks.actset_output = 0;
1456     wc->masks.conj_id = 0;
1457 }
1458
1459 /* Returns true if 'wc' matches every packet, false if 'wc' fixes any bits or
1460  * fields. */
1461 bool
1462 flow_wildcards_is_catchall(const struct flow_wildcards *wc)
1463 {
1464     const uint64_t *wc_u64 = (const uint64_t *) &wc->masks;
1465     size_t i;
1466
1467     for (i = 0; i < FLOW_U64S; i++) {
1468         if (wc_u64[i]) {
1469             return false;
1470         }
1471     }
1472     return true;
1473 }
1474
1475 /* Sets 'dst' as the bitwise AND of wildcards in 'src1' and 'src2'.
1476  * That is, a bit or a field is wildcarded in 'dst' if it is wildcarded
1477  * in 'src1' or 'src2' or both.  */
1478 void
1479 flow_wildcards_and(struct flow_wildcards *dst,
1480                    const struct flow_wildcards *src1,
1481                    const struct flow_wildcards *src2)
1482 {
1483     uint64_t *dst_u64 = (uint64_t *) &dst->masks;
1484     const uint64_t *src1_u64 = (const uint64_t *) &src1->masks;
1485     const uint64_t *src2_u64 = (const uint64_t *) &src2->masks;
1486     size_t i;
1487
1488     for (i = 0; i < FLOW_U64S; i++) {
1489         dst_u64[i] = src1_u64[i] & src2_u64[i];
1490     }
1491 }
1492
1493 /* Sets 'dst' as the bitwise OR of wildcards in 'src1' and 'src2'.  That
1494  * is, a bit or a field is wildcarded in 'dst' if it is neither
1495  * wildcarded in 'src1' nor 'src2'. */
1496 void
1497 flow_wildcards_or(struct flow_wildcards *dst,
1498                   const struct flow_wildcards *src1,
1499                   const struct flow_wildcards *src2)
1500 {
1501     uint64_t *dst_u64 = (uint64_t *) &dst->masks;
1502     const uint64_t *src1_u64 = (const uint64_t *) &src1->masks;
1503     const uint64_t *src2_u64 = (const uint64_t *) &src2->masks;
1504     size_t i;
1505
1506     for (i = 0; i < FLOW_U64S; i++) {
1507         dst_u64[i] = src1_u64[i] | src2_u64[i];
1508     }
1509 }
1510
1511 /* Returns a hash of the wildcards in 'wc'. */
1512 uint32_t
1513 flow_wildcards_hash(const struct flow_wildcards *wc, uint32_t basis)
1514 {
1515     return flow_hash(&wc->masks, basis);
1516 }
1517
1518 /* Returns true if 'a' and 'b' represent the same wildcards, false if they are
1519  * different. */
1520 bool
1521 flow_wildcards_equal(const struct flow_wildcards *a,
1522                      const struct flow_wildcards *b)
1523 {
1524     return flow_equal(&a->masks, &b->masks);
1525 }
1526
1527 /* Returns true if at least one bit or field is wildcarded in 'a' but not in
1528  * 'b', false otherwise. */
1529 bool
1530 flow_wildcards_has_extra(const struct flow_wildcards *a,
1531                          const struct flow_wildcards *b)
1532 {
1533     const uint64_t *a_u64 = (const uint64_t *) &a->masks;
1534     const uint64_t *b_u64 = (const uint64_t *) &b->masks;
1535     size_t i;
1536
1537     for (i = 0; i < FLOW_U64S; i++) {
1538         if ((a_u64[i] & b_u64[i]) != b_u64[i]) {
1539             return true;
1540         }
1541     }
1542     return false;
1543 }
1544
1545 /* Returns true if 'a' and 'b' are equal, except that 0-bits (wildcarded bits)
1546  * in 'wc' do not need to be equal in 'a' and 'b'. */
1547 bool
1548 flow_equal_except(const struct flow *a, const struct flow *b,
1549                   const struct flow_wildcards *wc)
1550 {
1551     const uint64_t *a_u64 = (const uint64_t *) a;
1552     const uint64_t *b_u64 = (const uint64_t *) b;
1553     const uint64_t *wc_u64 = (const uint64_t *) &wc->masks;
1554     size_t i;
1555
1556     for (i = 0; i < FLOW_U64S; i++) {
1557         if ((a_u64[i] ^ b_u64[i]) & wc_u64[i]) {
1558             return false;
1559         }
1560     }
1561     return true;
1562 }
1563
1564 /* Sets the wildcard mask for register 'idx' in 'wc' to 'mask'.
1565  * (A 0-bit indicates a wildcard bit.) */
1566 void
1567 flow_wildcards_set_reg_mask(struct flow_wildcards *wc, int idx, uint32_t mask)
1568 {
1569     wc->masks.regs[idx] = mask;
1570 }
1571
1572 /* Sets the wildcard mask for register 'idx' in 'wc' to 'mask'.
1573  * (A 0-bit indicates a wildcard bit.) */
1574 void
1575 flow_wildcards_set_xreg_mask(struct flow_wildcards *wc, int idx, uint64_t mask)
1576 {
1577     flow_set_xreg(&wc->masks, idx, mask);
1578 }
1579
1580 /* Calculates the 5-tuple hash from the given miniflow.
1581  * This returns the same value as flow_hash_5tuple for the corresponding
1582  * flow. */
1583 uint32_t
1584 miniflow_hash_5tuple(const struct miniflow *flow, uint32_t basis)
1585 {
1586     uint32_t hash = basis;
1587
1588     if (flow) {
1589         ovs_be16 dl_type = MINIFLOW_GET_BE16(flow, dl_type);
1590
1591         hash = hash_add(hash, MINIFLOW_GET_U8(flow, nw_proto));
1592
1593         /* Separate loops for better optimization. */
1594         if (dl_type == htons(ETH_TYPE_IPV6)) {
1595             struct flowmap map = FLOWMAP_EMPTY_INITIALIZER;
1596             uint64_t value;
1597
1598             FLOWMAP_SET(&map, ipv6_src);
1599             FLOWMAP_SET(&map, ipv6_dst);
1600
1601             MINIFLOW_FOR_EACH_IN_FLOWMAP(value, flow, map) {
1602                 hash = hash_add64(hash, value);
1603             }
1604         } else {
1605             hash = hash_add(hash, MINIFLOW_GET_U32(flow, nw_src));
1606             hash = hash_add(hash, MINIFLOW_GET_U32(flow, nw_dst));
1607         }
1608         /* Add both ports at once. */
1609         hash = hash_add(hash, MINIFLOW_GET_U32(flow, tp_src));
1610         hash = hash_finish(hash, 42); /* Arbitrary number. */
1611     }
1612     return hash;
1613 }
1614
1615 ASSERT_SEQUENTIAL_SAME_WORD(tp_src, tp_dst);
1616 ASSERT_SEQUENTIAL(ipv6_src, ipv6_dst);
1617
1618 /* Calculates the 5-tuple hash from the given flow. */
1619 uint32_t
1620 flow_hash_5tuple(const struct flow *flow, uint32_t basis)
1621 {
1622     uint32_t hash = basis;
1623
1624     if (flow) {
1625         hash = hash_add(hash, flow->nw_proto);
1626
1627         if (flow->dl_type == htons(ETH_TYPE_IPV6)) {
1628             const uint64_t *flow_u64 = (const uint64_t *)flow;
1629             int ofs = offsetof(struct flow, ipv6_src) / 8;
1630             int end = ofs + 2 * sizeof flow->ipv6_src / 8;
1631
1632             for (;ofs < end; ofs++) {
1633                 hash = hash_add64(hash, flow_u64[ofs]);
1634             }
1635         } else {
1636             hash = hash_add(hash, (OVS_FORCE uint32_t) flow->nw_src);
1637             hash = hash_add(hash, (OVS_FORCE uint32_t) flow->nw_dst);
1638         }
1639         /* Add both ports at once. */
1640         hash = hash_add(hash,
1641                         ((const uint32_t *)flow)[offsetof(struct flow, tp_src)
1642                                                  / sizeof(uint32_t)]);
1643         hash = hash_finish(hash, 42); /* Arbitrary number. */
1644     }
1645     return hash;
1646 }
1647
1648 /* Hashes 'flow' based on its L2 through L4 protocol information. */
1649 uint32_t
1650 flow_hash_symmetric_l4(const struct flow *flow, uint32_t basis)
1651 {
1652     struct {
1653         union {
1654             ovs_be32 ipv4_addr;
1655             struct in6_addr ipv6_addr;
1656         };
1657         ovs_be16 eth_type;
1658         ovs_be16 vlan_tci;
1659         ovs_be16 tp_port;
1660         struct eth_addr eth_addr;
1661         uint8_t ip_proto;
1662     } fields;
1663
1664     int i;
1665
1666     memset(&fields, 0, sizeof fields);
1667     for (i = 0; i < ARRAY_SIZE(fields.eth_addr.be16); i++) {
1668         fields.eth_addr.be16[i] = flow->dl_src.be16[i] ^ flow->dl_dst.be16[i];
1669     }
1670     fields.vlan_tci = flow->vlan_tci & htons(VLAN_VID_MASK);
1671     fields.eth_type = flow->dl_type;
1672
1673     /* UDP source and destination port are not taken into account because they
1674      * will not necessarily be symmetric in a bidirectional flow. */
1675     if (fields.eth_type == htons(ETH_TYPE_IP)) {
1676         fields.ipv4_addr = flow->nw_src ^ flow->nw_dst;
1677         fields.ip_proto = flow->nw_proto;
1678         if (fields.ip_proto == IPPROTO_TCP || fields.ip_proto == IPPROTO_SCTP) {
1679             fields.tp_port = flow->tp_src ^ flow->tp_dst;
1680         }
1681     } else if (fields.eth_type == htons(ETH_TYPE_IPV6)) {
1682         const uint8_t *a = &flow->ipv6_src.s6_addr[0];
1683         const uint8_t *b = &flow->ipv6_dst.s6_addr[0];
1684         uint8_t *ipv6_addr = &fields.ipv6_addr.s6_addr[0];
1685
1686         for (i=0; i<16; i++) {
1687             ipv6_addr[i] = a[i] ^ b[i];
1688         }
1689         fields.ip_proto = flow->nw_proto;
1690         if (fields.ip_proto == IPPROTO_TCP || fields.ip_proto == IPPROTO_SCTP) {
1691             fields.tp_port = flow->tp_src ^ flow->tp_dst;
1692         }
1693     }
1694     return jhash_bytes(&fields, sizeof fields, basis);
1695 }
1696
1697 /* Hashes 'flow' based on its L3 through L4 protocol information */
1698 uint32_t
1699 flow_hash_symmetric_l3l4(const struct flow *flow, uint32_t basis,
1700                          bool inc_udp_ports)
1701 {
1702     uint32_t hash = basis;
1703
1704     /* UDP source and destination port are also taken into account. */
1705     if (flow->dl_type == htons(ETH_TYPE_IP)) {
1706         hash = hash_add(hash,
1707                         (OVS_FORCE uint32_t) (flow->nw_src ^ flow->nw_dst));
1708     } else if (flow->dl_type == htons(ETH_TYPE_IPV6)) {
1709         /* IPv6 addresses are 64-bit aligned inside struct flow. */
1710         const uint64_t *a = ALIGNED_CAST(uint64_t *, flow->ipv6_src.s6_addr);
1711         const uint64_t *b = ALIGNED_CAST(uint64_t *, flow->ipv6_dst.s6_addr);
1712
1713         for (int i = 0; i < 4; i++) {
1714             hash = hash_add64(hash, a[i] ^ b[i]);
1715         }
1716     } else {
1717         /* Cannot hash non-IP flows */
1718         return 0;
1719     }
1720
1721     hash = hash_add(hash, flow->nw_proto);
1722     if (flow->nw_proto == IPPROTO_TCP || flow->nw_proto == IPPROTO_SCTP ||
1723          (inc_udp_ports && flow->nw_proto == IPPROTO_UDP)) {
1724         hash = hash_add(hash,
1725                         (OVS_FORCE uint16_t) (flow->tp_src ^ flow->tp_dst));
1726     }
1727
1728     return hash_finish(hash, basis);
1729 }
1730
1731 /* Initialize a flow with random fields that matter for nx_hash_fields. */
1732 void
1733 flow_random_hash_fields(struct flow *flow)
1734 {
1735     uint16_t rnd = random_uint16();
1736
1737     /* Initialize to all zeros. */
1738     memset(flow, 0, sizeof *flow);
1739
1740     eth_addr_random(&flow->dl_src);
1741     eth_addr_random(&flow->dl_dst);
1742
1743     flow->vlan_tci = (OVS_FORCE ovs_be16) (random_uint16() & VLAN_VID_MASK);
1744
1745     /* Make most of the random flows IPv4, some IPv6, and rest random. */
1746     flow->dl_type = rnd < 0x8000 ? htons(ETH_TYPE_IP) :
1747         rnd < 0xc000 ? htons(ETH_TYPE_IPV6) : (OVS_FORCE ovs_be16)rnd;
1748
1749     if (dl_type_is_ip_any(flow->dl_type)) {
1750         if (flow->dl_type == htons(ETH_TYPE_IP)) {
1751             flow->nw_src = (OVS_FORCE ovs_be32)random_uint32();
1752             flow->nw_dst = (OVS_FORCE ovs_be32)random_uint32();
1753         } else {
1754             random_bytes(&flow->ipv6_src, sizeof flow->ipv6_src);
1755             random_bytes(&flow->ipv6_dst, sizeof flow->ipv6_dst);
1756         }
1757         /* Make most of IP flows TCP, some UDP or SCTP, and rest random. */
1758         rnd = random_uint16();
1759         flow->nw_proto = rnd < 0x8000 ? IPPROTO_TCP :
1760             rnd < 0xc000 ? IPPROTO_UDP :
1761             rnd < 0xd000 ? IPPROTO_SCTP : (uint8_t)rnd;
1762         if (flow->nw_proto == IPPROTO_TCP ||
1763             flow->nw_proto == IPPROTO_UDP ||
1764             flow->nw_proto == IPPROTO_SCTP) {
1765             flow->tp_src = (OVS_FORCE ovs_be16)random_uint16();
1766             flow->tp_dst = (OVS_FORCE ovs_be16)random_uint16();
1767         }
1768     }
1769 }
1770
1771 /* Masks the fields in 'wc' that are used by the flow hash 'fields'. */
1772 void
1773 flow_mask_hash_fields(const struct flow *flow, struct flow_wildcards *wc,
1774                       enum nx_hash_fields fields)
1775 {
1776     switch (fields) {
1777     case NX_HASH_FIELDS_ETH_SRC:
1778         memset(&wc->masks.dl_src, 0xff, sizeof wc->masks.dl_src);
1779         break;
1780
1781     case NX_HASH_FIELDS_SYMMETRIC_L4:
1782         memset(&wc->masks.dl_src, 0xff, sizeof wc->masks.dl_src);
1783         memset(&wc->masks.dl_dst, 0xff, sizeof wc->masks.dl_dst);
1784         if (flow->dl_type == htons(ETH_TYPE_IP)) {
1785             memset(&wc->masks.nw_src, 0xff, sizeof wc->masks.nw_src);
1786             memset(&wc->masks.nw_dst, 0xff, sizeof wc->masks.nw_dst);
1787         } else if (flow->dl_type == htons(ETH_TYPE_IPV6)) {
1788             memset(&wc->masks.ipv6_src, 0xff, sizeof wc->masks.ipv6_src);
1789             memset(&wc->masks.ipv6_dst, 0xff, sizeof wc->masks.ipv6_dst);
1790         }
1791         if (is_ip_any(flow)) {
1792             memset(&wc->masks.nw_proto, 0xff, sizeof wc->masks.nw_proto);
1793             flow_unwildcard_tp_ports(flow, wc);
1794         }
1795         wc->masks.vlan_tci |= htons(VLAN_VID_MASK | VLAN_CFI);
1796         break;
1797
1798     case NX_HASH_FIELDS_SYMMETRIC_L3L4_UDP:
1799         if (is_ip_any(flow) && flow->nw_proto == IPPROTO_UDP) {
1800             memset(&wc->masks.tp_src, 0xff, sizeof wc->masks.tp_src);
1801             memset(&wc->masks.tp_dst, 0xff, sizeof wc->masks.tp_dst);
1802         }
1803         /* no break */
1804     case NX_HASH_FIELDS_SYMMETRIC_L3L4:
1805         if (flow->dl_type == htons(ETH_TYPE_IP)) {
1806             memset(&wc->masks.nw_src, 0xff, sizeof wc->masks.nw_src);
1807             memset(&wc->masks.nw_dst, 0xff, sizeof wc->masks.nw_dst);
1808         } else if (flow->dl_type == htons(ETH_TYPE_IPV6)) {
1809             memset(&wc->masks.ipv6_src, 0xff, sizeof wc->masks.ipv6_src);
1810             memset(&wc->masks.ipv6_dst, 0xff, sizeof wc->masks.ipv6_dst);
1811         } else {
1812             break; /* non-IP flow */
1813         }
1814
1815         memset(&wc->masks.nw_proto, 0xff, sizeof wc->masks.nw_proto);
1816         if (flow->nw_proto == IPPROTO_TCP || flow->nw_proto == IPPROTO_SCTP) {
1817             memset(&wc->masks.tp_src, 0xff, sizeof wc->masks.tp_src);
1818             memset(&wc->masks.tp_dst, 0xff, sizeof wc->masks.tp_dst);
1819         }
1820         break;
1821
1822     default:
1823         OVS_NOT_REACHED();
1824     }
1825 }
1826
1827 /* Hashes the portions of 'flow' designated by 'fields'. */
1828 uint32_t
1829 flow_hash_fields(const struct flow *flow, enum nx_hash_fields fields,
1830                  uint16_t basis)
1831 {
1832     switch (fields) {
1833
1834     case NX_HASH_FIELDS_ETH_SRC:
1835         return jhash_bytes(&flow->dl_src, sizeof flow->dl_src, basis);
1836
1837     case NX_HASH_FIELDS_SYMMETRIC_L4:
1838         return flow_hash_symmetric_l4(flow, basis);
1839
1840     case NX_HASH_FIELDS_SYMMETRIC_L3L4:
1841         return flow_hash_symmetric_l3l4(flow, basis, false);
1842
1843     case NX_HASH_FIELDS_SYMMETRIC_L3L4_UDP:
1844         return flow_hash_symmetric_l3l4(flow, basis, true);
1845
1846     }
1847
1848     OVS_NOT_REACHED();
1849 }
1850
1851 /* Returns a string representation of 'fields'. */
1852 const char *
1853 flow_hash_fields_to_str(enum nx_hash_fields fields)
1854 {
1855     switch (fields) {
1856     case NX_HASH_FIELDS_ETH_SRC: return "eth_src";
1857     case NX_HASH_FIELDS_SYMMETRIC_L4: return "symmetric_l4";
1858     case NX_HASH_FIELDS_SYMMETRIC_L3L4: return "symmetric_l3l4";
1859     case NX_HASH_FIELDS_SYMMETRIC_L3L4_UDP: return "symmetric_l3l4+udp";
1860     default: return "<unknown>";
1861     }
1862 }
1863
1864 /* Returns true if the value of 'fields' is supported. Otherwise false. */
1865 bool
1866 flow_hash_fields_valid(enum nx_hash_fields fields)
1867 {
1868     return fields == NX_HASH_FIELDS_ETH_SRC
1869         || fields == NX_HASH_FIELDS_SYMMETRIC_L4
1870         || fields == NX_HASH_FIELDS_SYMMETRIC_L3L4
1871         || fields == NX_HASH_FIELDS_SYMMETRIC_L3L4_UDP;
1872 }
1873
1874 /* Returns a hash value for the bits of 'flow' that are active based on
1875  * 'wc', given 'basis'. */
1876 uint32_t
1877 flow_hash_in_wildcards(const struct flow *flow,
1878                        const struct flow_wildcards *wc, uint32_t basis)
1879 {
1880     const uint64_t *wc_u64 = (const uint64_t *) &wc->masks;
1881     const uint64_t *flow_u64 = (const uint64_t *) flow;
1882     uint32_t hash;
1883     size_t i;
1884
1885     hash = basis;
1886     for (i = 0; i < FLOW_U64S; i++) {
1887         hash = hash_add64(hash, flow_u64[i] & wc_u64[i]);
1888     }
1889     return hash_finish(hash, 8 * FLOW_U64S);
1890 }
1891
1892 /* Sets the VLAN VID that 'flow' matches to 'vid', which is interpreted as an
1893  * OpenFlow 1.0 "dl_vlan" value:
1894  *
1895  *      - If it is in the range 0...4095, 'flow->vlan_tci' is set to match
1896  *        that VLAN.  Any existing PCP match is unchanged (it becomes 0 if
1897  *        'flow' previously matched packets without a VLAN header).
1898  *
1899  *      - If it is OFP_VLAN_NONE, 'flow->vlan_tci' is set to match a packet
1900  *        without a VLAN tag.
1901  *
1902  *      - Other values of 'vid' should not be used. */
1903 void
1904 flow_set_dl_vlan(struct flow *flow, ovs_be16 vid)
1905 {
1906     if (vid == htons(OFP10_VLAN_NONE)) {
1907         flow->vlan_tci = htons(0);
1908     } else {
1909         vid &= htons(VLAN_VID_MASK);
1910         flow->vlan_tci &= ~htons(VLAN_VID_MASK);
1911         flow->vlan_tci |= htons(VLAN_CFI) | vid;
1912     }
1913 }
1914
1915 /* Sets the VLAN VID that 'flow' matches to 'vid', which is interpreted as an
1916  * OpenFlow 1.2 "vlan_vid" value, that is, the low 13 bits of 'vlan_tci' (VID
1917  * plus CFI). */
1918 void
1919 flow_set_vlan_vid(struct flow *flow, ovs_be16 vid)
1920 {
1921     ovs_be16 mask = htons(VLAN_VID_MASK | VLAN_CFI);
1922     flow->vlan_tci &= ~mask;
1923     flow->vlan_tci |= vid & mask;
1924 }
1925
1926 /* Sets the VLAN PCP that 'flow' matches to 'pcp', which should be in the
1927  * range 0...7.
1928  *
1929  * This function has no effect on the VLAN ID that 'flow' matches.
1930  *
1931  * After calling this function, 'flow' will not match packets without a VLAN
1932  * header. */
1933 void
1934 flow_set_vlan_pcp(struct flow *flow, uint8_t pcp)
1935 {
1936     pcp &= 0x07;
1937     flow->vlan_tci &= ~htons(VLAN_PCP_MASK);
1938     flow->vlan_tci |= htons((pcp << VLAN_PCP_SHIFT) | VLAN_CFI);
1939 }
1940
1941 /* Returns the number of MPLS LSEs present in 'flow'
1942  *
1943  * Returns 0 if the 'dl_type' of 'flow' is not an MPLS ethernet type.
1944  * Otherwise traverses 'flow''s MPLS label stack stopping at the
1945  * first entry that has the BoS bit set. If no such entry exists then
1946  * the maximum number of LSEs that can be stored in 'flow' is returned.
1947  */
1948 int
1949 flow_count_mpls_labels(const struct flow *flow, struct flow_wildcards *wc)
1950 {
1951     /* dl_type is always masked. */
1952     if (eth_type_mpls(flow->dl_type)) {
1953         int i;
1954         int cnt;
1955
1956         cnt = 0;
1957         for (i = 0; i < FLOW_MAX_MPLS_LABELS; i++) {
1958             if (wc) {
1959                 wc->masks.mpls_lse[i] |= htonl(MPLS_BOS_MASK);
1960             }
1961             if (flow->mpls_lse[i] & htonl(MPLS_BOS_MASK)) {
1962                 return i + 1;
1963             }
1964             if (flow->mpls_lse[i]) {
1965                 cnt++;
1966             }
1967         }
1968         return cnt;
1969     } else {
1970         return 0;
1971     }
1972 }
1973
1974 /* Returns the number consecutive of MPLS LSEs, starting at the
1975  * innermost LSE, that are common in 'a' and 'b'.
1976  *
1977  * 'an' must be flow_count_mpls_labels(a).
1978  * 'bn' must be flow_count_mpls_labels(b).
1979  */
1980 int
1981 flow_count_common_mpls_labels(const struct flow *a, int an,
1982                               const struct flow *b, int bn,
1983                               struct flow_wildcards *wc)
1984 {
1985     int min_n = MIN(an, bn);
1986     if (min_n == 0) {
1987         return 0;
1988     } else {
1989         int common_n = 0;
1990         int a_last = an - 1;
1991         int b_last = bn - 1;
1992         int i;
1993
1994         for (i = 0; i < min_n; i++) {
1995             if (wc) {
1996                 wc->masks.mpls_lse[a_last - i] = OVS_BE32_MAX;
1997                 wc->masks.mpls_lse[b_last - i] = OVS_BE32_MAX;
1998             }
1999             if (a->mpls_lse[a_last - i] != b->mpls_lse[b_last - i]) {
2000                 break;
2001             } else {
2002                 common_n++;
2003             }
2004         }
2005
2006         return common_n;
2007     }
2008 }
2009
2010 /* Adds a new outermost MPLS label to 'flow' and changes 'flow''s Ethernet type
2011  * to 'mpls_eth_type', which must be an MPLS Ethertype.
2012  *
2013  * If the new label is the first MPLS label in 'flow', it is generated as;
2014  *
2015  *     - label: 2, if 'flow' is IPv6, otherwise 0.
2016  *
2017  *     - TTL: IPv4 or IPv6 TTL, if present and nonzero, otherwise 64.
2018  *
2019  *     - TC: IPv4 or IPv6 TOS, if present, otherwise 0.
2020  *
2021  *     - BoS: 1.
2022  *
2023  * If the new label is the second or later label MPLS label in 'flow', it is
2024  * generated as;
2025  *
2026  *     - label: Copied from outer label.
2027  *
2028  *     - TTL: Copied from outer label.
2029  *
2030  *     - TC: Copied from outer label.
2031  *
2032  *     - BoS: 0.
2033  *
2034  * 'n' must be flow_count_mpls_labels(flow).  'n' must be less than
2035  * FLOW_MAX_MPLS_LABELS (because otherwise flow->mpls_lse[] would overflow).
2036  */
2037 void
2038 flow_push_mpls(struct flow *flow, int n, ovs_be16 mpls_eth_type,
2039                struct flow_wildcards *wc)
2040 {
2041     ovs_assert(eth_type_mpls(mpls_eth_type));
2042     ovs_assert(n < FLOW_MAX_MPLS_LABELS);
2043
2044     if (n) {
2045         int i;
2046
2047         if (wc) {
2048             memset(&wc->masks.mpls_lse, 0xff, sizeof *wc->masks.mpls_lse * n);
2049         }
2050         for (i = n; i >= 1; i--) {
2051             flow->mpls_lse[i] = flow->mpls_lse[i - 1];
2052         }
2053         flow->mpls_lse[0] = (flow->mpls_lse[1] & htonl(~MPLS_BOS_MASK));
2054     } else {
2055         int label = 0;          /* IPv4 Explicit Null. */
2056         int tc = 0;
2057         int ttl = 64;
2058
2059         if (flow->dl_type == htons(ETH_TYPE_IPV6)) {
2060             label = 2;
2061         }
2062
2063         if (is_ip_any(flow)) {
2064             tc = (flow->nw_tos & IP_DSCP_MASK) >> 2;
2065             if (wc) {
2066                 wc->masks.nw_tos |= IP_DSCP_MASK;
2067                 wc->masks.nw_ttl = 0xff;
2068             }
2069
2070             if (flow->nw_ttl) {
2071                 ttl = flow->nw_ttl;
2072             }
2073         }
2074
2075         flow->mpls_lse[0] = set_mpls_lse_values(ttl, tc, 1, htonl(label));
2076
2077         /* Clear all L3 and L4 fields and dp_hash. */
2078         BUILD_ASSERT(FLOW_WC_SEQ == 35);
2079         memset((char *) flow + FLOW_SEGMENT_2_ENDS_AT, 0,
2080                sizeof(struct flow) - FLOW_SEGMENT_2_ENDS_AT);
2081         flow->dp_hash = 0;
2082     }
2083     flow->dl_type = mpls_eth_type;
2084 }
2085
2086 /* Tries to remove the outermost MPLS label from 'flow'.  Returns true if
2087  * successful, false otherwise.  On success, sets 'flow''s Ethernet type to
2088  * 'eth_type'.
2089  *
2090  * 'n' must be flow_count_mpls_labels(flow). */
2091 bool
2092 flow_pop_mpls(struct flow *flow, int n, ovs_be16 eth_type,
2093               struct flow_wildcards *wc)
2094 {
2095     int i;
2096
2097     if (n == 0) {
2098         /* Nothing to pop. */
2099         return false;
2100     } else if (n == FLOW_MAX_MPLS_LABELS) {
2101         if (wc) {
2102             wc->masks.mpls_lse[n - 1] |= htonl(MPLS_BOS_MASK);
2103         }
2104         if (!(flow->mpls_lse[n - 1] & htonl(MPLS_BOS_MASK))) {
2105             /* Can't pop because don't know what to fill in mpls_lse[n - 1]. */
2106             return false;
2107         }
2108     }
2109
2110     if (wc) {
2111         memset(&wc->masks.mpls_lse[1], 0xff,
2112                sizeof *wc->masks.mpls_lse * (n - 1));
2113     }
2114     for (i = 1; i < n; i++) {
2115         flow->mpls_lse[i - 1] = flow->mpls_lse[i];
2116     }
2117     flow->mpls_lse[n - 1] = 0;
2118     flow->dl_type = eth_type;
2119     return true;
2120 }
2121
2122 /* Sets the MPLS Label that 'flow' matches to 'label', which is interpreted
2123  * as an OpenFlow 1.1 "mpls_label" value. */
2124 void
2125 flow_set_mpls_label(struct flow *flow, int idx, ovs_be32 label)
2126 {
2127     set_mpls_lse_label(&flow->mpls_lse[idx], label);
2128 }
2129
2130 /* Sets the MPLS TTL that 'flow' matches to 'ttl', which should be in the
2131  * range 0...255. */
2132 void
2133 flow_set_mpls_ttl(struct flow *flow, int idx, uint8_t ttl)
2134 {
2135     set_mpls_lse_ttl(&flow->mpls_lse[idx], ttl);
2136 }
2137
2138 /* Sets the MPLS TC that 'flow' matches to 'tc', which should be in the
2139  * range 0...7. */
2140 void
2141 flow_set_mpls_tc(struct flow *flow, int idx, uint8_t tc)
2142 {
2143     set_mpls_lse_tc(&flow->mpls_lse[idx], tc);
2144 }
2145
2146 /* Sets the MPLS BOS bit that 'flow' matches to which should be 0 or 1. */
2147 void
2148 flow_set_mpls_bos(struct flow *flow, int idx, uint8_t bos)
2149 {
2150     set_mpls_lse_bos(&flow->mpls_lse[idx], bos);
2151 }
2152
2153 /* Sets the entire MPLS LSE. */
2154 void
2155 flow_set_mpls_lse(struct flow *flow, int idx, ovs_be32 lse)
2156 {
2157     flow->mpls_lse[idx] = lse;
2158 }
2159
2160 static size_t
2161 flow_compose_l4(struct dp_packet *p, const struct flow *flow)
2162 {
2163     size_t l4_len = 0;
2164
2165     if (!(flow->nw_frag & FLOW_NW_FRAG_ANY)
2166         || !(flow->nw_frag & FLOW_NW_FRAG_LATER)) {
2167         if (flow->nw_proto == IPPROTO_TCP) {
2168             struct tcp_header *tcp;
2169
2170             l4_len = sizeof *tcp;
2171             tcp = dp_packet_put_zeros(p, l4_len);
2172             tcp->tcp_src = flow->tp_src;
2173             tcp->tcp_dst = flow->tp_dst;
2174             tcp->tcp_ctl = TCP_CTL(ntohs(flow->tcp_flags), 5);
2175         } else if (flow->nw_proto == IPPROTO_UDP) {
2176             struct udp_header *udp;
2177
2178             l4_len = sizeof *udp;
2179             udp = dp_packet_put_zeros(p, l4_len);
2180             udp->udp_src = flow->tp_src;
2181             udp->udp_dst = flow->tp_dst;
2182         } else if (flow->nw_proto == IPPROTO_SCTP) {
2183             struct sctp_header *sctp;
2184
2185             l4_len = sizeof *sctp;
2186             sctp = dp_packet_put_zeros(p, l4_len);
2187             sctp->sctp_src = flow->tp_src;
2188             sctp->sctp_dst = flow->tp_dst;
2189         } else if (flow->nw_proto == IPPROTO_ICMP) {
2190             struct icmp_header *icmp;
2191
2192             l4_len = sizeof *icmp;
2193             icmp = dp_packet_put_zeros(p, l4_len);
2194             icmp->icmp_type = ntohs(flow->tp_src);
2195             icmp->icmp_code = ntohs(flow->tp_dst);
2196             icmp->icmp_csum = csum(icmp, ICMP_HEADER_LEN);
2197         } else if (flow->nw_proto == IPPROTO_IGMP) {
2198             struct igmp_header *igmp;
2199
2200             l4_len = sizeof *igmp;
2201             igmp = dp_packet_put_zeros(p, l4_len);
2202             igmp->igmp_type = ntohs(flow->tp_src);
2203             igmp->igmp_code = ntohs(flow->tp_dst);
2204             put_16aligned_be32(&igmp->group, flow->igmp_group_ip4);
2205             igmp->igmp_csum = csum(igmp, IGMP_HEADER_LEN);
2206         } else if (flow->nw_proto == IPPROTO_ICMPV6) {
2207             struct icmp6_hdr *icmp;
2208
2209             l4_len = sizeof *icmp;
2210             icmp = dp_packet_put_zeros(p, l4_len);
2211             icmp->icmp6_type = ntohs(flow->tp_src);
2212             icmp->icmp6_code = ntohs(flow->tp_dst);
2213
2214             if (icmp->icmp6_code == 0 &&
2215                 (icmp->icmp6_type == ND_NEIGHBOR_SOLICIT ||
2216                  icmp->icmp6_type == ND_NEIGHBOR_ADVERT)) {
2217                 struct in6_addr *nd_target;
2218                 struct ovs_nd_opt *nd_opt;
2219
2220                 l4_len += sizeof *nd_target;
2221                 nd_target = dp_packet_put_zeros(p, sizeof *nd_target);
2222                 *nd_target = flow->nd_target;
2223
2224                 if (!eth_addr_is_zero(flow->arp_sha)) {
2225                     l4_len += 8;
2226                     nd_opt = dp_packet_put_zeros(p, 8);
2227                     nd_opt->nd_opt_len = 1;
2228                     nd_opt->nd_opt_type = ND_OPT_SOURCE_LINKADDR;
2229                     nd_opt->nd_opt_mac = flow->arp_sha;
2230                 }
2231                 if (!eth_addr_is_zero(flow->arp_tha)) {
2232                     l4_len += 8;
2233                     nd_opt = dp_packet_put_zeros(p, 8);
2234                     nd_opt->nd_opt_len = 1;
2235                     nd_opt->nd_opt_type = ND_OPT_TARGET_LINKADDR;
2236                     nd_opt->nd_opt_mac = flow->arp_tha;
2237                 }
2238             }
2239             icmp->icmp6_cksum = (OVS_FORCE uint16_t)
2240                 csum(icmp, (char *)dp_packet_tail(p) - (char *)icmp);
2241         }
2242     }
2243     return l4_len;
2244 }
2245
2246 /* Puts into 'b' a packet that flow_extract() would parse as having the given
2247  * 'flow'.
2248  *
2249  * (This is useful only for testing, obviously, and the packet isn't really
2250  * valid. It hasn't got some checksums filled in, for one, and lots of fields
2251  * are just zeroed.) */
2252 void
2253 flow_compose(struct dp_packet *p, const struct flow *flow)
2254 {
2255     size_t l4_len;
2256
2257     /* eth_compose() sets l3 pointer and makes sure it is 32-bit aligned. */
2258     eth_compose(p, flow->dl_dst, flow->dl_src, ntohs(flow->dl_type), 0);
2259     if (flow->dl_type == htons(FLOW_DL_TYPE_NONE)) {
2260         struct eth_header *eth = dp_packet_l2(p);
2261         eth->eth_type = htons(dp_packet_size(p));
2262         return;
2263     }
2264
2265     if (flow->vlan_tci & htons(VLAN_CFI)) {
2266         eth_push_vlan(p, htons(ETH_TYPE_VLAN), flow->vlan_tci);
2267     }
2268
2269     if (flow->dl_type == htons(ETH_TYPE_IP)) {
2270         struct ip_header *ip;
2271
2272         ip = dp_packet_put_zeros(p, sizeof *ip);
2273         ip->ip_ihl_ver = IP_IHL_VER(5, 4);
2274         ip->ip_tos = flow->nw_tos;
2275         ip->ip_ttl = flow->nw_ttl;
2276         ip->ip_proto = flow->nw_proto;
2277         put_16aligned_be32(&ip->ip_src, flow->nw_src);
2278         put_16aligned_be32(&ip->ip_dst, flow->nw_dst);
2279
2280         if (flow->nw_frag & FLOW_NW_FRAG_ANY) {
2281             ip->ip_frag_off |= htons(IP_MORE_FRAGMENTS);
2282             if (flow->nw_frag & FLOW_NW_FRAG_LATER) {
2283                 ip->ip_frag_off |= htons(100);
2284             }
2285         }
2286
2287         dp_packet_set_l4(p, dp_packet_tail(p));
2288
2289         l4_len = flow_compose_l4(p, flow);
2290
2291         ip = dp_packet_l3(p);
2292         ip->ip_tot_len = htons(p->l4_ofs - p->l3_ofs + l4_len);
2293         ip->ip_csum = csum(ip, sizeof *ip);
2294     } else if (flow->dl_type == htons(ETH_TYPE_IPV6)) {
2295         struct ovs_16aligned_ip6_hdr *nh;
2296
2297         nh = dp_packet_put_zeros(p, sizeof *nh);
2298         put_16aligned_be32(&nh->ip6_flow, htonl(6 << 28) |
2299                            htonl(flow->nw_tos << 20) | flow->ipv6_label);
2300         nh->ip6_hlim = flow->nw_ttl;
2301         nh->ip6_nxt = flow->nw_proto;
2302
2303         memcpy(&nh->ip6_src, &flow->ipv6_src, sizeof(nh->ip6_src));
2304         memcpy(&nh->ip6_dst, &flow->ipv6_dst, sizeof(nh->ip6_dst));
2305
2306         dp_packet_set_l4(p, dp_packet_tail(p));
2307
2308         l4_len = flow_compose_l4(p, flow);
2309
2310         nh = dp_packet_l3(p);
2311         nh->ip6_plen = htons(l4_len);
2312     } else if (flow->dl_type == htons(ETH_TYPE_ARP) ||
2313                flow->dl_type == htons(ETH_TYPE_RARP)) {
2314         struct arp_eth_header *arp;
2315
2316         arp = dp_packet_put_zeros(p, sizeof *arp);
2317         dp_packet_set_l3(p, arp);
2318         arp->ar_hrd = htons(1);
2319         arp->ar_pro = htons(ETH_TYPE_IP);
2320         arp->ar_hln = ETH_ADDR_LEN;
2321         arp->ar_pln = 4;
2322         arp->ar_op = htons(flow->nw_proto);
2323
2324         if (flow->nw_proto == ARP_OP_REQUEST ||
2325             flow->nw_proto == ARP_OP_REPLY) {
2326             put_16aligned_be32(&arp->ar_spa, flow->nw_src);
2327             put_16aligned_be32(&arp->ar_tpa, flow->nw_dst);
2328             arp->ar_sha = flow->arp_sha;
2329             arp->ar_tha = flow->arp_tha;
2330         }
2331     }
2332
2333     if (eth_type_mpls(flow->dl_type)) {
2334         int n;
2335
2336         p->l2_5_ofs = p->l3_ofs;
2337         for (n = 1; n < FLOW_MAX_MPLS_LABELS; n++) {
2338             if (flow->mpls_lse[n - 1] & htonl(MPLS_BOS_MASK)) {
2339                 break;
2340             }
2341         }
2342         while (n > 0) {
2343             push_mpls(p, flow->dl_type, flow->mpls_lse[--n]);
2344         }
2345     }
2346 }
2347 \f
2348 /* Compressed flow. */
2349
2350 /* Completes an initialization of 'dst' as a miniflow copy of 'src' begun by
2351  * the caller.  The caller must have already computed 'dst->map' properly to
2352  * indicate the significant uint64_t elements of 'src'.
2353  *
2354  * Normally the significant elements are the ones that are non-zero.  However,
2355  * when a miniflow is initialized from a (mini)mask, the values can be zeroes,
2356  * so that the flow and mask always have the same maps. */
2357 void
2358 miniflow_init(struct miniflow *dst, const struct flow *src)
2359 {
2360     uint64_t *dst_u64 = miniflow_values(dst);
2361     size_t idx;
2362
2363     FLOWMAP_FOR_EACH_INDEX(idx, dst->map) {
2364         *dst_u64++ = flow_u64_value(src, idx);
2365     }
2366 }
2367
2368 /* Initialize the maps of 'flow' from 'src'. */
2369 void
2370 miniflow_map_init(struct miniflow *flow, const struct flow *src)
2371 {
2372     /* Initialize map, counting the number of nonzero elements. */
2373     flowmap_init(&flow->map);
2374     for (size_t i = 0; i < FLOW_U64S; i++) {
2375         if (flow_u64_value(src, i)) {
2376             flowmap_set(&flow->map, i, 1);
2377         }
2378     }
2379 }
2380
2381 /* Allocates 'n' count of miniflows, consecutive in memory, initializing the
2382  * map of each from 'src'.
2383  * Returns the size of the miniflow data. */
2384 size_t
2385 miniflow_alloc(struct miniflow *dsts[], size_t n, const struct miniflow *src)
2386 {
2387     size_t n_values = miniflow_n_values(src);
2388     size_t data_size = MINIFLOW_VALUES_SIZE(n_values);
2389     struct miniflow *dst = xmalloc(n * (sizeof *src + data_size));
2390     size_t i;
2391
2392     COVERAGE_INC(miniflow_malloc);
2393
2394     for (i = 0; i < n; i++) {
2395         *dst = *src;   /* Copy maps. */
2396         dsts[i] = dst;
2397         dst += 1;      /* Just past the maps. */
2398         dst = (struct miniflow *)((uint64_t *)dst + n_values); /* Skip data. */
2399     }
2400     return data_size;
2401 }
2402
2403 /* Returns a miniflow copy of 'src'.  The caller must eventually free() the
2404  * returned miniflow. */
2405 struct miniflow *
2406 miniflow_create(const struct flow *src)
2407 {
2408     struct miniflow tmp;
2409     struct miniflow *dst;
2410
2411     miniflow_map_init(&tmp, src);
2412
2413     miniflow_alloc(&dst, 1, &tmp);
2414     miniflow_init(dst, src);
2415     return dst;
2416 }
2417
2418 /* Initializes 'dst' as a copy of 'src'.  The caller must have allocated
2419  * 'dst' to have inline space for 'n_values' data in 'src'. */
2420 void
2421 miniflow_clone(struct miniflow *dst, const struct miniflow *src,
2422                size_t n_values)
2423 {
2424     *dst = *src;   /* Copy maps. */
2425     memcpy(miniflow_values(dst), miniflow_get_values(src),
2426            MINIFLOW_VALUES_SIZE(n_values));
2427 }
2428
2429 /* Initializes 'dst' as a copy of 'src'. */
2430 void
2431 miniflow_expand(const struct miniflow *src, struct flow *dst)
2432 {
2433     memset(dst, 0, sizeof *dst);
2434     flow_union_with_miniflow(dst, src);
2435 }
2436
2437 /* Returns true if 'a' and 'b' are equal miniflows, false otherwise. */
2438 bool
2439 miniflow_equal(const struct miniflow *a, const struct miniflow *b)
2440 {
2441     const uint64_t *ap = miniflow_get_values(a);
2442     const uint64_t *bp = miniflow_get_values(b);
2443
2444     /* This is mostly called after a matching hash, so it is highly likely that
2445      * the maps are equal as well. */
2446     if (OVS_LIKELY(flowmap_equal(a->map, b->map))) {
2447         return !memcmp(ap, bp, miniflow_n_values(a) * sizeof *ap);
2448     } else {
2449         size_t idx;
2450
2451         FLOWMAP_FOR_EACH_INDEX (idx, flowmap_or(a->map, b->map)) {
2452             if ((flowmap_is_set(&a->map, idx) ? *ap++ : 0)
2453                 != (flowmap_is_set(&b->map, idx) ? *bp++ : 0)) {
2454                 return false;
2455             }
2456         }
2457     }
2458
2459     return true;
2460 }
2461
2462 /* Returns false if 'a' and 'b' differ at the places where there are 1-bits
2463  * in 'mask', true otherwise. */
2464 bool
2465 miniflow_equal_in_minimask(const struct miniflow *a, const struct miniflow *b,
2466                            const struct minimask *mask)
2467 {
2468     const uint64_t *p = miniflow_get_values(&mask->masks);
2469     size_t idx;
2470
2471     FLOWMAP_FOR_EACH_INDEX(idx, mask->masks.map) {
2472         if ((miniflow_get(a, idx) ^ miniflow_get(b, idx)) & *p++) {
2473             return false;
2474         }
2475     }
2476
2477     return true;
2478 }
2479
2480 /* Returns true if 'a' and 'b' are equal at the places where there are 1-bits
2481  * in 'mask', false if they differ. */
2482 bool
2483 miniflow_equal_flow_in_minimask(const struct miniflow *a, const struct flow *b,
2484                                 const struct minimask *mask)
2485 {
2486     const uint64_t *p = miniflow_get_values(&mask->masks);
2487     size_t idx;
2488
2489     FLOWMAP_FOR_EACH_INDEX(idx, mask->masks.map) {
2490         if ((miniflow_get(a, idx) ^ flow_u64_value(b, idx)) & *p++) {
2491             return false;
2492         }
2493     }
2494
2495     return true;
2496 }
2497
2498 \f
2499 void
2500 minimask_init(struct minimask *mask, const struct flow_wildcards *wc)
2501 {
2502     miniflow_init(&mask->masks, &wc->masks);
2503 }
2504
2505 /* Returns a minimask copy of 'wc'.  The caller must eventually free the
2506  * returned minimask with free(). */
2507 struct minimask *
2508 minimask_create(const struct flow_wildcards *wc)
2509 {
2510     return (struct minimask *)miniflow_create(&wc->masks);
2511 }
2512
2513 /* Initializes 'dst_' as the bit-wise "and" of 'a_' and 'b_'.
2514  *
2515  * The caller must provide room for FLOW_U64S "uint64_t"s in 'storage', which
2516  * must follow '*dst_' in memory, for use by 'dst_'.  The caller must *not*
2517  * free 'dst_' free(). */
2518 void
2519 minimask_combine(struct minimask *dst_,
2520                  const struct minimask *a_, const struct minimask *b_,
2521                  uint64_t storage[FLOW_U64S])
2522 {
2523     struct miniflow *dst = &dst_->masks;
2524     uint64_t *dst_values = storage;
2525     const struct miniflow *a = &a_->masks;
2526     const struct miniflow *b = &b_->masks;
2527     size_t idx;
2528
2529     flowmap_init(&dst->map);
2530
2531     FLOWMAP_FOR_EACH_INDEX(idx, flowmap_and(a->map, b->map)) {
2532         /* Both 'a' and 'b' have non-zero data at 'idx'. */
2533         uint64_t mask = *miniflow_get__(a, idx) & *miniflow_get__(b, idx);
2534
2535         if (mask) {
2536             flowmap_set(&dst->map, idx, 1);
2537             *dst_values++ = mask;
2538         }
2539     }
2540 }
2541
2542 /* Initializes 'wc' as a copy of 'mask'. */
2543 void
2544 minimask_expand(const struct minimask *mask, struct flow_wildcards *wc)
2545 {
2546     miniflow_expand(&mask->masks, &wc->masks);
2547 }
2548
2549 /* Returns true if 'a' and 'b' are the same flow mask, false otherwise.
2550  * Minimasks may not have zero data values, so for the minimasks to be the
2551  * same, they need to have the same map and the same data values. */
2552 bool
2553 minimask_equal(const struct minimask *a, const struct minimask *b)
2554 {
2555     return !memcmp(a, b, sizeof *a
2556                    + MINIFLOW_VALUES_SIZE(miniflow_n_values(&a->masks)));
2557 }
2558
2559 /* Returns true if at least one bit matched by 'b' is wildcarded by 'a',
2560  * false otherwise. */
2561 bool
2562 minimask_has_extra(const struct minimask *a, const struct minimask *b)
2563 {
2564     const uint64_t *bp = miniflow_get_values(&b->masks);
2565     size_t idx;
2566
2567     FLOWMAP_FOR_EACH_INDEX(idx, b->masks.map) {
2568         uint64_t b_u64 = *bp++;
2569
2570         /* 'b_u64' is non-zero, check if the data in 'a' is either zero
2571          * or misses some of the bits in 'b_u64'. */
2572         if (!MINIFLOW_IN_MAP(&a->masks, idx)
2573             || ((*miniflow_get__(&a->masks, idx) & b_u64) != b_u64)) {
2574             return true; /* 'a' wildcards some bits 'b' doesn't. */
2575         }
2576     }
2577
2578     return false;
2579 }