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